Capstone: optional multi-node bar
Capstone: optional multi-node bar
Goal: Feature freeze the Capstone A MVP—no new services or toys—only bugfixes, doc fixes, and checklist honesty—so disaster recovery tests a stable, tagged artifact. Optionally add a second node only if Capstone A is already green and hardware allows.
After the freeze tag, the only legitimate code changes before wipe are P0 blockers that make rebuild or health checks impossible. Everything else goes in docs/POST-FREEZE.md.
Why this chapter exists
Wipe/rebuild against a moving target is chaos. Freeze creates a known baseline: annotated git tag, green CI, known gaps explicitly waived with risk. Without freeze, disaster-recovery drills measure luck, not process.
Experts freeze early relative to demos. Amateurs keep “just one more module” until the disk wipe and then invent history.
Theory 1 — What “freeze” means
| Allowed | Forbidden |
|---|---|
| Bugfixes for P0/P1 with issue id | New apps / node roles / hostnames |
| Doc corrections that match code | “Quick” plugin or package installs |
| Test stability fixes (flakes, waits) | Refactors without bug id |
| Checklist updates (honest ticks) | Starting Capstone B |
| Dependency bumps only if build broken | Casual nix flake update |
| Typo-level RUNBOOK fixes | New sops keys without re-documenting DR |
Tag shape
git tag -a capstone-a-freeze -m "Capstone A feature freeze"
git push origin capstone-a-freeze # if remote exists
git rev-parse capstone-a-freezeRecord tag SHA in docs/CAPSTONE-A.md.
Theory 2 — Waiver register
Every unticked Capstone A row at freeze needs one of:
| Disposition | Meaning |
|---|---|
| Done | Proof command recorded |
| Waived | Explicit risk + why DR still valid |
| Blocker | Must fix before freeze tag |
# docs/POST-FREEZE.md / freeze waivers
| Item | Disposition | Risk | Owner |
|------|-------------|------|-------|
| CI cache push | Waived | Slower rebuilds | you |Theory 3 — Optional multi-node bar
Capstone A is single-node sufficient. Multi-node is optional prestige:
| Optional | Description |
|---|---|
| Second guest | deploy-a or similar with shared modules |
| Client/server test | nixosTest multi-node |
| Distinct roles | edge vs data |
Elitebook 16 GB guidance
| Config | Advice |
|---|---|
| Host + 1 guest 4–6 GB | Capstone A default |
| Host + 2 guests | Only if you drop desktop/k3s toys |
| Nested heavy tests | Prefer serial; lower max-jobs |
Do not add a second node if it risks freeze honesty or disk pressure before DR.
Theory 4 — Freeze gate commands
nix flake metadata
nix build .#nixosConfigurations.lab.config.system.build.toplevel -L
nix flake check -L # or specific checks
# deploy once more if remote path is Capstone-critical
systemctl --failed # on labAll green → tag. Any red → fix or waive with eyes open.
Concrete freeze checklist
- CAPSTONE-A honest ticks
- Waivers written
- CI green on freeze commit
- RUNBOOK matches freeze tag
- Offline keys verified present
- VM snapshot
pre-drtaken
git tag -a capstone-a-freeze
- POST-FREEZE.md for deferred ideas
Lab 0 — Workspace
mkdir -p ~/lab/nixos/capstone/freeze
cd /path/to/capstone-flakeLab 1 — Honesty pass on CAPSTONE-A
For each box: done with proof, waived, or blocker. No “partial” without a sentence.
Lab 2 — Green suite at freeze
nix build .#nixosConfigurations.lab.config.system.build.toplevel -L \
2>&1 | tee ~/lab/nixos/capstone/freeze/toplevel.log
nix flake check -L 2>&1 | tee ~/lab/nixos/capstone/freeze/check.logLab 3 — Tag
git status
git tag -a capstone-a-freeze -m "Capstone A feature freeze $(date -I)"
git show capstone-a-freeze --stat | tee ~/lab/nixos/capstone/freeze/tag.showLab 4 — Optional second node (only if A green)
- Snapshot first.
- Add host with shared modules.
- Deploy or rebuild.
- Document network and secrets recipients.
- If it destabilizes freeze, revert and leave as POST-FREEZE.
Lab 5 — Snapshot for DR
# virsh snapshot-create-as lab pre-dr --disk-only --atomic
# or hypervisor UIConfirm you can revert without using DR path (sanity).
Lab 6 — Freeze announcement (to yourself)
Write 10 lines in NOTES: what is in, what is out, tag SHA, next step = DR wipe.
Common gotchas
| Mistake | Fix |
|---|---|
| Tagging red CI | Fix or waive first |
| Freeze then “one more feature” | POST-FREEZE.md |
| Multi-node thrash on 16 GB | Defer |
| No snapshot before DR | Snapshot now |
| Lost tag SHA | Record in CAPSTONE-A |
Checkpoint
- Honest CAPSTONE-A + waivers
- Green build/check logs
capstone-a-freezeannotated tag
- pre-dr snapshot
- Optional multi-node either done or deferred
- Three personal gotchas
Commit
git add .
git commit -m "capstone: feature freeze readiness"
# tag after this commit if cleanWrite three personal gotchas before continuing.
Next
→ Disaster recovery — wipe and rebuild from flake + keys.