Plan: System Configuration Slice 3
Overview
Slice 3 of the System Configuration and Operator Extensibility track from
docs/proposals/system-configuration-proposal.md. Slices 1 and 2 are
landed: the shared defaults package exists at cue/defaults/defaults.cue
and the repo-root packaged default boot manifest already imports it. Many
focused-proof manifests are migrated onto the defaults package; this plan
finishes migrating the remaining focused-proof variants and tightens the
manifest decoder boundary.
The track is ad-hoc until explicitly selected; treat this plan as parallel-safe alongside the selected milestone because it edits CUE files and limited tooling, not kernel core.
Conflict Surface
Owned by this plan:
cue/defaults/defaults.cueand any newcue/defaults/*.cuemodulescapos-config/(the manifest decoder/loader and its host tests; Task 3 tightens the decoder boundary here). Coordinate with the Device Driver Foundation plan when DDF Task 5 adds ProcessSpawner/manifest plumbing, since DDF declares the same overlap oncapos-config/andtools/mkmanifest/. Run the manifest-shape change on a single branch at a time so the focused-proof migration and DDF authority caps do not race the same loader.- Repo-root focused-proof manifests:
system-spawn.cue,system-shell.cue,system-terminal.cue,system-credential.cue,system-login.cue,system-local-users.cue,system-login-setup.cue,system-network-client.cue,system-revocable-read.cue,system-memoryobject-shared.cue,system-restricted-shell-launcher.cue,system-telnet.cue,system-chat.cue.system-measure.cueis owned bydocs/plans/measure-mode-repair.mdwhile the regression repair is open; migrate it onto the defaults package only after that plan closes, and only in a separate batch from this slice. cue.mod/module.cue(only when the CUE language version changes)tools/mkmanifest/only when the manifest input shape changessystem.local.cue.exampledocs/proposals/system-configuration-proposal.md,docs/configuration.md
Do not touch from this plan:
system.cue(default boot manifest) outside import-line adjustments required by the slicesystem-paperclips.cueandsystem-adventure.cue– demo-owned manifests; coordinate via the demo plans- Kernel-core, capability schema, runtime, scheduler, device manager
tools/remote-session-client/(owned by remote-session plan)
Validation Commands
make fmt-checkcargo test-configcargo test-mkmanifestmake generated-code-checkmake run-smokemake run-spawnmake run-shellmake run-terminal
Per-batch QEMU gates – run the matching make run-* target for each
manifest the batch migrated, in addition to the always-on commands above.
Treat any of these as required when the batch touches the corresponding
manifest:
make run-credentialforsystem-credential.cuemake run-loginforsystem-login.cuemake run-login-setupforsystem-login-setup.cuemake run-local-usersforsystem-local-users.cuemake run-network-clientforsystem-network-client.cuemake run-revocable-readforsystem-revocable-read.cuemake run-memoryobject-sharedforsystem-memoryobject-shared.cuemake run-restricted-shell-launcherforsystem-restricted-shell-launcher.cuemake run-telnetforsystem-telnet.cuemake run-chatforsystem-chat.cue
Success Criteria
Slice 3 is recorded done when every focused-proof manifest listed above
imports the defaults package, the manifest decoder rejects unknown
top-level fields cleanly, the make run-* target for each manifest
remains green, and docs/proposals/system-configuration-proposal.md
records the slice closeout with commit hash and minute-precision
timestamp.
Task 1: Inventory the remaining focused-proof manifests
- Enumerate every repo-root
system-*.cuemanifest, their current package status, and themake run-*target each one drives. - Note which manifests already import the defaults package (Slice 2
landings) and which still ship without it. Update the legacy
enumeration in
CLAUDE.mdif it has drifted. - Capture the migration order: prefer manifests whose
make run-*target is host-runnable in CI before manifests requiring operator-driven QEMU runs.
Task 2: Migrate focused-proof manifests in batches
- Migrate one batch of manifests (5-7 files) onto the defaults
package per task iteration. Each batch must keep the matching
make run-*target green. - Keep the per-manifest diff small: import the defaults package and
project only the manifest-specific fields. Each focused-proof
manifest must keep its own distinct CUE package
(
package spawn,package chat,package adventure, etc.) so package-modecue exportfor the default boot does not merge unrelated focused manifests withsystem.cue/system.local.cue(those usepackage capos). - Record each batch in
docs/proposals/system-configuration-proposal.mdwith the manifests covered.
Task 3: Tighten the manifest decoder boundary
- After every focused-proof manifest is migrated, tighten the decoder/loader to reject unknown top-level fields and verify that legacy unmigrated layouts now fail closed.
- Add a
cargo test-confighost test that exercises the rejection path so regressions are caught before QEMU runs. - Document the strictness change in
docs/proposals/system-configuration-proposal.mdanddocs/configuration.md.
Task 4: Operator overlay worked example refresh
- Refresh
system.local.cue.exampleso it covers an operator extension that exercises the migrated defaults package without needingtools/mkmanifestflag changes. - Verify the example by copying it to repo-root
system.local.cue(gitignored) and rerunningmake run. Document the test in the proposal. - Update
docs/configuration.mdto match the refreshed example.
Task 5: Closeout
- Update
docs/proposals/system-configuration-proposal.mdslice 3 status, mark the migrated manifests, and pin the closeout commit. - Update
WORKPLAN.md’s System Configuration ad-hoc bullet to record Slice 3 done and to flag any successor slice (e.g. richer operator overlays) for future selection. - Add a
docs/changelog.mdentry referencing the closeout commit.