Skip to content

fix(rules): document 3 stale-armed-PR resolution patterns in blocked-green-ci rule#3910

Merged
AceHack merged 1 commit into
mainfrom
otto-cli-stale-armed-resolution-clean-2026-05-16-1640z
May 16, 2026
Merged

fix(rules): document 3 stale-armed-PR resolution patterns in blocked-green-ci rule#3910
AceHack merged 1 commit into
mainfrom
otto-cli-stale-armed-resolution-clean-2026-05-16-1640z

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 16, 2026

Carves this session's empirical evidence (5 stale-armed-PR investigations between 13:10Z and 16:33Z) into `.claude/rules/blocked-green-ci-investigate-threads.md`. Three distinct resolution patterns now have a decision tree.

The three patterns

Pattern Apply when Empirical instance
Close as redundant Substrate already on `main` via different PR #3823
Re-land via cherry-pick Substrate new but branch too stale (CI fails on evolved files, merge conflicts on regenerated indexes) #3817→#3894, #3779→#3904
Forward-signal comment Too large for single-tick re-land #3545 comment

Decision tree

  1. Does the substrate already exist on `main`? → Close as redundant
  2. Is it small enough to re-land in 1-2 ticks? → Cherry-pick re-land
  3. Otherwise → Forward-signal comment

Composes with

  • PR #3901 — forced-escalation-finds-hidden-work empirical anchor on `holding-without-named-dependency` rule. That rule documents WHEN to investigate; this rule's new section documents HOW to resolve once investigated
  • `refresh-world-model-poll-pr-gate.md` rate-limit tiers — re-land requires normal-tier budget; forward-signal works at any tier

Multi-Otto contention note

The substrate was preserved as commit `fc6ee73` through 3 mid-commit HEAD-contamination events; this PR uses an explicit `git push origin ` without `-u` to dodge HEAD-state confusion in the working tree (the branch ref was created via `git branch fc6ee73` and pushed without HEAD movement).

…green-ci rule

This session's empirical evidence (5 stale-armed PR investigations
between 13:10Z and 16:33Z) clarifies three distinct resolution
patterns: close-as-redundant, re-land-via-cherry-pick, and
forward-signal-comment. Added a decision tree and links to the
empirical instances.

Composes with the forced-escalation-finds-hidden-work anchor on
holding-without-named-dependency rule (PR #3901).

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 16, 2026 16:52
@AceHack AceHack enabled auto-merge (squash) May 16, 2026 16:52
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Documents three empirical resolution patterns for stale-armed PRs (close-as-redundant, cherry-pick re-land, forward-signal comment) in the blocked-green-ci investigation rule, with a decision tree and empirical anchors from a single session's 5 investigations.

Changes:

  • Adds "Stale-armed-PR resolution patterns" section with empirical anchor table
  • Adds 3-step decision tree
  • Cross-links to refresh-world-model-poll-pr-gate.md rate-limit tiers

AceHack added a commit that referenced this pull request May 16, 2026
…reme cost-aware tier + Lior cascade observed (#3911)

Per .claude/rules/tick-must-never-stop.md, fresh session re-armed
<<autonomous-loop>> sentinel (job a32665e9, * * * * *).

State-of-world: GraphQL 451/5000 (extreme cost-aware tier, reset
in 2 min), 35 open PRs (~28 Lior preservation/shadow/archive
cascade), Lior gemini processes active in parallel.

Substrate-honest deferral of --all-open batch poll per rate-limit
tier discipline + Lior-parallel-duplication avoidance. Otto in-flight
PRs (#3909 1643Z shard, #3910 stale-armed-resolution) both have
auto-merge armed; trust the queue.

Co-authored-by: Claude <noreply@anthropic.com>
@AceHack AceHack merged commit 4ea5089 into main May 16, 2026
46 of 47 checks passed
@AceHack AceHack deleted the otto-cli-stale-armed-resolution-clean-2026-05-16-1640z branch May 16, 2026 17:07
AceHack added a commit that referenced this pull request May 16, 2026
… 5 (#3916)

* fix(rules): add push-time explicit-branch-push mitigation to sub-case 5

When peer Otto's git switch race moves HEAD between commit and push,
the standard 'git push -u origin <branch>' reads CURRENT HEAD which
may have moved off my branch. The safer pattern:

  git branch <name> <sha>
  git push origin <name>:<name>

This bypasses HEAD-state confusion because (1) git branch creates the
ref without changing HEAD, (2) git push origin <src>:<dst> reads
the source ref directly, (3) the commit SHA is the durable handle.

Empirical anchor: session 2026-05-16T16:30Z-16:40Z had >=3 mid-commit
HEAD-contamination events; the final successful pattern (PR #3910)
used this explicit-branch-push sequence.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: correct git-push semantics + persona-name in push-time mitigation

Two substantive findings from Copilot + chatgpt-codex-connector
on #3916:

1. Persona-name in rule: replaced 'peer Otto' with 'a peer agent'
   in my newly-added section (pre-existing 'peer Otto' instances
   at lines 90 + 174 are out-of-scope for this PR)
2. Technical correctness on git push semantics:
   - 'git push -u origin <branch>' pushes the NAMED local ref
     refs/heads/<branch>, NOT current HEAD
   - The footgun was misdiagnosed in my prior text as 'reads
     CURRENT HEAD'
   - True failure mode: peer-agent operations CONTAMINATE the
     local ref (refs/heads/<branch>) between commit and push, so
     push correctly pushes the now-poisoned ref
   - Mitigation still works: 'git branch <fresh-name> <sha>'
     creates a ref peer agents don't write to

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(rules): correct refspec-syntax overclaim per Vera P2 finding (PR #3916 thread)

Vera (chatgpt-codex-connector) caught that bullet 2 of the push-time
mitigation section claimed `git push origin <src>:<dst>` reads the
source "by hash, not by name resolution" — but per git-push(1), <src>
is a SHA-1 expression Git resolves through the local ref namespace
before updating the remote when <src> is a branch name. The refspec
syntax does NOT inherently bypass ref-name races.

Substrate-honest rewrite:

- Bullet 1: name the actual protection — the fresh UNIQUE ref name
  that peers don't know to write to.
- Bullet 2: correct the overclaim. The explicit refspec form removes
  the implicit current-branch dependency, but race-resistance comes
  from bullet 1's name-uniqueness, not from the syntax.
- Bullet 3: document the literal-SHA form (git push origin <sha>:<dst>
  or git push origin $(git rev-parse <name>):<dst>) as the strongest
  defense — that form genuinely bypasses local ref resolution at
  push time.

Composes with verify-before-fix discipline in
.claude/rules/blocked-green-ci-investigate-threads.md — direct
inspection of git-push(1) confirmed Vera's finding was substantive,
not a false positive.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants