Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions docs/0-0-0-readiness/CLASSIFICATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,24 @@ Per `docs/active-trajectory.md` strict bucket taxonomy: classification requires

**Batch 1 result: 2 of 2 files SAFE_TO_RESET_LFG_SUPERSEDES.** No forward-sync needed.

### Batch 2 (2026-04-29T12:05Z)

Per `docs/active-trajectory.md` strict bucket taxonomy: classification requires named AceHack content + named LFG equivalent + named reason. The 8 SAFE entries below each have LFG-only commits that are deliberate improvements (perf fix, doctrine update, role-vs-name compliance, technical-accuracy fix, or strict-superset extension); the AceHack-only `+` lines are older shapes superseded by those LFG decisions. The 1 NEEDS_HUMAN_DECISION entry is a content-divergence class that hard-reset alone cannot resolve.

| File | Diff +/- | Status | Evidence |
|---|---|---|---|
| `.github/codeql/codeql-config.yml` | +6/-13 | **SAFE_TO_RESET_LFG_SUPERSEDES** | LFG has 3 commits AceHack lacks: `bb0227e` (java-kotlin matrix + scan AlloyRunner.java; removes `tools/alloy/**` from paths-ignore with detailed rationale), `817e59c` (B-0073 obj/bin refinement), `1e09fef` (xunit→xUnit Copilot review fix on PR #701). AceHack +6 lines = older shape that re-included `tools/alloy/**` in paths-ignore — directly contradicts LFG's deliberate paths-ignore decision. |
| `.github/workflows/memory-index-duplicate-lint.yml` | +8/-5 | **SAFE_TO_RESET_LFG_SUPERSEDES** | Comment-only diff. AceHack `+` lines add persona-name attribution (citing an external AI reviewer + a dated technical-review reference + a PR number) to a CI workflow file. Per the role-vs-name rule (`docs/AGENT-BEST-PRACTICES.md` closed-list), workflow files are current-state surfaces — persona-names belong on history surfaces only. LFG version uses role-ref-style comment ("an index with duplicate entries is a discoverability defect") which is the rule-compliant form. |
| `tools/hygiene/audit-memory-index-duplicates.sh` | +8/-7 | **SAFE_TO_RESET_LFG_SUPERSEDES** | Same pattern as the workflow file above — comment-only diff. AceHack `+` adds persona-name attribution (citing an external AI reviewer + a dated technical-review reference) to a tool script. Tool scripts are current-state surfaces; LFG's role-ref version is rule-compliant. |
| `src/Core/Shard.fs` | +9/-12 | **SAFE_TO_RESET_LFG_SUPERSEDES** | LFG has `aa5395b sync: AceHack→LFG merge-needed batch (#649)` + `9373755 fix(audit): comprehensive HashCode.Combine sweep + SplitMix64 refactor (Otto-281 follow-up)`. LFG version uses `EqualityComparer<'K>.Default.GetHashCode(key)` (non-boxing, null-safe) per Copilot P1 review on LFG #649 (boxing on every call for value-type 'K → GC regression on hot paths). AceHack version still uses `match box key with \| null -> 0 \| boxed -> boxed.GetHashCode()` (explicit boxing every call). LFG is the perf-fixed form. |
| `docs/AUTONOMOUS-LOOP.md` | +9/-18 | **SAFE_TO_RESET_LFG_SUPERSEDES** | LFG has 5 commits AceHack lacks, including `8aa4adc feat(tick-history): land Option B per-tick shard-file transport (task #276 — maintainer-delegated call) (#724)` (landed 2026-04-29T02:04:38Z). LFG describes the **current Option B per-tick shard mechanism** at `docs/hygiene-history/ticks/YYYY/MM/DD/HHMMZ.md`. AceHack still describes the legacy single-table append. LFG is the current doctrine. |
| `tools/setup/macos.sh` | +11/-16 | **SAFE_TO_RESET_LFG_SUPERSEDES** | Two changes: (1) shellcheck source-directive comment — LFG has detailed rationale (multi-line explanation of why SC1091 fires + why source= directive resolves it); AceHack has terse 1-line version. (2) Setup script comments — LFG uses role-refs ("the maintainer's standing 'just install everything' framing"); AceHack adds persona-name attribution (citing the human maintainer + a round number) and persona-name attribution (citing an external AI reviewer + a PR number). Both AceHack changes are role-vs-name violations on a current-state surface. LFG version is more detailed AND rule-compliant. |
| `tools/hygiene/fix-markdown-md032-md026.py` | +16/-157 | **SAFE_TO_RESET_LFG_SUPERSEDES** | LFG has `f57d683 fix(hygiene): MD032 auto-fixer skips YAML frontmatter (don't break composes_with: lists) (#703)` + `515db64 feat(hygiene): fix-markdown-md032-md026.py — recurring pattern extracted to substrate primitive (Otto-346 in action) (#542)`. LFG file is 376 lines vs AceHack 235 lines: LFG = strict superset (fence detection at line 60 on both sides + YAML frontmatter handling that AceHack lacks). AceHack +16 lines are docstring/comment shifts on the fence-detection block (logic identical between sides; LFG just has more code before/after). |
| `tools/setup/common/curl-fetch.sh` | +14/-44 | **SAFE_TO_RESET_LFG_SUPERSEDES** | LFG has 2 commits AceHack lacks (`5298114` infra clean-additive batch + `dfb49e5` 63-file forward-port). Two changes in the comment block: (1) attribution — LFG: "Reviewers confirmed:" (role-ref); AceHack: persona-name attribution citing an external AI reviewer + a PR number (role-vs-name rule violation on a current-state surface). (2) retry-math accuracy — LFG: `--retry 5 — up to 5 retries (6 total attempts including the initial try, per curl(1))` (correct per curl manual); AceHack: `--retry 5 — five attempts total` (technically inaccurate). LFG is more accurate AND rule-compliant. |
| `docs/hygiene-history/loop-tick-history.md` | +12/-12 | **NEEDS_HUMAN_DECISION** → maintainer chose option (c) | Mutual divergence with two distinct cases. **Truly unique to AceHack** (9 timestamps): 2026-04-28T04:08/04:18/04:33/05:01/05:23/05:44/05:50/07:15/08:50. **Truly unique to LFG** (9 timestamps): 2026-04-27T23:58, 2026-04-28T14:43/17:47/19:41/19:50, 2026-04-29T00:34/00:53/00:58/01:00. **Present on both forks with content drift in trailing portion** (1 timestamp, 2026-04-21T17:28): the row exists on both sides but differs enough to appear as `+/-` pair in `git diff`. All AceHack-only rows are pre-Option-B (Option B shard-mode landed 2026-04-29T02:04:38Z on LFG via PR #724) and were correctly appended to the legacy single-table file at the time. **Maintainer call (2026-04-29)**: option (c) — migrate AceHack-only rows to per-tick shard files under `docs/hygiene-history/ticks/2026/04/{21,28}/` first, then hard-reset. Rationale: preserves evidence in the modern Option B format, avoids accepting loss, makes loop-tick-history.md content-identical between forks, converts the only NEEDS_HUMAN_DECISION item into a preservation-forward cleanup. **Reclassifies to SAFE_TO_RESET_LFG_SUPERSEDES once option-(c) migration PR lands.** Pre-existing 9 LFG-only rows are out of scope for this PR (separate follow-up to migrate THOSE to shards lives on the LFG side). |
Comment thread
AceHack marked this conversation as resolved.
Outdated

**Batch 2 result: 8 of 9 files SAFE_TO_RESET_LFG_SUPERSEDES (81 lines), 1 file NEEDS_HUMAN_DECISION (12 lines).**

### Calibration batch reclassification (older "ALREADY-COVERED" label)

The 5 calibration-batch entries above use the prior taxonomy's "ALREADY-COVERED" label, which under the strict bucket rules (named AceHack content + named LFG equivalent + named reason — see `docs/active-trajectory.md` Hard-reset-safety classification) corresponds to **SAFE_TO_RESET_LFG_SUPERSEDES** (4 entries with semantic supersession evidence) or **ALREADY_RESOLVED** (where AceHack-only content is zero). Re-tabulated for the strict-bucket ledger:
Expand Down
34 changes: 19 additions & 15 deletions docs/active-trajectory.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,35 +136,39 @@ For the text-file ledger, the conceptual computation is straightforward: `git di

Verified 2026-04-29T10:43Z: the 5 binary-classified files in the current diff have status `D` (LFG-only), so `binary_acehack_only_files = 0` and `binary_modified_or_renamed_files = 0` in this specific round.

Current ledger (computed 2026-04-29T11:32Z):
Current ledger (last updated 2026-04-29T12:13Z, post-Batch-2):

```text
potential_loss_lines = 273 all AceHack-only +lines (would be erased on hard-reset)
classified_safe_lines = 134 semantic evidence in BUCKET 2 (SAFE_TO_RESET_LFG_SUPERSEDES)
unsafe_lines = 0 no NEEDS_FORWARD_SYNC or NEEDS_HUMAN_DECISION
unclassified_lines = 139 HEURISTIC_LFG_DOMINATES — pending per-file semantic inspection
classified_safe_lines = 215 semantic evidence in BUCKET 2 (SAFE_TO_RESET_LFG_SUPERSEDES)
unsafe_lines = 12 1 NEEDS_HUMAN_DECISION (loop-tick-history.md mutual divergence)
unclassified_lines = 46 HEURISTIC_LFG_DOMINATES — pending per-file semantic inspection
Comment thread
AceHack marked this conversation as resolved.
```

Composition of `classified_safe_lines = 134`:
`potential_loss_lines = 273` was computed 2026-04-29T10:25Z via `git diff --numstat refs/remotes/origin/main..refs/remotes/acehack/main` and remains canonical at the time of the most recent batch-PR open (the AceHack and LFG main tips have not advanced relative to each other in a way that touched the divergent files — see "Drift cadence observation" earlier; LFG advanced via #837 but #837 only touched docs in `docs/0-0-0-readiness/` which are not in the AceHack-vs-LFG file set). Re-compute on next batch open if either tip moves.

Arithmetic sanity check: `273 = 215 + 12 + 46` ✓ (per the multi-AI review discipline — verify mechanically, do not trust the math because it "looks plausible").

Composition of `classified_safe_lines = 215`:

- 9 infra files (97 lines): see "9 infra files" table above. SAFE_TO_RESET_LFG_SUPERSEDES with named per-file evidence.
- 5 calibration-batch files (28 lines, 2026-04-28): MEMORY.md (11) + codeql_umbrella (12) + doc_class_mirror_beacon (1) + CURRENT-aaron (2) + CURRENT-amara (2). Originally labeled "ALREADY-COVERED" in older taxonomy; under strict bucket each has named evidence in `docs/0-0-0-readiness/CLASSIFICATION.md` → SAFE_TO_RESET_LFG_SUPERSEDES.
- Batch 1 (9 lines, 2026-04-29T11:32Z): SECURITY.md (4) + validate-agencysignature-pr-body.sh (5). See `docs/0-0-0-readiness/CLASSIFICATION.md` Batch 1 table for named evidence per file.
- Batch 2 (81 lines, 2026-04-29T12:05Z): codeql-config.yml (6) + memory-index-duplicate-lint.yml (8) + audit-memory-index-duplicates.sh (8) + Shard.fs (9) + AUTONOMOUS-LOOP.md (9) + macos.sh (11) + fix-markdown-md032-md026.py (16) + curl-fetch.sh (14). See `docs/0-0-0-readiness/CLASSIFICATION.md` Batch 2 table for named evidence per file. Common pattern: LFG version is either rule-compliant (role-refs vs persona-name violations on current-state surfaces), more accurate (correct retry-math on curl-fetch.sh), the perf-fixed form (Shard.fs non-boxing comparer), the current doctrine (AUTONOMOUS-LOOP.md Option B shard-mode), or strict superset (fix-markdown-md032-md026.py YAML frontmatter handling).

Composition of `unsafe_lines = 12` (1 file, NEEDS_HUMAN_DECISION):

```text
12 docs/hygiene-history/loop-tick-history.md (mutual divergence — 9-10 unique tick rows on each fork)
```

Per Batch 2 evidence: each fork has unique tick rows for periods when the loop ran independently on that fork. All AceHack-only rows are pre-Option-B (Option B shard-mode landed 2026-04-29T02:04:38Z on LFG via PR #724). Maintainer call is needed on whether to (a) accept the loss on hard-reset, (b) forward-sync to LFG first, or (c) migrate to per-tick shard files first then hard-reset. Recommended path: (c) — preserves evidence in modern format AND makes the file content-identical between forks.

Composition of `unclassified_lines = 139` (11 files):
Composition of `unclassified_lines = 46` (2 files):

```text
38 .github/workflows/budget-snapshot-cadence.yml
16 tools/hygiene/fix-markdown-md032-md026.py
14 tools/setup/common/curl-fetch.sh
12 docs/hygiene-history/loop-tick-history.md
11 tools/setup/macos.sh
9 src/Core/Shard.fs
9 docs/AUTONOMOUS-LOOP.md
8 tools/hygiene/audit-memory-index-duplicates.sh
8 memory/project_laptop_only_source_integration_scratch_sqlsharp_features_or_designs_high_priority_2026_04_27.md
8 .github/workflows/memory-index-duplicate-lint.yml
6 .github/codeql/codeql-config.yml
```

### Hard-reset signoff gate (strict)
Expand Down
1 change: 1 addition & 0 deletions docs/hygiene-history/ticks/2026/04/29/1207Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
| 2026-04-29T12:07:27Z | claude-opus-4-7 | 43c91583 | 0/0/0 batch-2 classification tick post computer-restart. Resumed from compacted-conversation state. Recovery sequence: (a) /tmp/zeta-clean-2026-04-29/lfg fresh clone wiped by macOS reboot — recreated via `git clone` + `git fetch acehack`, frozen with `gc.auto=0` + `reflogExpire=never`; (b) local repo synced to LFG main = `6f8df33` (#837 squash-merge); (c) merged feature branch deleted; (d) per-file batch-2 evidence (gathered pre-restart) re-verified against fresh clone — 9 of 9 files match the pre-restart classifications. Batch 2 PR (#838) opened with: 8 SAFE_TO_RESET_LFG_SUPERSEDES (codeql-config.yml + memory-index-duplicate-lint.yml + audit-memory-index-duplicates.sh + Shard.fs + AUTONOMOUS-LOOP.md + macos.sh + fix-markdown-md032-md026.py + curl-fetch.sh = 81 lines) + 1 NEEDS_HUMAN_DECISION (loop-tick-history.md = 12 lines, mutual divergence in pre-Option-B tick rows, recommended path: migrate AceHack-only rows to per-tick shard files first then hard-reset). Ledger transition: 134 → 215 classified_safe; 0 → 12 unsafe; 139 → 46 unclassified. Arithmetic verified: `273 = 215 + 12 + 46` ✓ (per Amara 2026-04-29 mechanical-verification discipline). Common batch-2 evidence pattern: AceHack-only `+` lines are either persona-name attribution on current-state CI/tool/code surfaces (role-vs-name rule violation under the closed-list per `docs/AGENT-BEST-PRACTICES.md`), older shapes superseded by deliberate LFG decisions (paths-ignore on codeql-config, perf fix on Shard.fs comparer, Option B shard-mode doctrine on AUTONOMOUS-LOOP.md), or technical-accuracy regressions (curl-fetch retry-math). Lane discipline preserved per Amara 2026-04-29 review: classify files, reduce unclassified_lines, record named evidence. No LOST recovery, no tick-3 promotion, no gate-runner script. Cron `43c91583` alive. | [PR #838](https://github.com/Lucent-Financial-Group/Zeta/pull/838) | **Resume-protocol working as designed**: the load-state file (`docs/active-trajectory.md`) prevented re-derivation of state after computer-restart. Read-once at session-start gave: ledger numbers, fresh-clone path + recovery procedure, gate conditions, classification rule, recommended resume command. The resume cost was minimal (~2 min to re-establish state vs the ~30+ min audit-spiral that would have happened without the load-state file). **Observation**: the `/tmp` wipe is a known macOS behavior, but the fresh-clone-recreation procedure was self-evident from active-trajectory.md (clone → fetch acehack → fsck → freeze) — the procedure WAS in the doc, not just in agent memory. This validates the design choice to put procedure-as-text in the load-state file. |
Loading