From ff4ee3910c02057c25039e65cf2ee4433930e6ed Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Sun, 26 Apr 2026 13:46:52 -0400 Subject: [PATCH 1/2] =?UTF-8?q?sync(acehack=E2=86=92lfg)=20batch-3:=20add?= =?UTF-8?q?=20'three=20surfaces,=20two=20vocabularies'=20terminology=20sec?= =?UTF-8?q?tion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per Otto-347 2nd-agent verify (audit + 2nd-agent both confirm): of batch-3's 6 UPSTREAM-RHYTHM commits (44-46, 48, 58-59), only commit #44 (268100a) had substantive substrate not on LFG. Commits #45/#46/#58/#59 are SUPERSEDED-DISCARD (verified via independent LFG-side merges PR #137 and PR #139); commit #48's UPSTREAM-RHYTHM portion is also SUPERSEDED. This PR brings forward the three-surfaces vocabulary (upstream/fork/SUT, with SUT/factory orthogonality) from AceHack commit 268100a, rewritten into LFG's current wording per the option-c discipline. The substantive contribution: clarifies that SUT and factory both live inside either upstream or fork; the upstream↔fork rhythm governs PR cadence only, while the SUT↔factory boundary lives in docs/FACTORY-METHODOLOGIES.md. Commit #48's BACKLOG ruleset-audit-findings expansion is FLAGGED for Aaron's sanity-check (auditor recommended human-decide before landing — the LFG row is currently terse, may have been intentionally trimmed, may want re-expansion or not). Co-Authored-By: Claude Opus 4.7 --- docs/UPSTREAM-RHYTHM.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/UPSTREAM-RHYTHM.md b/docs/UPSTREAM-RHYTHM.md index 89492850..e0bf6ddc 100644 --- a/docs/UPSTREAM-RHYTHM.md +++ b/docs/UPSTREAM-RHYTHM.md @@ -8,6 +8,46 @@ configuration (see overlay: batched upstream rhythm"). This doc is that configuration for Zeta. +## Terminology — three surfaces, two vocabularies + +Zeta has **three surfaces**, each named in its own canonical +vocabulary. No invented labels. + +Two of the three come from git (the repo axis): + +- **upstream** — `Lucent-Financial-Group/Zeta`. The parent + repo. Where releases, stable URLs, issue numbers, and the + social / governance edge live. +- **fork** — `AceHack/Zeta`. The fork the human maintainer + develops on day-to-day. Lower CI cost, faster iteration; + upstream surfaces (Copilot coding-agent, Actions minutes, + paid seats) aren't charged per-PR there. + +The third comes from testing/QA vocabulary (the role axis): + +- **system under test (SUT)** — the Zeta product itself: + `src/**`, `openspec/specs/**`, `docs/**.tla`, tests, + libraries, the retractable-contract ledger. Distinct from + the **factory** (the tooling that builds and tests the SUT: + `.claude/**`, agents, skills, `tools/**`, + `docs/hygiene-history/**`). Both upstream and fork contain + SUT content and factory content; the SUT/factory distinction + is *not* about which repo hosts the bits but about what role + the bits play. + +The three surfaces compose: SUT and factory both live inside +either upstream or fork; the rhythm described in this doc +governs only the **upstream ↔ fork** cadence, not the +**SUT ↔ factory** boundary (that lives in +`docs/FACTORY-METHODOLOGIES.md` and the people-optimizer +notes). + +The fork exists to feed into upstream. When fork-vs-upstream +disagree on anything (scope, contents, governance), upstream +wins. + +Lineage: this section adapts AceHack commit `268100a` (Round 44 — *"3 surfaces, not 2"*) into the upstream LFG version per the option-c rewrite-into-current-architecture sync discipline (`docs/sync/acehack-to-lfg-cherry-pick-audit-2026-04-26.md`). The AceHack commit's substantive contribution was the three-surfaces vocabulary; this version preserves LFG's existing wording around upstream/fork while adding the SUT/factory orthogonality framing. + ## Zeta's choice: batched fork-first rhythm **Default PR target:** `AceHack/Zeta:main`, not From 785ec9465b49cd5995e0cab7ff51e72b32c89eef Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Sun, 26 Apr 2026 14:09:55 -0400 Subject: [PATCH 2/2] fix(upstream-rhythm): correct TLA+ path + clarify role-not-location boundary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Copilot caught: `docs/**.tla` is stale (no TLA+ files under docs/); LFG migrated TLA+ specs to `tools/tla/specs/*.tla`. Plus the directory-list contradicted the doc's own role-not-location framing (TLA+ under tools/ but the paragraph categorized tools/ as factory). Fix: 1. `docs/**.tla` → `tools/tla/specs/**.tla` 2. Annotate that TLA+ specs are SUT-by-role even though they live under tools/ 3. Add explicit worked example clarifying role-not-location Per Otto-347 cost-asymmetry: 2nd-agent (Copilot) caught a stale-path that I cherry-picked verbatim from AceHack without verify. Same failure mode as Otto-2026-04-26 stale-mental-model pattern. Co-Authored-By: Claude Opus 4.7 --- docs/UPSTREAM-RHYTHM.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/UPSTREAM-RHYTHM.md b/docs/UPSTREAM-RHYTHM.md index e0bf6ddc..856f26c5 100644 --- a/docs/UPSTREAM-RHYTHM.md +++ b/docs/UPSTREAM-RHYTHM.md @@ -26,14 +26,18 @@ Two of the three come from git (the repo axis): The third comes from testing/QA vocabulary (the role axis): - **system under test (SUT)** — the Zeta product itself: - `src/**`, `openspec/specs/**`, `docs/**.tla`, tests, + `src/**`, `openspec/specs/**`, `tools/tla/specs/**.tla` + (the TLA+ formal specs the product must satisfy — SUT + by role even though they live under `tools/`), tests, libraries, the retractable-contract ledger. Distinct from the **factory** (the tooling that builds and tests the SUT: - `.claude/**`, agents, skills, `tools/**`, + `.claude/**`, agents, skills, most of `tools/**`, `docs/hygiene-history/**`). Both upstream and fork contain SUT content and factory content; the SUT/factory distinction - is *not* about which repo hosts the bits but about what role - the bits play. + is *not* about which repo or directory hosts the bits but + about what role the bits play. (Worked example: TLA+ specs + live under `tools/` by location but are SUT by role; most + of the rest of `tools/` is factory by role.) The three surfaces compose: SUT and factory both live inside either upstream or fork; the rhythm described in this doc