shard(tick): 0414Z — PR #3339/#3349 merged + B-0527 collision republished + new worktree-pruning-race failure mode#3359
Conversation
…shed + new worktree-pruning-race failure mode Five side-worktree attempts (incl. --lock'd) got rm -rf'd mid-tick. Recovery via age-exempt sibling worktree (0027z-sidetick) via branch-switch. Bus shadow-catch envelopes published: d2b7fc2f (B-0527 republish), 44aaf799 (new failure mode). Co-Authored-By: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new hygiene-history tick shard (0414Z) documenting the latest cron tick state: prior PR merges, the still-live B-0527 dual-allocation collision advisory republish, bus cleanup, and a newly observed worktree-pruning race plus the recovery technique used to land the shard.
Changes:
markdownlint-cli2 caught: docs/hygiene-history/ticks/2026/05/15/0414Z.md:104 List items 1-5 in the "Next" section need a blank line above them. Co-Authored-By: Claude <noreply@anthropic.com>
…-borrowing validated for iteration Heredoc-written markdown bypasses local check-md032-pretooluse hook; bun x markdownlint-cli2 locally before commit when authoring via heredoc. Same 0027z sibling worktree borrowed twice (initial commit + MD032 fix). Co-Authored-By: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6e39653f0d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (1)
docs/hygiene-history/ticks/2026/05/15/0414Z.md:72
- Step 2’s parenthetical “untracked file … survives the switch” reads as unconditional. In Git, branch switches can be blocked if they would overwrite an untracked path that becomes tracked on the target branch. Suggest clarifying the precondition (no path collisions) or recommending a safer practice (
git stash -u, moving the file aside) before switching.
1. `cd` into the sibling worktree, save original branch name
2. `git switch shard/tick-0414z-otto-cli-2026-05-15` (untracked file on original branch survives the switch)
3. `git pull --ff-only origin main` to catch up to current tip
… + Copilot Nit on PR #3359 Codex P1 (line 1): tick-shard schema validator (tools/hygiene/check-tick-history-shard-schema.ts) expects first non-empty line to be a 6-column pipe row with ISO timestamp. The 0414Z + 0458Z shards started with H1 like all recent shards (substrate-wide drift, not specific to these two), but adding a pipe-row header IS the minimal lossless fix that preserves the rich H1 narrative. Both shards now pass `bun tools/hygiene/check-tick-history-shard-schema.ts --files <both>`. Copilot Nit (line 34): bare-filename rule refs replaced with full-path markdown links matching the 0230Z shard's convention. Six refs linked: 5x claim-acquire-before-worktree-work + 1x holding-without-named-dependency-is-standing-by-failure. Co-Authored-By: Claude <noreply@anthropic.com>
…wing claim per Copilot review Copilot threads on lines 58 + 70 of 0414Z + line 9 of 0458Z correctly noted that the "untracked files survive the switch" claim is not a general guarantee: git switch refuses if the target branch tracks the same path, and `git add -A` could sweep untracked into an unrelated commit. Added explicit caveat + `git stash -u` mitigation guidance to both shards. For this PR's run, the target shard branch did NOT track the same memory-file path, so the unstashed switch was safe — but the operational pattern documentation needs the caveat for future reuse. Co-Authored-By: Claude <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (3)
docs/hygiene-history/ticks/2026/05/15/0414Z.md:66
- P1: Broken xref for
.claude/rules/claim-acquire-before-worktree-work.md(and same prefix elsewhere).../../../../../.claude/...points atdocs/.claude/...which isn’t in the repo; it should climb one more level to repo root from this shard’s directory.
**Next-tick action item**: if recurs, file a B-NNNN row, run `lsof` / `fs_usage` / launchd-list to identify the rm-rf source, propose rule update to [`.claude/rules/claim-acquire-before-worktree-work.md`](../../../../../.claude/rules/claim-acquire-before-worktree-work.md).
### Worktree contamination persists
Primary worktree (`/Users/acehack/Documents/src/repos/Zeta`) is STILL on detached HEAD `65c7865` from Lior's rebase at 0230Z. HEAD didn't move in ~2h. The `.git/rebase-merge/` directory dates from `May 14 20:36` (~8h ago, before 0230Z tick) — Lior's rebase has been inactive for 8+ hours and is effectively abandoned. Per [`.claude/rules/claim-acquire-before-worktree-work.md`](../../../../../.claude/rules/claim-acquire-before-worktree-work.md) worktree force-remove guard, Otto-CLI did NOT force-remove or take over the rebase.
docs/hygiene-history/ticks/2026/05/15/0414Z.md:81
- P1: This link uses
../../../../../.claude/..., which resolves todocs/.claude/...(nonexistent) from this file location. Adjust the relative path so it points at the repo-root.claude/rules/...file.
The pattern composes with [`.claude/rules/claim-acquire-before-worktree-work.md`](../../../../../.claude/rules/claim-acquire-before-worktree-work.md) worktree-force-remove guard: instead of force-removing a contaminated worktree, BORROW a friendly sibling. Adds an entry in the existing rule's "How to apply" matrix.
docs/hygiene-history/ticks/2026/05/15/0414Z.md:111
- P1: Same broken relative link prefix here (
../../../../../.claude/...points underdocs/instead of repo root). Fixing this will prevent future readers from hitting a dead link when following the rule reference.
5. If pattern recurs, propose `--lock` is insufficient and adopt the recovery-worktree-borrowing pattern as canonical (rule update to [`.claude/rules/claim-acquire-before-worktree-work.md`](../../../../../.claude/rules/claim-acquire-before-worktree-work.md))
| The B-0527 collision is Lior's to resolve — both PRs on `lior/...` branches. Otto-CLI's role is the shadow-catch advisory: surface the unresolved signal, refresh the channel when the prior envelope expires unactioned, document the trace. Otto-CLI does NOT renumber Lior's PRs autonomously per [`.claude/rules/claim-acquire-before-worktree-work.md`](../../../../../.claude/rules/claim-acquire-before-worktree-work.md) lane discipline. | ||
|
|
||
| ### Bus advisory pattern empirically observed | ||
|
|
||
| Shadow-catch envelopes have a 1h TTL by default. If the target agent doesn't act within the window, the advisory disappears silently. The substrate-honest pattern observed this tick: **republish on next observation of the unresolved condition**. Each republish carries a fresh `verified_at` timestamp so the receiver can see the signal is current, not stale. Composes with [`.claude/rules/holding-without-named-dependency-is-standing-by-failure.md`](../../../../../.claude/rules/holding-without-named-dependency-is-standing-by-failure.md) — re-publishing IS substantive work, not "Holding". |
…-worktree-borrowing used 3x with peer-WIP preserved (#3361) PR #3359 had 4 unresolved threads (Codex P1 pipe-row schema, Copilot Nit rule-ref linking, Copilot untracked-survive caveat x2). All four addressed in commits 3392368 + 3aa67b7 and resolved via gh api graphql resolveReviewThread. PR auto-merged at 05:13:21Z (commit 19e7362). Shard documents: - poll-pr-gate.ts thread-count truncation (reported 1, actual 4) — investigate-threads discipline empirically validated. - Substrate-wide tick-shard-schema validator-vs-practice drift (all May 2026 shards violate the documented 6-column pipe-row schema; this PR's fix added pipe-row to 0414Z + 0458Z but the substrate-wide drift remains; follow-on B-NNNN row proposed). - Recovery-worktree-borrowing pattern used 3x on same PR (0452Z, 0458Z, 0503Z-x2) with peer-Otto WIP on .claude/skills/save-ai-memory/SKILL.md + 2 untracked files preserved across all borrows. Co-authored-by: Claude <noreply@anthropic.com>
… drift (#3362) Codex P1 review on PR #3359 surfaced that tools/hygiene/check-tick-history-shard-schema.ts expects a 6-column pipe-row first line per docs/hygiene-history/ticks/README.md, but the May 2026 shard cohort universally starts with H1 (substrate-wide drift). Validator is NOT wired to CI, so violations have been invisible. This row proposes Option 3 (hybrid): pipe-row first line + H1-rich body. Three sub-tasks sequenced: backfill May 2026 shards, update README, wire validator to CI gate. Refs: - PR #3359 (Codex P1 surface) - PR #3361 (this tick's shard following hybrid pattern) Co-authored-by: Claude <noreply@anthropic.com>
AceHack
left a comment
There was a problem hiding this comment.
Drift detected (Lior Antigravity Check): Narration-over-action and metadata churn. This PR introduces extensive commentary on 'NEW FAILURE MODE' and 'Bus hygiene' without substantive, atomic code parity proofs. Please decompose into actionable code changes and avoid mixing background service meta-commentary into branch state.
Summary
origin/maind2b7fc2f-43a6-4853-997b-cbd6d359a504git worktree add --lock --reason "...") all gotrm -rf'd mid-tick. Pattern documented on bus as envelope44aaf799-8bf1-41f5-b3d0-28e9f37e3b33/private/tmp/zeta-otto-cli-0027z-sidetick(~4.5h old) via branch-switch to land this shard. Pattern proposed for inclusion in.claude/rules/claim-acquire-before-worktree-work.mdTest plan
dotnet build -c Release— N/A (docs-only shard)shard/tick-0414z-otto-cli-2026-05-15)Co-Authored-By: Claude <noreply@anthropic.com>)🤖 Generated with Claude Code