Skip to content

docs(security): Shell-runtime trust model + GH-004 reframe (Phase C, C5)#217

Merged
yairfalse merged 1 commit into
mainfrom
feature/monster-c5-trust-adr
May 25, 2026
Merged

docs(security): Shell-runtime trust model + GH-004 reframe (Phase C, C5)#217
yairfalse merged 1 commit into
mainfrom
feature/monster-c5-trust-adr

Conversation

@yairfalse
Copy link
Copy Markdown
Collaborator

Monster Phase C — item C5 from docs/audit-2026-05-22.md. Decision: document Shell = trusted.

Note on "ADR"

The option was framed as an ADR, but ADRs were intentionally removed from this repo (#153, "remove ADR system"). So this is a regular doc — re-establishing docs/adr/ would contradict that decision. The substance (document the trust model) is unchanged.

Changes

  • docs/runtime-trust-model.md (new): the Shell runtime is not a security sandbox — it runs trusted repo code with the invoking user's privileges; untrusted pipelines need a container runtime. Sykli's own file ops (copy, mounts, success_criteria/evidence_required paths) stay path-contained (Path.expand + path_within? + symlink rejection).
  • Add fluent Go SDK API #4 reframed to assert the guarantee Sykli actually makes: a success_criteria path that traverses the workdir is rejected at runtime (resolve_criterion_pathpath escapes task workdir), proving the engine contains its own file access. The old case asserted command-sandboxing the Shell runtime never provided. Fixture renamed path_traversal_commandpath_traversal_criterion.
  • Closes Resolve GH-004 shell runtime host path threat-model gap #209.

Milestone

GH-4 was the last expected_failure case. The black-box suite is now 167 passed / 0 expected-red / 0 failed — zero known-broken cases (the audit's original 12 flags are all resolved across phases A, B, and C).

Note

.gitignore uses a docs allowlist; added !docs/runtime-trust-model.md so the new doc is actually tracked (same trap as the Phase A untracked files).

Verification

No Elixir source changed. Black-box: all 167 pass, 0 expected-red. JSON dataset validated.

🤖 Generated with Claude Code

Monster Phase C, item C5. Decision: document Shell = trusted.

ADRs were removed from this repo (#153), so this is a regular doc, not an ADR.
docs/runtime-trust-model.md states the trust boundary: the Shell runtime is not a
security sandbox (it runs trusted repo code with the invoking user's privileges;
use a container runtime for untrusted pipelines), while Sykli's own file
operations stay path-contained.

GH-4 reframed: instead of asserting a shell command can't read /etc/passwd
(which the Shell runtime cannot prevent and does not claim to), it asserts Sykli's
own containment — a success_criteria path that traverses the workdir is rejected
("path escapes task workdir"). Retires the LAST expected_failure case; the
black-box suite is now 167 passed / 0 expected-red / 0 failed. Closes #209.

(.gitignore: docs/ is an allowlist; added !docs/runtime-trust-model.md so the new
doc is actually tracked.)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@yairfalse yairfalse merged commit e4c7a2c into main May 25, 2026
12 checks passed
@yairfalse yairfalse deleted the feature/monster-c5-trust-adr branch May 25, 2026 22:53
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