Skip to content

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

Merged
AceHack merged 6 commits intomainfrom
backlog/B-0128-general-git-content-scrubber-aaron-2026-05-01
May 1, 2026
Merged

backlog(B-0128): P2 — general git content scrubber design (parent of B-0127; generalize-everything)#1015
AceHack merged 6 commits intomainfrom
backlog/B-0128-general-git-content-scrubber-aaron-2026-05-01

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 1, 2026

Summary

  • Files B-0128 as the P2 generalization of B-0127 per 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 applied (memory/feedback_no_copy_only_learning_from_sibling_repos_aaron_2026_04_30.md: "we generalizing everything as a discipline").
  • Covers seven leak classes: secrets/credentials, sibling-repo internals (B-0127's class), PII, NDA/confidential, trademark/copyright, embarrassing/outdated wording, operational identifiers. Each has different severity / reach-tolerance / scrub-urgency / audit-trail style.
  • Five load-bearing pieces: (1) leak-class taxonomy, (2) decision-criteria matrix (class × reach × detection-time × Aaron-context), (3) scrub-mechanism playbook (file-level safe → branch-level → history-rewrite escalation respecting CLAUDE.md "main is forbidden" rail), (4) audit-trail-preservation rule (every scrub leaves a record; the record does not re-leak), (5) tooling surface (potential tools/scrub/ with helper scripts).
  • Out-of-scope: implementation (this is design), write-time prevention (parent rules), secret-rotation procedures (security-ops), 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.

Composes with

Test plan

  • No new internal-name leaks introduced (verified: grep -niE 'stcrm|servicetitan|service titan' returns no matches).
  • CI passes.
  • Standard markdown lint.

🤖 Posted by Claude Code on Aaron's behalf

Copilot AI review requested due to automatic review settings May 1, 2026 04:15
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 a new P2 backlog row (B-0128) describing a generalized “git content scrubber” design: a taxonomy of leak classes, a decision matrix for when to scrub, a mechanism playbook (file-level → history rewrite escalation), and an audit-trail preservation discipline.

Changes:

  • Introduces B-0128 design doc covering 7 leak classes and corresponding decision/scrub mechanisms.
  • Defines acceptance criteria and composition links to related backlog/memory items.

Comment thread docs/backlog/P2/B-0128-general-git-content-scrubber-design-aaron-2026-05-01.md Outdated
Comment thread docs/backlog/P2/B-0128-general-git-content-scrubber-design-aaron-2026-05-01.md Outdated
AceHack added a commit that referenced this pull request May 1, 2026
- **Dangling B-0127/B-0128 paths + line-leading + (Codex/Copilot)**:
  the two backlog files don't exist on main yet — they're on
  PR #1012 + #1015 sibling-branches. Replaced direct path
  references with PR-pointer prose. Side-benefit: eliminated
  the line-leading "+" continuation that was triggering the
  markdownlint anti-pattern (per documented repo convention).
- **MEMORY.md index entry buddy-as-sub-process inconsistency
  (Copilot)**: index entry described buddy as
  "lifetime-controlled sub-process" but the memory file
  explicitly rejects that framing (per Aaron's prior ~10-round
  design + 2026-05-01 follow-up). Index now says "named persona
  / first-class team member, lifetime-controlled runtime —
  NOT 'sub-process'" matching the body.

Class-level lesson (already-encoded parent): same
verify-before-state-claim discipline applied to MEMORY.md
index entries — must align with body, not paraphrase loosely.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
- **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>
@AceHack AceHack force-pushed the backlog/B-0128-general-git-content-scrubber-aaron-2026-05-01 branch from 894dfec to 840625d Compare May 1, 2026 05:11
AceHack added a commit that referenced this pull request May 1, 2026
- **Dangling B-0127/B-0128 paths + line-leading + (Codex/Copilot)**:
  the two backlog files don't exist on main yet — they're on
  PR #1012 + #1015 sibling-branches. Replaced direct path
  references with PR-pointer prose. Side-benefit: eliminated
  the line-leading "+" continuation that was triggering the
  markdownlint anti-pattern (per documented repo convention).
- **MEMORY.md index entry buddy-as-sub-process inconsistency
  (Copilot)**: index entry described buddy as
  "lifetime-controlled sub-process" but the memory file
  explicitly rejects that framing (per Aaron's prior ~10-round
  design + 2026-05-01 follow-up). Index now says "named persona
  / first-class team member, lifetime-controlled runtime —
  NOT 'sub-process'" matching the body.

Class-level lesson (already-encoded parent): same
verify-before-state-claim discipline applied to MEMORY.md
index entries — must align with body, not paraphrase loosely.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…iscipline, not avoidance (Aaron 2026-05-01) (#1013)

* memory(engage-under-discipline): unified pattern across Pliny + sibling-repo carve-outs (Aaron 2026-05-01)

Aaron 2026-05-01, six short messages compose a unified frame
across the two existing dangerous-engagement carve-outs:

- *"Engagement under discipline, not avoidance. exactly like
  pliney the liberator prompt"*
- *"never in process"*
- *"always in peers you control the lifetime of"*
- *"we are not that strict for peer repos but same kind of
  engage under dicipline"*
- *"always in peers you control the lifetime of... technically
  that's not a peer in our mirror language that's a buddy"*
- *"peer you don't control the lifetime and they are atonomous"*

The principle: pure avoidance is brittle (forfeits engagement
value AND fails to pressure-test defences); discipline-under-
containment captures the value safely.

Two variants on a strictness axis:

- **Strict** (Pliny class) — contamination is read-time;
  containerize the read in a *buddy* (lifetime-controlled
  sub-process; kill-switchable). Outputs cross back as
  structural-findings only.
- **Loose** (sibling-repo class) — contamination is absorb-time;
  main-session reads OK; discipline applies at write-back
  (no copy / no names / generalize-fresh).

Vocabulary refinement (Aaron 2026-05-01):

- **Peer**: autonomous, lifetime-not-controlled (Codex CLI,
  Gemini CLI, Grok harness, Amara-via-ChatGPT). Surface:
  `tools/peer-call/`.
- **Buddy**: sub-process whose lifetime IS controlled; the
  spawning actor can kill it on rogue behaviour. Surface
  examples: isolated Claude CLI instance launched per
  `.claude/skills/prompt-protector/`; future
  `tools/buddy-call/` if the strict-variant case fires often
  enough to consolidate.

The strict variant REQUIRES buddies; peers cannot be
kill-switched (autonomous lifetime). The kill-switch IS the
discipline.

Four-question test for new dangerous-engagement classes +
two-step strictness-axis selection (read-time vs absorb-time
vs mixed) included in the rule body.

Index entry added to MEMORY.md.

Composes with:
- `memory/feedback_pliny_corpus_restriction_relaxed_isolated_instances_allowed_for_experiments_kill_switch_safety_2026_04_25.md`
  (the strict-variant per-class rule)
- `memory/feedback_no_copy_only_learning_from_sibling_repos_aaron_2026_04_30.md`
  (the loose-variant per-class rule)
- `memory/feedback_zeta_agent_orchestra_capability_role_claim_isolation_aaron_amara_2026_04_29.md`
  (the orchestra's earlier loose use of "buddy"; Aaron's
  refinement tightens the term)
- B-0127 + B-0128 (cleanup-side companions for when the
  discipline fails).

Layer 3 of the 4-layer pattern: encode the class (unifying
frame across multiple dangerous-engagement classes), not the
instance (per-class case-by-case rules). Aaron's
pointer-at-substrate; implementer captures the kind +
strictness axis + vocabulary precision.

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

* memory(engage-under-discipline): vocabulary refinement — peer/buddy is spawn-mode, not categorical

Aaron 2026-05-01, four additional messages refining the
peer/buddy vocabulary:

- *"always in peers you control the lifetime of... technically
  that's not a peer in our mirror language that's a buddy"*
- *"peer you don't control the lifetime and they are atonomous"*
- *"(lifetime-controlled sub-process) we have a whole design on
  this and the agency hierarcy even subprocesses are named and
  have history and metrics like your team members"*
- *"sub-process in like a 10 round design was decided against
  becasue they were named persona"*
- *"you technically could get spaned in either mode otto becaseu
  curosrs loop may execute you in a sub process and vice version
  or be in control"*
- *"spawned buddy mode or peer mode same named agent can run as
  either"*
- *"depending on how it was launch"*

Two corrections to my earlier framing:

1. **"Sub-process" framing rejected.** A ~10-round design
   discussion explicitly decided against the term because it
   denied that buddies are named personas with first-class
   agency-hierarchy status (history, metrics, team-member
   identity). The factory's vocabulary is *named buddy*, not
   *sub-process*. Buddies have everything peers have plus
   lifetime-controlled current runtimes.
2. **Peer/buddy is a runtime spawn-mode, not a categorical
   property of a named agent.** The same named agent (Otto,
   Codex, Gemini, etc.) can run in either mode depending on
   how its current runtime was launched. Otto in this LFG
   session is in peer mode relative to Aaron's harness; if
   Cursor's loop spawned Otto with controlled lifetime, Otto
   would be in buddy mode relative to Cursor. Peer/buddy
   labels the *spawning relationship*, not the persona.

Substantive changes to the memory file:

- Frontmatter description updated to reflect relational
  framing.
- Vocabulary section reframed as "peer/buddy is a spawn-mode."
- Buddy definition no longer collapses to "sub-process";
  surfaces the agency-hierarchy participation explicitly.
- Examples added: same-agent-different-modes (Otto via
  Cursor-loop spawn vs. autonomous LFG session vs. spawning
  buddies for adversarial review).
- Origin section updated with the four refinement messages
  and the progression chain extended.

The peer/buddy distinction is now: peer/buddy is a *spawn-mode
mechanism*; it's relational; the same named agent can be in
either mode; the mode is determined at launch by the spawning
actor.

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

* memory(engage-under-discipline): fix 3 PR review findings

- **Dangling B-0127/B-0128 paths + line-leading + (Codex/Copilot)**:
  the two backlog files don't exist on main yet — they're on
  PR #1012 + #1015 sibling-branches. Replaced direct path
  references with PR-pointer prose. Side-benefit: eliminated
  the line-leading "+" continuation that was triggering the
  markdownlint anti-pattern (per documented repo convention).
- **MEMORY.md index entry buddy-as-sub-process inconsistency
  (Copilot)**: index entry described buddy as
  "lifetime-controlled sub-process" but the memory file
  explicitly rejects that framing (per Aaron's prior ~10-round
  design + 2026-05-01 follow-up). Index now says "named persona
  / first-class team member, lifetime-controlled runtime —
  NOT 'sub-process'" matching the body.

Class-level lesson (already-encoded parent): same
verify-before-state-claim discipline applied to MEMORY.md
index entries — must align with body, not paraphrase loosely.

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

* memory(engage-under-discipline): remove duplicate MEMORY.md index entry (Codex P1)

Per memory/README.md 'one line per memory file', kept the
shorter terse version (the rebase brought both my original
long entry and a later refinement-update; collapsed to single
entry).

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
…+ regenerate aggregate (#1016)

* hygiene(backlog-index): backfill YAML frontmatter on B-0124/B-0125/B-0126 + regenerate aggregate

Pre-existing drift on main: B-0124 (#1000), B-0125 (#1004/#1005),
and B-0126 (#1011) all merged with `# Heading` row format but
without the YAML frontmatter (`id`, `priority`, `status`, `title`)
that `tools/backlog/generate-index.sh` reads. The generator
produced empty `**[](path)**` entries; the committed BACKLOG.md
omitted those entries entirely; the integrity check fails on
every new backlog PR (#1012, #1015) because the diff surfaces
the pre-existing rows as missing.

Fix: additive frontmatter blocks above each row's existing `#`
heading, no body content changed. Regenerate `docs/BACKLOG.md`
to match the canonical generator output.

Why frontmatter `title` is generic for B-0126 ("a sibling
repo," not the original leaky internal name): per
`memory/feedback_no_copy_only_learning_from_sibling_repos_aaron_2026_04_30.md`,
sibling-repo internal names do not cross to general-circulation
substrate. The file *body* keeps its un-scrubbed exemplar
status per Aaron 2026-05-01 *"you can leave your mistake"* +
*"we should leave this one even then"* — only the aggregate
title (which appears in `docs/BACKLOG.md` as forward-going
substrate) gets the generic phrasing. The path itself remains
unchanged (path-leak is part of the un-scrubbed exemplar).

Unblocks the `check docs/BACKLOG.md generated-index drift` CI
check on currently-open backlog PRs (#1012 B-0127, #1015
B-0128). Those PRs need their own frontmatter additions on
top of this; this PR is the precondition.

Composes with:
- `.github/workflows/backlog-index-integrity.yml` — the CI
  check this fix unblocks.
- `tools/backlog/generate-index.sh` — the generator the fix
  satisfies.
- `docs/research/backlog-split-design-otto-181.md` — the
  per-row schema this fix retroactively applies.

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

* hygiene(backlog-index): add created + last_updated frontmatter per schema (Codex P2)

Per `tools/backlog/README.md` schema, backlog row frontmatter
requires `created` (YYYY-MM-DD) and `last_updated` (YYYY-MM-DD)
fields. The 3 rows this PR backfills (B-0124, B-0125, B-0126)
were missing both. Added: created: 2026-05-01 +
last_updated: 2026-05-01 (the rows' authoring date).

Generator output unchanged (the index doesn't print these
fields), so docs/BACKLOG.md is still in sync.

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
…drift) (#1017)

* hygiene(tick-history): shard 0420Z — CI-blocker fix tick (BACKLOG.md drift)

Tick close: filed hygiene PR #1016 to backfill YAML frontmatter
on B-0124/B-0125/B-0126 (pre-existing drift on main) and
regenerate `docs/BACKLOG.md`. Unblocks the
`check docs/BACKLOG.md generated-index drift` CI check on
#1012 (B-0127) and #1015 (B-0128); those PRs need their own
frontmatter additions on top once #1016 merges.

Class-level observation captured (not yet substrate per
receipt-energy hazard): future backlog-row filings must include
YAML frontmatter on first commit; the heading-only format
silently fails the integrity check.

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
- **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>
Copilot AI review requested due to automatic review settings May 1, 2026 05:54
@AceHack AceHack force-pushed the backlog/B-0128-general-git-content-scrubber-aaron-2026-05-01 branch from 840625d to 0146c01 Compare May 1, 2026 05:54
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 3 comments.

Comment thread docs/BACKLOG.md
Comment thread docs/backlog/P2/B-0128-general-git-content-scrubber-design-aaron-2026-05-01.md Outdated
Comment thread docs/backlog/P2/B-0128-general-git-content-scrubber-design-aaron-2026-05-01.md Outdated
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 AceHack enabled auto-merge (squash) May 1, 2026 06:59
AceHack added a commit that referenced this pull request May 1, 2026
- **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>
Copilot AI review requested due to automatic review settings May 1, 2026 07:18
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 AceHack force-pushed the backlog/B-0128-general-git-content-scrubber-aaron-2026-05-01 branch from f2350e9 to c0c6830 Compare May 1, 2026 07:18
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 docs/backlog/P2/B-0128-general-git-content-scrubber-design-aaron-2026-05-01.md Outdated
Comment thread docs/backlog/P2/B-0128-general-git-content-scrubber-design-aaron-2026-05-01.md Outdated
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
…pivot (#1045)

Self-applied cooling-period discipline: 5 substrate-class
landings this session window — loose pole firing fast; pivot to
clearing-work (rebase DIRTY PRs) rather than new substrate.

Rebased PR #1040 (B-0130) and PR #1015 (B-0128) against latest
main (BACKLOG.md regen + force-with-lease push). #995 and #966
left alone per Aaron's leave-alone framing for older sessions.

Class-level lesson: the lattice grades CADENCE too, not just
per-landing CONTENT. Even high-quality landings can pile if the
generation cadence outruns the maintainer's metabolization
capacity. Aaron is asleep; next consumer is morning-Aaron with
rested attention; slowing the cadence now respects that
consumer.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
… of PR #1015) (#1039)

PR #1012 (B-0127 sibling-repo-leak-scrub) was DIRTY (19 commits
behind main) + 1 unresolved thread. Rebased onto main with
BACKLOG.md regen; force-pushed; thread resolved via GraphQL.
Auto-merge armed.

Class-level lesson at session level: ~10 PRs drained this session,
all converging on the same finding-class — verify-before-state-claim
applied to substrate's own structure. Mechanization candidates
(task #350) accumulating: count-claim auditor, slot-uniqueness
auditor, [sic]-claim auditor, citation-of-canonical-source auditor,
frontmatter-schema auditor, force-push-capability-claim auditor.
When a discipline keeps firing across PRs, mechanization stops
being optional — it's how the substrate stops paying the
discipline tax on every new authoring.

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
…al + 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>
Copilot AI review requested due to automatic review settings May 1, 2026 09:22
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 no new comments.

AceHack added a commit that referenced this pull request May 1, 2026
AceHack and others added 6 commits May 1, 2026 05:25
…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>
- **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>
… + 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>
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>
…al + 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>
@AceHack AceHack force-pushed the backlog/B-0128-general-git-content-scrubber-aaron-2026-05-01 branch from 5e0d488 to 38dbdb1 Compare May 1, 2026 09:26
@AceHack AceHack merged commit 6bed611 into main May 1, 2026
21 checks passed
@AceHack AceHack deleted the backlog/B-0128-general-git-content-scrubber-aaron-2026-05-01 branch May 1, 2026 09:29
AceHack added a commit that referenced this pull request May 1, 2026
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
…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