Skip to content

docs(security): correct the harness set and record the sandbox decision - #44

Merged
rldyourmnd merged 1 commit into
mainfrom
docs/2.4.0-decision-records
Aug 3, 2026
Merged

docs(security): correct the harness set and record the sandbox decision#44
rldyourmnd merged 1 commit into
mainfrom
docs/2.4.0-decision-records

Conversation

@rldyourmnd

Copy link
Copy Markdown
Contributor

Documentation-only follow-up to #43, found while auditing for claims the code no longer supports.

SECURITY.md was stale. It still described the active harness set as "codex and zcode only" and named nddev-zcode-app among the modules bootstrap drives. Neither has been true since 2.3.0: zcode is declared harnesses.delegated and owned by nddev-harnesses, and bootstrap does not delegate to it at all.

The --no-sandbox flag is now a recorded decision. Both instruction surfaces state why it exists, that it is Linux-only, and what must not be done instead. The browser prohibition list is unchanged, and the flag violates none of it - it is not a skip flag, an alternate executable or endpoint, provider auto-start, a stock browser fallback, or a non-loopback listener. Relaxing kernel.apparmor_restrict_unprivileged_userns is called out explicitly as the wrong fix: it would trade a host-wide kernel hardening for one headless browser.

Check Result
python3 -m pytest 95 passed
scripts/ci/validate.sh ci-validate-ok

SECURITY.md still described the active harness set as "codex and zcode only" and
named nddev-zcode-app as a module bootstrap drives. Neither has been true since
2.3.0: zcode is contract-delegated to nddev-harnesses, and bootstrap does not
delegate to it at all.

The `--no-sandbox` flag is recorded where the browser boundary is stated, so it
reads as a boundary decision rather than an unexplained relaxation of one. The
prohibition list is unchanged and the flag violates none of it: it is not a skip
flag, an alternate executable or endpoint, provider auto-start, a stock browser
fallback, or a non-loopback listener. What it does is let the zygote start on the
releases whose AppArmor policy leaves it no sandbox to enter. Both instruction
surfaces now also say what NOT to do instead - relaxing
kernel.apparmor_restrict_unprivileged_userns would trade a host-wide hardening
for one headless browser.
@rldyourmnd
rldyourmnd merged commit 94e76ce into main Aug 3, 2026
29 checks passed
@rldyourmnd
rldyourmnd deleted the docs/2.4.0-decision-records branch August 3, 2026 20:02
Sign up for free to 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.

1 participant