Skip to content

fix: batching-stack review round — re-resolve rewired, guards symmetric, hardening pinned#512

Merged
leeovery merged 4 commits into
mainfrom
feat/batch-review-fixes
Jul 23, 2026
Merged

fix: batching-stack review round — re-resolve rewired, guards symmetric, hardening pinned#512
leeovery merged 4 commits into
mainfrom
feat/batch-review-fixes

Conversation

@leeovery

@leeovery leeovery commented Jul 22, 2026

Copy link
Copy Markdown
Owner

The end-of-stack review round as its own PR (design log: #504; base: #510) — six slices (harvest, spec-entry, task-map + commit-plan, engine code, test adequacy, conventions), every finding adversarially verified before fixing.

Majors

  • resolve-dependencies: the stale-reference re-resolve was orphaned by the working-list swap — its corrected internal_id had no persistence path and silently never landed. Now feeds the working list like its sibling cases.
  • write-tasks: the batched set told the model to write storage_paths without deriving it anywhere (the sibling initialize-plan had the derivation) — a guaranteed loud failure at the next --plan commit. Prelude now names the authoring.md section and the [] convention.

Minors

  • Empty-batch guards made symmetric: brief-synthesis cleanup and summary-backfill skip the apply when nothing collected (an empty payload is a loud error by design); Write-tool instructions moved before their fences.
  • display-groupings unify gets its own unify-ops.json — no stale reuse of analysis-flow's reconcile-ops.json — plus an explicit write instruction.
  • process-review-findings's file-level raw-git commit rule (missed by both earlier sweeps) swaps to commit --plan; stale per-ID wording updated.
  • Restart cleanups gain {storage_paths} expansion guidance ([".tick/"].tick/; [] → nothing extra).
  • confirm-and-persist's stale "no separate name field" note corrected; authoring-log (D7) markers stripped from commands.md product prose.
  • Engine hardening: dangling --plan is a usage error; present-but-malformed storage_paths gets its own message (never the misleading pre-upgrade hint); add-batch refuses non-string names.

Tests

validateStoragePaths was untested on both write paths (deletable with everything green) — now pinned via set and via apply; plus same-item set-then-delete op ordering, the --plan misuse matrix, multi-path staging, the repair-hint text, and non-string batch names. Gates: 1568/1568 node · shell suites · lint 27/27 · typecheck.

🤖 Generated with Claude Code

Stack

  1. feat(engine): discovery-map add-batch — the harvest persists in one call (D7) #505
  2. feat(engine): manifest apply — batched set/delete across one work unit (D7) #506
  3. refactor(prose): task-map family folds onto existing batch forms (D7, stage 3) #507
  4. feat(engine): manifest set — two grammars, never mixed #508
  5. refactor(prose): dump/read folds — subtree gets replace per-topic loops (D7, stage 5) #509
  6. feat(engine): commit --plan — plan storage stages from recorded state (D7, stage 6) #510
  7. fix: batching-stack review round — re-resolve rewired, guards symmetric, hardening pinned #512 👈 current
  8. fix: deep-dive round 2 — backbone rule flipped, pre-upgrade paths routed, flow bugs closed #513
  9. fix(review-r3): engine hardening + crash-resume seams #514
  10. feat(scoping): promotion routes through first-phase choice + bridge #515
  11. fix(spec): pin the bugfix source name to the topic #516
  12. fix(skills): gate-skip sentence accurate in gate-less phases #517
  13. fix(review-entry): name the real upstream — specification and plan #518
  14. fix(shared): strip triage-landing's unreachable superseded-research arm #519
  15. feat(engine): refuse work-unit-level fields that shadow the phases tree #520
  16. fix(discovery): first-written briefs join the full brief lifecycle #521
  17. test(sim): pipeline simulation — engine driven end-to-end as a black box #522
  18. fix(round-4): review findings — backfill keying, ratchet evasion, pull guard #523

@leeovery
leeovery force-pushed the feat/engine-commit-plan branch from 48888b0 to 0291b9b Compare July 23, 2026 11:04
@leeovery
leeovery force-pushed the feat/batch-review-fixes branch from e78fb09 to 465e63d Compare July 23, 2026 11:05
@leeovery
leeovery force-pushed the feat/engine-commit-plan branch from 0291b9b to 6858ac8 Compare July 23, 2026 12:29
@leeovery
leeovery force-pushed the feat/batch-review-fixes branch from 465e63d to bcfa71a Compare July 23, 2026 12:29
@leeovery
leeovery force-pushed the feat/engine-commit-plan branch from 6858ac8 to c1131d4 Compare July 23, 2026 12:30
@leeovery
leeovery force-pushed the feat/batch-review-fixes branch from bcfa71a to 91c594a Compare July 23, 2026 12:30
@leeovery
leeovery force-pushed the feat/engine-commit-plan branch from c1131d4 to e45dac4 Compare July 23, 2026 12:31
@leeovery
leeovery force-pushed the feat/batch-review-fixes branch from 91c594a to 2a4b3ef Compare July 23, 2026 12:31
@leeovery
leeovery force-pushed the feat/engine-commit-plan branch from e45dac4 to 2e680d8 Compare July 23, 2026 12:32
@leeovery
leeovery force-pushed the feat/batch-review-fixes branch from 2a4b3ef to 8e552b1 Compare July 23, 2026 12:32
@leeovery
leeovery force-pushed the feat/engine-commit-plan branch from 2e680d8 to 9da8502 Compare July 23, 2026 12:32
@leeovery
leeovery force-pushed the feat/batch-review-fixes branch from 8e552b1 to 4fc6f7b Compare July 23, 2026 12:32
@leeovery
leeovery changed the base branch from feat/engine-commit-plan to main July 23, 2026 12:33
leeovery and others added 4 commits July 23, 2026 13:33
…ning pinned

Six-slice review (harvest, spec-entry, task-map, engine code, tests,
conventions), findings adversarially verified. Fixes:

- MAJOR resolve-dependencies: the stale-reference re-resolve bullet was
  orphaned by the working-list swap — its corrected internal_id never
  persisted. Now feeds the working list like its siblings.
- MAJOR write-tasks: the batched set's prelude never derived
  storage_paths; now names the authoring.md section and the []
  convention like initialize-plan.
- Empty-batch guards made symmetric: brief-synthesis cleanup and
  summary-backfill skip the apply when nothing collected (an empty
  payload is a loud error by design); Write-tool instructions moved
  before their fences; display-groupings unify gets its own
  unify-ops.json (no stale reconcile-ops reuse) and an explicit write
  instruction.
- process-review-findings: the file-level raw-git commit rule (missed
  by both earlier sweeps) swaps to commit --plan; stale per-ID wording
  updated.
- Restart cleanups: {storage_paths} expansion guidance ([".tick/"] →
  .tick/; [] → nothing extra).
- confirm-and-persist: stale "no separate name field" note corrected.
- commands.md: authoring-log (D7) markers stripped from product prose.
- Engine: dangling --plan is a usage error; present-but-malformed
  storage_paths gets its own message (never the pre-upgrade hint);
  add-batch refuses non-string names.
- Tests: validateStoragePaths via set AND apply (was untested on both
  write paths), same-item set-then-delete order, --plan misuse matrix,
  multi-path staging, repair-hint text pin, non-string batch name.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The restart-cleanup expansion example named a specific format's
storage path (with literal escape artifacts) in two SKILL backbones —
against the never-list rule. Generic wording instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Review catch (Lee): the declarations were ad-hoc one-liners with no
defined shape. Now every format carries the same structure — the
shared definition (what the field is, where it flows: recorded
verbatim as storage_paths at plan init, staged by commit --plan and
the restart cleanups), a fenced json array whose value flows verbatim
into the manifest, and one format-specific sentence. The
create-output-format contract specifies the structure for future
formats; the scaffolding template carries it; both consumers point at
the fenced value with "copy exactly".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… never named outside its directory

Lee: first-use approval / auto mode covers the CLI; the permission
pre-grant named a format outside its own directory, against the
never-list rule. Eleven SKILL frontmatters cleaned; only the word
"backticks" and "ticket" remain as innocent matches.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@leeovery
leeovery force-pushed the feat/batch-review-fixes branch from 4fc6f7b to 3793e7a Compare July 23, 2026 12:33
@leeovery
leeovery merged commit 47be212 into main Jul 23, 2026
@leeovery
leeovery deleted the feat/batch-review-fixes branch July 23, 2026 12:43
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