feat(voyage): add machine-verifiable completion gate to trekexecute
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e986b10431
commit
d2f9ccb690
2 changed files with 51 additions and 3 deletions
|
|
@ -1228,6 +1228,30 @@ Record in progress file:
|
||||||
- `manifest_audit.status = "pass" | "drift"`
|
- `manifest_audit.status = "pass" | "drift"`
|
||||||
- `manifest_audit.drift_details = [{check, expected, actual}, ...]`
|
- `manifest_audit.drift_details = [{check, expected, actual}, ...]`
|
||||||
|
|
||||||
|
### Machine-verifiable completion gate (stop-signal contract)
|
||||||
|
|
||||||
|
> **Sealed inline so the termination rule survives even when the executor
|
||||||
|
> model is the very thing it constrains.**
|
||||||
|
>
|
||||||
|
> This is the `machine-verifiable completion gate` (the `stop-signal
|
||||||
|
> contract`): the executor may emit `result: completed` ONLY when BOTH hold —
|
||||||
|
>
|
||||||
|
> 1. **Objective predicate** — the **Phase 7.5** manifest audit (above) PASSED,
|
||||||
|
> re-verified directly from the filesystem + git log, ignoring the executor's
|
||||||
|
> own per-step bookkeeping. "The audit wins"; a self-reported `completed` over
|
||||||
|
> a drifting audit is OVERRIDDEN to `partial` (Phase 7.5, `:1221`).
|
||||||
|
> 2. **Explicit stop-signal** — a signal *distinct from the executor's
|
||||||
|
> self-assessment* is satisfied: the plan's Verify command(s) **passed (exit
|
||||||
|
> 0)** / lint clean / an explicit **DONE token emitted AFTER the Phase 7.5
|
||||||
|
> audit ran** (never before, never in place of it). A transcript that merely
|
||||||
|
> "feels done" is NOT a stop-signal — victory-declaration bias is the exact
|
||||||
|
> failure mode this gate exists to defeat.
|
||||||
|
>
|
||||||
|
> Termination authority therefore rests on the deterministic audit + an
|
||||||
|
> objective stop-signal, never on the model's narrative. Native `/goal` (when
|
||||||
|
> capability-probed and wired) is an OPTIONAL accelerator only: transcript-only,
|
||||||
|
> it cannot run the real check, so it can never be the sole gate.
|
||||||
|
|
||||||
## Phase 7.6 — Recovery dispatch (multi-session parent context only)
|
## Phase 7.6 — Recovery dispatch (multi-session parent context only)
|
||||||
|
|
||||||
**Preconditions:**
|
**Preconditions:**
|
||||||
|
|
@ -1657,12 +1681,16 @@ code-path.
|
||||||
v1.6 plans: synthesized manifests apply with the same force, but
|
v1.6 plans: synthesized manifests apply with the same force, but
|
||||||
`legacy_plan: true` is logged in progress.
|
`legacy_plan: true` is logged in progress.
|
||||||
|
|
||||||
18. **Last-activity rule.** The executor's final tool call before writing
|
18. **Last-activity rule + stop-signal.** The executor's final tool call before
|
||||||
Phase 8 must be a manifest check (Phase 7.5 audit), never an arbitrary
|
writing Phase 8 must be a manifest check (Phase 7.5 audit), never an arbitrary
|
||||||
file review. This prevents the "hallucinated completion" failure mode
|
file review. This prevents the "hallucinated completion" failure mode
|
||||||
where a transcript ends on an unrelated Read and the agent self-reports
|
where a transcript ends on an unrelated Read and the agent self-reports
|
||||||
`completed` without verifying. If Phase 7.5 has not run, the executor
|
`completed` without verifying. If Phase 7.5 has not run, the executor
|
||||||
may not emit `result: completed` under any circumstances.
|
may not emit `result: completed` under any circumstances. Beyond that:
|
||||||
|
`result: completed` requires the **machine-verifiable completion gate**
|
||||||
|
(the **stop-signal contract**, Phase 7.5) satisfied in full — Phase 7.5
|
||||||
|
audit PASS **and** an objective stop-signal (Verify exit 0 / DONE token
|
||||||
|
emitted AFTER the audit), never executor self-assessment alone.
|
||||||
|
|
||||||
19. **push-before-cleanup.** After successful `git merge --no-ff` of a wave
|
19. **push-before-cleanup.** After successful `git merge --no-ff` of a wave
|
||||||
branch, run `git push origin <branch>` BEFORE `git worktree remove` and
|
branch, run `git push origin <branch>` BEFORE `git worktree remove` and
|
||||||
|
|
|
||||||
|
|
@ -73,3 +73,23 @@ test('trekexecute — SC7: brief_version 2.1 + no phase_signals + no partial →
|
||||||
`sequencing gate must fire; errors=${JSON.stringify(r.errors)}`,
|
`sequencing gate must fire; errors=${JSON.stringify(r.errors)}`,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// --- S38 loop-discipline hardening: completion gate (Step 2) ---
|
||||||
|
|
||||||
|
test('trekexecute — machine-verifiable completion gate + stop-signal contract literals present (SC a)', () => {
|
||||||
|
const text = read();
|
||||||
|
assert.ok(text.includes('machine-verifiable completion gate'),
|
||||||
|
'completion-gate literal must be grep-able');
|
||||||
|
assert.ok(text.includes('stop-signal contract'),
|
||||||
|
'stop-signal contract literal must be grep-able');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('trekexecute — completion gate anchors result:completed to Phase 7.5 audit + DONE-after-check (SC a)', () => {
|
||||||
|
const text = read();
|
||||||
|
const gateIdx = text.indexOf('machine-verifiable completion gate');
|
||||||
|
assert.ok(gateIdx >= 0, 'gate literal missing');
|
||||||
|
const section = text.slice(gateIdx, gateIdx + 1400);
|
||||||
|
assert.match(section, /Phase 7\.5/, 'gate must name Phase 7.5 as the objective predicate');
|
||||||
|
assert.match(section, /DONE/, 'gate must reference the DONE stop-signal token');
|
||||||
|
assert.match(section, /emitted AFTER/, 'gate must require DONE emitted AFTER the audit ran');
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue