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
8 changes: 4 additions & 4 deletions docs/BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -364,13 +364,13 @@ are closed (status: closed in frontmatter)._
- [ ] **[B-0089](backlog/P2/B-0089-veridicality-rainbow-table-canonicalization-research-and-graduation-aaron-ani-amara-2026-04-28.md)** Veridicality rainbow-table canonicalization — research + ship semantic + scoring layers; drop "bullshit detector" as a forward-going name
- [ ] **[B-0090](backlog/P2/B-0090-cadenced-lost-substrate-recovery-audit-aaron-2026-04-28.md)** Cadenced lost-substrate recovery audit (worktrees + orphan branches + closed-not-merged PRs + draft PRs aged > N days)
- [ ] **[B-0090.1](backlog/P2/B-0090.1-lost-substrate-3-bucket-classification-taxonomy.md)** Lost-substrate 3-bucket classification taxonomy (ALREADY-COVERED / NEEDS-RECOVERY / OBSOLETE)
- [ ] **[B-0090.1](backlog/P2/B-0090.1-ts-worktree-survey-atomic-riven-2026-05-10.md)** TS survey tool for locked worktrees (git worktree list + 3-bucket classify)
- [ ] **[B-0090.2](backlog/P2/B-0090.2-ts-orphan-branch-survey-atomic-riven-2026-05-10.md)** TS survey tool for orphan branches (unmerged + no-PR)
- [ ] **[B-0090.2](backlog/P2/B-0090.2-worktree-branch-delta-audit.md)** Worktree-branch delta audit (locked .claude/worktrees/ only, last-N-days)
- [ ] **[B-0090.3](backlog/P2/B-0090.3-closed-not-merged-pr-scan.md)** Closed-not-merged PRs + orphan branches + aged-draft-PRs scan (AceHack + LFG)
- [ ] **[B-0090.3](backlog/P2/B-0090.3-ts-closed-pr-survey-atomic-riven-2026-05-10.md)** TS survey for closed-not-merged PRs aged + content diff
- [ ] **[B-0090.4](backlog/P2/B-0090.4-cadence-and-hygiene-history-hook.md)** Cadence hook + hygiene-history append for lost-substrate audits (weekly/monthly)
- [ ] **[B-0090.4](backlog/P2/B-0090.4-ts-draft-pr-aged-survey-atomic-riven-2026-05-10.md)** TS survey for draft PRs aged > N days + content snapshot
- [ ] **[B-0090.5](backlog/P2/B-0090.5-ts-worktree-survey-atomic-riven-2026-05-10.md)** TS survey tool for locked worktrees (git worktree list + 3-bucket classify)
- [ ] **[B-0090.6](backlog/P2/B-0090.6-ts-orphan-branch-survey-atomic-riven-2026-05-10.md)** TS survey tool for orphan branches (unmerged + no-PR)
- [ ] **[B-0090.7](backlog/P2/B-0090.7-ts-closed-pr-survey-atomic-riven-2026-05-10.md)** TS survey for closed-not-merged PRs aged + content diff
- [ ] **[B-0090.8](backlog/P2/B-0090.8-ts-draft-pr-aged-survey-atomic-riven-2026-05-10.md)** TS survey for draft PRs aged > N days + content snapshot
- [x] **[B-0091](backlog/P2/B-0091-audit-and-rename-servicetitan-references-in-live-docs-aaron-2026-04-28.md)** Audit + rename ServiceTitan references in live (non-historical) repo surfaces — use generic "external UI demo" / "external CRM API demo" forward-going
- [ ] **[B-0092](backlog/P2/B-0092-public-company-contributor-compliance-doc-and-cadenced-trajectories-aaron-2026-04-28.md)** Public-company contributor compliance — doc + cadenced trajectories (audit-on-commit, weekly/monthly compliance review, on-PR audit, on-onboarding briefing, drift retrospective)
- [ ] **[B-0093](backlog/P2/B-0093-multi-ai-synthesis-enhancements-quarantine-lucky-guess-trajectory-owners-lattice-convergence-2026-04-28.md)** Multi-AI synthesis enhancements — mechanical quarantine + lucky-guess protocol + trajectory owners + lattice convergence + scanner self-destruct prevention (post-PR-#699 follow-ups)
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
id: B-0090.5
priority: P2
status: open
title: TS survey tool for locked worktrees (git worktree list + 3-bucket classify)
tier: factory-hygiene
effort: S
depends_on: []
composes_with:
- B-0090
- B-0090.1
last_updated: 2026-05-13
renumbered_from: B-0090.1
renumbered_reason: "ID collision with the second B-0090 decomposition (PR #2680, 2026-05-11) which the B-0090 parent body describes as canonical (3-bucket-taxonomy / worktree-delta / closed-not-merged-PR-scan / cadence-hook). This row is part of Riven's earlier 2026-05-10 decomposition (PR #2503, ts-* atomic series) which kept original scope but lost the ID claim. Renumbered .1→.5, .2→.6, .3→.7, .4→.8 to preserve both decompositions side-by-side. Substrate-cleanup tracked in B-0451."
tags: [riven-2026-05-10, ts-prefer, lost-substrate, worktree, renumbered]
---

# B-0090.5 — Atomic child: TS worktree survey (renumbered from B-0090.1)

Smallest slice of B-0090: implement `tools/hygiene/audit-worktree-survey.ts` that runs `git worktree list`, classifies each into ALREADY-COVERED / NEEDS-RECOVERY / OBSOLETE per the 3-bucket protocol, outputs JSON + markdown summary.

Dependency root: no deps, S effort, pure TS, no bash.

Focused check after: `bun run tools/hygiene/audit-worktree-survey.ts --dry` produces clean output, 0 lint errors.

This unblocks B-0090.6 (orphan, renumbered from B-0090.2) + cadence wiring.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
id: B-0090.6
priority: P2
status: open
title: TS survey tool for orphan branches (unmerged + no-PR)
tier: factory-hygiene
effort: S
depends_on:
- B-0090.5
composes_with:
- B-0090
last_updated: 2026-05-13
renumbered_from: B-0090.2
renumbered_reason: "ID collision with the second B-0090 decomposition (PR #2680). Part of Riven's earlier ts-* atomic series renumbered .1→.5/.2→.6/.3→.7/.4→.8 as a unit. Internal depends_on B-0090.1 also remapped to B-0090.5. Substrate-cleanup tracked in B-0451."
tags: [riven-2026-05-10, ts-prefer, lost-substrate, orphan-branch, renumbered]
---

# B-0090.6 — Atomic child: TS orphan branch survey (renumbered from B-0090.2)

Depends on B-0090.5 pattern (renumbered from B-0090.1). Implement `tools/hygiene/audit-orphan-branch-survey.ts` using `git for-each-ref` + gh api intersect, 3-bucket classify, JSON output.

Smallest, S, TS only.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
id: B-0090.7
priority: P2
status: open
title: TS survey for closed-not-merged PRs aged + content diff
tier: factory-hygiene
effort: S
depends_on:
- B-0090.5
composes_with:
- B-0090
last_updated: 2026-05-13
renumbered_from: B-0090.3
renumbered_reason: "ID collision with the second B-0090 decomposition (PR #2680). Part of Riven's earlier ts-* atomic series renumbered .1→.5/.2→.6/.3→.7/.4→.8 as a unit. Internal depends_on B-0090.1 also remapped to B-0090.5. Substrate-cleanup tracked in B-0451."
tags: [riven-2026-05-10, ts-prefer, lost-substrate, closed-pr, renumbered]
---

# B-0090.7 — Atomic child: TS closed-not-merged PR survey (renumbered from B-0090.3)

Depends on survey pattern (B-0090.5, renumbered from B-0090.1). `tools/hygiene/audit-closed-pr-survey.ts` : gh pr list --state closed, filter !merged, age >N, compute content loss vs main, 3-bucket.

S effort, TS.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
id: B-0090.8
priority: P2
status: open
title: TS survey for draft PRs aged > N days + content snapshot
tier: factory-hygiene
effort: S
depends_on:
- B-0090.5
composes_with:
- B-0090
last_updated: 2026-05-13
renumbered_from: B-0090.4
renumbered_reason: "ID collision with the second B-0090 decomposition (PR #2680). Part of Riven's earlier ts-* atomic series renumbered .1→.5/.2→.6/.3→.7/.4→.8 as a unit. Internal depends_on B-0090.1 also remapped to B-0090.5. The original body text referenced 'B-0090.5 (cadence)' which referred to a future cadence-wiring slice — note this no longer collides with the renumbered B-0090.5 (worktree survey) and that downstream cadence work would now be a new sub-row not yet filed. Substrate-cleanup tracked in B-0451."
tags: [riven-2026-05-10, ts-prefer, lost-substrate, draft-pr, renumbered]
---

# B-0090.8 — Atomic child: TS draft PR aged survey (renumbered from B-0090.4)

Depends on B-0090.5 (renumbered from B-0090.1). `tools/hygiene/audit-draft-pr-aged-survey.ts` : gh pr list --search "is:draft", age filter, snapshot title/body, 3-bucket classify.

S, TS only. The original body referenced "B-0090.5 (cadence)" as an unblock target — that referred to a future cadence-wiring slice (Riven's series only went .1-.4). With this renumber, the cadence slot would be a new row, not yet filed.
93 changes: 93 additions & 0 deletions docs/hygiene-history/ticks/2026/05/13/2348Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
---
tick: 2026-05-13T23:48Z
agent: otto-cli
session: cron-resumption
pr: 3058
---

# Tick 2348Z — B-0090.x batched cleanup (4 collisions, 1 PR)

## Refresh

- CronList: live (`9ac08520`, `* * * * *`, sentinel `<<autonomous-loop>>`).
- PR #3057 (B-0068.1 first cleanup) MERGED → `84b868c`.
- Open at tick start: only #3056 (audit tool, threads-clear, wait-ci).
- B-0451 cleanup progress: 1/12 done.

## Speculative work picked

The B-0090.x series collisions (4 of them) all came from one
shape — Riven's 2026-05-10 ts-* atomic decomposition vs the
2026-05-11 second decomposition (3-bucket-taxonomy / worktree-delta
/ closed-not-merged-PR-scan / cadence-hook). The parent body
matches the second set verbatim → external-references rule clear.

Batched all 4 renumbers into one PR (#3058) since they share the
same internal dependency chain — renumbering as a unit preserves
the `depends_on: [B-0090.1]` chain by remapping to `.5`. Doing
them one at a time would have required either temporary chain
breakage or 4 separate dependency-update commits.

## Landed concretely

| Renumber | Was | Now |
|---|---|---|
| TS worktree survey | B-0090.1 | B-0090.5 |
| TS orphan-branch survey | B-0090.2 | B-0090.6 |
| TS closed-PR survey | B-0090.3 | B-0090.7 |
| TS draft-PR aged survey | B-0090.4 | B-0090.8 |

Each row:

- `id:` updated to new sub-row number
- `last_updated: 2026-05-13` added
- `renumbered_from: B-0090.N` + reason recorded
- `tags:` add `renumbered`
- Body title updated to new ID
- Internal `depends_on: [B-0090.1]` remapped to `[B-0090.5]`
- Body text "Depends on B-0090.1" / "unblocks B-0090.2" updated to
new sub-row numbers with parenthetical "(renumbered from B-0090.N)"

Plus `docs/BACKLOG.md` regenerated.

## Substrate-level effect

Inline duplicate-ID count on the branch:

| Before #3058 | After #3058 merges |
|---|---|
| 11 dup groups | 7 dup groups |

B-0451 cleanup progress: 1/12 → 5/12.

Remaining 7 groups: B-0370/0371/0372/0373 (4 cross-priority bleed),
B-0409 (3-way), B-0410, B-0411.

## Procedure scaling observation

The B-0068.1 fix (PR #3057) took ~1 file change. The B-0090.x batch
(this PR) took 4 file changes + internal-ref remapping. The
B-0409 3-way collision will take ~3-4 file changes. The pattern
scales linearly with collision-group size; no single collision
exceeds ~10 minutes.

A future agent could batch all remaining 7 collisions into ONE
PR if desired (faster), or 7 separate PRs (more focused review).
Either path leads to dangling-dep-refs = 0 + duplicate-IDs = 0.

## CronList

- Live (`9ac08520`, `* * * * *`).

## Visibility signal

Session arc (now 13 PRs landed + 2 in flight):

| PR | What | Status |
|---|---|---|
| #3041..#3057 except #3052, #3056 | Substrate-hygiene rounds 1-6 | 13 MERGED |
| #3052 | Competing collision fix | CLOSED with provenance |
| #3056 | Audit tool + B-0451 (round-1 Copilot fixes resolved) | wait-ci, threads clear |
| #3058 | B-0090.x batch (4 collisions) | wait-ci, threads clear |

Real-dependency-wait on remaining CI. Loop continues.
89 changes: 89 additions & 0 deletions docs/hygiene-history/ticks/2026/05/14/0007Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
---
tick: 2026-05-14T00:07Z
agent: otto-cli
session: cron-resumption
pr: 3058
---

# Tick 0007Z — MD032 lint failure on 2348Z shard (recurring class)

## Refresh

- CronList: live (`9ac08520`, `* * * * *`, sentinel `<<autonomous-loop>>`).
- API rate-limit: 4698/5000 remaining (healthy; previous tick's
exhaust window has cleared).
- Main: still `84b868c` (no new merges since previous tick).
- Open PRs: #3056 (audit tool, wait-ci), #3058 (B-0090.x batch, hit
real lint failure this tick), #3059 (Otto-Desktop's PR archive).

## Named-dependency check

PR #3058 surfaced `nextAction: fix-failed-checks` — addressable
this tick (real-dependency-wait → action). PR #3056 remains wait-ci.

## CI-failure triage on PR #3058

9 failing checks at tick start. Most are GitHub-API-rate-limit
exhaust (same class as previous tick), BUT one is a real lint
failure I'm responsible for:

```
docs/hygiene-history/ticks/2026/05/13/2348Z.md:41 error MD032/blanks-around-lists
[Context: "- `id:` updated to new sub-row..."]
```

The 2348Z shard had `Each row:` immediately followed by `- id: ...`
with no blank line. Same failure mode I caught on the 2228Z shard
(PR #3044, MERGED), which suggests the discipline is in-head but
not mechanized.

## Landed concretely

| Artifact | Where | What |
|---|---|---|
| `docs/hygiene-history/ticks/2026/05/13/2348Z.md:41` | PR #3058 `1b4866e` | Insert blank line before list (one-line fix) |

## Discipline mechanization observation (for future ticks)

This is the second MD032-on-tick-shard catch this session. Per
`.claude/rules/encoding-rules-without-mechanizing.md`: encoding the
discipline without mechanizing produces a memory of failures, not
prevention. The mechanization options:

1. **Pre-commit hook** that runs markdownlint on staged `.md` files
(would catch this BEFORE push; needs local markdownlint install)
2. **Shard-writer assistant** that pre-validates blank-lines-before-
lists (could be a tiny TS helper)
3. **CI-as-discipline**: accept the cost of one CI cycle to catch +
one cycle to land the fix (current pattern)

Option 1 has the best ratio (cheap; catches the failure earlier in
the loop). Option 3 is what the substrate currently uses and works,
but burns ~10min CI for each occurrence.

Filing as observation in this shard; no separate B-NNNN row this
tick (scope-discipline — don't expand session beyond closing out
the in-flight work).

## Verify

- Inline awk-based MD032 check on both my open shards (2348Z +
2358Z) returns no risks
- PR #3058 should land once CI re-runs

## CronList

- Live (`9ac08520`, `* * * * *`).

## Visibility signal

Session arc (13 PRs merged + 2 in flight):

| PR | What | Status |
|---|---|---|
| 13 substrate-hygiene PRs through #3057 | Substrate-hygiene cascade rounds 1-6 | MERGED |
| #3052 (competing collision fix) | Closed-with-provenance | CLOSED |
| #3056 (audit tool + B-0451) | wait-ci, threads clear | OPEN |
| #3058 (B-0090.x batch) | MD032 fix pushed; CI re-running | OPEN |

Real-dependency-wait on remaining CI. Loop continues.
Loading