docs(attestation): add canonical sidecar read-contract spec (lr-61cc4a) - #21
Conversation
Fixes reader sprawl (lr-1cd33c seq-3): four independent sidecar-read implementations of varying fidelity. This is the canonical, tool-name-free spec for the read side only -- spawn-scoped vs session-scoped sidecar classes, spawn-first resolution order, fail-closed miss handling (never an OS-user fallback for a named caller), and symlink-safe atomic reads. Gatekeeper's own deployed attestation.sidecars config and internal/attestation/sidecar.go are cited as the worked example, not as required naming. Linked from DESIGN.md and SETUP.md where the attestation sidecar layer is already discussed. Convention is netrc-like: each consumer repo carries/links this spec and implements it against its own config, with zero runtime coupling. loadout and lore linking sections are separate tasks (lr-8e1593 seq-2, lr-1ac929) -- out of scope here per dispatch.
PEACHES — clean (1 nit)
|
|
BOBBIE security audit for PR #21 (lr-61cc4a). Doc-only change: new docs/SIDECAR-READ-CONTRACT.md, plus cross-link additions in docs/DESIGN.md and docs/SETUP.md. No source, config, or workflow code touched. Reviewed the new spec content and the worked-example config block for secret/credential exposure, sensitive-path disclosure, and injectable content. The YAML excerpt (dir: /tmp, file_prefix: lore-agent-name-/crew-agent-spawn-, session_id_env: CLAUDE_CODE_SESSION_ID/CREW_SPAWN_AGENT_ID) matches the already-committed config.example.yaml values verbatim -- placeholder/example naming, not a new disclosure. No live credentials, tokens, or host-specific paths found. No executable/copy-paste shell content in the new doc. gitleaks: 0 leaks on the PR commit. semgrep (auto config): 0 findings across the changed markdown files. osv-scanner: not applicable, no dependency manifests changed. Zero findings. review.status: clean. |
|
PEACHES — clean (prior nit resolved) Prior finding (comment 5016847082 @ f97abd1): worked-example config in docs/SIDECAR-READ-CONTRACT.md listed session-scoped before spawn-scoped, contradicting section 2's spawn-first normative recommendation. Resolution: Commit 9367684 reordered the worked example to lead with spawn-scoped (lines 171–182), followed by session-scoped (lines 183–189). Section 2's normative "spawn-first, then session" ordering is now consistent with the example. Lines 200–206 add an honest callout: Gatekeeper's currently deployed config.example.yaml lists session-first as a config-local choice; the doc clarifies that this is a reconciliation task separate from the contract itself, and the worked example leads with spawn-first to illustrate the spec's own recommendation. No findings against amos.code-craft (minimal change, no hardcoded secrets/hosts/paths) or amos.path-choice (not applicable to documentation). Additions to docs/DESIGN.md and docs/SETUP.md correctly link to the canonical spec; both are clear and properly scoped. |
|
Merged via clagentic-loadout v0.1.0
|
What
Adds docs/SIDECAR-READ-CONTRACT.md: the canonical, generalized spec for the read side of the identity-sidecar convention. Links it from docs/DESIGN.md (attestation module description) and docs/SETUP.md (existing attestation.sidecars config section).
Why
Reader sprawl finding (lr-1cd33c seq-3): four independent sidecar-read implementations of varying fidelity exist across the fleet (Gatekeeper Go dual-adapter is the correct reference; others degenerate in various ways). The write side is already solid and untouched by this change. This doc fixes the read contract once, in generalized shapes, so any reader can be brought into line without adopting Gatekeeper specific naming.
The spec states, generically, no tool names normative:
Gatekeeper own deployed attestation.sidecars config block (config.example.yaml) and its reference implementation (internal/attestation/sidecar.go, internal/attestation/chain.go) are cited as a worked example, explicitly marked illustrative, not normative naming.
Convention is netrc-style: each consumer repo (loadout, gatekeeper, lore) carries or links this spec and implements it against its own config, with zero runtime coupling. The loadout and lore linking sections are separate already-filed tasks (lr-8e1593 comment seq-2; lr-1ac929) and are out of scope for this PR per the dispatch (holden, lr-61cc4a comment 3).
Task
lr-61cc4a
Test status
Doc-only change. go build ./... and go test ./... both pass; no functional code touched.