Skip to content

rules(rate-limit-tier): REST PR-creation fallback under Pure-git tier (PR #4105 anchor)#4107

Merged
AceHack merged 1 commit into
mainfrom
rule-anchor/rest-pr-create-pure-git-tier-fallback-2026-05-17-2203z
May 17, 2026
Merged

rules(rate-limit-tier): REST PR-creation fallback under Pure-git tier (PR #4105 anchor)#4107
AceHack merged 1 commit into
mainfrom
rule-anchor/rest-pr-create-pure-git-tier-fallback-2026-05-17-2203z

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 17, 2026

Adds a sub-section to refresh-world-model-poll-pr-gate.md under "Pure-git tick pattern (empirical)" documenting REST POST /repos/.../pulls as a fallback when GraphQL is exhausted.

Empirical anchor: PR #4105 opened via REST at 2026-05-17T21:54Z when GraphQL was 0/5000 (28 min from reset). REST core was at 4838 at the time — separate budget.

Caveats documented:

  • gh pr merge --auto is GraphQL-only (no REST equivalent for enablePullRequestAutoMerge); PR opened via REST sits without auto-merge until post-reset tick.
  • gh pr comment is GraphQL; REST equivalent is POST /repos/.../issues/N/comments.
  • resolveReviewThread is GraphQL-only.
  • REST PR-creation does NOT bypass branch protection.
  • JSON body must use HEREDOC + temp file; inline shell-quoted JSON is fragile.

The fallback applies when a substantive landing is ready but you want the PR visible BEFORE the reset window so reviewers can pick it up immediately. Without auto-merge arming, the next post-reset tick must explicitly arm it.

This PR itself was also opened via the REST endpoint — recursively-self-documenting the pattern.

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

… (PR #4105 empirical anchor)

Adds a sub-section to refresh-world-model-poll-pr-gate.md
under "Pure-git tick pattern (empirical)" documenting that
`gh pr create` uses GraphQL but the REST POST /repos/.../pulls
endpoint works during Pure-git tier (REST budget is separate
from GraphQL budget).

Empirical anchor: PR #4105 opened via REST at 2026-05-17T21:54Z
when GraphQL was 0/5000 (28 min from reset). REST core was at
4838 at the time.

Caveats documented:
- gh pr merge --auto is GraphQL-only (no REST equivalent for
  enablePullRequestAutoMerge); PR opened via REST sits without
  auto-merge until post-reset tick.
- gh pr comment is GraphQL; REST equivalent is POST
  /repos/.../issues/N/comments.
- resolveReviewThread is GraphQL-only.
- REST PR-creation does NOT bypass branch protection.
- JSON body must use HEREDOC + temp file; inline shell-quoted
  JSON is fragile.

The fallback applies when a substantive landing is ready but
you want the PR visible BEFORE the reset window so reviewers
can pick it up immediately. Without auto-merge arming, the
next post-reset tick must explicitly arm it.

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 17, 2026 22:06
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

Documentation-only addition to the Pure-git tier rule, recording a REST-based PR-creation fallback when the GraphQL budget is exhausted, with an empirical anchor (PR #4105) and explicit caveats about features (auto-merge, comments, review-thread resolution) that remain GraphQL-only.

Changes:

  • Adds a new "REST PR-creation fallback under Pure-git tier" sub-section with a HEREDOC+gh api recipe.
  • Documents the GraphQL-only caveats (gh pr merge --auto, gh pr comment, resolveReviewThread) and that branch protection still applies.
  • Anchors the pattern to the 2026-05-17T21:54Z PR #4105 instance.

@AceHack AceHack merged commit 22b7383 into main May 17, 2026
30 checks passed
@AceHack AceHack deleted the rule-anchor/rest-pr-create-pure-git-tier-fallback-2026-05-17-2203z branch May 17, 2026 22:21
AceHack added a commit that referenced this pull request May 17, 2026
… claim + duplicate-merge + clean-cycle count

Three reviewer findings addressed:

1. **Codex P2 (line 330)** — "Align cadence claim with timeline":
   Original claim said "~2 pre-empts per ~30-min window"; table
   showed 4 pre-empts (cycles 3, 5, 6, 7). Corrected to "~3-4
   Otto-initiated pre-empts per window, the 4th typically being
   the forced-#6 meta-fallback."

2. **Codex P2 (line 340)** — "Fix duplicate merge event for #4104":
   Cycle 3 listed PR #4104 as "merged" but it was OPENED +
   auto-armed in cycle 3 and didn't actually MERGE until cycle 4
   (when CI cleared). Restated cycle 3 as "opened + auto-armed"
   and clarified cycle 4 as the merge event.

3. **Copilot (line 345)** — "Reconcile first ~4 clean pre-empts
   with cycle 2 = no concrete artifact":
   The "first ~4 cycles" wording over-counted. Cycle 2 had no
   pre-empt (no named dep, no escalation, no artifact); cycles
   1 + 4 were external counter-reset-via-merge events, not
   Otto-initiated pre-empts. Restated to count only Otto-initiated
   pre-empts (3 clean before saturation + 1 forced-#6 = 4 total).

Added a "Note on terminology" sub-section distinguishing:
- Otto-initiated pre-empt (Otto produces a concrete artifact in
  response to brief-ack pressure)
- Counter-reset-via-merge (external auto-merge firing resets the
  counter but doesn't count toward pre-empt cadence)

Composes with the Codex finding's underlying concern: the rule
must distinguish "discipline-bounded Otto behavior" from
"external state changes" when measuring cadence. Without that
distinction, the cadence claim conflated the two and over-stated
the pre-empt budget.

Bonus row added to timeline: cycle 8 (22:20Z) — PR #4107 merged
via REST PUT /pulls/N/merge bypass when GraphQL was still
exhausted. This is the post-forced-#6 substantive close of the
window.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 17, 2026
…self-documenting) (#4110)

* rules(holding): pre-empt-substrate-pool-saturation anchor — single GraphQL-reset window cadence (2026-05-17T21:29Z-22:13Z, forced-#6 at end)

Fifth empirical anchor for holding-without-named-dependency-is-
standing-by-failure.md. Observed pattern: cycling brief-ack
chains under sustained GraphQL exhaustion produce a natural
cadence of roughly 2 substantive pre-empts per ~30-min GraphQL
reset window before pre-empt-substrate-pool saturates.

Session timeline: 7 cycles across ~44 min; first ~4 cycles
produced clean pre-empts; cycles 5-6 were forced into REST-only
operation by GraphQL exhaustion; cycle 7 reached forced-#6
because the substrate pool of non-fabricated improvements had
saturated.

Operational lesson: pre-empt-at-#5 is NOT infinitely repeatable
within a single rate-limit window. The 06:02Z anchor demonstrated
10 cycles without forced-#6, but those were spread across 2h 27min
with multiple resets between cycles (each reset refreshing the
substrate-discovery context). When the window is shorter (~30 min)
AND no major external state changes occur, the natural cadence
is ~2 pre-empts before saturation. Forced-#6 is then NOT a
failure of pre-empt discipline; it's substrate-honest
acknowledgment that the pool is exhausted for THIS window.
Riding cleanly to #6 and applying the meta-fallback is the
discipline WORKING.

THIS commit is itself the forced-#6 meta-fallback firing,
recursively-self-documenting.

Composes with refresh-world-model-poll-pr-gate.md (REST
PR-creation fallback enabled cycles 5-6 productivity; without
it those cycles would have deferred).

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

* fix(rule-anchor/4110): address Codex P2 + Copilot findings on cadence claim + duplicate-merge + clean-cycle count

Three reviewer findings addressed:

1. **Codex P2 (line 330)** — "Align cadence claim with timeline":
   Original claim said "~2 pre-empts per ~30-min window"; table
   showed 4 pre-empts (cycles 3, 5, 6, 7). Corrected to "~3-4
   Otto-initiated pre-empts per window, the 4th typically being
   the forced-#6 meta-fallback."

2. **Codex P2 (line 340)** — "Fix duplicate merge event for #4104":
   Cycle 3 listed PR #4104 as "merged" but it was OPENED +
   auto-armed in cycle 3 and didn't actually MERGE until cycle 4
   (when CI cleared). Restated cycle 3 as "opened + auto-armed"
   and clarified cycle 4 as the merge event.

3. **Copilot (line 345)** — "Reconcile first ~4 clean pre-empts
   with cycle 2 = no concrete artifact":
   The "first ~4 cycles" wording over-counted. Cycle 2 had no
   pre-empt (no named dep, no escalation, no artifact); cycles
   1 + 4 were external counter-reset-via-merge events, not
   Otto-initiated pre-empts. Restated to count only Otto-initiated
   pre-empts (3 clean before saturation + 1 forced-#6 = 4 total).

Added a "Note on terminology" sub-section distinguishing:
- Otto-initiated pre-empt (Otto produces a concrete artifact in
  response to brief-ack pressure)
- Counter-reset-via-merge (external auto-merge firing resets the
  counter but doesn't count toward pre-empt cadence)

Composes with the Codex finding's underlying concern: the rule
must distinguish "discipline-bounded Otto behavior" from
"external state changes" when measuring cadence. Without that
distinction, the cadence claim conflated the two and over-stated
the pre-empt budget.

Bonus row added to timeline: cycle 8 (22:20Z) — PR #4107 merged
via REST PUT /pulls/N/merge bypass when GraphQL was still
exhausted. This is the post-forced-#6 substantive close of the
window.

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

* fix(rule-anchor/4110): address Codex P2 line-355 cadence-baseline inconsistency

Codex caught a remaining inconsistency in the "Composes with"
paragraph: the rest of the new anchor consistently uses
"3-4 pre-empts" but line 355's compose paragraph still said
"natural-cadence-of-2-pre-empts." That created conflicting
operational guidance inside the same section.

Fixed: paragraph now reads "The 3-4-Otto-initiated-pre-empts
cadence observed here is conditional on REST fallback being
available — without it, cycles 5-6 fall out and the cadence
drops to ~2 with the meta-fallback firing earlier."

This preserves the original load-bearing point (REST fallback
enables more pre-empts per window) while keeping the cadence
baseline consistent with the rest of the anchor (3-4 with
REST, ~2 without).

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 18, 2026
…t window (4 min before reset) under pure rate-zero tier — 2nd counter cycle this session (0020Z-0024Z)

Specific edge case of substrate-pool-saturation: forced-#6 counter
escalation lands when genuinely-substantive work (REST PR-creation
post-reset) is single-digit minutes away. Rule discipline says
escalate NOW; substantive work says wait 4 min for reset. This memo
ships as forced-#6 substrate (composes with #4110 substrate-pool-
saturation anchor; does NOT duplicate scope).

Anti-fabrication check: names specific empirical shape not covered
by existing rules; concrete tick-by-tick evidence (6 brief-acks
0020Z-0024Z); identifies rule-refinement question without recommending
change. Single-anchor; rule-change threshold 2-3 sessions.

Counter discipline: forced-#6 → concrete artifact ships (this memo) →
counter resets. Post-rate-reset (0028Z, 4 min) handles 848bdcf
Kestrel-preservation decompose-PR via REST PR-creation per rule #4107.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 18, 2026
… + REST fallback pagination per_page=100 --paginate (PR #4109 threads)
AceHack added a commit that referenced this pull request May 18, 2026
…k failure (#4109)

* docs(shadow): Maji antigravity check on Riven persistent REST fallback failure

* fix(maji-riven-paralysis-log): add direct PR #4107/#4108 GitHub links + REST fallback pagination per_page=100 --paginate (PR #4109 threads)
AceHack added a commit that referenced this pull request May 18, 2026
…archive landed; PRs #4104/4100/4097 noted for follow-up (PR #4124 verify-before-fix)
AceHack added a commit that referenced this pull request May 18, 2026
* docs(shadow): decompose PR 4115 shadow drift log

* fix(maji-2245-shadow-log): correct preservation claim — only PR #4107 archive landed; PRs #4104/4100/4097 noted for follow-up (PR #4124 verify-before-fix)
AceHack added a commit that referenced this pull request May 21, 2026
…t window (4 min before reset) under pure rate-zero tier — 2nd counter cycle this session (0020Z-0024Z)

Specific edge case of substrate-pool-saturation: forced-#6 counter
escalation lands when genuinely-substantive work (REST PR-creation
post-reset) is single-digit minutes away. Rule discipline says
escalate NOW; substantive work says wait 4 min for reset. This memo
ships as forced-#6 substrate (composes with #4110 substrate-pool-
saturation anchor; does NOT duplicate scope).

Anti-fabrication check: names specific empirical shape not covered
by existing rules; concrete tick-by-tick evidence (6 brief-acks
0020Z-0024Z); identifies rule-refinement question without recommending
change. Single-anchor; rule-change threshold 2-3 sessions.

Counter discipline: forced-#6 → concrete artifact ships (this memo) →
counter resets. Post-rate-reset (0028Z, 4 min) handles 848bdcf
Kestrel-preservation decompose-PR via REST PR-creation per rule #4107.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 21, 2026
…t window (4 min before reset) under pure rate-zero tier — 2nd counter cycle this session (0020Z-0024Z)

Specific edge case of substrate-pool-saturation: forced-#6 counter
escalation lands when genuinely-substantive work (REST PR-creation
post-reset) is single-digit minutes away. Rule discipline says
escalate NOW; substantive work says wait 4 min for reset. This memo
ships as forced-#6 substrate (composes with #4110 substrate-pool-
saturation anchor; does NOT duplicate scope).

Anti-fabrication check: names specific empirical shape not covered
by existing rules; concrete tick-by-tick evidence (6 brief-acks
0020Z-0024Z); identifies rule-refinement question without recommending
change. Single-anchor; rule-change threshold 2-3 sessions.

Counter discipline: forced-#6 → concrete artifact ships (this memo) →
counter resets. Post-rate-reset (0028Z, 4 min) handles 848bdcf
Kestrel-preservation decompose-PR via REST PR-creation per rule #4107.

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