ops-warden/tests
tegwick 66db87e6ae feat: refuse to answer a write with a read (WARDEN-WP-0038)
`warden plan` scored needs by keyword overlap with no notion of what the
caller wanted to DO, so "generate a successor secret and CAS-write it to two
custodians" matched the lane that READS that path and inherited its
`autonomous` verdict -- answered with --out/--exec/--wrap.

Two counterparties reported it in two days. key-cape distrusted the output on
principle and was right to; railiance-platform, answering as the write
authority being wrongly bypassed, said plainly that `founder_required` is the
verdict it should have returned and that until it is fixed a plan result must
not stand in for the owner's answer.

A mutating need on a lane ops-warden does not permanently own can no longer
reach any branch returning `autonomous`: it becomes `founder_required` with
an approve act naming the write owner, or `unroutable` with a CCR stub when
the lane admits no rotation route. Commands carry no read transport either
way, which is the half that made the wrong verdict actionable.

The ownership test does the work a verb list cannot. SSH certificate
issuance is itself a mutating act, so `delegation.mode: permanent` -- not the
absence of a verb -- separates ops-warden's own front door from someone
else's custody. A regression asserts `warden sign` still proceeds; a guard
that refused our own lane would be worse than the defect it fixes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013EPuTc18FjU5WFqoSEKH3C

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1276224@bnt-lap001
Assistant-Session: 426ec497-e1c4-4dd3-b417-dfce1ca1dbc3
2026-09-10 08:02:10 +02:00
..
__init__.py Initial Commit 2026-03-28 00:45:43 +00:00
conftest.py Implement WARDEN-WP-0024 experiential memory and agent sessions. 2026-07-02 23:40:45 +02:00
test_access.py feat: complete local layer model v0.7 conformance work 2026-09-05 01:19:48 +02:00
test_agent_read_boundary_check.py WARDEN-WP-0033-T03: emit the high-risk data-path artifact 2026-08-21 08:38:13 +02:00
test_audit.py Implement WP-0022 audit trail and WP-0023 INTENT–SCOPE closeout 2026-07-01 23:32:38 +02:00
test_ca.py feat(warden): WARDEN-WP-0003 — test coverage, permissions, status --state-dir 2026-05-15 17:05:38 +02:00
test_cli.py feat(warden): WARDEN-WP-0003 — test coverage, permissions, status --state-dir 2026-05-15 17:05:38 +02:00
test_config.py feat: adopt security zones and explicit workload refs 2026-08-22 15:36:37 +02:00
test_desk.py feat: adopt security zones and explicit workload refs 2026-08-22 15:36:37 +02:00
test_doubles.py Fix warden access proxy for catalog fetch commands with shell pipes. 2026-07-07 16:42:26 +02:00
test_flex_auth_registry.py feat: assert flex-auth ceiling keys are declared, not assumed 2026-09-09 14:40:05 +02:00
test_integration.py feat(warden): WARDEN-WP-0003 — test coverage, permissions, status --state-dir 2026-05-15 17:05:38 +02:00
test_inventory.py feat(bootstrap): WARDEN-WP-0001 initial implementation — 42 tests passing 2026-05-15 13:27:49 +02:00
test_layer_conformance.py feat: complete local layer model v0.7 conformance work 2026-09-05 01:19:48 +02:00
test_mask.py WARDEN-WP-0026 T03: masking display filter (defense-in-depth) 2026-07-16 14:54:55 +02:00
test_memory.py feat: adopt security zones and explicit workload refs 2026-08-22 15:36:37 +02:00
test_models.py Initial Commit 2026-03-28 00:45:43 +00:00
test_plan.py feat: refuse to answer a write with a read (WARDEN-WP-0038) 2026-09-10 08:02:10 +02:00
test_policy.py feat: assert flex-auth ceiling keys are declared, not assumed 2026-09-09 14:40:05 +02:00
test_policy_http_refusal.py Refuse explicit policy authentication and binding denials before side effects 2026-09-08 16:46:00 +02:00
test_posture.py WARDEN-WP-0029: implement plan front door, org posture, desk, freshness 2026-07-18 16:59:37 +02:00
test_posture_conformance.py feat(WARDEN-WP-0015): T3 conformance checker + T4 dev-tier contract doubles 2026-06-27 19:30:30 +02:00
test_principals_drift.py feat: close WP-0009/WP-0013 production integration stewardship strand 2026-06-24 12:44:32 +02:00
test_proxy.py Refuse explicit policy authentication and binding denials before side effects 2026-09-08 16:46:00 +02:00
test_routing.py docs: narrow qonto blocker, record key-cape lane ownership 2026-09-08 14:55:02 +02:00
test_scorecard.py WARDEN-WP-0029: implement plan front door, org posture, desk, freshness 2026-07-18 16:59:37 +02:00
test_taint.py feat: adopt security zones and explicit workload refs 2026-08-22 15:36:37 +02:00
test_tunnel_cert_readiness.py feat(WARDEN-WP-0016): ops-bridge cert_command readiness gate + handoff 2026-06-27 19:50:28 +02:00
test_vault.py Implement WP-0022 audit trail and WP-0023 INTENT–SCOPE closeout 2026-07-01 23:32:38 +02:00
test_worker.py feat(WARDEN-WP-0021): T3-T5 — visibility, approve loop, runbook (scheduled worker complete) 2026-06-30 15:24:10 +02:00
test_workload_join.py feat: complete local layer model v0.7 conformance work 2026-09-05 01:19:48 +02:00