Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a140c4-354a-7823-8f0d-8f717397f786
91 lines
6.4 KiB
Markdown
91 lines
6.4 KiB
Markdown
# Executable native metadata/grant/cleanup preparation
|
|
|
|
RPF-WP-0035-T12, 2026-10-16, second source package after the cleanup journal.
|
|
|
|
The fixed `NativeFixtureAdapter` actually dispatches to disposable loopback OpenBao.
|
|
It requires a live owner-spawned OpenBao dev-process handle with the exact loopback
|
|
port and dev/no-store-token arguments, and refuses every non-loopback origin.
|
|
Production is deliberately not implemented. This is a guard against accidental
|
|
misrouting inside the trusted fixture runtime, not a Python security sandbox.
|
|
No estate credentials, grants, approvals or policy packages are read or changed.
|
|
The tests start in-memory dev servers with synthetic root/session credentials,
|
|
synthetic owner admission, grant/state/source digests and a synthetic postconsume
|
|
journal transition. This proves native primitives, not authenticated admission.
|
|
|
|
The owner Compiler now deterministically includes the operation-specific temporary
|
|
policy name and cleanup call commitments in each serialized Plan. Commitments
|
|
include identity/task credential slots, exact native revoke/verify or delete/verify
|
|
method/path pairs, and the narrow no-issue/no-create skip branches. The full
|
|
execution descriptor can be bound into that Plan only by byte equality with an
|
|
independently installed owner descriptor, with operation/actor/CCR/catalogue/six
|
|
operations correspondence. Compiler revalidation preserves both descriptor and
|
|
cleanup content. The descriptor's SHA is preparation provenance; no opaque digest
|
|
or local file becomes approval or verified canonical request correspondence.
|
|
|
|
The adapter needs the exact compiler/Plan/binding and separately installed owner
|
|
fixture inputs. All handles stay in owner memory with hidden representations. It
|
|
requires the same live consumed journal admission and exact grant-issuing state.
|
|
It refuses an existing per-operation grant policy, creates only the two compiler
|
|
metadata endpoints plus revoke-self, verifies HCL, mints one parented service token
|
|
with only this policy, no default/identity policies, nonrenewable TTL <=120 seconds
|
|
and twelve uses, then verifies native token bounds through the owner. Six ordered
|
|
metadata calls use independently recompiled source/method/path/body. A task use is
|
|
reserved for revoke; native token limits also enforce the ceiling. Business calls
|
|
check wall and monotonic deadlines before effect, with a five-second cleanup reserve.
|
|
No retry/remint, caller HCL/JSON/path, mount/AppRole/KV/SecretID or shell API exists.
|
|
The adapter cannot claim complete baseline CAS or normalized readback acceptance.
|
|
|
|
Every business/grant request records durable intent and closed status evidence.
|
|
Native cleanup has its own durable per-request intents beneath the original
|
|
committed obligation; accessor verification cannot erase an uncertain revoke.
|
|
The native adapter compares the exact committed cleanup sequence before request.
|
|
Self-revoke success must be followed by owner lookup-accessor's specific invalid
|
|
accessor response; generic HTTP400/403, timeout and policy deletion do not prove
|
|
revocation. The two explicitly accepted error encodings cover OpenBao's plain and
|
|
wrapped single-invalid-accessor forms. Native error text is never logged or hashed.
|
|
Cleanup bypasses expired business deadlines under the retained explicit obligation,
|
|
never source-driven business repair. Independent cleanup continues after failure;
|
|
retirement never overwrites the original unknown/failed business outcome.
|
|
|
|
Current actual native tests cover policy/body and K8s-role application/readback,
|
|
owner-parented TTL/use policy bounds, native sibling/KV/token/mount/SecretID capability
|
|
denial, both token accessor-invalid proofs, policy absence, deadline-expired cleanup,
|
|
source drift, no preconsume materialization, changed descriptor/cleanup commitments,
|
|
nonloopback refusal, actual write followed by simulated lost response, and actual
|
|
policy retirement with failed task revocation. The lost response is fault injection
|
|
after a successful real native write; it does not pretend to be an actual network
|
|
partition. The failed-revoke fixture independently confirms the still-existing
|
|
native token, then performs explicit synthetic owner recovery. No blind retry occurs.
|
|
|
|
## Minimal remaining decisions and integration
|
|
|
|
1. Define/admit `task-execution-grant` in the owner CCR validator. Bind the exact
|
|
cleanup commitments, temporary policy/token bodies and source revisions into its
|
|
immutable projection, referenced by the existing descriptor grant SHA. The
|
|
descriptor currently has no cleanup field; no engine schema extension is needed
|
|
if this owner grant binding is made explicit. The immutable projection/excluded
|
|
append-only fields are not implemented in the current owner validator. This is
|
|
the concrete owner schema/admission decision, not a need for a new service.
|
|
2. Have the existing authoritative engines supply authenticated initiating principal,
|
|
exact canonical request + served claim/PDP/package and independent signed CAS
|
|
consume verification to the owner mediator before its journal transition.
|
|
The native fixture's local transition supplies none of that evidence.
|
|
3. Install exact origin/cluster/source/grant/baseline/readback inputs under the
|
|
attended owner runtime. The current binder compares independently installed
|
|
descriptor bytes, but does not authenticate source-bundle paths, grant digest or
|
|
compute immutable CCR projection. The six-operation plan still comes from pinned
|
|
actual owner source. Production origin authentication and deadline bounds against
|
|
served approval/PDP remain separate.
|
|
4. Finish expected-state normalization and conflict handling for native K8s/OIDC
|
|
defaults; add per-policy/role approved baseline comparison and exact readback
|
|
verification. The fixture checks known fields, not total production equality.
|
|
OpenBao metadata PUT has no native atomic CAS; the owner must choose exclusive
|
|
admitted target custody or an honest conflict/recovery protocol.
|
|
5. Wire the fixed adapter to that mediator with bounded runtime isolation,
|
|
owner-private uncertain-issuance recovery, external audit outbox and exact
|
|
founder-scoped attended trial. No production caller or protected recovery channel
|
|
exists here. The existing production readiness gate remains refused.
|
|
|
|
No umbrella broker, general executor, new credential catalogue or standing service
|
|
admin entitlement is introduced. Approval CAS prevents approval replay; it cannot
|
|
make uncertain native effects exactly-once. RPF T12 and Secrets WP13 remain open.
|