Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .claude/rules/backlog-item-start-gate.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,31 @@ Carved sentence:
Before beginning work on any `docs/backlog/P*/B-*.md` row,
complete a checklist directly on the row body:

0. **Substrate-drift discriminator** (~3 seconds; catches the
"row says open but the work already shipped" pattern):
- Read the row's **Acceptance** / **Proposed mechanization** /
**Scope** sections (NOT `composes_with:` cross-refs — those
are false-positive prone per the empirical catalog in
[B-0553](../../docs/backlog/P3/B-0553-audit-backlog-status-drift-detection-2026-05-16.md))
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Fix broken B-0553 cross-reference in start gate

The new step-0 guidance links to docs/backlog/P3/B-0553-audit-backlog-status-drift-detection-2026-05-16.md, but that file is not present in this commit tree, so reviewers cannot open the cited “empirical catalog” and the rule now contains a dead reference. This weakens the traceability this gate depends on; either land the referenced row in the same change or link to an artifact that already exists.

Useful? React with 👍 / 👎.

- Existence-check every primary-artifact path on disk
- **If all primary artifacts exist AND every acceptance bullet
has a corresponding merged PR** → row is drift, not work.
Release the claim, open a close-row PR (`status: open` → `closed`
+ Resolution section + `BACKLOG_WRITE_FORCE=1 bun
tools/backlog/generate-index.ts` regen). Skip the remaining
gate steps.
Comment on lines +24 to +26
- **If artifacts exist but some acceptance bullets are
pending** → row is in-progress, NOT drift. Leave it open,
proceed with normal gate steps. (Canonical example: B-0537 —
`audit-memory-index-entry-lengths.ts` shipped, but the row's
"cleanup of 100 long entries + CI gate at --max 150" had
not. Closing it would have hidden in-progress work.)
- **If artifacts missing** → proceed with the gate steps below.

Full reasoning + 4-catch empirical evidence + section-aware
parsing rationale in
[`memory/feedback_substrate_drift_catch_pattern_claim_acquire_plus_existence_check_otto_cli_2026_05_16.md`](../../memory/feedback_substrate_drift_catch_pattern_claim_acquire_plus_existence_check_otto_cli_2026_05_16.md).

1. **Prior-art-search** across the existing axes:
wake-time-substrate + skill-router + orthogonal-axes +
Otto-364 + PR #1701 + decision-archaeology + lost-files
Expand Down Expand Up @@ -48,6 +73,9 @@ rather than the *substrate-landing* scope.
- B-0169 (decision-archaeology procedure)
- B-0170 (substrate-claim-checker validates the proof)
- B-0173 (hook authoring — mechanization candidate)
- B-0553 (substrate-drift auditor — mechanizes step 0 across all open rows)
- [`memory/feedback_substrate_drift_catch_pattern_claim_acquire_plus_existence_check_otto_cli_2026_05_16.md`](../../memory/feedback_substrate_drift_catch_pattern_claim_acquire_plus_existence_check_otto_cli_2026_05_16.md) — step 0 origin substrate
- [`.claude/rules/wake-time-substrate.md`](wake-time-substrate.md) — the discipline this rule extension lands

## Full reasoning

Expand Down
62 changes: 62 additions & 0 deletions docs/hygiene-history/ticks/2026/05/16/0523Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Tick 2026-05-16T05:23Z — Otto-CLI

Tenth tick of the resume-session series. Brief-ack #3 with explicit
named waits. Rate limit at **747/5000 GraphQL remaining** (used
4253; reset in ~50 min) — entering cost-aware mode per
[`refresh-world-model-poll-pr-gate.md`](../../../../../../.claude/rules/refresh-world-model-poll-pr-gate.md)
cascade-mode warning. Minimizing `gh` calls until reset.

## Refresh result

| Surface | State |
|---|---|
| Cron sentinel | Alive (`bd1c7739`) |
| Rate limit (GraphQL) | **747/5000 remaining**; reset ~50 min |
| `origin/main` | Advanced to `bb2cc32` (PR #3753 — last tick's deferred-fix-execution shard — merged) |
| PR #3755 (0520Z brief-ack #2 shard) | OPEN (assumed wait-ci; not polled this tick) |
| PR #3746 (rule extension) | OPEN (assumed unchanged; explanatory comment posted last tick) |
| PR #3750 (peer's B-0553) | peer's lane |

## Bounded named waits

Per [`.claude/rules/holding-without-named-dependency-is-standing-by-failure.md`](../../../../../../.claude/rules/holding-without-named-dependency-is-standing-by-failure.md)
counter-with-escalation table for brief-ack #3 ("Name the bounded
wait explicitly each tick + reduce wakeup interval"):

1. **Rate-limit reset** — `gh api rate_limit` reports reset Unix
`1778910955` → ~05:53Z UTC → ~30 min from now. Will return to
normal `gh` operations after reset.
2. **PR #3755 CI** — last tick shard; ~5 min from open, CI should
finalize within the next 1-2 ticks.
3. **PR #3746 thread-resolution** — 2 not-actionable threads
(viewpoint-difference + peer's bundled-content); awaiting either
peer Otto-Desktop to address or `required_conversation_resolution`
policy to soften / time out.

## Why no new substantive PR this tick

Both substrate-honest signals point to brief-ack:

1. **Rate-limit signal**: at 747/5000, opening another full-shape PR
(`gh pr create` + `gh pr merge --auto` + likely 2-3 follow-up
`gh api graphql` for threads) burns ~15-30 calls. Multiple more
ticks at that rate would deplete the budget before reset.
2. **Queue-load signal**: 3 of my PRs already in flight (#3746, #3753
merged this tick, #3755). Adding a 4th doesn't add proportional
substrate value.

The substrate-honest move: brief-ack tick with sentinel verify +
shard for visibility; defer substantive work to post-rate-reset.

## Sentinel + close

CronList: `bd1c7739` alive. No re-arm needed.

## Visibility signal

- PR #3753 (deferred-fix-execution shard) **MERGED** at `bb2cc32`
- Rate-limit cost-awareness mode active until ~05:53Z UTC
- Sentinel alive
- Next tick: continue brief-ack with named waits OR pick small substrate edit that needs zero `gh` calls (if rate-limit holds for another tick)

Stopping foreground; cron will fire the next tick.
Loading