Repository navigation
feat(layer-nerdctl): nested-pod posture + its R10 bed (Phase 4, v2) - #2
Conversation
…L, /dev/fuse, /dev/net/tun, unmask /proc/*) Phase 4 of plan/nerdctl-integration.md: the OUTER pod posture the inner rootless nerdctl engine needs — the full capability set within its user namespace, the fuse-overlayfs snapshotter's /dev/fuse, the CNI bridge's /dev/net/tun, and the /proc/* unmask so the inner runtime can re-mount /proc. All userns-scoped: the inner engine's userns-root is NOT host root. charly box validate: OK, 0 warnings / 0 errors.
Phase 6: the candy's skill node so the marketplace generator emits distros/skills/layer-nerdctl/SKILL.md.
…ts box) The posture's own disposable bed (R2): a Fedora box composing layer-nerdctl, deployed as a disposable pod asserting the emitted /dev/fuse, /dev/net/tun, the userns-scoped full capability set, and nerdctl on PATH — the checks FAIL without the security: block. Ships with the posture so its deliverable is proven in the same PR.
…(B12/RDD) The prior CapEff grep matched any 16-hex value (vacuous); it now asserts the exact full-userns mask 000001ffffffffff, and a new check proves the pod is userns-scoped (uid 0 inside maps to host uid 1000, not host root) — the RDD proof for cap_add ALL. Both PASS on the disposable bed.
Review — BLOCKHead SHA: Change class: code/config — a candy Blocks
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
The R10 run artifacts (.check/**) embed absolute home paths and are not source; gitignore them. Same for the generated .containerignore/.dockerignore.
Review — BLOCKHead SHA: Change class: candy config (a Security screen: PASS — no added secrets/egress/obfuscation, no branch-protection/rulebook/pre-push-gate weakening, no supply-chain change. The Comment disposition: the single prior comment (head Blocks
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
Every new candy/image must ship a description + a plan with >=1 check; the check-nerdctl-app box now asserts nerdctl is installed by the composed candy and the nerdctl.toml is present.
Review — BLOCKHead SHA: Change class: candy config (a userns-scoped Comment disposition (re-derived against the current head):
Blocks
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
Review — PASSHead SHA: Security screen: PASS — no secrets/egress/obfuscation, no supply-chain change, no weakening of the pre-push gate / branch protection / this validator / the rulebook. The Checklist: All applicable rules PASS or NA.
Comment disposition:
Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
Summary
Phase 4 of
plan/nerdctl-integration.md— the nested-pod posture the inner rootless nerdctl engine needs — plus Phase 6's harness skill, plus the disposable R10 bed that PROVES the posture (so its deliverable is proven in the same PR, per R2).The 4-file diff, item by item:
candy/layer-nerdctl/charly.yml— asecurity:block: userns-scopedcap_add: ALL,/dev/fuse(the fuse-overlayfs snapshotter),/dev/net/tun(the CNI bridge),unmask=/proc/*(the inner runtime re-mounts /proc). Plus thelayer-nerdctl-skillharness-skill node (family:distros) for the marketplace generator.charly.yml— thecheck-nerdctl-nesteddisposable pod deploy (the R10 bed).box/check-nerdctl-app/charly.yml— the Fedora bed image composinglayer-nerdctl, so the posture is emitted onto a real pod..gitignore— ignores the.check/run artifacts + the generated.containerignore/.dockerignore(never shipped).How tested
Change-class gate — the disposable R10 bed
check-nerdctl-nested(kind:pod,disposable: true), fresh-rebuild cycle, on the branch charly:.check/check-nerdctl-nested/2026.266.1801/summary.yml→ok: true, every steperrors: 0, warnings: 0.The posture's checks fail without the change —
check-liveruns the bed plan, which asserts exactly the emitted posture:the fuse device is present for the fuse-overlayfs snapshotter→/dev/fusethe tun device is present for the CNI bridge→/dev/net/tunthe exact full capability mask is retained (cap_add ALL)→grep -qE '^CapEff:\s+000001ffffffffff$'(the EXACT mask — fails withoutcap_add: ALL)the pod is userns-scoped (uid 0 inside maps to the host user, not host root)→grep -qE '^\s+0\s+1000\s+1\s*$' /proc/self/uid_map(the RDD proof)nerdctl is on PATH in the nested podRDD — the userns-scoping claim is proven, not asserted. The bed's
uid_mapcheck asserts0 1000 1— uid 0 inside the pod maps to host uid 1000, NOT host root — so the elevatedcap_add: ALLis userns-scoped. Live values from the run:CapEff: 000001ffffffffff,uid_map: 0 1000 1.Disposable target:
check-nerdctl-nestedcarriesdisposable: true; the bed's owncleanupdestroys it.Local gates:
charly box validate→ OK, 0 warnings / 0 errors (1 candy, 1 box, 1 deploy; the box ships its own ADE plan).Project-rulebook rule-compliance
/charly-image:layer,/charly-check:check,/charly-internals:git-workflowloaded first.git statuschecked before each commit; no destructive action.charly box validate0 warnings.check-nerdctl-nesteddisposable fresh-rebuild cycle above, 0 warnings / 0 failed steps.check:steps are the deterministic acceptance.disposable: trueteardown.Change classification
Candy config (the nested-pod
security:posture) + a harness-skill node + a disposable R10 bed (a box + a pod deploy). Verification gate: thecheck-nerdctl-nesteddisposable R10 bed (fresh rebuild, posture checks green). Attribution tier:fully tested and validated.Assisted-by: opencode ollama-cloud/deepseek-v4.1-flash (fully tested and validated)