Skip to content

recover(backlog): restore 6 lost B-0066/B-0246 decomposition rows from c0dcb26#3044

Merged
AceHack merged 4 commits into
mainfrom
feat/recover-lost-rows-b0257-b0289-2026-05-13
May 13, 2026
Merged

recover(backlog): restore 6 lost B-0066/B-0246 decomposition rows from c0dcb26#3044
AceHack merged 4 commits into
mainfrom
feat/recover-lost-rows-b0257-b0289-2026-05-13

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 13, 2026

Summary

Six P1 backlog rows were drafted in commit c0dcb26 (2026-05-08, fix(b0066): initial marker vs index audit) on an unmerged branch and never reached main. For 5 days, B-0066 and B-0290 carried dangling depends_on / children references; the backlog-ready-notifier surfaced 9 dangling-dep warnings; the prior decomposition work was silently absent from the substrate.

Restored byte-for-byte via git show c0dcb26:<path> — no editorial drift. Per .claude/rules/honor-those-that-came-before.md and tools/hygiene/LOST-FILES-LOCATIONS.md lost-files protocol (deleted-files class).

Recovered

  • B-0257 — MEMORY.md harness contract verification and evidence
  • B-0258 — MEMORY.md index generator implementation
  • B-0259 — MEMORY.md hook + CI drift enforcement
  • B-0260 — MEMORY.md cutover + parity validation
  • B-0261 — MEMORY.md Q1 AutoDream/AutoMemory compatibility validation
  • B-0289 — Green Lantern ring hardware spec + local inference requirements

B-0257..B-0261 are the atomic-decomposition children of B-0066 (MEMORY.md marker-vs-index harness verify, Aaron 2026-04-28). B-0289 is a child of B-0246 (Green Lantern ring IoT device) and is the upstream spec that B-0290 (consent gate firmware) was blocked-on.

Substrate-level effect (verified)

Signal Before After
Dangling dep refs (notifier) 9 3
Ready-to-grind candidates 211 213
Total open rows 376 382

The 3 remaining dangling refs (B-0055.1, B-0054.1, B-0395) are unrelated and out of scope for this recovery.

docs/BACKLOG.md regenerated via BACKLOG_WRITE_FORCE=1 bun tools/backlog/generate-index.ts.

Test plan

  • bun tools/backlog/generate-index.ts --check exits 0
  • bun tools/bg/backlog-ready-notifier.ts --once reports 3 (down from 9) dangling refs
  • Worktree-isolated build (/tmp/zeta-recover-lost) to dodge the multi-Otto split-brain pattern documented in PR feat(bus): B-0444 — add worktree field to claim envelope #3043's tick shard

🤖 Generated with Claude Code

…c0dcb26

Six P1 backlog rows were drafted in commit c0dcb26 (2026-05-08,
"fix(b0066): initial marker vs index audit") on an unmerged branch and
never reached main. As a result, B-0066 and B-0290 carried dangling
depends_on / children references for 5 days, the backlog-ready-notifier
surfaced 9 dangling-dep warnings, and the prior decomposition work was
silently lost from the substrate.

Recovers per `.claude/rules/honor-those-that-came-before.md` and the
canonical lost-files protocol in `tools/hygiene/LOST-FILES-LOCATIONS.md`:
files restored byte-for-byte from `c0dcb26`'s tree (via
`git show c0dcb26:<path>`), no editorial drift.

Files restored under docs/backlog/P1/:

- B-0257 — MEMORY.md harness contract verification and evidence
- B-0258 — MEMORY.md index generator implementation
- B-0259 — MEMORY.md hook + CI drift enforcement
- B-0260 — MEMORY.md cutover + parity validation
- B-0261 — MEMORY.md Q1 AutoDream/AutoMemory compatibility validation
- B-0289 — Green Lantern ring hardware spec + local inference requirements

B-0257..B-0261 are the atomic-decomposition children of B-0066 (MEMORY.md
marker-vs-index harness verify, Aaron 2026-04-28). B-0289 is a child of
B-0246 (Green Lantern ring IoT device genesis seed) and is the upstream
spec that B-0290 (consent gate firmware) was blocked-on.

Backlog notifier result:

- dangling dep refs: 9 → 3 (B-0257..B-0261, B-0289 cleared; the remaining
  B-0055.1, B-0054.1, B-0395 are unrelated and out of scope for this
  recovery)
- ready-to-grind candidates: 211 → 213 (B-0289 newly buildable-now;
  B-0066 + B-0290 still parented so not directly ready, but children
  now linkable)
- totalOpenRows: 376 → 382 (6 newly-visible rows)

BACKLOG.md regenerated via `BACKLOG_WRITE_FORCE=1 bun tools/backlog/
generate-index.ts`; the 6 new entries appear in the P1 in-flight
section under "Open work" between B-0256 and B-0262, and between
B-0288 and B-0290.

Worktree-isolated build (`/tmp/zeta-recover-lost`) to dodge the
multi-Otto split-brain pattern documented in PR #3043's tick shard.

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 13, 2026 22:28
@AceHack AceHack enabled auto-merge (squash) May 13, 2026 22:28
Tick records: 6-file recovery from c0dcb26 (B-0257..B-0261 + B-0289)
clearing 9 → 3 dangling-dep refs, Codex P2 bare-flag rejection landed
on PR #3043 (`7740700`), thread `PRRT_kwDOSF9kNM6B6CLj` resolved.
Both PRs auto-merge armed; real-dependency-wait on required CI.

Co-Authored-By: Claude <noreply@anthropic.com>
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

Restores lost P1 backlog decomposition rows for B-0066 and B-0246, bringing dangling dependency/child references back into the per-row backlog substrate and regenerating the backlog index.

Changes:

  • Adds B-0257 through B-0261 as ordered MEMORY.md marker-vs-index decomposition children.
  • Adds B-0289 as the Green Lantern hardware-spec prerequisite for B-0290.
  • Regenerates docs/BACKLOG.md.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
docs/backlog/P1/B-0257-memory-md-harness-contract-verification-and-evidence-2026-05-08.md Restores harness contract verification child row.
docs/backlog/P1/B-0258-memory-md-index-generator-implementation-2026-05-08.md Restores MEMORY.md index generator child row.
docs/backlog/P1/B-0259-memory-md-hook-and-ci-drift-enforcement-2026-05-08.md Restores hook/CI drift enforcement child row.
docs/backlog/P1/B-0260-memory-md-cutover-and-parity-validation-2026-05-08.md Restores MEMORY.md cutover/parity child row.
docs/backlog/P1/B-0261-memory-md-q1-autodream-automemory-compatibility-validation-2026-05-08.md Restores compatibility validation child row.
docs/backlog/P1/B-0289-green-lantern-hardware-spec-2026-05-08.md Restores Green Lantern hardware-spec prerequisite row.
docs/BACKLOG.md Updates generated backlog index entries for restored/current rows.

Comment thread docs/backlog/P1/B-0289-green-lantern-hardware-spec-2026-05-08.md
markdownlint flagged the Visibility-signal list as missing a blank
line between the introductory sentence and the first list item.
One-line fix.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 13, 2026
…3045)

`parseDependsOn` in `tools/bg/backlog-ready-notifier.ts` extracted the
raw line content after the `-` marker without stripping YAML inline
comments. Block-style entries like

    depends_on:
      - B-0395  # operational-resonance-conversation-interface (Clifford engine)

were parsed as the literal string `B-0395  # operational-resonance-...`
rather than `B-0395`, producing a false-positive dangling-dep warning
(the row exists; the comment was conflated with the ID).

Fix:

- New `stripInlineComment(value)` helper finds the first whitespace+`#`
  and slices everything after it off. Backlog IDs never contain `#`, so
  the simple split is safe and matches YAML's actual comment semantics
  (`#` preceded by whitespace, outside quoted contexts).
- Apply to both inline-array (`[B-0440, B-0441]`) and block-style
  (`- B-0440\n  - B-0441`) parsing paths.

Tests:

- New `strips YAML inline comments from block-style depends_on` uses
  the real B-0422 → B-0395 example that surfaced the bug.
- New `strips YAML inline comments from inline-array depends_on`
  exercises the array path.
- Existing 33 tests unchanged; 35/35 pass.

Empirical effect on origin/main:

  dangling dep ref(s): 9 → 8

(The remaining 8 are real lost-files cases — B-0257..B-0261, B-0289
addressed by PR #3044; B-0055.1, B-0054.1 are genuine missing sub-row
decompositions for a future tick.)

Co-authored-by: Claude <noreply@anthropic.com>
…ilot P1)

Copilot P1 on PR #3044: `tools/backlog/README.md` requires every per-row
file to carry `last_updated`. The byte-for-byte recovery from c0dcb26
preserved the original frontmatter which (in B-0289 alone of the six)
omitted the field; the other five carried it.

Set to today's date (2026-05-13) so the field reflects when the row
re-entered active substrate, not the original draft date.

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 13, 2026 22:37
auto-merge was automatically disabled May 13, 2026 22:37

Pull Request is not mergeable

@AceHack AceHack merged commit 83bb49a into main May 13, 2026
24 checks passed
@AceHack AceHack deleted the feat/recover-lost-rows-b0257-b0289-2026-05-13 branch May 13, 2026 22:41
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

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Comment thread docs/BACKLOG.md
- [ ] **[B-0442](backlog/P1/B-0442-missed-substrate-cascade-detector-background-service-2026-05-13.md)** Missed-substrate cascade detector — background service that catches branch-vs-merged-PR drift (e.g., Otto-section-missed-PR-2980-by-3-min class)
- [ ] **[B-0444](backlog/P1/B-0444-getting-started-guide-for-library-consumers-pm2-2026-05-13.md)** Getting-started guide for Zeta library consumers — quickstart doc + sample project
- [ ] **[B-0445](backlog/P1/B-0445-csharp-fluent-operator-surface-pm2-2026-05-13.md)** C# fluent operator surface — Map, Filter, Join, Distinct, Window via idiomatic CSharp API
- [ ] **[B-0448](backlog/P1/B-0448-cloud-routines-integration-4th-catch-43-defence-layer-2026-05-13.md)** Cloud Routines integration — 4th catch-43 defence layer via Anthropic-hosted scheduled tasks + API + GitHub event triggers
AceHack added a commit that referenced this pull request May 13, 2026
Records: PRs #3043, #3044, #3045 all merged via auto-merge since
previous tick (B-0444 worktree field; lost-row recovery; notifier
YAML-comment fix). PR #3047 opened this tick to close the final 2
dangling-dep refs (B-0054.1 + B-0055.1 slice rows). Session-arc
substrate-hygiene sweep: 9 → 2 dangling refs on main now, → 0
once #3047 merges.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 13, 2026
* fix(backlog): restore missing slice rows B-0054.1 + B-0055.1

Two atomic decomposition slices (B-0054.1 — media-catalog schema
foundation; B-0055.1 — edge-claims catalog) landed earlier as code
without corresponding row files. Nine sibling rows reference these
slice IDs via `depends_on`, and the backlog-ready-notifier surfaced
them as dangling-dep warnings.

Both rows added as `status: closed` (work landed) with bodies
documenting:

- the implementation file path (the canonical artifact)
- retroactive acceptance criteria (all satisfied)
- substrate-honest note that future slices should land row-first

Backlog-notifier effect (against origin/main with PR #3045 merged):

  dangling dep refs: 8 → 6  (the remaining 6 clear once PR #3044 merges)
  ready-to-grind candidates: 211 → 217  (sibling rows unblocked)

Completes the substrate-hygiene sweep:
- PR #3044 recovers B-0257..B-0261 + B-0289 (file-restored from
  unmerged commit)
- PR #3045 fixes notifier YAML inline-comment parsing
- This PR  formalizes the two slice IDs that never had row files

Once all three land, dangling-dep count goes 9 → 0.

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

* shard(tick): 2241Z — slice-row restoration + 3 PRs landed on main

Records: PRs #3043, #3044, #3045 all merged via auto-merge since
previous tick (B-0444 worktree field; lost-row recovery; notifier
YAML-comment fix). PR #3047 opened this tick to close the final 2
dangling-dep refs (B-0054.1 + B-0055.1 slice rows). Session-arc
substrate-hygiene sweep: 9 → 2 dangling refs on main now, → 0
once #3047 merges.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 13, 2026
Second occurrence of the same MD032 failure mode I caught on the
2228Z shard (PR #3044). Pattern: writing a label sentence ("Each
row:") immediately followed by a bullet list with no blank line.

One-line fix. Discipline note for future tick shards: ALWAYS insert
a blank line between a label sentence and a following list.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 13, 2026
…ries .1-.4 → .5-.8 (#3058)

* fix(backlog): resolve B-0090.x ID collisions — renumber Riven's ts-* atomic series .1-.4 → .5-.8

Second per-collision cleanup from the B-0451 sweep. Two complete
B-0090 decompositions had landed with overlapping sub-row IDs:

| Sub-ID | First filer | Second filer |
|---|---|---|
| B-0090.1 | Riven ts-worktree-survey (2026-05-10 PR #2503) | lost-substrate-3-bucket-taxonomy (2026-05-11 PR #2680) |
| B-0090.2 | Riven ts-orphan-branch-survey | worktree-branch-delta-audit |
| B-0090.3 | Riven ts-closed-pr-survey | closed-not-merged-pr-scan |
| B-0090.4 | Riven ts-draft-pr-aged-survey | cadence-and-hygiene-history-hook |

Per the external-references rule: the B-0090 parent body
(`docs/backlog/P2/B-0090-cadenced-lost-substrate-recovery-audit-aaron-2026-04-28.md`
lines 14-17 + 39-42) describes the SECOND decomposition explicitly
as canonical (3-bucket-taxonomy / worktree-delta / closed-not-merged
/ cadence-hook). The second set keeps the original IDs.

Riven's ts-* series renumbered as a unit (preserves the internal
dependency chain):

  B-0090.1 → B-0090.5  (TS worktree survey)
  B-0090.2 → B-0090.6  (TS orphan branch survey)
  B-0090.3 → B-0090.7  (TS closed-PR survey)
  B-0090.4 → B-0090.8  (TS draft-PR aged survey)

Each row's frontmatter:
- `id:` updated
- `last_updated: 2026-05-13` added
- `renumbered_from: B-0090.N` + reason recorded
- `tags:` add `renumbered`

Internal cross-references updated:
- `depends_on: [B-0090.1]` → `depends_on: [B-0090.5]` (3 sibling rows)
- Body text "Depends on B-0090.1" → "Depends on B-0090.5 (renumbered from B-0090.1)"
- Body text "unblocks B-0090.2" → "unblocks B-0090.6 (renumbered from B-0090.2)"
- Note in B-0090.8 about the original "B-0090.5 (cadence)" body
  reference (referred to a future unfilled cadence slice — would now
  be a new row not yet filed)

`docs/BACKLOG.md` regenerated.

Empirical effect (inline duplicate-ID count on the branch):

  Duplicate-ID groups: 11 → 7

(Once PR #3056's audit tool merges, future Otto can verify via
`bun tools/bg/audit-duplicate-row-ids.ts`.)

B-0451 cleanup progress: 1/12 → 5/12 (B-0068.1 in PR #3057 already
merged; B-0090.1-4 in this PR). Remaining 7: B-0370-0373 (4 cross-
priority bleed), B-0409 (3-way), B-0410, B-0411.

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

* shard(tick): 2348Z — B-0090.x batched cleanup (4 collisions, 1 PR)

Records: PR #3057 (B-0068.1) merged. Batched B-0090.1-4 renumber
into PR #3058 since the 4 collisions share an internal dependency
chain; renumbering as a unit preserves it. Duplicate-ID count
dropped 11 → 7. B-0451 cleanup progress: 1/12 → 5/12.

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

* fix(shard): MD032 blanks-around-lists in 2348Z shard (recurring class)

Second occurrence of the same MD032 failure mode I caught on the
2228Z shard (PR #3044). Pattern: writing a label sentence ("Each
row:") immediately followed by a bullet list with no blank line.

One-line fix. Discipline note for future tick shards: ALWAYS insert
a blank line between a label sentence and a following list.

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

* shard(tick): 0007Z — MD032 fix on 2348Z (recurring class); discipline-mechanization observation

Records: PR #3058 hit real markdownlint failure (MD032 on 2348Z shard,
second occurrence this session). One-line fix landed in 1b4866e.
Records the observation that this discipline isn't mechanized; lists
three mechanization options for future-Otto consideration.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 13, 2026
…currence)

Third + fourth occurrences of the same MD032 failure mode this
session (after PR #3044 fixed 2228Z and PR #3058 fixed 2348Z).

Two more tick shards on PR #3065 hit the same pattern:
- 0017Z:51 "Plus:" → "- `B-0092` parent body..."
- 0024Z:66 "infra issues that resolve when:" → "1. The installation..."

The discipline ("blank line before lists") is in-head but unmechanized.
Per the 0007Z shard observation: mechanization options include a
pre-commit hook OR shard-writer helper. The recurrence rate suggests
the cost of mechanization is now lower than the cost of the
recurring CI-cycle-per-tick-shard.

Filing as observation in commit message; not expanding scope to
build the mechanization this tick.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 13, 2026
Files the discipline-gap observation from this session's 4 MD032
recurrences. Per encoding-rules-without-mechanizing.md, the cost-
benefit has tipped: building a small TS helper under tools/hygiene/
is now cheaper than the recurring CI-cycle-per-tick-shard cost.

Row captures:
- The 4 historical occurrences (2228Z PR #3044, 2348Z PR #3058,
  0017Z + 0024Z PR #3065) as test fixtures
- Two mechanization options: pre-push git hook (preferred) or
  tick-close ritual check (fallback)
- Acceptance criteria covering clean fixture, single/multi finding,
  no-lists, list-without-preceding-label edge cases
- Composes-with pointers to B-0451 sweep + Rule 0 + the
  encoding-rules-without-mechanizing rule

Not building the mechanization THIS tick (3 PRs already in flight;
restraint discipline). The row makes the work pick-up-able by any
future agent without session context.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 14, 2026
…r-compliance set → B-0452-0455 (#3065)

* fix(backlog): resolve B-0370-0373 ID collisions — renumber P2 contributor-compliance set → B-0452-0455

Third per-collision cleanup from the B-0451 sweep. Four B-0370..B-0373
collisions form one connected cluster (parent + 3 deps inside the P2
set; cross-priority bleed against the earlier P1 set).

## The collisions

| ID | Earlier filer (P1, 2026-05-09 PR #2269) | Later filer (P2, 2026-05-11 PR #2683) |
|---|---|---|
| B-0370 | durable-computation-checkpoint-interface-extension | contributor-compliance-core-document-authoring |
| B-0371 | pages-seo-metadata-jsonld-social-preview | contributor-compliance-cross-reference-integration |
| B-0372 | pages-sitemap-robots-ai-crawler-policy | t1-t2-self-audit-and-cadenced-review-trajectories |
| B-0373 | alignment-proof-primitive-ladder-one-type-one-property | t4-t5-onboarding-and-drift-retrospective-trajectories |

## Resolution

Per first-merged-wins + external-references:

- The P1 set was filed via PR #2269 (2026-05-09) as itself a
  prior collision-resolution sweep — 2 days BEFORE the P2 set
  (PR #2683, 2026-05-11). First-merged-wins.
- B-0370 P1 and B-0373 P1 are already shipped (`status: closed`
  effectively per `[x]` checked state in `docs/BACKLOG.md`).
- External references to the P1 IDs exist in PR-history doc
  (`docs/history/pr-reviews/PR-2369-...md`) and a memory file
  (`feedback_shadow_lesson_log_otto_catches_2026_05_07.md`).
  Renumbering them would orphan those references.
- The P2 set's "external references" are internal to the set
  (B-0371/0372/0373 depend on B-0370 within the set) + the
  B-0092 parent body — all editable in this PR.

→ Keep P1 set at B-0370-0373. Renumber P2 set as a unit:

  B-0370 (P2) → B-0452
  B-0371 (P2) → B-0453
  B-0372 (P2) → B-0454
  B-0373 (P2) → B-0455

## Internal-chain remap

- B-0453.depends_on: [B-0370] → [B-0452]
- B-0454.depends_on: [B-0370] → [B-0452]
- B-0455.depends_on: [B-0370, B-0371] → [B-0452, B-0453]
- B-0092.body §Decomposition: lines 184-194 updated to new IDs
  with renumber note

Each renumbered row has `renumbered_from: B-0NNN` + reason in
frontmatter. `tags:` add `renumbered`. `last_updated: 2026-05-14`.

## Empirical effect

Inline duplicate-ID count on the branch:

  Duplicate-ID groups: 11 → 7

B-0451 cleanup progress: 1/12 → 9/12 (B-0068.1 in #3057 already
merged; B-0090.1-4 in #3058 in flight; B-0370-0373 in this PR).

Remaining 3 groups after this lands: B-0409 (3-way), B-0410,
B-0411.

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

* shard(tick): 0017Z — third B-0451 cleanup; B-0370-0373 P2 set renumbered

Records: PR #3065 opened to renumber the P2 contributor-compliance
set (B-0370→B-0452, B-0371→B-0453, B-0372→B-0454, B-0373→B-0455)
keeping the P1 set (durable/SEO/sitemap/alignment, filed 2 days
earlier via PR #2269). Internal depends_on chain remapped + B-0092
parent body updated. Duplicate-ID groups: 11 → 7. B-0451 cleanup
progress: 1/12 → 9/12 (with #3058 + #3065 both landed).

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

* shard(tick): 0024Z — branch-update triggered on 3 in-flight PRs; rate-limit triage

Records: PR #3062 (Lior decomposition rule) merged. Triaged 8 "lint
failures" on PRs #3056 + #3058 as rate-limit-class (mise toolchain
installer hit 403 Forbidden). All required checks green; BLOCKED state
is just out-of-date branch. Triggered branch-update on all 3 in-flight
PRs via `PUT pulls/{N}/update-branch`. Declined to pick next B-0451
cleanup (B-0409 3-way etc.) to avoid multiplying rate-limit pressure.

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

* fix(shard): MD032 blanks-around-lists in 0017Z + 0024Z shards (4th occurrence)

Third + fourth occurrences of the same MD032 failure mode this
session (after PR #3044 fixed 2228Z and PR #3058 fixed 2348Z).

Two more tick shards on PR #3065 hit the same pattern:
- 0017Z:51 "Plus:" → "- `B-0092` parent body..."
- 0024Z:66 "infra issues that resolve when:" → "1. The installation..."

The discipline ("blank line before lists") is in-head but unmechanized.
Per the 0007Z shard observation: mechanization options include a
pre-commit hook OR shard-writer helper. The recurrence rate suggests
the cost of mechanization is now lower than the cost of the
recurring CI-cycle-per-tick-shard.

Filing as observation in commit message; not expanding scope to
build the mechanization this tick.

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

* docs(backlog): B-0456 — mechanize MD032 blanks-around-lists check

Files the discipline-gap observation from this session's 4 MD032
recurrences. Per encoding-rules-without-mechanizing.md, the cost-
benefit has tipped: building a small TS helper under tools/hygiene/
is now cheaper than the recurring CI-cycle-per-tick-shard cost.

Row captures:
- The 4 historical occurrences (2228Z PR #3044, 2348Z PR #3058,
  0017Z + 0024Z PR #3065) as test fixtures
- Two mechanization options: pre-push git hook (preferred) or
  tick-close ritual check (fallback)
- Acceptance criteria covering clean fixture, single/multi finding,
  no-lists, list-without-preceding-label edge cases
- Composes-with pointers to B-0451 sweep + Rule 0 + the
  encoding-rules-without-mechanizing rule

Not building the mechanization THIS tick (3 PRs already in flight;
restraint discipline). The row makes the work pick-up-able by any
future agent without session context.

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

* shard(tick): 0046Z — 3 PRs landed (#3056, #3058, #3059); 4th MD032 forces B-0456

Records: PRs #3056 (audit tool + B-0451), #3058 (B-0090.x batch),
and Otto-Desktop's #3059 all merged this tick. PR #3065 hit real
markdownlint failure (MD032 ×2 on prior tick shards) — fixed inline.
Filed B-0456 to mechanize the recurring MD032-on-tick-shard
discipline gap (4 occurrences this session).

Restraint discipline maintained: did NOT build the mechanization
this tick (still 2 PRs in flight). B-0456 captures the procedure
+ acceptance criteria for future tick pickup.

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

* fix(backlog): MD038 in B-0456 — replace `- ` code spans with prose descriptions

The B-0456 row's "Examples this session" table used backtick-quoted
`- ` (hyphen followed by space) as the bullet-pattern marker. The
trailing space inside the code span triggers markdownlint MD038
"no-space-in-code".

Replaced the literal-bullet code spans with prose descriptions
(`bullet-list-with-no-blank-line` / `numbered-list-with-no-blank-line`)
that convey the same meaning without the trailing-space-in-code-span
hazard.

5th markdown lint finding this session (MD038 added to the
MD032 ×4 + MD018 ×1 cluster). Strengthens B-0456's case further
— the future TS helper should check MD038 + MD032 + MD018 at minimum.

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

* shard(tick): 0100Z — MD038 fix on B-0456 row; 6 markdown findings this session

Records: PR #3064 (Otto-Desktop B-0442 slice 6) merged. PR #3065 hit
MD038 lint failure on B-0456 row's Examples table (trailing space
in `- ` code span). Fixed by replacing code-span markers with prose
descriptions. Recurrence-count update: 6 markdown findings this
session (MD032 ×4 + MD018 ×1 + MD038 ×1).

Substrate-honest observation: the automated review (Copilot +
markdownlint + audit-duplicate-row-ids) is doing structural work my
own attention can't sustain at this PR cadence. The automated
review IS the discipline; agent role is responding to findings.

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

* fix(shard): MD032 in 0100Z — `+ memory` line-start parsed as list item

The 0100Z tick shard's recurrence-count summary ended with
"...this session's tick shards" and continued on the next line
with "+ memory + backlog rows.**". Markdownlint parsed the leading
`+ ` as a list marker, firing MD032 (preceding line is bold text,
not a blank).

Rephrased to "tick shards, memory files, and backlog rows" so no
line starts with a list marker.

8th markdown lint finding this session. 5th MD032 specifically.
B-0456 mechanization argument continues to strengthen.

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

* shard(tick): 0117Z — 8th markdown finding (MD032 ×5) + 2 Copilot rounds resolved

Records: PR #3065 hit MD032 on 0100Z line 46 (`+ memory` line-start
parsed as list item, 5th MD032 this session); fixed in 54d8ff0.
PR #3066 had 2 unresolved Copilot threads: sub-row grep recipe
word-boundary issue + remaining MD018 on `#3065` line-start; fixed
in fa687ab + both threads resolved.

Preemptively escaped `[^0-9.]|$` to `[^0-9.]\|$` in this shard's
own table to avoid the same MD056 issue that 0054Z hit.

9 total markdown findings this session. The session arc has
accidentally become the regression suite for B-0456's mechanization.

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

* fix(shard): MD038 ×3 in 0117Z — replace inline-code "+ " markers with prose

Same MD038 (no-space-in-code) class as the B-0456 row fix from
earlier this session (PR #3065 commit cbbfbb6). The 0117Z shard
described the previous tick's MD032 fix using inline-code
literals `` `+ ` `` (backtick + plus + space + backtick) in three
places — the trailing space inside the code span trips MD038.

Replaced with prose: "a plus-space (\"+\" followed by a space)".

Meta-observation: the 0117Z shard whose entire point was discussing
MD038/MD032 fixes itself contained 3 MD038 violations. This is the
recursive-finding pattern documented earlier. The discipline of
"avoid trailing-space-inside-code-span" is in-head but only
catches the patterns I've seen recently — the `+ ` form was new
to my pattern-match this tick.

10th MD finding this session. The break-even argument from B-0456
keeps strengthening; future agent picking it up gets a 4-rule-class
corpus (MD032 + MD018 + MD038 + MD056).

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

* shard(tick): 0132Z — 10th MD finding (MD038 ×3); recursive-finding pattern continues

Records: PR #3065 hit MD038 ×3 on the 0117Z shard (inline-code
plus-space literals with trailing space). Fixed by replacing with
prose ("a plus-space"). Total markdown findings this session: 12
(MD032 ×5 + MD018 ×2 + MD038 ×4 + MD056 ×1) across 4 rule classes.

Meta-pattern: shards describing markdown lint fixes tend to
themselves contain markdown lint findings of related classes.
The 0117Z shard whose point was MD032 + MD018 + MD038 + MD056
discussion contained 3 new MD038 hits.

This shard authored carefully to avoid backtick-quoted bullet/list
markers entirely — preemptive vs reactive discipline.

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

---------

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