Skip to content

research: ace first-class adoption in Zeta (Aaron 2026-04-24 directive)#377

Merged
AceHack merged 8 commits intomainfrom
research/setup-tooling-scratch-sqlsharp-migration
Apr 25, 2026
Merged

research: ace first-class adoption in Zeta (Aaron 2026-04-24 directive)#377
AceHack merged 8 commits intomainfrom
research/setup-tooling-scratch-sqlsharp-migration

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 24, 2026

Summary

Research doc capturing Aaron's 2026-04-24 reframe: `../scratch` is the start of "ace" — his declarative-native package manager — and Zeta should adopt it first-class. Previously treated as internal setup-tooling refactor; correctly framed as product integration.

Key substance

  • ace reframe: scratch isn't just a reference pattern; it's a product Zeta is the first-class consumer of.
  • Twin-file edge: PowerShell ONLY for vanilla fresh Windows bootstrap (install WSL, hand off). Bash for everything else — macOS, Linux, Windows WSL. No bash↔ps1 post-bootstrap twins.
  • Windows matrix: 4 legs deferred to Windows peer-agent milestone — `windows` / `windows-arm` / `windows-wsl` / `windows-arm-wsl`. Last is TBD pending Aaron's local ARM WSL2 test.
  • Zeta current state gaps: no top-level `declarative/` tree, no bun+TS post-bootstrap layer, no profiles/categories, no dev-container base, no idempotency test harness.
  • 6-phase migration plan: Phase 0 declarative split → 1 bun+TS scaffold → 2 profiles/categories → 3 dev-container/Codespaces → 4 Windows ps1 → 5 idempotency tests. Each phase stands alone.

Open questions for Aaron (in §8)

  1. ace productization timing (npm/bun/cargo/binary vs repo-relative path)
  2. ace repo future (stays at `../scratch` or renamed)
  3. Phase-0 immediate vs wait for HB-002 BACKLOG split
  4. Phase-1 bun+TS scope (big-bang vs incremental)
  5. dev-container base image (Ubuntu 24.04 vs vendor-curated)
  6. ace-in-Zeta contribution flow (upstream PRs to scratch vs Zeta-local override)

Test plan

  • Doc lands as research-grade proposal (pre-v1) — no code changes
  • Composes with Otto-247 (version-currency) — any pinned versions in future phases must use `gh api .../releases`
  • Composes with Otto-248 (DST flake-fix) — idempotency test harness in Phase 5 enforces it
  • Aaron answers the 6 open questions — determines phase start order

Does NOT

  • Execute any migration phase (design-only)
  • Authorize renaming `tools/setup/` without audit
  • Pin versions in `declarative/` (every pin needs Otto-247 verification)
  • Supersede forced-twin discipline at pre-bootstrap edge

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings April 24, 2026 18:09
@chatgpt-codex-connector
Copy link
Copy Markdown

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

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a research/design document that reframes Zeta’s setup-tooling evolution as first-class adoption of the “ace” declarative-native package manager (currently living under ../scratch), including target-state goals and a phased migration plan.

Changes:

  • Introduces a new research proposal documenting the “ace first-class consumer” framing and implications for Zeta.
  • Captures the intended bootstrap twin-file boundary (minimal PowerShell only for fresh Windows → handoff to bash/bun+TS).
  • Lays out a 6-phase migration plan (declarative split → bun+TS scaffold → profiles/categories → devcontainer → Windows bootstrap → idempotency tests).

Comment thread docs/research/setup-tooling-scratch-sqlsharp-migration-2026-04-24.md Outdated
Comment thread docs/research/setup-tooling-scratch-sqlsharp-migration-2026-04-24.md Outdated
Comment thread docs/research/setup-tooling-scratch-sqlsharp-migration-2026-04-24.md Outdated
Comment thread docs/research/setup-tooling-scratch-sqlsharp-migration-2026-04-24.md Outdated
Comment thread docs/research/setup-tooling-scratch-sqlsharp-migration-2026-04-24.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

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

Comment thread docs/research/setup-tooling-scratch-sqlsharp-migration-2026-04-24.md Outdated
Comment thread docs/research/setup-tooling-scratch-sqlsharp-migration-2026-04-24.md Outdated
AceHack added a commit that referenced this pull request Apr 24, 2026
…omize #377 reference) (#379)

* docs: file actual HB-005 — un-phantomize the AceHack-mirror-LFG reference

My PR #377 research doc referenced HB-005 as if it existed. Aaron
caught the phantom: *"bet you can find it in one of your closed
PRs"* (I had implied it was in a closed PR). Full search of open,
closed, and all-branch HB-005 references surfaces only my own
usages in #377 — I invented the reference without ever creating
the row.

This PR lands the actual HB-005 in `docs/HUMAN-BACKLOG.md` to
match the concept I'd been referencing:

- **Ask**: symmetric branch-protection + settings on AceHack fork
  matching LFG canonical, except merge-queue (org-only feature).
- **Trigger**: Aaron directive 2026-04-24 *"they are cranked up
  good on LFG but should also be cranked up good on AceHack very
  similar if not the same where possible."*
- **Approach**: snapshot both repos via the existing
  `tools/hygiene/snapshot-github-settings.sh`, diff, apply
  symmetric settings where the feature is available on personal
  tier.
- **Composes with**: HB-001 (org migration — established the
  LFG-canonical + AceHack-fork topology), Otto-223 (two-hop PR
  flow makes the intentional merge-queue asymmetry tolerable).

HUMAN-BACKLOG.md is distinct from docs/BACKLOG.md — the HB-002
per-row-BACKLOG-split blocker does not apply here. Filing HB-005
directly in the same flat-file format as HB-001..HB-004.

Retractability-in-action (Otto-238): verify-before-deferring rule
(CLAUDE.md-level) was violated by my phantom reference; this
recovers by making the reference real instead of silently
deleting it.

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

* docs: HB-005 — correct asymmetry framing (platform-limit, not intentional)

Aaron correction 2026-04-24: "it's not intentional, i wish we
could use merge queue on acehack but i don't think they give
that to personal repos only org repos."

Reworded HB-005 to make clear the merge-queue asymmetry is
GitHub-platform-forced (not offered on personal repos), not a
design preference. Preserves Aaron's verbatim quote.

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 25, 2026
P1 (L238) — symlink suggestion conflicts with no-symlinks discipline:
Reworded to recommend a generated copy + tooling-kept-in-sync, citing
Otto-244 + docs/research/build-machine-setup.md "No symlink" rule and
the Windows brittleness rationale.

P1 (L324) — Otto-247/248 "CLAUDE.md-level rule" cite was unresolvable:
Replaced with explicit memory-file paths
(memory/feedback_version_currency_*otto_247* and
memory/feedback_never_ignore_a_flake_otto_248_*) — those are the actual
source-of-truth files. Noted CLAUDE.md "Version currency" bullet
captures the rule shape (the bullet exists; "Otto-247" the ID does
not appear there directly).

P1 (L197) — runner-matrix labels not in current gate.yml:
Reframed the entire matrix as "proposed/future ... post-#375 state,
not present-day truth" with explicit pointer to current gate.yml
(ubuntu-22.04 + macos-14 on forks). All "Active" → "Proposed". Added
"assumes future GitHub-hosted Windows runner availability" annotations
on Windows rows.

Stale-resolved-by-reality:
- L69 ADR exists: docs/DECISIONS/2026-04-22-three-repo-split-zeta-forge-ace.md
  is in-tree (verified via ls).
- L121 .mise.toml has actionlint+shellcheck: verified via grep
  (both pinned: actionlint=1.7.12, shellcheck present).
- L327 HB-005 defined: docs/HUMAN-BACKLOG.md L240 has the row.
- L10 trinity memory: memory/user_trinity_of_repos_emerged_zeta_forge_ace_three_in_one.md
  exists in-tree.

Otto-279 surface-class:
- L22 + L267 Aaron name attribution in research surface — research is
  history-class; first-name attribution preserved as faithful
  provenance.
@AceHack AceHack force-pushed the research/setup-tooling-scratch-sqlsharp-migration branch from d8d0946 to c8d91b5 Compare April 25, 2026 06:25
AceHack and others added 6 commits April 25, 2026 03:35
Captures Aaron's 2026-04-24 direction setting `../scratch` as the
start of "ace" — his declarative-native package manager — and Zeta
as its first-class consumer / testbed.

Key reframes from raw cross-OS setup refactor to product
integration:

- scratch is not just a reference pattern; it's ace.
- Zeta adoption of ace is first-class, not opportunistic.
- Bun+TS post-bootstrap substrate is ace's shared runtime, not
  Zeta-local.
- Twin files at bootstrap edge are FORCED (pre-install user has
  nothing). PowerShell ONLY for vanilla-fresh-Windows initial
  install; bash for everything else including Windows WSL.
- 4 Windows matrix legs (deferred): windows / windows-arm /
  windows-wsl / windows-arm-wsl (last TBD pending Aaron's local
  test).

Current Zeta state: partial declarative via `.mise.toml` +
`tools/setup/manifests/`, but still has bash-based
`tools/setup/common/*.sh` and no bun+TS post-bootstrap layer, no
top-level `declarative/` tree, no profile/category system, no
dev-container base.

Phased migration: 0 (declarative split) → 1 (bun+TS post-bootstrap
scaffold) → 2 (profiles/categories) → 3 (dev-container + Codespaces
base sharing scripts) → 4 (Windows pre-bootstrap ps1) → 5
(idempotency test harness). Each phase stands alone.

Open questions surfaced for Aaron: ace productization timing, ace
repo stability, Phase-0 immediate vs deferred, dev-container base
image choice, ace-in-Zeta contribution flow when Zeta surfaces ace
gaps.

Design-only; no code changes in this PR.

Composes with: Otto-247 (version-currency for pinned versions),
Otto-248 (DST flake-fix discipline), GOVERNANCE §24 three-way-
parity, HB-005 AceHack-mirror-LFG (adjacent Windows bootstrap).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Aaron clarification 2026-04-24: "so will need full ps1 setup for
windows too not just wsl, wsl is bash after installed by windows
ps1. like ../scratch the start of ace the package manager"

Two distinct setup chains on Windows, not one bridge:

1. Windows native (windows, windows-arm): FULL PowerShell
   end-to-end. ace supports PowerShell as first-class runtime.
2. Windows WSL (windows-wsl, windows-arm-wsl): ps1 installs WSL2,
   then bash inside WSL (same path as macOS + Linux).

Implication for ace: first-class support for BOTH PowerShell AND
bash runtimes — not just bash-with-ps1-bridge. scratch's README
already shows this shape (`scripts/setup/windows/` + bootstrap.ps1
+ shared Windows layer).

Added a matrix summary table clarifying which runners use which
setup chain.

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

Major corrections per maintainer 2026-04-24:

1. "never reference ../scratch we build in Zeta or start a new
   repo" — removed every external-path citation from the doc.
   Soul-file-independence discipline: a reader with this repo +
   auto-memory alone must be able to reproduce the thinking.
   Previous revision cited `../scratch/README.md`, `../SQLSharp/
   scripts/setup/`, etc. All removed.

2. "look up Ouroboros (or Uroboros)" — restored the three-repo-
   split / Ouroboros / trinity context that I'd failed to surface.
   Per-user memory:
   - user_trinity_of_repos_emerged_zeta_forge_ace_three_in_one.md
   - project_ace_package_manager_agent_negotiation_propagation.md
   - project_three_repo_split_zeta_forge_ace_software_factory_named_forge.md

   Three-repo target: Zeta (database/SUT) + Forge (factory,
   self-hosting) + ace (package manager). Closed Ouroboros
   dependency cycle plus Forge→Forge self-loop.

3. ADR-landing status surfaced: the ADR
   `docs/DECISIONS/2026-04-22-three-repo-split-zeta-forge-ace.md`
   was drafted on commit 41d2bb6 but was on PR #54's diff,
   which I closed-as-superseded earlier this session. The
   split decision lives in memory but NOT in committed docs.
   New Phase 0: re-land the ADR before operational split.

4. Matrix corrected per chronological maintainer directives:
   - 4 Windows legs, not 2 (windows / arm / wsl / arm-wsl)
   - Windows native uses full ps1 end-to-end, not ps1-bridge-to-bash
   - WSL on ARM TBD pending local test

5. ace reframe centered: Zeta is ace's first-class consumer +
   testbed, not a passive pattern-borrower. Zeta's adoption
   validates ace's design.

All references now resolve inside Zeta (docs, tools, in-repo
memory) or inside the per-user auto-memory substrate (by name,
not by path).

Composes with: Otto-247 version-currency, Otto-248 DST flake
discipline, GOVERNANCE §24 three-way-parity.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3 remaining `../scratch` references were all inside verbatim quote
blocks. Even in quotes, external paths commit non-reproducible
references into the committed repo. Redacted to `[external
reference]` while preserving each quote's substance.

Soul-file-independence discipline prefers path-redaction over
verbatim-preservation for committed docs; memory layer preserves
verbatim.

Zero external-path references remain in the doc body.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
P1 (L238) — symlink suggestion conflicts with no-symlinks discipline:
Reworded to recommend a generated copy + tooling-kept-in-sync, citing
Otto-244 + docs/research/build-machine-setup.md "No symlink" rule and
the Windows brittleness rationale.

P1 (L324) — Otto-247/248 "CLAUDE.md-level rule" cite was unresolvable:
Replaced with explicit memory-file paths
(memory/feedback_version_currency_*otto_247* and
memory/feedback_never_ignore_a_flake_otto_248_*) — those are the actual
source-of-truth files. Noted CLAUDE.md "Version currency" bullet
captures the rule shape (the bullet exists; "Otto-247" the ID does
not appear there directly).

P1 (L197) — runner-matrix labels not in current gate.yml:
Reframed the entire matrix as "proposed/future ... post-#375 state,
not present-day truth" with explicit pointer to current gate.yml
(ubuntu-22.04 + macos-14 on forks). All "Active" → "Proposed". Added
"assumes future GitHub-hosted Windows runner availability" annotations
on Windows rows.

Stale-resolved-by-reality:
- L69 ADR exists: docs/DECISIONS/2026-04-22-three-repo-split-zeta-forge-ace.md
  is in-tree (verified via ls).
- L121 .mise.toml has actionlint+shellcheck: verified via grep
  (both pinned: actionlint=1.7.12, shellcheck present).
- L327 HB-005 defined: docs/HUMAN-BACKLOG.md L240 has the row.
- L10 trinity memory: memory/user_trinity_of_repos_emerged_zeta_forge_ace_three_in_one.md
  exists in-tree.

Otto-279 surface-class:
- L22 + L267 Aaron name attribution in research surface — research is
  history-class; first-name attribution preserved as faithful
  provenance.
Reviewer caught that the Otto-248 cite was using a made-up shortened
path `memory/feedback_never_ignore_a_flake_otto_248_2026_04_24.md`
(which doesn't exist). Actual file is
`memory/feedback_never_ignore_flakes_per_DST_discipline_flakes_mean_determinism_not_perfect_otto_248_2026_04_24.md`
(verified via `ls memory/`).

This was my fix-induced citation error — when adding the Otto-248
cite during prior drain on #377, I wrote a plausible-looking path
that wasn't real. The corresponding drain-log on #444 inherited
the same wrong path and will be corrected in a follow-up to that PR.
Copilot AI review requested due to automatic review settings April 25, 2026 07:36
@AceHack AceHack force-pushed the research/setup-tooling-scratch-sqlsharp-migration branch from c8d91b5 to 5744ffe Compare April 25, 2026 07:36
AceHack added a commit that referenced this pull request Apr 25, 2026
…n-log

Codex P1 caught that the cited memory file path in #377's drain-log
()
doesn't exist; actual file is the longer
.

This was a fix-induced citation error inherited from #377's research
doc (which used the same wrong abbreviated path). Both #377 and
#444 needed correction — landed paired (#377 force-pushed earlier
this tick, #444 corrected here). The drain-log inherited the wrong
citation from the research doc it was logging.
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 1 out of 1 changed files in this pull request and generated 4 comments.

Comment thread docs/research/setup-tooling-scratch-sqlsharp-migration-2026-04-24.md Outdated
AceHack added a commit that referenced this pull request Apr 25, 2026
…arch)

Otto-268 backfill: drain-log for PR #377 covering 13 threads — notable
for high stale-resolved density (38%, 5 of 13) where the doc was
authored against a future-state of main that adjacent PRs landed
during the review window.

Per Otto-250 training-signal discipline. Pattern observations capture
four load-bearing patterns:
1. High stale-resolved density (38%) when research doc forward-
   authors against future state of main; adjacent PRs landing
   produces natural drift.
2. "CLAUDE.md-level rule" cite shape is undisciplined — Otto-NNN IDs
   live in memory files; CLAUDE.md has the rule shapes. Fix template
   for any factory-rule cross-reference.
3. Runner-matrix vs current-truth drift is recurring; research docs
   need explicit "post-#NNN landing" annotations.
4. Otto-114 forward-mirror landing is a high-leverage substrate
   improvement — converts memory-file dangling-citation findings from
   re-fix-required to verify-and-resolve.
AceHack added a commit that referenced this pull request Apr 25, 2026
…n-log

Codex P1 caught that the cited memory file path in #377's drain-log
()
doesn't exist; actual file is the longer
.

This was a fix-induced citation error inherited from #377's research
doc (which used the same wrong abbreviated path). Both #377 and
#444 needed correction — landed paired (#377 force-pushed earlier
this tick, #444 corrected here). The drain-log inherited the wrong
citation from the research doc it was logging.
AceHack added a commit that referenced this pull request Apr 25, 2026
…rain-log

Multiple Codex/Copilot threads on #444 caught:

- L16: '3 were Otto-279' → '2 were Otto-279' (matches body's
  Threads C1-C2 = 2 OTTO-279 SURFACE-CLASS).
- L22: 'Outcome distribution: 4 OTTO-279' → '2 OTTO-279 + 2 dups'
  (matches L161 final-resolution math: 4 + 5 + 2 + 2 dups = 13).
- L56: Thread A3 'Copilot P1 ×2' → 'Copilot P1 ×3' (3 thread IDs
  listed: ejy1 + eenN + eenr).
- L87: non-portable `grep -i "actionlint\|shellcheck"` → portable
  `grep -iE "actionlint|shellcheck"` (BSD/macOS grep doesn't
  support `\|` BRE alternation; the `-E` extended-regex form is
  POSIX-portable). Captured the rationale inline so the verification
  command actually works on macOS.

Same count-vs-list cardinality pattern (Class B in PR #465 doc-lint
suite BACKLOG row) — third drain-log of mine to exhibit it (after
#195 and #231). The shellcheck-rule-precision class also surfaces
via the `\|` portability finding (related to SC2086-vs-SC2046 from
#427 drain-log).
AceHack added a commit that referenced this pull request Apr 25, 2026
Codex P2 + Copilot threads on #437 caught:

- Lines 6-7 fragment + count mismatch: header said '10 unresolved
  ..., 1 P1' (suggesting 11) while body summarized 14 = 10 first-
  wave + 4 second-wave. Reworded into a single unambiguous summary:
  '10 unresolved at first-wave; post-merge cascade then surfaced
  3 more (1 Codex P1 + 2 Copilot P2). Total 13.'
- Second-wave header '1 P1 + 3 P2 post-merge cascade' → '1 Codex P1
  + 2 Copilot P2 — 3 threads total' (only 3 thread sections A/B/C
  exist in body).
- Pattern observation 2 'Stale-resolved-by-reality at ~70%' (7 of
  14) → '~54%' (7 of 13) matching corrected total.
- Final-resolution 'All 14 threads' → 'All 13 threads (10 first-
  wave + 3 second-wave)'.

Same count-vs-list cardinality pattern as #195/#231/#377/#444
drain-log fixes — fourth instance in my own logs. Strong validation
that doc-lint Class B (PR #465 BACKLOG) would compound.
AceHack added a commit that referenced this pull request Apr 25, 2026
* hygiene(#268): pr-preservation drain-log for #135 (auto-loop-35 Itron mapping)

Otto-268 backfill task: drain-log for PR #135 covering 14 total threads
across 2 waves (10 first-wave pre-merge + 4 second-wave post-merge cascade).

Per Otto-250 training-signal discipline: full per-thread record with
reviewer authorship, severity, outcome class (FIX / STALE-RESOLVED-BY-
REALITY / OTTO-279 SURFACE-CLASS), and resolution path. Pattern
observations capture the three load-bearing patterns: Otto-279 as
mature uniform reply stamp; stale-resolved-by-reality at ~70% on this
PR; Codex catching subset-vs-superset framing errors in benchmark
canonical definitions (DORA / K-relations).

* drain(#437 follow-up): fix count mismatches in #135 drain-log

Codex P2 + Copilot threads on #437 caught:

- Lines 6-7 fragment + count mismatch: header said '10 unresolved
  ..., 1 P1' (suggesting 11) while body summarized 14 = 10 first-
  wave + 4 second-wave. Reworded into a single unambiguous summary:
  '10 unresolved at first-wave; post-merge cascade then surfaced
  3 more (1 Codex P1 + 2 Copilot P2). Total 13.'
- Second-wave header '1 P1 + 3 P2 post-merge cascade' → '1 Codex P1
  + 2 Copilot P2 — 3 threads total' (only 3 thread sections A/B/C
  exist in body).
- Pattern observation 2 'Stale-resolved-by-reality at ~70%' (7 of
  14) → '~54%' (7 of 13) matching corrected total.
- Final-resolution 'All 14 threads' → 'All 13 threads (10 first-
  wave + 3 second-wave)'.

Same count-vs-list cardinality pattern as #195/#231/#377/#444
drain-log fixes — fourth instance in my own logs. Strong validation
that doc-lint Class B (PR #465 BACKLOG) would compound.
AceHack added a commit that referenced this pull request Apr 25, 2026
…rain-log

Multiple Codex/Copilot threads on #461 caught:

- L7 'Thread count at drain: 3' → '4' (body has Threads 1-4).
- L17 'Codex caught three findings' → 'four' matching body.
- L122 'merged to main' → 'merged to main as `5698f9d`' for
  consistency with other drain-logs that include the merge SHA
  for auditability.

Same count-vs-list cardinality pattern (Class B in PR #465 doc-lint
suite BACKLOG row) — 5th instance in my own drain-logs (#195 / #231
/ #377 / #135 / #430). The pattern is genuinely universal author-
side; even when explicitly aware of it, instances slip through.
AceHack added a commit that referenced this pull request Apr 25, 2026
Codex P2 + Copilot P1+P2 caught:

- Inline code span split across newline (`docs/` on one line,
  `research/openai-codex-cli-capability-map.md` on the next) —
  reflowed to single-line so the path renders as one token.
- Capability-map cluster listed `docs/research/codex-cli-first-
  class-2026-04-23.md` as if in-tree, but PR #231 is still OPEN
  at time of this drain-log so the file isn't yet in main.
  Reframed as 'pending merge of PR #231; will be in-tree once
  that PR lands' with the in-tree
  `openai-codex-cli-capability-map.md` listed first.

Same forward-author-to-future-state-of-main drift class as #377
(38% stale-resolved density). The drain-log itself exhibits the
pattern it documents — cited a forthcoming-but-not-yet-landed
file as if already present.

Inline-code-span line-wrap is the 5th observation of that class
in the corpus (now: #191 / #195 / #219 / #423 / #460). At this
density the doc-lint Class A (PR #465 BACKLOG) is high-leverage
automation.
AceHack added a commit that referenced this pull request Apr 25, 2026
…dex) (#461)

* hygiene(#268+): pr-preservation drain-log for #430 (#221 follow-up Codex)

Otto-268 follow-on: drain-log for the 4-finding cascade PR #430
(post-merge follow-up to #221 Amara 4th courier ferry absorb).
Captures four substantive Codex post-merge corrections.

Per Otto-250 training-signal discipline. Pattern observations:

1. Verbatim-claim accuracy under absorbing-side annotation —
   "preserved verbatim" claims must reflect any absorbing-side
   annotations (proposal-flag markers, footnotes, inline bracketing).
   Same shape as #235's "byte-for-byte ... excluding whitespace"
   contradiction fix.
2. Count-vs-list cardinality is now a 4th-observation pattern
   (#191 / #219 / #430 / #85). At this density, pre-commit-lint
   candidate: regex on "N drift classes / phases / audits / items"
   patterns + count the surrounding list to verify.
3. Terminology drift between parent absorb + canonical vocabulary
   ("decision-proxy-consult" vs canonical "decision-proxy-evidence")
   is recurring. Fix template: align absorption-notes text to
   canonical; preserve verbatim ferry content per Otto-227.
4. Stabilize effort-summary correction is a concrete instance of
   "claim summary doesn't match per-item tally" — future doc-lint
   candidate (sum-vs-tally check).

* drain(#461 follow-up): fix count mismatches + add merge SHA in #430 drain-log

Multiple Codex/Copilot threads on #461 caught:

- L7 'Thread count at drain: 3' → '4' (body has Threads 1-4).
- L17 'Codex caught three findings' → 'four' matching body.
- L122 'merged to main' → 'merged to main as `5698f9d`' for
  consistency with other drain-logs that include the merge SHA
  for auditability.

Same count-vs-list cardinality pattern (Class B in PR #465 doc-lint
suite BACKLOG row) — 5th instance in my own drain-logs (#195 / #231
/ #377 / #135 / #430). The pattern is genuinely universal author-
side; even when explicitly aware of it, instances slip through.
AceHack added a commit that referenced this pull request Apr 25, 2026
…#460)

* hygiene(#268+): pr-preservation drain-log for #428 (#126 follow-up Gemini xref)

Otto-268 follow-on: drain-log for the targeted single-finding cascade
PR #428 (post-merge follow-up to parent #126 Grok CLI capability map).
Captures one Gemini capability-map cross-reference truth-update.

Per Otto-250 training-signal discipline. Pattern observations:

1. Cross-capability-map xref consistency is its own class. The repo
   has a growing family of CLI capability maps (Codex / Grok /
   Gemini / Claude Code) that form a related-document cluster
   needing joint cross-reference maintenance. Future doc-lint
   candidate: maintain manifest of related-document clusters and
   warn on edit-without-sweep.

2. Multi-CLI capability-map family is its own substrate pattern.
   Worth documenting in `_patterns.md`: when multiple capability
   maps cover overlapping but distinct CLIs, they form a cluster
   that benefits from shared structure (status taxonomy, parity-
   matrix shape, score-summary conventions) and joint
   cross-reference maintenance.

3. Targeted single-finding follow-ups are the cheapest cascade
   shape — 1 finding / 1 commit / 1 merge gate. Cascade-pattern
   amortized cost is dominated by the few-thread cascades.

URL → PR-number defensive pattern continues (lesson from #454/#455
collision earlier this session).

* drain(#460 follow-up): fix capability-map xref + inline-code-span split

Codex P2 + Copilot P1+P2 caught:

- Inline code span split across newline (`docs/` on one line,
  `research/openai-codex-cli-capability-map.md` on the next) —
  reflowed to single-line so the path renders as one token.
- Capability-map cluster listed `docs/research/codex-cli-first-
  class-2026-04-23.md` as if in-tree, but PR #231 is still OPEN
  at time of this drain-log so the file isn't yet in main.
  Reframed as 'pending merge of PR #231; will be in-tree once
  that PR lands' with the in-tree
  `openai-codex-cli-capability-map.md` listed first.

Same forward-author-to-future-state-of-main drift class as #377
(38% stale-resolved density). The drain-log itself exhibits the
pattern it documents — cited a forthcoming-but-not-yet-landed
file as if already present.

Inline-code-span line-wrap is the 5th observation of that class
in the corpus (now: #191 / #195 / #219 / #423 / #460). At this
density the doc-lint Class A (PR #465 BACKLOG) is high-leverage
automation.
AceHack added a commit that referenced this pull request Apr 25, 2026
…reword)

Otto-268 backfill: drain-log for PR #435 (drain follow-up to #148:
why-the-factory-is-different live-lock cadence claim + grammar),
covering 3 threads across 2 waves with a clean self-induced-cascade
pattern.

Per Otto-250 training-signal discipline. Pattern observations capture
four load-bearing patterns:
1. Cross-reviewer convergence on Wave 1 (Codex P2 + Copilot P1
   flagging the same missing-FACTORY-HYGIENE-row) raised quality
   signal — same shape as #432's `warn` unbound finding.
2. Self-induced cascade: my Wave-1 fix introduced the Wave-2
   finding (claim "separate BACKLOG items" implied plural; actual
   BACKLOG state is one row with multiple sub-items). Pattern: when
   fixing a claim, verify the new claim is also accurate against
   current-state.
3. Reword-option-(a)-vs-(b) decision template generalizes: when
   doc asserts X but X doesn't exist, prefer reword-to-current-truth
   over add-the-thing-asserted (unless thing is small + isolated).
4. PR-mechanics: 4 of 7 cascade-PRs in this session (#135, #231,
   #432, #435) went through wave-1 + wave-2 cascade pattern; the
   reviewer-cascade is a consistent property of the merge-trigger
   surface, not a per-PR oddity.

Closes the session-drain-log backfill (Otto-268) for the major PRs
drained in this session: #135 / #235 / #432 / #434 / #195 / #219 /
#206 / #377 / #231 / #85 / #435 (11 PRs total covered across drain
logs #437-#447).
AceHack added a commit that referenced this pull request Apr 25, 2026
…reword) (#447)

* hygiene(#268): pr-preservation drain-log for #435 (live-lock cadence reword)

Otto-268 backfill: drain-log for PR #435 (drain follow-up to #148:
why-the-factory-is-different live-lock cadence claim + grammar),
covering 3 threads across 2 waves with a clean self-induced-cascade
pattern.

Per Otto-250 training-signal discipline. Pattern observations capture
four load-bearing patterns:
1. Cross-reviewer convergence on Wave 1 (Codex P2 + Copilot P1
   flagging the same missing-FACTORY-HYGIENE-row) raised quality
   signal — same shape as #432's `warn` unbound finding.
2. Self-induced cascade: my Wave-1 fix introduced the Wave-2
   finding (claim "separate BACKLOG items" implied plural; actual
   BACKLOG state is one row with multiple sub-items). Pattern: when
   fixing a claim, verify the new claim is also accurate against
   current-state.
3. Reword-option-(a)-vs-(b) decision template generalizes: when
   doc asserts X but X doesn't exist, prefer reword-to-current-truth
   over add-the-thing-asserted (unless thing is small + isolated).
4. PR-mechanics: 4 of 7 cascade-PRs in this session (#135, #231,
   #432, #435) went through wave-1 + wave-2 cascade pattern; the
   reviewer-cascade is a consistent property of the merge-trigger
   surface, not a per-PR oddity.

Closes the session-drain-log backfill (Otto-268) for the major PRs
drained in this session: #135 / #235 / #432 / #434 / #195 / #219 /
#206 / #377 / #231 / #85 / #435 (11 PRs total covered across drain
logs #437-#447).

* drain(#447 follow-up): fix #435 drain-log Reviewer field + stable-identifier xref

Codex P2 + Copilot threads on #447 caught:

- Thread 1.2 missing the `Reviewer:` field even though the drain-log
  schema (intro paragraph) declares per-thread reviewer authorship.
  Added `Reviewer: copilot-pull-request-reviewer`.
- Stale `docs/BACKLOG.md lines 1313-1328` citation: those lines now
  contain the Server Meshing section; the live-lock-smell cadence
  row drifted to ~L1452 in the P1 tooling section. Replaced with
  the stable identifier (heading text 'Live-lock smell cadence
  (round 44 auto-loop-46 absorb, landed as `tools/audit/
  live-lock-audit.sh` + hygiene-history log)') so future readers
  don't chase a moving line-number target.

Same stable-identifier-vs-line-number-xref pattern flagged on
#423's `near line 4167` finding. Documented in `_patterns.md` —
line numbers decay on every adjacent edit; stable identifiers
decay only on rename. Adopting heading text as the stable cite.

The bare `:111`/`:113` thread location format (Otto-250 file:line
shape conformance) is the broader Otto-268-wave divergence
documented in PR #467 known-divergence section — deferred to
maintainer review per that framing.
AceHack added a commit that referenced this pull request Apr 25, 2026
…arch) (#444)

* hygiene(#268): pr-preservation drain-log for #377 (setup-tooling research)

Otto-268 backfill: drain-log for PR #377 covering 13 threads — notable
for high stale-resolved density (38%, 5 of 13) where the doc was
authored against a future-state of main that adjacent PRs landed
during the review window.

Per Otto-250 training-signal discipline. Pattern observations capture
four load-bearing patterns:
1. High stale-resolved density (38%) when research doc forward-
   authors against future state of main; adjacent PRs landing
   produces natural drift.
2. "CLAUDE.md-level rule" cite shape is undisciplined — Otto-NNN IDs
   live in memory files; CLAUDE.md has the rule shapes. Fix template
   for any factory-rule cross-reference.
3. Runner-matrix vs current-truth drift is recurring; research docs
   need explicit "post-#NNN landing" annotations.
4. Otto-114 forward-mirror landing is a high-leverage substrate
   improvement — converts memory-file dangling-citation findings from
   re-fix-required to verify-and-resolve.

* drain(#444 follow-up): correct Otto-248 memory file path in #377 drain-log

Codex P1 caught that the cited memory file path in #377's drain-log
()
doesn't exist; actual file is the longer
.

This was a fix-induced citation error inherited from #377's research
doc (which used the same wrong abbreviated path). Both #377 and
#444 needed correction — landed paired (#377 force-pushed earlier
this tick, #444 corrected here). The drain-log inherited the wrong
citation from the research doc it was logging.

* drain(#444 follow-up): fix count mismatches + portable grep in #377 drain-log

Multiple Codex/Copilot threads on #444 caught:

- L16: '3 were Otto-279' → '2 were Otto-279' (matches body's
  Threads C1-C2 = 2 OTTO-279 SURFACE-CLASS).
- L22: 'Outcome distribution: 4 OTTO-279' → '2 OTTO-279 + 2 dups'
  (matches L161 final-resolution math: 4 + 5 + 2 + 2 dups = 13).
- L56: Thread A3 'Copilot P1 ×2' → 'Copilot P1 ×3' (3 thread IDs
  listed: ejy1 + eenN + eenr).
- L87: non-portable `grep -i "actionlint\|shellcheck"` → portable
  `grep -iE "actionlint|shellcheck"` (BSD/macOS grep doesn't
  support `\|` BRE alternation; the `-E` extended-regex form is
  POSIX-portable). Captured the rationale inline so the verification
  command actually works on macOS.

Same count-vs-list cardinality pattern (Class B in PR #465 doc-lint
suite BACKLOG row) — third drain-log of mine to exhibit it (after
#195 and #231). The shellcheck-rule-precision class also surfaces
via the `\|` portability finding (related to SC2086-vs-SC2046 from
#427 drain-log).

* hygiene(#444): reconcile 377 drain-log outcome distribution math

Codex P2 + Copilot both caught: header said '4 FIX + 2 dups' but
Section A enumerates 6 FIX thread-IDs (A1×1 + A2×2 + A3×3) and
Section B enumerates 5 STALE thread-IDs (B5 explicit dup of B3).
Header didn't match the per-section enumeration end-to-end; intro
prose ('3 were real-fix factual corrections' + '2 were combined')
disagreed with the header in turn.

Pick a single counting rule (by thread-ID) and apply it
consistently:
- 6 FIX (3 unique findings, 3 duplicate reviewer threads on the
  same fixes — combined into one fix commit c8d91b5)
- 5 STALE-RESOLVED-BY-REALITY (4 unique + 1 dup B5≡B3)
- 2 OTTO-279
- = 13 thread-IDs covering 9 unique findings

Fix header + intro prose + final-resolution all to match this
single rule. The 'unique findings' count (9) is preserved in
parentheses for cross-reference.
AceHack added 2 commits April 25, 2026 04:33
Copilot P2: Phase 1 declarative/ proposal had .brew/.apt/.winget
extensions on the manifest filenames; in-tree convention at
tools/setup/manifests/ uses extensionless semantic names
(brew, apt, dotnet-tools, uv-tools). Mirror existing convention
to avoid creating two parallel naming styles.
Pre-existing MD032 failure: line 137 started with '+' (continuation
of a multi-line bold span '**partial declarative pinning via mise
+ manifest files**'), but markdownlint treats '+' at line start as
a list-item marker. Reflow to 'partial declarative pinning via
mise plus manifest files' (close the bold before the '+', use
'plus' instead) so no line starts with a list-marker character.

Same shape as the inline-code-span line-wrap pattern in Class A:
multi-line construct splits across lines and the wrap point hits
a CommonMark special character.
Copilot AI review requested due to automatic review settings April 25, 2026 08:42
AceHack added a commit that referenced this pull request Apr 25, 2026
Pre-existing MD032 failures:
- L7 had '+ provenance-aware scoring' as line-leading (wrap point
  hit '+'); reflow to keep '+' off line start by extending the
  prior line.
- L497 had list immediately following 'Remaining 8th-ferry
  candidates:' text without blank separator; add blank line.

Same line-leading-special-character class as #377 / #235 / #195.
@AceHack AceHack merged commit 2a5b0cf into main Apr 25, 2026
15 checks passed
@AceHack AceHack deleted the research/setup-tooling-scratch-sqlsharp-migration branch April 25, 2026 08:45
AceHack added a commit that referenced this pull request Apr 25, 2026
…ine (8th-ferry candidate #2) (#280)

* research: semantic-canonicalization-and-provenance-aware-retrieval — spine research doc (8th-ferry candidate #2)

M-effort technical spine per Amara 8th-ferry landing plan
(PR #274). Defines the 4-layer substrate (canonicalisation
+ representation + retrieval + scoring-sketch) that the
provenance-aware bullshit detector (candidate #3) and
operational EVIDENCE-AND-AGREEMENT (candidate #4) build on.

Four-layer structure:

**Layer 1 — Canonicalisation N(x)** with 4 required
properties (idempotent / deterministic / meaning-preserving
/ version-pinned). Input-type archetypes (natural-language
/ structured / code-diffs) named as downstream design
choices, not committed.

**Layer 2 — Representation φ(c)** — dense embeddings OR
binary semantic hashes (Hinton & Salakhutdinov) OR both.
Locality-sensitive hashing (Charikar) as complement for
cheap candidate retrieval. Product quantization for
corpus-scale compression when warranted.

**Layer 3 — ANN retrieval** — HNSW (Malkov-Yashunin 2018)
as default with substitutable-interface spine. Retraction-
native integration: RetrievalIndex IS a Zeta-module
materialised view over event stream (insert/remove);
`remove` is a negative-weight event not a tombstone. Same
pattern as KSK-as-Zeta-module budgets / receipts.
Replay-determinism at query-behaviour layer.

**Layer 4 — Scoring (sketch only)** — Amara's formulation
preserved:
  score(y|q) = α·sim + β·evidence - γ·carrierOverlap
             - δ·contradiction
Four terms map to: representation+kNN / citations-as-first-
class / provenance-graph / retraction-ledger. Full
formalisation is candidate #3.

Aminata-concern preview (previewed from oracle-scoring-v0
Otto-90 pass): gameable-by-self-attestation (evidence and
contradiction must come from independent oracles); parameter-
fitting adversary (ADR gate on α/β/γ/δ); false-precision
(band output not decimal).

PatternLedger schema (retraction-native):
- Events: PatternInserted / PatternRetracted / PatternSuperseded
  / ProvenanceEdgeAdded / ProvenanceEdgeRemoved
- Views: CurrentKnownGood / CurrentKnownBad / ContradictingPairs
  / ProvenanceCone

Composition-table shows spine slots into existing substrate
without new mechanisms: SD-9 (norm→mechanism); DRIFT pattern
5 (diagnostic→engine); citations-as-first-class (graph→
consumer); alignment-observability (anti-gaming discipline);
oracle-scoring v0 (band output pattern); BLAKE3 v0
(parameter_file_sha binding extends to N-version+φ-version);
quantum-sensing analogies #2+#4 (correlation and decoherence
slot into layers 3 and 4); KSK-as-Zeta-module 7th ferry
(same event+view module pattern).

Scope limits (6 items): no specific embedding-model commit;
no HNSW-exclusive commit; no canonicalisation-specifics
commit; no full scoring formalisation (that's #3); no
implementation proposal; does not replace citations-as-first-
class.

9 dependencies-to-adoption in priority order: Aminata pass at
#1; candidate #3 scoring formalisation at #2; candidate #4
operational promotion at #3; parameter choices / library
choices / property tests / ADR-gate substrate at downstream
positions.

Archive-header format self-applied — 15th aurora/research
doc in a row.

Lands within-standing-authority per Otto-82/90/93
calibration — research-grade substrate synthesis; not
implementation; not adoption; not gated.

Closes 8th-ferry candidate #2 of 3 remaining (after Otto-96
TECH-RADAR + Otto-97 quantum-sensing). Remaining:
- #3 Provenance-aware bullshit-detector (M; composes on top)
- #4 EVIDENCE-AND-AGREEMENT future operational (gated on #3)

Otto-98 tick primary deliverable.

* drain(#280 P1+misc Codex): PatternLedger Status/edge_type + AGENTS section + BLAKE3 v0 alignment

Three substantive Codex findings on the semantic-canonicalization
research doc:

P1 (line 335) — PatternLedger Status vs edge_type confusion:
The schema defined Status as a per-node enum {known-good,
known-bad, superseded, unresolved} but the ContradictingPairs
materialised view described status=contradicting (which isn't
in the enum). Per the events list, contradicting is an
edge_type on ProvenanceEdgeAdded, not a node-level Status.
Fixed: ContradictingPairs view now correctly says 'pairs
joined by an edge with edge_type=contradicting'. Added
clarifying paragraph distinguishing per-node Status from
per-edge edge_type.

(line 67) — AGENTS.md §absorb-discipline anchor:
The cited anchor doesn't exist; AGENTS.md's relevant
section is §'Agent operational practices' which contains
the 'When an agent ingests an external conversation' rule
that codifies the absorb cadence. Updated citation.

(line 142) — BLAKE3 v0 binding alignment:
The single-field reference to parameter_file_sha understated
the v0 hash binding (which after #268 follow-ups now binds
10 fields: hash_version + issuance_epoch + parameter_file_sha
+ approval_set_commitment + 6 from Amara's 7th-ferry).
Updated to reference the full v0 10-field input set, with
parameter_file_sha called out as the slot relevant to this
doc's N-version/φ-version pinning argument.

* drain(#280 P1 Codex): keyed removals by full insertion identity (c, metadata)

Codex P1 caught: insert is provenance-aware
`insert(c, e, metadata)` but remove was canonical-form-only
`remove(c)`. That means a single retraction nukes ALL
insertions of the same canonical form under different
provenance — wrong granularity for the retraction-native
algebra (you'd lose retrievability of valid sibling
insertions).

Fix: `remove(c, metadata)` keys on full insertion identity
`(c, metadata)` so multiple distinct insertions of the same
canonical form under different provenance can be retracted
independently. Decrements the weighted sum by 1 for that
specific (c, metadata) tuple rather than zeroing all (c)
entries.

* drain(#280 P1+P2 + 3 wording Codex): retract-event identity symmetry + spelling + governance-edit + remove-text consistency

Five Codex findings on the retrieval spine doc:

P1 (line 337) — PatternRetracted identity:
PatternLedger_t was over (CanonicalForm, Provenance,
Status), but PatternRetracted only carried (c, provenance).
Retracting a known-good insertion would also nuke a sibling
known-bad insertion of the same (c, provenance). Fix: add
status to PatternRetracted's identity tuple. Now retract
events have the same identity as their corresponding insert,
preserving the Z-set 'negative-weight retraction' algebra.

P2 (line 340) — ProvenanceEdgeRemoved symmetry:
Same logic for edges: ProvenanceEdgeAdded keyed by
(c_from, c_to, edge_type) but Removed keyed by (c_from,
c_to). Added edge_type for symmetry.

(line 6) — spelling consistency:
File mixed 'canonicalization' (US) and 'Canonicalisation'
(UK). Picked US English 'canonicalization' throughout per
the file title; replaced all UK forms.

(line 125) — 'commits-file-change' typo:
Reworded to 'Changing N requires a governance / ADR-gated
update — not a routine code edit — because it invalidates
every existing canonical form computed under the prior
version'. Distinction is now explicit.

(line 251) — remove(c) text vs interface:
Interface block now defines remove(c, metadata) but
explanatory text still said remove(c). Updated text to
match: 'remove(c, metadata) is not a tombstone; it's a
negative-weight event ... keyed on the full insertion
identity (c, metadata) so retractions target a specific
insertion rather than nuking all insertions of the same
canonical form'.

* hygiene(#280): fix 2 MD032 — line-leading + + missing blank before list

Pre-existing MD032 failures:
- L7 had '+ provenance-aware scoring' as line-leading (wrap point
  hit '+'); reflow to keep '+' off line start by extending the
  prior line.
- L497 had list immediately following 'Remaining 8th-ferry
  candidates:' text without blank separator; add blank line.

Same line-leading-special-character class as #377 / #235 / #195.
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 1 out of 1 changed files in this pull request and generated 1 comment.

Comment on lines +196 to +199
| Runner | Setup chain | Status |
|---|---|---|
| `macos-26` | bash | Proposed (PR #375) |
| `ubuntu-24.04` | bash | Proposed (PR #375) |
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

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

P1: Same table-formatting issue here: the runner matrix table uses || at the start of each row, creating an unintended empty column and likely breaking markdownlint expectations. Rewrite with single-pipe table rows.

Copilot uses AI. Check for mistakes.
AceHack added a commit that referenced this pull request Apr 25, 2026
…#470)

Promote the 'CommonMark MD032 — line-leading + / - parsed as
list marker' pattern to a named recurring-findings class in
_patterns.md after 5 instances in a single tick (2026-04-25):

- #377: '+ manifest files' continuation line
- #280: '+ provenance-aware scoring' continuation
- #195: '+ Kenji (Architect)' owner-list continuation
- #235: '+ git history' (Amara verbatim ferry)
- #219: '- [link]' (Amara verbatim ferry)

Document the two-branch fix decision tree:

- Author-controlled prose → reflow inline (replace '+'-separator
  with comma, extend prior line, etc).
- Verbatim ferry / courier content (Otto-227) → add to
  markdownlint ignore list (precedent: docs/aurora/** in #469,
  docs/amara-full-conversation/**).

Composes with Class A inline-code-span line-wrap (same shape:
line-wrap hits a CommonMark special character at line start).
Pre-commit-lint candidate noted for the doc-lint suite from
#465.
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