Repository navigation
Conversation
Advance the pinned agentic-coding-patterns release from v1.17.0 (a1206c52ec82) to v1.18.0 (7dd2ddc034b6) and update the tests and docs that name the ref. Add an offline-seam-free test proving the pinned validator accepts the additive optional reasoning/inputModalities neutral-catalog fields and that acq projects them. Update ADR-0037 prose: the v1.18.0 oci-engine kit is the first shipped kit to declare readonly files. Refs: #649 Refs: GSA-TTS/agentic-coding-patterns#539
basiliskus
left a comment
There was a problem hiding this comment.
Verdict: request changes — df898ac8836329811f967234321b883537e46904
Major — acq.backends/common.sh:41: This pin activates the first shipped kit with readonly: true root startup code, but SBX still silently copies those files into the guest and replays the /home/agent/... paths. Translating the exact v1.18.0 oci-engine spec produced no warning and retained both guest paths.
That violates the transition gate in docs/adr/0037-sbx-trusted-startup-parity.md:161-163, which requires the first opt-in kit to receive Option B or a visible warning. Please add the warning/refusal or implement the trusted mount before advancing the pin, with a regression test covering the SBX path.
Assisted-by: OpenCode [gpt-5.6-sol-latest-guardrails-defaultv2] skill:change-review
On sbx a kit files[] entry with readonly: true is copied into the guest, so a sudo guest can rewrite it. Emit one stderr warning per kit translation naming the kit and the guest paths; the kit still applies. Adds regression tests, a known-failure-mode entry, and the ADR-0037 implementation status. Refs: #661 Co-authored-by: OpenCode [claude-sonnet-5.5] <noreply@gsa.gov>
|
🤖: AI agent (First Mate), posting on behalf of @mogul. Reply to the review at Addressed in |
basiliskus
left a comment
There was a problem hiding this comment.
Verdict: approve — 499d68d6fb8539ee318cdcd9cf14e982c6b90a5e
The prior major finding on acq.backends/common.sh:41 is resolved in 499d68d6: translating the exact Patterns v1.18.0 OCI kit now warns on stderr for both readonly guest paths without changing the translated spec. No new blocking findings.
Nit — docs/adr/0037-sbx-trusted-startup-parity.md:150: replace “because no shipped kit opts in” with “while Option B awaits live validation; opted-in kits emit the warning below.”
Not verified: live SBX/MSB provisioning and restart integrity; real SBX grammar tests skip in CI. Required CI is green at this head, including the capability-projection and warning regressions under bash 3.2.
Assisted-by: OpenCode [gpt-6.1-sol-latest-guardrails-defaultv2] skill:change-review
🤖: AI agent (First Mate), AI-assisted change (OpenCode). Human review required before merge.
Summary
Bump
PATTERNS_KIT_REFinacq.backends/common.shfrom the Patterns v1.17.0 commita1206c52ec82ae7ce080ad44a6e6ac6f951e6d20to the immutable v1.18.0 release commit7dd2ddc034b6597e97f450fa716e7d47c9a38287(tagv1.18.0andmainboth resolve to it). Update the dependent test assertions and doc examples, add a test proving adoption of the additive neutral-catalog capability fields, and refresh ADR-0037 prose.Issues
reasoning/inputModalitiesfields)Before / After
a1206c52(v1.17.0). The released schema rejectsreasoning/inputModalitieson a neutral catalog model (additionalProperties: false).7dd2ddc0(v1.18.0). The released schema accepts them; acq validates and projects such a catalog unchanged.Files:
acq.backends/common.sh;test/bats/95-kit-ref-persistence.bats,test/bats/135-configure.bats(ref assertions);docs/BACKEND_GUIDE.md,docs/KNOWN_FAILURE_MODES.md(example--kitrefs); new test intest/bats/147-provider-input-projection.bats;docs/adr/0037-sbx-trusted-startup-parity.md. Quickstart carries no copy of the neutral catalog schema; it is read from the pinned release.What changed between Patterns v1.17.0 and v1.18.0 (
a1206c52..7dd2ddc0)45 files, +3188/-116. Commits: #533 five-minute stream idle gaps (opencode); #535 paseo-kit startup readiness and CLI discovery; #536 paseo pinned CLI 0.13.0; #542 reasoning and input-modality metadata in the neutral catalog; #543 oci-engine root startup scripts from the read-only host mount; #544 zizmor action bump; #550 devenv 2.4.0 from a pinned nixos-unstable rev; #534 release 1.18.0.
Under
integrations/isolation/acq-kits/**andintegrations/providers/**(34 files):spec.yamlmarks the grant script and storage helperreadonly: true; the root startup command takes them as trailing whole argv tokens and fails closed. Install and grant scripts, README andscripts/verifyupdated. First shipped kit to usereadonly.render-provider-config.mjsand tests, README, newdocs/synthetic-image-validation.md.paseo-agent-shim,paseo-start.sh,paseo-timing.sh,paseo-set-worktrees-root.mjs,spec.yaml,scripts/verify, README, a diagnostics timing spec, and four new test files.normalize-catalog.mjsand its test.validate-kits.py: +47 lines.catalog.schema.json(reasoning / inputModalities now enum-constrained, unique,minItems: 1),build-catalog.mjs, README, newtests/capabilities.test.mjs.Outside those paths:
integrations/isolation/schemas/acq-neutral-model-catalog.schema.json(+ optionalreasoningboolean andinputModalitiesenum array; absent means unknown);schemas/kit-hybrid-v1.schema.json(+ optionalfiles[].readonly);integrations/isolation/images/devenvVERSION 2.0.0 to 2.1.0 (Dockerfile, README); new Patterns ADR 0006; test and CHANGELOG changes; a zizmor workflow bump.scripts/validate_provider_input_contract.pyis unchanged between the releases. Committed snapshots remain capability-free.Verification
Adoption evidence (real validator, jsonschema 4.26.0, PyYAML 6.0.3, same fixture catalog with
reasoning/inputModalitieson a model):a1206c52: rejects (Additional properties are not allowed ('inputModalities', 'reasoning' were unexpected), rc=1).7dd2ddc0: accepts (validated 1 bundle(s), rc=0).New test
pinned Patterns validator accepts and projects neutral catalog capability fields(147): old pin FAILS, new pin PASSES. It runs the real validator throughacq_provider_input_prepareand asserts the projected snapshot keeps both fields. It skips locally withoutACQ_TEST_PATTERNS_REPO/ACQ_TEST_PROVIDER_INPUT_PYTHON, as the sibling real-validator tests do; required CI provides both and the existing exact-pin test (control-plane checkout is pinned to the exact Patterns release) passes against the new SHA.Offline bats in a scratch copy, with the pinned checkout and validator Python provided:
sbxon this host).bash -n acq.backends/common.shpasses. The shellcheck runner was not run (noshellcheckon this host); no shell logic changed.Read-only adversarial review: no blockers. It replayed the oci-engine v1.18.0 kit through acq's
kit_validate,kit_spec_files,kit_spec_commandsandkit_translate_to_sbx: valid,readonlyflagged on exactly the two files, startup tokens preserved.Review follow-up (basiliskus, CHANGES_REQUESTED at df898ac): commit 499d68d adds the visible SBX warning required by the ADR-0037 transition gate (
_acq_sbx_warn_readonly_files, called from_acq_sbx_translate_kitinacq.backends/sbx.sh). One stderr warning per kit translation names the kit and eachreadonly: trueguest path and states they are guest copies with no integrity guarantee against a sudo guest; the kit still applies, and kits without readonly files stay silent. Translating the real Patterns v1.18.0 oci-engine spec now prints the warning naming both/home/agent/...paths. Newtest/bats/91-sbx-readonly-warning.bats(2 tests): with the pre-changesbx.shthe positive test FAILS (no warning), with the change both pass. Scratch-copy bats 01 30 79 83 84 90 91 95 100 101 146 147 148 149: 377 ok, 0 not ok (101 grammar tests skip withoutsbx; 79/83/84 msb readonly tests unchanged and passing). Read-only adversarial review: no blockers. Option B (read-only mount) is deliberately not implemented; ADR-0037 staysproposed.CI: the bash 3.2 jobs take 15 to 25 minutes; see the PR checks.
Merge Guard
Draft. The First Mate marks it ready after human review. Do not merge before CI is green, including the pinned-validator and bash 3.2 jobs. Not merged by the author.
Rollback
Revert this commit. It restores
PATTERNS_KIT_REFtoa1206c52ec82ae7ce080ad44a6e6ac6f951e6d20and the dependent assertions and docs together. Existing sandboxes are re-evaluated by the provenance check as stale or current from the pin change.Security Impact
Supply chain: the pin is a full 40-char commit SHA, not a tag. The release content changes kit code that acq applies, notably oci-engine (root startup, now with
readonlyfiles). On msb those files run from the host read-only mount. On sbx the translator ignoresreadonlyand the kit's startup command takes its legacy branch, running the root-owned copies published at create. ADR-0037 is updated to say the SBX gap is no longer latent for that one opt-in kit. No credentials, auth flows or network allowlists change in acq itself; no secrets in the diff.Non-blocking follow-ups noticed (not filed by this PR): the devenv image moves to 2.1.0 while
docs/BACKEND_GUIDE.md:575andacq.backends/agents.sh:14still citedevenv-shell:2.0.0; ADR-0037 Option D and the Decision Outcome still assume no shipped kit opts in toreadonly.