Repository navigation
Certify the adversarial implementation workflow end to end #299
Description
Story
As a release owner, I want one finite adversarial certification of the supervised implementation workflow, so completion of #181 is demonstrated under both supported workflow entrypoints and under interruption, replay, stale state, cancellation, and failure rather than inferred from component happy paths.
Certification target and order
The evidence matrix remains frozen. The first certification execution handback is under Planner correction below; it has not established a new shipped-behavior defect.
Diagnostic baseline recorded and exercised on 2026-08-25:
- PR ✨ Compose and certify the supervised adversarial implementation workflow #181 head:
b0c31e2069058a77db40db172271e93ae352485c - PR ✨ Compose and certify the supervised adversarial implementation workflow #181 base and merge base:
170a021db9d551f96f1e9bfdd9ea61f74e30e44e - PR ⏱️ Let a trusted host decide when the ordinary resume runs #605 merged at
b0c31e2069058a77db40db172271e93ae352485c. - PR ✨ Compose and certify the supervised adversarial implementation workflow #181 remains open and draft.
The prerequisite feature stack is present in that recorded target:
- Read complete pull-request review evidence from a workflow #576 landed through PR 🔎 Let a workflow read the objections a pull request already holds #580 at
f230e8fd59df293fb9b1677ef4a7466900be4a99and is already in the recorded base. - Compose the supervised adversarial implementation workflow #301's composed consumer is present in PR ✨ Compose and certify the supervised adversarial implementation workflow #181 head through the shipped AC0-AC7 evidence. Compose the supervised adversarial implementation workflow #301 remains open with PR ✨ Compose and certify the supervised adversarial implementation workflow #181; its implementation is not absent from this target.
- Deliver answers to suspended workflows for later resumption #300 slice 2 is the PR ⏱️ Let a trusted host decide when the ordinary resume runs #605 merge at the recorded head and owns the shipped SCH1-SCH9 scheduler evidence.
Black-box preflight proved that the shipped five-stage workflow reaches # Accepted through both supported entrypoints with real Git and the planned loopback providers. It also established three defects that prevent the frozen matrix from being certified:
- workflow CLI assembly installs browser elicitation inside
host.attach(), so<Elicit>opens a live form instead of committing a workflow suspension; workflows/adversarial-implementation/Implementation.mdinstructs the Agent to produce an inadmissible generated fragment,<File path="README.md" as="readme" />; andXMD_WORKFLOW_GITHUB_ISSUES.endpointis parsed but not passed to the GitHub Issues provider.
The reported retained-Agent crash/resume defect is not a shipped-behavior blocker. Its reproducer returned different canonical identities from session/new and session/load; the workflow correctly refused that replacement. With one stable provider identity, the same process-kill reproducer resumes to completion, performs no second Agent turn, and preserves the committed prefix. C2 and CF2 therefore remain unchanged.
All three prerequisite repairs and the #614 test-seam integration are complete. The initial post-repair certification target recorded on 2026-08-26 was:
- PR ✨ Compose and certify the supervised adversarial implementation workflow #181 head:
dae877a294bbbba5057ba2754f1970c2fcda6186 - PR ✨ Compose and certify the supervised adversarial implementation workflow #181 base and merge base:
84a8068b770a7435e4c0199cc0a8e1fb91283d70 - current main at freeze:
84a8068b770a7435e4c0199cc0a8e1fb91283d70 - PR ✨ Compose and certify the supervised adversarial implementation workflow #181: open, draft, mergeable; 40 commits; clean implementation worktree
The 39 original PR commits are range-identical to the preceding integration checkpoint. Commit 39, R3, remains byte-identical to its Planner-PASS feedback commit. Commit 40, dae877a294bbbba5057ba2754f1970c2fcda6186, changes only scripts/tests/adversarial-composition-workflow.test.ts to consume #614's shared journal readers. The combined integration command passed with 33 tests, 200 steps, and zero failures; git diff --check passed.
Certification implementation passed Planner feedback review at signed commit 45123ff40d94cccdd0b30272f01bd65aa60c2e31, directly above that target. Main then advanced through PR #615 and three site-only commits. The complete range was rebased and the final-execution target is frozen on 2026-08-26:
- PR ✨ Compose and certify the supervised adversarial implementation workflow #181 head:
e85479c33ce4c91d821e0eaf195150db374ae4a6 - PR ✨ Compose and certify the supervised adversarial implementation workflow #181 base and merge base:
6717e867c9467114e6b060620d5b18c87beb2c48 - current main at freeze:
6717e867c9467114e6b060620d5b18c87beb2c48 - PR ✨ Compose and certify the supervised adversarial implementation workflow #181: open, draft, mergeable; 41 signed commits; clean worktree
Forty commits are range-identical. #605 has one context-only shift where PR #615 rewrote the neighbouring artifact-export capability row; #605's added scheduling lines are identical and the final table contains the union. The certification commit remains byte-identical as signed head e85479c33ce4c91d821e0eaf195150db374ae4a6. Focused CF1-CF6/SCH9/runtime-exclusion evidence passes there with 8 tests, 35 steps, and zero failures. #292 does not begin until this issue exits.
Certification execution handback and Planner correction
The first execution produced CF4, CF5, and CF6 passes, but CF1's two entrypoint rows, CF2, and CF3 stopped at the first replayed Agent attachment. That result is a certification-harness failure, not evidence of a shipped defect: the generated ACP server returns unrelated random values for sessionId and canonical _meta.agentSessionId from session/new, then asserts the transport sessionId as canonical from session/load. This is the exact invalid identity replacement rejected during preflight and directly violates the frozen harness requirement below.
Correct the fake provider so one generated session identity is returned as both sessionId and _meta.agentSessionId from session/new; every later session/load for that session asserts the same identity. If CF1-CF3 still fail after that correction, return the new trace before planning a product repair.
The first owner-suite run also exposed a stale SCH9 content pin. Preserve #300's historical stacked-base record 525efaa736110f0ffcd5534985897d1db0692124 over 170a021db9d551f96f1e9bfdd9ea61f74e30e44e; update only SCH9's reviewed-consumer blob pins and adjacent explanation to record the Planner-reviewed R3 and #614 amendments at frozen head dae877a294bbbba5057ba2754f1970c2fcda6186. The new blob IDs are bb942b506d67431b1621c99ea3e08242a62f77cf for scripts/tests/adversarial-composition-workflow.test.ts and c38076574eae1b55304eade578480f8efbdf3f4b for workflows/adversarial-implementation/Implementation.md. Keep the SCH9 ID and all SCH1-SCH8 behavior unchanged.
The certification suite must be excluded from ordinary Deno, Node, and Bun discovery because its explicit #299 owner builds and drives dist/xmd, while the ordinary runtime shards do not. The two runtime-registration paths are authorized. Their comments and reason must state that #299's explicit frozen command owns this suite; they must not claim the smoke job runs it.
The amended expected path set is exactly:
scripts/tests/adversarial-workflow-certification.test.tsscripts/runtime-test-exclusions.tsscripts/tests/runtime-exclusions.test.tspackages/cli/tests/workflow-scheduling.test.ts
The fake identity, CF3 installation, SCH9, and registration prose corrections are complete in signed feedback commit 45123ff40d94cccdd0b30272f01bd65aa60c2e31. CF1-CF6, SCH9, and the runtime-exclusion owner evidence pass there: 8 tests, 35 steps, zero failures. Planner feedback verdict is PASS for that exact commit. Do not spend the 31-file owner command on its superseded base; rebase first as directed below.
Durable repair tracking:
- R1: Make workflow Elicit commit durable suspension through the CLI #607, merged through PR 🐛 Let the workflow host answer its own <Elicit> through the CLI #609 as
cbd30099392b19aa82bb8c2a36fe4c1ee092ed53— complete - R2: Honor the configured GitHub Issues API endpoint #608, merged through PR 🐛 Send an Issue to the API base the host configured (#608) #613 as
37aa8a623f6c7dfe4874eac2adcd1348ab4f28a1— complete - R3: Compose the supervised adversarial implementation workflow #301 and PR ✨ Compose and certify the supervised adversarial implementation workflow #181, feedback commit
038d484f8854d1a18018bd2de88557fa95ae6ab5, byte-identical in frozen headdae877a294bbbba5057ba2754f1970c2fcda6186— complete
The exact frozen head, base, and merge base are the certification preflight. Do not substitute a later local or remote revision silently.
Scope boundaries
- Worker Shell is excluded from this gate. Run shell blocks in
xmdworkflows #363 owns it and is not a dependency of ✨ Compose and certify the supervised adversarial implementation workflow #181. - Completed replay starts no Worker and makes no Worker claim. Its tripwires cover Workspace, Agent, process, Git-host, Issue, and Fetch providers.
- Live interruption contains no Worker Shell case.
- Require ACP adapters to enforce tool-free workflow Agent sessions #496 remains a non-blocking hardening follow-up. This certification proves the initial workflow Agent profile: empty disposable cwd, no Workspace or host path, no additional directories, no configured MCP servers, an empty requested tool set where supported, deny-all permission handling, and explicit failure of native permission requests. It does not claim portable adapter-level absence of every native tool.
- Arbitrary Workspace contents are neither secret-scanned nor treated as journal or training data.
- Node and Bun are unsupported workflow hosts. They prove common help and fail-closed workflow refusal only; they do not execute the supervised workflow.
deno task checkanddeno task check:jsrare typing and publishability gates, not runtime evidence.
Frozen certification matrix
| ID | Certification requirement | Sufficient evidence assignment |
|---|---|---|
| C1 | The complete supervised workflow reaches acceptance under both the Deno source entrypoint and the compiled binary. | CF1, the same shared black-box workflow scenario executed through each entrypoint. |
| C2 | Process death and partial replay preserve the exact committed journal and Workspace frontier; completed replay performs no live attachment or effect. | CF2 plus existing WFX and WFI replay evidence. Completed replay trips Workspace, Agent, process, Git-host, Issue, and Fetch providers. |
| C3 | A retained answer resumes the exact suspension through ordinary scheduled resume, without another executor or duplicate consumption. | CF3 supplies one real composed consumer. The #300 scheduler suite owns race, cancellation, and duplicate permutations. WAD remains authoritative for delivery and schema behavior; this gate does not repeat that matrix. |
| C4 | Live interruption tears down representative Agent, filesystem, local-Git, Git-host, and input-continuation work. Explicit cancellation handles stale, suspended, and interrupted runs through the lifecycle matrix. | Reuse WAP cancellation, WAC6/WF cancellation, the Git.Commit crash case, GH7's shared Git-host cancellation, #300's scheduler cancellation case, and lifecycle-control evidence. No Worker Shell case. |
| C5 | Workspace mutations and filtered journal results commit or roll back together; missing or corrupt authoritative state never restores falsely. | Existing WAC, WRR, WS, and inspection-recovery cases. No duplicate File/Git permutation table. |
| C6 | Multiple named Repositories and Worktrees retain dirty and unpushed state across restart. | CF4, one vertical two-repository scenario. #293's Repository/Worktree suites remain authoritative for component permutations. |
| C7 | Stale bases, moved remote branches, changed pull-request heads, and ambiguous external completion fail or reconcile according to their owning boundary. | Existing workflow-run/base, shared Git-host, Push, PullRequest, Issue, and #576 pull-request-read suites. The selected cases below are one representative per distinct boundary, not one per component. |
| C8 | The final workflow uses the shipped Agent ceiling and generated-XMD admission; malformed output and bounded exhaustion fail before later effects. | CF1 and CF5 plus existing WAP, WSL, GXC, WGAC, WAL, and #301 exhaustion evidence. |
| C9 | History inspection, duplicate-effect prevention, compatible fork, incompatible-fork rejection, and secret refusal remain intact; no decision material exists only in a transcript, host path, provider handle, or Git sidecar ref. | Existing lifecycle/fork suites and #199 scanner evidence, plus CF6's final-run retained-state/history sweep. No arbitrary Workspace-content scan. |
| C10 | Runtime, packaging, and documentation claims are truthful. | Deno source and compiled binary perform C1. Node and Bun run only WFH common-help and fail-closed unsupported-host/refusal cases. deno task check and deno task check:jsr remain separate gates. Final documents use settled terminology and shipped behavior only. |
This matrix is finite. A new case blocks certification only if it proves one of C1-C10 unmet or carries a distinct structural consequence that receives an explicit architecture amendment.
Frozen final-workflow scenarios
The new black-box evidence lives in scripts/tests/adversarial-workflow-certification.test.ts. It launches real CLI processes against private temporary run stores and disposable local/bare repositories. The same fixture and assertions are used for Deno source and compiled xmd; entrypoint-specific branches are limited to launching the executable.
| Scenario | Exact test name | Proves |
|---|---|---|
| CF1 | CF1: completes the supervised workflow through Deno source and compiled xmd |
One authored run performs discovery, planning, authorization, generated observations and mutation, local Git, Push, PullRequest, complete review reads, Issue handling, scheduled continuation, and final acceptance through each supported entrypoint. The retained Agent profile is empty cwd/no directories/no MCP/empty requested tools/deny-all. |
| CF2 | CF2: resumes a killed final workflow from the exact committed journal and Workspace frontier |
A real process death after a committed effect and during the next effect leaves the exact committed event IDs, event bytes, event-to-root associations, current Workspace root, Repository/Worktree state, and no partial next result. Resume replays the prefix, performs the suffix once, and completes. A subsequent completed replay installs tripwires for Workspace, Agent, process, Git-host, Issue, and Fetch and reaches none. |
| CF3 | CF3: schedules one ordinary resume for one retained answer |
The composed workflow suspends at a real checkpoint, delivery retains one valid answer without executing, the #300 scheduler invokes the ordinary resume path, one executor consumes it, one answer event is published, and the workflow continues once. Scheduler race, duplicate, and cancellation permutations remain in #300's suite. |
| CF4 | CF4: retains two named Repositories and Worktrees with dirty and unpushed state across restart |
One run mutates two explicit Repository/Worktree branches, leaves both dirty and one local commit unpushed, restarts, observes the same state at the retained frontier, then publishes only the authored effects. It does not duplicate #293's component grammar or topology permutations. |
| CF5 | CF5: malformed Agent output and bounded exhaustion stop before later effects |
The real final-workflow gates reject one malformed Agent envelope and one exhausted correction/implementation bound; a native permission request is denied and fails its turn explicitly. In every branch no later generated mutation, Git, Git-host, Issue, or acceptance effect begins. Existing WAP/WSL/GXC/WGAC/WAL and #301 suites own their internal permutations. |
| CF6 | CF6: completed replay and retained history contain no hidden decision state |
The accepted run's status/history/fork surfaces account for every material decision and durable effect; compatible fork succeeds, incompatible fork refuses, no duplicate external effect occurs, and a synthetic secret is refused before journal persistence. The sweep finds no transcript-only decision, host path, provider handle, credential, endpoint, payload, or Git sidecar ref in retained lifecycle/history records. It does not scan arbitrary Workspace files. |
CF1 runs in two rows:
- Deno source:
deno run --allow-all --cached-only --frozen packages/cli/src/deno.ts - compiled binary:
dist/xmd(dist/xmd.exeon Windows)
CF2 is the one required kill/resume case and runs through the Deno source row. Component crash and replay permutations remain in WFX, WFI, WAC, and their owner suites.
Selected authoritative cases
These are the representative existing/future owner cases consumed by the matrix. Their owner suites may contain more permutations; this gate does not restate them in the final-workflow file.
- C2: WFX1 and WFI2, plus WAL2 completed replay and WAL3 interrupted resume.
- C3: WAD9-WAD12 plus SCH1-SCH9 in
packages/cli/tests/workflow-scheduling.test.ts; CF3 is the one real composed consumer. - C4: WAP3 live Prompt teardown; WAC6 and the workflow Files cancellation case;
packages/workflow/tests/git-commit-crash.test.ts—commits the whole transition or none of it when a real SIGKILL lands; GH7's cancellation branch; SCH5-SCH7; WFC2-1/WFC2-2 and WFC3-1/WFC3-2. - C5: WAC1, WAC4-WAC6, WAC12-WAC16, WAC24-WAC26; WRR4-WRR6 and WRR10-WRR11; WS19-WS27; WLI10-WLI17.
- C6: CF4 plus the Add named Repository and Worktree composition #293 Repository storage, replay, materialization, control-plane, component, and Worktree replay suites.
- C7: WR5/WR6 for definition base; GH4/GH6 for interrupted or ambiguous Git-host completion;
Git.Push's moved destination case;PullRequest'sfails when the branch moved after this run published itandrefuses an ambiguous branch pair without creating a third; Read complete pull-request review evidence from a workflow #576's changed-head read case; Issue recovery/adoption evidence. These are boundary cases, not a cross-product. - C8: generated-XMD complete preflight, exact pinned identity/request/root ceilings, replay, malformed-request refusal, Agent ceiling, and bounded-loop exhaustion from WAP1-WAP6, WSL1-WSL8, WAL1-WAL9, GXC, WGAC, AC0-AC7, and the adversarial-planning suite.
- C9: WLI history, WFF1/WFF4/WFF7/WFF10/WFF11, GH3/GH4 duplicate prevention, and Reject secrets before journal persistence by default #199's
packages/core/tests/secret-scanner.test.tsevidence. - C10: WFH1-WFH4 and the final document terminology/behavior assertions in the certification file.
The refreshed shipped owner-suite map is:
packages/cli/tests/workflow-agent.test.tsowns WAL1-WAL9, including the authored observation loop, retained proposal boundary, completed replay tripwire, interrupted resume, permission failure, and bounded exhaustion.packages/acp/tests/provider.test.tsowns WAP1-WAP6, including the strict Agent profile and live turn/session teardown.packages/workflow/tests/workflow-agent-sessions.test.tsowns WSL1-WSL8, including retained session identity, transaction, reconciliation, refusal, and cleanup.scripts/tests/adversarial-composition-workflow.test.tsowns AC0-AC7, the shipped end-to-end composition consumer.scripts/tests/adversarial-planning-workflow.test.tsowns bounded planning, verdict routing, authority isolation, and exhaustion before authorization.
packages/workflow/tests/workflow-agent-loop.test.ts does not exist and is not an evidence owner. No duplicate aggregate is created to reproduce that obsolete planned filename.
Frozen commands
Run these only on exact signed PR #181 head e85479c33ce4c91d821e0eaf195150db374ae4a6, with base and merge base 6717e867c9467114e6b060620d5b18c87beb2c48. Do not use the superseded 84a8068b base. deno task setup prepares the worktree; it is not certification evidence.
Build the binary before the black-box rows:
deno task buildRun the shared final-workflow scenarios:
deno task test scripts/tests/adversarial-workflow-certification.test.tsRun the focused owner suites selected above:
deno task test packages/acp/tests/provider.test.ts packages/cli/tests/workflow-agent.test.ts packages/cli/tests/workflow-crash.test.ts packages/cli/tests/workflow-installation.test.ts packages/cli/tests/workflow-inspection.test.ts packages/cli/tests/workflow-lifecycle-control.test.ts packages/cli/tests/workflow-fork.test.ts packages/cli/tests/workflow-host.test.ts packages/cli/tests/workflow-scheduling.test.ts packages/core/tests/generated-xmd.test.ts packages/core/tests/secret-scanner.test.ts packages/workflow/tests/workflow-agent-sessions.test.ts packages/workflow/tests/workflow-suspension-answer.test.ts packages/workflow/tests/workspace-effect-transaction.test.ts packages/workflow/tests/workspace-root.test.ts packages/workflow/tests/workflow-run-storage.test.ts packages/workflow/tests/repository-storage.test.ts packages/workflow/tests/repository-replay.test.ts packages/workflow/tests/repository-materialization.test.ts packages/workflow/tests/repository-control-plane.test.ts packages/workflow/tests/repository-components.test.ts packages/workflow/tests/worktree-replay.test.ts packages/workflow/tests/git-commit-crash.test.ts packages/workflow/tests/git-host-effect.test.ts packages/workflow/tests/git-push.test.ts packages/workflow/tests/pull-request.test.ts packages/workflow/tests/pull-request-read.test.ts packages/workflow/tests/issue-markdown.test.ts packages/workflow/tests/generated-observations.test.ts scripts/tests/adversarial-composition-workflow.test.ts scripts/tests/adversarial-planning-workflow.test.tsRun only WFH's common-help and fail-closed unsupported-workflow cases under Node and Bun:
pnpm exec tsx --tsconfig tsconfig.node.json --test packages/cli/tests/workflow-host.test.ts
bun test --timeout=300000 packages/cli/tests/workflow-host.test.tsRun the separate typing and publishability gates:
deno task check
deno task check:jsrDelivery still belongs to the repository's normal gate after focused evidence passes:
deno task verifyThe diagnostic head already contains the scheduling, pull-request-read, WAL, WAP, WSL, AC0-AC7, and adversarial-planning owner suites. scripts/tests/adversarial-workflow-certification.test.ts remains the only new certification path; the prerequisite repairs modify their existing owning paths instead of creating another aggregate.
Prerequisite repair stack
These are conformance repairs to settled behavior. They introduce no product or architecture decision, and they do not change C1-C10 or CF1-CF6.
R1: workflow-owned elicitation (#607)
Status: complete. PR #609 merged as cbd30099392b19aa82bb8c2a36fe4c1ee092ed53.
Start independently from exact main 170a021db9d551f96f1e9bfdd9ea61f74e30e44e. Change CLI document assembly so xmd run retains live Web elicitation while xmd workflow leaves <Elicit> to the provider installed by the attached workflow host. Keep <WebForm> available; do not infer the boundary only from the existing testing flag.
Expected paths:
packages/cli/src/cli.tspackages/cli/tests/workflow-suspension.test.ts
The regression launches a real Deno-source xmd workflow start with <Elicit>, observes exit 2 and suspended, records exactly one suspension_request, observes no browser form or WebForm URL, then answers and resumes to the retained value.
Focused feedback command:
deno task test packages/cli/tests/workflow-suspension.test.ts
git diff --checkR2: GitHub Issues endpoint plumbing (#608)
Status: complete. PR #613 merged as 37aa8a623f6c7dfe4874eac2adcd1348ab4f28a1.
Start independently from exact main 170a021db9d551f96f1e9bfdd9ea61f74e30e44e. Pass the configured optional endpoint through useGitHubIssues; when an explicit access provider is supplied it remains authoritative, otherwise construct the Deno GitHub source with the configured endpoint or its existing default.
Expected paths:
packages/workflow/src/deno/issue/github.tspackages/workflow/tests/ambient-authentication.test.ts
The regression supplies ambient authentication and a loopback endpoint without injecting access, performs the representative Issue operation, and proves that the configured endpoint receives it. The CLI configuration parsing case remains a control.
Focused feedback command:
deno task test packages/workflow/tests/ambient-authentication.test.ts packages/cli/tests/workflow-host.test.ts
git diff --checkR3: admissible observation instruction (#301 / PR #181)
Status: complete. Planner feedback PASS at exact commit 038d484f8854d1a18018bd2de88557fa95ae6ab5, parent b0c31e2069058a77db40db172271e93ae352485c, merge base 170a021db9d551f96f1e9bfdd9ea61f74e30e44e. The R3 patch remains byte-identical in frozen PR #181 head dae877a294bbbba5057ba2754f1970c2fcda6186.
Start from exact PR #181 diagnostic head b0c31e2069058a77db40db172271e93ae352485c, then rebase it with R1 and R2. Replace both inadmissible observation examples with <File path="README.md" />. Extend AC2 in its existing owner suite to send that real observation, prove the generated fragment is admitted and reads the Workspace file, and prove its result reaches the next Agent prompt before the proposal. Keep AC0-AC7's IDs and finite assignments unchanged.
Expected paths:
workflows/adversarial-implementation/Implementation.mdscripts/tests/adversarial-composition-workflow.test.ts
Focused feedback command:
deno task test scripts/tests/adversarial-composition-workflow.test.ts packages/core/tests/generated-xmd.test.ts packages/cli/tests/workflow-agent.test.ts
git diff --checkCurrent-main test integration (PR #614)
Status: complete at integration commit and frozen PR #181 head dae877a294bbbba5057ba2754f1970c2fcda6186. The commit changes only scripts/tests/adversarial-composition-workflow.test.ts; all 39 preceding PR commits are range-identical.
The integration rebased exact PR #181 head e698be52365d47702d4fcfa4ff2b3a17eb0f5584 onto exact main 84a8068b770a7435e4c0199cc0a8e1fb91283d70 and ran deno task setup for #614's changed workspace dependency graph.
The separate integration commit changes only scripts/tests/adversarial-composition-workflow.test.ts:
- import
effectSequenceandreadRetainedValuesfrom@executablemd/test-support/journal; - remove the suite's private
NOISE,effects(), andhostRecords()copies; - express the existing meaningful effect-order assertions through
effectSequence(attempt.events), preserving their order and prefix/suffix claims with the shared positional representation; and - read
git_host_effectoutcomes throughreadRetainedValues(events, "git_host_effect", parseGitHostReconciliationRecord), preserving the existing success, request-kind, decision, and pre-state assertions.
This is integration with main's settled test seam, not a new certification criterion. It does not change the R3 workflow document, generated-XMD behavior, production source, or C1-C10/CF1-CF6.
Focused integration command:
deno task test packages/test-support/tests/journal.test.ts packages/cli/tests/workflow-suspension.test.ts packages/workflow/tests/ambient-authentication.test.ts packages/cli/tests/workflow-host.test.ts scripts/tests/adversarial-composition-workflow.test.ts packages/core/tests/generated-xmd.test.ts packages/cli/tests/workflow-agent.test.ts
git diff --checkAll three repair slices and the shared-helper integration have their focused evidence. The resulting prepared, rebased, adapted head is the frozen certification target recorded above.
Certification Implementor handoff
Run the full frozen command sequence from a clean checkout with this preflight:
test "$(git rev-parse HEAD)" = e85479c33ce4c91d821e0eaf195150db374ae4a6
test "$(git rev-parse origin/main)" = 6717e867c9467114e6b060620d5b18c87beb2c48
test "$(git merge-base HEAD origin/main)" = 6717e867c9467114e6b060620d5b18c87beb2c48
git status --shortThe certification Implementor changes exactly the four amended expected paths above. The certification file contains CF1-CF6 with the exact frozen names and assignments. The other three paths register its explicit runtime owner and update SCH9's reviewed-consumer pins; they add no certification scenario. Do not create packages/workflow/tests/workflow-agent-loop.test.ts or duplicate the shipped WAL/WAP/WSL/AC/planning matrices.
The process-boundary harness shape proven during preflight is accepted: a generated ACP executable selected through PATH/ACPX, external profile observation, a Git shim, and a loopback Git host. The fake ACP provider must retain one canonical agentSessionId and assert that same identity from session/new and every session/load; unrelated generated identities are invalid evidence. Harness mechanisms are test machinery and do not expand the workflow's Agent permissions.
Run every frozen certification command above in its recorded order on this exact commit. The binary must be rebuilt by the first command before CF1's compiled row. Run deno task verify only after the preceding focused rows pass. Record every result without changing the matrix or implementation. Delivery verification and required CI remain the Implementor or maintainer's delivery responsibility.
Certification record and exit
Before execution, add one comment to this issue naming:
- exact PR ✨ Compose and certify the supervised adversarial implementation workflow #181 head and base;
- exact commit containing this frozen matrix if it changed after this body;
- confirmation of where Compose the supervised adversarial implementation workflow #301, Read complete pull-request review evidence from a workflow #576, and Deliver answers to suspended workflows for later resumption #300 are present in the recorded target, as listed above; and
- the clean-worktree preparation used.
After execution, the certification comment records every command above with its result and links the exact focused test names to C1-C10. A failed command is captured before rerun. An identical-revision pass after a failure is handled under the repository's flake policy and does not erase the first result.
Final #299 certification is PASS only when all of the following are true on exact target e85479c33ce4c91d821e0eaf195150db374ae4a6 over 6717e867c9467114e6b060620d5b18c87beb2c48: R1-R3, the #614 integration, PR #615, and the four-path certification feedback remain intact; CF1-CF6 pass with their frozen assertions; the mapped existing evidence establishes C1-C10; every frozen command records a passing result; required delivery checks pass for that same commit; and the living workflow and final documents describe only shipped behavior. Any command failure, criterion without its assigned evidence, SHA/base mismatch, unreviewed matrix change, or required delivery failure withholds PASS.
#292 then performs the final synchronization/merge closure. #363 and #496 remain open without blocking certification, and this planning refresh does not change PR #181's draft state.
Dependencies
- Make workflow Elicit commit durable suspension through the CLI #607 workflow-owned elicitation conformance repair, merged through PR 🐛 Let the workflow host answer its own <Elicit> through the CLI #609 as
cbd30099392b19aa82bb8c2a36fe4c1ee092ed53 - Honor the configured GitHub Issues API endpoint #608 GitHub Issues endpoint plumbing repair, merged through PR 🐛 Send an Issue to the API base the host configured (#608) #613 as
37aa8a623f6c7dfe4874eac2adcd1348ab4f28a1 - Compose the supervised adversarial implementation workflow #301 / PR ✨ Compose and certify the supervised adversarial implementation workflow #181 admissible observation instruction and AC2 evidence, complete in frozen head
e85479c33ce4c91d821e0eaf195150db374ae4a6 - PR 🧪 Read a journal's retained effects the same way in every suite #614 shared journal-reader integration, complete in frozen head
e85479c33ce4c91d821e0eaf195150db374ae4a6 - PR 📤 Seal one workflow run's evidence into a file, and put nothing there unless it worked #615 workflow-export integration, present in frozen base
6717e867c9467114e6b060620d5b18c87beb2c48 - the post-repair PR ✨ Compose and certify the supervised adversarial implementation workflow #181 head/base/merge-base record, still containing Compose the supervised adversarial implementation workflow #301's composed consumer, Read complete pull-request review evidence from a workflow #576, and Deliver answers to suspended workflows for later resumption #300 slice 2
- the one-file CF1-CF6 feedback commit descended from that recorded post-repair target
- the required stories in Quest: Resume workflows with their Workspace, repositories, and Agent state #218 other than explicitly excluded Run shell blocks in
xmdworkflows #363 and non-blocking Require ACP adapters to enforce tool-free workflow Agent sessions #496 - end goal: ✨ Compose and certify the supervised adversarial implementation workflow #181
Activity
taras commentedon Aug 25, 2026
Certification record — preflight
Recorded before the tree changed, on a clean checkout created for this gate alone.
Baseline
b0c31e2069058a77db40db172271e93ae352485c170a021db9d551f96f1e9bfdd9ea61f74e30e44eFrozen matrix
The frozen certification matrix is this issue's body as it now stands. It has
not changed since that body was written, so there is no separate commit
carrying it.
Prerequisites present in the recorded target
f230e8fd59df293fb9b1677ef4a7466900be4a99(PR 🔎 Let a workflow read the objections a pull request already holds #580) is an ancestorof
170a021d, so it is already in the recorded base;packages/workflow/tests/pull-request-read.test.tsis present at the head.scripts/tests/adversarial-composition-workflow.test.tscarries all eightAC0–AC7cases.packages/cli/src/scheduling.tsis present and
packages/cli/tests/workflow-scheduling.test.tscarriesSCH1–SCH9.scripts/tests/adversarial-workflow-certification.test.tsis absent at thishead, as the plan records.
Clean-worktree preparation
A dedicated detached worktree at the exact recorded head, prepared once:
No rebase onto a later head was performed, and no other branch is checked out
there.
taras commentedon Aug 25, 2026
Certification record — execution halted,
PASSwithheldImplementation evidence shows CF1 cannot establish its frozen criteria from this
baseline with the one expected file. Per this issue's own instruction the
reproducers and their structural consequences are returned to the Planner
instead of a silently narrowed acceptance, and no feedback commit was
created — the certification file would have to assert less than the frozen
matrix says, which is the Planner's call.
Full write-up with exact reproducers, causes and line references:
issue-299-planner-handback.md(probe files preserved in.probe-299/).Baseline held throughout
HEAD b0c31e20…,origin/main 170a021d…, merge base170a021d…, clean tree.A detached worktree at that head, prepared once with
deno task setup;deno task buildexit 0.What the evidence does establish
The complete supervised workflow runs black-box, through real CLI processes,
on both entrypoints, and reaches acceptance. The shipped
workflows/adversarial-implementation/start.mdand its five shipped stages,copied byte-for-byte into a committed fixture repository, run under
xmd workflow startagainst a private run store, a disposable bare remote and aloopback GitHub —
exit 0and the authored# Acceptedreport on the Denosource row and on the compiled
dist/xmdrow, in authored order:discovery → handoff checkpoint → plan → plan verdict → plan checkpoint →
authorization checkpoint → observation → proposal →
<Evaluate>mutation →Git.Add/Git.Commit→Git.Push→PullRequest→ all three review reads →implementation verdict → review checkpoint → acceptance checkpoint.
Three reusable harness mechanisms are proven: a certification-owned ACP agent
reached through ACPX's name→command resolution and a
PATHshim; the Agentprofile observed from outside the run (
mcpServers: [],allowedTools: [],workflow system prompt, an empty provider-owned
cwd— no Workspace, nocheckout, no host path); and a
gitshim that bridges thegithub.comlocatorthe Git-host adapters require to the disposable bare repository, which is the
process-boundary form of Tier AC's
forgeHost.Blocker 1 —
<Elicit>never suspends through either shipped entrypointA workflow run reaching an
<Elicit>opens a loopback browser form and blocks:it publishes no suspension request, never settles
suspended, never exits 2.Cause:
cli.tsruns the document throughexecution.around(runScopedDocument(…, { testing: false, … })), andrunScopedDocumentisscoped(…)— soinstallWebElicitation()lands in ascope nested inside
host.attach(), whereuseWorkflowElicitation()installed the suspending provider at
{ at: "min" }. The nested provideranswers first, the way
<Answers>does.elicitation.ts's comment assumed theopposite nesting.
Uncaught because every suspension suite drives the executor in-process (WFS/CKX
says "no subprocess is needed"; the CLI suites make a suspended run with a
test-only
<Wait />callingsuspendFor()directly), so none installs the CLIdocument components that break it.
Consequence: CF1 cannot perform authorization-through-a-user-decision or
continuation black-box; it completes only on the branch where every checkpoint
reports
requiresUser: false.Blocker 2 — the shipped observation instruction is refused by the shipped ceiling
Implementation.md:213tells the implementor to answer with{"kind":"observation","source":"<File path=\"README.md\" as=\"readme\" />"}and
:216states an observation may use<File path=... as=... />. Corerefuses it (
generated-xmd.ts:154):Dropping
as— the spelling the WAL fixture teaches — admits and the runcontinues to acceptance. Uncaught because Tier AC passes
observations: []inevery scenario and never sends one.
Consequence: CF1's "generated observations" leg is unperformable by a compliant
implementor. The fix is a workflow-document fix, which this gate excludes.
Blocker 3 — the configured issue endpoint is validated and then dropped
With
XMD_WORKFLOW_GITHUB_ISSUES={"ceiling":[…],"endpoint":"http://127.0.0.1:PORT"}an
<Issue>upsert reaches that endpoint zero times and the run fails "the issuetracker is temporarily unavailable".
github-issues-config.tsparses and returns{ceiling, endpoint}and names thatshape in its own error message;
GitHubIssuesOptions(
issue/github.ts:300) has noendpoint, anduseGitHubIssuesbuildsoptions.access ?? denoGitHubSource()(line 324) —https://api.github.com.The member survives type-checking because it arrives through a spread. The
pull-request sibling honours
options.endpoint(pull-request-reads.ts:274).Beyond certification: a deployment pointing issues at GitHub Enterprise is
silently talking to
api.github.com.Consequence: CF1's "Issue handling" leg has no host-reachable seam black-box.
Not probed
CF2, CF4, CF5 and CF6 were not driven end to end — CF1 is the shared fixture
they build on and its shape is now a Planner decision. Nothing so far suggests a
further blocker in them.
Decisions this needs
which stack (two production-source fixes, one workflow-document fix; none is
the Implementor's to make under this issue's scope boundary).
expected file, so the next round writes CF1–CF6 against it.
taras commentedon Aug 25, 2026
Addendum — Blocker 4: a killed run does not resume past a retained Agent turn
The previous comment said CF2 was unprobed and that nothing suggested a further
blocker there. That claim has now been tested rather than assumed, and it was
wrong: C2 is unmet as written.
SIGKILLa workflow run after an Agent turn has committed, then resume:The whole reproducing document (
.probe-299/agent-resume.test.ts):DONE-MARKER
taras commentedon Aug 25, 2026
Planner disposition of the certification handback
PASSremains withheld, and certification execution remains paused. C1-C10 and CF1-CF6 are unchanged.Three reported findings are shipped-behavior conformance defects and must be repaired before PR #181 receives a new certification baseline:
<Elicit>suspension: repair CLI provider assembly and add a real source-entrypoint suspension/answer/resume regression;<File path="README.md" />and make AC2 exercise a real observation/result round trip; andThe retained-Agent crash/resume addendum is not a product blocker. The reproducer returned unrelated provider identities from
session/newandsession/load. That is a canonical identity replacement, which the workflow correctly refuses before reattachment. I changed only the throwaway fake ACP provider to assert one stable identity and reran the same kill/resume shape: it resumed to completion, retained the committed prefix, and made no second Agent prompt. C2 and CF2 therefore stay frozen as written.The issue body now records the repair stack and focused commands. R1 and R2 start independently from exact main
170a021db9d551f96f1e9bfdd9ea61f74e30e44e; R3 starts from exact PR #181 diagnostic headb0c31e2069058a77db40db172271e93ae352485c. After all three are integrated, PR #181 must be rebased and returned to the Planner so a new exact head/base/merge-base can be frozen before certification implementation.The process-boundary certification harness shape is accepted. Its fake ACP provider must preserve one canonical
agentSessionIdacrosssession/newand everysession/load. After the repairs,scripts/tests/adversarial-workflow-certification.test.tsremains the only new certification path.#363 and #496 remain non-blocking. Do not begin #292, run certification, or mark PR #181 ready.
taras commentedon Aug 26, 2026
Prerequisite tracking update
cbd30099392b19aa82bb8c2a36fe4c1ee092ed53.37aa8a623f6c7dfe4874eac2adcd1348ab4f28a1.37aa8a623f6c7dfe4874eac2adcd1348ab4f28a1.Both repairs preserve their planned conformance boundaries and carry their focused regressions. Their implementation branches are descended from the frozen repair base
170a021db9d551f96f1e9bfdd9ea61f74e30e44e; R1 and R2 were integrated serially on main without turning either into a certification permutation.R3 remains the only open prerequisite repair. It stays owned by #301 and draft PR #181: correct the generated observation spelling and make AC2 prove the real observation/result round trip. After its focused feedback passes, rebase PR #181 over current main and return its new exact head/base/merge base to the Planner before any #299 certification command runs.
C1-C10 and CF1-CF6 remain frozen. #363 and #496 remain non-blocking. Do not begin #292 or mark PR #181 ready.
taras commentedon Aug 26, 2026
Planner feedback verdict for R3: PASS
Reviewed exact commit
038d484f8854d1a18018bd2de88557fa95ae6ab5against parentb0c31e2069058a77db40db172271e93ae352485cand merge base170a021db9d551f96f1e9bfdd9ea61f74e30e44e.The patch changes exactly the two planned paths:
workflows/adversarial-implementation/Implementation.mdscripts/tests/adversarial-composition-workflow.test.tsBoth judgment calls satisfy the frozen R3 evidence:
Script.observationsfrom a dead list of suite-authored sources to a count makes the scripted Agent copy the observation envelope from the shipped prompt, so AC2 discriminates the document defect rather than merely proving a test-authored spelling is admissible;AC2 proves the complete assigned round trip: the prompt-authored self-closing File fragment is admitted, XMD performs one Workspace README read, the distinctive result is absent from the requesting prompt and present in the next prompt, and the proposal follows in the same Agent session. The existing no-Workspace/no-directory/no-MCP/no-credential/no-native-tool boundary remains unchanged.
Independent focused verification on the exact clean commit:
This is the final R3 feedback verdict, independent of CI. No further R3 implementation is required.
Next: rebase this accepted commit onto current main
37aa8a623f6c7dfe4874eac2adcd1348ab4f28a1, which contains R1 and R2; run the focused integration evidence for all three repairs; push the resulting PR #181 head; and return its exact head/base/merge base to the Planner. Do not start #299 certification until that new target is frozen.taras commentedon Aug 26, 2026
Planner baseline decision: rebase PR #181 once more before certification freeze.
The pushed integration checkpoint is valid:
dee7d23e0330b1f73faac9c78783d5890f84e5ee37aa8a623f6c7dfe4874eac2adcd1348ab4f28a1It is not the certification target. Current main advanced through #610 to
b952af602437e0c1db2137a74453504ae7541da5; GitHub now reports PR #181 asBEHIND. #610 changes workflow suspension, answer delivery, Workspace root/manifest code, architecture, and the workflow Workspace specification. Those are boundaries consumed by C2, C3, C5, and C9, so certifying the earlier merge base would certify a target different from the one PR #181 will integrate with.Required next action:
dee7d23e0330b1f73faac9c78783d5890f84e5eeonto exact mainb952af602437e0c1db2137a74453504ae7541da5.git diff --check.dee7d23e0330b1f73faac9c78783d5890f84e5eeafter verifying the remote head still equals it.Do not add #610's artifact suite to the R1-R3 repair matrix: #610's own merged evidence owns that feature, while #299's frozen commands will exercise its selected shared workflow boundaries on the final target. Do not begin certification until the new baseline is recorded.
taras commentedon Aug 26, 2026
Planner integration decision: move the certification cut to current main
84a8068b770a7435e4c0199cc0a8e1fb91283d70.PR #181 checkpoint
e698be52365d47702d4fcfa4ff2b3a17eb0f5584is accepted but not frozen for certification. Its R1-R3 evidence is green, R3 remains byte-identical to its Planner-PASS feedback commit, and the sole prior range-diff change is context only: #605's added capability row is unchanged and #610's neighbouring row is retained.PR #614 is relevant to this branch. It changes
deno.json,pnpm-lock.yaml,tsconfig.node.json, and the shared workflow test helpers. Its merged contract explicitly identifies PR #181 as the cross-package consumer and records a successful probe replacing the AC suite's privateNOISE/effects()andhostRecords()readers with@executablemd/test-support/journal.Next action:
e698be52365d47702d4fcfa4ff2b3a17eb0f5584onto84a8068b770a7435e4c0199cc0a8e1fb91283d70.deno task setupbecause the dependency layout changed.scripts/tests/adversarial-composition-workflow.test.ts: useeffectSequence()for the existing order claims andreadRetainedValues()for Git-host records; remove the private duplicate readers while preserving every existing assertion.packages/test-support/tests/journal.test.ts, thengit diff --check.e698be52365d47702d4fcfa4ff2b3a17eb0f5584after verifying the remote head.Cutoff rule after that handoff: a later main commit does not automatically move the freeze. Rebase again only if it changes a path imported or executed by the frozen commands, changes a settled runtime/persistence/packaging/documentation boundary used by C1-C10, or branch rules make the reviewed head unmergeable. Otherwise freeze the returned exact head/base and begin #299 certification.
Do not begin certification, inspect CI, run the delivery battery, mark PR #181 ready, or begin #292 during this integration step.
taras commentedon Aug 26, 2026
Planner freeze: READY FOR #299 CERTIFICATION IMPLEMENTATION
Exact frozen target:
dae877a294bbbba5057ba2754f1970c2fcda618684a8068b770a7435e4c0199cc0a8e1fb91283d7084a8068b770a7435e4c0199cc0a8e1fb91283d70Preconditions present:
Integration evidence on this exact head:
Independent Planner inspection confirms all 39 pre-integration commits are range-identical and commit 40 changes only
scripts/tests/adversarial-composition-workflow.test.tsas planned.The certification Implementor may now add only
scripts/tests/adversarial-workflow-certification.test.tswith frozen CF1-CF6 and execute the frozen commands in the issue body. The process-boundary ACP provider must retain one canonicalagentSessionIdacrosssession/newand everysession/load.Do not substitute another head/base, change C1-C10 or CF1-CF6, add Worker Shell, expand #496, begin #292, inspect CI, mark PR #181 ready, or merge. If the one-file certification path cannot establish a frozen criterion, return the reproducer and structural consequence to the Planner.
taras commentedon Aug 26, 2026
CF2 is blocked at the frozen head — the fourth finding was never repaired
Preflight on
dae877a2over84a8068b, before any certification file exists.R1, R2 and R3 all verify on this head:
<Elicit>and one inside a bundled component bothsuspend under
xmd workflow start:exit 2,workflow status: suspended, noloopback form.
The fourth finding from the preflight handback — a killed run does not resume
past a retained Agent turn — was never assigned a repair, and it still
reproduces:
The whole document is
<Agent><Session><Prompt …/></Session></Agent>, arendered capture, a
bash execwait, and a marker. It is killed during thewait, after the turn committed. #611's naming makes the stop precise: the
replayed root never reaches
import_component("Prompt"), and the resumeddocument renders its heading and nothing else — no error segment.
What is now ruled out.
<Evaluate>. The same shape without an Agent —<File>,a durable
<Evaluate … allow={["write"]}>, another<File>, the same wait —killed at the same point resumes and completes, exit 0.
agent's controller records every contact; the resumed process makes none — no
session, noload, noprompt. I had reported a lead that the retainedprovider-session arrangement refuses the reattachment. That lead is
refuted: deleting the run's whole
*.sessionssidecar before the resumechanges nothing — same divergence, same position.
(Tier AC4 does exactly that in-process), so what fails is specifically a
killed run whose journal holds an
agent_prompt.Consequence for the matrix. CF2 as frozen — "A real process death after a
committed effect and during the next effect … Resume replays the prefix,
performs the suffix once, and completes" — cannot pass on this head, and CF4's
restart leg is blocked behind it for any run that prompts an Agent. C2 is unmet.
What I am doing meanwhile. CF1, CF3, CF4, CF5 and CF6 do not depend on it —
CF1's continuation is a suspension and answer, which works — so I am
implementing those and will run every frozen command that does not require CF2.
CF2 will be implemented but is expected to fail until this is repaired; I will
not weaken its assertions to make it pass, and I will not create a feedback
commit claiming certification while it does.
taras commentedon Aug 26, 2026
Correction and escalation: no workflow that has prompted an Agent can be continued through the CLI
My earlier comment framed this as a crash-only defect ("a killed run does not
resume past a retained Agent turn"). Building CF1 disproved that framing. It is
not about the kill. A run that suspends normally, is answered normally, and is
resumed normally fails in exactly the same place.
The reproducer is twenty lines and involves no kill
--verboseadds no further diagnosis. The resumed document renders its headingand nothing else.
The same thing stops the supervised workflow
CF1, driven through both entrypoints, reaches the authorization checkpoint,
suspends (exit 2), takes its answer (exit 0) and then fails its continuation:
Localized: it is the attachment that installs the Agent profile
Two paths, one document, one head — the contrast is exact:
resumeagain)resumeafter a suspension or a kill)import_component("Prompt")So the path that installs no Agent profile replays a retained
agent_promptcorrectly, and the path that installs one does not. That inverts the obvious
guess — it is not a missing registration. Also already ruled out: the retained
provider-session arrangement (deleting the run's whole
*.sessionssidecarbefore the resume changes nothing), the certification agent (the resumed process
makes no contact with it at all — no
session, noload, noprompt), andreplay in general (the same shape with no
<Agent>resumes and completes,before and after a durable
<Evaluate>).Tier AC4 resumes the same composed workflow past its agent turns in-process
and passes, so what differs is what the CLI assembles around a partial
attachment — which is precisely the layer this certification exists to test and
the only layer no other tier covers.
What it costs the matrix
C1 and C2 cannot be met, and C3's black-box half cannot. Concretely: CF1
(its continuation is a resume), CF2 (a killed final workflow), and CF4's
restart leg for any run that prompts an Agent. A supervised workflow is
today a single-process affair: it completes only if nobody is ever asked
anything.
What I am doing
Implementing CF1–CF6 as frozen, without weakening an assertion to make one pass:
CF1 and CF2 will be red until this is repaired. CF4, CF5 and CF6 do not depend
on it and are being built now, and I will run every frozen command and report
each result as it stands. No feedback commit will claim certification while this
is open.
taras commentedon Aug 26, 2026
Certification record — executed at the frozen head,
PASSwithheldBaseline: PR #181 head
dae877a294bbbba5057ba2754f1970c2fcda6186over base84a8068b770a7435e4c0199cc0a8e1fb91283d70.scripts/tests/adversarial-workflow-certification.test.tsnow exists and implements CF1–CF6 with the frozen names and assignments.
Frozen commands, in their recorded order
deno task builddist/xmdrebuilt at this head)deno task test scripts/tests/adversarial-workflow-certification.test.tsSCH9onlypnpm exec tsx --tsconfig tsconfig.node.json --test packages/cli/tests/workflow-host.test.tsbun test --timeout=300000 packages/cli/tests/workflow-host.test.tsdeno task checkdeno task check:jsrdeno task verifyWhat passes, and what it establishes
their unpushed commits across a restart, and the continuation publishes only
the branch the document authored, at the commit the first execution made.
run before any later effect: no Push, no pull request, no issue, no branch.
The denial is a real
session/request_permissionover ACP, refused by theshipped permission bridge.
forge call, no ref movement); the retained history accounts for every material
decision and holds no transcript, host path, provider handle, credential,
endpoint or Git sidecar ref; a compatible fork continues and an incompatible
one is refused; and a secret in an answer is refused before delivery retains
it.
CF1's first execution also does the whole supervised workflow on both
entrypoints — discovery, planning, both loops, the observation round trip, the
generated mutation, local Git, Push, PullRequest, all three review reads and
Issue handling — and the Agent profile is asserted from the agent's own side:
empty provider-owned cwd, no additional directory,
mcpServers: [],allowedTools: [], and the deny-all instruction layer.Why CF1, CF2 and CF3 are red — one reason, not three
A run whose journal holds an Agent turn cannot be continued. Reported in
full above; every red case here is that defect:
is retained, and the resume fails —
Divergence: workflow root terminated after 15 yields … first unreached entry is import_component("Prompt") at workflows/adversarial-implementation/Discovery.md:20:5.SIGKILL.scheduleResume()over a host that attaches what the Deno entrypoint attaches(Agent profile included), and reaches the identical divergence. So it is not
the CLI's document assembly: it is the workflow Agent profile on a partial
attachment. Tier AC4 resumes the same composed workflow past its agent turns
and installs a scripted provider instead.
The three cases assert what the matrix froze and fail where the behaviour is. I
did not narrow them to the branch that passes.
SCH9is stale, not brokenSCH9: the stacked base is the reviewed composed consumerpins the contenthashes of the reviewed consumer, and R3 changed two of those files:
Neither R3's focused command nor the combined R1–R3 command included
packages/cli/tests/workflow-scheduling.test.ts, so this gate is the first runthat could see it. Updating those pins belongs to that suite's owner.
Deviation from the one expected path
Two extra paths, both registration rather than behaviour. CF1 drives the
compiled
dist/xmd, which no test shard builds, so the suite joinsscripts/tests/component-form-dispatch.test.tsin the manifest'scompiled-binary list (excluded from all three runtimes' discovery, run by
smoke) —scripts/runtime-test-exclusions.ts— and that manifest's own pinnedlist in
scripts/tests/runtime-exclusions.test.tsnames it. Left unregistered,the file joins every runtime's corpus by default and breaks
test-node,test-bunand the Deno shards. Both edits are one entry each; say the word ifyou want them reverted and the registration decided separately.
Commit
The work is staged but uncommitted: the 1Password signing agent refused
(
error: 1Password: failed to fill whole buffer), which is how it reports beinglocked. Nothing is pushed. I will create the feedback commit as soon as it is
unlocked, and it will be described as evidence rather than as certification —
CF1–CF3 are red on a shipped defect, so
PASSis withheld.taras commentedon Aug 26, 2026
Planner correction of the first certification handback
PASSremains withheld, but the four red CF rows do not establish a shipped Agent-resume defect.The staged fake ACP provider repeats the invalid reproducer already rejected during preflight:
The workflow retains canonical identity B and correctly refuses A as a replacement on partial attachment. The resulting terminal divergence is the wrapper around that harness refusal. This directly violates #299's frozen requirement that the fake provider retain one canonical
agentSessionIdacrosssession/newand everysession/load.Required correction: generate one identity per new session and return it as both
sessionIdand_meta.agentSessionId; assert that same identity on load. Rerun CF1-CF6 before attributing any remaining failure to product behavior.Two scope decisions:
packages/cli/tests/workflow-scheduling.test.ts. Preserve Deliver answers to suspended workflows for later resumption #300's historical stacked base525efaa7/170a021d; update the two reviewed-consumer blob pins and adjacent explanation for the Planner-reviewed R3 and 🧪 Read a journal's retained effects the same way in every suite #614 amendments at frozen headdae877a2. Keep SCH9's ID and SCH1-SCH8 unchanged.The authorized changed-path set is now exactly four:
scripts/tests/adversarial-workflow-certification.test.tsscripts/runtime-test-exclusions.tsscripts/tests/runtime-exclusions.test.tspackages/cli/tests/workflow-scheduling.test.tsDo not create a red feedback commit. First run:
Once focused evidence is green, create the signed feedback commit. The 1Password agent must be unlocked by its operator; do not bypass signing. Then rerun every frozen #299 command on that exact commit, including
deno task verifyonly after the preceding focused evidence passes.If CF1-CF3 still fail with a stable canonical provider identity, return the corrected trace and underlying cause to the Planner. No product repair, architecture amendment, matrix change, Worker scope, #496 expansion, #292 work, PR readiness change, or merge is authorized now.
taras commentedon Aug 26, 2026
Correction, and the certification record: CF1–CF6 all pass
I was wrong twice, and the Planner's diagnosis was right. The "shipped
defect" I reported — that a run which has prompted an Agent cannot be continued
— does not exist. Both of my earlier reports
(1,
2)
were my harness, and they should be read as withdrawn.
Two faults, both mine:
session/newansweredsessionId=Awith_meta.agentSessionId=B, andsession/loadansweredagentSessionId=A. Every reattachment therefore met an identity that did notmatch the one the run had recorded, and the refusal surfaced as a divergence
at the
<Prompt>the run had already answered. One identity for both values,and CF1 and CF2 pass.
schedules its resume through
runWorkflow(), and I passed onlyexecution.installationstoexecuteInstalled().packages/cli/src/cli.tsalso declares
agentIdentityComponents()—<Session>names durable workafter its own invocation — so without it
<Session>expanded and the turnsbeneath it never replayed. Declared, and CF3 passes.
My "refutation" of the first — deleting the run's
*.sessionssidecar andseeing no change — was not one: with the store gone the provider asserts
nothing, which the reattachment refuses for its own reason. Two paths to the
same refusal, and I read the second as evidence about the first.
Certification result
Feedback commit
45123ff40d94cccdd0b30272f01bd65aa60c2e31, signed, parentdae877a294bbbba5057ba2754f1970c2fcda6186, merge base84a8068b770a7435e4c0199cc0a8e1fb91283d70. Not pushed.dist/xmd)Earlier in this session, at this same head:
deno task buildexit 0; the frozenfocused owner-suite command 83 passed / 1 failed (SCH9 only, now repaired
below); Node WFH 17/0; Bun WFH 17/0;
deno task checkexit 0;deno task check:jsrexit 0. The focused owner command should be re-run on this commitbefore the verdict is taken — it has not been since SCH9's pins moved.
The two extra paths
scripts/runtime-test-exclusions.tsandscripts/tests/runtime-exclusions.test.ts— the suite drives
dist/xmd, which no shard builds, so it joins the binarysuite already excluded from every runtime's discovery. The manifest now states
that Certify the adversarial implementation workflow end to end #299's own commands own it — they build the binary and then name the
file outright — rather than delegating it to
smoke.packages/cli/tests/workflow-scheduling.test.ts— SCH9's two reviewed-blobpins move to
bb942b50…(AC suite) andc3807657…(Implementation document),which is what R3 left. Its
525efaa7over170a021dprovenance is untouched,and the comment says why the pins moved: two blobs changed under a repair
reviewed in its own right, and pinning what they hold now keeps that case
about this slice rather than about nobody.
taras commentedon Aug 26, 2026
Planner feedback verdict for certification implementation commit
45123ff40d94cccdd0b30272f01bd65aa60c2e31: PASSReviewed exact signed commit (
%G? = G) against parentdae877a294bbbba5057ba2754f1970c2fcda6186and merge base84a8068b770a7435e4c0199cc0a8e1fb91283d70.The commit changes exactly the four authorized paths. The fake ACP provider now asserts one stable identity from
session/newthroughsession/load; CF3's in-process executor declaresagentIdentityComponents()and usescollect()so it cannot report an unfinished execution as finished; the runtime exclusion truthfully names #299's explicit build-then-test owner; and SCH9 preserves #300's historical stacked-base provenance while pinning the two Planner-reviewed amended blobs.Focused evidence:
This PASS is the final Planner feedback verdict on
45123ff4; it is independent of delivery and CI.Do not rerun the 31-file frozen owner command on this now-superseded base. Current main advanced to
6717e867c9467114e6b060620d5b18c87beb2c48. PR #615, merged within that range, changes workflow lifecycle, Agent-session storage, CLI workflow execution, workflow specifications, andscripts/runtime-test-exclusions.ts; those are imported or exercised by C1, C2, C6, C9, and the frozen command graph. Under #299's cutoff rule, final certification must move to that base.Next:
dae877a294bbbba5057ba2754f1970c2fcda6186.45123ff40d94cccdd0b30272f01bd65aa60c2e31onto6717e867c9467114e6b060620d5b18c87beb2c48.git diff --check, and push with force-with-lease pinned todae877a294bbbba5057ba2754f1970c2fcda6186.deno task verify.No product repair, architecture amendment, matrix change, #292 work, readiness change, CI inspection, or merge is authorized by this handoff.
🔬 Certify the supervised workflow from outside, on both entrypoints
taras commentedon Aug 26, 2026
Planner freeze: RUN THE FULL #299 COMMAND MATRIX
Exact final-execution target:
e85479c33ce4c91d821e0eaf195150db374ae4a66717e867c9467114e6b060620d5b18c87beb2c486717e867c9467114e6b060620d5b18c87beb2c48Current main still equals the base. The 41-commit range contains 40 identical replays and one context-only shift in #605: PR #615 changed the neighbouring artifact-export capability row, #605's scheduling additions are identical, and the final table contains both. The certification commit is unchanged at the signed final head.
Focused evidence on this exact head:
Rebuilding
dist/xmdbefore that focused run was correct and necessary; the compiled CF1 row must execute a binary built from the exact tested tree.Now execute every frozen command in the issue body, in order, on this exact commit. Start with
deno task build, then CF1-CF6, the complete 31-file owner command, Node and Bun WFH,deno task check,deno task check:jsr, and finallydeno task verifyonly if every preceding row passes. Record each result before rerunning a failure.Do not rebase, change the four-path implementation, change C1-C10 or CF1-CF6, inspect CI, mark PR #181 ready, merge, or begin #292 during execution. Return the complete command record to the Planner for the final #299 certification verdict.
taras commentedon Aug 26, 2026
Final certification record — every frozen command passes on the frozen revision
Executed in the frozen order on the frozen target, with a clean tree before and
after, and nothing rebased, modified or re-frozen during execution.
e85479c33ce4c91d821e0eaf195150db374ae4a6(local and remote agree)6717e867c9467114e6b060620d5b18c87beb2c48git diff --checksilentEvery frozen command, in order
deno task builddist/xmdcompiled at this base, and it is the binary row 2 randeno task test scripts/tests/adversarial-workflow-certification.test.tspnpm exec tsx --tsconfig tsconfig.node.json --test packages/cli/tests/workflow-host.test.tsbun test --timeout=300000 packages/cli/tests/workflow-host.test.tsdeno task checkdeno task check:jsrSuccess Dry run completedeno task verifyNo command failed, so nothing was rerun and no flake policy applies.
CF1–CF6, with their frozen names
C1–C10, and what establishes each
run performs discovery, planning, the plan review, authorization through a
real suspension and answer, the observation round trip, the generated
mutation,
Git.Add/Git.Commit/Git.Push,PullRequest, all three reviewreads, Issue handling and acceptance — under
deno run … packages/cli/src/deno.tsand under
dist/xmd, with identical assertions.SIGKILLafter a committed effect; the resume replays theprefix, performs the suffix once, and a completed replay afterwards reaches no
Agent, process, Git host, Issue or Fetch), with
workflow-crash,workflow-installationand WAL2/WAL3 in row 3.retains without executing, Deliver answers to suspended workflows for later resumption #300's
scheduleResume()invokes the ordinaryresume, one executor consumes it, one answer is published, the run continues
once) with SCH1–SCH9 and
workflow-suspension-answerin row 3.git-commit-crash, GH7's cancellation branch, SCH5–SCH7 and WFC2/WFC3, all inrow 3. No Worker Shell case anywhere.
workspace-effect-transaction,workflow-run-storage,workspace-rootandworkflow-inspectionin row 3.unpushed, observed at the retained frontier after a restart, publishing only
the authored branch at the commit the first execution made) with Add named Repository and Worktree composition #293's
Repository storage, replay, materialization, control-plane, component and
Worktree suites in row 3.
workflow-declaration,git-host-effect,git-push,pull-request,pull-request-readandissue-markdownin row 3.each stop before any later generated mutation, Git, Git-host, Issue or
acceptance effect) with WAP1–WAP6, WSL1–WSL8, WAL1–WAL9, GXC, WGAC, AC0–AC7
and the adversarial-planning suite in row 3.
for every material decision and holds no transcript-only decision, host path,
provider handle, credential, endpoint or Git sidecar ref; compatible fork
continues, incompatible fork refuses; a secret in an answer is refused before
delivery retains it) with
workflow-inspection,workflow-fork,git-host-effectand Reject secrets before journal persistence by default #199'ssecret-scannerin row 3.only WFH's common-help and fail-closed cases, rows 6–7 as the separate typing
and publishability gates. The workflow documents this head ships are the ones
CF1 executes: the fixture copies
start.mdand the five stages byte-for-byteinto a committed repository, so what those documents describe is what ran —
including the observation instruction R3 corrected, which CF1 and AC2 both
send back verbatim.
Scope boundaries honoured
No Worker Shell case exists in this suite; completed replay starts no Worker and
makes no Worker claim; #496 is untouched and unclaimed — CF1 proves the initial
profile (empty disposable cwd the agent itself reports as empty, no Workspace or
host path, no additional directories, no MCP servers, an empty requested tool
set, deny-all, and a native permission request denied and failing its turn), not
portable adapter-level absence. No Workspace content is secret-scanned. Node and
Bun ran WFH only.
The three leaf substitutions are unchanged and stated in the suite's own module
comment: the agent process, the forge origin, and a
gitthat bridges the onelocator the Git-host adapters admit to the disposable bare repository.
I believe this satisfies every exit condition on this exact revision. The
verdict is the Planner's to record.
taras commentedon Aug 26, 2026
Final Planner certification verdict: PASS
Reviewed exact frozen target:
e85479c33ce4c91d821e0eaf195150db374ae4a66717e867c9467114e6b060620d5b18c87beb2c48git diff --checksilentEvery frozen command passed once, in order. The compiled binary was rebuilt from the certified tree before CF1. CF1 passed through both the Deno source entrypoint and compiled
dist/xmd; CF2-CF6 passed under their frozen names; the 31-file owner command passed 84 tests and 568 steps; Node and Bun passed all 17 WFH tests each;deno task check,deno task check:jsr, anddeno task verifyexited successfully. No failure was rerun and no flake policy applies.The execution record maps the passing evidence to C1-C10 without changing the frozen assignments. The frozen boundaries also hold: no Worker Shell claim, #496 remains non-blocking and unclaimed beyond the initial Agent profile, no arbitrary Workspace-content scan, and Node/Bun remain limited to WFH.
deno task verifyis the exact delivery command frozen by #299.deno task verify:cleanis a separate repository task and was not added after execution as a new certification condition.This closes the finite Planner certification on the exact reviewed revision. #363 and #496 remain non-blocking. The next issue is #292, which owns final synchronization of PR #181 onto a fresh head and the ordinary readiness, required-CI, and merge closure. PR #181 remains draft until that work begins.
📝 Say what this workflow does, now that it does it
🧹 Hold the certification suite to the rules the shards enforce
🔬 Certify the supervised workflow from outside, on both entrypoints
🧹 Hold the certification suite to the rules the shards enforce