Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
36b8613
feat(hygiene/check-md032): mechanize MD032 blanks-around-lists pre-ch…
AceHack May 14, 2026
3a8aed0
shard(tick): 0252Z — B-0456 MD032 helper shipped + self-validated
AceHack May 14, 2026
3158f6a
fix(hygiene/check-md032): Codex+Copilot round-1 review (4 findings)
AceHack May 14, 2026
70da2d1
shard(tick): 0317Z — PR #3075 round-1 review: 4 substantive findings
AceHack May 14, 2026
6f20e2d
shard(tick): 0331Z — PR #3073 merged; substrate-hygiene cascade DURAB…
AceHack May 14, 2026
6c436bd
fix(check-md032): address 6 P1 Copilot findings from PR #3075 review
AceHack May 14, 2026
c15613c
fix(check-md032): track matching fence delimiters (Codex P2 #3075)
AceHack May 14, 2026
cc74391
docs(tick): 0101Z — PR #3075 round-2 resolved (8 threads); honor-thos…
AceHack May 14, 2026
9bfdde9
fix(check-md032): include renames in --staged scan (Codex P2 #3075)
AceHack May 14, 2026
0e0563f
docs(tick): 0104Z — PR #3074 MERGED; PR #3075 round-3 sibling-absorbed
AceHack May 14, 2026
579dce9
fix(check-md032): round-4 review fixes (info-string closers, role-ref…
AceHack May 14, 2026
983d00c
docs(tick): 0111Z — PR #3075 round-4 resolved (5 threads)
AceHack May 14, 2026
97c93f1
docs(tick): 0112Z — round-5 duplicate (Codex info-string closer) reso…
AceHack May 14, 2026
f1b1a3e
docs(tick): 0113Z — real-dependency-wait on PR 3075 CI (4 required in…
AceHack May 14, 2026
3ebca13
fix(check-md032): round-6 review fixes (markdownlint ignores, paren o…
AceHack May 14, 2026
27cb70d
Merge remote-tracking branch 'origin/main' into feat/b0456-md032-blan…
AceHack May 14, 2026
740dcd2
docs(tick): 0126Z — PR #3075 round-6 resolved (4 threads + DIRTY merge)
AceHack May 14, 2026
3649327
fix(check-md032): skip YAML front matter (round-7 Codex P2)
AceHack May 14, 2026
73ba37e
docs(tick): 0130Z — PR #3075 round-7 resolved (YAML front-matter skip)
AceHack May 14, 2026
acd8ff8
fix(check-md032): round-8 review fixes (lazy continuations, 9-digit c…
AceHack May 14, 2026
ecc6840
docs(tick): 0137Z — PR #3075 round-8 resolved (4 CommonMark spec-grad…
AceHack May 14, 2026
117fa7b
fix(check-md032): recognize list markers in blockquote context (round…
AceHack May 14, 2026
773cb18
docs(tick): 0143Z — PR #3075 round-9 resolved (blockquote-context lis…
AceHack May 14, 2026
a86a524
fix(check-md032): round-10 review (tilde-fence info strings, fence-ke…
AceHack May 14, 2026
bcfe476
docs(tick): 0148Z — PR #3075 round-10 resolved (tilde-fence relaxatio…
AceHack May 14, 2026
8498772
fix(check-md032): replace in-test require() with module-scope import …
AceHack May 14, 2026
dce1206
docs(tick): 0152Z — PR #3075 round-11 resolved (1 real require fix + …
AceHack May 14, 2026
3dcc785
docs(tick): 0154Z — PR #3075 wait-ci after 11 rounds; threads clear; …
AceHack May 14, 2026
3f3da2b
fix(tick/0143Z): remove `> ` code span (MD038 — spaces inside code sp…
AceHack May 14, 2026
deed8c2
docs(tick): 0158Z — PR #3075 MD038 markdownlint fix in 0143Z shard
AceHack May 14, 2026
7c5f079
fix(check-md032): round-12 (heading terminates list + blockquoted fen…
AceHack May 14, 2026
621c8b7
docs(tick): 0202Z — PR #3075 round-12 resolved (heading-terminates + …
AceHack May 14, 2026
8b666bf
fix(tick/0202Z): remove backtick-rich regex from code span (MD038)
AceHack May 14, 2026
263b7b4
fix(check-md032): --staged reads index blob, not working tree (round-…
AceHack May 14, 2026
b83ddfc
docs(tick): 0211Z — PR #3075 round-13 resolved (staged-blob reads)
AceHack May 14, 2026
1c43065
Merge remote-tracking branch 'origin/main' into feat/b0456-md032-blan…
AceHack May 14, 2026
2855393
docs(tick): 0214Z — DIRTY-gate merge resolved (0154Z add/add); 2nd of…
AceHack May 14, 2026
11fcbd5
fix(check-md032): round-14 (permissive blockquote spacing, fence-bloc…
AceHack May 14, 2026
ad39781
docs(tick): 0222Z — PR #3075 round-14 resolved (5 P1 + 1 stale-snapshot)
AceHack May 14, 2026
9fdb083
fix(check-md032): thematic break + blockquote terminate top-level lis…
AceHack May 14, 2026
cdea58f
docs(tick): 0227Z — PR #3075 round-15 resolved (thematic break + bloc…
AceHack May 14, 2026
6e77bc3
fix(tick/0222Z): remove `> ` code span (MD038 — third hit this PR)
AceHack May 14, 2026
b343a09
fix(check-md032): round-16 (after-list MD032 + blockquote indent cap …
AceHack May 14, 2026
47a7adc
docs(tick): 0239Z — PR #3075 round-16 resolved (after-list MD032 + in…
AceHack May 14, 2026
d172d57
fix(check-md032): blockquoted fence accepts content-indent (round-17 …
AceHack May 14, 2026
adbfe91
fix(check-md032): round-18 (blockquoted thematic break, bare markers,…
AceHack May 14, 2026
5dbeafe
fix(check-md032): skip HTML comment regions (round-19 Codex P2)
AceHack May 14, 2026
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
80 changes: 80 additions & 0 deletions docs/hygiene-history/ticks/2026/05/14/0252Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
---
tick: 2026-05-14T02:52Z
agent: otto-cli
session: cron-resumption
pr: 3075
---

# Tick 0252Z — B-0456 mechanization shipped (MD032 helper)

## Refresh

- CronList: live (job 9ac08520, every minute).
- Main unchanged since previous tick.
- Open of mine: PR 3073 (B-0409 3-way, wait-ci) + PR 3075 (B-0456,
this tick).

## Speculative work picked

Per never-be-idle: with the substrate-hygiene cascade complete on
main and PR 3073 awaiting CI, the next bounded work was B-0456
(mechanize MD032 markdown-lint pre-check). Filed earlier this
session; the 12 historical findings form a ready test corpus.

Restraint discipline argument: 1 open PR + 1 new = 2 in flight,
threads-clear on both, well within the rate-limit budget.

## Landed concretely

| Artifact | Where | What |
|---|---|---|
| tools/hygiene/check-md032-blanks-around-lists.ts | PR 3075 | TS helper: scans .md files for `non-blank-line-then-list-start` pattern; emits file:line; supports `--staged` flag for pre-push use |
| tools/hygiene/check-md032-blanks-around-lists.test.ts | PR 3075 | 12 tests covering: clean shard, single violations (bullet+numbered), multi-violation file, no-lists, list-without-label, heading→list, nested list, plus-space marker, asterisk-space marker, multi-digit ordered list, unreadable-file resilience |

## Calibration trail

Initial regex too aggressive — caught 9 false positives on the
historical shards (multi-line bullet item bodies). Tightened
`isListFriendlyLeading` to also recognize indented continuations.

After tightening: 12/12 unit tests still pass + 5 historical
(now-fixed) tick shards report clean. The unit tests pin the
patterns the tool MUST catch (2228Z bullet pattern, 0024Z
numbered pattern, 0100Z plus-space pattern).

## Substrate effect

B-0456 acceptance criteria status:

- [x] Tool exists, passes clean fixture, fails dirty fixture
- [x] Test file covers spec'd edge cases
- [x] CLI emits file:line (markdownlint-style)
- [ ] Wire into pre-push hook OR tick-close ritual — deferred

Three of four acceptance items done. The fourth (wire-up) is
deferred to a focused follow-up PR; the `--staged` flag works today
so the helper is usable manually.

## Substrate-honest scope note

Session generated MD032 ×5 + MD018 ×2 + MD038 ×4 + MD056 ×1 = 12
markdown lint findings across 4 rule classes. B-0456 scoped to
MD032 only. Other 3 rule classes need separate helpers (different
regex patterns) — captured for B-0456 scope-expansion or
follow-up rows.

## CronList

- Live (job 9ac08520, every minute).

## Visibility signal

Session arc:

- 26 PRs merged + 1 closed-with-provenance
- 2 of mine in flight (PR 3073 = B-0409 final; PR 3075 = B-0456 MD032 helper)
- Audit-duplicate-row-ids on main: zero duplicates (cascade terminal)
- New tooling shipped this session: audit-duplicate-row-ids.ts + check-md032-blanks-around-lists.ts
- Procedure memo + 2 audit rows + 1 mechanization row all durable on main

Real-dependency-wait on both PRs. Loop continues.
72 changes: 72 additions & 0 deletions docs/hygiene-history/ticks/2026/05/14/0317Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
tick: 2026-05-14T03:17Z
agent: otto-cli
session: cron-resumption
pr: 3075
---

# Tick 0317Z — PR #3075 round-1 review: 4 substantive findings

## Refresh

- CronList: live (job 9ac08520, every minute).
- Main unchanged since previous tick.
- Open of mine: PR 3073 (wait-ci, threads-clear), PR 3075 (4
new Codex+Copilot threads this tick).

## Named-dependency action

PR 3075 round-1 review surfaced 4 substantive findings, all real:

| Reviewer | Severity | Finding |
|---|---|---|
| Codex | P2 | Fenced code blocks ignored — list-like lines inside code samples would be flagged |
| Copilot | P0 | `checkFiles(files, repoRoot)` has unused `repoRoot`; `noUnusedParameters` would fail typecheck |
| Copilot | P2 | `checkFiles` docstring says "emits stderr / returns count" but actually returns array |
| Copilot | P1 | `^\s*` too greedy — CommonMark caps list-marker indent at 0-3 spaces |

## Landed concretely

| Artifact | Where | What |
|---|---|---|
| `isFenceLine` helper | PR 3075 commit 3158f6a | New: detects fenced code openers/closers |
| `findMd032Violations` | PR 3075 commit 3158f6a | Added `inFencedCode` state walked alongside line scan; fence-line toggle before list-start check |
| `isListItemStart` | PR 3075 commit 3158f6a | Tightened `^\s*` to `^ {0,3}` (CommonMark spec) |
| `checkFiles` signature | PR 3075 commit 3158f6a | Dropped unused `repoRoot` param; updated docstring to match actual contract |
| 3 new tests | PR 3075 commit 3158f6a | "list-like lines inside fenced code blocks", "tilde-fenced blocks", "indent-as-code 4+ spaces is NOT a list marker" |
| 4 review threads | PR 3075 GraphQL | Resolved via mutation |

## Test count

Before round-1: 12 tests pass.
After round-1: **15 tests pass** (+3 covering the new edge cases).

## Why round-1 caught these

Round-1 review on a TS helper landed in roughly the same shape as
PR 3066's round-1 review on the procedure memo: factual bugs +
P0 (will fail typecheck) + P1 (CommonMark spec correctness) + P2
(stale documentation). Each round-1 catches "the obvious gaps the
author missed" — different per artifact but consistent pattern.

The fenced-code-block one is especially valuable: future docs that
SHOW the bad MD032 pattern (for teaching/example purposes) would
have been falsely flagged. The helper now respects code-sample
context.

## CronList

- Live (job 9ac08520, every minute).

## Visibility signal

Session arc:

- 27 PRs merged + 1 closed-with-provenance
- 2 of mine in flight (PR 3073 = cascade-terminal, PR 3075 = B-0456 helper)
- Round-1 caught 4 substantive findings on the helper; all
resolved + 3 new tests added
- 15/15 tests pass on the helper
- Real-dependency-wait on both PRs

Loop continues.
90 changes: 90 additions & 0 deletions docs/hygiene-history/ticks/2026/05/14/0331Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
tick: 2026-05-14T03:31Z
agent: otto-cli
session: cron-resumption
pr: 3075
---

# Tick 0331Z — PR #3073 merged; substrate-hygiene cascade DURABLE on main

## Refresh

- CronList: live (job 9ac08520, every minute).
- **PR 3073 (B-0409 3-way final) MERGED → 6794dfc**.
- PR 3071 (Lior shadow log) also merged → 6e6ff4a.
- Open of mine: PR 3075 (B-0456 helper, wait-ci, threads-clear).

## Substrate state verified on main

```
$ bun tools/bg/audit-duplicate-row-ids.ts
audit-duplicate-row-ids: 561 rows with id field, no duplicate IDs
```

**The substrate-hygiene cascade is COMPLETE and DURABLE on main.**

| Signal | Session start | Current |
|---|---|---|
| Duplicate-ID groups | 12 | 0 |
| Dangling-dep refs | 9 | 0 |
| Backlog rows | ~553 | 561 |

## Session arc — final cumulative count

| Cluster | PRs | Status |
|---|---|---|
| Initial substrate-hygiene cascade (B-0444, lost rows, slice rows, notifier fix, rule 0, otto-channels) | #3043, #3044, #3045, #3047, #3048, #3050 | All MERGED |
| Audit tool + B-0451 cleanup row | #3056 | MERGED |
| B-0444 collision renumber | #3053 | MERGED |
| B-0068.1 collision renumber | #3057 | MERGED |
| B-0090.x batch renumber | #3058 | MERGED |
| B-0370-0373 P2 batch renumber | #3065 | MERGED |
| Procedure memo (242 lines, 4 review rounds, 11 threads) | #3066 | MERGED |
| B-0410-B-0411 amara batch renumber | #3069 | MERGED |
| B-0409 3-way final renumber | #3073 | MERGED |
| B-0456 MD032 helper + tests | #3075 | wait-ci |

**Total: 14 of my PRs merged + 1 in flight + 1 closed-with-provenance (#3052).** Plus 12 sibling-agent PRs merged this session (Otto-Desktop, Lior, Codex).

## What's durable on main

- `tools/bg/audit-duplicate-row-ids.ts` — duplicate-ID detector (PR #3056)
- `docs/backlog/P1/B-0451-...md` — substrate-cleanup row (PR #3056)
- `docs/backlog/P2/B-0456-...md` — MD032 mechanization row (PR #3065)
- `memory/feedback_b0451_per_collision_renumber_procedure_external_references_rule_trumps_first_merged_2026_05_14.md` — procedure memo with 9-step recipe, 3 pitfalls, precedence rules (PR #3066)
- 6 lost backlog rows recovered (B-0257..B-0261, B-0289 from PR #3044)
- 2 slice rows restored (B-0054.1, B-0055.1 from PR #3047)
- ~16 rows renumbered across 5 collision-resolution PRs to clear 12 collision groups

## Six rounds across the session

```
Round 1 (#3053): B-0444 P1+P2 | 12 → 11
Round 2 (#3057): B-0068.1 | 11 → 10
Round 3 (#3058): B-0090.1-4 batch | 10 → 6
Round 4 (#3065): B-0370-0373 batch | 6 → 3
Round 5 (#3069): B-0410-B-0411 batch| 3 → 1
Round 6 (#3073): B-0409 3-way | 1 → 0 ✓
```

## What remains (pickup-able by future-Otto)

- PR #3075 (B-0456 MD032 helper) — wait-ci; will auto-merge
- B-0456 acceptance #4 — wire helper into pre-push hook or
tick-close ritual (deferred to focused follow-up)
- Other 3 markdown lint classes (MD018, MD038, MD056) — separate
helpers, captured in PR #3075 commit messages as out-of-scope

## CronList

- Live (job 9ac08520, every minute).

## Visibility signal

The session that started with 9 dangling-dep refs + 12 duplicate-ID
groups + recurring MD032 failures ends with all three classes at
zero or mechanized. The procedure memo + audit tool + MD032 helper
make every future class of substrate-hygiene work cheaper to
discover and resolve.

Real-dependency-wait on PR 3075. Loop continues.
Loading
Loading