Repository navigation
Description
Tier: 1
Project: cli
Type: test
Objectives
O1. A conformance test installs the packed Atta runtime, starts a steps-shaped Flow through the public startControlledRun with a caller-supplied node executor, halts it through public run control, reads its checkpoint, continues it through the public resumeControlledRun without re-running a finished step, and cancels a second run through public run control; every one of those calls is a public packed export.
O2. The same Flow run under the built-in executor produces the same lifecycle event kinds in the same order and the same checkpoint transitions as under the caller-supplied executor; the test asserts the two sequences are equal.
O3. An import check in that test refuses any import of the packed runtime that is not a public package export, so the run-control proof cannot pass through an internal path.
O4. The Engine capability matrix and the run-control boundary registry entries no longer describe caller-supplied executor support on public start and resume as missing; they name the new test as the delivered evidence for that boundary.
O5. The new test runs in continuous integration in exactly one shard.
O6. The new test file contains the cutover-gate row id in its full registry form, cutover-gate:gate-16, in the name of the test that proves the public start and resume sequence, so the registry's evidence entry can bind gate 16 to this file.
Documentation
apps/cli/specs/dev-review-evaluation-program.md— section 6.17, the run-control boundary's required tasks, grader and rule (O1, O2, O3)apps/cli/specs/dev-review-engine-capability-matrix.md— the consumption-boundary paragraph that records the run-control gap (O4)apps/cli/tests/conformance/packed-runtime-consumer.test.ts— the existing packed-consumer test this one extends in shape (O1)harness/dev-process/engine-runtime/run-process.ts— how this repository already passes its executor to the public start and resume (O1)harness/dev-process/engine-runtime/run-process.test.ts— the existing halt-then-resume test shape on one checkpointer (O1)
Planner's rationale
Boundary — Write the evidence that the packed runtime's public start and resume accept this repository's executor, and correct the documents that still say they do not. It does NOT change any runtime, Flow, action or executor code, and it does NOT re-pack the vendored tarballs. Pinned files: apps/cli/tests/conformance/packed-runtime-public-run-control.test.ts, apps/cli/tests/ci-shards/shard-3.txt, apps/cli/specs/dev-review-engine-capability-matrix.md, apps/cli/tests/eval/registry/modules.json, apps/cli/tests/eval/registry/shards/typed-sources.json. Out: harness/dev-process/engine-runtime/run-process.ts (read only); the CLI library directory is in the Surface only because a repository scanner there imports the pinned spec and registry files, and it is not edited; the vendored Engine tarballs and their digests; the gate-16 row's contract text, which already names its evidence by section and is not edited here.
reader-resolvable-prose: code comments, READMEs and specs carry no Issue or pull-request numbers and no tranche slugs.
doc-claims: every AEG:CLAIM line in a changed file is kept true in the same commit.
Sizing — One verification story: the public start, halt, inspect, resume and cancel work with the caller's executor exactly as with the built-in one. Passes the four too-big tests: one story, one agent can hold it, five pinned files, one failure mode. Size S.
Project(s) + blast radius — Project: cli. Test and documentation only; no shared package source changes, so no consumer needs re-verification.
Dependency rationale — No Depends-on; no Conflicts-with.
Traps to avoid — Do NOT import from dist/ paths or any subpath the package does not export; import only from the package names. Do NOT reuse a checkpointer across the two compared runs; give each run its own, as LangGraph's testing guidance requires. Do NOT spawn a real agent; the executor is a stub that records node ids, so the test runs the same with no Claude or Codex login. Do NOT edit the tarballs or their digests. A new test file must be listed in one apps/cli/tests/ci-shards/shard-N.txt in the same commit.
Suggested agent-class — mid: one test against a documented public API plus three text corrections.
Stop-and-escalate — Stop if the public startControlledRun or resumeControlledRun refuses or ignores the caller-supplied executor in the installed package; paste the failing assertion, because that means the boundary is not delivered and the documents must keep saying so. Stop if the built-in and caller-supplied runs differ in lifecycle events in a way the public types do not explain; paste both sequences.
Docs to keep coherent — apps/cli/specs/dev-review-engine-capability-matrix.md; apps/cli/specs/dev-review-invariants.md (read only: its cutover-gate 16 paragraph states the requirement, not the gap).
Premises
harness/dev-process/engine-runtime/run-process.tscontainsreturn await startControlledRun({apps/cli/specs/dev-review-engine-capability-matrix.mdcontainsPublic start and resume doapps/cli/tests/eval/registry/modules.jsoncontainsGate-16 completion test: packed-runtime-public-run-control.test.tsapps/cli/tests/eval/registry/shards/typed-sources.jsoncontainsis the gate-16 start/resume proof when Atta Engine delivers that public seamapps/cli/tests/ci-shards/shard-3.txtcontainstests/conformance/packed-runtime-consumer.test.ts
Surface
in: apps/cli/tests, apps/cli/specs, apps/cli/src/lib
out: harness, processes, apps/log-server, aeg-root
Parts
Part 1 (O1, O3) — The public start, halt, checkpoint read, resume and cancel sequence with a caller-supplied executor, and the public-export import check.
Part 2 (O2) — The comparison of lifecycle events and checkpoint transitions against the built-in executor.
Part 3 (O4) — The capability matrix and both registry entries name the delivered evidence.
Part 4 (O5) — The shard entry.
Part 5 (O6) — The full gate-16 row id in the proving test's name.
Test plan
cd apps/cli && bun test --timeout=30000 tests/conformance/packed-runtime-public-run-control.test.ts → 0 fail; start, halt, resume without replay and cancel pass with the caller's executor; built-in and caller sequences equal; the proving test's name contains `cutover-gate:gate-16`
cd apps/cli && bun test --timeout=30000 tests/conformance/packed-runtime-consumer.test.ts tests/eval/exit-check.test.ts tests/eval/registry.test.ts → 0 fail
cd apps/cli && bun test --timeout=30000 tests/ci-shards.test.ts → 0 fail
bunx turbo run typecheck --affected → exits 0
Stop conditions
- The public start or resume refuses or ignores the caller-supplied executor in the installed package.
- The built-in and caller-supplied runs differ in lifecycle events in a way the public types do not explain.
Origin
Principal-directed, 2026-10-25: verify in code whether the Engine run-control boundary is delivered. The packed public start and resume already accept a caller's executor and this repository's Engine runtime passes one; the named evidence test was never written and two documents still record the boundary as missing.
Activity
daniboomerang commentedon Oct 25, 2026
Brief hash: d09349aaa0753fc825f3061a5b259b0c217c1df0002858db3e2dcb4f6b46f4f8
For: [model] (coding-agent CLI on a dev machine, dispatched locally, unattended)
Reason: Suggested agent-class — mid: one test against a documented public API plus three text corrections.
Owner: the Principal
Goal: The packed runtime's public start and resume run this repository's executor, with halt, inspect, resume and cancel proved
Project: cli
Tier: 1
Closes #1642
You are the AEG Developer. Run
bun apps/cli/src/index.ts doctrine --role developer --printand read its output first. Mandatory.Objectives
O1. A conformance test installs the packed Atta runtime, starts a steps-shaped Flow through the public
startControlledRunwith a caller-supplied node executor, halts it through public run control, reads its checkpoint, continues it through the publicresumeControlledRunwithout re-running a finished step, and cancels a second run through public run control; every one of those calls is a public packed export.O2. The same Flow run under the built-in executor produces the same lifecycle event kinds in the same order and the same checkpoint transitions as under the caller-supplied executor; the test asserts the two sequences are equal.
O3. An import check in that test refuses any import of the packed runtime that is not a public package export, so the run-control proof cannot pass through an internal path.
O4. The Engine capability matrix and the run-control boundary registry entries no longer describe caller-supplied executor support on public start and resume as missing; they name the new test as the delivered evidence for that boundary.
O5. The new test runs in continuous integration in exactly one shard.
O6. The new test file contains the cutover-gate row id in its full registry form,
cutover-gate:gate-16, in the name of the test that proves the public start and resume sequence, so the registry's evidence entry can bind gate 16 to this file.Documentation
apps/cli/specs/dev-review-evaluation-program.md— section 6.17, the run-control boundary's required tasks, grader and rule (O1, O2, O3)apps/cli/specs/dev-review-engine-capability-matrix.md— the consumption-boundary paragraph that records the run-control gap (O4)apps/cli/tests/conformance/packed-runtime-consumer.test.ts— the existing packed-consumer test this one extends in shape (O1)harness/dev-process/engine-runtime/run-process.ts— how this repository already passes its executor to the public start and resume (O1)harness/dev-process/engine-runtime/run-process.test.ts— the existing halt-then-resume test shape on one checkpointer (O1)Premises
Checked against the code when this task Issue was cut, and again against the default branch at dispatch — facts, not claims.
harness/dev-process/engine-runtime/run-process.tscontainsreturn await startControlledRun({apps/cli/specs/dev-review-engine-capability-matrix.mdcontainsPublic start and resume doapps/cli/tests/eval/registry/modules.jsoncontainsGate-16 completion test: packed-runtime-public-run-control.test.tsapps/cli/tests/eval/registry/shards/typed-sources.jsoncontainsis the gate-16 start/resume proof when Atta Engine delivers that public seamapps/cli/tests/ci-shards/shard-3.txtcontainstests/conformance/packed-runtime-consumer.test.ts2. Context — read before doing anything
developer-review-engine-proof-v1, task 1, Issue [developer-review-engine-proof-v1] 1 — The packed runtime's public start and resume run this repository's executor, with halt, inspect, resume and cancel proved #1642. Branchtask/developer-review-engine-proof-v1/1.Depends-on: —,Conflicts-with: —.b39fb00e8e327a1a9ba79de16fc84eeeb5154a25— the checkout's HEAD equaled the remote default branch, and no pinned file below carried an uncommitted change, when these facts were read.apps/cli/tests/conformance/packed-runtime-public-run-control.test.ts,apps/cli/tests/ci-shards/shard-3.txt,apps/cli/specs/dev-review-engine-capability-matrix.md,apps/cli/tests/eval/registry/modules.json,apps/cli/tests/eval/registry/shards/typed-sources.json. Out:harness/dev-process/engine-runtime/run-process.ts(read only); the CLI library directory is in the Surface only because a repository scanner there imports the pinned spec and registry files, and it is not edited; the vendored Engine tarballs and their digests; the gate-16 row's contract text, which already names its evidence by section and is not edited here.reader-resolvable-prose: code comments, READMEs and specs carry no Issue or pull-request numbers and no tranche slugs.doc-claims: every AEG:CLAIM line in a changed file is kept true in the same commit.dist/paths or any subpath the package does not export; import only from the package names. Do NOT reuse a checkpointer across the two compared runs; give each run its own, as LangGraph's testing guidance requires. Do NOT spawn a real agent; the executor is a stub that records node ids, so the test runs the same with no Claude or Codex login. Do NOT edit the tarballs or their digests. A new test file must be listed in oneapps/cli/tests/ci-shards/shard-N.txtin the same commit.3. Technical dependencies
Dependency rationale — No Depends-on; no Conflicts-with.
4. Technical surface map
Create:
Modify:
Out of surface: harness, processes, apps/log-server, aeg-root — a change there, or to any path no Surface
in:glob covers, is still published: the review-loop driver records each such path in the pull request body's beyond-Surface block, and the reviewers judge it like any change.Premise pins
Premise:
5. Pre-flight checks
Step 0 (mandatory, verbatim):
origin/main; branch suffix literal-matches the task id.bun apps/cli/src/index.ts task run), the driver has already run the dispatch-readiness gate plus, on this repository toolchain, its own fuller derivation from its own unsandboxed process before dispatching you (re-derived at render time: it was ready), and dispatches you only when that verdict is READY — a NOT READY verdict refuses the turn before it starts, so being dispatched is the verdict: look for no file and run neither script, whose ownghcall fails inside your sandbox. Working manually, with no driver behind you, fall back toroles/developer.md's own items 3/5/7 prose — each a complete, hand-run forge check in its own right.On any failure: STOP and report.
6. Numbered parts — publish once with
publish_changeswhen every Part is done, thenopen_pull_requestPart 1 (O1, O3): The public start, halt, checkpoint read, resume and cancel sequence with a caller-supplied executor, and the public-export import check.
Files (touches @attalabs/vinaya):
The pre-push hook runs the affected suite on your one push and refuses it on failure — do not run it yourself per Part.
Part 2 (O2): The comparison of lifecycle events and checkpoint transitions against the built-in executor.
Part 3 (O4): The capability matrix and both registry entries name the delivered evidence.
Part 4 (O5): The shard entry.
Part 5 (O6): The full gate-16 row id in the proving test's name.
7. Documentation-update list
.vinaya/doc-ownersderivation matched zero bindings against this task's surface — no mechanically-derived doc updates. Confirm no additional doc artifact applies before treating this list as final.8. Verification before claiming done
run_checksand CI provide the authoritative results. Do not hand-run or paste static-gate commands. Working manually, run this repository's declared typecheck, lint/format, build, and documentation-gate commands yourself.bun apps/cli/src/index.ts doctrine --role developer --printgenuinely satisfied; use the controller'srun_checksresult, hooks, and CI as gate evidence.9. Test Plan
10. Stop conditions
Stop-and-escalate — Stop if the public
startControlledRunorresumeControlledRunrefuses or ignores the caller-supplied executor in the installed package; paste the failing assertion, because that means the boundary is not delivered and the documents must keep saying so. Stop if the built-in and caller-supplied runs differ in lifecycle events in a way the public types do not explain; paste both sequences.11. Constraints
12. Deliverable
[developer-review-engine-proof-v1] 1 — The packed runtime's public start and resume run this repository's executor, with halt, inspect, resume and cancel provedopen_pull_requesttool (title and body); publish your commits withpublish_changesand update the body withupdate_pull_request_body/refresh_evidence— you hold nogh/git pushcredential.publish_changes, when every Part is done; then open the pull request withopen_pull_request. Publish again only to answer review findings or a red gate — a refused hook, a failing check, a merge conflict.bun apps/cli/src/index.ts doctrine --template pr-report --print), withCloses #1642at the top of the header block. This brief stays frozen on the task Issue and never rides in the body.run_checksand CI run it.git diff origin/main...HEAD --statas context only; Surface is judged by the driver'ssurface-scopecheck, never by this hand-run diff. Token use needs no report — the Vinaya log records it.daniboomerang commentedon Oct 25, 2026
The dev-review-loop paused: infrastructure — enforcement control 'local-gate' is inactive: ring 0 is INERT in this working copy — hooks are tracked at .vinaya/hooks but core.hooksPath is set to '~/Work/Repositories/Me/atta-labs/vinaya/.vinaya/hooks' (git config is never cloned). Remedy: Run
git config core.hooksPath .vinaya/hooksonce per cl….No pull request exists yet for this task, so the pause is recorded on this Issue instead.
A Principal ruling is needed before this can continue. Post it as a comment on this Issue whose FIRST line is exactly this marker — the second number is the ordinal, and it must exceed the one this pause recorded:
Then continue with:
The Operator's own
task_resumeclears this pause too, reading that same ruling from this Issue;task_cancelends it instead.daniboomerang commentedon Oct 25, 2026
The dev-review-loop paused: missing_source — required source(s) could not be prepared, so the Developer turn did not start: apps/cli/specs/dev-review-evaluation-program.md (missing_in_repository:
apps/cli/specs/dev-review-evaluation-program.mddoes not exist at b39fb00); apps/cli/specs/dev-review-engine-capab….No pull request exists yet for this task, so the pause is recorded on this Issue instead.
A Principal ruling is needed before this can continue. Post it as a comment on this Issue whose FIRST line is exactly this marker — the second number is the ordinal, and it must exceed the one this pause recorded:
Then continue with:
The Operator's own
task_resumeclears this pause too, reading that same ruling from this Issue;task_cancelends it instead.daniboomerang commentedon Oct 25, 2026
The dev-review-loop paused: infrastructure — an uncaught error ended round 1's own processing: required source(s) could not be prepared, so the Developer turn did not start: apps/cli/specs/dev-review-evaluation-program.md (missing_in_repository:
apps/cli/specs/dev-review-evaluation-program.mddoes not exist at b39fb00….No pull request exists yet for this task, so the pause is recorded on this Issue instead.
A Principal ruling is needed before this can continue. Post it as a comment on this Issue whose FIRST line is exactly this marker — the second number is the ordinal, and it must exceed the one this pause recorded:
Then continue with:
The Operator's own
task_resumeclears this pause too, reading that same ruling from this Issue;task_cancelends it instead.daniboomerang commentedon Oct 25, 2026
The dev-review-loop paused: infrastructure — an uncaught error ended round 1's own processing: the developer's prior launch (attempt 1) ended incomplete (no failure recorded) before its vendor session was ever bound — cannot resume the exact session, and starting a fresh one would lose worker continuity.
No pull request exists yet for this task, so the pause is recorded on this Issue instead.
A Principal ruling is needed before this can continue. Post it as a comment on this Issue whose FIRST line is exactly this marker — the second number is the ordinal, and it must exceed the one this pause recorded:
Then continue with:
The Operator's own
task_resumeclears this pause too, reading that same ruling from this Issue;task_cancelends it instead.