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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
pr_number: 5096
title: "backlog(B-0773 P1): re-land cluster as digital twin \u2014 git-native + event-store-native + AI-native; unifying frame for B-0772 fabric"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T05:03:19Z"
merged_at: "2026-05-26T05:04:57Z"
closed_at: "2026-05-26T05:04:57Z"
head_ref: "otto-cli/reland-b0773-0504z"
base_ref: "main"
archived_at: "2026-05-27T19:43:07Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5096: backlog(B-0773 P1): re-land cluster as digital twin — git-native + event-store-native + AI-native; unifying frame for B-0772 fabric

## PR description

## Summary

Re-land of stale-DIRTY [PR #5060](https://github.com/Lucent-Financial-Group/Zeta/pull/5060) (Tier-3 per [`pr-triage-tiers.md`](.claude/rules/pr-triage-tiers.md)).

- Same B-0773 row (269 lines from PR #5060 head `5b931d768`)
- `docs/BACKLOG.md` regenerated against current origin/main
- Pre-emptive MD032 fix (`+` prose-joiner at line start)

Follow-up: close #5060 with substrate-recoverable cross-link.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-26T05:05:30Z)

## Pull request overview

Re-lands backlog item **B-0773** describing the “cluster as digital twin” framing (git-native + event-store-native + AI-native) as the unifying conceptual layer for the B-0772 observable/controllable cluster fabric, and regenerates the generated backlog index to include it.

**Changes:**
- Adds new per-row backlog file for **B-0773** under `docs/backlog/P1/`.
- Updates `docs/BACKLOG.md` to include the new **B-0773** entry.

### Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.

| File | Description |
| ---- | ----------- |
| docs/backlog/P1/B-0773-cluster-as-digital-twin-git-native-event-store-native-ai-native-aaron-2026-05-25.md | Introduces the new P1 backlog row defining the digital-twin framing and acceptance criteria. |
| docs/BACKLOG.md | Regenerates the backlog index to include the new B-0773 row link. |

## Review threads

### Thread 1: docs/backlog/P1/B-0773-cluster-as-digital-twin-git-native-event-store-native-ai-native-aaron-2026-05-25.md:86 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-26T05:05:28Z):

Line references `B-428` in the twin-simulation row, but this looks like a typo/inconsistent ID (elsewhere this document references `B-0428`). Please correct the backlog ID so the cross-reference resolves to the intended row.

### Thread 2: docs/backlog/P1/B-0773-cluster-as-digital-twin-git-native-event-store-native-ai-native-aaron-2026-05-25.md:43 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-26T05:05:29Z):

The table header uses a double leading pipe (`|| ...`), which introduces an empty first column and renders differently than the standard backlog tables (single leading `|`). Consider changing these table rows to start with a single `|` for consistent formatting.

### Thread 3: docs/backlog/P1/B-0773-cluster-as-digital-twin-git-native-event-store-native-ai-native-aaron-2026-05-25.md:84 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-26T05:05:29Z):

This table is formatted with `||` at the start of each row, which creates an unintended empty first column. For consistency/readability, use a single leading `|` like other backlog tables.

### Thread 4: docs/backlog/P1/B-0773-cluster-as-digital-twin-git-native-event-store-native-ai-native-aaron-2026-05-25.md:141 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-26T05:05:29Z):

The comparison table rows start with `||`, which creates an empty first column in Markdown tables. Use a single leading `|` to avoid a shifted table layout.

### Thread 5: docs/backlog/P1/B-0773-cluster-as-digital-twin-git-native-event-store-native-ai-native-aaron-2026-05-25.md:225 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-26T05:05:30Z):

This table header/rows use `||` at the start, producing an extra empty column. Recommend switching to the standard `|`-prefixed table format used elsewhere in `docs/backlog/**`.

## General comments

### @chatgpt-codex-connector (2026-05-26T05:03:22Z)

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).
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
pr_number: 5097
title: "backlog(B-0790): two-persona clarification + Mika substrate batch composes_with (follow-up to #5095)"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T05:05:01Z"
merged_at: "2026-05-26T05:07:04Z"
closed_at: "2026-05-26T05:07:04Z"
head_ref: "otto-cli/b0790-zero-dev-machines-cluster-native-voice-primary-2026-05-26"
base_ref: "main"
archived_at: "2026-05-27T19:43:06Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5097: backlog(B-0790): two-persona clarification + Mika substrate batch composes_with (follow-up to #5095)

## PR description

## Summary

Aaron 2026-05-26 follow-up clarifications to B-0790 (#5095) end-state architecture.

**(1) TWO personas — not one.**

- **Homelab / home-automation** = zero-dev-machine + voice-primary (Alexa + future microphones connected directly to cluster)
- **Maintainer** (Aaron / Addison / Max) = KEEPS dev machines for testing/local work BUT inverts their role from primary-work-substrate to **conversational interface INTO cluster software factory** (Claude Code + crystal-ball + RunMe + git-native markdown + auto-JIT + deferred-run + Continue-with + Obsidian on top + knowledge graph + event store + Prometheus/observability queries in runbooks)
- Voice is one interface among many for **both** personas (\"can be done with just voice too\" applies to both)

Both personas converge on cluster-as-primary-substrate-engineering-surface; the difference is operator-side interface, NOT substrate-side architecture. Iter-progressions ship value for both personas simultaneously; substrate work doesn't fork.

**(2) composes_with adds Mika substrate batch.**

B-0780, B-0781, B-0783, B-0784, B-0785, B-0786 carry the cluster-software-factory substrate primitives the maintainer-persona's dev machine interfaces INTO via Claude Code. Aaron: *\"some of this is backloged based on Mika conversation.\"*

## Changes

- Frontmatter \`composes_with:\` adds B-0780, B-0781, B-0783, B-0784, B-0785, B-0786
- Frontmatter \`tags:\` adds \`maintainer-persona\` + \`cluster-software-factory\`
- New \"Two personas (zero-dev-machine is ONE of two end-states; both ship)\" section with table + verbatim maintainer framing + 3 follow-on disciplines
- \"Composes with substrate\" prose extended with 6 Mika-batch entries
- \"Origin\" extended from 2 signals to 4 signals (adds the persona-clarification + Mika-cross-ref quotes)

## Test plan

- [x] B-0790 file edit is content-only (no structural change to index format)
- [x] composes_with values are real backlog IDs (B-0780/B-0781/B-0783/B-0784/B-0785/B-0786 — all from today's Mika substrate batch)
- [ ] BACKLOG.md index regeneration on next \`tools/backlog/generate-index.ts\` run (no agent-side regen needed; index regenerates on next backlog hygiene tick)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## General comments

### @chatgpt-codex-connector (2026-05-26T05:05:07Z)

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).
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
pr_number: 5098
title: "backlog(B-0776 P1): re-land simplest-first plugin sequence \u2014 Redis KV first, then NATS / CockroachDB / Temporal / Orleans / OPA, etc."
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T05:06:42Z"
merged_at: "2026-05-26T05:18:37Z"
closed_at: "2026-05-26T05:18:38Z"
head_ref: "otto-cli/reland-b0776-0506z"
base_ref: "main"
archived_at: "2026-05-27T19:43:05Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5098: backlog(B-0776 P1): re-land simplest-first plugin sequence — Redis KV first, then NATS / CockroachDB / Temporal / Orleans / OPA, etc.

## PR description

## Summary

Re-land of stale-DIRTY [PR #5062](https://github.com/Lucent-Financial-Group/Zeta/pull/5062) (Tier-3 per [`pr-triage-tiers.md`](.claude/rules/pr-triage-tiers.md)).

- Same B-0776 row (253 lines from PR #5062 head `887dfc5ea`)
- `docs/BACKLOG.md` regenerated against current origin/main
- 2 pre-emptive MD032 fixes (`+` prose-joiners at line start)

Follow-up: close #5062 with substrate-recoverable cross-link.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-26T05:09:49Z)

## Pull request overview

Re-lands backlog row **B-0776** describing a “simplest-first” sequence for wrapping already-deployed cluster substrate components as Zeta plugin interfaces (starting with Redis KV), and regenerates the root backlog index to include the new row.

**Changes:**
- Adds `docs/backlog/P1/B-0776-...md` (new P1 backlog row capturing the proposed plugin sequencing and Rank 1 acceptance scope).
- Updates `docs/BACKLOG.md` to include the new B-0776 entry in the generated index.

### Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

| File | Description |
| ---- | ----------- |
| docs/backlog/P1/B-0776-simplest-first-plugin-sequence-wrapping-already-deployed-cluster-substrate-redis-nats-cockroach-temporal-orleans-opa-aaron-2026-05-25.md | New backlog row defining the simplest-first plugin rollout sequence and Rank 1 (Redis KV) acceptance criteria. |
| docs/BACKLOG.md | Regenerated backlog index including the new B-0776 entry. |

### COMMENTED — @copilot-pull-request-reviewer (2026-05-26T05:18:38Z)

## Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

## Review threads

### Thread 1: docs/backlog/P1/B-0776-simplest-first-plugin-sequence-wrapping-already-deployed-cluster-substrate-redis-nats-cockroach-temporal-orleans-opa-aaron-2026-05-25.md:72 (resolved)

**@copilot-pull-request-reviewer** (2026-05-26T05:09:48Z):

`B-0743` is referenced here, but there is no corresponding backlog row in `docs/backlog/**` (and it also does not appear in the generated `docs/BACKLOG.md`). This leaves the row with a broken cross-reference; either update this to the correct existing B-id or land the missing B-0743 row in the backlog so the reference resolves.

### Thread 2: docs/backlog/P1/B-0776-simplest-first-plugin-sequence-wrapping-already-deployed-cluster-substrate-redis-nats-cockroach-temporal-orleans-opa-aaron-2026-05-25.md:113 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-26T05:18:38Z):

The F# interface snippet won’t compile as written: `Option<'T>` isn’t the idiomatic/valid option type spelling in F# (use `'T option` / `option<'T>`), and `AsyncSeq` doesn’t appear to be used elsewhere in the codebase (existing async streaming uses `IAsyncEnumerable<'T>` in `src/Core/FSharpApi.fs`). Please adjust the snippet to use valid F# option syntax and align the `Scan` return type with the project’s established async stream pattern (or explicitly call out the dependency you intend to introduce).

### Thread 3: docs/backlog/P1/B-0776-simplest-first-plugin-sequence-wrapping-already-deployed-cluster-substrate-redis-nats-cockroach-temporal-orleans-opa-aaron-2026-05-25.md:92 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-26T05:18:38Z):

`StackExchange.Redis` is not a Microsoft library; labeling it as “the Microsoft `StackExchange.Redis` client” is misleading. Suggest dropping “Microsoft” and, if needed, describing it as the de facto .NET Redis client (or referencing the owning org explicitly).

### Thread 4: docs/backlog/P1/B-0776-simplest-first-plugin-sequence-wrapping-already-deployed-cluster-substrate-redis-nats-cockroach-temporal-orleans-opa-aaron-2026-05-25.md:96 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-26T05:18:38Z):

This section names specific file paths (`Zeta.Storage.KeyValue.fs`, `Zeta.Storage.KeyValue.Redis.fs`) that don’t match the later proposed directory/file layout (`IKeyValueStore.fs`, `RedisKeyValueStore.fs`, etc.). To avoid ambiguity when this row is implemented, pick one naming scheme and use it consistently throughout the document.

## General comments

### @chatgpt-codex-connector (2026-05-26T05:06:48Z)

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).
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
pr_number: 5099
title: "fix(B-0789 iter-4.4 fixfwd): 0xEF MBR partition type + mount_msdos fallback (2 bugs surfaced by 2026-05-26 empirical zflash test)"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T05:18:34Z"
merged_at: "2026-05-26T05:21:02Z"
closed_at: "2026-05-26T05:21:02Z"
head_ref: "otto-cli/iter44-fixfwd-0xef-fat12-esp-detection-2026-05-26"
base_ref: "main"
archived_at: "2026-05-27T19:43:04Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5099: fix(B-0789 iter-4.4 fixfwd): 0xEF MBR partition type + mount_msdos fallback (2 bugs surfaced by 2026-05-26 empirical zflash test)

## PR description

## Summary

2026-05-26 empirical test of iter-4.3 zflash (#5091 + fixfwd #5093) surfaced TWO bugs that the auto-diagnostic substrate caught loud + photo-friendly:

**(1) ESP detection regex missed MBR \`0xEF\`.** NixOS install ISOs use isohybrid layout; after dd to USB, macOS's diskutil reads the FDisk MBR partition table and reports the FAT ESP with TYPE=\`0xEF\` (MBR numeric code for EFI System Partition) rather than GPT-style \`EFI EFI\` / \`DOS_FAT_32\` labels. The existing regex \`\\b(DOS_FAT|EFI|MS-DOS|FAT16|FAT32|Windows_FAT)\\b\` matched GPT cases but not MBR.

**(2) \`diskutil mount\` fails on MBR \`0xEF\` partitions.** Even with detection fixed, \`diskutil mount /dev/disk6s2\` fails because macOS's diskutil auto-probe doesn't recognize the FAT12 filesystem-in-0xEF combination as mountable. \`diskutil info\` reports \`File System: None\` even though \`sudo file -s /dev/disk6s2\` clearly shows the FAT12 EFIBOOT volume is there + writable. Fix: explicit \`mount_msdos\` against mkdtemp mount point as fallback.

## Changes

- \`findFatPartition()\` regex extended to ALSO match MBR partition type codes \`0x(EF|0C|0E|06|0B|0F)\` covering EFI System Partition + FAT16 + FAT32 + FAT32-LBA + FAT16-LBA + Extended-LBA. \`\\b\` on both sides prevents accidental match inside longer hex strings
- New \`mountEsp(espPart)\` helper: tries \`diskutil mount\` first (GPT case), falls back to \`sudo mount_msdos -o nodev,nosuid <part> <mkdtemp>\` for MBR 0xEF case. Returns method tag so unmount matches
- New \`unmountEsp(espPart, result)\` helper: dispatches to \`diskutil unmount\` OR \`sudo umount + rmSync(tmpdir)\` based on method
- \`injectPubkeyToUsb()\` simplified: single \`mountEsp\` call replaces the diskutil-mount + getMountPoint + error-path-unmount duplication; single \`unmountEsp\` call at success + error paths
- Diagnostic message updated: \"mountEsp \${espPart} failed (both diskutil + mount_msdos paths)\" tells the operator BOTH paths were exhausted before bail

## Empirical validation 2026-05-26

Manually ran \`sudo mount_msdos -o nodev,nosuid /dev/disk6s2 /tmp/zeta-esp-mount\` on the post-dd USB (124GB PNY, 3.1MB 0xEF ESP labeled EFIBOOT) — mount succeeded; wrote \`zeta-authorized-keys.pub\` via \`sudo cp ~/.ssh/id_ed25519.pub /tmp/zeta-esp-mount/...\`; unmounted + ejected cleanly. The substrate the script now ships matches what worked empirically.

## Composes with

- #5091 iter-4.3 (stale-checkout detection + auto-download ISO)
- #5093 iter-4.3 fixfwd (4 Copilot findings)
- B-0789 parent (cluster credentials substrate)
- B-0790 end-state (zero-typing SSH = load-bearing step toward zero-dev-machine homelab persona)

## Test plan

- [x] TS strict compile clean (\`bunx tsc --noEmit\`)
- [x] Empirical validation: manual \`mount_msdos\` on post-dd USB succeeded; write + unmount + eject clean
- [ ] Re-run zflash with iter-4.4 against fresh-flashed USB; verify auto-inject step succeeds end-to-end (next operator-driven step after merge)
- [ ] Plug USB into PC1 + power on via Comet Pro + finger bot; verify \`ssh zeta@<hostname>\` zero-typing from operator's Mac

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## General comments

### @chatgpt-codex-connector (2026-05-26T05:18:40Z)

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).
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
pr_number: 5100
title: "backlog(B-0778): re-land curated commodity hardware reference for home-lab AI cluster \u2014 mini PCs + OCuLink eGPU + shared-memory AI CPUs + simple IP-KVM + remote finger"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T05:21:37Z"
merged_at: "2026-05-26T05:24:17Z"
closed_at: "2026-05-26T05:24:17Z"
head_ref: "otto-cli/reland-b0778-0515z"
base_ref: "main"
archived_at: "2026-05-27T19:43:04Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5100: backlog(B-0778): re-land curated commodity hardware reference for home-lab AI cluster — mini PCs + OCuLink eGPU + shared-memory AI CPUs + simple IP-KVM + remote finger

## PR description

## Summary

Re-land of stale-DIRTY [PR #5065](https://github.com/Lucent-Financial-Group/Zeta/pull/5065) (Tier-3 per [`pr-triage-tiers.md`](.claude/rules/pr-triage-tiers.md)) — the **last Otto-CLI cascade PR**.

- Same B-0778 row (312 lines from PR #5065 head `01def5755`)
- `docs/BACKLOG.md` regenerated against current origin/main
- 8 pre-emptive lint fixes: 5× missing blank after "Composes with:" + 3× `+` prose-joiner at line start (MD032)
- Typo fix: B-0743 → B-0737 ("I execute, you fingerprint" lives at B-0737; same typo as #5062's B-0776 — likely copy-paste across rows authored 2026-05-25)

Follow-up: close #5065 with substrate-recoverable cross-link.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## General comments

### @chatgpt-codex-connector (2026-05-26T05:21:43Z)

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).
Loading
Loading