Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a140c4-354a-7823-8f0d-8f717397f786
158 lines
12 KiB
JSON
158 lines
12 KiB
JSON
{
|
|
"schema": "railiance-platform.signer-native-action-proposal.v1",
|
|
"proposal_id": "RPF35-PDP-SIGNER-NATIVE-20261016-R1",
|
|
"status": "prepared-unapproved",
|
|
"read_ccr": "CCR-2026-0050",
|
|
"proposal_scope": "attended bootstrap of retained lifecycle PDP seed; no taskpilot enablement, rotation requires a new exact-version action revision",
|
|
"actor": "founder attended OIDC via warden openbao-platform-admin-login; reviewed silent Platform custody child",
|
|
"executor_ownership": "railiance-platform; founder executes exact child; agent receives closed metadata only",
|
|
"abort_owner": "founder; Platform preserves unknown custody/evidence, Access keeps signer/consumers fenced",
|
|
"target": {
|
|
"cluster": "primary/railiance01",
|
|
"kube_system_uid": "a553c742-0115-43d4-99a4-a5ca56fe0786",
|
|
"openbao_cluster_id": "fd28df5d-98ec-57dd-42ec-9b3e4f4e53bf",
|
|
"openbao_origin": "http://127.0.0.1:18200",
|
|
"namespace": "flex-auth",
|
|
"deployment": "flex-auth-secrets-engine",
|
|
"signer_sa": "flex-auth-secrets-engine"
|
|
},
|
|
"credential_route": "openbao-platform-admin-login; flex-auth-decision-envelope-signing-key remains draft/nonresolvable; route is not a seed vending service",
|
|
"bootstrap": {
|
|
"action": "CAS0 fresh in-memory Ed25519 seed",
|
|
"kid": "flex-auth-lifecycle-20261016-r1",
|
|
"expected_version": 0,
|
|
"data_path": "platform/data/workloads/flex-auth/envelope-signing",
|
|
"document_fields": [
|
|
"ED25519_PRIVATE_KEY",
|
|
"ED25519_PUBLIC_KEY",
|
|
"kid"
|
|
],
|
|
"metadata_path": "platform/metadata/workloads/flex-auth/envelope-signing",
|
|
"metadata_contract": {
|
|
"cas_required": true,
|
|
"max_versions": 2,
|
|
"delete_version_after": "0s"
|
|
},
|
|
"allowed_native_methods": [
|
|
{
|
|
"method": "POST",
|
|
"path": "platform/metadata/workloads/flex-auth/envelope-signing",
|
|
"purpose": "CAS-required/version-retention configuration after absence/no-drift validation"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "platform/metadata/workloads/flex-auth/envelope-signing",
|
|
"purpose": "exact metadata readback, no private value output"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "platform/data/workloads/flex-auth/envelope-signing",
|
|
"purpose": "single CAS0 seed document write"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "platform/data/workloads/flex-auth/envelope-signing?version=1",
|
|
"purpose": "exact private readback in custody, closed public receipt only"
|
|
}
|
|
],
|
|
"source_primitive_sha256": "sha256:f169ad12f90d729b647085c3bed2c0d8d005db23a2341b6d3d5f1793bcfd110c",
|
|
"historical_source_primitive_sha256": "sha256:8ed281a49c1f1cdb23772efe3593e75c62572a12b8d7a6a4c574f27b38722e75",
|
|
"source_lineage_rule": "source_primitive_sha256 must equal current admitted source_bundle[scripts/flex_auth_signer_custody.py] and exact writer receipt; historical_source_primitive_sha256 is non-authoritative R1 evidence only"
|
|
},
|
|
"fencing": {
|
|
"before_key_generation": [
|
|
"Verify cluster/backend IDs, exact current source/CCR and founder disposition hashes.",
|
|
"Read exact deployment/ReplicaSets/pods by ownerReference and SA; refuse a second workload/pod using signer SA or selecting signer Secret.",
|
|
"Access stops protected consumers and scales retained deployment0 through its reviewed release path; this child does not mutate replicas.",
|
|
"Verify deployment spec replicas0, observed generation caught up, no live or terminating owned ReplicaSet/pods, no matching signer-SA pods and no HPA targeting deployment.",
|
|
"Reject a differing/previously existing KV entry at bootstrap. Hold exclusive owner action receipt lock and recheck fence immediately before CAS."
|
|
],
|
|
"after_cas": "Keep consumers/signer stopped until independent public admission and exact ESO/readback/source/image verification. Access published source Git revision 84c78e072c8f3daf2bc3b90f8efc8fbeb16c3cf0 with OS process lock,64MiB capacity/startup bounds and ordinary CI402 success, immutable OCI reference forgejo.coulomb.social/coulomb/flex-auth@sha256:09a83b273740133518cc7e7915fb211381e06545d347d2dd1974042525ac981f. This supplies reviewed-source/publication evidence, not native mounted-runtime/durable-record acceptance. Access owns Recreate1 activation; actual stopped fence, single writer, PV retention and protected consumer acceptance remain open.",
|
|
"concurrency": "Single attended owner window/exclusive receipt; Access owns workload/Helm release and freeze of competing workload writers; Platform owns existing GitOps Applications and sync/freeze integration; cluster owner reviews runtime/storage/headroom only. Enablement reviews actual ArgoCD installation/controller configuration changes only, which this action excludes. Actual competing creator IDs/revisions and stopped signer fence need separately reviewed authenticated observations. Plan is not a Kubernetes atomic fence or same-UID isolation."
|
|
},
|
|
"protected_adapter": {
|
|
"state": "Native adapter bootstrap/phase-aware read-only recovery source implemented and tested at published Platform a3e8eb64bae110393ba0aeab043de03a92b8421a; owner-boundary source R3/R4 is a successor exact review revision, not a native execution approval. Exact source/CCR, distinct owner/founder dispositions, entity/window/expiry and actual backend/fence remain mandatory. Fixture dev-process gate remains preserved.",
|
|
"reuse": [
|
|
"scripts/state_hub_preflight_lane.py attended silent child/cluster/platform-admin/fencing patterns",
|
|
"scripts/flex_auth_signer_custody.py protected Ed25519 CAS/readback and receipt state machine",
|
|
"scripts/task_execution_native_fixture.py absolute main-thread2s I/O budget",
|
|
"scripts/task_execution_recovery.py strict bounded JSON/no-follow/private custody patterns"
|
|
],
|
|
"requirements": [
|
|
"New fixed native adapter consumes exact approved CCR/source/native-action digest; cannot accept arbitrary URL/path/command/payload/seed.",
|
|
"Read OIDC token only within warden child from attended context; require platform-admin and reject root; never print/store bearer. No credential comes back to agent.",
|
|
"Pin exact kube-system/OpenBao cluster IDs before private calls, refuse ambient address override; enforce2s absolute reads and1MiB cap; no redirect/shell/tracing.",
|
|
"Verify metadata absence/exact admitted values before CAS-required change; any differing existing object refuses. Exact response contracts and duplicate/nonfinite JSON rejection.",
|
|
"Private seed is generated once, never imported or persisted outside OpenBao; no subprocess argv/env seed; readback compares exact version/fields and derived public correspondence.",
|
|
"Receipt intent is durable before native effect; final success requires exact KV/metadata correspondence and receipt fsync. Process loss/error remains unknown without remint/retry."
|
|
]
|
|
},
|
|
"receipts": {
|
|
"directory": "/home/worsch/.local/state/railiance-platform/flex-auth-envelope-signing",
|
|
"mode_directory": "0700",
|
|
"mode_file": "0600",
|
|
"native_execution_location": "founder workstation inside reviewed warden child; no agent-owned shared /tmp custody",
|
|
"basename": "RPF35-PDP-SIGNER-NATIVE-20261016-R1.json",
|
|
"maximum_bytes": 65536,
|
|
"atomic": "exclusive initial receipt, fsync-before-effect, atomic replacement and directory fsync, no-follow/owner/mode/nlink validation",
|
|
"public_fields": [
|
|
"proposal/executed source/CCR/identity/cluster/image/policy/trust digests",
|
|
"actor/time",
|
|
"closed phase/status",
|
|
"exact KV path/version/kid",
|
|
"public key and explicitly encoded fingerprint",
|
|
"fence/metadata/readback checks",
|
|
"rollback or unknown recovery disposition"
|
|
],
|
|
"fingerprint": "sha256: lowercase SHA256 of canonical unpadded base64url public-key ASCII, exactly43bytes; independent Secrets owner agreement before admission",
|
|
"delivery": "Founder/Platform separately authenticate metadata receipt to Secrets owner; public receipt shape/file does not create consumer trust; raw private receipt directory is not a shared agent intake"
|
|
},
|
|
"rollback": {
|
|
"before_cas": "Abort without private write; retain receipt/fence; restore prior Access image/values only via reviewed Access action.",
|
|
"after_cas_unknown": "Retain unknown and fence; independently attended owner reconciles exact metadata/version/public correspondence. Never rerun CAS0 or restore prior seed automatically.",
|
|
"compromise": "Remove online old public key immediately; stop signer, independent new reviewed forward-only action; old private seed never restored."
|
|
},
|
|
"requested_scope": {
|
|
"read_lane": "Exact CCR0050 policy/role/delivery source only after separate founder review. No extra ESO RBAC permitted.",
|
|
"custody_writer": "One attended exact-target CAS0 plus fixed KV metadata setup/readback; no standing writer grant or broker role. This authority is separate from read CCR.",
|
|
"kubernetes": "Metadata-only fence observations by child; Access separately reviews workload/Helm stop/restart/delivery; Platform owns GitOps Application sync/freeze integration; cluster owner reviews runtime/storage/headroom/PV retention; no ArgoCD installation/controller configuration mutation included.",
|
|
"new_infrastructure_spend_eur": 0,
|
|
"new_resources": "Platform creates no storage resources. Access proposes separate exact new flex-auth-secrets-engine-outbox1Gi local-path Helmkeep. Actual provisioning/PV identity, StorageClass Delete/WaitForFirstConsumer to reviewed PV Retain disposition and native bounded-runtime evidence remain open. Source lock/64MiB/startup bounds are published in candidate84, not evidence of native mounted-runtime acceptance.",
|
|
"risk_bound": "Controlled loss of retained PDP availability during explicit attended fence; seed compromise can forge lifecycle decisions until independent public trust withdrawal; founder must approve this concrete high-risk scope."
|
|
},
|
|
"reviews_required": [
|
|
{
|
|
"role": "railiance-platform-owner",
|
|
"disposition": "pending exact source/artifact review; no approval recorded"
|
|
},
|
|
{
|
|
"role": "access-engine-owner",
|
|
"disposition": "pending exact source/artifact review; no approval recorded"
|
|
},
|
|
{
|
|
"role": "secrets-engine-owner",
|
|
"disposition": "pending exact source/artifact review; no approval recorded"
|
|
},
|
|
{
|
|
"role": "cluster-runtime-storage-owner",
|
|
"disposition": "pending exact source/artifact review; no approval recorded"
|
|
},
|
|
{
|
|
"role": "founder",
|
|
"disposition": "pending exact source/artifact review; no approval recorded"
|
|
}
|
|
],
|
|
"authority_granted": false,
|
|
"candidate_delivery_amendments": {
|
|
"supersedes_unadmitted_R3_role": "external-secrets-flex-auth-envelope-signing replaces flex-auth-envelope-signing-eso to fit existing delegated-applier role convention; dedicated SA unchanged",
|
|
"read_ccr_field_projection": "Only ED25519_PRIVATE_KEY is delivered; public sibling fields remain visible to dedicated document-reader identity but never become consumer trust discovery",
|
|
"projection_source": "docs/credential-lane-designs/flex-auth-envelope-signing-native-projection.yaml.proposed",
|
|
"managed_declaration": "Canonical local rapp-flex-auth-secrets-engine declaration committed d52f811ed5ec0be27c9c367e71d476125b3228be, exact13file tree d4fbad71bdc8ef870603526ccd1f53195d0322af; tuple rapp-flex-auth-secrets-engine/flex-auth-secrets-engine/flex-auth-secrets-engine resolves locally as draft. Frozen source2b/current05a package baseline does not adopt candidate84/signing. Remote publication/placement and actual runtime/package join remain open. No missing-declaration claim or migration-debt waiver is applicable to the established local declaration."
|
|
},
|
|
"owner_review_scope": {
|
|
"railiance-platform-owner": "OpenBao custody/read lane; existing GitOps Applications and their sync/freeze/controller ownership; covers explicitly identified workload/Helm competing-writer integration with Access, not Access workload semantic ownership.",
|
|
"access-engine-owner": "Retained workload/release source, Helm values, candidate image, signer delivery/mount and process/outbox fencing/rollback.",
|
|
"cluster-runtime-storage-owner": "railiance-cluster: cluster identity/runtime/storage/headroom, local-path provisioning and actual PV retention; excludes workload and GitOps Application ownership.",
|
|
"enablement_condition": "railiance-enablement additional exact review required only if proposed action changes ArgoCD installation/controller configuration; this fixed custody action authorizes no such change. Changed scope needs a separately reviewed exact revision rather than blanket extra reviewer."
|
|
}
|
|
}
|