Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
132 lines
8.6 KiB
Markdown
132 lines
8.6 KiB
Markdown
# NetKingdom owner review: closed SecurityCase execution seam — 2026-10-10
|
|
|
|
Disposition: **support design direction with the requirements below**. This is
|
|
NetKingdom's architectural owner review; it is not founder approval, another
|
|
repository's review, executable type acceptance, materialization or native case
|
|
completion. Reviewed proposal SHA256: 78ab1439e4c5beb205aeccf15b1b2e706511be55ab195c5a3aa682f326c7c77c.
|
|
|
|
## Architectural fit
|
|
|
|
NetKingdom declares Taxonomy and owns case canon/schema/type composition.
|
|
ops-warden owns follow-through routing and caller-proxy orchestration. The
|
|
existing type's entry_point/auth/check/action fields are descriptive strings,
|
|
not fixed argv contracts. Inferring a shell command from those descriptions
|
|
would invent a new execution interface and authority. The proposal correctly
|
|
keeps them descriptive and adds a separately validated closed owner adapter
|
|
reference, exact source/interface pins, parameter schemas and bounded receipts.
|
|
Owner-native execution/undo remains with each provider; consumer OIDC/group
|
|
configuration remains railiance-apps, and mint remains railiance-platform.
|
|
|
|
Caller proxy must continue to use the caller's declared lane and grant. It
|
|
must not become a standing Warden broker, borrow user-engine's provisioner
|
|
credential, or merge the KeyCape and OpenBao issuer sessions. The proposal's
|
|
receipt-only pending-owner path is useful and does not count as success. Its
|
|
uncertain-on-interruption, no replay of success, reconcile-before-retry and
|
|
created-object-only rollback are appropriate. Confirmed grant/session
|
|
revocation is part of native completion, not an inferred exit-code success.
|
|
|
|
## Source-evidenced deadlock and version mismatch
|
|
|
|
1. ops-mason/workplans/MASON-WP-0010-security-case-materialization.md T03's
|
|
blocking_reason waits for CCR application **plus mint-secret**, and then says
|
|
the case is live. Its task acceptance is materialization, not full live
|
|
follow-through. The same file says its build writes a bundle and never
|
|
contacts OpenBao; bundle preparation is not observed materialization.
|
|
2. ops-warden/src/warden/case_plan.py requires case status materialized before
|
|
planning (`PLANNABLE_CASE_STATUS`, plan_case); an accepted case is refused.
|
|
3. railiance-platform/scripts/keycape_client_secret_generate.py check_case
|
|
also requires status materialized before mint (line117 at this revision).
|
|
mint is a follow_through step in type1.1, not a structural materialization
|
|
template. Thus requiring mint before materialized prevents the mint route
|
|
from being entered. The accepted case still has status accepted.
|
|
4. The original broker source separately pins `CASE_TYPE = oidc-browser-relying-party@1.0`
|
|
and compares exact case.type. Forgejo has already been accepted/re-pinned
|
|
to @1.1 on the founder's recorded go. No run can silently pass the @1.1
|
|
case as @1.0 or ignore the check. Platform must review the broker's actual
|
|
version binding and owner test it against the exact accepted type/case.
|
|
Platform now has a reviewed staged correction at
|
|
/tmp/security-stage/railiance-platform/scripts/keycape_client_secret_generate.py
|
|
SHA256 9576cd211cfc06526ec4cc9bd0a5b06f0f59287a68931bb2d6e3592a951ddc7d:
|
|
exact @1.1 is admitted, @1.0/later types and unmaterialized cases remain
|
|
refused. Its owner reports ten fake-backend subprocess tests passed. This
|
|
removes the identified source mismatch when applied; it does not establish
|
|
installed broker provenance, applied structural receipts or native mint.
|
|
|
|
## Required implementation contract
|
|
|
|
- Define materialized as accepted and verified structure: exact type/case/render
|
|
pins plus the owner's native structural receipt identifying created and
|
|
pre-existing objects and current target identity. All applicable structure
|
|
must have admission evidence; CCR-0042's unfinished consumer binding is not
|
|
waived by separating mint. Empty generated-value custody can exist at this
|
|
state; mint/delivery/env/registry/consumer/verification occur afterwards.
|
|
A file status label or source bundle cannot stand in for that receipt.
|
|
- Lifecycle change from accepted to materialized changes exact case bytes and
|
|
therefore case-ref. Authoritative materialization receipt must preserve the
|
|
accepted content/record and bind the new exact bytes, rather than carry an
|
|
old case-ref into broker generation. Do not mark the type implemented until
|
|
a reference case is actually live and verified; keep the established first
|
|
acknowledged-type exception explicit.
|
|
- Introduce a separately versioned schema for adapter references and run/step
|
|
receipts, with closed fields, immutable owner/interface/source references,
|
|
machine target/parameter mapping, actor/lane equality and fixed argv (no shell
|
|
interpolation). Unknown adapters/params fail closed. Existing descriptive
|
|
types remain valid for plan-only output until migrated; absence of execution
|
|
descriptors permits no dispatch. Receipt provenance must be authenticated or
|
|
explicitly attended manual evidence, with bounded input and secret withholding.
|
|
- Classify each actual type migration under canon section6. Preserving existing
|
|
auth/trust and adding closed execution references is not itself authority to
|
|
change those boundaries. A changed auth path/materialization/trust transition
|
|
or loosened validation needs new informed-decision acknowledgment. Retain
|
|
existing type1.0 acknowledgment and founder-approved1.1 provenance.
|
|
- Reconcile broker CAS0 outcomes via an owner adapter. Already-present metadata
|
|
is not proof this case generated the value or its consumer can use it, and
|
|
must not be retried into generation or automatically promoted to success.
|
|
Map grant creation, write and post-write verification uncertainty explicitly;
|
|
no exception may claim failed-before-change without owner evidence. Grant
|
|
revocation and attended parent-session revocation are distinct receipts.
|
|
- Rollback may remove only changes actually attributed to the exact case, not
|
|
every target rendered from templates. Existing group memberships, policies,
|
|
shared registrations and custody data survive. Secret rollback is owner-native
|
|
and may not extract prior values through Warden.
|
|
|
|
The proposal's stated negative tests should accompany the schema and injected
|
|
runner implementation: changed pins, unsupported argv/adapter, unaccepted or
|
|
unmaterialized case, agent mint refusal, pending-owner, crash after running,
|
|
lost result, CAS reconciliation, explicit safe retry, uncertain undo, malicious
|
|
output suppression and absent revocation. Add current type1.1 broker compatibility
|
|
and materialized-before-mint ordering tests using non-secret fixtures.
|
|
|
|
## Precise final-revision re-review
|
|
|
|
The final proposal reviewed here is the staged SHA256 named above, which
|
|
supersedes the earlier 1035f049... review. The added Local reducer prototype
|
|
appendix explicitly says the reducer is pure preparation, not an accepted wire
|
|
format, and implements no provenance, durable storage, dispatch or live action.
|
|
This boundary is appropriate. Inspected staged case_receipt_state.py: begin
|
|
returns running intent; recover marks interrupted dispatch uncertain; success
|
|
cannot replay; explicit retry-safe failed-before is the only retry path;
|
|
created-object rollback is reversed and interrupted undo becomes uncertain.
|
|
Those functions do not enforce materialization, caller authorization, receipt
|
|
provenance or persistence themselves. The design decision must therefore not
|
|
accept their local outcome enum or dataclass shape as a completed runtime
|
|
protocol. pending-owner remains a run-sheet/native gate even though the reducer
|
|
has no pending-owner dispatch state. The previously stated schema, owner
|
|
adapter and persistence requirements remain implementation prerequisites.
|
|
No new auth/session or live authority is introduced by this appendix.
|
|
|
|
## Concrete informed-decision act
|
|
|
|
Recommended design question: adopt a closed owner-adapter and immutable
|
|
receipt contract for SecurityCase follow-through, keeping current case/type
|
|
acceptance and caller/session authority intact; require structural materialized
|
|
receipt before follow-through and leave missing adapters as pending-owner.
|
|
Alternative: continue manual owner execution with honest source/run-sheet
|
|
receipts, and do not expose Warden run/rollback dispatch. Reject inferred shell
|
|
execution from prose. Acceptance authorizes schema/interface implementation and
|
|
local tests only; it grants no live rollout, mint, credential, case status
|
|
transition, new issuer identity, type risk-class change or consumer configuration.
|
|
|
|
NK-WP-0048-T06 remains wait for this execution seam and actual structural/native
|
|
owner receipts. Its historical approvals remain valid within scope. T07 waits
|
|
for first live proof; this design review does not satisfy it.
|