Rendered from docs/process/obligations/0225-eight-run-tooling-gaps-from-run-20260929-1205-filed-together.md in the Headwater
corpus. Every document on this half of the site is typed by the taxonomy
the descriptor names: corpus.json.
Eight run-tooling gaps from run 20260929-1205, filed together
Context
hw-run-policy caps what one pass sends to the register as full records. Past the cap, one record lists the rest. Run 20260929-1205 wrote eight intake lines about the build order, its tooling and this repository's CI. The product owner ruled each one RECORD, on the fifth-merge pass, the tenth-merge pass and the end-of-run pass of that run. None names a reader outside this repository. Each item below gives the stage that found it and the issue in hand at the time. Four of the eight items are discharged, and the Discharge section states them. Four items stay open.
Obligation
The agents of the build order.
- The adjudication note for #1339 said HW-DR-0097 supersedes HW-DR-0047. The front matter of HW-DR-0097 declares
constrains. The build copied the error, and the maintainer caught it. Nothing tells an adjudicator to read a relation it names from the front matter. (build, #1339) - The Done-when of #1386 named
headwater neighborsas a graph check.neighborsranks summaries by meaning and reads no declared edge (docs/interfaces/headwater-neighbors.md). An issue that asks whether two documents are linked should nameheadwater explain, and no instruction to an agent that writes a Done-when says so. (build, #1386)
The run scripts and hooks.
hw_engine()in.claude/hooks/lib.shlooks only forengine/target/release/headwaterandengine/target/dev-release/headwater. In a tree whose only engine isengine/target/debug/headwater, whichtools/hw-cargo testleaves, the write-time hook fails open and prints nothing. (build, the red-main fix under #1366)
Parallel branches and CI.
- An edit to
docs/spec/12-check-layer.md,docs/interfaces/headwater-mcp.mdor the governs-edges evaluation moves a read-set digest in nine files underdocs/probe-results/. They are theregression-probe-transcript-*files and the campaign pilot of 2026-09-28. So a footprint of documents alone that names no probe result still regenerates them. The #1340 adjudicator's footprint missed them. HW-OBL-0224 records the same transcripts as a merge-conflict source. (build, #1340)
Discharge
Each item discharges alone, when the file it names says or does what the item asks, or when a change records why it stays. The record discharges when every item has. An item that grows a reader outside this repository leaves this record for an issue, and the record says where it went.
Three items are discharged by #1419, which merged as 16eecca0:
- The integrator had to load the
hw-run-policyskill, but itstoolslist had no Skill tool, so the #1389 integrator ran without the policy. Thetoolsline of.claude/agents/hw-integrate.mdnow namesSkill. (integrate, #1389) - A worktree-isolated parent passes its isolation to
hw-integrate, which then cannot move the shared checkout. A detached tree under.claude/worktrees/worked for the post-merge rebuild,generate,check --strictand bless, and no instruction named that route..claude/agents/hw-integrate.mdandhw-run-policynow name it. HW-OBL-0224 (its second item) and HW-OBL-0221 carry the same gap, and this record does not discharge them. (integrate, #1368) - A pull request body that said "Neither closes #1384" made GitHub list #1384 in
closingIssuesReferences, because the keyword matches inside a negation. No build agent's instructions warned against it..claude/agents/hw-build.mdnow says that aRefspull request carries no closing keyword, not even in a negated sentence. This repository has no pull request template. (parent, #1384) Since #1485 the integrator also runssh tools/run/gh-issue.sh clause-check <PR>before it enqueues. So a negated keyword that GitHub reads as a close is refused on the integrator's path unless the body accounts for every clause of that issue. A merge by hand still bypasses the check.
One item is discharged by #1518, the pull request for #1484:
tools/run/queue-done.shprinted "not queued: never removed from one" for PR #1412. The GraphQL timeline holds aRemovedFromMergeQueueEventwith reasonfailed_checksat 2026-09-29T19:09:58Z. HW-OBL-0224 records two earlier misreports of this script. The script read removals alone, so it could not tell a pull request never queued from one whose removal was not visible yet. It now reads the added and removed events together, and an add with no entry and no later removal holds the wait. (integrate, #1412)