Skip to content

fix(work-package): close the #346 review-mode defects; cite resources at section grain - #351

Merged
m2ux merged 11 commits into
workflowsfrom
workflow/346-review-mode-definition-defects
Jul 30, 2026
Merged

fix(work-package): close the #346 review-mode defects; cite resources at section grain#351
m2ux merged 11 commits into
workflowsfrom
workflow/346-review-mode-definition-defects

Conversation

@m2ux

@m2ux m2ux commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Closes the 27 definition defects issue #346 registers from the review-mode run of work-package v3.36.0. The verdict that run produced was sound; every defect is in the reporting and bookkeeping layer around it.

Two things grew out of that work and are carried here rather than deferred, because both were found by auditing this change and both touch the same files:

  • Canon — two design principles and five anti-patterns for the smells the audit passes kept finding with no entry to cite, plus a resource rename and two rule consolidations they identify.
  • Section-grain citations — principle 32 makes a citation's grain a delivery decision, which is measurable, so the corpus was measured. Twenty-two techniques now cite the sections they read, taking 209,422 characters of resource body out of the bundles that carry them. The tail is registered as Cite resources at section grain: the pre-principle-32 corpus tail #358.

Definition changes only — the paired pointer bump, guard-triage prune, walk re-baseline and DI-33's engine half are in the main-repo PR.

Required set

ID Change
DI-35 / DI-32 artifact_publish_ref is the engineering branch, never a commit sha. complete re-publishes the planning folder on that branch, so close-out, retrospective, session trace and follow-ups reach the tree a posted review already links. The format now states the ref split explicitly: engineering artifacts by branch, reviewed code by sha.
DI-31 Change-block and manual-diff citations are permanent blob URLs at the reviewed commit, built from a new reviewed_code_base_url pinned by review-diff. The old checkout-relative form died with the review worktree remove-worktree deletes at close-out.
DI-33 Cost travels on its own call. dispatch-activity gains account-every-dispatch: every dispatch's harness-reported usage is recorded as it completes, via record_usage, covering the first worker, each continue, each fresh worker after a timeout, each resume after a checkpoint yield and any out-of-band dispatch. render-token-usage reconciles the ledger against the run's actual dispatch count and, with any dispatch unaccounted, labels the figure a floor and states the unaccounted count beside it.
DI-34 Cost lives only in token-usage.md; session-trace.md reports mechanical execution and links it. The ownership claim sits in the manage-artifacts canonical-home map, so one wrong ledger yields one wrong artifact instead of two that disagree.
DI-23 The rendered Progress table drops the @ column. # is untouched — still the monotonic display index, still not a selection key.

Review-mode gating

  • DI-8unsigned-commits-prompt and resign-unsigned-commits are gated is_review_mode != true. Both are author-side; the checkpoint was asking whether to force-push a rewrite of another organisation's branch.
  • DI-18 / DI-21render-token-usage and create-complete-doc run on both paths. A review run has a verdict to close out and a cost to report.
  • DI-19 — the retrospective's one-item-at-a-time interview is unrunnable on a depth-1 worker, so it is replaced by an item budget reviewed whole. The confirm gate recorded setVariable: undefined on its only reachable option, so it becomes an action: message per checkpoint-requires-decision.
  • DI-20assumption_decisions, issue_request and comprehension_dir are declared as workflow variables, closing the three gaps in work-package scope.

Posted-comment format

review-mode was specifying table structure and nothing else, which is the root cause behind most of this group.

  • DI-9 — Strategic Review gets a findings table on the shared format (prefix SR), and a skeleton placeholder.
  • DI-10Reference, Don't Restate gains a declared budget per slot, review-summary measures against it and emits summary_budget_overruns, and the bind site carries a validate action. The rule is now checkable rather than aspirational.
  • DI-11 — a prose register: plain language, one claim per sentence, one hedge, one symbol and one location.
  • DI-13 / DI-14 / DI-16 — tables are # | @ | Finding | Severity. @ is a hyperlinked ASCII >, so filename link text stops setting the column to the width of the longest path. Disposition survives only in Prior Feedback Triage, at the far right.
  • DI-15 — caveats are one line: claim plus a link to the report section holding its basis.
  • DI-17What This Change Gets Right, between Strategic Review and Action Items.

Planning README

  • DI-22🟡 replaces , so the status meaning "being worked on now" is as visible as its full-colour siblings.
  • DI-24 / DI-25 / DI-26 — the Item cell is the row's only link slot, linked whenever the row's activity wrote or amended a file, carrying the human name alone; Description is plain text.
  • DI-28 — status tracks the deliverable, not the producer: content that lands elsewhere is complete with a repointed link, never cancelled-with-a-link.
  • DI-29 — a cancel write unlinks the seeded target that was never created.

Artifact routing and link integrity

  • DI-27 — close-out reads both registers and links them; it no longer restates open work in its own table.
  • DI-30 — new manage-artifacts::verify-artifact-links, bound as a close-out gate, resolving every planning-folder link at the publish ref rather than in the working tree. Three classes: missing relative target, citation into the review worktree, resource id emitted as a relative link.

On DI-23's anchor

The issue notes that sync-progress-status selected on the @ column, so the matching rule needed a new anchor first. Neither remaining column can be it — # is documented display-only and renumbers whenever the inventory changes — so the anchor moved off the rendered table into a row-ownership map: the seed profile's inventory keeps @ as seed data, create-readme consumes it and drops it when rendering, and sync-progress-status resolves artifact_prefix through it to the activity's Item labels. One declaration, serving readers and writers, absent from the reader-facing table.

planning-readme reorganisation

Touching this resource for DI-22 through DI-29 put six new facts into it, and that exposed a layout problem worth fixing in the same change rather than leaving for the next one: seven facts had more than one home, and the status model was spread across five sibling sections plus bullets inside Progress table, so a reader assembled it from six places.

Deduplicated:

Repetition Was Now
Status column section Verbatim restatement of one line in Status vocabulary Deleted; its one citer points at the vocabulary
seed exclusion vs path skip → cancelled/N/A 4 statements 1 seeding bullet, plus the vocabulary row's parenthetical
"status tracks the deliverable, not the producer" 3 statements 1, in Status vocabulary
unlink-on-cancel 2 full statements 1, in the transition policy
# is display-only 3 statements 2 — the definition and the selection prohibition are different claims
"do not invent alternate glyphs" 2 1
call-sites Writer: paragraph Restated its own table row and the section intro Keeps only the {mark_progress_na} rationale, the one fact in it that was not duplicated

Restructured so the file reads Template → rules for the sections it lays out → the status model → how writers address rows:

  • ## Rules now covers only the Template's own sections. Row-ownership map is demoted to #### under Progress table, where it belongs.
  • The five status sections become one ## Status parent with four children.
  • ## Matching is promoted to a peer of those two.

Anchors survive: GitHub derives them from heading text, not level, so all 43 external citations still resolve. The exception is #status-column, whose single citer (sync-progress-status step 6) is updated.

Collapsing the three scattered link-reconciliation statements into one table also closed a gap — the "complete, deliverable already at the seeded target" case was not stated anywhere before.

Fidelity was checked by probing 31 distinct facts from the pre-reorg file; none is lost. 190 → 184 lines. The first pass came out net-zero on length because the dedup savings went straight back into new prose, so there is a second tightening pass on top.

Canon additions

The audit passes over this change kept finding smells the catalogue had no entry for, so they are entered here rather than rediscovered next time.

Two design principles:

  • 31. Isolate Conditional Branches as Notes — within a Protocol step the unconditional instruction is the bullet and each when / if / otherwise branch is its own > note. A reader scanning the step sees the shape of the work without evaluating every clause to learn which parts apply. Structure comes first: a condition selecting a step, an activity or a path is a when, a condition or a declared decision, and the principle governs only what legitimately stays in prose.
  • 32. Cite Resources at Section Grain — a citation is a delivery instruction. What it resolves to (path after resources/, .md stripped, #anchor kept) is the unit the server loads, so a citation names the narrowest section carrying what the prose needs. Grain is a property of the resource across the whole technique: every distinct citation is delivered, so a bare citation beside anchored ones ships the file and those sections. Principle 30 already carried a forward reference to "the section-or-whole economy" that nothing defined; 32 is its citation half.

Five anti-patterns:

ID Catches
AP-131 resource-id-names-its-content A resource id that reads as protocol or as a bare artifact name rather than saying what the file is — the rename below
AP-132 deployment-path-in-capability A deployment path baked into a technique's Capability, coupling the abstract statement to one layout
AP-133 overlapping-rule-scopes Two rules whose triggers intersect with differing consequences and no ordering — reconcile or consolidate
AP-134 whole-resource-for-one-section A citation delivering a whole resource where the prose reads one section
AP-135 tool-contract-restated-in-protocol Protocol spelling out a tool argument's shape, which the tool's own schema states

Four existing entries were extended: AP-46 on destination naming, AP-22 on same-block duplication and its bridge-phrase tell, AP-19 on instruction-shaped rules, and AP-59's Fix now cites principle 31.

Resource rename

complete-wp.mdcomplete-wp-guide.md (git-tracked rename, seven citation sites updated). The old name read as a protocol step, and the file is a template plus the rules for filling it — AP-131.

Section-grain citations

Twelve techniques cited a resource whole while also anchoring sections of it, so both the file and those sections shipped in the eager bundle. Each now cites what its prose consults, removing 60,092 characters of resource body from the bundles carrying them:

Technique Now cites
create-readme Template; step 3 cites Rules, the home of the fill rules it was reaching through the whole file
review-code Review Criteria
review-test-suite Review Criteria and Anti-Patterns, which its report template's detection summary needs
summarize-architecture The artifact template, and Diagram Selection from step 1
retrospective The Mechanical classes subsection
create-complete-doc · execute-sub-agent · capture-dimension Template · Schema · Dimensions
respond-to-pr-review · persist-design-specification · analyze-source · create-completion-doc Both templates · the two sections the artifact is made of · Template + Conventions · Template + Rules

Two sites are deliberately unchanged. review-summary's ten citations cover 86% of review-mode, and validate-specification needs checks, categorization and verdict — in both the sections total more than the file, so the whole-resource citation is the economical one and the residue is the bundler shipping a section body when its parent is already bundled. That is server work, not a definition change.

workflow-retrospective's Mechanical classes heading now names the resolved trace rather than the tool that resolves it, so the section can be cited without a bare tool name reaching the citing Protocol through the anchor slug.

Largest citation sites

The same measurement applied beyond the mixed sites, to the ten pairs where a whole-resource citation cost the most — 149,330 characters off the bundles that carry them:

Technique Was delivering Now cites
workflow-engine/TECHNIQUE.md planning-readme (15,073) as an example of what a resource ref looks like a code token — the example needed no body at all, and this base technique is bundled very widely
map-vulnerability-domains · score-severity target-profile (22,668) Vulnerability Domain Hints · Severity Calibration Benchmark
analyze-architecture · apply-checklist · map-vulnerability-domains · execute-ensemble-pass audit-template-reference (9,441) the §X.Y sections each one's identifiers resolve to — §3 for three, §2/§3/§5 for the ensemble pass
review-scope architecture-review (8,816) Architectural Significance and Decision-Making Discipline; the ADR template and writing style belong to the activity that writes ADRs
deep-dive codebase-comprehension (12,291) Artifact Template and Comprehension Techniques, both already named in its prose
readme-authoring · yaml-authoring design-principles (15,025) for one principle each, cited as "§11" and "§17" — no resolvable target the principle by anchor

Verdicts recorded rather than rewritten, per principle 32: audits enumerating every entry (audit-canon, audit-principles, audit-expressiveness), a construct inventory read for literacy, a TDD primer cited as background, and knowledge bases selected from rather than read at a point (probe-catalog, subsystem-map). Whole-resource delivery is correct for all of them.

The tail — roughly a hundred pairs under ~8,000 characters each — is registered as #358, along with the guard opportunity: AP-134's second tell (a bare citation in a technique that also anchors the same resource) needs no judgement and is checkable in scripts/.

Rule consolidation

  • dispatch-activity's worker-bag-takes-precedence is absorbed into distrust-then-reconcile: one rule stating that critical routing state read from inspect_session is cross-checked against the worker's activity_complete envelope, that the envelope governs on disagreement because the worker holds ground truth from its own user interaction, and that the discrepancy is logged. Two rules over one invariant was AP-133.
  • present-checkpoint-to-user's apply-effects-immediately becomes Protocol step 5. A rule saying do this now was a protocol phase wearing a rule's clothes, and the step numbering already carries the ordering the word "immediately" was doing.

Diagram accuracy

Checked every activity diagram against its YAML. One real defect and two gaps:

  • activity 14 wired finalize-test-plan and ensure-docs behind the complexity gate rather than the review-mode gate that actually governs them.
  • activity 01 omitted the review-mode fork entirely — the ambiguity checkpoint, the PR-reference checkpoint and its cancel path — plus github-issue-missing on the Jira path.
  • activity 13 omitted the private-remote and push confirmations on the stealth path, and the PR-body verification loop with the body-non-conformant checkpoint that follows it. Its build-artifact nodes now read as the checkpoints they are.

Verification

  • 17/17 guards pass (npx tsx scripts/check-all.ts --root <this tree>), corpus and repo scope.
  • Walk snapshots pass; the path diff is carried in the main-repo PR and is exactly the DI-18/DI-19/DI-21/DI-30/DI-32 step changes.
  • The workflow-canon skill's Draft and Audit paths were both run. The audit found four defects in this change's own text — procedure-in-io-contract on a create-complete-doc input, a rule over-reaching into artifacts it does not own, a rule restating its own protocol phase, and two blockquote notes missing their trailing spaces — all fixed before commit. The planning-readme reorganisation above is the no-duplicated-guidance / canonical-fact-home half of that same pass.

Not addressed

Merge order. DI-33's engine half rides in the paired main-repo PR #352: record_usage records one activity_usage history event per completed dispatch, keyed to the activity that ran, and next_activity no longer takes usage. The account-every-dispatch rule and the next_activity call signature here are the caller side of that tool. This PR merges first, to workflows; main keeps pinning the old corpus until #352 lands, so the rule and the tool it names become reachable together.

DI-20's wider class. 47 work-package orphan-input findings remain triaged as accepted debt; this PR closes the three the issue names as in-scope. Of the rest it names, discovered_path was already declared, initiative_name and force_rebuild are correct-by-design caller arguments on shared meta ops in other workflows, and identifying_context / target_content / output_path produce no finding.

Refs #346

🤖 Generated with Claude Code

@m2ux
m2ux force-pushed the workflow/346-review-mode-definition-defects branch 16 times, most recently from 6b35cd4 to 990b427 Compare July 30, 2026 05:21
@m2ux
m2ux force-pushed the workflow/346-review-mode-definition-defects branch 3 times, most recently from 642de52 to fb42155 Compare July 30, 2026 06:29
@m2ux
m2ux force-pushed the workflow/346-review-mode-definition-defects branch 3 times, most recently from 60d92b9 to b27275e Compare July 30, 2026 07:17


A review-mode run of work-package v3.36.0 shipped a sound verdict on top of a
reporting layer that had to be repaired by hand. The defects cluster into five
groups, all in how the run reports and books its own work.

Required set:

- DI-35/DI-32: `artifact_publish_ref` is the engineering branch, never a commit
  sha. The planning folder keeps growing after a review is posted, so a
  sha-pinned report link lands a reader in a tree that predates the close-out.
  `complete` now re-publishes on the same branch, so those files reach the tree
  the posted links already point at.
- DI-31: change-block and manual-diff citations are permanent blob URLs at the
  reviewed commit, composed from a new `reviewed_code_base_url` pinned by
  review-diff. The old checkout-relative form died with the review worktree
  `remove-worktree` deletes at close-out.
- DI-33: the usage ledger records one entry per activity transition, so the
  orchestrator now carries a running per-activity total across continues,
  re-dispatches, resumes and out-of-band dispatches, and render-token-usage
  reconciles the ledger against the run's actual dispatch count. An
  unreconciled figure is reported as a floor, not a total.
- DI-34: cost lives only in `token-usage.md`; `session-trace.md` reports
  mechanical execution and links it. One wrong ledger now yields one wrong
  artifact instead of two that disagree.
- DI-23: the Progress table drops a column — `#` carries the activity prefix
  and the dead monotonic row index is gone, with Matching re-anchored on that
  field first.

Review-mode gating (DI-8, DI-18, DI-19, DI-20, DI-21): the unsigned-commit
prompt and re-sign pass are author-side, so both are gated out of review mode
rather than asking whether to rewrite another organisation's branch. The
close-out document and cost artifact run on both paths — a review run has a
verdict to close out and a cost to report. The retrospective's one-item
interview is replaced by an item budget reviewed whole, because the only
interaction primitive the close-out path has is a single gate; the decisionless
confirm becomes a message per `checkpoint-requires-decision`. `assumption_decisions`,
`issue_request` and `comprehension_dir` are declared, closing their binding gaps.

Posted-comment format (DI-9 to DI-17): the review-mode skeleton gains a
Strategic Review findings table and a `What This Change Gets Right` section,
a declared budget that makes `Reference, Don't Restate` measurable at render
time (gated by a validate action), a prose register, and a one-line caveat form.
Findings tables are `# | @ | Finding | Severity` — `@` a hyperlinked `>` so
filename link text stops setting the column width; `Disposition` survives only
in Prior Feedback Triage, since the Action Items tiers already express it.

Planning README (DI-22, DI-24 to DI-26, DI-28, DI-29): `🟡` replaces `◐` so the
status meaning "being worked on now" is as visible as its siblings; the Item
cell is the row's only link slot and carries the human name alone; status
tracks the deliverable, so content that lands elsewhere is complete with a
repointed link rather than cancelled-with-a-link; a cancel write unlinks the
seeded target that was never created.

Artifact routing and links (DI-27, DI-30): close-out links the follow-ups and
deferred-items registers instead of restating open work, and a new
`manage-artifacts::verify-artifact-links` gate resolves every planning-folder
link at the publish ref, catching missing targets, worktree citations and
resource ids emitted as relative links.

Two changes outside the register, both requested during review. The catalogue
gains `resource-id-names-its-content` and `deployment-path-in-capability`, and
design-principles gains Isolate Conditional Branches as Notes — the stance
`constraint-as-blockquote` prescribed but never cited. Every instance each one
detects is fixed in this commit.

Also fixes a dangling read the #345 variable rename left behind:
substrate-node-security-audit's write-report rule read `{target_path}`, which
that workflow does not declare, where `{target_submodule}` is the declared path
to the audited submodule. It was suppressed as accepted debt; this removes the
defect instead.

Refs #346

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@m2ux
m2ux force-pushed the workflow/346-review-mode-definition-defects branch from b27275e to 81c54da Compare July 30, 2026 07:22
m2ux and others added 3 commits July 30, 2026 08:43
Principle 32 "Cite Resources at Section Grain" names the citation as a delivery
instruction: the id it resolves to — path after resources/, .md stripped, #anchor
kept — is the unit the server loads, so a citation names the narrowest section
carrying what the prose needs. The bare resource stays correct for a consumer that
reads the whole body: a filler working a Template with the Rules that populate it,
an audit walking every entry.

Grain is a property of the resource across the technique, not of one link. Every
distinct citation is delivered, so a bare citation beside anchored ones ships the
file and those sections, and the file's size counts against the eager budget that
decides what else arrives.

Principle 30 already carried a forward reference to "the section-or-whole economy"
that nothing defined; 32 is its citation half, and 30 now names 32 in return.

AP-134 whole-resource-for-one-section gives the auditor the two tells: a bare
citation whose surrounding prose names a single section, and a bare citation in a
technique that anchors the same resource elsewhere.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Eight techniques cited a resource whole while also anchoring sections of it, so both
the file and those sections shipped in the eager bundle. Each now cites only what its
prose consults, which removes 54,609 characters of resource body from the bundles that
carry these techniques:

- create-readme: Template alone in step 1; step 3's population cites Rules, the home
  of the header / summary / links / progress fill rules it was leaning on the whole
  file for.
- review-code, review-test-suite: Review Criteria, plus test-suite-review's
  Anti-Patterns, which its report template's detection summary needs.
- summarize-architecture: the artifact template, and Diagram Selection cited from
  step 1 as the home of which diagram types a change warrants and their notation.
- retrospective: the Mechanical classes subsection.
- create-complete-doc, execute-sub-agent, capture-dimension: Template, Schema, and
  Dimensions respectively.

Six sites remain. Five are small guides where the bare citation is the only one.
review-summary is different: its citations cover 86% of review-mode, so the whole file
is the economical delivery there and the ten anchored citations are the duplication —
the fix belongs in the bundler, which ships a section body even when its parent file
is already in the bundle.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
AP-135 tool-contract-restated-in-protocol. The tell is a Protocol bullet that reads
like schema documentation — it says what an argument is rather than what the caller
must do — while its siblings act on the call or its response. The call signature and
value-level obligations the schema cannot express both stay legitimate.

dispatch-activity's step_manifest bullet was the corpus's one instance, and it had
already drifted: it described "two string fields" where the schema also accepts a
keyed object for multi-output steps, leaving the caller no way to tell which governs.
It now carries the obligation and the reason, and the shape stays in the schema.

workflow-retrospective's Mechanical classes heading names the resolved trace rather
than the tool that resolves it, so the section can be cited without a bare tool name
reaching the citing Protocol through the anchor slug.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
m2ux and others added 2 commits July 30, 2026 08:56
…ion sites

Each cited a small guide whole while also anchoring part of it. They now cite the
sections they consult, which is the whole of what each guide offers them — the
template plus the rules or conventions that govern filling it:

- respond-to-pr-review: both templates, already cited at the output and the drafting
  step, so the bare citation carried nothing of its own.
- persist-design-specification: the two sections the artifact is made of, which is
  what "facts this artifact homes" refers to.
- analyze-source: the template and its conventions, the latter previously reachable
  only through the whole-file delivery.
- create-completion-doc: the template at the output, and its rules alongside the
  template at the fill step.

validate-specification stays as it is: its rubric needs checks, categorization and
verdict, which ship for more than the file itself. That residue is the bundler
shipping a section body when its parent file is already bundled.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
start-work-package's diagram now carries the review-mode fork it was missing
entirely — the ambiguity checkpoint, the PR-reference checkpoint and its cancel
path back to the standard route — and the github-issue-missing checkpoint on the
Jira path, with the linked-issue search that reaches it.

submit-for-review's now carries the private-remote and push confirmations on the
stealth path, and the PR-body verification loop with the non-conformant checkpoint
that follows it, including its re-entry and abort options. Its build-artifact nodes
read as the checkpoints they are, so a reader can see where the activity stops for
the user.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…sites

The ten sites where a whole-resource citation cost the most, taking 149,330
characters out of the bundles that carry them. Each now names what its prose reads:

- workflow-engine/TECHNIQUE.md cited planning-readme as an *example* of what a
  resource ref looks like, and shipped all 15,073 characters of it to make the point
  — in every activity that bundles this base technique. The example is a code token.
- map-vulnerability-domains and score-severity cite target-profile's Vulnerability
  Domain Hints and Severity Calibration Benchmark, the sections their prose names,
  rather than the 22,668-character profile.
- The four techniques keyed to the audit taxonomy cite the sections whose section
  identifiers they actually use: §3 for three of them, §2/§3/§5 for the ensemble pass.
- review-scope judges scope against Architectural Significance and Decision-Making
  Discipline; the ADR template, section rules and writing style belong to the activity
  that writes ADRs, not to a scope review.
- deep-dive cites the artifact template and the comprehension techniques, both of
  which its prose already named.
- readme-authoring and yaml-authoring cited one principle each as a bare section
  number, which named no resolvable target and delivered all 31 principles. They now
  link the principle by anchor.

The sites left whole are the ones principle 32 endorses: audits enumerating every
entry (audit-canon, audit-principles, audit-expressiveness), a construct inventory
read for literacy, a TDD primer cited as background, and knowledge bases selected
from rather than read at a point (probe-catalog, subsystem-map).

Refs #358

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@m2ux m2ux changed the title fix(work-package): close the 27 review-mode definition defects from #346 fix(work-package): close the #346 review-mode defects; cite resources at section grain Jul 30, 2026
m2ux and others added 4 commits July 30, 2026 09:46
…its rules to

A rule reading "For §3.4, every consensus-critical configuration struct" gave a reader
nothing to work from: resolving the identifier meant knowing a taxonomy exists, finding
its index, and following a second hop to the entry. The file was already inconsistent
about it — "§3.6 input validation" and "§3.2 storage lifecycle checks" name themselves,
while both §3.4 rules did not.

Every identifier now carries its title, which is the convention the file already used
where it worked. The taxonomy itself stays linked once, from the checklist_source input.

sub-crate-review binds checklist_source to the §3 taxonomy section. The toolkit path
bound its checklist from the start; the crate path left the input to a caller that never
supplied it, so the only declared binding in the workflow was the one path where §X.Y
identifiers resolve to nothing. Rules keyed to §3.N belong to the crate-review checklist,
and now the activity that runs them says so.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The one remaining unglossed section identifier. §3.1 covers the pallet hook, of which
weight accounting and write ordering are two facets, and target-profile and
decompose-safety-claims both label this facet "flush ordering" — so the rule now uses
that name rather than describing its target as a "flush/commit target".

The number was already right. §3.1's taxonomy title names weights, which reads as though
an on_finalize write-ordering rule belongs elsewhere; the corpus is consistent that it
does not.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… the right one

write-report declared the finding block as an output sub-field: a fenced template plus
the fill rules for populating it, inside the I/O contract. audit-prompt-template already
owned that content — its own description, resources/README and the F-20 decomposition all
say it holds §4 Reporting Format in full — and the two copies had drifted apart.

They disagreed on everything a writer needs. The resource put Description after Affected
Files as a labelled field; the technique put it first as an unlabelled paragraph and
carried a rule enforcing that. The resource showed Affected Files as plain path#lines
bullets; the technique required hyperlinks and carried a rule calling plain text
unacceptable. The resource's Finding Entry had no Impact or Feasibility lines at all. A
worker following the cited section produced a report the citing technique rejected.

Finding Entry now carries the shape the workflow actually wants — description first, I
and F with justifications, Affected Files hyperlinked to the audited commit — with the
fill rules beside it: field vocabulary, blank-line separation, and how multiple files,
extra ranges and single lines render.

write-report keeps what is its own. Its outputs name semantic fields and cite the entry
template. Deriving {$source_blob_base} from the target submodule's remote is procedure,
so it moves to Protocol; a resource describes the shape and the technique instantiates
it. The two rules that restated the guide's fill rules are gone, the guide being their
one home now.

One triage entry goes with them: the deleted rule read {file} from prose, which the
read-resolution check flagged and the triage had accepted as a template placeholder.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Three defects the workflow-authoring copy of this guide had already resolved.

The template linked the scope manifest by filename, so a resource named a file its
consuming technique produces; the manifest is now referred to by kind, as the guide's
own fill rule already did.

The Design Decisions placeholder told the writer to keep the section short, which the
fill rules say for the document as a whole. One home each.

"Keep close-out short" now carries the twin's ~70-line budget, so the rule can be
checked rather than felt.

The two guides stay separate. workflow-design is deprecated and exists only until
in-flight sessions finish, so merging them would build a cross-workflow dependency into
a tree scheduled for deletion — and the templates differ in header and retrospective
section, so repointing this one would change what those sessions produce.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@m2ux
m2ux merged commit 4a4217e into workflows Jul 30, 2026
m2ux added a commit that referenced this pull request Jul 30, 2026
Three files needed a decision; workflow-tools.ts, the state schema, the site tools page,
the walk snapshots and mcp-server.test.ts all auto-merged.

AGENTS.md held two versions of "Describe the design, not the change to it" — this branch
and #357 wrote it independently, with different carve-outs. The rule now carries both:
main's PR and issue bodies alongside this branch's commit body and provenance-bearing
measurement, plus the live-hazard-as-invariant guidance and the link to principle 17.
CLAUDE.md takes the same union, since this branch had only edited its twin and the two
are kept in sync by merging.

The worktree-naming rule rides in here too. It was committed to
docs/agent-authoring-guidance after #357 had already merged at 618d9ff, so it never
reached main and would have been lost with the branch.

The workflows pointer moves to 6bc46fa, the corpus tip carrying both #351 and #355, and
the stamp names the same commit.

binding-fidelity passes: main's detector predicate and reconciled triage arrive with this
merge, which is what the 17 stale entries on this branch were waiting for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant