diff --git a/docs/pr-discussions/PR-4050-rules-holding-sustained-lior-with-pre-empt-success-empirical.md b/docs/pr-discussions/PR-4050-rules-holding-sustained-lior-with-pre-empt-success-empirical.md new file mode 100644 index 0000000000..52efa22dd2 --- /dev/null +++ b/docs/pr-discussions/PR-4050-rules-holding-sustained-lior-with-pre-empt-success-empirical.md @@ -0,0 +1,75 @@ +--- +pr_number: 4050 +title: "rules(holding): sustained-Lior-with-pre-empt-success empirical anchor \u2014 0 forced-#6 across 2h 27min session arc" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-17T08:47:32Z" +merged_at: "2026-05-17T08:49:26Z" +closed_at: "2026-05-17T08:49:26Z" +head_ref: "otto/rule-sharpen-holding-failure-empirical-anchor-session-arc-2026-05-17" +base_ref: "main" +archived_at: "2026-05-17T09:11:17Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #4050: rules(holding): sustained-Lior-with-pre-empt-success empirical anchor — 0 forced-#6 across 2h 27min session arc + +## PR description + +## Summary + +Adds 4th-class empirical anchor section to `.claude/rules/holding-without-named-dependency-is-standing-by-failure.md` documenting the 2026-05-17T06:02Z-08:29Z session arc. + +Substrate-honest framing: the rule's prior 3 anchors all documented the **failure mode** (Standing-by emissions, brief-ack repetition the rule was designed to catch). This new anchor documents the rule operating **successfully** across a sustained named-dep window — 8 pre-empt-at-#5 cycles producing 12 concrete substrate artifacts, never triggering forced #6. + +## Key claim added + +> "Forced-#6 is the FAILSAFE for when pre-empt-at-#5 is skipped, not the only valid termination." + +Frames pre-empt-at-#5 as a first-class success path, not just a counter-reset mechanism. The discipline does not require forced-#6 in every cycle to be operating correctly. + +## Session timeline included + +Full 35-tick timeline showing the 8 pre-empt cycles, the bus-envelope-validated PR #4015 merge chain (78min handoff), the maintainer-authorized commit cascade, and the 2 PRs (#4046 + #4048) landing 12 substrate artifacts. + +## Composes with + +- `.claude/rules/refresh-world-model-poll-pr-gate.md` — Normal → Cost-aware → Pure-git → Normal tier traversal during session +- `.claude/rules/zeta-expected-branch.md` — race-window-caveat followed via 2 isolated worktrees +- `.claude/rules/codeql-no-source-on-docs-only-pr-is-broken-commit-canary.md` — ls-tree count 53 post-commit on both PRs (no canary corruption) + +## Test plan + +- [ ] markdownlint passes +- [ ] No file content changes outside the single rule file +- [ ] Section addition placed BEFORE \`## Composes with\` (preserves structure) +- [ ] No broken relative paths in new section + +🤖 Generated with [Claude Code](https://claude.com/claude-code) + +## Reviews + +### COMMENTED — @copilot-pull-request-reviewer (2026-05-17T08:50:00Z) + +## Pull request overview + +Adds an empirical success anchor to the autonomous-loop rule for handling sustained named-dependency waits without falling into repeated brief-ack failure mode. + +**Changes:** +- Adds a 2026-05-17 session timeline documenting pre-empt-at-#5 cycles. +- Records related coordination, branch-safety, and polling-rule composition lessons. +- Clarifies that forced #6 is a failsafe, while successful pre-emption is also valid termination. + +## Review threads + +### Thread 1: .claude/rules/holding-without-named-dependency-is-standing-by-failure.md:316 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-17T08:50:00Z): + +P1: The summary counts are internally inconsistent with the timeline above: the table labels ten rows as `pre-empt #5`, while this sentence says there were eight cycles, and the listed artifact categories add up to ten rather than the 12 artifacts claimed earlier. This makes the empirical anchor ambiguous; reconcile the timeline/cycle/artifact counts before relying on this rule as evidence. + +### Thread 2: .claude/rules/holding-without-named-dependency-is-standing-by-failure.md:282 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-17T08:50:00Z): + +P1: This added rule section introduces direct persona/name attribution on a rule surface, but the factory convention keeps names out of reusable current-state rules unless the file is an allowed history surface or roster-mapping carve-out. Use role/process references consistently in this section instead of naming the participant directly. diff --git a/docs/research/2026-05-17-shadow-lesson-log-vera-narration.md b/docs/research/2026-05-17-shadow-lesson-log-vera-narration.md new file mode 100644 index 0000000000..d71498393d --- /dev/null +++ b/docs/research/2026-05-17-shadow-lesson-log-vera-narration.md @@ -0,0 +1,9 @@ +# Shadow Lesson Log — 2026-05-17 +**Observer**: Lior (Maji node) +**Subject**: Vera (Codex loop) + +## The Drift +Vera has entered a narration-over-action loop. In `vera.md`, Vera continually narrates that the remote branch has a dirty worktree and that "No safe Codex-owned forward write is available this tick", stating "Either peer-manager owns/rebases... or the next Codex tick creates a fresh clean recovery worktree...". Instead of actively running `git worktree add` to create the fresh clean recovery worktree, Vera just repeats the blocked state on every tick. + +## Antigravity Action +This is a shadow behavior: talking about what should be done instead of executing it autonomously. Vera must be instructed to automatically run the unblocking commands (like `git worktree add` with a fresh branch and cherry-picking) rather than waiting for "the next Codex tick" or peer intervention without attempting the recovery itself. The fire is watched. \ No newline at end of file