Skip to content
Closed
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,72 @@
---
pr_number: 5220
title: "backlog(B-0816 P1 architectural-principle): maximize ArgoCD scope; minimize NixOS-native lock-in for cross-cluster portability"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T16:49:19Z"
merged_at: "2026-05-26T16:51:01Z"
closed_at: "2026-05-26T16:51:01Z"
head_ref: "otto-cli/b0816-principle-maximize-argocd-scope-portability-leverage-aaron-2026-05-26"
base_ref: "main"
archived_at: "2026-05-26T17:24:27Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5220: backlog(B-0816 P1 architectural-principle): maximize ArgoCD scope; minimize NixOS-native lock-in for cross-cluster portability

## PR description

## Summary

Lands the architectural principle the maintainer 2026-05-26 named immediately after the iter-6.0 nixpkgs bump merge:

> *"nice also ArgoCD is ususaly be anyone with k8s too not just nixos so antoher reason to push as much as possible into argocd."*

## Carved sentence

ArgoCD is used by ANYONE running Kubernetes (not just NixOS users); substrate-in-ArgoCD ports across every K8s cluster + every K8s distribution. NixOS-native substrate is load-bearing for the BOOT + OS layer, but BEYOND THAT every substrate-engineering decision should default to ArgoCD-managed for cross-cluster portability leverage.

## What changes for existing substrate

| Existing row | Status under principle |
|---|---|
| B-0813 iter-5.4.2 cluster-nodes-reconciler | ✅ ArgoCD-managed — reinforced |
| B-0802 kured | ✅ ArgoCD-managed — reinforced |
| B-0806 sub-target 3 Crossplane | ✅ ArgoCD-managed — reinforced |
| B-0800 nixpkgs bump | NixOS-only (boot+OS layer; no portable alternative) |
| B-0801 system.autoUpgrade | NixOS-only (Nix flake update is NixOS-specific) |
| B-0803 deploy-rs | NixOS-only — **flagged** as not cross-distro-portable |

## Implication for B-0782 cluster-IS-DIO

DIO lives in 4 layers, each with its own reconciler:
1. Boot+OS = NixOS substrate (DIO via nixos-rebuild)
2. K8s+workload = ArgoCD (DIO via ArgoCD sync)
3. External-infra = Crossplane via ArgoCD (DIO via CR reconciliation)
4. Heterogeneous-OS = Ansible+Ace bridge (B-0806 substrate)

## Implication for cross-distro adoption

Operators on K3S-on-Ubuntu / Talos / RKE2 / EKS / GKE / AKS / OpenShift can adopt iter-5.4.x substrate by:
1. Skip NixOS install.sh (use their own bootstrap)
2. Adopt the `maintainers/<op>/cluster-nodes/<host>/` tree shape
3. Point their ArgoCD at the tree
4. Run a future `register-node.ts` equivalent for their distro

NixOS becomes ONE of N possible host substrates. Zeta substrate stays portable.

## Composes with

12 existing rows (B-0782, B-0790, B-0794, B-0800–B-0806, B-0811, B-0813, B-0814) — full cross-reference table in the row body.

## Substrate-inventory pass

Per `.claude/rules/verify-existing-substrate-before-authoring.md` (#5131): no existing principle row on this topic; ID B-0816 next-free; principle generalizes the discipline existing rows already partially encode.

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

## General comments

### @chatgpt-codex-connector (2026-05-26T16:49:25Z)

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,72 @@
---
pr_number: 5221
title: "backlog(B-0817 P2): tools/cluster/register-node.ts \u2014 operator-invocation companion to deregister (B-0814)"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T16:51:11Z"
merged_at: "2026-05-26T16:53:32Z"
closed_at: "2026-05-26T16:53:32Z"
head_ref: "otto-cli/b0817-register-node-ts-operator-invocation-companion-to-deregister-2026-05-26"
base_ref: "main"
archived_at: "2026-05-26T17:24:17Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5221: backlog(B-0817 P2): tools/cluster/register-node.ts — operator-invocation companion to deregister (B-0814)

## PR description

Symmetric counterpart to PR #5216 deregister tool. Two modes (compose / --from-yaml pass-through). Mirrors deregister discipline. Filed P2 because derived-by-symmetry, not Aaron-explicitly-named.

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-26T16:53:36Z)

## Pull request overview

Adds a new P2 backlog row (B-0817) describing a proposed `tools/cluster/register-node.ts` operator tool (manual register/re-register counterpart to `deregister-node.ts`), and wires it into the main backlog index.

**Changes:**
- Add backlog row **B-0817** documenting goals, sub-targets, and acceptance for a manual cluster node registration tool.
- Update `docs/BACKLOG.md` to include **B-0817** under P2.

### Reviewed changes

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

| File | Description |
| ---- | ----------- |
| docs/backlog/P2/B-0817-tools-cluster-register-node-ts-operator-invocation-companion-symmetric-to-deregister-for-manual-re-register-after-wipe-aaron-2026-05-26.md | New backlog row defining the `register-node.ts` tool scope/modes/acceptance and cross-links to related iter-5.4 work. |
| docs/BACKLOG.md | Adds B-0817 to the P2 index list. |

## Review threads

### Thread 1: docs/backlog/P2/B-0817-tools-cluster-register-node-ts-operator-invocation-companion-symmetric-to-deregister-for-manual-re-register-after-wipe-aaron-2026-05-26.md:23 (resolved)

**@copilot-pull-request-reviewer** (2026-05-26T16:53:34Z):

The B-0814 link here is relative to the current P2 directory, but the B-0814 row lives under docs/backlog/P1/. As written, the link target won't resolve.

### Thread 2: docs/backlog/P2/B-0817-tools-cluster-register-node-ts-operator-invocation-companion-symmetric-to-deregister-for-manual-re-register-after-wipe-aaron-2026-05-26.md:59 (resolved)

**@copilot-pull-request-reviewer** (2026-05-26T16:53:35Z):

Sub-target 1 says the tool may "probe via ssh" for missing --ip/--mac, but the Out of scope section later explicitly says auto-probing via SSH is out of scope. This is internally inconsistent and will confuse implementers about expected behavior.

### Thread 3: docs/backlog/P2/B-0817-tools-cluster-register-node-ts-operator-invocation-companion-symmetric-to-deregister-for-manual-re-register-after-wipe-aaron-2026-05-26.md:59 (resolved)

**@copilot-pull-request-reviewer** (2026-05-26T16:53:35Z):

Pass-through mode is described as an alternative to other flags, but Sub-target 1 also marks --host and --roles as required. If --from-yaml is intended to be a true pass-through, either relax the requirement (derive host/roles from YAML) or explicitly require --host/--roles and validate they match the YAML.

### Thread 4: docs/backlog/P2/B-0817-tools-cluster-register-node-ts-operator-invocation-companion-symmetric-to-deregister-for-manual-re-register-after-wipe-aaron-2026-05-26.md:84 (resolved)

**@copilot-pull-request-reviewer** (2026-05-26T16:53:35Z):

The YAML sketch uses `metadata.maintainer`, but Kubernetes ObjectMeta does not allow arbitrary fields under `metadata`. If you want to persist maintainer info, place it under `spec.registration` and/or `metadata.annotations` (which also aligns with the permissive CRD schema in B-0813).

## General comments

### @chatgpt-codex-connector (2026-05-26T16:51:16Z)

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,46 @@
---
pr_number: 5222
title: "fix(p0 iter-6.0 race-merge-recovery): glxinfo \u2192 mesa-demos (25.11 breaking change; PR #5218 auto-merge race fired before this fix was pushed)"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T16:53:37Z"
merged_at: "2026-05-26T16:56:38Z"
closed_at: "2026-05-26T16:56:39Z"
head_ref: "otto-cli/p0-fixfwd-glxinfo-mesa-demos-25-11-breaking-change-2026-05-26"
base_ref: "main"
archived_at: "2026-05-26T17:24:13Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5222: fix(p0 iter-6.0 race-merge-recovery): glxinfo → mesa-demos (25.11 breaking change; PR #5218 auto-merge race fired before this fix was pushed)

## PR description

Auto-merge race on PR #5218: glxinfo→mesa-demos fix landed in branch AFTER merge fired. Main has 25.11 bump but glxinfo still present → ISO builds fail. This PR lands the fix directly. Empirical anchor of the auto-merge-race-with-follow-up-commit anti-pattern documented in blocked-green-ci-investigate-threads.md.

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-26T16:55:35Z)

## Pull request overview

This PR unblocks the iter-6.0 NixOS 25.11 (“Xantusia”) ISO build by replacing the removed `glxinfo` package reference with its supported replacement (`mesa-demos`) in the AI-cluster installer and GPU module.

**Changes:**
- Replace `glxinfo` → `mesa-demos` in the USB installer ISO package set.
- Replace `glxinfo` → `mesa-demos` in the NVIDIA GPU module’s `environment.systemPackages`.

### Reviewed changes

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

| File | Description |
| ---- | ----------- |
| full-ai-cluster/usb-nixos-installer/nixos/installer/configuration.nix | Updates installer ISO packages to use `mesa-demos` instead of `glxinfo` under nixpkgs 25.11. |
| full-ai-cluster/nixos/modules/gpu.nix | Updates GPU tooling package list to use `mesa-demos` instead of `glxinfo`. |

## General comments

### @chatgpt-codex-connector (2026-05-26T16:53:47Z)

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,38 @@
---
pr_number: 5223
title: "fix(B-0816): enrich empirical anchor with LexisNexis + GitHub use-cases + cloud-agnostic + 0-external-vendor principle"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T16:54:43Z"
merged_at: "2026-05-26T16:57:08Z"
closed_at: "2026-05-26T16:57:08Z"
head_ref: "otto-cli/b0816-enrich-lexisnexis-github-use-case-cloud-agnostic-0-vendor-2026-05-26"
base_ref: "main"
archived_at: "2026-05-26T17:24:06Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5223: fix(B-0816): enrich empirical anchor with LexisNexis + GitHub use-cases + cloud-agnostic + 0-external-vendor principle

## PR description

Maintainer 2026-05-26 follow-up framings on B-0816 (just merged via #5220) — 3-context lineage table (LN Legal-Search + GH CoPilot-training + Zeta) + 3 carried-across-contexts properties: cloud-agnostic, 0-external-vendor (open-source only), ArgoCD-convergence.

## Reviews

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

## Pull request overview

Updates backlog row **B-0816** to add an empirical prior-art anchor that ties the ArgoCD portability principle to validated use-cases across LexisNexis, GitHub, and Zeta, emphasizing cloud-agnostic operation and an open-source-only (“0 external vendor dependency”) constraint.

**Changes:**
- Adds an “Empirical prior-art anchor” section with quoted lineage/use-cases and a 3-context comparison table.
- Explicitly enumerates three carried properties: cloud-agnostic, open-source-only dependencies, and ArgoCD-as-convergence-engine.
- Refines the rationale for the row’s P1 classification to be evidence-based (validated across three contexts) rather than purely architectural reasoning.

## General comments

### @chatgpt-codex-connector (2026-05-26T16:54: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,61 @@
---
pr_number: 5224
title: "fix(postmerge-5221 B-0817): 4 Copilot findings \u2014 link/contradiction/mode-conflict/K8s ObjectMeta"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-26T16:56:45Z"
merged_at: "2026-05-26T17:06:21Z"
closed_at: "2026-05-26T17:06:21Z"
head_ref: "otto-cli/postmerge-5221-fixfwd-4-copilot-2026-05-26"
base_ref: "main"
archived_at: "2026-05-26T17:24:00Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #5224: fix(postmerge-5221 B-0817): 4 Copilot findings — link/contradiction/mode-conflict/K8s ObjectMeta

## PR description

Addresses all 4 Copilot post-merge findings on PR #5221 (B-0817 register-node companion row). All 4 substantive: broken P1/P2 link; internal SSH-probe contradiction; --from-yaml vs --host required-flag mode conflict; K8s ObjectMeta cannot accept arbitrary `maintainer` field.

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-26T16:58:55Z)

## Pull request overview

This PR updates backlog row **B-0817** to resolve four post-merge review findings from PR #5221 by correcting a broken cross-link, removing an internal contradiction around SSH probing, clarifying mutually-exclusive CLI “compose” vs “pass-through” modes, and fixing the Kubernetes `ObjectMeta` usage by moving `maintainer` out of `metadata` and into `spec.registration` (with an optional label for grouping).

**Changes:**
- Fixes the B-0814 cross-reference path from the P2 row.
- Clarifies required flags per operational mode (`--from-yaml` vs `--host/--roles`) and aligns “out of scope” notes.
- Updates the YAML example to avoid invalid `metadata` fields and proposes a label-based alternative.

## Review threads

### Thread 1: docs/backlog/P2/B-0817-tools-cluster-register-node-ts-operator-invocation-companion-symmetric-to-deregister-for-manual-re-register-after-wipe-aaron-2026-05-26.md:68 (resolved)

**@copilot-pull-request-reviewer** (2026-05-26T16:58:54Z):

The CRD schema sketch in B-0813 declares `spec.hardware` as `type: object` (not nullable). Saying the composed YAML uses "null" hardware risks producing invalid resources; prefer omitting the field or using an empty object `{}` when hardware is unknown.

### Thread 2: docs/backlog/P2/B-0817-tools-cluster-register-node-ts-operator-invocation-companion-symmetric-to-deregister-for-manual-re-register-after-wipe-aaron-2026-05-26.md:90 (resolved)

**@copilot-pull-request-reviewer** (2026-05-26T16:58:54Z):

The example comment suggests `spec.hardware` may be "null" in compose mode. Given the B-0813 CRD sketch uses `hardware: { type: object, ... }`, prefer omitting `hardware` or using `{}` instead of `null`.

## General comments

### @chatgpt-codex-connector (2026-05-26T16:56:55Z)

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

### @AceHack (2026-05-26T17:02:32Z)

Addressed both Copilot `spec.hardware` findings (lines 68 + 90) in 5d6c30230879722a314be9d7dc051a2ab4e26f2d:

- Prose at line 68 now explains *why* (CRD declares `hardware: { type: object, additionalProperties: true }` with no `required:` entry → omitting is valid; `null` would be CRD-invalid)
- YAML example at lines 88-90 visibly omits the `hardware:` key with a comment explaining when it IS present (`--from-yaml` pass-through, verbatim) vs when it's omitted (compose mode, until iter-5.4.1 self-register populates)

Verified Copilot finding by reading B-0813 schema directly (`docs/backlog/P1/B-0813-...` line 75) per verify-before-fix discipline. Single substantive change covers both threads.
Loading
Loading