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"
}

View file

@ -137,3 +137,97 @@ re-agreement plus separate attended live authorization. MASON-WP-0009-T05
operator/ESO capability and nonmember checks remain independent acceptance.
2026-10-11: Platform independently re-agreed the final amended design (session proposal SHA25623f13d2a5a4204f749f35c5d44ef39d213838cd2fce1c36fb4775254ef1c7f09). Original conditional review and narrow confirmation are retained in railiance-platform/docs/reviews/2026-10-11-keycape-openbao-negative-session-owner-review*. Source acceptance T01 is complete; actual registry/leeway/readiness, founder live go, negative/cleanup and separate capability/no-fallback obligations remain T02 and owner plans.
## KeyCape issuer-source compatibility inspection for lifecycle v2
```task
id: KEY-WP-0039-T03
status: done
priority: medium
```
2026-10-11: Completed KeyCape's own issuer-source inspection for
KEY-WP-0039-T02/attended-lifecycle-v2, exact manifest SHA256
6fc0fe47f99a97c11c6e7538f5ea02054335df7d46055d3f84bed4e194aeaaed.
Read AGENTS.md, governing INTENT.md, current client-credentials claim source,
registration fragments, native caller-authentication commands and frozen v2
issuer transport/probe wiring. Seventeen unchanged runner tests pass locally.
This task completes only issuer-source inspection; the resulting narrow
source acknowledgment is in docs/reviews/2026-10-11-key39-lifecycle-v2-keycape-source-ack.json (retained frozen prior acknowledgment).
T01 stays done and T02 stays open for actual native registration, token input,
refusal and cleanup proof. No Secret, token, credential or native environment was accessed; no owner
checkout was changed during this source inspection. Owner source files were
read for the bounded issuer compatibility check.
Current token.go:306-309 returns HTTP 401 invalid_profile_usage with
feature=client_id for a removed confidential client; wrong-secret
feature=Authorization cannot count as removed-registration evidence. The
proposal and packet comments are narrowly corrected against that current
issuer contract. Prior T01/source re-agreement history is preserved; this source
acknowledgment supplies no NetKingdom runtime-owner review or founder live go.
The private token-producer handoff remains a real execution gap under T02.
Existing keycape login/service-token commands require a new private output
file; login also needs a concrete admitted public PKCE client/callback and
attended browser/MFA. The lifecycle expects an in-memory private stdin object
containing human_token and coding_agent_token, but no reviewed file-to-process
or process-to-process producer, admitted human client/callback, custody-injected
coding-agent source, native placement or producer cleanup receipt has been
provided. No unattended token producer or admitted secret route is invented.
Resolve those exact owner contracts before founder native approval; existing
static registration is not live token custody or producer admission.
2026-10-11 same T03 source-inspection refinement for lifecycle V4: completed
KeyCape issuer-facing inspection before the new formal acknowledgment in
docs/reviews/2026-10-11-key39-lifecycle-v4-keycape-source-ack.json. Exact V4
manifest SHA256 d079f85c47d5c2635e1ee633ea4d1346b1737ce2be9ca273f22a38e620f418d8,
executor b4687c2d07819c43b45d0cddcad0488b62eb49175b2a06a43f7806a0838d3a4d.
NetKingdom's independent V4 source review is approved, receipt SHA256
4f4498203a31bd46dbc3715c0df1cbb9eee63bed5b2c1baf430ff3c4a37c13cb.
The V2/V3 unsuccessful reviews and earlier KeyCape acknowledgment remain
retained as one correction trial; they are not extra scored successes.
V4 retains the unchanged issuer runner and six-client claim design, and fixes
finite/nonboolean windows, true total request deadlines, late-known OpenBao
session private revoke/refusal and guarded bounded final Secret deletion.
The issuer-facing acknowledgement covers only stopping late token exchanges,
claim source/shape and preserving token cleanup failure/unknown outcomes; it
does not replace NetKingdom runtime or Platform backend acceptance. Tests: 41
supplied lifecycle, 17 unchanged runner and 17 independent owner checks pass
locally. No native tokens, credentials, issuer mutations or live cleanup were
performed. T01 stays done; T02 stays open and the genuine private token-producer
handoff remains its next source prerequisite before actual founder native go.
2026-10-11 same T03 source-inspection refinement for lifecycle V5: completed
KeyCape's own current issuer-source/claim/cleanup-contract inspection before
any new formal acknowledgment. Current token.go:306-309 still distinguishes
removed-client invalid_profile_usage feature=client_id from wrong-secret
feature=Authorization. The six-client design, audience source and expiry
positive control remain unchanged, and the original runner's 17 tests pass.
Exact V5 manifest SHA256
d1f997624db46693a7126a6eb6435f6b3a353d5bd67dcc8a539683e4b7147285;
executor 3bcceebc845b17492040c76223d77088257c547a2b890198e7b5c2b04a0cd360.
V5 has 46 passing supplied lifecycle checks. It adds a single exceptional
response-close abort under a fixed20ms cap clipped to nonresettable aggregate
cleanup, and to positive original request time remaining, with expired aggregate
zero calls, fixed private errors and truthful known-session revoke/unknown
outcomes. This inspection covers issuer-facing token lifetime and claim
interfaces only; NetKingdom and Platform independently own their runtime and
backend review decisions. Previous V2/V3 Net source refusals and Platform V4
exceptional-close refusal remain retained; KeyCape's V2/V4 acknowledgments are
historical narrow source inspections, never aggregate native approval.
T01 remains done, T02 open. No native actions or credentials occurred. The real
private token-producer/client/callback/coding-agent custody/cleanup handoff gap
stays the next prerequisite; no unattended admission is inferred.
Exact independent V5 source decisions were then verified: NetKingdom approved
receipt SHA256 32a62bd1ca1bd7311965d016d4d6a6e4d9177f3423c63add436d9d309865eacc
(46 supplied +17 runner +21 independent checks); Platform approved receipt
SHA256 ba872dc53061b1dcca9dea1e8897597c394c1f9365e0fc49ee6f2095f57f11e0
(46 supplied +5 independent +17 previously verified runner checks). Those are
foreign owners' own source decisions, not KeyCape runtime/backend reviews or
founder native authority. Formal KeyCape bounded issuer acknowledgment follows
in docs/reviews/2026-10-11-key39-lifecycle-v5-keycape-source-ack.json.