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:
parent
aef56bcba1
commit
a46024bf3e
9 changed files with 640 additions and 2 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue