Refine AUDIT-WP-0008 open tasks against draft-8.
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

The framework moved from draft-5 to draft-8 while this workplan ran. No finding
was reversed, but three things changed underneath it: R moved to 2 once
rapp-postgres declared the window, a sixth axis V (availability) appeared, and
the implemented-versus-evidenced distinction became a schema field.

T03 reduces: the confirmation-oracle finding landed as Decision 4.5.3 and
question 11 is marked framework-resolved, so no amendment remains -- only our
own position document. The legal question routes to risk-nexus rather than
the-custodian, per §19.11 and policy-nexus INTENT.

T06 reduces to confirmation: all five findings were adopted and the two stale
status lines it was going to flag are already fixed.

T07 is new. V1 needs critical dependencies enumerated, restart recovery
exercised and recovery time measured. The 2026-08-16 reboot walk observed ~40s
of unreadiness but is not an exercise and does not enumerate the dependency set.

T08 is new and covers two defects in our own declaration. provider.R.available
quotes a 30-day horizon we do not solely control -- at P1 the horizon is the
instance maximum across co-residents. And under Decision 6.1, user-engine was
never told what we declared, which makes the declaration drift rather than a
completed change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-18 15:20:58 +02:00
parent 0511801f67
commit 4d5d989344
5 changed files with 150 additions and 60 deletions

View file

@ -1,22 +1,29 @@
# audit-core tenancy posture
#
# Declared per NetKingdom Tenancy Posture v0.1 (draft-7),
# Declared per NetKingdom Tenancy Posture v0.1 (draft-8),
# net-kingdom/canon/standards/tenancy-posture_v0.1.md.
# Location and schema per Decision 5.4; per-path detail per Decision 5.2;
# provider block per Decision 5.5.
#
# Conformance is accuracy, not altitude (§6). Nothing here is claimed above
# what this repo can evidence today, and two rungs are deliberately declared
# lower than the mechanism in place — see `gap.E` and `gap.R`.
# what this repo can evidence today. E is deliberately declared lower than the
# mechanism in place because the adversarial artifact is still absent.
schema_version: "0.1"
framework: netkingdom-tenancy-posture
service: audit-core
role: tenant-audit-service
tenancy:
reviewed: "2026-08-17"
review_due: "2027-02-17"
service_class: batch # §8.3.2. Co-resident with latency-critical
# tenant-engine on platform-pg; the mixture is
# reported by the platform, not hidden.
current: { I: 1, A: 2, E: 1, P: 1, R: 1 }
target: { I: 1, A: 2, E: 3, P: 1, R: 2 }
current: { I: 1, A: 2, E: 1, P: 1, R: 2, V: 0 }
implemented: { E: 2 }
target: { I: 1, A: 2, E: 3, P: 1, R: 2, V: 1 }
# §5.2 — declare per path, quote the minimum. The quoted E above is the
# minimum across paths. As of AUDIT-WP-0008-T04 both paths carry the same
@ -70,14 +77,6 @@ tenancy:
functional indexes built on non-leakproof functions. E4 is unreachable at
P1 by the §3.2 coupling and is not a target.
R: >-
R1 today: the platform default 30-day window applies and audit-core has
declared nothing above it. R2 is requested and in flight — audit-core has
asked rapp-postgres to add `backupRetentionDays: 30` to
consumers/audit-core.yaml, making the window declared rather than
inherited. That file is rapp-postgres's, so R2 is not audit-core's to
declare unilaterally. The erasure horizon is published on /readyz as
recoverable_days.
R_ceiling: >-
R4 is unreachable under the current design and is not a target. Per
Decision 4.5.3 — which this repo found — the hash chain commits to a
@ -104,30 +103,46 @@ tenancy:
data.archive provision is procured by then, audit-core reopens placement
under the §4.5 retention trigger, with P2 as the fallback — a worse answer
than archive, named now so it is not improvised later.
V: >-
No exercise establishes restart recovery for the complete audit path.
V1 is the target; replica count or Kubernetes restart policy is not
treated as evidence.
# §5.5 — audit-core provisions operations.audit to senders, so it declares
# what it makes reachable for a consumer's audit trail, not only where it
# sits. A sender's tenant separation inside the trail is audit-core's to
# enforce; the sender cannot reach a level this service does not offer.
provides:
capability: operations.audit
profile: administrative
reachable:
E2: >-
Reachable now. A sender credential is bound to the tenants it may write
for and, if it may read, to the tenants it may read back.
E3: >-
Not reachable yet. Requires rapp-postgres's ADR-0003 GUC contract
applied to the audit_core schema. Targeted 2027-03-31.
E4: >-
Unreachable. One database, one runtime credential, no per-tenant
credential and no per-tenant substrate. A sender needing a structural
guarantee that another tenant cannot reach its audit records cannot get
it here, and should be told so rather than sold E2 in E4's language
(§11.4).
R2: >-
Reachable once the declared window lands; the horizon is already
published on /readyz.
R4: >-
Unreachable by design, per R_ceiling above. A consumer with a verified
erasure obligation over its audit trail cannot discharge it here.
provider:
capability: operations.audit
profile: administrative
axes:
E:
available: 2
maximum: 3
conditions:
- "E3 requires rapp-postgres ADR-0003 applied to audit_core and its EXPLAIN probe."
- "E4 is unreachable at P1 with one runtime credential."
evidence:
- "audit_core/ingestion.py"
- "tests/test_ingestion.py"
R:
available: 2
maximum: 2
conditions:
- "R4 is unreachable while the integrity chain commits to cleartext hashes."
evidence:
- "rapp-postgres/consumers/audit-core.yaml"
- "audit_core/interface.py"
V:
available: 0
maximum: 1
conditions:
- "Exercise restart recovery across audit-core, platform-pg and OpenBao."
evidence:
A2:
- "audit_core/ingestion.py"
- "tests/test_ingestion.py"
E1:
- "audit_core/postgres_backend.py"
- "tests/test_backend_conformance.py"
P1: "rapp-postgres/docs/evidence/isolation-2026-08-10.md"
R2:
- "rapp-postgres/consumers/audit-core.yaml"
- "tests/test_interface.py"