Problem
Today every adapter's execute() is read-only. Per design-docs/05-ecosystem-roadmap.md:481-521, real-world remediation pipelines (CR creation, doc publish, KG writeback) need the broker to propose writes while keeping the governance + attestation chain. Callers currently bypass the broker for any mutation, losing the policy chain entirely.
Hard requirements (10 sub-items)
All required before any write surface ships:
Design references
design-docs/05-ecosystem-roadmap.md:481-521 — full spec
nautilus/adapters/servicenow.py:258 — cited canonical example of GET-only adapter
- Related: Harbor v0.x cve_remediation pilot drove this requirement
Acceptance (per sub-item)
Each checkbox above is its own PR. This umbrella issue closes only when all 10 ship + integration test exercises a write request through full two-key + dual attestation + audit path.
Priority
P0 — largest single block of unimplemented design; blocks remediation pipelines that need broker governance.
Problem
Today every adapter's
execute()is read-only. Perdesign-docs/05-ecosystem-roadmap.md:481-521, real-world remediation pipelines (CR creation, doc publish, KG writeback) need the broker to propose writes while keeping the governance + attestation chain. Callers currently bypass the broker for any mutation, losing the policy chain entirely.Hard requirements (10 sub-items)
All required before any write surface ships:
allowAND (2) separate configurable approval channel signs off (HITL token / Bosun rule / attestation chain prereq). No single rule authorizes write end-to-end.write_allowed: falsedefault. Source config explicitly opts in. Adapters that don't overrideawrite()raiseWriteNotSupportedErrorrather than silently fall back to read.write_allowed_purposesallowlist distinct fromallowed_purposes. Read + write get separate gates.write_attestationclaim block: request hash, dedupe key, second-key signature. Fresh attestation sandwich around every write.nautilus-write-default-denyin built-ins so fresh broker cannot write anything until operator wires the pack.event_type: write_requestdistinct fromrequest;dry_run: boolenvelope flag stamped into audit so prod runs and rehearsals visible at a glance.max_writes_per_minutecap with hard ceiling. Exceeding cap escalates todenyand rage-quits session.Adapter.awrite()Protocol method alongsideexecute()— signature TBD as part of design spike.Design references
design-docs/05-ecosystem-roadmap.md:481-521— full specnautilus/adapters/servicenow.py:258— cited canonical example of GET-only adapterAcceptance (per sub-item)
Each checkbox above is its own PR. This umbrella issue closes only when all 10 ship + integration test exercises a write request through full two-key + dual attestation + audit path.
Priority
P0 — largest single block of unimplemented design; blocks remediation pipelines that need broker governance.