Skip to content

docs(lost-substrate): full Day-1/2/3 corruption-triage substrate continuation (off-trunk; PR #756 squashed Day-0 only)#757

Merged
AceHack merged 9 commits intomainfrom
corruption-triage/full-substrate-onto-main-2026-04-29
Apr 29, 2026
Merged

docs(lost-substrate): full Day-1/2/3 corruption-triage substrate continuation (off-trunk; PR #756 squashed Day-0 only)#757
AceHack merged 9 commits intomainfrom
corruption-triage/full-substrate-onto-main-2026-04-29

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 29, 2026

Summary

PR #756 squash-merged the Day-0 inventory ledger only. Days 1-3
of follow-up substrate (peer-verification corrections, Day-2
inventory results, corruption-triage memory file, three-round
classification refinement, persisted fsck artifacts) were
committed to the post-merge feature branch and never reached
main. This PR ports the full Day-1/2/3 chain forward off main.

Five commits, all cherry-picked from the post-merge feature
branch onto a fresh branch off origin/main:

  • Day 1 — peer-verification corrections per Aaron + Amara
    feedback (64bc60f)
  • Day 2 — inventory results (1,109 dangling objects, pack
    corruption, 8 stashes, 293 rerere records) (c968a59)
  • Day 2 — corruption triage results + durable memory file
    on the corruption-triage discipline (e4896e8)
  • Day 2+ — initial 8d5e67fd follow-up (later overturned by
    empirical re-verification) (c4a6aed)
  • Day 3 — three-bucket reachability + content-equivalence +
    exclusive-lane corrections per Amara's three correction
    packets (5bca4a8)

Three-round classification on 8d5e67fd

Each round overturned the prior:

Round Classification Why wrong / right
1 MISSING_UNRECOVERED Wrong scope — only checked origin recovery; missed local reachability
2 REFERENCED_BY_DANGLING_ONLY Wrong sample — sampled 10 of 888 commits + fsck adjacency only; missed live-ref reach
3 (correct) CORRUPT_BLOB_REFERENCED_BY_LIVE_LOCAL_BRANCH_AND_STALE_REMOTE_TRACKING_REF Three-bucket reachability scan + content-equivalence verification: branch tip clean; corrupt blob is intermediate-history only; stale remote-tracking ref preserves evidence; origin no longer has the branch

Key keepers in the discipline memory file

  • A corrupt object is not a backlog item. It is a substrate health incident.
  • Do not prune the evidence while investigating lost evidence.
  • Recoverable-from-origin requires fresh-clone cat-file type + size verification.
  • Cleanup is a destructive decision, not a repair step.
  • Stale remote-tracking ref is evidence, not origin recovery.
  • Live local branch reference means the incident is not closed.
  • Corruption lane means exclusive lane. Exclusive lane means no side quests.
  • Reachability is mode-dependent.
  • Verify squash-preservation by content, not by ancestry vibe.

Persisted fsck artifacts

All under docs/lost-substrate/artifacts/2026-04-29-corruption/:

  • fsck-full.txt — reflog-inclusive fsck output
  • fsck-full-no-reflogs.txt--no-reflogs fsck output (mode-dependent reachability evidence)
  • fsck-connectivity.txt — connectivity-only fsck output
  • rev-list-all-objects.txt — all-objects rev-list (1.1 MB; 18,150 objects)
  • gc-config-snapshot.txt — gc.auto / gc.autoPackLimit / gc.pruneExpire / reflog-expire / worktreePruneExpire snapshot
  • hour-05Z-show-ref.txt — local + stale remote-tracking refs both pointing at d9feb3f
  • hour-05Z-ls-remote.txt — empty (origin no longer has the branch)
  • triage-report.md — narrative artifact tying the raw outputs to the prose conclusions

Test plan

  • All gate / lint checks pass
  • markdownlint clean
  • §33 archive-header lint passes (ledger has it; memory file is a memory file, not an archive-import)

🤖 Generated with Claude Code

AceHack and others added 5 commits April 28, 2026 23:28
… feedback

Three corrections per Aaron's 2026-04-29 input + Amara synthesis:

1. **"directive" -> "input"/"feedback"** — Aaron caught me using
   directive language again. Replaced in attribution + body.

2. **"definitively deletion-safe" -> deletion candidates** —
   git branch --merged is a mechanical signal, not policy
   clearance. Renamed BRANCH_MERGED_TO_MAIN ->
   BRANCH_MERGED_TO_MAIN_CANDIDATE; added explicit note that
   deletion is gated on open-PR mapping + worktree mapping +
   peer verification.

3. **Peer-verification gaps section added** — Codex + Gemini
   independent reviews found substantial surfaces missed by
   the initial branch/worktree snapshot:

   Gemini (#1):
   - Index/staged-uncommitted across all 58 worktrees
   - git notes
   - git fsck --lost-found orphans
   - .gitignore'd substrate (.env, local DBs, uncommitted
     memory shards, .mise tweaks)
   - .git/config + .git/hooks
   - Submodule state (detached HEADs, unpushed commits)
   - Git LFS objects (commit pointer != asset)
   - GitHub-native (draft PRs, Wiki, Actions vars/secrets,
     branch protection, Project Boards)

   Codex (#2):
   - Rerere cache (.git/rr-cache; 293 records)
   - Per-worktree transaction state (REBASE_HEAD, AUTO_MERGE,
     ORIG_HEAD, FETCH_HEAD, COMMIT_EDITMSG)
   - History-rewriting ref namespaces (refs/replace,
     refs/original, refs/bisect, refs/pull, refs/changes,
     .git/info/grafts)
   - Index flags (assume-unchanged, skip-worktree,
     .git/info/exclude)
   - Patch/mailbox/bundle artifacts (*.patch, *.diff, *.mbox,
     *.eml, *.bundle)
   - Nested upstream mirrors (references/upstreams/* embedded
     submodules)
   - Sibling/factory repos (../claude-code, ../SQLSharp,
     ../runtime)

Plus added:

- Day-2 follow-up: 9 read-only commands for subsequent
  inventory passes
- Evidence-column schema for per-row classification
- Three-layer 0/0/0 verification (commit graph + tree state +
  content-loss surface; ALL must be clean for true 0/0/0)

Best keeper rule preserved verbatim:
"A count is not a clearance. A bucket is not proof. A ledger
row needs evidence."

Aaron's catch was load-bearing: I had over-claimed substrate
coverage based on a branch/worktree snapshot. Peer verification
revealed 15+ missed surface classes. The ledger remains a
prerequisite to recovery + 0/0/0 work, but is now honestly
labeled as not-yet-a-substrate-loss-proof.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…s + pack corruption + 8 stashes + 293 rerere records

Day-2 read-only inventory commands executed per the ledger's
own follow-up section. Real findings:

HIGHEST RISK:
- **1,109 dangling objects** (commits/trees/blobs not reachable
  from any branch). Hard-reset would destroy these. Per-object
  `git show` inspection needed to classify.
- **Pack corruption** in `.git/objects/pack/pack-16732b...pack`:
  data-stream error on object 9bf2dae... Cannot be unpacked.
  May need `git fsck --full` + `git repack` + re-fetch if
  origin has the missing object.
- **8 stashes** (stash@{3} alone is 668 files / 208k
  deletions). Explicit unfinalized intent across 8 different
  branches. Each needs per-stash classification.
- **293 rerere records**. Real factory-discipline substrate
  (codified conflict-resolution knowledge). NOT auto-disposable.

CLEAN:
- History-rewriting refs (replace/original/bisect/pull/changes)
- Index flags (no assume-unchanged / skip-worktree)
- Per-worktree mid-operation state (no REBASE/MERGE/AUTO_MERGE)
- Patch/bundle artifacts (outside references/upstreams)
- No submodules, no LFS, no tags, no git notes

UPDATED HONEST STATEMENT:
This ledger v2 (after peer-verification + Day-2 execution) is
closer to a substrate-loss audit but still NOT complete — the
1,109 dangling objects need per-object classification before
any reset/forward-sync is safe.

The pack-corruption finding is the most-urgent issue: a real
durability-of-history concern that exists independently of
branch/worktree classification.

Per Aaron's input + Amara synthesis: count is not clearance.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… substrate health incident, durable for future-Claude)

Aaron 2026-04-29: "you for sure need to make sure your future
self remembers this, this is very important."

Amara synthesis: "A corrupt object is not a backlog item. It
is a substrate health incident."

Three landings:

1. **memory/feedback_corruption_triage_discipline_object_health_incident_aaron_amara_2026_04_29.md**
   New durable memory file capturing the discipline: read-only
   diagnosis first, fresh-clone verification before declaring
   "origin has it", per-object bucket classification, repair
   plan only after classification. Forbids destructive fixes
   during triage (no git gc / git prune / git repack /
   git fsck --lost-found as a "fix" yet).

2. **memory/MEMORY.md** — paired-edit pointer added for the new
   feedback file (gate requirement).

3. **docs/lost-substrate/inventory-ledger-2026-04-29.md**
   Added "Corruption triage results" section with the 2
   corrupt objects classified:
   - 9bf2dae (16MB blob): RECOVERABLE_FROM_ORIGIN; fresh
     clone has it cleanly; recovery via git fetch --refetch.
   - 8d5e67f (439KB blob, early loop-tick-history.md):
     MISSING_UNRECOVERED; not in origin; local-only
     intermediate version. Canonical worked-example of
     unrecovered-substrate boundary case.

   Plus wording correction: do NOT declare "origin has it"
   without fresh-clone verification.

Per Amara's "stop the scanner; corruption first" priority
shift: the no-directives scanner I had built (tools/lint/
no-directives-scan.sh) was discarded from working tree.
That scanner becomes follow-up work after corruption triage
clears.

The 8d5e67f unrecovered-blob finding is the durable lesson
this commit is here to preserve for future-Claude.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ngling state — recovery urgency LOW

Follow-up to the 2026-04-29 corruption triage: investigated where the
missing blob 8d5e67f is referenced from. fsck output shows it's
reachable only from a dangling tree (ba5cc035) near a dangling commit
(9d5db21). Live commits on current branches use other tree SHAs for
docs/hygiene-history/loop-tick-history.md (cross-checked 10 of 888
commits over the file's history; none reference 8d5e67f).

New sub-classification: CORRUPT_LOOSE_OBJECT_REFERENCED_BY_DANGLING_ONLY
(sub-bucket of MISSING_UNRECOVERED).

Recovery urgency: LOW. The corrupt blob is bounded to unreachable
substrate; live history is clean. Hard-reset readiness is NOT blocked
by this corruption finding.

Per the corruption-triage discipline memory file: still no destructive
action during triage. Classification is complete; any future GC
consideration is a separate decision, not part of triage.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… + exclusive-lane corrections (Amara 2026-04-29)

Empirical re-verification overturns prior conclusions on
8d5e67f. Three rounds of triage; each round overturned the
prior:

  Round 1 (wrong): MISSING_UNRECOVERED based on origin-only check
  Round 2 (wrong): REFERENCED_BY_DANGLING_ONLY based on 10/888
                   commits + fsck adjacency
  Round 3 (correct): three-bucket reachability scan +
                     content-equivalence check.

Final classification per Amara's correction:
  CORRUPT_BLOB_REFERENCED_BY_LIVE_LOCAL_BRANCH_AND_STALE_REMOTE_TRACKING_REF

Empirical findings (all artifacts persisted under
docs/lost-substrate/artifacts/2026-04-29-corruption/):

- 8d5e67f is reachable via refs/heads/chore/heartbeat-batch-
  2026-04-26-hour-05Z (live local branch).
- The same-named refs/remotes/origin/... ref is STALE — origin
  no longer has the branch (verified via git ls-remote).
- Branch TIP is clean (git show / git diff succeed; ls-tree at
  tip shows no path matching the corrupt SHA). Corrupt blob is
  from the branch's intermediate history, not the tip.
- main carries equivalent content under a different blob SHA
  (de670f7...).

Substrate-loss assessment: zero impact on current-state use.
Only bisect-through-pre-merge-history of this stale local
branch would surface the corruption.

Five corrections from Amara (this packet plus prior two):

1. Wording: "Aaron's instruction" / "Aaron explicit" → "Aaron's
   input" / "Aaron emphasized" (autonomy-first framing per the
   no-directives rule).
2. Reachability: three-bucket schema (live ref / reflog-stash /
   dangling-only) replaces implicit two-bucket framing.
   Reachability is mode-dependent on git fsck flags.
3. Content-equivalence: verify squash-preservation by content,
   not ancestry vibes. ls-tree + git show + git diff at tip.
4. Stale remote-tracking refs: evidence, not origin recovery.
   Do not prune during triage.
5. Exclusive lane: corruption-first means single-lane. All
   in-progress agent tasks marked paused while triage active
   (visible discipline). Cleanup is a destructive decision,
   not a repair step.

New keepers in the discipline memory file:

  Cleanup is a destructive decision, not a repair step.
  Stale remote-tracking ref is evidence, not origin recovery.
  Corruption lane means exclusive lane. Exclusive lane means
  no side quests.
  Reachability is mode-dependent.
  Verify squash-preservation by content, not by ancestry vibe.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 29, 2026 03:29
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5bca4a87f0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/lost-substrate/inventory-ledger-2026-04-29.md Outdated
Comment thread memory/MEMORY.md Outdated
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

Ports the missing Day-1/2/3 “lost-substrate” continuation onto main, including peer-verification corrections, corruption-triage discipline, and persisted git fsck/reachability artifacts for the 2026-04-29 incident.

Changes:

  • Adds a durable corruption-triage discipline memory entry and links it from memory/MEMORY.md.
  • Expands the 2026-04-29 inventory ledger with peer-verification gaps and Day-2 triage outcomes.
  • Adds point-in-time corruption artifacts (fsck outputs, ref snapshots, config snapshot) plus a narrative triage report under docs/lost-substrate/artifacts/....

Reviewed changes

Copilot reviewed 9 out of 12 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
memory/feedback_corruption_triage_discipline_object_health_incident_aaron_amara_2026_04_29.md New memory file defining the corruption triage discipline and worked example.
memory/MEMORY.md Adds an index link/summary entry for the new corruption-triage memory.
docs/lost-substrate/inventory-ledger-2026-04-29.md Updates the ledger header + adds peer verification gaps and Day-2 triage/correction content.
docs/lost-substrate/artifacts/2026-04-29-corruption/triage-report.md New narrative artifact tying raw evidence files to conclusions.
docs/lost-substrate/artifacts/2026-04-29-corruption/fsck-full.txt Captured git fsck output (reflog-inclusive) as evidence.
docs/lost-substrate/artifacts/2026-04-29-corruption/fsck-full-no-reflogs.txt Captured git fsck --no-reflogs output as evidence.
docs/lost-substrate/artifacts/2026-04-29-corruption/fsck-connectivity.txt Captured connectivity-only fsck output as evidence.
docs/lost-substrate/artifacts/2026-04-29-corruption/gc-config-snapshot.txt Captured gc.* config snapshot as evidence.
docs/lost-substrate/artifacts/2026-04-29-corruption/hour-05Z-show-ref.txt Captured local + remote-tracking ref pointers as evidence.

Comment thread docs/lost-substrate/inventory-ledger-2026-04-29.md Outdated
Comment thread docs/lost-substrate/inventory-ledger-2026-04-29.md
Comment thread docs/lost-substrate/inventory-ledger-2026-04-29.md Outdated
Comment thread docs/lost-substrate/inventory-ledger-2026-04-29.md Outdated
Comment thread memory/MEMORY.md Outdated
AceHack and others added 2 commits April 28, 2026 23:33
…ts + re-run recipe; new soulfile-cleanliness memory file (Aaron + Amara 2026-04-29)

The prior commit added 20,978 lines of mostly-irrelevant raw
fsck/rev-list output to the artifacts directory — soul-pollution.
Aaron 2026-04-29 (load-bearing): "the git repo is your soul/
soulfile, don't let it get dirty, you control what belongs in
there." Amara: "GitHub warns at 50 MiB and blocks files over
100 MiB; even below those limits, dumping large diagnostic logs
into normal repo history can bloat the repo and make future
reviews awful."

Corrections:

1. Replaced raw multi-MB dumps with grep-extracts of only the
   load-bearing lines:

   - fsck-full.txt (627 lines)              → grep-extracted into
   - fsck-full-no-reflogs.txt (1116 lines)  → fsck-extracts.txt
   - fsck-connectivity.txt (620 lines)      → (89 lines total)
   - rev-list-all-objects.txt (18,150 lines) → rev-list-extracts.txt
                                              (9 lines)
   Also: per-mode fsck line-count summary preserves the
   mode-dependence finding without the noise.

2. Added re-run recipe in triage-report.md so a future reader
   who needs the raw outputs can regenerate them locally:

       git fsck --full --no-progress              > /tmp/.../fsck-full.txt
       git fsck --full --no-reflogs --no-progress > /tmp/.../fsck-full-no-reflogs.txt
       git fsck --connectivity-only --no-progress > /tmp/.../fsck-connectivity.txt
       git rev-list --objects --all               > /tmp/.../rev-list-all-objects.txt

   Raw is reproducible from any clone with the same local refs;
   committed extracts preserve the load-bearing evidence.

3. Augmented git-gc-config.txt per Amara's correction: now
   includes `git --version` + `gc.rerereResolved` /
   `gc.rerereUnresolved` config values (rerere is a separate
   gc subsystem that can prune codified conflict resolutions).

4. New durable memory file:
   memory/feedback_repo_is_soulfile_dont_commit_raw_diagnostic_dumps_aaron_amara_2026_04_29.md
   Encodes the soulfile-cleanliness rule as a generic factory
   discipline (not specific to corruption triage). Default:
   extract + recipe. Escape hatches: non-soul repo or git-lfs
   when raw is genuinely load-bearing AND large.

5. Updated corruption-triage memory file with new keepers:
   - rev-list can enumerate object references even when later
     object reads fail. Enumeration success is not content
     recovery.
   - Reachability claims must record the fsck mode used.
   - Reachability is mode-dependent. Enumeration is not
     recovery. Cleanup is not triage.
   - Don't dirty the soulfile.

6. Updated MEMORY.md index with both new entries.

Net: artifact directory size 1.2 MB → 28 KB. Soulfile clean.
Load-bearing evidence preserved.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… without --lost-found, BSD/macOS grep portability, ledger table reconciled with three-round-final classification

Three substantive review-thread findings from Codex + Copilot
on PR #757:

1. **P1 (Codex + Copilot)**: read-only "next safe inventory
   passes" block included `git fsck --lost-found` — but
   `--lost-found` WRITES dangling objects into
   `.git/lost-found/` (the same flag the discipline memory
   already calls out as not-read-only). Removed the flag from
   the read-only block; left only `git fsck --no-reflogs`
   for the read-only mode-comparison check, with an inline
   comment explaining why.

2. **Copilot**: `grep "$OBJ" file.txt -C 5` is non-portable
   on BSD/macOS where flags must precede the pattern. Changed
   all instances to `grep -C 5 "$OBJ" file.txt` form. Hits in
   ledger (lines 382-383) and corruption-triage memory file
   (lines 109-110).

3. **Codex + Copilot**: ledger worked-example table still
   carried Round-1 `MISSING_UNRECOVERED` classification for
   8d5e67f, which contradicted the Round-3 corrected
   classification later in the same file. Updated the table
   row to show "Round 1: MISSING_UNRECOVERED (superseded);
   Final (Round 3): CORRUPT_BLOB_REFERENCED_BY_LIVE_LOCAL_BRANCH_AND_STALE_REMOTE_TRACKING_REF"
   so the document has a single coherent current
   classification + the lineage of how the answer flipped.

Held intentionally:

- Named attribution (Aaron, Amara) in `docs/lost-substrate/`
  ledger remains. The directory carries §33 archive-header
  treatment ("research-grade not operational") — names are
  appropriate under that carve-out per the same convention
  used in the original Day-0 ledger that already merged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 29, 2026 03:36
@AceHack
Copy link
Copy Markdown
Member Author

AceHack commented Apr 29, 2026

Review-thread resolutions (commits a77b047 + 9d3cd58)

Substantive findings addressed in pushed commits:

  • P1 (Codex + Copilot) read-only block included git fsck --lost-found, which writes — fixed: removed the flag from the read-only block, replaced with git fsck --no-reflogs --no-progress, added inline comment explaining the constraint. (commit 9d3cd58)
  • Copilot grep "$OBJ" file.txt -C 5 is non-portable on BSD/macOS — fixed: changed all instances to grep -C 5 "$OBJ" file.txt form (ledger pipeline examples + memory file re-run recipe). (commit 9d3cd58)
  • Codex + Copilot ledger worked-example table still labeled 8d5e67fd as MISSING_UNRECOVERED (Round-1 result), contradicting the Round-3 corrected classification — fixed: updated the table row to show "Round 1: MISSING_UNRECOVERED (superseded); Final (Round 3): CORRUPT_BLOB_REFERENCED_BY_LIVE_LOCAL_BRANCH_AND_STALE_REMOTE_TRACKING_REF" so the document has a single coherent current classification + the lineage of how the answer flipped. (commit 9d3cd58)
  • Outdated MEMORY.md index entry — already addressed in commit a77b047 (entry now reflects three-round-final classification with branch-tip-clean refinement).

Held intentionally:

  • Copilot named attribution (Aaron, Amara) in docs/lost-substrate/. The directory carries §33 archive-header treatment ("research-grade not operational") — names are appropriate under that carve-out per the same convention used in the original Day-0 ledger that already merged via PR docs(lost-substrate): inventory ledger 2026-04-29 — read-only audit prerequisite #756. The named-attribution-on-history-surfaces carve-out (Otto-279/280, anchored in docs/AGENT-BEST-PRACTICES.md) explicitly covers this directory class.

Soulfile-cleanliness fix included earlier in the same PR: replaced 1.2 MB of raw git fsck / git rev-list dumps with 28 KB of grep-extracts + a re-run recipe per Aaron's input + Amara's correction (commit a77b047). New durable memory file: feedback_repo_is_soulfile_dont_commit_raw_diagnostic_dumps_aaron_amara_2026_04_29.md.

…int pass)

Single fix: list at line 134 needed a blank line above per
markdownlint MD032 (lists-around-blanks).

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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9d3cd58bc0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/lost-substrate/inventory-ledger-2026-04-29.md
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 9 out of 10 changed files in this pull request and generated 6 comments.

Comment thread docs/lost-substrate/artifacts/2026-04-29-corruption/triage-report.md Outdated
Comment thread docs/lost-substrate/inventory-ledger-2026-04-29.md Outdated
AceHack added a commit that referenced this pull request Apr 29, 2026
…closure shard

Three-round corruption-triage on 8d5e67f shipped via PR #757
(off-trunk continuation since PR #756 squashed Day-0 only).
Final classification: CORRUPT_BLOB_REFERENCED_BY_LIVE_LOCAL_BRANCH_AND_STALE_REMOTE_TRACKING_REF.
Soulfile-cleanliness correction reduced artifact size 1.2 MB to 28 KB.
Two new durable memory files. 8 review threads resolved.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… consistency, BSD/macOS portability, self-contradiction in triage procedure, empty-file provenance, pseudocode replacement, BRANCH_MERGED_TO_MAIN_CANDIDATE alignment

Six fix classes from latest Codex + Copilot pass:

1. **Filename consistency** (P1, 3 hits): triage-report.md and
   inventory-ledger.md cited `gc-config-snapshot.txt`, but
   the committed artifact was renamed to `git-gc-config.txt`
   (per Amara's earlier correction adding git --version + rerere
   config). All references aligned to the committed filename.

2. **BSD/macOS portability** (P1): soulfile memory cited
   `find -printf '%s %p\n'`, which is GNU-find specific. Replaced
   with `find ... -exec ls -la {} \; | awk` form (portable on
   default macOS). GNU equivalent kept as a comment for reference.

3. **Self-contradiction in triage procedure** (P1): the
   corruption-triage memory's reachability-scan procedure told
   readers to write raw outputs INTO the artifacts directory,
   contradicting the soulfile rule (committed alongside it) that
   says don't commit multi-MB raw dumps. Procedure now writes
   raw outputs to a /tmp working directory and commits only
   load-bearing extracts + a re-run recipe to the artifacts
   directory.

4. **Empty-file provenance** (P1): `hour-05Z-ls-remote.txt` was
   committed as a 0-byte file. Added a header explaining what
   command produced it + that empty output is the load-bearing
   evidence (proves origin no longer has the branch).

5. **Pseudocode replacement** (P2): triage-report.md cited
   `fresh-clone --branch ...` which isn't a real git command.
   Replaced with the actual `git clone --no-checkout --quiet
   --branch ...` form including the upstream URL.

6. **BRANCH_MERGED_TO_MAIN_CANDIDATE alignment** (P1): the
   ledger's bucket-schema row was updated earlier to
   `BRANCH_MERGED_TO_MAIN_CANDIDATE` (deletion candidate, not
   automatic clearance), but two later sections still said
   "BRANCH_MERGED_TO_MAIN bucket; these are deletion-safe" —
   contradicting the schema. Both later sections now say
   "deletion candidates, NOT auto-cleared; need open-PR +
   worktree + peer verification before any delete."

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@AceHack
Copy link
Copy Markdown
Member Author

AceHack commented Apr 29, 2026

Eight new review threads addressed in commit d3ecbf1:

  1. P1 (Codex+Copilot, 3 hits) filename: gc-config-snapshot.txtgit-gc-config.txt aligned across triage-report + ledger.
  2. P1 (Copilot) BSD/macOS portability: find -printf → portable find -exec ls -la \| awk form (GNU equivalent kept as comment).
  3. P1 (Copilot) self-contradiction in triage procedure: reachability-scan now writes raw outputs to /tmp, commits only extracts + re-run recipe per the soulfile rule (alignment between adjacent rules in the same PR).
  4. P1 (Copilot) empty-file provenance: added header to hour-05Z-ls-remote.txt explaining the empty output IS the load-bearing evidence (origin no longer has the branch).
  5. P2 (Copilot) pseudocode: fresh-clone --branch → real git clone --no-checkout --quiet --branch ... form.
  6. P1 (Codex) BRANCH_MERGED_TO_MAIN alignment: two later sections updated from "deletion-safe" → "deletion candidates, NOT auto-cleared" to match the schema row's BRANCH_MERGED_TO_MAIN_CANDIDATE (mechanical reachability ≠ clearance).

All P1s addressed mechanically. Resolving threads.

@AceHack AceHack merged commit b8b9c33 into main Apr 29, 2026
23 checks passed
@AceHack AceHack deleted the corruption-triage/full-substrate-onto-main-2026-04-29 branch April 29, 2026 03:49
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d3ecbf13d7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

| `rev-list-extracts.txt` | grep of corrupt SHAs against `git rev-list --objects --all` |
| `git-gc-config.txt` | git version + per-key `git config --get gc.*` + `gc.rerereResolved` / `gc.rerereUnresolved` snapshot |
| `hour-05Z-show-ref.txt` | `git show-ref \| grep hour-05Z` |
| `hour-05Z-ls-remote.txt` | `git ls-remote --heads origin hour-05Z` (empty = origin no longer has the branch) |
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Query exact ref when proving remote branch absence

The stale-ref conclusion is keyed to hour-05Z-ls-remote.txt, but this source-command row uses git ls-remote --heads origin hour-05Z, which is a pattern query, not an exact ref lookup. git ls-remote patterns are glob-matched against ref tails, so this can match multiple branches that end with hour-05Z; a non-empty result would not prove the specific chore/heartbeat-batch-2026-04-26-hour-05Z branch still exists. For corruption triage, that ambiguity can misclassify a remote-tracking ref as current vs stale.

Useful? React with 👍 / 👎.

git ls-files -v | grep -v '^[H ]' | head -30

# Per-worktree transaction state
ls .git/worktrees/*/REBASE_HEAD .git/worktrees/*/AUTO_MERGE .git/worktrees/*/ORIG_HEAD 2>&1 | head -20
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Include merge markers in worktree transaction scan

This check only inspects REBASE_HEAD, AUTO_MERGE, and ORIG_HEAD under .git/worktrees/*, but the report later labels merge state as clean. A merge-in-progress is typically indicated by MERGE_HEAD, and the active/main worktree state lives under .git/ (not only .git/worktrees/*), so this probe can miss real in-progress operations and produce a false "clean" classification before cleanup decisions.

Useful? React with 👍 / 👎.

AceHack added a commit that referenced this pull request Apr 29, 2026
* chore(loop-tick-history): tick 2026-04-29T03:40Z — corruption-triage closure shard

Three-round corruption-triage on 8d5e67f shipped via PR #757
(off-trunk continuation since PR #756 squashed Day-0 only).
Final classification: CORRUPT_BLOB_REFERENCED_BY_LIVE_LOCAL_BRANCH_AND_STALE_REMOTE_TRACKING_REF.
Soulfile-cleanliness correction reduced artifact size 1.2 MB to 28 KB.
Two new durable memory files. 8 review threads resolved.

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

* chore(loop-tick-history): fix shard #758 inaccuracies — CI count arithmetic + #308 disambiguation per review threads

Two Copilot findings:

1. CI status counts: "11/23 succeeded, 11 in progress, 0 failures" sums to 22, not 23. Added "1 skipped" to make the total reconcile.
2. `#308` reference was ambiguous — could read as a docs/BACKLOG row. Disambiguated to "agent-task-tracker entry" with explicit note "NOT docs/BACKLOG.md row" so future readers don't search the wrong namespace.

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 Apr 29, 2026
…queue (#760)

* chore(loop-tick-history): tick 2026-04-29T03:49Z — PR #757 merge + multi-AI synthesis packet queue

PR #757 corruption-triage substrate continuation merged onto main as
squash-commit b8b9c33. Multi-AI synthesis packet received this tick
(Gemini + Claude.ai + Ani + Amara + Alexa) with six substantial
substrate landings queued for follow-up ticks (.gitattributes diff
suppression, mechanical lock + task-runner gate, auto-gc defusing,
two-tier no-directives scanner, brat playbook + boring spec pair,
multi-agent scale research note). Right-sizing per the
soulfile-cleanliness rule.

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

* chore(loop-tick-history): tick 0349Z — schema fix, column 3 is cron id 26f978a2 not 'autonomous-loop'

Schema per docs/hygiene-history/ticks/README.md is:
  | timestamp | model id | cron sentinel | body | PR ref | observation |

Column 3 is the cron sentinel/hash. The autonomous-loop cron has id
26f978a2 (per CronList output). The literal word 'autonomous-loop'
in column 3 is incorrect. Fixed to match existing well-formed
shards (e.g., 0440Z.md, 0435Z.md).

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 Apr 29, 2026
* chore(loop-tick-history): tick 2026-04-29T03:47Z — review-thread maintenance shard

Ten review threads addressed across PR #757 (eight) + PR #758 (two).
Six fix classes on PR #757: filename consistency / BSD-macOS
portability / self-contradiction repair / empty-file provenance /
pseudocode replacement / BRANCH_MERGED_TO_MAIN_CANDIDATE alignment.

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

* chore(loop-tick-history): tick 0347Z — fix escape-quote rendering + schema column 3 (Copilot threads)

Two findings on PR #759:
1. Backslash-escaped quotes (e.g., \"deletion-safe\") look like JSON-string
   escaping in Markdown source and may render with literal backslashes.
   Plain double quotes are correct.
2. Column 3 was the literal word 'autonomous-loop' instead of the cron
   sentinel/hash 26f978a2 (the autonomous-loop cron's id). Fixed to
   match existing well-formed shards.

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

---------

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