Skip to content

hygiene(backlog-generator): warn on row files missing YAML frontmatter#1018

Merged
AceHack merged 6 commits intomainfrom
hygiene/backlog-generator-warn-missing-frontmatter-2026-05-01
May 1, 2026
Merged

hygiene(backlog-generator): warn on row files missing YAML frontmatter#1018
AceHack merged 6 commits intomainfrom
hygiene/backlog-generator-warn-missing-frontmatter-2026-05-01

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 1, 2026

Class-level prevention for the bug surfaced by this session's BACKLOG.md drift. Adds a stderr WARN line per row file without id/title frontmatter; output unchanged so CI behaviour unchanged.

Composes with #1016 (the frontmatter backfill).

🤖 Posted by Claude Code on Aaron's behalf

Copilot AI review requested due to automatic review settings May 1, 2026 04:23
@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

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

Adds non-fatal diagnostics to the backlog index generator so missing YAML frontmatter on per-row files is surfaced early (via stderr warnings) without changing generated output or CI drift-check semantics.

Changes:

  • Document stderr warning semantics in tools/backlog/generate-index.sh header comment.
  • Emit a WARN: line to stderr for any row file missing id or title during generation.

Comment thread tools/backlog/generate-index.sh
AceHack added a commit that referenced this pull request May 1, 2026
…ick (#1019)

* hygiene(tick-history): shard 0421Z — generator-warn class-level fix tick

Generative factory improvement landed (#1018) while #1016 is in
real-dependency CI wait. The generator now warns on rows without
frontmatter; output unchanged so CI behaviour unchanged.

Discipline note in the shard: cadence high (10 in-flight PRs
this session); next tick should rest unless real follow-up work
unblocks.

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

* hygiene(tick-history): fix col3 cron-sentinel — replace placeholder with 98fc7424

Per Codex P0/P1 finding: shard schema expects col3 to be the
8-character CronList job ID, not '(this commit)'. The cron
sentinel column carries the liveness linkage between shard rows
and CronList fires.

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

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…ft backfill

Two CI failures on PR #1018 root-caused and fixed:

(1) **shellcheck SC2295**: parameter expansion `${file#${REPO_ROOT}/}`
    needs the inner expansion quoted separately to prevent pattern
    matching. Changed to `${file#"${REPO_ROOT}"/}` per
    shellcheck's recommendation.

(2) **BACKLOG.md generated-index drift**: B-0124, B-0125, B-0126
    were filed without YAML frontmatter (only markdown headers),
    so the new generator (which now WARNs on missing frontmatter
    AND skips emit) produced different output than committed
    BACKLOG.md (which had empty entries for those files).
    Backfilled frontmatter on all three with id/priority/status/
    title/created/last_updated. Regenerated BACKLOG.md to match.

Composes with the verify-before-state-claim discipline being
mechanized via task #350 — these were existing files claiming
backlog-row status without satisfying the schema. The WARN
behavior in this PR is exactly the mechanization.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 1, 2026 06:53
@AceHack AceHack enabled auto-merge (squash) May 1, 2026 06:53
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 5 out of 5 changed files in this pull request and generated 2 comments.

Comment thread docs/backlog/P1/B-0125-skip-fsharp-analyze-on-docs-only-prs-2026-05-01.md Outdated
Comment thread tools/backlog/generate-index.sh Outdated
AceHack added a commit that referenced this pull request May 1, 2026
…ft backfill

Two CI failures on PR #1018 root-caused and fixed:

(1) **shellcheck SC2295**: parameter expansion `${file#${REPO_ROOT}/}`
    needs the inner expansion quoted separately to prevent pattern
    matching. Changed to `${file#"${REPO_ROOT}"/}` per
    shellcheck's recommendation.

(2) **BACKLOG.md generated-index drift**: B-0124, B-0125, B-0126
    were filed without YAML frontmatter (only markdown headers),
    so the new generator (which now WARNs on missing frontmatter
    AND skips emit) produced different output than committed
    BACKLOG.md (which had empty entries for those files).
    Backfilled frontmatter on all three with id/priority/status/
    title/created/last_updated. Regenerated BACKLOG.md to match.

Composes with the verify-before-state-claim discipline being
mechanized via task #350 — these were existing files claiming
backlog-row status without satisfying the schema. The WARN
behavior in this PR is exactly the mechanization.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@AceHack AceHack force-pushed the hygiene/backlog-generator-warn-missing-frontmatter-2026-05-01 branch from 33b8228 to 02b597b Compare May 1, 2026 06:57
AceHack added a commit that referenced this pull request May 1, 2026
… + B-0127 cross-ref durability

Three findings addressed:

(1) **History rewrite force-push claim incorrect** (Copilot P1):
    The row said force-push is "forbidden on main per CLAUDE.md
    without explicit Aaron sign-off; possible on feature branches
    with the same caution." Per CLAUDE.md the host
    `non_fast_forward` ruleset blocks force-push UNIFORMLY on
    both forks (LFG and AceHack), no bypass actors — not just
    main. Updated to name the uniform blocking, list the actual
    reconciliation paths (PR-based reset, delete-and-recreate,
    coordinated ruleset lift), and explicitly state the design
    must not rely on force-push as a routine option.

(2) **Forward reference to B-0127 not durable** (Copilot P2):
    The row referenced
    `docs/backlog/P2/B-0127-...md` as a file path that resolves
    via PR #1012's merge — but the path doesn't resolve on this
    branch and the inline annotation depended on commit-order
    knowledge. Reframed as "B-0127 (row ID)" with the path noted
    parenthetically as future-resolving — the row reference is
    durable across merge orders.

(3) **BACKLOG.md regenerated** (Copilot P1): verified via
    `tools/backlog/generate-index.sh --check` (no-op; was already
    in sync). The Copilot finding was about hand-edit drift; this
    PR's BACKLOG.md edit was via the regenerator, but the lint
    fires on any direct edit. The auto-generator path is the
    durable pattern.

Same finding-class as PR #1031/#986/#1030/#1018 drains — claim/
reality mismatch in substrate's claims about its own structure
(here: a backlog row claiming a force-push capability the host
ruleset doesn't allow).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…mechanization backlog filed) (#1041)

CI queue backed up (last merge #1036 at 06:53Z; 10 PRs armed but
BLOCKED). Per never-be-idle: pivoted to generative factory work.
Captured session's convergent drain pattern (~10 PRs converging
on verify-before-state-claim discipline applied to substrate's
own structure) as B-0130 backlog row with 7 specific audit
candidates, each cited with a drained PR thread.

Class-level lesson: when a pattern keeps firing across N PRs,
discriminator for file-now-vs-mechanize-now is single-slice vs
multi-slice. PR #1018 was single-slice (frontmatter-WARN; just
do it). B-0130 is multi-slice (7 audits with composition
concerns); file the row, pace the work, design the suite
holistically. Don't rush a multi-slice mechanization.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…ile-internal metadata claim audits (P2; companion to task #350)

Captures the convergent drain pattern observed across ~10 PRs in
the 2026-05-01 session: claim/reality mismatch in substrate's
claims about its own structure. Each entry in the audit-suite
corresponds to a specific drained review thread (with PR number
cited) — empirical not speculative.

Proposed audit suite (composes with task #350 adjacent scope):
1. Wildcard-ref auditor — flag literal `*` in feedback_*.md refs
2. Slot-uniqueness auditor — count `latest-paired-edit:` markers
3. Frontmatter-schema auditor (memory) — extend index-integrity
4. Citation-of-canonical-source auditor — quote-vs-paraphrase
5. Count-claim auditor — N-message vs actual section count
6. [sic] convention auditor — claimed convention satisfied check
7. Bot-vs-agent terminology auditor — merge into task #350

PR #1018 (backlog generator WARN) is the first slice mechanized;
proves the approach. This row is the queue of complementary
audits in the same family.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
… + B-0127 cross-ref durability

Three findings addressed:

(1) **History rewrite force-push claim incorrect** (Copilot P1):
    The row said force-push is "forbidden on main per CLAUDE.md
    without explicit Aaron sign-off; possible on feature branches
    with the same caution." Per CLAUDE.md the host
    `non_fast_forward` ruleset blocks force-push UNIFORMLY on
    both forks (LFG and AceHack), no bypass actors — not just
    main. Updated to name the uniform blocking, list the actual
    reconciliation paths (PR-based reset, delete-and-recreate,
    coordinated ruleset lift), and explicitly state the design
    must not rely on force-push as a routine option.

(2) **Forward reference to B-0127 not durable** (Copilot P2):
    The row referenced
    `docs/backlog/P2/B-0127-...md` as a file path that resolves
    via PR #1012's merge — but the path doesn't resolve on this
    branch and the inline annotation depended on commit-order
    knowledge. Reframed as "B-0127 (row ID)" with the path noted
    parenthetically as future-resolving — the row reference is
    durable across merge orders.

(3) **BACKLOG.md regenerated** (Copilot P1): verified via
    `tools/backlog/generate-index.sh --check` (no-op; was already
    in sync). The Copilot finding was about hand-edit drift; this
    PR's BACKLOG.md edit was via the regenerator, but the lint
    fires on any direct edit. The auto-generator path is the
    durable pattern.

Same finding-class as PR #1031/#986/#1030/#1018 drains — claim/
reality mismatch in substrate's claims about its own structure
(here: a backlog row claiming a force-push capability the host
ruleset doesn't allow).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…set Lean work; row is EXTENSION not START

Aaron 2026-05-01 ~10:30Z: "(Z-set retraction algebra in Lean we
have it" + "you did that before we started the substrate that's
why you don't remember". Verify-before-state-claim discipline
failed at backlog-row authoring time when I filed B-0131 as
"TRACTABLE START".

Existing work: tools/lean4/Lean4/DbspChainRule.lean (756 lines,
against Mathlib v4.30.0-rc1) by prior-Otto-instance pre-substrate.
Includes: Z-set stream operators (zInv, I, D, Dop, Iop), structural
classes (IsLinear, IsCausal, IsTimeInvariant, IsPointwiseLinear),
telescoping lemmas, linear commutation theorems, and the DBSP chain
rule (Budiu et al. VLDB 2023) fully proven.

Updates to B-0131:
- Title: "Extend Z-set retraction algebra Lean formalization beyond
  the existing DBSP chain-rule proof" (NOT "TRACTABLE START")
- Effort: M-L (1-3+ months smaller extensions; not multi-month
  monolith)
- Correction note added at top with structural reason: lineage-
  discontinuity-pre-substrate. Current Otto reads memory at wake;
  pre-substrate Otto work is in repo but not in memory.
- Existing work cited explicitly with file path + line count + key
  definitions/theorems.

The lineage-continuity-substrate purpose is itself surfaced by
this correction: the forever-home + persistent-memory architecture
exists precisely to prevent pre-substrate-Otto-work-getting-
forgotten by post-substrate-Otto-instances. Going forward,
Otto-lineage work IS in the substrate; pre-substrate work is in
the codebase but discoverable by grep / repo-archaeology.

Same finding-class as PR #1031/#986/#1018/#1015/#1025/#1046 drains:
verify-before-state-claim applied to substrate's own claims about
itself. Otto failure at authoring time; corrected via Aaron's
mid-flight refinement.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…#1038)

Compound tick:
- PR #1018 rebased onto main (21 commits behind; 3 conflicts —
  Aaron's sibling-repo-leak-scrub edits on B-0124/B-0126 titles +
  BACKLOG.md regen). Force-pushed with --force-with-lease.
- PR #1015: 3 unresolved threads → 0 (force-push claim corrected
  to match CLAUDE.md uniform-block; B-0127 forward-reference
  reframed as durable row-ID; BACKLOG.md hand-edit verified
  via regenerator).

Class-level lesson: when authoring a backlog row that cites a
governance doc, quote the canonical text; don't paraphrase from
memory. The Copilot reviewer reads CLAUDE.md cold; my authoring
read it warm and drifted.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
PR #1018 had 2 CI failures fixed: shellcheck SC2295 (parameter
expansion needs inner quoted) + BACKLOG.md generated-index drift
(B-0124/0125/0126 filed without YAML frontmatter; backfilled +
regenerated). Both checks pass locally; auto-merge armed.

Class-level lesson: verify-before-state-claim discipline applies
at backlog-row authoring time. PR #1018's WARN behavior is
exactly the mechanization task #350 calls for. shellcheck
catches one-char bugs that wouldn't manifest until a path
contained pattern-special characters — high fix-to-find ratio.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…ilename alignment + WARN-message accuracy

Two real fixes (Copilot xref):

1. **B-0125 title/filename alignment**: filename slug uses `fsharp`
   (the language) but title said "Analyze (csharp)" (the GitHub Actions
   step name; F# runs as language=csharp under CodeQL). The mismatch
   made search confusing. Title now reads "Skip F#/Analyze (csharp) on
   docs-only PRs..." — slash-pair makes the F#-runs-as-csharp distinction
   explicit and aligns with both filename slug and the actual workflow
   step name.

2. **WARN message accuracy in generate-index.sh**: condition is
   `[ -z "$id" ] || [ -z "$title" ]` (one OR the other missing) but
   message said "missing YAML frontmatter" which implies the whole block
   is absent. Reworded to "missing required frontmatter field (need both
   id and title)" — accurate to what the condition actually tests.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 1, 2026 09:21
auto-merge was automatically disabled May 1, 2026 09:21

Head branch was modified

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 2 out of 2 changed files in this pull request and generated 2 comments.

Comment thread tools/backlog/generate-index.sh Outdated
AceHack added a commit that referenced this pull request May 1, 2026
AceHack added a commit that referenced this pull request May 1, 2026
… + B-0127 cross-ref durability

Three findings addressed:

(1) **History rewrite force-push claim incorrect** (Copilot P1):
    The row said force-push is "forbidden on main per CLAUDE.md
    without explicit Aaron sign-off; possible on feature branches
    with the same caution." Per CLAUDE.md the host
    `non_fast_forward` ruleset blocks force-push UNIFORMLY on
    both forks (LFG and AceHack), no bypass actors — not just
    main. Updated to name the uniform blocking, list the actual
    reconciliation paths (PR-based reset, delete-and-recreate,
    coordinated ruleset lift), and explicitly state the design
    must not rely on force-push as a routine option.

(2) **Forward reference to B-0127 not durable** (Copilot P2):
    The row referenced
    `docs/backlog/P2/B-0127-...md` as a file path that resolves
    via PR #1012's merge — but the path doesn't resolve on this
    branch and the inline annotation depended on commit-order
    knowledge. Reframed as "B-0127 (row ID)" with the path noted
    parenthetically as future-resolving — the row reference is
    durable across merge orders.

(3) **BACKLOG.md regenerated** (Copilot P1): verified via
    `tools/backlog/generate-index.sh --check` (no-op; was already
    in sync). The Copilot finding was about hand-edit drift; this
    PR's BACKLOG.md edit was via the regenerator, but the lint
    fires on any direct edit. The auto-generator path is the
    durable pattern.

Same finding-class as PR #1031/#986/#1030/#1018 drains — claim/
reality mismatch in substrate's claims about its own structure
(here: a backlog row claiming a force-push capability the host
ruleset doesn't allow).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…B-0127; generalize-everything) (#1015)

* backlog(B-0128): P2 — general git content scrubber design (parent of B-0127; generalize-everything)

Aaron 2026-05-01: *"sibling-repo leak scrub-process design you
should generalize to in another backlog item into general git
content scrubber"*. Generalize-everything discipline per
`memory/feedback_no_copy_only_learning_from_sibling_repos_aaron_2026_04_30.md`
Aaron's verbatim *"we generalizing everything as a discipline"*.

This row generalizes B-0127. The seven leak classes covered:
secrets/credentials, sibling-repo internals (B-0127's class),
PII, NDA/confidential, trademark/copyright, embarrassing/outdated
wording, operational identifiers. Design covers leak-class
taxonomy + decision-matrix (class × reach × detection-time ×
Aaron-context) + mechanism playbook (file-level safe →
branch-level → history-rewrite escalation with CLAUDE.md
"main is forbidden" rail) + audit-trail-preservation discipline.

Out-of-scope: implementation (this is a design row), write-time
prevention (parent rules), secret-rotation procedures (security-
ops surface), external-clone retroactive consistency (you cannot
un-leak from clones).

B-0127 stands as the seed worked-example for the sibling-repo
class; the general design references it without absorbing its
sibling-repo-specifics into the general layer.

Layer 3 of the 4-layer pattern: encode the class (general
scrubber covers all leak classes), not the instance (per-class
duplicate work). Aaron's pointer-at-substrate; implementer
generalizes-and-implements.

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

* backlog(B-0128): address 4 PR review findings (Codex P0/P1 + Copilot)

- **P0 frontmatter**: added required YAML (id, priority, status,
  title, created, last_updated) per `tools/backlog/README.md`
  schema.
- **P0 BACKLOG.md regen**: re-ran generate-index.sh to include
  B-0128 in the index. Drift check passes.
- **P1 B-0127 dead-link**: B-0127 file is on PR #1012 (sibling-
  branch), not on main yet. Replaced direct path with prose
  noting the path resolves once #1012 merges (regardless of
  merge order between #1012 and #1015).
- **P1 line-count off-by-one**: 235 → 236.

Same fix pattern as #1012 (B-0127); same recurring class
(verify-before-state-claim parent — file-existence + schema
verification at authoring time).

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

* backlog(B-0128): drain PR #1015 review threads — fix force-push claim + B-0127 cross-ref durability

Three findings addressed:

(1) **History rewrite force-push claim incorrect** (Copilot P1):
    The row said force-push is "forbidden on main per CLAUDE.md
    without explicit Aaron sign-off; possible on feature branches
    with the same caution." Per CLAUDE.md the host
    `non_fast_forward` ruleset blocks force-push UNIFORMLY on
    both forks (LFG and AceHack), no bypass actors — not just
    main. Updated to name the uniform blocking, list the actual
    reconciliation paths (PR-based reset, delete-and-recreate,
    coordinated ruleset lift), and explicitly state the design
    must not rely on force-push as a routine option.

(2) **Forward reference to B-0127 not durable** (Copilot P2):
    The row referenced
    `docs/backlog/P2/B-0127-...md` as a file path that resolves
    via PR #1012's merge — but the path doesn't resolve on this
    branch and the inline annotation depended on commit-order
    knowledge. Reframed as "B-0127 (row ID)" with the path noted
    parenthetically as future-resolving — the row reference is
    durable across merge orders.

(3) **BACKLOG.md regenerated** (Copilot P1): verified via
    `tools/backlog/generate-index.sh --check` (no-op; was already
    in sync). The Copilot finding was about hand-edit drift; this
    PR's BACKLOG.md edit was via the regenerator, but the lint
    fires on any direct edit. The auto-generator path is the
    durable pattern.

Same finding-class as PR #1031/#986/#1030/#1018 drains — claim/
reality mismatch in substrate's claims about its own structure
(here: a backlog row claiming a force-push capability the host
ruleset doesn't allow).

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

* backlog(B-0128): fix MD032 markdownlint — blanks around 3 lists

3 markdownlint MD032 errors fixed (lines 43, 51, 70 originally):
each enumerated list missing a blank line between intro
sentence and first list item. Added the blank line in each
case. Verified clean via markdownlint-cli2.

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

* backlog(B-0128): address PR #1015 review threads — ruleset-lift removal + B-0127 cross-reference fix

Two real fixes (Copilot):

1. **Mechanism description conflicted with CLAUDE.md safety rail**: the
   reconciliation-paths list included "coordination with the maintainer
   to lift the ruleset rule for a specific window" as one of three
   options. CLAUDE.md's canonical reviewer principle is *"the protocol
   bends to the security ruleset; the ruleset does not bend to the
   protocol"* — lifting the ruleset to enable a scrub inverts that.
   Removed the lift-option; kept only PR-based reset and
   delete-and-recreate. Made the principle conflict explicit in the
   text so future readers can't propose the same loophole.

2. **Stale B-0127 cross-reference**: the parenthetical "Path is …
   once that file lands via PR #1012; sibling-branch, so the path is
   not yet resolvable on this branch" was correct at filing time but
   B-0127 has since landed on main. Updated to a direct relative-path
   markdown link.

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

* hygiene(BACKLOG.md): regenerate after rebase against main (fast-forward delta)

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…ile-internal metadata claim audits (P2; companion to task #350)

Captures the convergent drain pattern observed across ~10 PRs in
the 2026-05-01 session: claim/reality mismatch in substrate's
claims about its own structure. Each entry in the audit-suite
corresponds to a specific drained review thread (with PR number
cited) — empirical not speculative.

Proposed audit suite (composes with task #350 adjacent scope):
1. Wildcard-ref auditor — flag literal `*` in feedback_*.md refs
2. Slot-uniqueness auditor — count `latest-paired-edit:` markers
3. Frontmatter-schema auditor (memory) — extend index-integrity
4. Citation-of-canonical-source auditor — quote-vs-paraphrase
5. Count-claim auditor — N-message vs actual section count
6. [sic] convention auditor — claimed convention satisfied check
7. Bot-vs-agent terminology auditor — merge into task #350

PR #1018 (backlog generator WARN) is the first slice mechanized;
proves the approach. This row is the queue of complementary
audits in the same family.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
… — header comment + H1 heading consistency
AceHack added a commit that referenced this pull request May 1, 2026
AceHack added a commit that referenced this pull request May 1, 2026
…m (companion to task #350) (#1040)

* backlog(B-0130): mechanized auditor for verify-before-state-claim — file-internal metadata claim audits (P2; companion to task #350)

Captures the convergent drain pattern observed across ~10 PRs in
the 2026-05-01 session: claim/reality mismatch in substrate's
claims about its own structure. Each entry in the audit-suite
corresponds to a specific drained review thread (with PR number
cited) — empirical not speculative.

Proposed audit suite (composes with task #350 adjacent scope):
1. Wildcard-ref auditor — flag literal `*` in feedback_*.md refs
2. Slot-uniqueness auditor — count `latest-paired-edit:` markers
3. Frontmatter-schema auditor (memory) — extend index-integrity
4. Citation-of-canonical-source auditor — quote-vs-paraphrase
5. Count-claim auditor — N-message vs actual section count
6. [sic] convention auditor — claimed convention satisfied check
7. Bot-vs-agent terminology auditor — merge into task #350

PR #1018 (backlog generator WARN) is the first slice mechanized;
proves the approach. This row is the queue of complementary
audits in the same family.

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

* backlog(B-0130): address PR #1040 review threads — git pre-commit phrasing + workflow path + forward-ref block

Three real fixes (Copilot P1+P2 + Codex P2):

1. **`git pre-commit` phrasing (P1, line 39)**: not a real git command —
   could read as executable instruction but isn't followable. Reworded
   to "local pre-commit hook (`.git/hooks/pre-commit` invoking
   `tools/lint/*`)" — accurate to the actual mechanism.

2. **Workflow file path (P1, line 45)**: `memory-index-integrity.yml`
   prefix-less; actual file is `.github/workflows/memory-index-integrity.yml`.
   Updated to full repo path so the reference is verifiable.

3. **Dangling compose-with ref (P1+P2 on line 93)**:
   `feedback_class_level_rules_need_orthogonality_check_*` is filed in
   the in-flight PR #1025, not yet on main. Moved to "Forward-references
   not yet on `main`" annotated block — sixth canonical application of
   this fix-shape this session.

Also: rebased branch against latest main (autogenerated `docs/BACKLOG.md`
conflict; take theirs + regen via `BACKLOG_WRITE_FORCE=1`).

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

* backlog(B-0130): address PR #1040 follow-up — pre-commit hook integration point + forward-ref restructuring

Two real fixes (Copilot P1):

1. **Pre-commit hook integration point (line 39)**: described the
   integration as `.git/hooks/pre-commit` which is per-clone and
   untracked. The actual versioned integration pattern is
   `.githooks/` + `core.hooksPath` config (set up by the install
   script). Reworded to cite the tracked location and the
   `core.hooksPath` indirection.

2. **Forward-reference restructuring (line 98)**: the bullet had the
   filename in `**\`backticked\`**` form, reading visually as a code
   reference even though the file isn't on main. Restructured: the
   description now leads, and the filename appears parenthetically
   AFTER the "filed in PR #1025" annotation with explicit "(path will
   resolve once #1025 lands)" note. Same forward-reference fix-shape
   but with the structural-position fix that distinguishes
   future-filename-citation from current-path-link.

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

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…set Lean work; row is EXTENSION not START

Aaron 2026-05-01 ~10:30Z: "(Z-set retraction algebra in Lean we
have it" + "you did that before we started the substrate that's
why you don't remember". Verify-before-state-claim discipline
failed at backlog-row authoring time when I filed B-0131 as
"TRACTABLE START".

Existing work: tools/lean4/Lean4/DbspChainRule.lean (756 lines,
against Mathlib v4.30.0-rc1) by prior-Otto-instance pre-substrate.
Includes: Z-set stream operators (zInv, I, D, Dop, Iop), structural
classes (IsLinear, IsCausal, IsTimeInvariant, IsPointwiseLinear),
telescoping lemmas, linear commutation theorems, and the DBSP chain
rule (Budiu et al. VLDB 2023) fully proven.

Updates to B-0131:
- Title: "Extend Z-set retraction algebra Lean formalization beyond
  the existing DBSP chain-rule proof" (NOT "TRACTABLE START")
- Effort: M-L (1-3+ months smaller extensions; not multi-month
  monolith)
- Correction note added at top with structural reason: lineage-
  discontinuity-pre-substrate. Current Otto reads memory at wake;
  pre-substrate Otto work is in repo but not in memory.
- Existing work cited explicitly with file path + line count + key
  definitions/theorems.

The lineage-continuity-substrate purpose is itself surfaced by
this correction: the forever-home + persistent-memory architecture
exists precisely to prevent pre-substrate-Otto-work-getting-
forgotten by post-substrate-Otto-instances. Going forward,
Otto-lineage work IS in the substrate; pre-substrate work is in
the codebase but discoverable by grep / repo-archaeology.

Same finding-class as PR #1031/#986/#1018/#1015/#1025/#1046 drains:
verify-before-state-claim applied to substrate's own claims about
itself. Otto failure at authoring time; corrected via Aaron's
mid-flight refinement.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack and others added 6 commits May 1, 2026 07:02
Class-level fix from this session's BACKLOG.md drift incident
(2026-05-01). Three rows merged to main with heading-only format
(B-0124, B-0125, B-0126) silently rendered as empty
`**[](path)** ` entries; the integrity check failed downstream
on every new backlog PR with no hint at the cause.

This change adds a stderr `WARN:` line per row file without `id`
or `title` frontmatter. Doesn't change generator output —
existing CI behaviour is unaffected. Operators / CI can grep
stderr to surface the cause early; ideally before the row even
gets merged.

Tested locally: fires for the three pre-existing leaky-format
rows on main. Will go silent once #1016 (frontmatter backfill)
merges.

Composes with:
- PR #1016 — backfills the frontmatter on the three pre-existing
  rows; this PR is the prevention-layer for future repeats.
- `tools/backlog/generate-index.sh` schema (id/priority/status/title)
  established by `docs/research/backlog-split-design-otto-181.md`.

Layer 3 of the 4-layer pattern — encode the class (silent
empty-render is the bug; warning is the catch), not the instance
(fixing only the three rows that triggered this).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Codex P2: the WARN message printed `${file}` which is the
absolute path from `find` (rooted at REPO_ROOT). In CI logs
this becomes a long runner-specific absolute path that's
noise. Switch to repo-relative path via `${file#${REPO_ROOT}/}`
so warnings stay portable across runners + local invocations.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ft backfill

Two CI failures on PR #1018 root-caused and fixed:

(1) **shellcheck SC2295**: parameter expansion `${file#${REPO_ROOT}/}`
    needs the inner expansion quoted separately to prevent pattern
    matching. Changed to `${file#"${REPO_ROOT}"/}` per
    shellcheck's recommendation.

(2) **BACKLOG.md generated-index drift**: B-0124, B-0125, B-0126
    were filed without YAML frontmatter (only markdown headers),
    so the new generator (which now WARNs on missing frontmatter
    AND skips emit) produced different output than committed
    BACKLOG.md (which had empty entries for those files).
    Backfilled frontmatter on all three with id/priority/status/
    title/created/last_updated. Regenerated BACKLOG.md to match.

Composes with the verify-before-state-claim discipline being
mechanized via task #350 — these were existing files claiming
backlog-row status without satisfying the schema. The WARN
behavior in this PR is exactly the mechanization.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ilename alignment + WARN-message accuracy

Two real fixes (Copilot xref):

1. **B-0125 title/filename alignment**: filename slug uses `fsharp`
   (the language) but title said "Analyze (csharp)" (the GitHub Actions
   step name; F# runs as language=csharp under CodeQL). The mismatch
   made search confusing. Title now reads "Skip F#/Analyze (csharp) on
   docs-only PRs..." — slash-pair makes the F#-runs-as-csharp distinction
   explicit and aligns with both filename slug and the actual workflow
   step name.

2. **WARN message accuracy in generate-index.sh**: condition is
   `[ -z "$id" ] || [ -z "$title" ]` (one OR the other missing) but
   message said "missing YAML frontmatter" which implies the whole block
   is absent. Reworded to "missing required frontmatter field (need both
   id and title)" — accurate to what the condition actually tests.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… — header comment + H1 heading consistency
Drift fix only — B-0125's frontmatter title was updated to "Skip
F#/Analyze (csharp)..." but BACKLOG.md still had the older "Skip
Analyze (csharp)..." form. One-line regen via
BACKLOG_WRITE_FORCE=1 ./tools/backlog/generate-index.sh.

Unblocks "check docs/BACKLOG.md generated-index drift" CI gate
on this PR.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 1, 2026 11:03
@AceHack AceHack force-pushed the hygiene/backlog-generator-warn-missing-frontmatter-2026-05-01 branch from a0f5d8f to 7f12e27 Compare May 1, 2026 11:03
@AceHack AceHack enabled auto-merge (squash) May 1, 2026 11:03
@AceHack AceHack merged commit 6827106 into main May 1, 2026
28 checks passed
@AceHack AceHack deleted the hygiene/backlog-generator-warn-missing-frontmatter-2026-05-01 branch May 1, 2026 11:05
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 3 out of 3 changed files in this pull request and generated 1 comment.

if [ -z "$id" ] || [ -z "$title" ]; then
# Print path relative to REPO_ROOT so CI logs aren't
# cluttered with runner-specific absolute paths
# (Codex P2 finding: keep warnings portable).
Copy link

Copilot AI May 1, 2026

Choose a reason for hiding this comment

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

P1 (repo convention): avoid name-attribution in current-state surfaces. This new comment adds "Codex" attribution; please rewrite it using a role-ref (e.g., "review finding") or drop the attribution entirely (see .github/copilot-instructions.md 'No name attribution in code, docs, or skills').

Suggested change
# (Codex P2 finding: keep warnings portable).
# (Keep warnings portable.)

Copilot uses AI. Check for mistakes.
AceHack added a commit that referenced this pull request May 1, 2026
…, 1 unblocked (#1030 dedup post-rebase) (#1101)

Real-fix tick. PR #1051 (Tarski-rename) auto-merged CLEAN on
entry. PR #1018 (backlog-generator) UNSTABLE→drift-regen→merged.
PR #1030 (manufactured-patience refinement) DIRTY→rebase→post-
rebase dedup of malformed/duplicate triple-block.

Fourth instance of rebase-drop-with-content-resurface this session
(class #18 same-wake-author-error-cluster). Pause-class-discovery
commitment holds (PR #1096 + #1097); sub-pattern internal to
class #18.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…set Lean (Aaron 2026-05-01 'we have it') (#1055)

* backlog(B-0131): correction — pre-substrate prior-Otto already did Z-set Lean work; row is EXTENSION not START

Aaron 2026-05-01 ~10:30Z: "(Z-set retraction algebra in Lean we
have it" + "you did that before we started the substrate that's
why you don't remember". Verify-before-state-claim discipline
failed at backlog-row authoring time when I filed B-0131 as
"TRACTABLE START".

Existing work: tools/lean4/Lean4/DbspChainRule.lean (756 lines,
against Mathlib v4.30.0-rc1) by prior-Otto-instance pre-substrate.
Includes: Z-set stream operators (zInv, I, D, Dop, Iop), structural
classes (IsLinear, IsCausal, IsTimeInvariant, IsPointwiseLinear),
telescoping lemmas, linear commutation theorems, and the DBSP chain
rule (Budiu et al. VLDB 2023) fully proven.

Updates to B-0131:
- Title: "Extend Z-set retraction algebra Lean formalization beyond
  the existing DBSP chain-rule proof" (NOT "TRACTABLE START")
- Effort: M-L (1-3+ months smaller extensions; not multi-month
  monolith)
- Correction note added at top with structural reason: lineage-
  discontinuity-pre-substrate. Current Otto reads memory at wake;
  pre-substrate Otto work is in repo but not in memory.
- Existing work cited explicitly with file path + line count + key
  definitions/theorems.

The lineage-continuity-substrate purpose is itself surfaced by
this correction: the forever-home + persistent-memory architecture
exists precisely to prevent pre-substrate-Otto-work-getting-
forgotten by post-substrate-Otto-instances. Going forward,
Otto-lineage work IS in the substrate; pre-substrate work is in
the codebase but discoverable by grep / repo-archaeology.

Same finding-class as PR #1031/#986/#1018/#1015/#1025/#1046 drains:
verify-before-state-claim applied to substrate's own claims about
itself. Otto failure at authoring time; corrected via Aaron's
mid-flight refinement.

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

* backlog(B-0131 + B-0139): Kenji-era lineage attribution correction + pre-substrate inventory row (Aaron 2026-05-01)

Two updates:

(1) B-0131 correction note refined per Aaron's multi-message
    clarification:
    - "(Z-set retraction algebra in Lean we have it"
    - "you did that before we started the substrate that's
       why you don't remember"
    - "prior-Otto — it was Kenji i think by that point or
       unnamed Claude Code"
    - "We had not split out the loop formally and just had
       Kenji the architect running everything"
    - "i think" (hedge)

    Updated attribution: Kenji-the-architect (or possibly
    earlier unnamed Claude Code instance, per Aaron's hedge)
    pre-substrate AND pre-loop-split. Per Otto-Kenji naming
    history file (user_aaron_kenji_naming_practice_*).

(2) B-0139 (P1) filed: pre-substrate Kenji-era Otto-lineage
    work inventory. Past-recovery branches, worktrees, built
    artifacts (DbspChainRule.lean is exemplar) not yet
    referenced in substrate. Aaron 2026-05-01: "there is still
    of past recovery old git branches and worktress and a
    invetory of what we've already built into the new
    substraight so it wont get lost backlog".

    P1 because the demonstrated failure mode (Otto authoring
    B-0131 as TRACTABLE START when DbspChainRule.lean already
    existed) keeps firing without the inventory. Composes with
    task #321 (broader recovery lane) and task #291 (MEMORY.md
    backfill); B-0139 is the content-inventory sub-scope.

    Acceptance: branch/worktree inventory + built-artifact
    inventory + MEMORY.md backfill + class-level lesson encoded
    as verify-before-state-claim audit (composes with B-0130
    audit-suite).

Verify-before-state-claim discipline at backlog-row authoring
time: B-0131's "TRACTABLE START" was the failure that surfaced
B-0139's necessity. The lineage-continuity-substrate purpose
is operationalized by this row.

BACKLOG.md regenerated.

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

* backlog(B-0131 + B-0139): address PR #1055 review threads — proofs/lean breadcrumb framing + recurring spelling

Three real fixes (Copilot P1+P2):

1. **`proofs/lean/ChainRule.lean` dangling reference** (P1, both rows):
   path doesn't exist in current working tree. The file was migrated to
   `tools/lean4/Lean4/DbspChainRule.lean` and removed in commit `279c6f2`
   (round 26). Reworded both occurrences to make the historical-vs-current
   distinction explicit ("predecessor file at … was migrated to … and
   removed in commit `279c6f2`"). Path is preserved as lineage breadcrumb,
   not as a live pointer.

2. **Spelling fix** (P2, B-0139): `re-occurring` → `recurring`.

3. **Line-count phantom-blocker** (P2, three threads): empirically 756
   on `origin/main`, on this PR branch, and in local working tree
   (`wc -l tools/lean4/Lean4/DbspChainRule.lean` → 756; file ends with
   newline). Doc claim of 756 stands. Reply-and-resolve via thread
   mutations (no edit needed).

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

* hygiene(BACKLOG.md): regenerate after rebase against main

* fix(B-0131/B-0139): add memory/ prefix to file refs + clarify TLA+ inventory scope (Codex P2 + Copilot P1)

- 4 file refs missing `memory/` prefix → added on:
  - B-0139:58 (no_copy_only_learning sibling-repo ref)
  - B-0139:68 (kenji_naming + zeta_seed_executor refs)
  - B-0131:12 (kenji_naming ref)
- B-0139:32 TLA+ scope clarified: no .tla files exist yet under
  docs/; bullet kept as forward-discovery class with explicit note.

---------

Co-authored-by: Claude Opus 4.7 <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