Skip to content

Commit 3fb3a1d

Browse files
chore(runbooks): log 1144 refresh-checkpoint live probes — R1/R2/R3 all GO on installed v4.6.0 (#1156)
1 parent 1a4f1c9 commit 3fb3a1d

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

pact-plugin/tests/runbooks/RUNBOOK_RUN_DATES.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,13 @@ the calibration record.
225225
| Run date (UTC) | Operator | Plugin version | Sections passed | greedy-fix mode | Notes / per-section observations |
226226
| -------------- | -------- | -------------- | --------------- | --------------- | -------------------------------- |
227227
| 2026-07-07 | michael-wojcik | 4.5.2 installed · CC 2.1.202 | **3/3 PASS — precedence matches reference/config.md exactly, no update needed** | n/a | Step A user-vs-project: user tier `PACT_PR_GREEDY_FIX=0` + project tier `=1` → injected block `PR greedy-fix: ON` — PROJECT WINS. Step B local-vs-project: project `=0` + `.claude/settings.local.json` `=1` (user pin removed to isolate) → block `ON` — LOCAL WINS. Step C pin-vs-shell gotcha: user `env`-block pin `=0` + one-shot shell `PACT_PR_GREEDY_FIX=1 claude -p …` → block `OFF` — the `env`-block PIN WINS over the same-named shell var, exactly the documented gotcha. Observed order (local → project → user; pin-over-shell) matches `pact-plugin/reference/config.md` §Precedence verbatim at CC 2.1.202 (runbook was CC-2.1.201-anchored at design time). METHOD: real headless `claude -p` launches in a scratch project dir (tier semantics are path-based, not repo-specific); observable = the SessionStart-injected `## PACT Runtime Config` block read from the probe session's transcript `.jsonl` (model-independent — robust to the probe session's own bootstrap taking over its reply turn, which defeated the echo-the-block approach on the first launch). User-tier edits were backed up first and the revert was diff-verified byte-equivalent afterward. Documented empirical, NOT a pytest gate — resolver is os.environ-blind; CC merges tiers into os.environ before the resolver reads. |
228+
229+
## 1144-refresh-checkpoint-live-probes.md
230+
231+
| Run date (UTC) | Operator | Plugin version | Probe | Outcome | Notes / observed deviations |
232+
| -------------- | -------- | -------------- | ----- | ------- | --------------------------- |
233+
| 2026-07-12 | michael-wojcik | 4.6.0 installed · CC 2.1.207 | R1 | **GO** — TaskStop terminated the tmux pane AND team-config file + tasks dir stayed intact (mirrors in-process) | Probe-lead session 39e37ad2-3873-4d2d-9916-d78c01a025a9 (`--teammate-mode tmux`, scratch cwd /tmp/pact-probe-r1, team session-39e37ad2). Go-criterion leg (directly observed): TaskStop on tmux-pane teammate scratch-a (pane %6, PID 7715) reaped pane+process in one call, no teammate cooperation required; config file present and well-formed at the 06:20:19Z post-TaskStop raw read (only the roster entry removed — expected-not-failure) and again at 06:22:21Z after a second TaskStop (secretary); tasks dir byte-untouched throughout. (Team dir later removed by the PLATFORM at clean session end — journal cleanup_summary teams_reaped=0 — not by TaskStop.) DEVIATION 1 — shutdown_request does NOT terminate a tmux-pane teammate: 3 graceful rounds, including two well-formed shutdown_response approvals (request_id echoed, approve:true), left pane %6 alive throughout; roster entry remained (isActive flipped false only). Roster-entry difference: shutdown_request KEEPS the members[] entry; TaskStop REMOVES it. DEVIATION 2 — platform self-reports about teammate backend mode are mutually contradictory and individually untrustworthy: a second, identically-shaped spawn (scratch-b, dispatch 06:13:29Z) got a members[] entry claiming backendType "tmux" + tmuxPaneId "%7" + isActive:true, yet no pane %7 appears in any captured pane listing, while TaskStop's result labeled it task_type:"in_process_teammate" — the SAME label it reported for scratch-a, a verifiable tmux-pane process. At least one self-report is false in each direction; scratch-b's actual backend mode is INDETERMINATE (no observer captured the pane set during its ~2-min lifetime). Rule validated: mode determination needs pane/process ground truth (tmux list-panes, ps), never API or registry self-report. Post-stop SendMessage to the stopped name → hard error "No agent named 'scratch-a' is reachable" (no transcript-resume, no resurrection). Stragglers: ZERO post-stop deliveries in a ~10-min window; all trailing traffic predated the real stops (liveness evidence, not queue drain). Inbox stub files persisted post-stop while the team dir existed — filesystem presence is not a routability signal. Method notes: bootstrap_gate PreToolUse hook hard-blocks Agent dispatch pre-bootstrap (minimal bootstrap required; ritual secretary spawn, TaskStopped at cleanup); driving technique = interactive pane + send-keys with separate Enter (paste-mode swallows inline Enter), C-u input hygiene (dimmed suggestions), and ground-truth watch conditions (a config-poll grep missed scratch-b's short-lived roster entry — poll-race; snapshot files beat polls). |
234+
| 2026-07-12 | michael-wojcik | 4.6.0 installed · CC 2.1.207 | R2 | **GO** — refresh prompt text incl. `refresh_ts=2026-07-12T05:05:27Z` appeared in the first post-compact turn context | Probe session c276966f-ff93-4767-b16e-021e665d560d (scratch cwd /private/tmp/pact-probe-r23, interactive probe-lead driven via tmux send-keys). Evidence: SessionStart:compact hook additionalContext, raw-transcript-verified; probe-lead echoed it verbatim on the first post-compact turn; refresh_ts byte-matches the journal's session_refreshed ts. Deviations: checkpoint was the degenerate harvest-only case (no mid-flight feature task; AskUserQuestion 'Proceed with refresh' answered affirmatively); probe-lead's echo first mistyped the ts (…05:05:20Z) before self-correcting to the verbatim …05:05:27Z in the same message — the raw transcript context was always correct. |
235+
| 2026-07-12 | michael-wojcik | 4.6.0 installed · CC 2.1.207 | R3 | **GO**`session_refresh_consumed` written with matching `refresh_ts`; new session did NOT re-surface the prompt | Probe sessions c276966f-ff93-4767-b16e-021e665d560d (refresh → /compact → /PACT:bootstrap) and d72fa852-0464-47d0-8b35-d8aaa7e7eae5 (new session, same cwd). Evidence: `session_refresh_consumed` written with `refresh_ts=2026-07-12T05:05:27Z` matching the `session_refreshed` ts verbatim (journal lines 8 and 13); bootstrap resumption confirmed (secretary respawned fresh, mid-flight state surfaced, consumption verified on disk by the probe-lead). New session startup did NOT re-surface the refresh prompt (startup hook additionalContext lacks it; model-side explicit NO; all transcript refresh-string matches attributed to the verification question and static bootstrap command text). Deviations: none beyond R2's degenerate-checkpoint note. |
236+
237+
Lead verification note: the orchestrator independently reproduced the load-bearing evidence for all three probes before recording — journal refresh_ts byte-matches (lines 8/13), the SessionStart:compact hook context in the raw transcript, full attribution of every refresh-string occurrence in the new session's transcript, and the timestamped post-TaskStop config/tasks raw-read timeline (snapshots preserved at /tmp/pact-probe-r1-evidence/).

0 commit comments

Comments
 (0)