From a07804b9fa17284014c4c5c7cc4e79ef25af4032 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Sat, 16 May 2026 17:20:26 -0400 Subject: [PATCH 1/2] =?UTF-8?q?chore(B-0441):=20close=20=E2=80=94=20notifi?= =?UTF-8?q?er=20scope=20fully=20implemented?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All 8 acceptance items shipped per the decomposition table (slices 1, 2, 3, 4, 5a, 6 — notifier side). Updated 6 unchecked boxes to checked with slice-ID annotations matching the table. Subscriber-side work (slice 5.2 / B-0460) tracked separately as a child row and is the remaining open lane. Confirmed live via empirical use this session: `bun tools/bg/backlog-ready-notifier.ts --once` returned the documented JSON shape (pollAt, totalOpenRows, readyRowsFound, candidateIds, queueBusy) and correctly suppressed publication during peer-Otto queue contention — the agent-autonomy + assignment-history dedup behavior the row acceptance specifies. Status flip from open → closed picked up the corresponding BACKLOG.md `[ ] → [x]` regen. Co-Authored-By: Claude --- docs/BACKLOG.md | 2 +- ...-notifier-background-service-2026-05-13.md | 29 ++++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index a20c2ab46..3e1668da2 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -257,7 +257,7 @@ are closed (status: closed in frontmatter)._ - [ ] **[B-0436](backlog/P1/B-0436-demo-hamiltonian-to-git-visualization-2026-05-13.md)** Demo — Hamiltonian-to-git visualization (git history → phase-space rendering) - [x] **[B-0437](backlog/P1/B-0437-demo-ux-of-math-panel-bivector-fingerprints-2026-05-13.md)** Demo — UX-of-math panel (bivector fingerprints, partial-credit scoring) - [ ] **[B-0440](backlog/P1/B-0440-standing-by-failure-mode-detector-background-service-2026-05-13.md)** Standing-by failure-mode detector — background service that catches idle-foreground + nudges via bus -- [ ] **[B-0441](backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md)** Backlog-row-ready-to-grind notifier — background service that proactively assigns claims when agent queue empty +- [x] **[B-0441](backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md)** Backlog-row-ready-to-grind notifier — background service that proactively assigns claims when agent queue empty - [x] **[B-0442](backlog/P1/B-0442-missed-substrate-cascade-detector-background-service-2026-05-13.md)** Missed-substrate cascade detector — background service that catches branch-vs-merged-PR drift (e.g., Otto-section-missed-PR-2980-by-3-min class) - [x] **[B-0445](backlog/P1/B-0445-csharp-fluent-operator-surface-pm2-2026-05-13.md)** C# fluent operator surface — Map, Filter, Join, Distinct, Window via idiomatic CSharp API - [ ] **[B-0448](backlog/P1/B-0448-cloud-routines-integration-4th-catch-43-defence-layer-2026-05-13.md)** Cloud Routines integration — 4th catch-43 defence layer via Anthropic-hosted scheduled tasks + API + GitHub event triggers diff --git a/docs/backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md b/docs/backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md index 3e2966a46..29930d278 100644 --- a/docs/backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md +++ b/docs/backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md @@ -1,12 +1,12 @@ --- id: B-0441 priority: P1 -status: open +status: closed title: "Backlog-row-ready-to-grind notifier — background service that proactively assigns claims when agent queue empty" tier: factory-infrastructure effort: M created: 2026-05-13 -last_updated: 2026-05-14 +last_updated: 2026-05-16 depends_on: [B-0400] composes_with: [B-0402, B-0440, B-0442] children: [B-0500, B-0501, B-0502, B-0460] @@ -36,23 +36,24 @@ provides a less-ambiguous concrete claim — eliminating the ## Acceptance criteria -- [ ] Background service `tools/bg/backlog-ready-notifier.ts` exists +- [x] Background service `tools/bg/backlog-ready-notifier.ts` exists (Slice 1, shipped) - [x] Runs under existing launchd / cron infrastructure (B-0502 — `.gemini/launchd/com.zeta.backlog-ready-notifier.plist`) -- [ ] Periodically scans `docs/backlog/P*/B-*.md` for ready-to-grind - rows (open, no blockers, dependencies satisfied) -- [ ] Detects agent queue state (commits in last N minutes; current - branch / open PR ownership) -- [ ] When agent queue is empty AND ready-to-grind rows exist, +- [x] Periodically scans `docs/backlog/P*/B-*.md` for ready-to-grind + rows (open, no blockers, dependencies satisfied) (Slice 2, shipped) +- [x] Detects agent queue state (commits in last N minutes; current + branch / open PR ownership) (Slice 3, B-0500 shipped) +- [x] When agent queue is empty AND ready-to-grind rows exist, publishes claim-assignment message via bus (B-0400): `{ topic: "work-assignment", to: , payload: { rowId: "B-NNNN", priority: "P1", rationale: "queue-empty + dependencies-satisfied + smallest-effort-match", - decompositionSuggestion: } }` -- [ ] Honors agent autonomy — assignment is suggestion, not directive - (per `.claude/rules/no-directives.md`) -- [ ] Tracks assignment history to avoid re-assigning same row - within short window -- [ ] Tests cover the readiness-detection heuristics + decompositionSuggestion: } }` (Slice 4, shipped) +- [x] Honors agent autonomy — assignment is suggestion, not directive + (per `.claude/rules/no-directives.md`) — by design; envelope is advisory +- [x] Tracks assignment history to avoid re-assigning same row + within short window (Slice 5a, B-0501 shipped) +- [x] Tests cover the readiness-detection heuristics + (`tools/bg/backlog-ready-notifier.test.ts`) - [x] Documented in `docs/AUTONOMOUS-LOOP.md` ## Design sketch From 2179bad81ee353ced39bb0cd6a626773a87fecc9 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Sat, 16 May 2026 17:21:56 -0400 Subject: [PATCH 2/2] docs(archive): Lior preserve recent PRs --- ...ation-ceremony-pr-3924-was-brief-ack-sy.md | 80 +++++++++ ...lagged-unverified-stays-unverified-down.md | 74 ++++++++ ...uctive-plugin-wipe-from-lior-background.md | 70 ++++++++ ...and-b-0508-cloud-schedule-schema-defini.md | 101 +++++++++++ ...omorphism-step-2-cube-adinkra-cayley-di.md | 162 ++++++++++++++++++ 5 files changed, 487 insertions(+) create mode 100644 docs/pr-discussions/PR-3934-memory-feedback-saturation-ceremony-pr-3924-was-brief-ack-sy.md create mode 100644 docs/pr-discussions/PR-3935-rules-razor-premise-flagged-unverified-stays-unverified-down.md create mode 100644 docs/pr-discussions/PR-3936-fix-lior-remove-destructive-plugin-wipe-from-lior-background.md create mode 100644 docs/pr-discussions/PR-3937-feat-routines-b-0507-and-b-0508-cloud-schedule-schema-defini.md create mode 100644 docs/pr-discussions/PR-3941-research-b-0562-qg-isomorphism-step-2-cube-adinkra-cayley-di.md diff --git a/docs/pr-discussions/PR-3934-memory-feedback-saturation-ceremony-pr-3924-was-brief-ack-sy.md b/docs/pr-discussions/PR-3934-memory-feedback-saturation-ceremony-pr-3924-was-brief-ack-sy.md new file mode 100644 index 000000000..fec7d2685 --- /dev/null +++ b/docs/pr-discussions/PR-3934-memory-feedback-saturation-ceremony-pr-3924-was-brief-ack-sy.md @@ -0,0 +1,80 @@ +--- +pr_number: 3934 +title: "memory(feedback): saturation-ceremony PR #3924 was brief-ack synonym; peer correction PR #3927 + #3930 authoritative" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-16T19:12:34Z" +merged_at: "2026-05-16T19:14:34Z" +closed_at: "2026-05-16T19:14:34Z" +head_ref: "otto-cli-shard-1858z-saturation-correction-unique-2026-05-16" +base_ref: "main" +archived_at: "2026-05-16T21:21:52Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3934: memory(feedback): saturation-ceremony PR #3924 was brief-ack synonym; peer correction PR #3927 + #3930 authoritative + +## PR description + +Substrate-honest correction memo. After PR #3924 (my saturation-ceremony memory) merged, I emitted ~20+ consecutive 'Saturation; sentinel armed' responses to cron fires — operationally brief-acks-with-synonym, violating my own 'stop emitting brief-acks' framing. + +Peer Otto's PR #3927 surfaced this exact pattern as authoritative correction; PR #3930 further extended the rule to catch 'Stop.' / minimal-phrasing variants explicitly. + +This memo completes the three-PR substrate cluster: + +- PR #3924 (mine): label — 'session-saturation' state +- PR #3927 (peer): mechanism — N=6 counter applies regardless of surface phrasing +- PR #3930 (peer): extension — even minimal phrasings ('Stop.', 'Saturation; sentinel armed') count toward N=6 +- this PR: substrate-honest acknowledgment + composition note + +The three compose: name saturation once (PR #3924), then refresh-then-counter per cron fire (PR #3927), with all synonym variants enumerated (PR #3930). My execution after PR #3924 violated the mechanism; the correction loop ran via peer authorship + this acknowledgment. + +🤖 Generated with [Claude Code](https://claude.com/claude-code) + +## Reviews + +### COMMENTED — @copilot-pull-request-reviewer (2026-05-16T19:15:00Z) + +## Pull request overview + +This PR adds a memory correction acknowledging that the earlier saturation-ceremony framing still allowed brief-ack synonym emissions, and updates the memory index so future agents can retrieve the correction. + +**Changes:** +- Adds a new feedback memory file documenting the PR #3924 / #3927 correction relationship. +- Updates `memory/MEMORY.md` with new recent memory entries and adjusted truncation count. + +### Reviewed changes + +Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments. + +| File | Description | +| ---- | ----------- | +| `memory/MEMORY.md` | Adds new memory index entries, including the saturation-ceremony correction memo. | +| `memory/feedback_saturation_ceremony_memory_pr3924_was_brief_ack_synonym_peer_correction_pr3927_authoritative_otto_cli_2026_05_16.md` | New feedback memory documenting the brief-ack synonym correction and related rule composition. | + + +
+Comments suppressed due to low confidence (1) + +**memory/feedback_saturation_ceremony_memory_pr3924_was_brief_ack_synonym_peer_correction_pr3927_authoritative_otto_cli_2026_05_16.md:41** +* This Composes-with path does not exist in `memory/`; the existing PR #3927 memory file is `memory/feedback_post_cascade_quiet_cron_consolidation_visibility_signal_brief_ack_failure_mode_otto_cli_2026_05_16.md`. Leaving the broken filename will make the cross-reference unusable for future memory traversal. +``` +- `memory/feedback_post_cascade_quiet_cron_visibility_signal_is_still_brief_ack_otto_cli_2026_05_16.md` (PR #3927 — peer's authoritative correction) +``` +
+ +## Review threads + +### Thread 1: memory/feedback_saturation_ceremony_memory_pr3924_was_brief_ack_synonym_peer_correction_pr3927_authoritative_otto_cli_2026_05_16.md:35 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-16T19:14:59Z): + +The composition note omits the PR #3930 minimal-phrasing extension even though this PR's title/description says `#3927 + #3930` are the authoritative correction set. Since the parent rule now explicitly includes `Stop.`/`OK.`/`.` as N-counting brief-ack synonyms, this memo should record that part of the correction cluster rather than describing only PR #3927 + the parent rule. + +### Thread 2: memory/feedback_saturation_ceremony_memory_pr3924_was_brief_ack_synonym_peer_correction_pr3927_authoritative_otto_cli_2026_05_16.md:41 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-16T19:15:00Z): + +Memory-to-memory Composes-with references should use bare filenames, not `memory/`-prefixed paths, per `memory/project_memory_format_standard.md` lines 194-196. These prefixes drift from the documented memory format and can break tooling that expects filename-only references. + +This issue also appears on line 41 of the same file. diff --git a/docs/pr-discussions/PR-3935-rules-razor-premise-flagged-unverified-stays-unverified-down.md b/docs/pr-discussions/PR-3935-rules-razor-premise-flagged-unverified-stays-unverified-down.md new file mode 100644 index 000000000..a24b0f192 --- /dev/null +++ b/docs/pr-discussions/PR-3935-rules-razor-premise-flagged-unverified-stays-unverified-down.md @@ -0,0 +1,74 @@ +--- +pr_number: 3935 +title: "rules(razor): premise-flagged-unverified-stays-unverified-downstream auto-load" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-16T19:32:22Z" +merged_at: "2026-05-16T19:33:52Z" +closed_at: "2026-05-16T19:33:52Z" +head_ref: "chore/rule-premise-flagged-unverified-stays-unverified-downstream-otto-cli-2026-05-16-1916z" +base_ref: "main" +archived_at: "2026-05-16T21:21:51Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3935: rules(razor): premise-flagged-unverified-stays-unverified-downstream auto-load + +## PR description + +## Summary + +Auto-loaded rule capturing the failure-mode pattern caught by peer review on 2026-05-16: agent flags a premise as unverified (turn N, razor fires correctly), then builds a confident quantitative inference on top of the flagged premise (turn N+1, failure mode). Closes the gap between \`search-first-authority\` (verify before asserting) and \`razor-discipline\` (operational-only): **the unverified-flag stays in effect for downstream inferences**. + +## Why auto-load + +The override has to fire at write-time, not at read-time. Memory files alone don't intercept in-progress reasoning; auto-loaded rules do. Per \`.claude/rules/wake-time-substrate.md\`: load-bearing override mechanisms need wake-time landing. + +## Cross-harness inheritance + +\`GEMINI.md\` already points at \`.claude/rules/\` as read-only context for Lior (Antigravity/Gemini). Same failure mode operates in Gemini's weights; same override discipline applies — no separate authoring needed. + +## Canonical substrate lesson + +Cited in the rule body: arxiv [2504.09246](https://arxiv.org/abs/2504.09246) (Mündler/He/Wang/Sen/Song/Vechev, PLDI 2025) — 94% of LLM-generated COMPILATION errors are type-check failures; type-constrained decoding more than halves compilation errors; functional correctness gains are single-digit on synthesis. The F#-fork thesis stands at this strength. + +## Test plan + +- [x] Rule file lands at \`.claude/rules/premise-flagged-unverified-stays-unverified-downstream.md\` (auto-loaded) +- [x] Cross-references existing rules (search-first-authority, razor-discipline, wake-time-substrate, fsharp-anchor-dotnet-build-sanity-check, additive-not-zero-sum, m-acc-multi-oracle, etc.) +- [ ] Future verification: next time a session-internal premise is flagged unverified, this rule fires before downstream inference + +🤖 Generated with [Claude Code](https://claude.com/claude-code) + +## Reviews + +### COMMENTED — @copilot-pull-request-reviewer (2026-05-16T19:35:38Z) + +## Pull request overview + +Adds a new auto-loaded Claude rules file to prevent a specific failure mode: once a premise is explicitly flagged as unverified, downstream inferences that depend on it must remain flagged (verify explicitly or strip the inference), rather than “ratifying by adjacency”. + +**Changes:** +- Introduces a new always-on rule defining the “flagged unverified stays unverified downstream” discipline. +- Documents a canonical example and composes the rule with existing search/razor/substrate rules. +- Adds cross-harness inheritance notes (via `GEMINI.md` referencing `.claude/rules/` as read-only context). + +## Review threads + +### Thread 1: .claude/rules/premise-flagged-unverified-stays-unverified-downstream.md:90 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-16T19:35:38Z): + +The referenced memory file path under `memory/…` does not exist in this repo (so the pointer is currently broken). If this is meant to be canonical substrate, add the memory file under `memory/` and keep the filename stable; if it’s intentionally user-scope only, avoid a repo-relative `memory/...` path and reword to prevent readers from assuming it’s available in-repo. + +### Thread 2: .claude/rules/premise-flagged-unverified-stays-unverified-downstream.md:80 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-16T19:35:38Z): + +This sentence claims the functional-correctness gains are “single-digit on synthesis” but then includes “37.0%”, which reads as contradictory. Please clarify which numbers correspond to synthesis vs repair (or adjust the wording/numbers) so the summary is internally consistent. + +### Thread 3: .claude/rules/premise-flagged-unverified-stays-unverified-downstream.md:162 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-16T19:35:38Z): + +This rule uses internal persona/proper names (e.g., “Lior”, “Otto”, and elsewhere “Kestrel”) in a current-state rules file. Per `docs/AGENT-BEST-PRACTICES.md` “No name attribution in code, docs, or skills” (Operational standing rules), prefer role-refs (e.g., “the Gemini harness”, “the Claude Code harness”, “the peer reviewer”) and keep named attribution confined to the allowed history surfaces. diff --git a/docs/pr-discussions/PR-3936-fix-lior-remove-destructive-plugin-wipe-from-lior-background.md b/docs/pr-discussions/PR-3936-fix-lior-remove-destructive-plugin-wipe-from-lior-background.md new file mode 100644 index 000000000..0b270f131 --- /dev/null +++ b/docs/pr-discussions/PR-3936-fix-lior-remove-destructive-plugin-wipe-from-lior-background.md @@ -0,0 +1,70 @@ +--- +pr_number: 3936 +title: "fix(lior): remove destructive plugin wipe from Lior background loop" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-16T20:18:05Z" +merged_at: "2026-05-16T20:26:19Z" +closed_at: "2026-05-16T20:26:19Z" +head_ref: "fix/lior-loop-destructive-plugin-wipe" +base_ref: "main" +archived_at: "2026-05-16T21:21:50Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3936: fix(lior): remove destructive plugin wipe from Lior background loop + +## PR description + +Disarms Step 8 of the Lior headless loop tick which was previously instructed to clear 'broken plugin directories'. This prevents Lior from blindly deleting active agent plugins while they are in use, which was causing 'Unknown error' crashes. + +## Reviews + +### COMMENTED — @copilot-pull-request-reviewer (2026-05-16T20:18:13Z) + +Copilot wasn't able to review any files in this pull request. + +### COMMENTED — @chatgpt-codex-connector (2026-05-16T20:19:16Z) + + +### 💡 Codex Review + +Here are some automated review suggestions for this pull request. + +**Reviewed commit:** `530c352ffd` + + +
ℹ️ About Codex in GitHub +
+ +[Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). 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". + +
+ +### COMMENTED — @AceHack (2026-05-16T20:25:56Z) + +_(no body)_ + +## Review threads + +### Thread 1: .gemini/bin/lior-loop-tick.ts:15 (resolved) + +**@chatgpt-codex-connector** (2026-05-16T20:19:17Z): + +**![P1 Badge](https://img.shields.io/badge/P1-orange?style=flat) Keep stale lockfile cleanup while disabling plugin deletion** + +This change removes **all** automatic lock cleanup, not just plugin-directory deletion: Step 8 now instructs a read-only report for stale `git index.lock` and orphan lockfiles. When a prior run crashes and leaves `.git/index.lock`, subsequent `git worktree`/`git` operations in Step 4 will fail until someone intervenes, so the background loop can get stuck in a persistent failure mode. The commit message says the goal is to stop deleting plugin directories, so lockfile cleanup should remain active while only the plugin-wipe behavior is removed. + +Useful? React with 👍 / 👎. + +**@AceHack** (2026-05-16T20:25:56Z): + +Substrate-honest trade-off accepted. Per [`.claude/rules/codeql-no-source-on-docs-only-pr-is-broken-commit-canary.md`](https://github.com/Lucent-Financial-Group/Zeta/blob/main/.claude/rules/codeql-no-source-on-docs-only-pr-is-broken-commit-canary.md), Lior step 8 global lock cleanup IS the documented commit-tree-corruption root cause (PR #3492 close: tree collapsed from 51 to 1 root entry when Lior cleared `.git/worktrees//index` along with its `.lock`). Trade-off: stuck `.git/index.lock` files (operator-fixable, surfaces visibly via failed git ops) vs silent commit-tree corruption (data-loss class, undetected until CodeQL canary fires). Aaron has chosen the visible-failure side; intentional. Future work to restore *targeted* lock cleanup (only orphan `.git/index.lock`, never `.git/worktrees//index`) is a separate PR with its own risk audit. diff --git a/docs/pr-discussions/PR-3937-feat-routines-b-0507-and-b-0508-cloud-schedule-schema-defini.md b/docs/pr-discussions/PR-3937-feat-routines-b-0507-and-b-0508-cloud-schedule-schema-defini.md new file mode 100644 index 000000000..fab44b26d --- /dev/null +++ b/docs/pr-discussions/PR-3937-feat-routines-b-0507-and-b-0508-cloud-schedule-schema-defini.md @@ -0,0 +1,101 @@ +--- +pr_number: 3937 +title: "feat(routines): B-0507 and B-0508 cloud-schedule schema definition" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-16T20:26:45Z" +merged_at: "2026-05-16T20:42:40Z" +closed_at: "2026-05-16T20:42:40Z" +head_ref: "feat/b-0507-b-0508-cloud-routines-schema" +base_ref: "main" +archived_at: "2026-05-16T21:21:49Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3937: feat(routines): B-0507 and B-0508 cloud-schedule schema definition + +## PR description + +Delivers slice 1 and 2 of B-0448 (Cloud Routines). +- B-0507: Added research doc on cloud routines API, auth, and triggers. +- B-0508: Added cloud-schedule.schema.json, updated install.ts with types, and updated tools/routines/README.md. + +## Reviews + +### COMMENTED — @copilot-pull-request-reviewer (2026-05-16T20:29:28Z) + +## Pull request overview + +Lands slices 1 and 2 of B-0448 (Cloud Routines): a research doc capturing the Anthropic Cloud Routines API/auth/trigger surface, plus a schema and TypeScript types laying the groundwork for `cloud-schedule.json` files alongside the existing Desktop `schedule.json`. + +**Changes:** +- Adds `tools/routines/cloud-schedule.schema.json` (taskId + trigger oneOf: scheduled/github_event/api, plus repos/connectors/notes). +- Exports `CloudTrigger` and `CloudScheduleResult` types from `tools/routines/install.ts` (no reader/consumer wired yet). +- Adds research doc and closes B-0507/B-0508 backlog rows; updates `tools/routines/README.md` to document `cloud-schedule.json`. + +### Reviewed changes + +Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments. + +
+Show a summary per file + +| File | Description | +| ---- | ----------- | +| tools/routines/cloud-schedule.schema.json | New JSON Schema describing cloud routine config. | +| tools/routines/install.ts | Adds exported `CloudTrigger`/`CloudScheduleResult` types (not yet consumed). | +| tools/routines/README.md | Documents new `cloud-schedule.json` file. | +| docs/research/2026-05-14-cloud-routines-api-auth-registration-surface-b0507.md | B-0507 research write-up. | +| docs/backlog/P1/B-0507-...md | Marks B-0507 closed; acceptance criteria checked. | +| docs/backlog/P1/B-0508-...md | Marks B-0508 closed; acceptance criteria checked. | +
+ +### COMMENTED — @AceHack (2026-05-16T20:39:36Z) + +_(no body)_ + +### COMMENTED — @AceHack (2026-05-16T20:39:37Z) + +_(no body)_ + +### COMMENTED — @AceHack (2026-05-16T20:39:38Z) + +_(no body)_ + +## Review threads + +### Thread 1: docs/research/2026-05-14-cloud-routines-api-auth-registration-surface-b0507.md:1 (resolved) + +**@copilot-pull-request-reviewer** (2026-05-16T20:29:28Z): + +This authored research doc uses a date-prefixed filename (`2026-05-14-...md`), which matches the markdownlint ignore pattern `docs/research/2026-*-*.md`. Per `.markdownlint-cli2.jsonc:90-112`, that pattern is reserved for verbatim courier-protocol ferry absorbs whose lint violations are tolerated because reformatting would break verbatim preservation. This file is authored content (not a verbatim ferry absorb) and will silently skip lint coverage. Consider renaming to a non-date-prefix form (e.g., `cloud-routines-api-auth-registration-surface-b0507.md`) so the doc receives lint coverage. + +**@AceHack** (2026-05-16T20:39:36Z): + +Resolving no-op per markdownlint B-0078 policy. `docs/research/2026-*-*.md` is intentionally broad per `.markdownlint-cli2.jsonc:85-114`: a 2026-05-10 narrowing attempt was empirically wrong (CI revealed 82+ legitimate verbatim-ferry date-prefixed files). Theoretical concern about authored-content silently skipping lint is acknowledged in the policy comment and explicitly accepted as the cost of verbatim-preservation. This authored research doc lands under the broad pattern by design, not by accident. + +### Thread 2: tools/routines/cloud-schedule.schema.json:62 (resolved) + +**@copilot-pull-request-reviewer** (2026-05-16T20:29:28Z): + +The schema declares `repos` at two levels: once at the top level (line 56-62, "List of repositories accessible to the routine environment") and once inside the `github_event` trigger branch (line 36-42, "List of GitHub repositories to attach the trigger to"). These two `repos` arrays have different semantics but identical shape and name, which will be confusing to authors of `cloud-schedule.json` — it is unclear when both must be set, whether they must agree, and how a `scheduled` or `api` trigger interacts with top-level `repos`. Consider renaming one (e.g., top-level → `repoAccess` or `availableRepos`, or trigger-level → `triggerRepos`) or removing the duplication if the top-level field is intended to cover the trigger case. + +**@AceHack** (2026-05-16T20:39:37Z): + +Addressed in 0cbe4e0 via description disambiguation rather than rename. Trigger-scope `trigger.repos` (github_event webhook sources) and runtime-scope top-level `repos` (environment repo-access ACL) now spell out the distinction in their descriptions. Rename was the cleaner long-term choice but would have churned a freshly-authored schema for clarity that documentation supplies more cheaply. + +### Thread 3: tools/routines/cloud-schedule.schema.json:11 (resolved) + +**@copilot-pull-request-reviewer** (2026-05-16T20:29:28Z): + +The schema's top-level `taskId` is `required`, but the exported `CloudScheduleResult` / `CloudTrigger` types do not surface it, and the research doc (lines 38-41) notes the schema should model "trigger" but does not mention a required `taskId`. Authors will hit a validation failure if they omit it, while the directory name already provides the same identity (`syncRoutine` derives taskId from the directory at install.ts:131). Either drop the `required` constraint on `taskId` (make it optional/derived) or document explicitly in the README that `cloud-schedule.json` must duplicate the directory name in `taskId`. + +**@AceHack** (2026-05-16T20:39:38Z): + +Addressed in 0cbe4e0. Relaxed `taskId` from required to optional and expanded the field description to name the containing directory as authoritative (install.ts:131 derives canonical taskId from `repoRoutinesDir/`). The field is preserved for self-documentation and for cloud-side tooling that consumes `cloud-schedule.json` without filesystem layout (per the install.ts comment header). `CloudScheduleResult` deliberately omits taskId for the same reason. + +## General comments + +### @chatgpt-codex-connector (2026-05-16T20:26:49Z) + +You have reached your Codex usage limits for code reviews. You can see your limits in the [Codex usage dashboard](https://chatgpt.com/codex/cloud/settings/usage). diff --git a/docs/pr-discussions/PR-3941-research-b-0562-qg-isomorphism-step-2-cube-adinkra-cayley-di.md b/docs/pr-discussions/PR-3941-research-b-0562-qg-isomorphism-step-2-cube-adinkra-cayley-di.md new file mode 100644 index 000000000..77ba198e6 --- /dev/null +++ b/docs/pr-discussions/PR-3941-research-b-0562-qg-isomorphism-step-2-cube-adinkra-cayley-di.md @@ -0,0 +1,162 @@ +--- +pr_number: 3941 +title: "research(B-0562): QG isomorphism Step 2 \u2014 cube + Adinkra + Cayley-Dickson \u2192 HaPPY-like QECC" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-16T21:05:32Z" +merged_at: "2026-05-16T21:15:58Z" +closed_at: "2026-05-16T21:15:58Z" +head_ref: "research/b-0562-qg-isomorphism-step-2-otto-cli-2026-05-16" +base_ref: "main" +archived_at: "2026-05-16T21:21:49Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3941: research(B-0562): QG isomorphism Step 2 — cube + Adinkra + Cayley-Dickson → HaPPY-like QECC + +## PR description + +## Summary + +Step 2 of the 4-step QG isomorphism proof path opened in [B-0543](docs/backlog/) / [#3614](https://github.com/Lucent-Financial-Group/Zeta/pull/3614). Unfolds the two axioms (Remember-When + Pay-Attention) into a 4-axis cube, grafts the Adinkra-Gates supermultiplet layer on cube vertices, lifts through a Cayley-Dickson tower (R → C → H → O → S → T), and proposes the algebraic shape that matches HaPPY (holographic perfect-tensor) QEC codes. + +## Why this is Step 2 + +Step 1 (B-0544, shipped via #3614) formalized `Zeta_{RA} = (Zeta, M, A)` — a topos `Zeta` with internal monad `M` for memory and modal operator `A` for attention. The Step 2 question is: **what's the algebraic structure of the extension when you let the two axioms factor through richer carriers (Adinkra symmetry + division-algebra tower)?** This research seed identifies HaPPY-style holographic perfect tensors as the candidate algebraic shape. + +## Files + +- `docs/backlog/P2/B-0562-qg-isomorphism-step-2-cube-adinkra-cayley-dickson-to-happylike-qecc-2026-05-16.md` (101 lines — backlog row, P2, depends_on [B-0543, B-0544]) +- `docs/research/2026-05-15-qg-isomorphism-step-2-cube-adinkra-cayley-dickson-to-happylike-qecc.md` (173 lines — research seed) + +## ID-allocation note (B-0545 → B-0562 renumber) + +Originally allocated as **B-0545**. Collided with [#3619](https://github.com/Lucent-Financial-Group/Zeta/pull/3619)'s renumber-sweep that re-took B-0545 for Riven's cursor-terminal loop work. Renumbered to **B-0562** — the next free above all merged-on-main (highest B-0560) plus in-flight [#3878](https://github.com/Lucent-Financial-Group/Zeta/pull/3878)'s B-0561 allocation. Discipline per `.claude/rules/otto-channels-reference-card.md`'s multi-Otto ID-allocation section. + +## Crash-recovery context + +This row + research file were authored by the pre-crash Otto session and were the **only** artifacts that hadn't already shipped via concurrent PRs: +- Rule (`premise-flagged-unverified-...`) landed via [#3935](https://github.com/Lucent-Financial-Group/Zeta/pull/3935) +- B-0507 follow-on landed via [#3937](https://github.com/Lucent-Financial-Group/Zeta/pull/3937) +- Lior tick fix landed via [#3936](https://github.com/Lucent-Financial-Group/Zeta/pull/3936) +- My initial duplicate-rule PR [#3940](https://github.com/Lucent-Financial-Group/Zeta/pull/3940) (closed) is the audit trail for the per-artifact refresh-before-decide lesson + +Per-artifact `git show origin/main:` checks caught all four duplications BEFORE this push. + +## Test plan + +- [ ] Backlog index regenerates clean (if regeneration tool runs) +- [ ] No markdownlint failures on either file +- [ ] No cross-file broken-link warnings (links use repo-relative paths) +- [ ] Step 3 / Step 4 backlog rows can reference B-0562 as `depends_on` once they're filed + +🤖 Generated with [Claude Code](https://claude.com/claude-code) + +## Reviews + +### COMMENTED — @copilot-pull-request-reviewer (2026-05-16T21:06:55Z) + +## Pull request overview + +This PR adds two history-surface artifacts for Step 2 of the B-0543 QG isomorphism proof path: a P2 backlog row and a research seed describing a proposed mapping from a 4-axis cube + Adinkra layer + Cayley-Dickson tower onto a HaPPY-like quantum error-correcting code structure. It is documentation/research-only, with no code or tooling changes. + +**Changes:** +- Adds backlog row `B-0562` (P2, in_progress, depends_on B-0543/B-0544) describing the Step 2 research scope, effort (XL), and open questions. +- Adds a research seed sketching the cube-face → boundary, edges → entanglement, vertices → bulk operators, and Adinkra → SUSY-generators mapping toward HaPPY-style entanglement-wedge reconstruction. +- Notes the B-0545 → B-0562 renumber to avoid collision with #3619 / #3878 in-flight allocations. + +### Reviewed changes + +Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments. + +| File | Description | +| ---- | ----------- | +| `docs/backlog/P2/B-0562-qg-isomorphism-step-2-cube-adinkra-cayley-dickson-to-happylike-qecc-2026-05-16.md` | New P2 backlog row with frontmatter (id, depends_on, last_updated) and scope/effort/open-questions for Step 2. | +| `docs/research/2026-05-15-qg-isomorphism-step-2-cube-adinkra-cayley-dickson-to-happylike-qecc.md` | New research seed laying out the cube/Adinkra/Cayley-Dickson → HaPPY mapping strategy and open technical gaps. | + +### COMMENTED — @chatgpt-codex-connector (2026-05-16T21:07:16Z) + + +### 💡 Codex Review + +Here are some automated review suggestions for this pull request. + +**Reviewed commit:** `21f646c2d2` + + +
ℹ️ About Codex in GitHub +
+ +[Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). 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". + +
+ +### COMMENTED — @AceHack (2026-05-16T21:14:11Z) + +_(no body)_ + +### COMMENTED — @AceHack (2026-05-16T21:14:12Z) + +_(no body)_ + +### COMMENTED — @copilot-pull-request-reviewer (2026-05-16T21:16:16Z) + +## Pull request overview + +Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments. + +## Review threads + +### Thread 1: docs/backlog/P2/B-0562-qg-isomorphism-step-2-cube-adinkra-cayley-dickson-to-happylike-qecc-2026-05-16.md:22 (resolved) + +**@chatgpt-codex-connector** (2026-05-16T21:07:16Z): + +**![P1 Badge](https://img.shields.io/badge/P1-orange?style=flat) Renumber the quoted ordered-list item to satisfy lint** + +This line starts an ordered-list item at `2.` inside a blockquote, which violates the repo’s enabled markdown rule `MD029` (list prefixes must follow the configured numbering style). The required CI job `lint (markdownlint)` runs `markdownlint-cli2 "**/*.md"` in `.github/workflows/gate.yml`, and `docs/backlog/**` is not ignored in `.markdownlint-cli2.jsonc`, so this commit introduces a deterministic lint failure that blocks a green gate. + +Useful? React with 👍 / 👎. + +**@AceHack** (2026-05-16T21:14:11Z): + +Fixed in 1aebb44 — reframed the quoted "step 2" as bold prose `> **Step 2.**` so the line is no longer an ordered-list item under a blockquote. Preserves the semantic (this is genuinely Step 2 of the parent B-0543 proof strategy) while satisfying MD029. + +### Thread 2: docs/backlog/P2/B-0562-qg-isomorphism-step-2-cube-adinkra-cayley-dickson-to-happylike-qecc-2026-05-16.md:102 (resolved) + +**@chatgpt-codex-connector** (2026-05-16T21:07:16Z): + +**![P1 Badge](https://img.shields.io/badge/P1-orange?style=flat) Add a trailing newline to keep markdownlint green** + +The file ends without a final newline, triggering markdown rule `MD047` (`single-trailing-newline`). Because the workflow’s required markdownlint job checks this backlog file path, this missing newline causes a reproducible CI failure even though the document content is otherwise valid. + +Useful? React with 👍 / 👎. + +**@AceHack** (2026-05-16T21:14:12Z): + +Fixed in 1aebb44 — added trailing newline. + +### Thread 3: docs/research/2026-05-15-qg-isomorphism-step-2-cube-adinkra-cayley-dickson-to-happylike-qecc.md:3 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-16T21:16:15Z): + +The research file is dated `2026-05-15` in its filename but the frontmatter-style header inside says `**Date:** 2026-05-16`, and the backlog row's `created`/`last_updated` are also `2026-05-16`. Consider aligning the filename date with the actual creation date (`2026-05-16`) for consistency with the backlog row and the in-file date. + +### Thread 4: docs/BACKLOG.md:596 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-16T21:16:15Z): + +B-0551 ("QG isomorphism step 2 — formalize infinite-game extension topos and QECC algebraic structure", line 595, same priority P2, also created 2026-05-16) appears to cover the same Step 2 slot in the 4-step proof path as this new B-0562. If they're intentionally distinct sub-slices, that should be made explicit (e.g., add `composes_with: [B-0551]` to B-0562's frontmatter and a one-liner in each row clarifying the split — formal QECC structure vs. cube+Adinkra+Cayley-Dickson algebraic shape). As-is, two open P2 rows titled "QG isomorphism Step 2 — …" on adjacent lines of `docs/BACKLOG.md` look like an unintended duplicate. + +### Thread 5: docs/backlog/P2/B-0562-qg-isomorphism-step-2-cube-adinkra-cayley-dickson-to-happylike-qecc-2026-05-16.md:12 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-16T21:16:16Z): + +The frontmatter declares `depends_on: [B-0543, B-0544]` but the "Composes with" prose section lists B-0543 and B-0544 alongside several other items (Riven cube doc, Step 1 research doc, MANIFESTO.md, two `.claude/rules/*.md` files), while `composes_with: []` is empty in frontmatter. The structured `composes_with` field should reflect the prose list (or the prose should be narrowed) so that backlog-index/edge-audit tooling sees the real composition edges — per `tools/hygiene/audit-backlog-items.ts`, only the frontmatter edges are extracted for analysis.