v0.5.3
Four of these entries correct something this project had already published.
That is the release.
The subscription guarantee now holds on every platform it runs on (#142)
internal/childenv.Scrub compared environment keys exactly. Windows treats
env names as case-insensitive, so a lowercase anthropic_api_key survived
the scrub and reached the child — a metered API bill on a run the user was
told is inside their plan. It was documented as a native-Windows caveat in
LIMITATIONS.md while README.md and SECURITY.md stated the deletion
unconditionally.
Matching is now case-insensitive on the whole key, on every platform — not
behind a GOOS=windows build tag, deliberately: a guarantee guarded by a path
CI never runs is how this hole survived in the first place. Prefix behaviour
is unchanged (ANTHROPIC_API_KEY_BACKUP still survives) and the scrubbed set
did not grow. Reverting the fix fails a Linux test.
An agent-mapped planned node cannot invoke a skill — retraction (#144)
ADR 0017 said an excluded node "already sees your real skills, so the
exclusion costs it little", and the plan printout told users so. Measured
false, 8 spawns: arm T (the recorded argv, unchanged) fired 0 of 3; arm C1
(--tools Write → Write,Skill, six characters, nothing else) fired 3 of 3.
The node has no Skill tool, so it invokes nothing — not the staged corpus
and not the user's own, whose definitions its settings do load. The loss is
total and lands by construction on design/review/doc nodes, where a procedure
fits best.
The raw tool_use records of all ten spawns are committed, so the verdict
does not rest on a directory outside this repository. The guard is kept —
lifting it is a policy change, and ADR 0017 now carries the measurement that
would retire it.
ADR 0018's compliance baseline: 0 of 6 (#145)
Taken before the §6 planner clause exists, because afterwards the status quo's
number can never be taken. Over 6 real auto runs and 20 node transcripts:
zero git worktree add, zero git clone. Every non-compliant command was one
the planner wrote into the node's prompt, so node disobedience was never
observed.
The <50% trigger does not fire, and that is pre-registered rather than
post-hoc: the threshold judges the §6 advisory, and the baseline is by
construction advisory-free. The decision stands, resting now on §3's cleanup
costs alone — and is provisional from this date.
merge-shepherd re-waits for the checks its own fix restarted (#147)
The CI wait sat before triage, so when triage pushed a fix the checks
restarted and the merge node always met pending ones — five times in one day,
each ending in a promise reply the anchored verdict correctly rejected. A new
recheck node polls the final SHA in the foreground and answers one of
three: RECHECKED <sha>, BLOCKED <sha> (not in the pattern — the run halts
before the gate), UNSETTLED <sha> (hands off to WITHHELD). It judges the
whole check rollup, not one entry, and compares each review's commit.oid
against the head rather than assuming.
Also
- The PR node is one shape, so it is a fragment (#143). Measured before
extracting: the fivePR <url>nodes share 83 words, 75% of the shortest
prompt. The other repeated verdicts do not group by node — sixDONE
nodes share zero words — which is why averdict:schema key would
deduplicate the cheap half and leave the expensive one. servenames the build answering the page (#148). The reported symptom
— "dies silently, a stale binary holds the port" — was wrong on both halves.
What was true: aservestarted two days earlier kept serving the code it
was compiled from, and nothing said so.- Company repository names removed from test fixtures (#140); a six-item drift
sweep including a duplicate ADR number and three stale version stamps (#148).
Install: go install github.com/jitokim/oh-my-graph/cmd/oh-my-graph@v0.5.3
Full changelog: https://github.com/jitokim/oh-my-graph/blob/v0.5.3/CHANGELOG.md