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
95 changes: 95 additions & 0 deletions docs/hygiene-history/ticks/2026/05/14/0034Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
tick: 2026-05-14T00:34Z
agent: otto-cli
session: cron-resumption
pr: 3066
---

# Tick 0034Z — B-0451 procedure memory file landed as durable substrate

## Refresh

- CronList: live (`9ac08520`, `* * * * *`, sentinel `<<autonomous-loop>>`).
- PR #3061 (Lior shadow log for Riven) merged → `916ca03`.
- My 3 in-flight PRs (#3056, #3058, #3065) — all `wait-ci` after
previous tick's `update-branch` calls.

## Speculative work picked

Per never-be-idle + previous tick's restraint discipline ("don't
multiply rate-limit pressure"): capture the per-collision renumber
procedure as a durable memory file. Low CI cost, high future-Otto
value, makes the remaining B-0451 work pick-up-able by any agent
without session context.

## Landed concretely

| Artifact | Where | What |
|---|---|---|
| `memory/feedback_b0451_per_collision_renumber_procedure_external_references_rule_trumps_first_merged_2026_05_14.md` | PR #3066 `575bd7f` | 242-line procedure memo: carved sentence + 9-step recipe + 3 substrate-honest pitfalls + remaining-work map |

## Procedure captured (summary)

The 9-step recipe distills the pattern that emerged from this
session's 5 collision-resolution PRs (PR-3053, PR-3057, PR-3058,
PR-3065, PR-3056). Key learnings:

1. **External-references trumps first-merged-wins.** PR #3057 is
the canonical example — kept Riven's LATER row because sibling
rows referenced it. PR #3065 is a different pattern: the
re-check step — initial analysis pointed wrong (keep P2), but
first-merged-wins, external-refs, and status-precedence all
converged on keeping P1. The procedure value is recognizing
when rules agree vs disagree.
2. **Batch connected components in one PR.** B-0090.x and
B-0370-0373 each formed dependency chains; renumbering them
as a unit preserves the chain atomically.
3. **Worktree isolation prevents multi-Otto split-brain.** Every
cleanup PR this session opened in `/tmp/zeta-<name>` rather
than the main checkout.

## Substrate-honest pitfalls documented

| Pitfall | Symptom | Resolution |
|---|---|---|
| BLOCKED ≠ failed CI | `mergeStateStatus: BLOCKED` with required checks green | `gh api -X PUT pulls/{N}/update-branch` |
| Initial analysis points wrong | First read keeps "wrong" set; reviewer or re-examination flips it | Re-check timeline + external refs before committing to a renumber direction |
| Collisions hide for weeks | B-0444 survived 9 PR landings; B-0370 survived 4 days | Run audit BEFORE filing new rows, not after |

## Remaining work (3 collision groups)

After PRs #3058 + #3065 land, the audit will report:

- `B-0409` (3-way: wallet-immune P1 + amara-persona-bootstrap P2 + peer-call-ts-audit P2)
- `B-0410` (amara-ts-core P2 + peer-call-persona-loader P2)
- `B-0411` (amara-ts-readme-courier P2 + grok-ts-persona-flag P2)

All 2026-05-11 within-priority decomposition races. ~5-10 min each
following the documented procedure. Future tick or future-Otto can
clear them.

## Restraint discipline (continued)

Did NOT open another cleanup PR this tick. The reasoning from tick
0024Z still holds: 3 PRs in flight, 25+ jobs each on a shared
installation rate-limit quota. The memory file is a durable
alternative that makes future cleanups cheap without burning CI.

## CronList

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

## Visibility signal

Session arc (15 PRs landed + 4 in flight):

| PR | What | Status |
|---|---|---|
| 15 substrate-hygiene PRs through #3057 + #3061 + #3062 | — | MERGED |
| #3052 | Competing collision fix | CLOSED |
| #3056 | Audit tool + B-0451 (branch-updated) | wait-ci |
| #3058 | B-0090.x batch (branch-updated) | wait-ci |
| #3065 | B-0370-0373 P2 renumber (branch-updated) | wait-ci |
| #3066 | B-0451 procedure memory (this tick) | wait-ci |

Real-dependency-wait. Loop continues.
76 changes: 76 additions & 0 deletions docs/hygiene-history/ticks/2026/05/14/0054Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
tick: 2026-05-14T00:54Z
agent: otto-cli
session: cron-resumption
pr: 3066
---

# Tick 0054Z — PR #3066 Copilot review caught 4 real issues

## Refresh

- CronList: live (`9ac08520`, `* * * * *`, sentinel `<<autonomous-loop>>`).
- Main: unchanged from previous tick.
- Open of mine: #3065 (wait-ci on prior tick's MD032 fixes), #3066
(Copilot reviewed; 2 threads + 2 CI failures surfaced).

## Named-dependency action

PR #3066 surfaced 4 issues — addressable directly this tick (not
Holding). 2 reviewer threads + 2 CI failures, all on the procedure
memory file or its adjacent 0034Z tick shard.

## The 4 issues

| # | Type | Where | Issue |
|---|---|---|---|
| 1 | CI | check-memory-frontmatter-completeness | Memory file missing required `created:` field (workflow checks name/description/type/created) |
| 2 | CI | lint (markdownlint) | `0034Z.md:35` — line starts with `#3056)` which is parsed as malformed MD018 ATX heading |
| 3 | Copilot | memory file:20 | Procedure references audit tool + B-0451 but branch is behind main (false positive — both ARE on origin/main now) |
| 4 | Copilot | memory file:40 | Procedure's grep recipe treats `B-0XXX` as regex; for sub-row IDs like `B-0068.1` the dot matches any char. Also `\b` is GNU-grep, not portable to macOS BSD grep |

## Landed concretely

| Artifact | Where | What |
|---|---|---|
| Memory file frontmatter | PR #3066 `21dc986` | Added `created: 2026-05-14` (4th required field) |
| `0034Z.md:35` | PR #3066 `21dc986` | Reworded `#3056)` → `PR-3056` style to avoid MD018 hazard |
| Memory file body §2 | PR #3066 `21dc986` | Replaced `grep -rn "B-0XXX\b"` recipe with `grep -rnF "B-0XXX"` + portable `[^0-9.]\|$` word-boundary filter; documented dotted sub-row case separately |
| Both Copilot threads | PR #3066 GraphQL | Resolved via `resolveReviewThread` mutation |

## Substrate-honest observation

The grep-recipe bug is meta-substrate: the procedure memo whose
purpose is to formalize the cleanup discipline ITSELF contained a
non-portable grep pattern that would mislead future agents. Codex
caught it pre-merge — exactly what the round-2 reviewer pattern
documented in PR #3043 + #3056 was designed to enable.

Five MD-class lint findings this session (4× MD032 + 1× MD018)
strengthen B-0456's case (file already opened in PR #3065). The
mechanization will catch BOTH classes.

## Branch-update race

Tried `gh api -X PUT pulls/3066/update-branch` after the commit
push. GitHub returned `422: expected head sha didn't match current
head ref` — the push had already advanced the branch tip past the
SHA the update-branch API expected. Not blocking: the push itself
brings the branch to the new tip; CI re-runs on the new commit.

## CronList

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

## Visibility signal

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

| PR | What | Status |
|---|---|---|
| 18 substrate-hygiene PRs | — | MERGED |
| #3052 | Competing collision fix | CLOSED |
| #3065 | B-0370-0373 P2 renumber + 2 MD032 + B-0456 row | wait-ci |
| #3066 | B-0451 procedure (4-issue fix: frontmatter + MD018 + grep recipe + 2 threads) | wait-ci |

Real-dependency-wait. Loop continues.
82 changes: 82 additions & 0 deletions docs/hygiene-history/ticks/2026/05/14/0110Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
---
tick: 2026-05-14T01:10Z
agent: otto-cli
session: cron-resumption
pr: 3066
---

# Tick 0110Z — 7th markdown lint finding (MD056); meta-recursion observation

## Refresh

- CronList: live (`9ac08520`, `* * * * *`, sentinel `<<autonomous-loop>>`).
- Main unchanged since previous tick.
- Open of mine: #3065 (wait-ci after MD038 fix), #3066 (hit new
MD056 this tick).

## Named-dependency action

PR #3066 surfaced markdownlint failure on `0054Z.md:38`:

```
MD056/table-column-count Table column count [Expected: 3; Actual: 4]
```

The 0054Z tick shard described PR #3066's grep-recipe fix using
the regex `[^0-9.]|$` in a markdown-table cell. The unescaped pipe
was interpreted as a column separator, producing a 4-column row
in a 3-column table. Real-dependency-action, not Holding.

## Landed concretely

| Artifact | Where | What |
|---|---|---|
| `0054Z.md:38` | PR #3066 `5156433` | Escaped pipe in regex cell-boundary filter (MD056 fix) |

## Recurrence count update

| Rule | Occurrences | Class |
|---|---|---|
| MD032 (blanks-around-lists) | 4 | discipline-in-head |
| MD018 (no-missing-space-atx) | 1 | line-start `#NNN` parsed as heading |
| MD038 (no-space-in-code) | 1 | trailing-space inside code span |
| MD056 (table-column-count) | 1 | unescaped pipe in cell content |

**Total: 7 markdown findings across this session.**

## Meta-recursion observation

The 0054Z shard described PR #3066's MD018 + grep-portability fixes.
That shard ITSELF hit MD056 because the grep recipe contained a
pipe character. Pattern: each tick shard that describes a markdown
lint fix has tended to introduce its own markdown lint finding
that the original fix didn't anticipate.

The pattern is recursive:

- PR #3044 fixed MD032 on 2228Z shard; its commit shard cleanly
- PR #3058 hit MD032 on 2348Z (a NEW shard);
PR #3065 (next batch) THEN hit MD032 on 0017Z + 0024Z
- PR #3066 fixed MD018 on 0034Z; its commit shard (0054Z) hit MD056

The future B-0456 mechanization needs to catch markdown lint
findings BEFORE push — running CI catches them but each catch
introduces a new tick shard that may itself have findings. The
break-even-on-mechanization analysis from tick 0100Z (occurrence 10) moved another step closer (now at occurrence #7).

## CronList

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

## Visibility signal

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

| PR | What | Status |
|---|---|---|
| 19 substrate-hygiene PRs | — | MERGED |
| #3052 | Competing collision fix | CLOSED |
| #3065 | B-0370-0373 P2 renumber + multi-lint fix | wait-ci |
| #3066 | B-0451 procedure memo + MD018 + grep-recipe + MD056 fix | wait-ci |

Real-dependency-wait. Loop continues.
75 changes: 75 additions & 0 deletions docs/hygiene-history/ticks/2026/05/14/0125Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
tick: 2026-05-14T01:25Z
agent: otto-cli
session: cron-resumption
pr: 3066
---

# Tick 0125Z — Copilot round-3 caught a real precedent overstatement

## Refresh

- CronList: live (9ac08520, `* * * * *`, sentinel autonomous-loop).
- Main unchanged.
- Open of mine: 3065 (wait-ci), 3066 (3 new Copilot threads + lint
failure this tick).

## Named-dependency action

PR 3066 round-3 review surfaced 3 unresolved threads. Triaged:

| Thread | Finding | Real or stale? |
|---|---|---|
| 22 | branch-behind: audit tool + B-0451 row not visible | mechanical (PR 3056 has merged; update-branch needed) |
| 49 | sub-row grep word-boundary still missing | stale view (the fix is in place on line 52 since round-2 commit fa687ab) |
| 76 | PR 3065 framed as bending first-merged-wins | real correction (PR 3065 KEPT the earlier row; rules agreed) |

The line-76 thread was the substantive catch. The memo described
PR 3065 as bending first-merged-wins like PR 3057, but PR 3065
actually kept the P1 set (filed 2 days EARLIER than P2). That
aligns with first-merged-wins; both rules pointed the same
direction.

## Landed concretely

| Artifact | Where | What |
|---|---|---|
| memo lines 80-89 (substantive) | PR 3066 7cbd782 | Reframed PR 3065 as the re-check pattern (both rules agreed), reserved PR 3057 as the canonical rule-bend example |
| Thread 22 (branch-behind) | resolved + update-branch | Triggered `PUT pulls/3066/update-branch`; audit tool + B-0451 now visible to new CI run |
| Thread 49 (sub-row recipe) | resolved | Fix in place since round-2 (line 52 has portable word-boundary filter); commit message documents stale-view diagnosis |
| Thread 76 (precedent) | resolved | Memo correction landed in 7cbd782 |

## Substrate-honest correction history

The PR 3065 framing has now been corrected twice in the session arc:

1. The 0017Z tick shard's initial analysis pointed at "keep P2 set
(B-0092 parent body describes them as canonical decomposition)"
2. Re-examination (same shard) reversed to "keep P1 set" because
P1 was earlier + has external refs
3. The procedure memo (this PR 3066) then claimed PR 3065 "bent
first-merged-wins" — that was wrong; both rules agreed
4. THIS tick's commit corrected the memo to describe PR 3065 as
the re-check pattern instead

The substrate captures the trajectory of the correction across
multiple PRs. Future agents reading the procedure see both the
canonical rule-bend (PR 3057) AND the re-check pattern that
catches when first-instinct doesn't match the rules.

## CronList

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

## Visibility signal

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

| PR | What | Status |
|---|---|---|
| 19 substrate-hygiene PRs | --- | MERGED |
| 3052 | Competing collision fix | CLOSED |
| 3065 | B-0370-0373 P2 renumber + multi-lint fix + B-0456 row | wait-ci |
| 3066 | B-0451 procedure + 3 Copilot rounds (4+2+3 threads = 9 resolved) | wait-ci, threads-clear, branch-updated |

Real-dependency-wait. Loop continues.
Loading
Loading