Skip to content

Commit f1a757b

Browse files
committed
Merge remote-tracking branch 'origin/main' into adr/0033-per-node-evidence
# Conflicts: # CHANGELOG.md
2 parents 2c7c090 + a65d518 commit f1a757b

8 files changed

Lines changed: 432 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,41 @@ oh-my-graph is **alpha software**. The graph YAML schema, the CLI, and the
1212

1313
### Changed
1414

15+
- **An unresolvable `{{ inputs.x }}` or `{{ artifacts.id }}` now says that a
16+
merely-quoted placeholder is resolved too, and how to quote one.** The two
17+
reasons were written as if the graph had meant the token — the artifact one
18+
asserts "its producing node has not completed" about a node that may not
19+
exist — so a prompt that only explains the syntax to the model got a
20+
diagnostic pointing at wiring that was never there.
21+
22+
Before, both errors said only what was missing:
23+
24+
```
25+
cannot resolve {{ inputs.demo }}: no such input was provided
26+
cannot resolve {{ artifacts.nosuch }}: artifact not available (its producing node has not completed)
27+
```
28+
29+
After, each carries a second line stating the rule and the way out:
30+
31+
```
32+
cannot resolve {{ inputs.demo }}: no such input was provided
33+
note: every {{ ... }} in a prompt is resolved, including one that is only being quoted or explained — to keep such text literal, break the two braces apart ("{ {"), or pass the text in as an input or artifact instead of writing it in the prompt
34+
```
35+
36+
The artifacts form gains the same single line after `artifact not available
37+
(its producing node has not completed)`. The command those two captures came
38+
from is the address for them — a graph whose prompts only *mention* the
39+
syntax:
40+
41+
```sh
42+
go run ./cmd/oh-my-graph run /tmp/omg-repro-placeholder.yaml --dry-run
43+
```
44+
45+
Appended at exactly those two sites and nowhere else: a filter on a feedback
46+
token and an unreadable artifact file are real wiring bugs, where this advice
47+
would mislead. Wording only — no escaping syntax, no flag, and what
48+
`Interpolate` resolves is unchanged.
49+
1550
- **`runs list` collapses the per-run skip warnings into one summary line, and
1651
the detail moves behind `--show-skipped`.** Option chosen: *collapse by
1752
default, restore on demand* — not silence, and not a filter. Every skipped
@@ -69,6 +104,22 @@ oh-my-graph is **alpha software**. The graph YAML schema, the CLI, and the
69104
reason counts and this detail lives in `internal/runstatus`, so the four
70105
surfaces answer for the same directory with the same words instead of four
71106
different ones.
107+
108+
- **A guard over the user-facing documents, run by `make test`:** `go test
109+
./internal/docsclaims/`. It **walks** the document set rather than listing it
110+
— every `*.md` at the repository root and every `*.md` under `docs/` and
111+
`plugin/` — so a document that lands tomorrow is scanned tomorrow, and the
112+
roots it must reach are asserted present rather than used to pick what gets
113+
read. What it fails on is narrow: the two absolutes ADR 0032 falsified, stated
114+
anywhere with nothing conditioning them. Each failure carries the file, the
115+
line, the sentence and the code address that falsifies it
116+
(`internal/coordinator/coordinator.go:763-765`,
117+
`internal/runner/claude_protocol.go:55-56`), so it can be retraced instead of
118+
believed. It demands nothing of any document: a file that states neither claim
119+
is never a finding. It was watched failing before it was trusted — the
120+
pre-correction `docs/EXAMPLES.md` wording put back verbatim, the failure read,
121+
the file restored.
122+
72123
### Fixed
73124

74125
- **The planner now shares the assessor's bounded spawn retry.** #214 gave the
@@ -116,6 +167,18 @@ oh-my-graph is **alpha software**. The graph YAML schema, the CLI, and the
116167
refusal now says what that refusal costs in coverage. Both name the same
117168
route rather than warning without one: `run`, on a hand-written graph, with
118169
your own `verify:` on whichever nodes you mean.
170+
- **Five documentation sentences that v0.11.0 made false**, each corrected
171+
against the code rather than against the surrounding prose. `docs/EXAMPLES.md`
172+
told a reader whose `auto` run depended on an MCP server that it "will stop
173+
working", full stop, when `--accept-loaded-user-config` is exactly the door out
174+
of that (`internal/coordinator/coordinator.go:763-766` sets `StrictMCPConfig`
175+
false, and `internal/runner/claude_protocol.go:55-56` then emits no flag).
176+
`docs/LIMITATIONS.md` said no tagged build carried that flag — `git grep
177+
accept-loaded-user-config v0.11.0 -- cmd/oh-my-graph/flags.go` finds it at
178+
`:166` inside the tag — and stamped its gaps "as of v0.10.0" in three places
179+
while `cmd/oh-my-graph/version.go:9` reads `0.11.0`. The clause that survived
180+
the deletion is the true half: a run that types nothing is byte-for-byte the
181+
run that shipped in v0.10.0.
119182

120183
## [v0.11.0] - 2026-08-21
121184

CONTRIBUTING.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ handoff, retry, and halt-on-fail logic are all exercised through
3434
`map[nodeID]NodeOutcome` fixtures, so CI never needs a `claude` login and
3535
never costs money.
3636

37+
Inside that suite, `go test ./internal/docsclaims/` walks every Markdown file at
38+
the repository root and under `docs/` and `plugin/` for the absolutes ADR 0032
39+
falsified — run it instead of hand-writing a cross-check grep when a change
40+
makes a documented claim conditional.
41+
3742
One file outside the four exec-seam packages is a **sanctioned exception to
3843
"spawns nothing"**, and it is still an exception to nothing above:
3944
`cmd/oh-my-graph/skillargv_test.go` drives the real `CLIRunner` against a

docs/EXAMPLES.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,8 @@ Two things that come with it, both real:
339339

340340
- **Planned nodes are now more isolated and less capable.** They no longer see
341341
your CLAUDE.md, your hooks, or your configured MCP servers. If an `auto` run
342-
of yours depended on an MCP server, it will stop working.
342+
of yours depended on an MCP server, it will stop working unless that run types
343+
`--accept-loaded-user-config`.
343344
- **It is still not a sandbox.** MCP closure is unverified (the flag is passed
344345
because it is free, not because it was measured); which skill a node actually
345346
activates is not knowable before the model chooses it, and slash-command

docs/LIMITATIONS.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Limitations & platform notes
22

33
Detail moved out of the README: the full platform-support notes, the honest
4-
gaps as of **v0.10.0**, and what is deliberately deferred. Where a gap has
4+
gaps as of **v0.11.0**, and what is deliberately deferred. Where a gap has
55
already been closed on `main` but not in a tagged release, this file says so
66
in the paragraph that describes it rather than in the stamp.
77

@@ -51,7 +51,7 @@ On Windows, prefer WSL.
5151

5252
## Known limitations
5353

54-
Honest gaps as of v0.10.0. **This file is where they are tracked** — the issue
54+
Honest gaps as of v0.11.0. **This file is where they are tracked** — the issue
5555
numbers below name the *closed* issue each gap was carved out of, which is
5656
provenance, not a tracker: those issues asked for the feature that shipped,
5757
and were closed when it did. What survived the feature is the paragraph, here.
@@ -260,9 +260,8 @@ has no open issue behind it.
260260
and `approval_policy="never"` are argv on every node, outside the branch the
261261
flag switches, so the sandbox floor and the no-network limit above are
262262
unchanged.
263-
<br>Unreleased: no tagged build carries the flag, and a run that types
264-
nothing is byte-for-byte the run that shipped in v0.10.0 — same argv, same
265-
screens, same `state.json`.
263+
<br>A run that types nothing is byte-for-byte the run that shipped in
264+
v0.10.0 — same argv, same screens, same `state.json`.
266265
([ADR 0032](adr/0032-a-planned-node-may-carry-the-operators-configuration.md))
267266
- **`agent:` tool reconciliation is undefined and unmeasured for hand-written
268267
graphs.** When a hand-written node names a subagent, oh-my-graph does not
@@ -348,7 +347,7 @@ See [Deferred](#deferred-not-implemented) below for the full out-of-scope list.
348347

349348
## Deferred (not implemented)
350349

351-
Called out honestly — these are **not** implemented as of v0.10.0:
350+
Called out honestly — these are **not** implemented as of v0.11.0:
352351

353352
- parallel-group sugar / any DSL beyond `depends_on`. (Retry is *not* on this
354353
list any more: a node's `retry` carries `max` **and** `on`, a per-cause

0 commit comments

Comments
 (0)