Skip to content

docs(rfc): RFC-CLIENT-0003 — one installer core: Linux-first, thin OS adapters - #434

Merged
LukasWodka merged 2 commits into
developfrom
docs/rfc-0003-one-installer-core
Jul 31, 2026
Merged

docs(rfc): RFC-CLIENT-0003 — one installer core: Linux-first, thin OS adapters#434
LukasWodka merged 2 commits into
developfrom
docs/rfc-0003-one-installer-core

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds RFC-CLIENT-0003 — One installer core: Linux-first, thin OS adapters (docs/rfcs/0003-one-installer-core.md), the strategy decision from the 2026-07 multi-environment installer sweep (epic tracebloc/backend#1285, 25 children).

Core proposal:

Type

Docs (RFC — decision record)

Test plan

Docs-only; no installer script, chart, or workflow touched. Verified the document renders, the qualified-ID header matches the RFC-CLIENT-0001/0002 convention, next free number in this repo is 0003 (0002 is in-flight on #369), and no customer names or internal hostnames appear (public repo).

🤖 Generated with Claude Code


Note

Low Risk
Documentation-only RFC; no installer scripts, CI workflows, or runtime behavior change in this PR.

Overview
Adds RFC-CLIENT-0003 (docs/rfcs/0003-one-installer-core.md), a draft decision record for installer architecture after the tracebloc/backend#1285 multi-OS sweep.

It proposes making the Linux bash core the single behavioral implementation (D1), with thin macOS/Windows adapters (D2)—including a gated plan to replace the PowerShell monolith with a WSL2 bootstrap that runs the bash core inside WSL, pending RFC-CLIENT-0001 validation on managed hardware. D3–D5 call for immediate work: a shared machine-readable facts spec with CI drift checks, a behavior-parity matrix gate, and a real Windows e2e leg. An interim rule allows Wave-1/2 PowerShell fixes but blocks new large PS-only subsystems (e.g. #420) until the D2 gate resolves.

Reviewed by Cursor Bugbot for commit 1529035. Bugbot is set up for automated code reviews on this repo. Configure here.

… adapters
Records the strategy decision from the 2026-07 multi-environment installer
sweep: single Linux bash core, thin macOS/Windows adapters (Windows adapter
gated on the rootless-in-WSL validation, backend#1179), facts single-sourcing
+ CI parity gate + a real Windows e2e leg regardless of the gate outcome.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@LukasWodkaLukasWodka self-assigned this Jul 27, 2026
@LukasWodka
LukasWodka requested a review from saadqbalJuly 27, 2026 13:39
@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

bugbot run

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit dfa7fa1. Configure here.

@shujaatTraceblocshujaatTracebloc left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — approving.

Docs-only RFC (single new file docs/rfcs/0003-one-installer-core.md), CI fully green including Cursor Bugbot (0 findings), no open review threads.

Verified the content, not just the format:

  • All 8 client-side references are accurate#382 (closed, k3d pin in bash), #410 (pin missing in PS install-k8s.ps1), #429 (macOS bare-brew bypass), #411 (execute-gate), #426 (k3d/helm timeouts), #423 (Windows error-surface), #412 (Windows infinite spinner), #420 (resume/state engine, correctly flagged as gated by the interim rule). Each title matches the claim it supports.
  • Backend epic refs check out — #1285 (installer sweep epic), #1179 (Windows/WSL2 least-privilege child), #1168 (least-privilege epic).
  • Numbering is correct — 0003 is the next free slot; 0002 is legitimately in-flight on #369, which adds the file at 0002-least-privilege-install.md — exactly the path this RFC's relative link targets, so that link resolves once #369 merges.
  • No customer names or internal hostnames (public repo). Renders correctly.

Non-blocking: the ./0002-least-privilege-install.md link is a soft-dangling reference on develop until #369 merges, but the filename matches and the in-flight status is noted inline — it self-heals on merge order. Nothing to change here.

@LukasWodka
LukasWodka merged commit a6d4a04 into developJul 31, 2026
9 checks passed
LukasWodka added a commit that referenced this pull request Jul 31, 2026
develop moved again while this branch sat waiting for review: #517 (drop the dead
Get-WslConfigContent + its test) and #434 (RFC-CLIENT-0003 docs). Both touch the
same install-k8s.ps1 hash line in scripts/manifest.sha256, which is the only
textual conflict; the PowerShell and test files auto-merged.
Verified the merge rather than trusting it:
- #517's removal came through cleanly -- Get-WslConfigContent is gone from both
the installer and the test file (0 references in each).
- This branch's + #516's accessor work is intact (15 accessor references).
- Pester 391 passed / 0 failed. One fewer than the 392 before this merge, which
is exactly the Get-WslConfigContent test #517 deleted -- not a lost assertion.
Gates: Invoke-ScriptAnalyzer as CI scopes it -> 0 errors; check-style.sh clean;
check-drift.sh no drift; manifest.sha256 regenerated.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
LukasWodka added a commit that referenced this pull request Jul 31, 2026
develop moved a long way while this sat open (#513 macOS memory floor, #518
storage remedy, #516/#444/#517/#520 on the Windows side, #434 RFC docs). Only
scripts/manifest.sha256 conflicted textually — the same single install-k8s.ps1
hash line that has now collided four times today. preflight.sh and
preflight.bats auto-merged.
Resolution: regenerate the manifest (it is a DERIVED artifact — 18 digests, no
secrets; authenticity comes from the release workflow's cosign signature, not
from git), so regenerating is the only correct resolution. Taking either side
would leave a wrong digest, which the R8 gate then rejects.
Verified the auto-merge rather than trusting it. The real hazard here was not the
conflict but the clean-looking merge: this branch DELETES _pf_total_mem_kb (the
"prefer the runtime" memory selector whose conflation of host RAM and VM budget
is the bug it fixes), so any caller that landed on develop meanwhile would have
merged into a call to a function that no longer exists — a silent break git
reports as success.
- _pf_total_mem_kb: undefined and unreferenced after the merge; the only mentions
are this branch's own guard test asserting its absence, and a comment.
- #518's _pf_storage_type network-FS remedy survived intact.
- This branch's _pf_runtime_mem_status is present and still wired into both
_pf_memory and _pf_recheck_runtime_mem.
Gates: bats scripts/tests/*.bats -> 683 ok / 0 not ok (full TAP plan reported,
not a truncated read); shellcheck --severity=error over the CI file set -> rc=0;
bash -n clean; Pester -> 403 passed / 0 failed (install-k8s.ps1 arrived via this
merge); check-style clean; check-drift no drift; gen-manifest.sh --check current.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

/fr-pass

@LukasWodka
LukasWodka deleted the docs/rfc-0003-one-installer-core branch August 14, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LukasWodka@shujaatTracebloc