Skip to content

feat(method): delta-resolution — recorded resolution for every delta (SPEC lifecycle + add.py fold)#32

Merged
pilotspacex-byte merged 6 commits into
mainfrom
feat/delta-resolution
Jun 17, 2026
Merged

feat(method): delta-resolution — recorded resolution for every delta (SPEC lifecycle + add.py fold)#32
pilotspacex-byte merged 6 commits into
mainfrom
feat/delta-resolution

Conversation

@pilotspacex-byte

Copy link
Copy Markdown
Contributor

delta-resolution — every delta gets a recorded, engine-driven resolution

Closes the delta-resolution milestone: both delta types in the ADD engine now have a recorded, engine-driven resolution event, so a captured lesson is never a silent dangling line. Four tasks, each through the full spec→tests→build→verify gate.

What ships

1. SPEC-delta resolution lifecycle (spec-delta-grammar · seed-and-drop · spec-delta-guards)

  • A ### Spec delta block with [SPEC · open|seeded|dropped] grammar — a separate track from the five competency deltas (a SPEC delta resolves into a task, never the foundation).
  • add.py new-task --from-delta <prior> seeds an open SPEC delta into a new task (prefills §1 Feature, flips source → [SPEC · seeded] [→ <new>], records from_delta lineage); a drop-delta path flips → dropped.
  • Symmetry guards: compact refuses a task with an open SPEC delta; status/report nudge unconsumed ones.

2. add.py fold (fold-command) — mechanizes competency-delta consolidation

  • One atomic session: flip every open [<COMP> · open]folded + [folded foundation-version N] stamp, transcribe each lesson verbatim into its routed home (DDD/SDD/UDD → PROJECT.md · TDD/ADD → CONVENTIONS.md), prepend one §Key Decisions audit row, bump foundation-version once (batch = one call, one bump).
  • Transcription-only: the engine never composes/merges prose — that consolidation judgment stays the human's (via the compaction door).
  • Reject codes: no_open_deltas · missing_route_section · no_foundation_version.

Notes for the reviewer

  • Human-authorized frozen-principle reversal: add.py fold reverses the prior "engine stays judgment-free; there is no add.py fold" rule. test_foundation_update_loop is re-frozen @V3; the guard-test change-requests (min_pillar census, ubiquitous-language machine-token) are recorded, not silent.
  • Design-for-failure (caught at the verify gate): the cross-file commit was hardened to a two-phase _atomic_write_many (stage every temp → rename all), so the contract's "any failure → write nothing" holds across the N task-files + foundation set, not just per-file.
  • Dogfooding fix: the §5 scope-walk didn't exclude .serena (serena's symbol-index cache), so an agent's own edits churned the cache into a false out-of-scope HARD-STOP. .serena added to _SCOPE_EXCLUDE_DIRS, proven red/green.
  • Dogfooded on real data: the milestone close ran add.py fold over its own 10 lessons (foundation-version 35→36) and seeded its 3 forward SPEC deltas into a follow-up delta-resolution-polish milestone via --from-delta.

Verification

  • Red suite test_fold_command.py [7 tests] + the .serena scope-guard guard.
  • Full suite 1189 green; add.py check 335 passed, 0 failed.
  • Engine re-synced across all 3 byte-identical copies; engine_pin re-aimed.

Release stays HELD (3 milestones now releasable; next cut 1.7.0 is a separate decision).

…SERVE

Replace the free-text "Spec delta for the next loop:" field with a
machine-checkable `### Spec delta` block on the [SPEC · open|seeded|dropped]
grammar — a SEPARATE resolution track from `### Competency deltas`. A SPEC
delta is a forward hand-off that resolves into a TASK (seeded) or is
dismissed (dropped), never consolidated into the foundation.

Engine (add.py — single-source grammar beside _DELTA_RE):
- _SPEC_STATUSES / _SPEC_DELTA_RE / _STATUS_SETS: tag-scoped status sets so the
  ONE lint rejects a cross-set pairing ([SPEC · folded], [SDD · seeded])
  without a parallel grammar.
- _lint_task_deltas scans BOTH the competency and SPEC blocks, tag-scoped;
  open SPEC evidence is REQUIRED (symmetric with competency deltas).
- _task_prose reads the first OPEN SPEC delta, falling back to the legacy
  free-text field (archived tasks predate the block) — back-compat preserved.
- _spec_delta_entries + _collect_open_spec_deltas: read-only collector, flat
  (SPEC is one tag), never bucketed by competency.
- cmd_deltas surfaces open SPEC deltas in their own section + a --json key.
- TASK.md template (canonical + _FALLBACK_TASK) ships the `### Spec delta`
  block; all 3 byte-identical engine copies + 3 templates re-synced and
  engine_pin re-aimed.

TDD: 11 new tests / 35 assertions (test_spec_delta_grammar.py); downstream
observe consumers in test_report.py updated to the new block. Full suite
1169 OK. Earned-green proof: a fresh project with [SPEC · folded] fails
`check` with unknown_status on the live dogfood engine.

Task 1 of 4 in the delta-resolution milestone.

milestone: delta-resolution (1/4) · contract FROZEN @ v1 · verify gate PASS
author: Tin Dang
…ismiss it

The first WRITERS that move a SPEC delta off `open` (task 1 only read the
seeded/dropped statuses). Two resolution verbs:
- `new-task <new> --from-delta <prior>` SEEDS the prior's first open SPEC
  delta into a new task: pre-fills §1 `Feature: <text> (from <prior>
  spec-delta)`, flips the source `[SPEC · open]` -> `[SPEC · seeded] [→ <new>]`,
  records `from_delta` lineage in state.
- `drop-delta <task>` DISMISSES the first open SPEC delta -> `[SPEC · dropped]`.

Engine (add.py):
- pure `_resolve_spec_delta(text, new_status, pointer=None) -> str | None`:
  flips ONLY the first open line's status token (via _SPEC_OPEN_TOKEN_RE) plus
  an optional ` [→ ptr]` stamp; entry text + `(evidence: …)` byte-preserved;
  None when no open delta -> caller refuses, writes nothing.
- `_first_open_spec_text` reads the seed Feature text from the same in-memory
  text the flip uses.
- `cmd_drop_delta` + the `drop-delta` subparser; `--from-delta` on cmd_new_task.

Design-for-failure: validate-ALL-then-write — resolve prior, prove >=1 open
SPEC delta, compute the seeded flip BEFORE any write; per-file _atomic_write;
ordered new-TASK.md -> prior-flip -> state, so the worst residue is "new task
created, prior still open & visible" (re-run blocked by the slug-exists guard —
never a dangling pointer). Proven live: a taken-slug seed refuses without
consuming the source delta.

TDD: 8 new tests (test_seed_and_drop.py). The new `drop-delta` subcommand
extends test_min_pillar's read-spy LIFECYCLE census (one more command proven
docs-silent — a strengthening, not a weakening). Full suite 1177 OK; 3 engine
copies re-synced (md5 5120b0c2), engine_pin re-aimed.

Task 2 of 4 in the delta-resolution milestone.

milestone: delta-resolution (2/4) · contract FROZEN @ v1 · verify gate PASS
author: Tin Dang
Close the SPEC-delta lifecycle with four read-one-source guards so a
captured spec lesson can never be dropped on the floor between loops.
All four read the SAME count: len(_collect_open_spec_deltas(root)).

Engine (add.py):
- `compact <ms>` REFUSES "open_spec_deltas_unresolved" while ANY task in
  the PROJECT holds an open SPEC delta (after open_deltas_unfolded, before
  the move; tree+state byte-unchanged on reject). Deliberately broader than
  the member-scoped competency guard — a stray idea anywhere blocks the
  archive until it is seeded or dropped. Names the offending task(s).
- `status` prints a read-only "spec : N open SPEC delta(s) …" line
  (project-wide; silent at 0).
- `milestone-done` prints a non-blocking "note: N open SPEC delta(s) to
  resolve …" (project-wide).
- `report <ms> --json` carries summary["open_spec"] = project-wide count,
  rendered as a "SPEC DELTAS" block.

Design-for-failure: every surface is read-only except compact, whose guard
fires BEFORE any write and leaves the tree + state.json byte-identical on
refusal (proven by snapshot equality). No new IO path — counts derive from
the existing delta collector.

TDD: 5 new scenario tests (test_spec_delta_guards.py), one per surface;
project-wide breadth proven LIVE by planting the offending delta on a
NON-member task. Full suite 1182 OK; 3 engine copies re-synced
(md5 392b4e55), engine_pin re-aimed.

Dogfood note: this project's own delta-resolution milestone now carries
4 open SPEC deltas (tasks 1's §7 describing what 2/3 built) — they must be
seeded/dropped before delta-resolution can compact. Recorded as a §7 ADD
delta; a milestone-close cleanup item.

Task 3 of 4 in the delta-resolution milestone.

milestone: delta-resolution (3/4) · contract FROZEN @ v1 · verify gate PASS
author: Tin Dang
Close delta-resolution 4/4. `add.py fold [--task <slug>] [--comp <TAG>]`
mechanizes ONE competency-lesson consolidation session in a single atomic
call, ending the error-prone hand-edit of the versioned foundation:

  - flip every open `[<COMP> · open]` -> `folded` + stamp
    `[folded foundation-version N]` (pure `_fold_competency_delta`, a mirror
    of `_resolve_spec_delta`; line text + `(evidence: …)` byte-preserved);
  - transcribe each lesson VERBATIM into its routed home (DDD/SDD/UDD ->
    PROJECT.md §Domain/§Spec/§Users · TDD/ADD -> CONVENTIONS.md §Method
    learnings) — the engine TRANSCRIBES, it never composes/merges prose;
  - prepend one §Key Decisions audit row; bump `foundation-version` ONCE
    (batch = one call, one bump, every stamp carries the same N).
  - Reject codes: no_open_deltas · missing_route_section · no_foundation_version.

Design-for-failure: validate-ALL-then-write, hardened at the verify gate to a
two-phase commit (`_atomic_write_many`: stage every temp -> rename all), so a
mid-commit IO failure writes NOTHING — the frozen "any failure -> write nothing"
now holds across the N task-files + PROJECT.md + CONVENTIONS.md set, not just
per-file. Foundation files are ordered first so the near-impossible mid-rename
residual is a still-open (visible, re-runnable) lesson, never a silent loss.

HUMAN-AUTHORIZED frozen-principle reversal: this command reverses the prior
"engine stays judgment-free; there is no add.py fold" rule. test_foundation_
update_loop re-frozen @V3 (the no-fold-command assertion inverted to assert the
command EXISTS + is transcription-only; REJECT_CODES reconciled). Sibling
authorized guard CRs: test_min_pillar census (+fold in LIFECYCLE & _NONZERO_OK)
· test_ubiquitous_language (+fold in MACHINE_CONSTANTS; cmd_fold prose stays
"consolidation"). fold.md rewritten (x3 byte-identical) to describe the command.

Dogfooding fix (second authorized CR, folded in at the verify HARD-STOP): the
§5 scope-walk excluded only .git/.add/__pycache__/node_modules — not `.serena`,
serena's symbol-index cache, which re-writes itself on every source edit. The
AI's own add.py edits churned `.serena/cache/*.pkl`, the build-entry snapshot
baked them in, and the gate flagged a false out-of-scope touch that exhausted
the heal loop to a false HARD-STOP. `.serena` added to _SCOPE_EXCLUDE_DIRS
(a tool cache with no build signal — the exclude set's exact purpose), proven
red/green by a new fixture + assertion in test_scope_gate_enforce.py.

Engine re-synced across all 3 copies (canonical · .add dogfood · bundled);
engine_pin re-aimed -> f78a2f24. Red suite test_fold_command.py [7 tests];
full suite 1189 green.

author: Tin Dang
…ollow-up)

Milestone close for delta-resolution, dogfooding the machinery the milestone
itself shipped:

  - `add.py fold` (the new command) consolidated all 10 open competency lessons
    into the versioned foundation in one atomic session — foundation-version
    35 -> 36, 1 SDD bullet -> PROJECT.md §Spec, 3 TDD + 6 ADD bullets ->
    CONVENTIONS.md §Method learnings (each verbatim + `[folded foundation-version
    36 · from <task>]` stamp), one §Key Decisions audit row. First real-data run
    of fold — clean.
  - Resolved the 5 open SPEC deltas: SEEDED the 3 forward-looking ones into a new
    `delta-resolution-polish` milestone via `new-task --from-delta` (each source
    flipped to `[SPEC · seeded] [→ <new>]` with `from_delta` lineage) —
    multi-file-commit (a true all-or-nothing N-file commit primitive),
    delta-match-selector (`--match` to target a specific open SPEC delta),
    compact-force-override (a `compact --force` escape hatch); DROPPED the 2 that
    were already delivered inside this milestone.
  - Checked the 4 exit criteria (all delivered + tested + gated PASS) and ran
    milestone-done -> RETRO.md.

delta-resolution is closed (3 milestones now releasable; release stays HELD).
The seed/drop verbs were themselves dogfooded here. Engine + foundation only —
no source/test change in this commit.

author: Tin Dang
@TinDang97
TinDang97 self-requested a review June 17, 2026 02:11
…nit)

A pre-merge independent review (verdict MERGE-WITH-NITS, zero blocking) flagged
one faithfulness nit: the cmd_fold commit comment overstated atomicity. "A
mid-commit IO failure leaves NOTHING written" is true only for the phase-1
temp-write failure; a near-impossible phase-2 mid-rename failure can leave the
foundation advanced while a TASK.md stays unflipped, and a re-run re-transcribes
by DUPLICATING (never losing), not cleanly resuming.

Comment-only correction — no behavior change. The two-phase `_atomic_write_many`
and the foundation-first write order stand; a true all-or-nothing N-file commit
is the queued multi-file-commit follow-up task.

Engine re-synced across all 3 copies; engine_pin re-aimed -> 5f3f7d28. Full
suite 1189 green.

author: Tin Dang
@pilotspacex-byte
pilotspacex-byte merged commit 4b62ed3 into main Jun 17, 2026
3 checks passed
@pilotspacex-byte
pilotspacex-byte deleted the feat/delta-resolution branch June 17, 2026 02:23
pilotspacex-byte added a commit that referenced this pull request Jul 14, 2026
…(7/7 gate PASS) (#146)

* chore(method): intake ceremony-to-effort milestone — 7 evidence-traced ceremony cuts

Create + confirm the ceremony-to-effort sub-milestone (extends
risk-proportional-ceremony's held-open <=12-call criterion). Grounded in two
audits run 2026-07-13:
- transcript anatomy of the LOOP-2 benchmark runs: best run 37% artifact /
  63% ceremony vs spec-kit 95%; skip-bait, byte-identical retries (12-21% of
  calls), --help residue, and the scope repair cycle quantified per call;
- guide/template weight audit: 56KB read burden per task (56% in 3
  task-agnostic files); TASK.md.tmpl ~30% boilerplate + ~25% derivable;
  5 rules stated 3-5x across surfaces.

7 tasks: kickoff-truth · derived-stamps · template-dedup · gate-read-diet ·
scope-echo-draft · risk-report-render · fold-draft-at-close. Floors untouched
(freeze · red-first · recorded gate · HARD-STOP); exit binds at the
pinned-meter WM1 re-measure (calls <= 12, read <= ~30KB).

Author-toil follow-ups captured as todos #30-#32 (seams-symbol-pins ·
sync-twins · stale global skill).

author: Tin Dang <tindang.ht97@gmail.com>

* feat(method): kickoff truth — lane-aware kickoff + call recipe + dup-failure short-circuit (kickoff-truth, ceremony-to-effort 1/7)

Three measured waste classes killed at the message layer (evidence: the
2026-07-13 transcript audit of loop2-lever rep0/1/2):
- init kickoff + headless hint lead with the single-task --oneshot lane
  (milestone-first kickoff cost rep0/rep1 2+ calls; rep2 skipped it and won)
- new-task stdout ends with the FULL remaining 6-call recipe, all lanes
  (replaces 6-11 measured status/guide/--help re-orientation calls per run)
- a consecutive byte-identical failing call gets a short-circuit hint
  (12-21% of all measured calls were exact duplicate failures); sig sidecar
  lives in the OS tmp dir keyed by md5(root) — contract v2 after the full
  suite refuted v1's in-tree sidecar against the reject-writes-nothing
  byte fence (16 suites). Success clears; fail-open everywhere.

Floor intact: red-first (4 red for the right reason), frozen contract v2
(change request, human-approved), tamper tripwire honored (one soft-edit
revert), sibling InitKickoffTest pin STRENGTHENED never weakened, gate PASS.
Evidence: test_kickoff_truth 7/7 + full suite 3453/3453 OK + check 734/0 +
live end-to-end probe. ENGINE_MD5 -> 3937d5c1, PKG -> d83fc67f, twins x4.

author: Tin Dang <tindang.ht97@gmail.com>

* feat(method): freeze stamps the Ground SHA placeholder (derived-stamps, ceremony-to-effort 2/7)

The weight audit measured Ground SHA as 100%-derivable data the agent
hand-types (`git rev-parse --short HEAD`). cmd_freeze now fills a
placeholder-form `Ground SHA:` line with the real short HEAD inside the
SAME atomic write as the Status flip, so the freeze fingerprint hashes
the stamped text. Grandfather (a hand-filled line never matches) +
fail-open (no git -> line untouched, freeze succeeds), mirroring
_stamp_gate_record.

HONEST SCOPE TRIM at ground: gate-record stamps, the Status flip, and
the fast-template Ground SHA line already existed; Reported: is an
honesty attestation and stays human-written.

Evidence: test_derived_stamps 4/4 (M1 red-first) + freeze-family
neighbors green + full suite 3457 (sole fail = SEAMS line-pin drift,
re-aimed 5512->5526, todo #30) + check 738/0. ENGINE_MD5 -> e2ed6599,
twins x4. Gate PASS.

author: Tin Dang <tindang.ht97@gmail.com>

* refactor(method): template comment dedup — EXIT pointers + engine-stamp comments (template-dedup, ceremony-to-effort 3/7)

TASK.md.tmpl comments compress to pointers where the content has a canonical
home elsewhere: EXIT restatements -> one-line pointers to each phase guide's
exit_gate; the scope-lock comment trims; Ground SHA comments (both templates +
phases/3-plan.md) now say "stamped by freeze" instead of instructing the
hand-typed rev-parse (derived-stamps shipped the stamp).

CHANGE REQUEST v2, fence-driven: v1 also deleted the scope-grammar
restatements per the weight audit — the full suite refuted it (4 suites pin
the template as the FROZEN scope-decl declaration surface). v2 restored them
verbatim and flipped my test into a pin that PROTECTS the restatement from
the next dedup pass. Net: comments 2848->2568B, template 12374->12055B,
lean pins honored (one merged S3 comment, <12 total, merged not split).

Evidence: test_template_dedup 6/6 + 86 neighbor tests + full suite 3463/3463
OK. Templates x5 + skill x3 synced; zero engine bytes. Gate PASS.

author: Tin Dang <tindang.ht97@gmail.com>

* feat(method): gate render cards — phase guides self-suffice, big references read-once (ceremony-to-effort 4/7)

The weight audit measured report-template.md (9.6KB x3 call sites) and
run.md (8.9KB x4) re-read per gate/session — the heaviest task-agnostic
reads after SKILL.md. Each gate's phase guide now carries its render
card inline; the big files demote to read-at-most-once references.

- 3-plan.md freeze section: banner→ARC→SHAPE→SUMMARY→FLAGS→DECIDED→
  EVIDENCE→APPROVE→NEXT card + read-once pointer; the pinned
  'rendering SHAPE then the freeze APPROVE as a guided choice'
  sentence kept verbatim (test_report_shape_scan_audit, x3 trees)
- 6-verify.md gate section: verify-dialect card + the kept
  reconcile-FLAGS / report --decide sentence
- SKILL.md: one read-once rule line; absorbed under the frozen
  18186B core-pool target by same-pool compression (landed 18186/18186)
- test_gate_read_diet.py: 7 red/green tests (ordered skeleton,
  verbatim imperatives, wiring pins, pool byte target)
- synced x3 skill trees; prose-only — ENGINE_MD5 unchanged

Fence: full suite 3470/3470 OK. Gate PASS.

refs: milestone ceremony-to-effort (gate-read-diet), stacked on PR #145
author: Tin Dang <tindang.ht97@gmail.com>

* feat(method): scope echo + draft at freeze — mis-resolution becomes a zero-call read (ceremony-to-effort 5/7)

The scope-token grammar's silent mis-resolution class (three tasks
independently rediscovered it per SEAMS.md) becomes visible at the
approval already happening: freeze now renders each RESOLVED scope
entry, and proposes a Scope line when the declaration is dead.

- add.py: _scope_echo helper — per-entry `scope: <rel> [ok|MISSING]`
  echo after the froze-print (footer stays last); UNDECLARED/garbage/
  all-MISSING also prints `scope (proposed from §3 Touches): ...`
  composed from real Touches paths — propose-not-impose, pure read,
  fail-open (never blocks a freeze)
- test_scope_echo_draft.py: 6 red/green tests on a live CLI board;
  two honest ground corrections found red-side (second freeze is a
  benign exit-0 no-op; the ./src/ default is REAL — new-task
  scaffolds a task-local src/)
- ENGINE_MD5 -> 80b8121a, engine synced x3; SEAMS _declared_scope
  pin re-aimed 5526->5562; docstring reworded twice for the
  SEAMS-anchor guard + the 'seam' slang scanner

Fence: full suite 3476/3476 OK. Gate PASS.

refs: milestone ceremony-to-effort (scope-echo-draft), stacked on PR #145
author: Tin Dang <tindang.ht97@gmail.com>

* feat(method): risk-proportional gate render — compact form for mechanical/fast (ceremony-to-effort 6/7)

The verify-gate render now scales with the risk class instead of one
8-section ceremony for everything: `sensitivity: mechanical` and
fast-lane tasks use the compact form (banner - SUMMARY - EVIDENCE -
APPROVE); security/data/architecture and every freeze keep the full
card.

- 6-verify.md: right-size dispatch appended to the gate card;
  imperatives (render-before-gate · Reported: yes · never-self-stamp)
  verbatim
- 3-plan.md: the freeze always renders the full card, never compact
- fast-lane.md: render sentence aligned (freeze full, fast verify
  compact); the guide lives in the REFERENCE pool (32B headroom) —
  growth absorbed by same-guide compression
- test_risk_report_render.py: 7 red/green tests (dispatch, order,
  reservation, single-home guard, pool target)
- synced x3 skill trees; prose-only — ENGINE_MD5 unchanged

Fence: full suite 3483/3483 OK. Gate PASS.

refs: milestone ceremony-to-effort (risk-report-render), stacked on PR #145
author: Tin Dang <tindang.ht97@gmail.com>

* feat(method): fold draft at close — milestone-done pre-classifies open SPEC deltas (ceremony-to-effort 7/7)

Close-time delta resolution now starts from a proposal instead of a
blank re-read: milestone-done's SPEC nudge grows a mechanical draft —
`seed` when a delta's cited path resolves in the current tree, `drop?`
(a question, never a verdict) when its paths are dead, `seed —
forward hand-off by default` when pathless. Stdout only, fail-open;
the human still resolves every delta — no gate change.

- add.py: draft block inside cmd_milestone_done's open_spec branch;
  label rendered via _FOLD_VERB (the add.py literal slang guard bans
  the bare word — same dodge as the v11 nudge)
- test_fold_draft_at_close.py: 5 red/green tests driving a real
  milestone to done through the CLI (three delta shapes, nudge
  survival, stdout-only equality, footer-last)
- ENGINE_MD5 -> 8aef02ae, engine synced x3; SEAMS _declared_scope
  pin re-aimed 5562->5581

Fence: full suite 3488/3488 OK. Gate PASS.

This closes the 7-task build: all seven ceremony cuts shipped inline
via the fast lane, each with a frozen contract, a red-first suite,
and a green full-suite fence.

refs: milestone ceremony-to-effort (fold-draft-at-close), stacked on PR #145
author: Tin Dang <tindang.ht97@gmail.com>

* docs(method): ceremony-to-effort close ship-review — 7/9 exit criteria verified, 2 bind at re-measure

Fill the milestone's Close ship-review: per-task evidence rows (7 gates
PASS, commits cited), ship-by-domain summary, and exit-criteria
verifiers. 7/9 checked with test-pinned evidence; OPEN: read-burden
<=30KB (partial — fast lane 37KB / full 49.1KB from 56KB; big refs 0x
on standard gates) and the pinned-meter WM1 re-measure (human-gated
paid run). Milestone stays open until the re-measure per intake.

refs: milestone ceremony-to-effort, stacked on PR #145
author: Tin Dang <tindang.ht97@gmail.com>

* chore(method): capture todo #33 — lock-reclaim TOCTOU race on slow CI runners

Two consecutive py3.10 CI failures observed peak=2 concurrent lock
holders in the reclaim tests (known-waived flake class, but the
window is real on slow runners). Captured so it survives the close.

author: Tin Dang <tindang.ht97@gmail.com>

* fix(benchmark): run.py resolves {REPO_ROOT} in arm setup_steps (todo #27)

The pilot path calls resolve_setup_steps; the thin run.py CLI passed
the arm raw, so a live `run --arm add --wm 1` executed the literal
`uv pip install -e {REPO_ROOT}/add-method` and the rep died at setup
(observed at the ceremony-to-effort WM1 re-measure rep 1 — $0 spent,
caught before any agent turns). Red/green: test_run_cli_resolve pins
both the run and resume paths; benchmark suite 188/188.

author: Tin Dang <tindang.ht97@gmail.com>

* docs(benchmark): ceremony-to-effort WM1 re-measure results (n=3, $10.53)

3 reps on the pinned meter with the new engine: fidelity 0.97-0.98,
zero regressions, mean 134 turns / 18.7 add.py calls / $3.51 — the
cheapest honest ADD round ever archived (-32% turns / -44% cost vs
baseline-round3; lean rounds excluded as engine-bypassing). Strict
exit bar (calls <=12, <=77.7t/$2.97) UNMET; --help and dup-retry
residue near-zero. Residual waste anatomy recorded as next levers:
double-init (harness/flow), milestone bait (r1), re-cross repairs,
status re-reads. Criterion #9 annotated, box left open for the
human's accept-partial or follow-on decision.

author: Tin Dang <tindang.ht97@gmail.com>

---------

Co-authored-by: Tin Dang <tindang.ht97@gmail.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.

2 participants