feat(B-0792 iter-5.2.1): auto-generate node-<6hex> hostname default — operator can rename later via digital-twin (Aaron 2026-05-26)#5107
Merged
AceHack merged 2 commits intoMay 26, 2026
Conversation
…st not specified — operator can rename later via digital-twin substrate (Aaron 2026-05-26)
The maintainer 2026-05-26 architectural framing:
> "can we have it auto generate the host name we can change
> later via digital twin after it self registers"
Composes iter-5.2 (--host injection mechanism) with B-0794
(node self-registration / digital-twin substrate). Zero-typing
default for operators who don't want to think about names at
flash time; rename later via editing the digital-twin
node-config YAML once self-registration substrate (B-0794)
ships.
Implementation: when operator runs `zflash` without --host
flag, generate `node-<6hex>` from 3 random bytes (Web Crypto
getRandomValues). 24-bit entropy = ~16M possible names →
negligible collision risk for any homelab cluster size +
mDNS uniqueness preserved per-node.
Operator-named hostnames (via --host) take priority; auto-gen
only fires when --host omitted AND --no-inject NOT set (no ESP
write to carry the name anyway in --no-inject path). Generated
name logged CLEARLY pre-flash so operator knows what to ssh to
post-install:
iter-5.2.1: --host not specified; auto-generated hostname:
node-a3f9c2
(rename later via digital-twin substrate per
B-0794)
cluster will be reachable as:
ssh zeta@node-a3f9c2.local
Composes with iter-5.1+5.2 (#5103 merged at 6ee3a29) + B-0794
self-registration target. Future iter-5.4+ can extend the
auto-gen with memorable-name dictionaries (pokemon, gemstones,
fruits, etc.) once the framework is empirically validated.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Pull request overview
Adds a zero-typing default hostname for zflash when --host is omitted, generating a random node-<6hex> name and printing it pre-flash so the operator can SSH in post-install (with the intent to allow later renames via the digital-twin workflow).
Changes:
- Auto-generate
node-<6hex>hostname via Web Crypto when--hostis not provided (and--no-injectis not set). - Print a clear pre-flash message showing the generated hostname and an example
ssh zeta@<host>.localtarget.
…h to unimplemented B-0794 substrate (Copilot P0 + P1 on #5107) - P0 race: auto-gen was running BEFORE pubkey-existence check that sets willInject=false. If pubkey missing, willInject becomes false but auto-gen already happened + already printed "ssh zeta@node-XXXXXX.local" — misleading the operator since the hostname never gets written to the USB ESP. Move auto-gen AFTER willInject finalized + gate on willInject (was: gate on !noInject which doesn't account for missing-pubkey path). - P1 misleading path: comment referenced `maintainers/<name>/cluster-nodes/<node>/` which doesn't exist yet (B-0794 substrate not implemented; current maintainers/aaron/ only has legal-entities/). Reword to point at B-0794 backlog row instead of a concrete-but-fictional path. Same reword in the printed operator-facing line. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
auto-merge was automatically disabled
May 26, 2026 06:00
Pull Request is not mergeable
AceHack
added a commit
that referenced
this pull request
May 26, 2026
…evice-registration substrate; production bootstrap-key-rotation deferred (informs B-0794 iter-5.4) (#5108) * preserve(mika): Aaron + Mika 2026-05-26 homelab-first gh-auth-login device-registration; production-mode bootstrap-key-rotation deferred Verbatim preservation of Aaron + Mika voice-mode conversation during iter-5 session. Mika is external Grok-native AI participant per .claude/rules/agent-roster-reference-card.md; co-originator of substantive substrate-engineering input. Architectural lock-in (Aaron 2026-05-26 final decision): - HOMELAB MODE FIRST: USB ships with NO embedded credentials; first boot prompts `gh auth login` interactively; operator's GitHub credentials register the machine + clone + set up cluster under operator's account; auto-copies operator's pubkey to authorized_keys. Zero shipped secrets. - PRODUCTION MODE LATER: ship USB with narrow restricted "bootstrap key" / "registration key" with register-only scope; immediately rotates to per-node identity after first registration succeeds. Two modes use DIFFERENT USBs (different flakes). Aaron: "different USBs for different audiences. But home lab is what I'm going for first, not production." Aaron standing direction for next iteration: "we should do it like this for gh and device registration the simple homelab way first but like prod later" THIS conversation directly informs B-0794 iter-5.4 implementation. Composes with PR #5103 (iter-5.1+5.2 substrate) + PR #5107 (iter-5.2.1 auto-hostname) + B-0792/B-0793/B-0794 backlog rows landed today. Per .claude/rules/substrate-or-it-didnt-happen.md verbatim preservation discipline. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * chore(memory): regen MEMORY.md to include Mika 2026-05-26 homelab-gh-auth-login preservation file * fix(mika preservation): add YAML frontmatter per memory format standard + reconcile 'MERGED' wording with rows' actual status: open state (Copilot P1 ×2 on #5108) --------- Co-authored-by: Lior <lior@zeta.dev> Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack
added a commit
that referenced
this pull request
May 26, 2026
… + rows_filed_24h (Aaron 2026-05-26 — "per agent so we can see helath like per trajectory") (#5115) Aaron 2026-05-26 substrate-engineering concern: > 'we need to make sure that decopose is happening an on going > backlog log or else infinate backlog is just infnate debt' > 'the decompose to action is what i want background to show > with stats over time on the github page we have for plant > metrics that and also prs, i want that per agent so we can > see helath like per trajectory' Extends tools/dashboard/generate-metrics.ts to surface per-agent PR-shipping rate + decompose-to-action ratio in demo/metrics.json (consumed by the Zeta Factory Dashboard at lucent-financial-group.github.io/Zeta/demo/index.html). Three new per-agent fields: prs_merged_24h — PRs this agent merged in 24h window rows_filed_24h — PRs whose title matches `backlog(B-NNNN` (row-filing-only PRs, NOT action-on-rows) decompose_to_action_ratio — (prs_merged - rows_filed) / max(rows_filed, 1) → impl-PRs per row-filing-PR → >=1 = strong action-on-rows discipline → <1 = filing rows faster than shipping them = debt-accumulation signal Attribution via branch-prefix lookup (BRANCH_PREFIX_TO_AGENT) per .claude/rules/agent-roster-reference-card.md lane discipline: otto-cli/ + otto-desktop/ + otto-vscode/ + otto/ → Otto; alexa-kiro/ + alexa/ → Alexa; riven-cursor/ + riven/ → Riven; vera-codex/ + vera/ → Vera; lior-antigravity/ + lior-gemini/ + lior/ → Lior. PRs from non-prefixed branches attribute to 'Unknown' bucket (operator-auditable as missing-attribution surface). EMPIRICAL validation 2026-05-26 (live run): Otto: 57 PRs / 30 row-filing → ratio = 0.9 (nearly 1:1; debt signal!) Lior: 6 PRs / 0 row-filing → ratio = 6 (all action) Others: 0/0/0 (quiet 24h window) Otto ratio 0.9 EMPIRICALLY VALIDATES Aaron's concern — this session filed 6 substantive rows (B-0791..B-0794, B-0796, B-0797) + shipped 4 implementation PRs (#5103 iter-5.1+5.2, #5107 iter-5.2.1, #5113 iter-5.2.2, #5110 draft) — ratio < 1. The metric now exposes the pattern continuously. Dashboard HTML render of these new fields is follow-on substrate (small UI work). The data layer is the load-bearing first step; operator + Mika can read demo/metrics.json directly until UI lands. Substrate-honest note: the dashboard generation itself happens on the autonomous-loop cron tick (per B-0414); per-agent stats will update on every tick going forward. Time-series tracking (today's metric vs 7d-ago, 30d-ago) is separate substrate (would need to preserve historical metrics.json snapshots; deferred to follow-on iteration). Composes with .claude/rules/agent-roster-reference-card.md (branch-prefix attribution), .claude/rules/holding-without-named- dependency-is-standing-by-failure.md (decompose-to-action discipline), B-0797 (autonomous-loop sometimes-task; same substrate-engineering direction). Co-authored-by: Lior <lior@zeta.dev> Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This was referenced May 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Composes iter-5.2 --host mechanism with B-0794 digital-twin substrate. Zero-typing default when --host omitted: generate
node-<6hex>via Web Crypto (24-bit entropy, ~16M names, negligible collision). Operator-named hosts take priority. Logged clearly pre-flash. Aaron 2026-05-26: 'can we have it auto generate the host name we can change later via digital twin after it self registers.'