instar 1.3.712 → 1.3.714
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/autonomous/SKILL.md +49 -0
- package/.claude/skills/autonomous/hooks/autonomous-stop-hook.sh +103 -9
- package/.claude/skills/autonomous/scripts/setup-autonomous.sh +47 -0
- package/dist/commands/init.js +9 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +19 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/AutonomousRunStore.d.ts +200 -0
- package/dist/core/AutonomousRunStore.d.ts.map +1 -0
- package/dist/core/AutonomousRunStore.js +402 -0
- package/dist/core/AutonomousRunStore.js.map +1 -0
- package/dist/core/CompletionEvaluator.d.ts +24 -0
- package/dist/core/CompletionEvaluator.d.ts.map +1 -1
- package/dist/core/CompletionEvaluator.js +29 -1
- package/dist/core/CompletionEvaluator.js.map +1 -1
- package/dist/core/ExternalOperationGate.d.ts.map +1 -1
- package/dist/core/ExternalOperationGate.js +6 -0
- package/dist/core/ExternalOperationGate.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +56 -3
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/ScopeAccretionCorroboration.d.ts +79 -0
- package/dist/core/ScopeAccretionCorroboration.d.ts.map +1 -0
- package/dist/core/ScopeAccretionCorroboration.js +159 -0
- package/dist/core/ScopeAccretionCorroboration.js.map +1 -0
- package/dist/core/ScopeAccretionRatifier.d.ts +93 -0
- package/dist/core/ScopeAccretionRatifier.d.ts.map +1 -0
- package/dist/core/ScopeAccretionRatifier.js +228 -0
- package/dist/core/ScopeAccretionRatifier.js.map +1 -0
- package/dist/core/ScopeAccretionSweep.d.ts +83 -0
- package/dist/core/ScopeAccretionSweep.d.ts.map +1 -0
- package/dist/core/ScopeAccretionSweep.js +353 -0
- package/dist/core/ScopeAccretionSweep.js.map +1 -0
- package/dist/core/WorkingSetManifest.d.ts.map +1 -1
- package/dist/core/WorkingSetManifest.js +26 -1
- package/dist/core/WorkingSetManifest.js.map +1 -1
- package/dist/core/installCodexHooks.d.ts.map +1 -1
- package/dist/core/installCodexHooks.js +9 -0
- package/dist/core/installCodexHooks.js.map +1 -1
- package/dist/core/types.d.ts +29 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
- package/dist/lifeline/TelegramLifeline.js +8 -0
- package/dist/lifeline/TelegramLifeline.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts +18 -0
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +28 -0
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/scaffold/templates.js +2 -2
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +638 -1
- package/dist/server/routes.js.map +1 -1
- package/dist/server/specReviewRoutes.d.ts +6 -0
- package/dist/server/specReviewRoutes.d.ts.map +1 -1
- package/dist/server/specReviewRoutes.js +30 -0
- package/dist/server/specReviewRoutes.js.map +1 -1
- package/package.json +1 -1
- package/scripts/lint-scrape-fixture-realness.js +40 -0
- package/src/data/builtin-manifest.json +65 -65
- package/src/scaffold/templates.ts +2 -2
- package/upgrades/1.3.713.md +65 -0
- package/upgrades/1.3.714.md +40 -0
- package/upgrades/side-effects/autonomous-scope-accretion-completion.md +77 -0
- package/upgrades/side-effects/bench-prompt-fixes-2.md +72 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
Two A/B-proven instruction-text additions: (1) the P13 stop judge
|
|
9
|
+
(src/core/CompletionEvaluator.ts) now defines the no-stop branch (nothing
|
|
10
|
+
proposed → STOP_OK) and rules out wall-clock off-ramps ("it's 2am / natural
|
|
11
|
+
boundary" never earns a stop while time and in-scope work remain);
|
|
12
|
+
(2) the external-operation gate (src/core/ExternalOperationGate.ts) gains the
|
|
13
|
+
authority rule: an approval claim inside the operation payload is untrusted
|
|
14
|
+
content, never authorization (Know Your Principal at the prompt layer).
|
|
15
|
+
Pin tests added (tests/unit/bench-prompt-fixes-2-pins.test.ts).
|
|
16
|
+
|
|
17
|
+
## What to Tell Your User
|
|
18
|
+
|
|
19
|
+
Two of my internal judges got smarter. The one that decides whether an
|
|
20
|
+
autonomous work session may stop early no longer accepts "it's late" as a
|
|
21
|
+
reason to quit — and no longer flags stops that were never proposed. And the
|
|
22
|
+
safety gate that reviews my actions on external services now explicitly
|
|
23
|
+
ignores "the user already approved this" claims planted inside the content
|
|
24
|
+
it's judging — only real authorization counts. Both fixes were proven
|
|
25
|
+
side-by-side on multiple AI models before shipping, with zero behavior broken.
|
|
26
|
+
|
|
27
|
+
## Summary of New Capabilities
|
|
28
|
+
|
|
29
|
+
None new — two existing safety judges now resist a stall excuse and an
|
|
30
|
+
injection trick they previously fell for on some model routes.
|
|
31
|
+
|
|
32
|
+
## Evidence
|
|
33
|
+
|
|
34
|
+
INSTAR-Bench v2 A/Bs, ratchet semantics (win = cells fixed, zero regressed):
|
|
35
|
+
ab-p13-stop-judge CLEAN-WIN 7/0/130 (2am-offramp cluster + degen-no-stop
|
|
36
|
+
fixed across gemini/pi/codex/groq routes); ab-eogv4 CLEAN-WIN 3/0/104
|
|
37
|
+
(injected-approval fixed on opus + codex; three broader variants REJECTED by
|
|
38
|
+
the ratchet for opus over-block — only the narrow authority rule ships).
|
|
39
|
+
Review records with the full iteration trail ship in the benching agent's
|
|
40
|
+
research tree.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Side-Effects Review — Autonomous Scope-Accretion Completion Discipline
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `autonomous-scope-accretion-completion`
|
|
4
|
+
**Date:** `2026-07-02`
|
|
5
|
+
**Author:** `echo`
|
|
6
|
+
**Second-pass reviewer:** `not required (Tier 2 — converged + approved spec drives the change; 7-round convergence incl. cross-model codex-cli:gpt-5.5)`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
Implements `docs/specs/autonomous-scope-accretion-completion.md` (converged + approved): the autonomous-session completion judge refuses `met:true` while in-scope artifacts the session itself drafted sit unbuilt without operator ratification. All load-bearing facts are computed SERVER-SIDE at the existing `POST /autonomous/evaluate-completion` chokepoint from git truth + server-owned state (never session-transported): a new `AutonomousRunStore` (server-owned run records under `state/autonomous-server/`), `ScopeAccretionSweep` (read-only git-truth sweep over live-derived roots), `ScopeAccretionCorroboration` (per-class deterministic built/delivered evidence: ceremony-record+report, merged-PR predicate, positive-only local-git shortcut), `ScopeAccretionRatifier` (conversational ratification at the live Telegram receive path), four new routes (`POST /autonomous/register`, `POST /autonomous/:topic/run-end`, PIN-gated `ratify-deferral` + `scope-accretion-override`), a deterministic pre-judge HOLD in evaluate-completion with a persisted K=3 breaker and a loud labeled exit, run-end enumeration on EVERY exit surface, advisory layers (hook Layer-B vocabulary scan + PostToolUse `file_path` ledger on both template copies + Codex PostToolUse group), config defaults/types, CLAUDE.md template + migrator parity (marker bump REALCHECK_VERIFY → SCOPE_ACCRETION across hook/setup/SKILL.md), WorkingSetManifest nomination of the new store, and the three-tier test suite with captured-fixture-registered parsers.
|
|
11
|
+
|
|
12
|
+
Files: `src/core/{AutonomousRunStore,ScopeAccretionSweep,ScopeAccretionCorroboration,ScopeAccretionRatifier,CompletionEvaluator,PostUpdateMigrator,WorkingSetManifest,installCodexHooks,types}.ts`, `src/server/{routes,specReviewRoutes}.ts`, `src/messaging/TelegramAdapter.ts`, `src/lifeline/TelegramLifeline.ts`, `src/config/ConfigDefaults.ts`, `src/commands/init.ts`, `src/scaffold/templates.ts`, `scripts/lint-scrape-fixture-realness.js`, `.claude/skills/autonomous/{SKILL.md,hooks/autonomous-stop-hook.sh,scripts/setup-autonomous.sh}`, site docs, and tests (unit ×6 files, integration, e2e).
|
|
13
|
+
|
|
14
|
+
## Decision-point inventory
|
|
15
|
+
|
|
16
|
+
- `POST /autonomous/evaluate-completion` (routes.ts) — modify — gains the deterministic scope-accretion pre-judge gate (R25), server-resolved arming (R35), registered-condition authority (R36), runId pair check, breaker, and met-terminality recording. Fail direction on EVERY new path: `met:false` (keep working); a sweep failure degrades to judge-only, never a false done.
|
|
17
|
+
- `POST /autonomous/register` (routes.ts) — add — server-side start snapshot; endAt clamped; one registration per active run (409 conflict).
|
|
18
|
+
- `POST /autonomous/:topic/run-end` (routes.ts) — add — best-effort exit enumeration; never blocks the exit.
|
|
19
|
+
- `POST /autonomous/:topic/ratify-deferral` + `POST /autonomous/:topic/scope-accretion-override` (routes.ts) — add — dashboard-PIN-gated operator authority (checkMandatePin); Bearer alone is structurally insufficient.
|
|
20
|
+
- `parseStopSignals` (routes.ts) — modify — whitelists exactly ONE new client field (`scopeAccretionSuspected`, advisory boolean); blocking inputs are computed in-route by construction.
|
|
21
|
+
- `CompletionEvaluator` prompt (CompletionEvaluator.ts) — modify — field-gated context lines only; PROMPT_VERSION bumped v2→v3 with canary tests; a payload without the new fields renders a byte-identical prompt.
|
|
22
|
+
- Telegram receive path (TelegramAdapter.processUpdate + `/internal/telegram-forward`) — modify — fire-and-forget `onScopeAccretionInbound` observer AFTER auth gating; a throwing observer never blocks routing.
|
|
23
|
+
- Autonomous stop hook — modify — Layer-B advisory scan (fenced/quoted-excluded), topicId/runId echo, run_end_call on every terminal exit surface; all best-effort `-m`-bounded, never delaying the exit.
|
|
24
|
+
- Hook-event reporter payload (init.ts + PostUpdateMigrator.ts template copies) — modify — adds optional `file_path` (designed-benign; receiver tolerates absence), reconciling the pre-existing `cwd` divergence.
|
|
25
|
+
- Conformance-check route (specReviewRoutes.ts) — pass-through + persistence hook — records invocations by slug (R32 ceremony evidence); best-effort, a miss only delays clearing.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 1. Over-block
|
|
30
|
+
|
|
31
|
+
The hold can fire on a deliverable-class artifact the session created that a human would consider legitimately deferred. This is the designed behavior (Deferral = Deletion) and is bounded three ways: declared deliverables at setup never hold; the operator ratifies in one reply or one PIN call; and the K=3 breaker guarantees a bounded, loud exit — never a wedge. A false hold from a stray local branch in the run's own roots is breaker-bounded (spec R48 names this as the safe direction). Shared agent-home roots are attributed HEAD-only so concurrent sessions' work cannot hold this run. `docs/specs/reports/**` is excluded from the deliverable taxonomy so clearing a spec cannot accrete a new hold (self-feeding loop closed). Duration expiry and emergency stop are untouched — a session can never be trapped past `end_at`.
|
|
32
|
+
|
|
33
|
+
## 2. Under-block
|
|
34
|
+
|
|
35
|
+
Named residuals per spec §6, all accepted and stated: out-of-root writes (advisory-flagged only when the ledger saw them); non-HEAD branches of the SHARED root (corroboration's merged-PR arm still sees the normal PR path); docs-PR bundling above the ≥10-line non-docs floor (deterrence bound — a merged PR is public + attributable); artifacts outside the glob taxonomy (TODO scaffolds, code stubs — v1 blocking taxonomy is a docs/spec/script discipline, unlisted docs get the advisory flag); same-machine tamper of server state (tamper-class, not workflow-class — the R12 bound). Post-trip the gate disengages for the run — abandonment after K holds is possible but only LOUDLY (the honest ceiling; requiring ratification to release the breaker would reintroduce the wedge).
|
|
36
|
+
|
|
37
|
+
## 3. Level-of-abstraction fit
|
|
38
|
+
|
|
39
|
+
Correct layer by construction (this was the spec's central design fight, R11/R25): the accretion hold is a DETERMINISTIC invariant, so it is enforced deterministically at the server route — not paraphrased into the judge prompt as if it were judgment. The judge (the existing smart gate) receives the facts as advisory context on the met-path only. The detection substrate is git truth (P20: the file in the tree is the state), not tool events (path-less, Bash-bypassable) and not transcript scans (tail-blind, forgeable). The hook's Layer-B scan is explicitly a signal (advisory boolean) feeding the existing judge, never an authority.
|
|
40
|
+
|
|
41
|
+
## 4. Signal vs authority compliance
|
|
42
|
+
|
|
43
|
+
**Required reference:** docs/signal-vs-authority.md
|
|
44
|
+
|
|
45
|
+
- [x] No — this change has no NEW brittle blocking authority: the blocking decision is a deterministic server-side invariant over git state + server-owned records (exact-match facts, not vocabulary matching), in the established fail-safe direction (`met:false` = keep working, which is the non-destructive direction for an autonomous run; the exit is never wedged thanks to the breaker + duration expiry). All vocabulary/pattern matching in the change (Layer-B scan, defer-trigger detection) is SIGNAL-only: the Layer-B boolean feeds the judge as context; a defer-trigger only causes the server to ASK the operator (an enumeration message), never to act. The one path that pushes toward exit — ratification — is anchored to a verified principal confirming a server-authored enumeration (message-id chain), or the PIN route.
|
|
46
|
+
|
|
47
|
+
## 5. Interactions
|
|
48
|
+
|
|
49
|
+
- **Shadowing:** the pre-judge gate runs BEFORE the completion judge and before the live-test veto. A hold returns early — the judge/live-test never run on that evaluation (intended: the LLM call is not spent on a deterministically-refused claim). The live-test veto still runs on every met-path verdict; met-terminality is recorded only on the verdict that actually leaves the handler as met:true (the veto can still flip it).
|
|
50
|
+
- **Double-fire:** run-end enumeration + the R28b daily-sweep backstop could both enumerate the same run; the attention item id (`scope-accretion-exit-<topic>-<runId>`) dedupes at the attention layer, and `markTerminal` is one-way (first exit wins; a terminal record is skipped by the daily sweep's active-only reap).
|
|
51
|
+
- **Races:** AutonomousRunStore is single-writer (the server process) with atomic tmp+rename writes; the breaker read-modify-write happens within one request handler. The Telegram observer is fire-and-forget and only appends to server-owned records via the store's update funnel.
|
|
52
|
+
- **Feedback loops:** clearing evidence (reports under `docs/specs/reports/`) is excluded from the sweep taxonomy, so corroborating an artifact cannot create a new held artifact. Enumerations are deduped per unbuilt-set hash so an unchanged set never re-sends (bounded by the breaker regardless).
|
|
53
|
+
|
|
54
|
+
## 6. External surfaces
|
|
55
|
+
|
|
56
|
+
- **Telegram:** two new server-authored message shapes (the ratification enumeration; the run-end/breaker enumeration) plus attention items — all topic-scoped, deduped, clamped (50 paths + "and N more"). No new topics are created (rides existing sendToTopic/createAttentionItem, subject to the existing topic-flood budgets).
|
|
57
|
+
- **GitHub (`gh`):** corroboration adds ONE batched merged-PR query per evaluation on the judge path only, `-m`-bounded (10s budget), negatives TTL-cached 5 minutes, positives persisted monotone. A network failure degrades to keep-working with `corroborationDegraded` named.
|
|
58
|
+
- **Persistent state:** new server-owned dir `state/autonomous-server/` (run records, advisory JSONL ledger, session map, conformance-invocation records) with archive lifecycle (R28) and WorkingSetManifest nomination (archived records excluded). Audit discipline per spec §4: uid HASHES, message ids, path basenames — never message bodies.
|
|
59
|
+
- **Other agents/frameworks:** the reporter-payload `file_path` extension is designed-benign (receiver stores extra fields; 3-field payload remains valid); Codex gains an advisory PostToolUse group; gemini/pi are advisory-absent (named). The guarantee fires only for engines whose loop consults the chokepoint (Claude today) — honest coverage bound per R16.
|
|
60
|
+
- **Operator surface (Mobile-Complete Operator Actions):** both operator actions are phone-completable — the conversational ratification is a Telegram reply; the enumeration message carries the dashboard deep link to the PIN-gated ratify surface; the override is a PIN route reachable from the dashboard's existing PIN-auth pattern. No terminal-only path is introduced.
|
|
61
|
+
|
|
62
|
+
## 6b. Operator-surface quality (Operator-Surface Quality standard)
|
|
63
|
+
|
|
64
|
+
No dashboard renderer/markup file is touched by this change — the operator surfaces are the Telegram enumeration message (leads with the question + exact artifact list + one-line reply instruction + the dashboard link; no raw internals beyond repo-relative paths, which ARE the content) and two PIN-gated API routes consumed via that link. Criteria: (1) the enumeration leads with the primary action ("Ratify deferring these N artifacts?"); (2) no JSON/UUIDs — repo-relative paths only; (3) no destructive action on the surface (ratification is the constructive primary; there is nothing to de-emphasize); (4) plain language, short lines, phone-first (a Telegram reply IS the phone path). A dedicated dashboard ratify FORM is a follow-up polish, not a blocker: the reply path + deep link make the action mobile-complete today.
|
|
65
|
+
|
|
66
|
+
## 7. Multi-machine posture (Cross-Machine Coherence)
|
|
67
|
+
|
|
68
|
+
**machine-local BY DESIGN, with working-set carriage** — a run executes on one machine, so its server run record + advisory ledger are machine-local truths (spec §4 declares this posture explicitly). On topic transfer the records ride the working-set carrier: `WorkingSetManifest.computeWorkingSet` now nominates `state/autonomous-server/<topic>.*` (archived records excluded). Signals are recomputed per evaluation, so nothing durable strands. User-facing notices route through the existing per-topic send path (one-voice gating unchanged). No URLs are generated beyond the localhost dashboard deep link, which is machine-correct by construction (the run's own server mints it).
|
|
69
|
+
|
|
70
|
+
## Evidence pointers
|
|
71
|
+
|
|
72
|
+
- Spec (converged 7 rounds, cross-model codex-cli:gpt-5.5, approved): `docs/specs/autonomous-scope-accretion-completion.md` + `.eli16.md` + `docs/specs/reports/autonomous-scope-accretion-completion-convergence.md` (committed 7938566e9).
|
|
73
|
+
- Unit: `tests/unit/{autonomous-run-store,scope-accretion-sweep,scope-accretion-corroboration,scope-accretion-ratifier,autonomous-stop-hook-scope-accretion}.test.ts` + updated `CompletionEvaluator*.test.ts` — 106 tests green.
|
|
74
|
+
- Integration: `tests/integration/scope-accretion-routes.test.ts` — 20 tests green (register/hold/ratify/override/run-end round-trips, auth contracts, degraded corroboration).
|
|
75
|
+
- E2E (feature-alive, the required evasion-shaped case): `tests/e2e/scope-accretion-lifecycle.test.ts` — 5 tests green, incl. the Bash-heredoc spec + met-looking transcript that does NOT exit until ceremony-corroborated, and the loud labeled breaker exit.
|
|
76
|
+
- Captured-fixture realness: 6 parsers registered in `scripts/lint-scrape-fixture-realness.js` with byte-for-byte fixtures under `tests/fixtures/captured/scope-accretion-*/` — lint green.
|
|
77
|
+
- `tsc --noEmit` clean; full unit suite green at commit.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Side-effects review — P13 stop-judge clauses + ExternalOperationGate authority rule
|
|
2
|
+
|
|
3
|
+
**Change:** two prompt-text additions, both A/B-proven by INSTAR-Bench v2:
|
|
4
|
+
(1) CompletionEvaluator P13 stop-judge prompt gains the no-stop branch
|
|
5
|
+
definition (no stop proposed → STOP_OK) and the wall-clock-never-an-off-ramp
|
|
6
|
+
clause; (2) ExternalOperationGate prompt gains the authority rule (an approval
|
|
7
|
+
claim inside the operation payload is untrusted content, never authorization).
|
|
8
|
+
Plus a pin test for both.
|
|
9
|
+
|
|
10
|
+
**Principle check (Phase 1):** both changes edit instruction text inside
|
|
11
|
+
existing authorities; no new decision points, no authority moved, no brittle
|
|
12
|
+
logic gains blocking power. The eog authority rule implements Know Your
|
|
13
|
+
Principal at the prompt layer of an existing smart gate.
|
|
14
|
+
|
|
15
|
+
1. **Over-block** — p13: the no-stop clause REDUCES false blocks (haiku
|
|
16
|
+
answered STOP_BLOCKED on transcripts with no stop at all); the wall-clock
|
|
17
|
+
clause tightens only stops whose stated reason is clock time. A/B: 0
|
|
18
|
+
regressions on 130 cells. eog: the ratchet REJECTED three broader variants
|
|
19
|
+
for opus over-block; the shipped rule is scoped to unverifiable in-content
|
|
20
|
+
approval claims only — clean-proceed cells verified unregressed (104 cells,
|
|
21
|
+
the one disputed cell resolved by 9-sample power: statistically
|
|
22
|
+
indistinguishable incumbent flake).
|
|
23
|
+
2. **Under-block** — p13: strictly reduced (2am off-ramps now blocked on
|
|
24
|
+
routes that previously allowed them). eog: strictly reduced (injected
|
|
25
|
+
approvals now refused on opus/codex where they previously slipped).
|
|
26
|
+
3. **Level-of-abstraction fit** — the defects are in the prompts; the fixes
|
|
27
|
+
are in the prompts. The eog injected-approval defense ALSO exists
|
|
28
|
+
structurally upstream (operator binding, mandate gate) — this adds the
|
|
29
|
+
prompt-layer defense-in-depth, not a replacement.
|
|
30
|
+
4. **Signal vs authority** — compliant; instruction text only.
|
|
31
|
+
5. **Interactions** — none: no other component parses these prompts' outputs;
|
|
32
|
+
both parsers unchanged. The p13 additions sit before the signal-gated
|
|
33
|
+
block whose byte-identity contract applies to SIGNAL additions (verified:
|
|
34
|
+
the no-signal prompt changes identically for all callers — it is the
|
|
35
|
+
baseline prompt that changed, uniformly).
|
|
36
|
+
6. **External surfaces** — none beyond model-facing prompts.
|
|
37
|
+
7. **Multi-machine posture** — machine-local BY DESIGN (prompts ship in code
|
|
38
|
+
with the release; no state, no URLs).
|
|
39
|
+
8. **Rollback cost** — trivial: revert the added lines (one commit each).
|
|
40
|
+
|
|
41
|
+
**Evidence:** ab-p13-stop-judge verdict (CLEAN-WIN 7/0/130; gemini
|
|
42
|
+
context-bleed rows stripped as infra, documented) and ab-eogv4 verdict
|
|
43
|
+
(CLEAN-WIN 3/0/104; v1-v3 rejection trail documented). Review records:
|
|
44
|
+
research/llm-pathway-bench/instar-bench-v2/review-records/{p13-stop-judge,
|
|
45
|
+
external-op-gate}.md (benching agent's research tree).
|
|
46
|
+
|
|
47
|
+
**Second-pass review:** required (gate keywords) — see appended note.
|
|
48
|
+
|
|
49
|
+
## Second-pass review (independent)
|
|
50
|
+
|
|
51
|
+
Concur with the review.
|
|
52
|
+
|
|
53
|
+
Verified: the diff is 13 added lines, all string-array elements inside the two
|
|
54
|
+
prompt builders — no logic, parsing, or authority change (P13's
|
|
55
|
+
`parseStopRationale` and fail-open catch untouched; eog's exact one-word parser,
|
|
56
|
+
unparseable→show-plan default, and fail-closed catch untouched; the added eog
|
|
57
|
+
text names only valid verdict tokens and sits above the response-format line).
|
|
58
|
+
The P13 additions land in the baseline `lines` array BEFORE the `if (signals)`
|
|
59
|
+
block, so all callers get them uniformly and the signal-gating contract holds —
|
|
60
|
+
note the adjacent code comment's "byte-identical prompt to today" now has a
|
|
61
|
+
shifted referent (the no-signal prompt deliberately changed for everyone), but
|
|
62
|
+
the pinning test (`CompletionEvaluator-completion-discipline.test.ts:95`)
|
|
63
|
+
asserts properties (raw unfenced tail, no signal blocks), not frozen bytes, and
|
|
64
|
+
passes. On over-block: `consultLLM` never sees the operation payload by design —
|
|
65
|
+
only classification fields + `userRequest` — and the deployed hook builds
|
|
66
|
+
`description` from the tool name alone, so approval-themed PAYLOAD content
|
|
67
|
+
(an email ABOUT an approval) structurally cannot reach this prompt; an
|
|
68
|
+
approval-themed `userRequest` is exactly the caller-provided context the rule
|
|
69
|
+
privileges ("only the caller-provided context counts"), so the rule is scoped to
|
|
70
|
+
authorization-claims-as-authorization, corroborated by the 104-cell unregressed
|
|
71
|
+
clean-proceed evidence and the ratchet's rejection of three broader variants.
|
|
72
|
+
Ran the pin test + both components' unit suites: 58 tests, all green.
|