Publish reviewed KEY39 lifecycle source and preserve failed review history

Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
This commit is contained in:
tegwick 2026-10-11 15:33:14 +02:00
parent aef56bcba1
commit a46024bf3e
9 changed files with 640 additions and 2 deletions

View file

@ -89,7 +89,7 @@ session:
# 2. Add the probe registrations; KeyCape restarts.
# 3. Run scripts/openbao_negative_probe.py with the secrets on stdin.
# 4. Remove the registrations and the transient Secret; KeyCape restarts.
# Verify that client_credentials for each probe returns invalid_client.
# Verify that client_credentials for each probe returns HTTP 401 invalid_profile_usage with feature client_id.
# Each restart drops in-flight logins, so pick a quiet window.
# The transient Secret is the only place the values exist outside process
# memory. KeyCape resolves secretRef from its environment at startup, so a

View file

@ -83,7 +83,7 @@ outside the negative runner and remain required by RPF-WP-0035-T02.
In a finally path remove all six registrations and exactly six env references,
restore the unchanged baseline registry/config, restart and wait Ready, then
verify client_credentials for each removed client is invalid_client using the
verify client_credentials for each removed client is HTTP 401 invalid_profile_usage with feature client_id using the
still-private temporary values. Only then remove the transient Secret and any
private human-token file owned by this session. Confirm all six client IDs and
Secret/env refs are absent, service positive behavior and baseline deployment
@ -115,3 +115,23 @@ credential values. Two semantic tests fail against the original source: it
reported success when the expiry positive control was refused for a subject
mismatch, and it classified not-yet-valid as expired. Native execution has not
been attempted by this preparation.
2026-10-11 KeyCape V4 source acknowledgment: the issuer-facing correction is
acknowledged narrowly in docs/reviews/2026-10-11-key39-lifecycle-v4-keycape-source-ack.json
for exact lifecycle V4 manifest
d079f85c47d5c2635e1ee633ea4d1346b1737ce2be9ca273f22a38e620f418d8.
The removed-client denial contract above is corrected against current
token.go:306-309; wrong-secret feature Authorization is not deletion evidence.
The runner stays unchanged. V4 has finite typed deadlines, Linux main-thread
total HTTP bounds, late-known-session private revoke before refusal, unknown
partial-response outcomes and a bounded guarded cleanup/delete path. These
source checks do not grant native authority or establish runtime acceptance.
The token-producer handoff remains a concrete execution gap: existing
keycape login/service-token commands write private JSON token files, while the
lifecycle expects private stdin human_token/coding_agent_token. An actually
admitted human public-client/callback, coding-agent live registration/custody
route and reviewed private producer/native placement/cleanup must bridge this
mismatch before native go. No unattended producer or credential admission is
provided by this source acknowledgment.

View file

@ -0,0 +1,66 @@
{
"review_id": "KEY-ACK-20261011-KEY39-LIFECYCLE-V2",
"date": "2026-10-11",
"reviewer": "codex acting in KeyCape issuer-owner scope",
"role_scope": "KeyCape INTENT.md Tooling: authentication, issuance, claim shape and caller token lifecycle only",
"work_record": {
"id": "KEY-WP-0039",
"task_id": "KEY-WP-0039-T03",
"status": "done",
"completed_before_acknowledgment": true,
"staged_path": "/tmp/keycape-jwt-lifecycle-owner-review-stage-v2/key-cape/workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"sha256": "bdd77c1ead0fbafd4834282b2f3cff8f7c4162377473516e2fbf5565438194a3"
},
"proposal_id": "KEY-WP-0039-T02/attended-lifecycle-v2",
"exact_manifest_sha256": "6fc0fe47f99a97c11c6e7538f5ea02054335df7d46055d3f84bed4e194aeaaed",
"executor_sha256": "9b19909090431194a4e868ba10eeb911fe4dcc5bf006c2f4351beb115ac39750",
"reviewed_runner_sha256": "bb9610babf44a959342bac700bb5712e97f400b44c4d0659d21df4426e616e19",
"disposition": "acknowledge source compatibility within KeyCape issuer boundary",
"scope_accepted": [
"Six client IDs and per-client env references match the existing non-secret request packet; no production registration or issuer key is changed.",
"Non-audience clients pin secrets-engine-openbao audience; audience probe uses the normal default clientId rule (token.go:589-594).",
"Client-credentials claim source fixes principal_type service and derives subject, tenant, roles, scopes and TTL from the registration; expiry client matches all six bound production claims with one-minute TTL.",
"Original expiry positive control followed by immediate successful self-revoke and expiry-specific refusal remains necessary; source-shape checks are not cryptographic verification.",
"v2 same-origin issuer/token/discovery transport uses no ambient proxy, no redirect following and bounded HTTP responses; unchanged runner receives that transport rather than using its own http_post.",
"Fresh bounded observation/window checks are compatible with attended issuer proof; late cleanup/revoke does not permit new token issuance.",
"Current removed-client response is HTTP401 invalid_profile_usage feature=client_id. Wrong-secret feature=Authorization is insufficient; absence of exact registrations/env refs must also be verified by the runtime owner.",
"Human and coding-agent tokens can fail multiple bound claims; their refusal does not isolate principal_type enforcement."
],
"scope_excluded": [
"NetKingdom live config/Deployment/custody handling, cluster pins/restarts/headroom/concurrent-change rollback or runtime-owner acceptance.",
"Platform role/policy/leeway correctness, OpenBao refusal interpretation and effective capability/CCR acceptance.",
"Secrets Engine execution entitlement/no-fallback/adoption and Mason operator/ESO/nonmember acceptance.",
"Founder live authorization, credential isolation, native acceptance or unattended capability admission."
],
"validation": {
"runner_tests_passed": 17,
"manifest_and_all_entry_hashes_reverified": true,
"six_probe_ids_match_packet": true,
"expiry_production_source_claims_match": true,
"native_actions": false,
"tokens_or_credentials_observed": false
},
"token_producer_gap": {
"status": "unresolved real execution handoff; no admitted producer established",
"owner_work_record": "KEY-WP-0039-T02",
"existing_surface": "keycape login/service-token write new mode0600 JSON files; human login requires concrete public PKCE client, exact callback, browser/MFA; service-token requires existing custody injection",
"required_consumer": "Lifecycle execute reads private stdin JSON human_token and coding_agent_token",
"missing": [
"Approved concrete human client/audience/scope/loopback callback and authenticated token verification/correspondence.",
"Independent confirmation that codex-railiance-platform is registered live and custody supplies it through its admitted existing owner route.",
"Reviewed token producer/file-to-process or process-to-process handoff at actual native placement; output suppression and private channel wiring.",
"Explicit ownership and verified cleanup of any caller-owned temporary token file/material, compatible with the session copy constraints."
],
"native_go_precondition": true,
"unattended_route_claimed": false,
"credential_request_made": false
},
"states_retained": {
"KEY-WP-0039-T01": "done",
"KEY-WP-0039-T02": "open; no native closure"
},
"prior_findings_retained": "Earlier frozen source defects/history and original T01 re-agreement remain; acknowledgment applies only to the exact v2 issuer-facing correction.",
"sources_receipt_sha256": "a272cc4af0979a5e47de36515aa5de256998a7006a038a0a00182b79bcc7227b",
"owner_checkout_written": false,
"native_authority_granted": false
}

View file

@ -0,0 +1,93 @@
{
"owner": "key-cape",
"manifest": "/tmp/keycape-jwt-lifecycle-v2-stage/manifest.json",
"manifest_sha256": "6fc0fe47f99a97c11c6e7538f5ea02054335df7d46055d3f84bed4e194aeaaed",
"sources": [
{
"repo": "key-cape",
"path": "AGENTS.md",
"sha256": "77c8e1ac762e7c101cd09a3aa184993309ed057821bd53fb0d318979a45c9315"
},
{
"repo": "key-cape",
"path": "INTENT.md",
"sha256": "b22cb440691bb399b064ee10ab1a03e1e07838da1051bf6235fbfe2cf820eb10"
},
{
"repo": "key-cape",
"path": "src/internal/server/oidc/token.go",
"sha256": "8422cc9dbd39c88dfe835b43f6262cb120bc0d2e5b08898a151167b7555368d3"
},
{
"repo": "key-cape",
"path": "src/internal/authclient/cli.go",
"sha256": "376a8e0d1d60825a8b3ef21d371e3fc353c0a34e461712a6899e264278edbe7f"
},
{
"repo": "key-cape",
"path": "src/internal/authclient/client.go",
"sha256": "61fb150349c5d3714450a90834c59af9a579a8a649c4149297a402cfcf6e39c5"
},
{
"repo": "key-cape",
"path": "config/service-clients.example.yaml",
"sha256": "b7e17698a0946f387c481b7e27fe9ddea22cdd9db2e34e32a50457e02a34b18e"
},
{
"repo": "key-cape",
"path": "docs/native-authentication.md",
"sha256": "378a5fa8174580bde811b716ec8e987339013b9f8d7725cb398fa3b9f8d95655"
},
{
"repo": "key-cape",
"path": "docs/openbao-service-auth-contract.md",
"sha256": "9b815eff44ebe898b93da5f4a5eeb927fe23d9490397386f3bca3682ce5c81dc"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-clients.yaml",
"sha256": "4f38badef723c08871a28a446707e71be1d3cba8b4c3bcedb2759be65e4e3ed5"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-session-proposal.md",
"sha256": "23f13d2a5a4204f749f35c5d44ef39d213838cd2fce1c36fb4775254ef1c7f09"
},
{
"repo": "key-cape",
"path": "scripts/openbao_negative_probe.py",
"sha256": "bb9610babf44a959342bac700bb5712e97f400b44c4d0659d21df4426e616e19"
},
{
"repo": "key-cape",
"path": "scripts/test_openbao_negative_probe.py",
"sha256": "08d5598357c4db72672b2c4dc21ef09711ac4f9873fb29f8a6949d34afb8d85c"
},
{
"repo": "key-cape",
"path": "workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"sha256": "3141ce81d444cda59f7ee77283eceb1dbf2b54e52569e446e24ebeb99697934e"
},
{
"repo": "key-cape",
"path": "workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"staged_path": "/tmp/keycape-jwt-lifecycle-owner-review-stage-v2/key-cape/workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"sha256": "bdd77c1ead0fbafd4834282b2f3cff8f7c4162377473516e2fbf5565438194a3",
"status": "staged issuer-owned source/record correction"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-clients.yaml",
"staged_path": "/tmp/keycape-jwt-lifecycle-owner-review-stage-v2/key-cape/docs/openbao-negative-probe-clients.yaml",
"sha256": "23c3d49e713de76d75916aede5bdd109d8918169a3078e4e776f0478064dc778",
"status": "staged issuer-owned source/record correction"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-session-proposal.md",
"staged_path": "/tmp/keycape-jwt-lifecycle-owner-review-stage-v2/key-cape/docs/openbao-negative-probe-session-proposal.md",
"sha256": "5d319da27984b8d85cbb1d424e8aac16d3300a461cc1b61d82fa8213d2a2d672",
"status": "staged issuer-owned source/record correction"
}
]
}

View file

@ -0,0 +1,83 @@
{
"review_id": "KEY-ACK-20261011-KEY39-LIFECYCLE-V4",
"date": "2026-10-11",
"reviewer": "codex acting in KeyCape issuer-owner scope",
"role_scope": "KeyCape INTENT.md Tooling: authentication, issuance, claim shape and caller token lifecycle only",
"work_record": {
"id": "KEY-WP-0039",
"task_id": "KEY-WP-0039-T03",
"status": "done",
"completed_before_acknowledgment": true,
"staged_path": "/tmp/keycape-jwt-lifecycle-v4-owner-ack-stage/key-cape/workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"sha256": "ad4b8b061d28b1618df246c9f461ff83ffc53dbf7c05ea7c7102ec717b32ee7c",
"same_task_refinement": true
},
"proposal_id": "KEY-WP-0039-T02/attended-lifecycle-v4",
"exact_manifest_sha256": "d079f85c47d5c2635e1ee633ea4d1346b1737ce2be9ca273f22a38e620f418d8",
"executor_sha256": "b4687c2d07819c43b45d0cddcad0488b62eb49175b2a06a43f7806a0838d3a4d",
"reviewed_runner_sha256": "bb9610babf44a959342bac700bb5712e97f400b44c4d0659d21df4426e616e19",
"disposition": "acknowledge source compatibility within KeyCape issuer boundary",
"scope_accepted": [
"Six client IDs and per-client env references match the existing non-secret request packet; no production registration or issuer key is changed.",
"Non-audience clients pin secrets-engine-openbao audience; audience probe uses the normal default clientId rule (token.go:589-594).",
"Client-credentials claim source fixes principal_type service and derives subject, tenant, roles, scopes and TTL from the registration; expiry client matches all six bound production claims with one-minute TTL.",
"Original expiry positive control followed by immediate successful self-revoke and expiry-specific refusal remains necessary; source-shape checks are not cryptographic verification.",
"v2 same-origin issuer/token/discovery transport uses no ambient proxy, no redirect following and bounded HTTP responses; unchanged runner receives that transport rather than using its own http_post.",
"Fresh bounded observation/window checks are compatible with attended issuer proof; late cleanup/revoke does not permit new token issuance.",
"Current removed-client response is HTTP401 invalid_profile_usage feature=client_id. Wrong-secret feature=Authorization is insufficient; absence of exact registrations/env refs must also be verified by the runtime owner.",
"Human and coding-agent tokens can fail multiple bound claims; their refusal does not isolate principal_type enforcement.",
"V4 finite nonboolean approval/observation inputs and bounded windows prevent issuer exchanges under an indefinite/future-invalid envelope.",
"Real total HTTP request deadlines and postresponse refusal prevent a late issuer exchange from passing; a complete late OpenBao session is privately self-revoked before failure, partial outcomes remain unknown. This acknowledges the issuer-facing lifecycle interface, not Platform enforcement.",
"Final temporary Secret deletion uses the independently runtime-owner-reviewed guarded adapter; KeyCape neither reviews nor grants that native deletion authority."
],
"scope_excluded": [
"NetKingdom live config/Deployment/custody handling, cluster pins/restarts/headroom/concurrent-change rollback or runtime-owner acceptance.",
"Platform role/policy/leeway correctness, OpenBao refusal interpretation and effective capability/CCR acceptance.",
"Secrets Engine execution entitlement/no-fallback/adoption and Mason operator/ESO/nonmember acceptance.",
"Founder live authorization, credential isolation, native acceptance or unattended capability admission."
],
"validation": {
"runner_tests_passed": 17,
"manifest_and_all_entry_hashes_reverified": true,
"six_probe_ids_match_packet": true,
"expiry_production_source_claims_match": true,
"native_actions": false,
"tokens_or_credentials_observed": false,
"supplied_lifecycle_tests_passed": 41,
"independent_net_owner_tests_passed": 17,
"independent_net_owner_unchanged_runner_tests_passed": 17,
"hashes_reverified_after_net_source_review": true
},
"token_producer_gap": {
"status": "unresolved real execution handoff; no admitted producer established",
"owner_work_record": "KEY-WP-0039-T02",
"existing_surface": "keycape login/service-token write new mode0600 JSON files; human login requires concrete public PKCE client, exact callback, browser/MFA; service-token requires existing custody injection",
"required_consumer": "Lifecycle execute reads private stdin JSON human_token and coding_agent_token",
"missing": [
"Approved concrete human client/audience/scope/loopback callback and authenticated token verification/correspondence.",
"Independent confirmation that codex-railiance-platform is registered live and custody supplies it through its admitted existing owner route.",
"Reviewed token producer/file-to-process or process-to-process handoff at actual native placement; output suppression and private channel wiring.",
"Explicit ownership and verified cleanup of any caller-owned temporary token file/material, compatible with the session copy constraints."
],
"native_go_precondition": true,
"unattended_route_claimed": false,
"credential_request_made": false
},
"states_retained": {
"KEY-WP-0039-T01": "done",
"KEY-WP-0039-T02": "open; no native closure"
},
"prior_findings_retained": "V1/V2/V3 frozen sources, unsuccessful V2/V3 Net reviews and KeyCape V2 acknowledgment remain as one correction trial. Source-only compatibility refinement does not infer successful native behavior.",
"sources_receipt_sha256": "e448fbf4c8d65886e3f790b91ac2856ea50ae866428086d2ae422073b449ecfa",
"owner_checkout_written": false,
"native_authority_granted": false,
"same_trial": true,
"previous_keycape_ack_sha256": "776e5a522be3a73a00cf690c68fe084d12d5cd04117666f2dab9031d07537199",
"independent_runtime_source_review": {
"owner": "net-kingdom",
"status": "approved source only",
"path": "/tmp/netkingdom-jwt-lifecycle-owner-review-stage/v4/owner-review.json",
"sha256": "4f4498203a31bd46dbc3715c0df1cbb9eee63bed5b2c1baf430ff3c4a37c13cb",
"not_a_KeyCape_runtime_review": true
}
}

View file

@ -0,0 +1,94 @@
{
"owner": "key-cape",
"manifest": "/tmp/keycape-jwt-lifecycle-v4-stage/manifest.json",
"manifest_sha256": "d079f85c47d5c2635e1ee633ea4d1346b1737ce2be9ca273f22a38e620f418d8",
"net_independent_review_sha256": "4f4498203a31bd46dbc3715c0df1cbb9eee63bed5b2c1baf430ff3c4a37c13cb",
"sources": [
{
"repo": "key-cape",
"path": "AGENTS.md",
"sha256": "77c8e1ac762e7c101cd09a3aa184993309ed057821bd53fb0d318979a45c9315"
},
{
"repo": "key-cape",
"path": "INTENT.md",
"sha256": "b22cb440691bb399b064ee10ab1a03e1e07838da1051bf6235fbfe2cf820eb10"
},
{
"repo": "key-cape",
"path": "src/internal/server/oidc/token.go",
"sha256": "8422cc9dbd39c88dfe835b43f6262cb120bc0d2e5b08898a151167b7555368d3"
},
{
"repo": "key-cape",
"path": "src/internal/authclient/cli.go",
"sha256": "376a8e0d1d60825a8b3ef21d371e3fc353c0a34e461712a6899e264278edbe7f"
},
{
"repo": "key-cape",
"path": "src/internal/authclient/client.go",
"sha256": "61fb150349c5d3714450a90834c59af9a579a8a649c4149297a402cfcf6e39c5"
},
{
"repo": "key-cape",
"path": "config/service-clients.example.yaml",
"sha256": "b7e17698a0946f387c481b7e27fe9ddea22cdd9db2e34e32a50457e02a34b18e"
},
{
"repo": "key-cape",
"path": "docs/native-authentication.md",
"sha256": "378a5fa8174580bde811b716ec8e987339013b9f8d7725cb398fa3b9f8d95655"
},
{
"repo": "key-cape",
"path": "docs/openbao-service-auth-contract.md",
"sha256": "9b815eff44ebe898b93da5f4a5eeb927fe23d9490397386f3bca3682ce5c81dc"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-clients.yaml",
"sha256": "4f38badef723c08871a28a446707e71be1d3cba8b4c3bcedb2759be65e4e3ed5"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-session-proposal.md",
"sha256": "23f13d2a5a4204f749f35c5d44ef39d213838cd2fce1c36fb4775254ef1c7f09"
},
{
"repo": "key-cape",
"path": "scripts/openbao_negative_probe.py",
"sha256": "bb9610babf44a959342bac700bb5712e97f400b44c4d0659d21df4426e616e19"
},
{
"repo": "key-cape",
"path": "scripts/test_openbao_negative_probe.py",
"sha256": "08d5598357c4db72672b2c4dc21ef09711ac4f9873fb29f8a6949d34afb8d85c"
},
{
"repo": "key-cape",
"path": "workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"sha256": "3141ce81d444cda59f7ee77283eceb1dbf2b54e52569e446e24ebeb99697934e"
},
{
"repo": "key-cape",
"path": "workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"staged_path": "/tmp/keycape-jwt-lifecycle-v4-owner-ack-stage/key-cape/workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"sha256": "ad4b8b061d28b1618df246c9f461ff83ffc53dbf7c05ea7c7102ec717b32ee7c",
"status": "staged own source/record correction"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-session-proposal.md",
"staged_path": "/tmp/keycape-jwt-lifecycle-v4-owner-ack-stage/key-cape/docs/openbao-negative-probe-session-proposal.md",
"sha256": "82ab5678426ae78d44464b1293c76bef10d1fedda0b8cea6e0cc2514b89c8684",
"status": "staged own source/record correction"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-clients.yaml",
"staged_path": "/tmp/keycape-jwt-lifecycle-v4-owner-ack-stage/key-cape/docs/openbao-negative-probe-clients.yaml",
"sha256": "23c3d49e713de76d75916aede5bdd109d8918169a3078e4e776f0478064dc778",
"status": "staged own source/record correction"
}
]
}

View file

@ -0,0 +1,93 @@
{
"review_id": "KEY-ACK-20261011-KEY39-LIFECYCLE-V5",
"date": "2026-10-11",
"reviewer": "codex acting in KeyCape issuer-owner scope",
"role_scope": "KeyCape INTENT.md Tooling: authentication, issuance, claim shape and caller token lifecycle only",
"work_record": {
"id": "KEY-WP-0039",
"task_id": "KEY-WP-0039-T03",
"status": "done",
"completed_before_acknowledgment": true,
"staged_path": "/tmp/keycape-jwt-lifecycle-v5-owner-ack-stage/key-cape/workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"sha256": "86a1318a627c611b48fdb4bf8a8d518c1db105c7a895b303856058d89a9218dd",
"same_task_refinement": true
},
"proposal_id": "KEY-WP-0039-T02/attended-lifecycle-v5",
"exact_manifest_sha256": "d1f997624db46693a7126a6eb6435f6b3a353d5bd67dcc8a539683e4b7147285",
"executor_sha256": "3bcceebc845b17492040c76223d77088257c547a2b890198e7b5c2b04a0cd360",
"reviewed_runner_sha256": "bb9610babf44a959342bac700bb5712e97f400b44c4d0659d21df4426e616e19",
"disposition": "acknowledge source compatibility within KeyCape issuer boundary",
"scope_accepted": [
"Six client IDs and per-client env references match the existing non-secret request packet; no production registration or issuer key is changed.",
"Non-audience clients pin secrets-engine-openbao audience; audience probe uses the normal default clientId rule (token.go:589-594).",
"Client-credentials claim source fixes principal_type service and derives subject, tenant, roles, scopes and TTL from the registration; expiry client matches all six bound production claims with one-minute TTL.",
"Original expiry positive control followed by immediate successful self-revoke and expiry-specific refusal remains necessary; source-shape checks are not cryptographic verification.",
"v2 same-origin issuer/token/discovery transport uses no ambient proxy, no redirect following and bounded HTTP responses; unchanged runner receives that transport rather than using its own http_post.",
"Fresh bounded observation/window checks are compatible with attended issuer proof; late cleanup/revoke does not permit new token issuance.",
"Current removed-client response is HTTP401 invalid_profile_usage feature=client_id. Wrong-secret feature=Authorization is insufficient; absence of exact registrations/env refs must also be verified by the runtime owner.",
"Human and coding-agent tokens can fail multiple bound claims; their refusal does not isolate principal_type enforcement.",
"V4 finite nonboolean approval/observation inputs and bounded windows prevent issuer exchanges under an indefinite/future-invalid envelope.",
"Real total HTTP request deadlines and postresponse refusal prevent a late issuer exchange from passing; a complete late OpenBao session is privately self-revoked before failure, partial outcomes remain unknown. This acknowledges the issuer-facing lifecycle interface, not Platform enforcement.",
"Final temporary Secret deletion uses the independently runtime-owner-reviewed guarded adapter; KeyCape neither reviews nor grants that native deletion authority.",
"V5 issuer-facing exceptional response close has a separately admitted at-most20ms abort, clipped to remaining original request time when positive and nonresettable aggregate cleanup, with expired aggregate zero calls and fixed private failure/known-session revoke/unknown outcome. This acknowledges interface compatibility, not NetKingdom native or Platform backend acceptance."
],
"scope_excluded": [
"NetKingdom live config/Deployment/custody handling, cluster pins/restarts/headroom/concurrent-change rollback or runtime-owner acceptance.",
"Platform role/policy/leeway correctness, OpenBao refusal interpretation and effective capability/CCR acceptance.",
"Secrets Engine execution entitlement/no-fallback/adoption and Mason operator/ESO/nonmember acceptance.",
"Founder live authorization, credential isolation, native acceptance or unattended capability admission."
],
"validation": {
"runner_tests_passed": 17,
"manifest_and_all_entry_hashes_reverified": true,
"six_probe_ids_match_packet": true,
"expiry_production_source_claims_match": true,
"native_actions": false,
"tokens_or_credentials_observed": false,
"supplied_lifecycle_tests_passed": 46,
"independent_net_owner_tests_passed": 21,
"independent_net_owner_unchanged_runner_tests_passed": 17,
"hashes_reverified_after_net_source_review": true,
"independent_platform_owner_tests_passed": 5,
"hashes_reverified_after_both_independent_source_reviews": true
},
"token_producer_gap": {
"status": "unresolved real execution handoff; no admitted producer established",
"owner_work_record": "KEY-WP-0039-T02",
"existing_surface": "keycape login/service-token write new mode0600 JSON files; human login requires concrete public PKCE client, exact callback, browser/MFA; service-token requires existing custody injection",
"required_consumer": "Lifecycle execute reads private stdin JSON human_token and coding_agent_token",
"missing": [
"Approved concrete human client/audience/scope/loopback callback and authenticated token verification/correspondence.",
"Independent confirmation that codex-railiance-platform is registered live and custody supplies it through its admitted existing owner route.",
"Reviewed token producer/file-to-process or process-to-process handoff at actual native placement; output suppression and private channel wiring.",
"Explicit ownership and verified cleanup of any caller-owned temporary token file/material, compatible with the session copy constraints."
],
"native_go_precondition": true,
"unattended_route_claimed": false,
"credential_request_made": false
},
"states_retained": {
"KEY-WP-0039-T01": "done",
"KEY-WP-0039-T02": "open; no native closure"
},
"prior_findings_retained": "V1/V2/V3/V4 frozen source, unsuccessful V2/V3 Net reviews, Platform V4 exceptional-close refusal and prior KeyCape V2/V4 narrow acknowledgments remain as one correction trial; no additional scored/native success.",
"sources_receipt_sha256": "6ba36436559cdc0da035faaf3718f5736a68633a731f103a7084feba5943546f",
"owner_checkout_written": false,
"native_authority_granted": false,
"same_trial": true,
"previous_keycape_ack_sha256": "6e90cbe246658325b01b672162da5b336f65bb769b7608ef578473a409278a13",
"independent_runtime_source_review": {
"owner": "net-kingdom",
"status": "approved source only",
"path": "/tmp/netkingdom-jwt-lifecycle-owner-review-stage/v5/owner-review.json",
"sha256": "32a62bd1ca1bd7311965d016d4d6a6e4d9177f3423c63add436d9d309865eacc",
"not_a_KeyCape_runtime_review": true
},
"independent_platform_source_review": {
"owner": "railiance-platform",
"status": "approved source only",
"path": "/tmp/platform-key39-lifecycle-owner-review-stage/revision-v5/railiance-platform/docs/reviews/2026-10-11-key39-lifecycle-v5-platform-review.json",
"sha256": "ba872dc53061b1dcca9dea1e8897597c394c1f9365e0fc49ee6f2095f57f11e0",
"not_a_KeyCape_backend_review": true
}
}

View file

@ -0,0 +1,95 @@
{
"owner": "key-cape",
"manifest": "/tmp/keycape-jwt-lifecycle-v5-stage/manifest.json",
"manifest_sha256": "d1f997624db46693a7126a6eb6435f6b3a353d5bd67dcc8a539683e4b7147285",
"net_independent_review_sha256": "32a62bd1ca1bd7311965d016d4d6a6e4d9177f3423c63add436d9d309865eacc",
"sources": [
{
"repo": "key-cape",
"path": "AGENTS.md",
"sha256": "77c8e1ac762e7c101cd09a3aa184993309ed057821bd53fb0d318979a45c9315"
},
{
"repo": "key-cape",
"path": "INTENT.md",
"sha256": "b22cb440691bb399b064ee10ab1a03e1e07838da1051bf6235fbfe2cf820eb10"
},
{
"repo": "key-cape",
"path": "src/internal/server/oidc/token.go",
"sha256": "8422cc9dbd39c88dfe835b43f6262cb120bc0d2e5b08898a151167b7555368d3"
},
{
"repo": "key-cape",
"path": "src/internal/authclient/cli.go",
"sha256": "376a8e0d1d60825a8b3ef21d371e3fc353c0a34e461712a6899e264278edbe7f"
},
{
"repo": "key-cape",
"path": "src/internal/authclient/client.go",
"sha256": "61fb150349c5d3714450a90834c59af9a579a8a649c4149297a402cfcf6e39c5"
},
{
"repo": "key-cape",
"path": "config/service-clients.example.yaml",
"sha256": "b7e17698a0946f387c481b7e27fe9ddea22cdd9db2e34e32a50457e02a34b18e"
},
{
"repo": "key-cape",
"path": "docs/native-authentication.md",
"sha256": "378a5fa8174580bde811b716ec8e987339013b9f8d7725cb398fa3b9f8d95655"
},
{
"repo": "key-cape",
"path": "docs/openbao-service-auth-contract.md",
"sha256": "9b815eff44ebe898b93da5f4a5eeb927fe23d9490397386f3bca3682ce5c81dc"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-clients.yaml",
"sha256": "4f38badef723c08871a28a446707e71be1d3cba8b4c3bcedb2759be65e4e3ed5"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-session-proposal.md",
"sha256": "23f13d2a5a4204f749f35c5d44ef39d213838cd2fce1c36fb4775254ef1c7f09"
},
{
"repo": "key-cape",
"path": "scripts/openbao_negative_probe.py",
"sha256": "bb9610babf44a959342bac700bb5712e97f400b44c4d0659d21df4426e616e19"
},
{
"repo": "key-cape",
"path": "scripts/test_openbao_negative_probe.py",
"sha256": "08d5598357c4db72672b2c4dc21ef09711ac4f9873fb29f8a6949d34afb8d85c"
},
{
"repo": "key-cape",
"path": "workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"sha256": "3141ce81d444cda59f7ee77283eceb1dbf2b54e52569e446e24ebeb99697934e"
},
{
"repo": "key-cape",
"path": "workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"staged_path": "/tmp/keycape-jwt-lifecycle-v5-owner-ack-stage/key-cape/workplans/KEY-WP-0039-openbao-negative-probe-tokens.md",
"sha256": "86a1318a627c611b48fdb4bf8a8d518c1db105c7a895b303856058d89a9218dd",
"status": "staged own source/record correction"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-session-proposal.md",
"staged_path": "/tmp/keycape-jwt-lifecycle-v5-owner-ack-stage/key-cape/docs/openbao-negative-probe-session-proposal.md",
"sha256": "82ab5678426ae78d44464b1293c76bef10d1fedda0b8cea6e0cc2514b89c8684",
"status": "staged own source/record correction"
},
{
"repo": "key-cape",
"path": "docs/openbao-negative-probe-clients.yaml",
"staged_path": "/tmp/keycape-jwt-lifecycle-v5-owner-ack-stage/key-cape/docs/openbao-negative-probe-clients.yaml",
"sha256": "23c3d49e713de76d75916aede5bdd109d8918169a3078e4e776f0478064dc778",
"status": "staged own source/record correction"
}
],
"platform_independent_review_sha256": "ba872dc53061b1dcca9dea1e8897597c394c1f9365e0fc49ee6f2095f57f11e0"
}