Repository navigation
Conversation
… target A kind:pod deploy can host real systemd as PID 1 under podman/runc on cgroup v2 (charly#1027). Before this change the vocabulary had no container systemd: `systemd:` is the MACHINE init (preserve_user, USER units, `systemctl --user`, `bootc container lint`), and `supervisord:` is the container default. This adds the peer: - `systemd-container:` entrypoint /sbin/init, SYSTEM units, the container-environment masks from CONTAINERD-IMAGES.md section 2 (serial-getty@hvc0, systemd-udevd + sockets, sys-kernel-* mounts, an empty /etc/machine-id in the image, kernel.pid_max=32768), no bootc lint. - requires_root / systemd_mode / stop_signal: the runtime contract the deploy reads from the image (spec v0.2026295.2356). - requires_capability: [init_system:systemd-container]: the entry is a candidate only when a candy declares the init_system_hint, so it never assembles into an image with no systemd. - extends: systemd: the unit template is INHERITED (one authored source); a YAML anchor cannot do this because the loader re-parses each entry in isolation. Also fixes a latent defect on the sibling systemd: init: both assemblies mounted at a top-level /system* target, which BuildKit 0.34.1 does not materialize (measured matrix: /systemd, /systemd2, /system fail; /xs-systemd, /etc/systemd and /usr/lib/systemd pass), so the machine init's user-unit assembly had been mounting nothing under BuildKit. Both now use neutral targets. Pins: spec v0.2026295.2356, sdk v0.2026296.8 (the merged sdk#450 release), plugin-init v2026.296.0001. Assisted-by: Claude Code deepseek-v4.1-flash:cloud (fully tested and validated) The embedded-vocabulary test read the assembly's staged-unit directory from a hardcoded /systemd literal; it now reads it from the assembly's own mount TARGET, so a correct target rename does not fail a semantics assertion (and the test still proves every claimed unit type is enabled).
RCA — the red
|
Review — BLOCKI re-derived every claim in the body against the current diff, the single commit ( Blocks
Non-blocking notes
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
|
STATUS — the CI runner is NOT reachable with the available credentials; the fix is a runner-side command, and the PR is still Measured. The failing job ran on runner Mechanism. Exact operator command (on the runner image / pool template, as root): If the pool template cannot carry a directory, the equivalent persistent fix is to set the cache to a user-writable path in the runner's environment ( Then re-run the Branch state. The PR is Agent: |
|
STATUS — a second open PR in this repo touches the same dependency files; the require lines are disjoint, and nothing is blocked in either direction. Agent: charly Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)
|
Summary
The
charlyleg of the W3.8 cutover (#1030, spike #1027), on top of the merged producer legs: spec#269 (v0.2026295.2356), sdk#450 (merged5d47eb5; its tag-on-merge job was still queued, so this pins the MERGED commit's proxy pseudo-versionv0.2026295.1360-0.20261023000828-5d47eb54910e), plugin-init#11 (v2026.296.0001)..systemd-containerinit entry besidesupervisord:— a container-venue systemd:/sbin/initas the entrypoint, SYSTEM units (a container has no user manager), the container-environment masks fromCONTAINERD-IMAGES.md§2 (serial-getty@hvc0,systemd-udevd+ its sockets,sys-kernel-{config,debug,tracing}.mount, an empty/etc/machine-idin the IMAGE,kernel.pid_max=32768), and nobootc container lint. The krun arm is NOT claimed: no krun handler exists, soKRUN_INIT_PID1=1stays unproven and the comment says so.requires_capability: [init_system:systemd-container]is the key a candy provides withcapability: {init_system_hint: systemd-container}; without the hint the entry is not even a candidate, so it never assembles into an image with no systemd. A box may also pin it withinit: systemd-container.extends: systemd(spec#269) makes the variant share the one authoredservice_template; the loader re-parses each top-level entry in isolation, so a YAML anchor cannot do this (measured: "unknown anchor").RUN --mountTARGET moved off the top-level/systemd*namespace. BuildKit 0.34.1 does not materialize a top-level/system*mount target at all (measured matrix:/systemd,/systemd2,/systemfail;/xs-systemd,/etc/systemd,/usr/lib/systemdpass), so the machinesystemd:init's assembly had been mounting nothing under BuildKit. Both now use a neutral target.How tested
CI-derived from
.github/workflows/ci.yml, on the committed tree2178d732(worktree-local binary2026.296.0018):The first gate run FAILED
TestEmbeddedVocab_SystemdClaimsEveryUnitTypeItInstalls, which pinned the literal/systemd/*<ext>path of the assembly. The mount-target rename (below) moved the path; the assertion now reads the directory from the assembly's own mount TARGET and still proves every claimed unit type is enabled. Re-run on the final tree: green above.Plus the emitted artifact and the assembled gate:
charly box generateon the bed fixture emitsLABEL ai.opencharly.init="systemd-container"andai.opencharly.init_def='{"entrypoint":["/sbin/init"],...,"requires_root":true,"systemd_mode":true,"stop_signal":"SIGRTMIN+3",...}', the SYSTEM-unit assembly, the §2 masks, nobootc container lint, and NO finalUSER(the init'srequires_rootskips it while the label keepsai.opencharly.user="user"— the exact shape the overlay fix must respect).charly box validateon the bed project:0 warnings, 0 errors.plugin-deploy-podleg) on this final tree:charly check run pod-systemd-containerrc=0,PASS (steps=16); the live rebuild pass11 steps: 11 passed, 0 failed, 0 skipped; the image pass3 steps: 3 passed, 0 failed, 0 skipped;summary.yml ok: true.Rulebook compliance
extends; one mask/assembly per init.2026.295.2309(./bin/charly version), no shared install.Change classification
Runtime change (embedded build vocabulary). The cutover's R10 bed is the
plugin-deploy-podleg of this chain.Filed issues
actions/setup-go@v5fails withEACCES: permission denied, mkdir '/var/cache/charly'at step 3 (run39879455863, job120173046934); the redgocheck on this head is that environment failure, not a code finding; no diff change for it.Agent:
containerd-crabbox-program/w38-impl· session8b1c01cf-7f79-4a75-bff8-240415a06208Assisted-by: Claude Code deepseek-v4.1-flash:cloud (analysed on a live system)