backlog(B-0806 iter-7 P2): Ansible+GitOps + Crossplane composition — cross-OS declarative management for Windows + Macs#5129
Merged
AceHack merged 2 commits intoMay 26, 2026
Conversation
…larative management for Windows + Macs + non-NixOS Linux (the maintainer 2026-05-26) The maintainer 2026-05-26 substrate-engineering pull: - "This is good for declarative oses other than nix like id love to have it setup my windows machines and macs. ansible gitops" - "it's like cross plane too kinda" Today's substrate covers NixOS (cluster nodes via flake.nix) + macOS-laptops (install.sh imperative) + Debian/Ubuntu-Linux (install.sh imperative) but: - macOS state isn't declaratively-defined (only tooling is) - Windows has no substrate at all - External infrastructure outside K8s is operator-imperative Three substrate-engineering directions converge: Ansible (cross-OS host config), Crossplane (external infra as K8s CRDs), ArgoCD (K8s manifests only — existing). Combined end-state: 4-reconciler shape where everything is in git + each substrate class has one reconciler: git → ArgoCD → K8s workloads git → NixOS rebuild → cluster nodes git → ansible-pull → heterogeneous OS (macOS/Windows/non-NixOS Linux) git → Crossplane → cluster-external infrastructure (cloud, DNS, etc.) Recommendation captured: Pattern 3 (ansible-pull) for OS substrate (rejecting Pattern 1 Operator + Pattern 2 Webhook AAP due to cost + infrastructure burden). Crossplane for external-infra (extends existing ArgoCD substrate). Both compose with iter-6 cluster-update arc. Decomposed into 5 sub-targets (each filing as sibling B-NNNN at impl): - Sub-target 1: macOS ansible-pull substrate - Sub-target 2: Windows ansible-pull substrate (NEW substrate; opens Zeta to Windows-running maintainers) - Sub-target 3: Crossplane bootstrap as ArgoCD app - Sub-target 4: non-NixOS Linux ansible-pull - Sub-target 5: dep-pin discipline encoding for ansible-galaxy + Crossplane provider versions (per B-0805) 6 design questions for the maintainer captured as sub-target-blocking: pull cadence, branch model, secret handling, bootstrapping the bootstrap, state observability, conflict handling. This is iter-7 scope (post-iter-6 cluster-update arc). Row captures the architectural direction + recommendations while iter-6 is still queued. Per `.claude/rules/no-directives.md`: row articulates options + recommendation; the maintainer integrates the picks before iter-7 implementation begins. Co-Authored-By: Claude <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…n-1 rejection per maintainer 2026-05-26 (K8s always present + support both)
Two maintainer-supplied refinements after the row's initial filing:
(1) "it would be ansible combined with ace package manager ../scratch
install.sh like setup for those oses and our declarative package
management"
Added Ace package manager (B-0288, in-progress) as the cross-OS package
layer that ansible-pull/Operator invokes. The combined architecture is
three layers:
ansible/playbooks/ [orchestration / reconciliation]
invokes →
Ace package manager [cross-OS package layer]
reads →
tools/setup/manifests [install.sh-style declarative source]
ansible orchestrates, Ace installs, manifests declare. Each layer
has one job. Ansible+GitOps is NOT a replacement for the package
layer Zeta is building separately.
(2) "we are alwasy going to have k8s i don't mind the coupling but we
can support both"
Relaxed the Pattern-1 (Operator) rejection. K8s is always present in
Zeta's substrate (the full-ai-cluster is the cluster substrate; not
optional), so K8s-coupling is NOT a rejection criterion. Recommendation
updated: support BOTH Pattern-1 (Operator) AND Pattern-3 (ansible-pull).
Pattern-2 (commercial AAP) stays rejected on cost.
Architectural diagram updated to show the three-layer composition inside
the ansible-pull branch. Composes_with frontmatter adds B-0288.
Co-Authored-By: Claude <noreply@anthropic.com>
AceHack
added a commit
that referenced
this pull request
May 26, 2026
…-search-first-authority (3-anchor empirical evidence 2026-05-26) (#5131) * rule: verify-existing-substrate-before-authoring (sibling to dep-pin-search-first-authority) — 3-anchor empirical evidence from session 2026-05-26 Single 2026-05-26 session produced 3 same-root-cause failures ("Otto-defaults-to-plausible-but-unverified" at substrate-authoring scope): ANCHOR 1: cascade #4 ISO audit (PR #5119) asserted boot/grub/grub.cfg without verifying NixOS-actual layout (isolinux + refind). Blocked 4 ISO builds. Fixed via PR #5125. Covered by dep-pin-search-first- authority rule landed PR #5126. ANCHOR 2: B-0806 backlog row (PR #5129) authored Ace section as if Ace were just "a package manager CLI" without reading docs/agendas/ace- package-manager/AGENDA.md + project memory + 7+ related backlog rows. The maintainer 2026-05-26: "that is what ace has been since we first talked about it you just keep forgetting we have substantial backlog around this". Fixed via PR #5130. ANCHOR 3: B-0806 hat/fork-negotiation NOT integrated into architecture even after Anchor-2 correction. The maintainer 2026-05-26: "i'm assuming you have the hat / fork negoation for ace too". Fixed via PR #5130 follow-on commit. Same root cause class as the dep-pin rule, but at a DIFFERENT surface: this is substrate-authoring scope (backlog rows, rules, skills, architectural framings), not version-pin scope. dep-pin-search-first- authority + this rule + fighting-past-self-vs-peer-agent compose to cover the surfaces today's empirical evidence showed are vulnerable. The rule auto-loads at cold-boot per wake-time-substrate. Provides: - Operational discipline: 4-step grep + read top hits + decide + cite inline - Checklist template for inline substrate-inventory pass annotation - All 3 empirical anchors preserved so future-Otto sees the cost of skipping - Cross-references to dep-pin + fighting-past-self for full coverage Co-Authored-By: Claude <noreply@anthropic.com> * fix(rule-ext): MD032 false-positive — "+ refind" parsed as list start; reword to "plus refind" markdownlint MD032 fired on line 100 because the wrap-continuation "+ refind, NOT legacy GRUB..." starts with `+ ` which is a valid markdown list marker. Linter doesn't know this is a wrapped paragraph continuation from line 99. Reword "isolinux + refind" → "isolinux plus refind" to disambiguate. No content change. Co-Authored-By: Claude <noreply@anthropic.com> * fix(rule-ext): 2 real Copilot findings on #5131 — content-grep + fixed-string discipline; 3rd (table double-pipe) is FP (1) Earlier inventory snippet used filename/directory-name filtering (`find docs/agendas -type d | grep -i "$topic"`) which misses substrate that mentions the topic in CONTENT without the keyword in the filename. Should be content-search via grep -rl. Same gap for docs/trajectories/. (2) Earlier snippet used `grep -E "$topic"` (regex) + unquoted shell globs (`memory/*${topic}*`). Both break when topic contains regex metacharacters (`+`, `.`, `B-NNNN`) or spaces. Use `grep -F` (fixed-string) for safety + content-search (no globs). (3) Bonus fix: `.claude/skills/` was missing from the inventory surfaces even though skills are explicitly in-scope for the rule. Added. 3rd Copilot thread (table double-pipe at line 158/149) is the documented known-FP class per `.claude/rules/blocked-green-ci-investigate-threads.md` ("Table double-pipe (`||`) ... 4 confirmed FPs in one session"). Direct inspection of line 158 (`| Surface | Rule that catches it |`) confirms single pipes; resolving that thread no-op per the suspect-by-default discipline. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Lior <lior@zeta.dev> Co-authored-by: Claude <noreply@anthropic.com>
This was referenced May 26, 2026
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.
Summary
Iter-7 capstone capturing the maintainer's 2026-05-26 substrate-engineering pull:
End-state architecture (4-reconciler shape)
Each substrate class has one reconciler; all share git as source of truth. Composes with
.claude/rules/m-acc-multi-oracle-end-user-moral-invariants.mdat substrate-class scope.Key recommendations captured
6 design questions for the maintainer (sub-target-blocking)
Pull cadence, branch model, secret handling, ansible-bootstrap, state observability, conflict handling — all documented in the row body as substrate-engineering decisions to land before iter-7 sub-target work begins.
Composes with
🤖 Generated with Claude Code