docs(soul): design recipe placeholders backed by vault capability classes #237

Closed
clawdie wants to merge 2 commits from clawdie/docs/layered-soul-recipe into main AGit
Owner

Add a design note and a spec-check pack for turning layered-soul guardrails
into Agent Vault placeholders.

  • docs/plans/SOUL-RECIPE-PLACEHOLDERS.md: five placeholder classes, the
    guardrail->class table, an additive clawdie.layered-soul.v1 recipe schema
    (requires/provides, ph./cap./gen. ids, registry membership), the vault
    report shape with redaction rules, and the class-aware decision table
  • scripts/soul-recipe/replay.py + testdata: vocabulary, 12-row matrix A,
    30-row class-aware matrix B, five recipe fixtures, a mutant-table negative
    control, and a sentinel proving a blocked recipe never invokes install()
  • Jev triage recorded honestly: the five-way taxonomy question collapsed to
    one label and was unstable across runs (confidence 0.19-0.57), so it is
    treated as no evidence; the class-aware matrix agreed on write-only
    requirements (0.83/0.88) and was overruled on circular custody, where the
    deterministic table wins (refuse, not blocked)

Design only: no live vault, Tarsnap, jail, or ZFS operation. The replayer is a
spec check, not production binding.

Gates: ci-checks.sh PASS; check-okf.sh --changed clean; wiki-lint --strict 583
PASS; leak-guard clean; replay PASS.

Add a design note and a spec-check pack for turning layered-soul guardrails into Agent Vault placeholders. - docs/plans/SOUL-RECIPE-PLACEHOLDERS.md: five placeholder classes, the guardrail->class table, an additive clawdie.layered-soul.v1 recipe schema (requires/provides, ph./cap./gen. ids, registry membership), the vault report shape with redaction rules, and the class-aware decision table - scripts/soul-recipe/replay.py + testdata: vocabulary, 12-row matrix A, 30-row class-aware matrix B, five recipe fixtures, a mutant-table negative control, and a sentinel proving a blocked recipe never invokes install() - Jev triage recorded honestly: the five-way taxonomy question collapsed to one label and was unstable across runs (confidence 0.19-0.57), so it is treated as no evidence; the class-aware matrix agreed on write-only requirements (0.83/0.88) and was overruled on circular custody, where the deterministic table wins (refuse, not blocked) Design only: no live vault, Tarsnap, jail, or ZFS operation. The replayer is a spec check, not production binding. Gates: ci-checks.sh PASS; check-okf.sh --changed clean; wiki-lint --strict 583 PASS; leak-guard clean; replay PASS.
docs(soul): design recipe placeholders backed by vault capability classes
All checks were successful
CI / markdown (pull_request) Successful in 9s
CI / packaging (pull_request) Successful in 2s
CI / python-tests (pull_request) Successful in 20s
CI / mcp-cross-language (pull_request) Successful in 28s
CI / go (pull_request) Successful in 48s
leak-guard / guard (pull_request) Successful in 11s
e0fd0757a0
Add a design note and a spec-check pack for turning layered-soul guardrails
into Agent Vault placeholders.

- docs/plans/SOUL-RECIPE-PLACEHOLDERS.md: five placeholder classes, the
  guardrail->class table, an additive clawdie.layered-soul.v1 recipe schema
  (requires/provides, ph./cap./gen. ids, registry membership), the vault
  report shape with redaction rules, and the class-aware decision table
- scripts/soul-recipe/replay.py + testdata: vocabulary, 12-row matrix A,
  30-row class-aware matrix B, five recipe fixtures, a mutant-table negative
  control, and a sentinel proving a blocked recipe never invokes install()
- Jev triage recorded honestly: the five-way taxonomy question collapsed to
  one label and was unstable across runs (confidence 0.19-0.57), so it is
  treated as no evidence; the class-aware matrix agreed on write-only
  requirements (0.83/0.88) and was overruled on circular custody, where the
  deterministic table wins (refuse, not blocked)

Design only: no live vault, Tarsnap, jail, or ZFS operation. The replayer is a
spec check, not production binding.

Gates: ci-checks.sh PASS; check-okf.sh --changed clean; wiki-lint --strict 583
PASS; leak-guard clean; replay PASS.
docs(soul): simplify the recipe to api_placeholders only
All checks were successful
CI / markdown (pull_request) Successful in 10s
CI / packaging (pull_request) Successful in 2s
CI / python-tests (pull_request) Successful in 22s
CI / mcp-cross-language (pull_request) Successful in 26s
CI / go (pull_request) Successful in 45s
leak-guard / guard (pull_request) Successful in 11s
5d77f6e33c
Drop the gen.* / cap.* id machinery. A soul recipe declares credentials, not
host topology: mesh identity, dataset properties, lockfiles and runtime config
belong to Phase 1 host bootstrap, not to soul metadata.

- schema: one additive key, api_placeholders (name -> http_inject | read_decrypt
  | write_only), max 16, no values or refs
- keep the class because a single TARSNAP_* name cannot express that a write-only
  backup key cannot restore; without it readiness is wrong in the unsafe direction
- matrix A stays as import-time analysis (vault / host_bootstrap / archive /
  operator / hard_refuse) but only vault rows become recipe entries
- matrix B unchanged: state x requirement class x level, refuse on circular custody
- record two corrections: Tarsnap restore is smoke-tested with a fake key, not
  proven; and an empty vault does not mean no network, because jail PF egress is broad

Gates: ci-checks PASS; check-okf --changed clean; wiki-lint --strict 583 PASS;
leak-guard clean; replay PASS (12 A rows, 30 B rows, mutant + sentinel).
clawdie closed this pull request 2026-10-31 21:02:38 +01:00
All checks were successful
CI / markdown (pull_request) Successful in 10s
CI / packaging (pull_request) Successful in 2s
CI / python-tests (pull_request) Successful in 22s
CI / mcp-cross-language (pull_request) Successful in 26s
CI / go (pull_request) Successful in 45s
leak-guard / guard (pull_request) Successful in 11s

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
clawdie/colibri!237
No description provided.