feat(posture): add deterministic feedback proposals
Assistant: codex Assistant-Model: gpt-5.6-sol Assistant-Session: 01a02929-244b-7391-b933-c04010e8eedb
This commit is contained in:
parent
dc8da422f8
commit
cfc9e7d0cb
19 changed files with 1428 additions and 16 deletions
|
|
@ -8,7 +8,7 @@ version: "0.1"
|
|||
created: "2026-08-17"
|
||||
updated: "2026-08-23"
|
||||
scope: multi-tenancy-security-framework
|
||||
revision: "draft-13"
|
||||
revision: "draft-14"
|
||||
owner: net-kingdom
|
||||
last_reviewed: "2026-08-23"
|
||||
review_interval: 6m
|
||||
|
|
@ -87,6 +87,11 @@ and the tenant-engine boundary contract, not in the work-factory canon.
|
|||
required by §13.2. The claim remains explicitly bounded and freshness-dated:
|
||||
the attempted cross-tenant attacks did not work; this is not a universal
|
||||
isolation proof.
|
||||
- **draft-14** makes evidence freshness and remediation ownership declarable.
|
||||
Adversarial evidence may now carry its observation and expiry timestamps,
|
||||
bounded scope, responsible repository, and replacement action. A separate
|
||||
proposal-only evaluator treats absent authoritative owner or freshness as
|
||||
`unknown`; it does not infer either or mutate the declared posture.
|
||||
|
||||
**Reviewed by all six. The score:** six repos found three live defects in their
|
||||
own code by reading the ladders — `tenant-engine`'s unfiltered
|
||||
|
|
@ -826,6 +831,11 @@ declaration but do not replace it. The schema carries `current`, `implemented`,
|
|||
`target`, `reviewed`, `review_due`, `gap`, `placement_exceptions`,
|
||||
`service_class` (§8.3), per-path detail (§5.2), and provider reachability
|
||||
(§5.5), plus the workload identity prerequisite for zone membership (§5.6.2).
|
||||
It also permits `responsible_repo` for authoritative posture routing and
|
||||
`evidence_freshness` for machine-readable evidence observation, expiry, scope,
|
||||
owner, and remediation metadata. Their absence remains valid declaration
|
||||
syntax; feedback resolution must report `unknown`, never infer them from a
|
||||
directory, service name, or previous owner.
|
||||
From the `net-kingdom` repo, owners validate one or more declarations
|
||||
with `uv run tools/tenancy-posture/validate.py <path>...`; the validator applies
|
||||
the JSON Schema and the evidence, date, implemented/current and provider-range
|
||||
|
|
@ -1129,6 +1139,22 @@ rather than a green build. Cross-tenant findings are the category external
|
|||
testing practice identifies as needing human review. **A passing CI run is not
|
||||
E2 evidence.**
|
||||
|
||||
**Decision 13.5 — freshness and ownership are explicit inputs.** A declaration
|
||||
may attach `evidence_freshness.<level>` to an evidence key. An adversarial entry
|
||||
requires `observed_at`, `valid_until`, `responsible_repo`, `scope`, and
|
||||
`remediation`; a mechanical entry may omit `valid_until` when the artifact is
|
||||
continuously re-established by the referenced revision or CI control. The
|
||||
timestamps use RFC 3339 and the responsible repository is the authority for
|
||||
replacement evidence.
|
||||
|
||||
The feedback evaluator does not parse prose for dates, infer ownership from a
|
||||
file path, or silently extend a validity window. A current adversarial claim
|
||||
without freshness metadata resolves to **freshness `unknown`**. An expired
|
||||
artifact resolves to **freshness `expired`**. Neither automatically rewrites the
|
||||
declared level: the evaluator emits a deterministic owner-routed remediation
|
||||
proposal so review remains observable and controlled. The proposal contract is
|
||||
`posture-feedback_v0.1`; it performs no State Hub write or policy mutation.
|
||||
|
||||
| Level | Evidence | Kind |
|
||||
|---|---|---|
|
||||
| **I2** | Identifiers validated against the vocabulary; rejection test for a malformed id; binding shown to come from a verified token | Mechanical |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue