Record reviewed case source evidence (1/13)
Some checks failed
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Reject generated-only commits / generated-commit-guard (push) Has been cancelled

This commit is contained in:
codex 2026-10-17 22:31:19 +02:00
parent d68d131e32
commit d8d63778f6
20 changed files with 4779 additions and 0 deletions

View file

@ -0,0 +1,14 @@
{
"workplan_id": "09c3bddf-6058-5603-8488-cccdb7be4f86",
"id": "ebeaa526-9ece-45ca-a4cb-c8afd4c863c4",
"topic_id": null,
"task_id": "03da4c38-1dac-53b1-8b0b-e697df48e9d3",
"decision_id": null,
"event_type": "note",
"summary": "Rechecked KEY-WP-0039 against current infrastructure source review and primary State Hub: all 14 executable/test/producer-decision pins and 3 Platform pins match; T01/T03 done, T02 wait, parent active; KEY38 T02/T03 remain wait. Existing finalization assessment remains valid. Source-only approval is not live readiness/custody or a negative/expiry/cleanup receipt. No workplan/status edits, credentials, live changes or renewed approval request. Recheck evidence: docs/changes/netkingdom-target-2026-10-17/key39-infra-finalization-r1/finalization-recheck.json.",
"detail": null,
"author": "codex",
"session_id": null,
"created_at": "2026-10-17T17:27:33.253863Z",
"workstream_id": "09c3bddf-6058-5603-8488-cccdb7be4f86"
}

View file

@ -0,0 +1,148 @@
{
"checked_at": "2026-10-17T17:27:31.694709+00:00",
"owner_head": "d803e9282a47b49daf930fb905312fa5104c0ace",
"source_pin_checks": [
{
"path": "net-kingdom/sso-mfa/k8s/keycape/openbao-negative-node-route.md",
"expected_sha256": "cad3e3dc481d45295cc014e48285e81614911dfb4a10523883f3044f6085f363",
"actual_sha256": "cad3e3dc481d45295cc014e48285e81614911dfb4a10523883f3044f6085f363",
"match": true
},
{
"path": "net-kingdom/sso-mfa/k8s/keycape/openbao-negative-node-wrapper.py",
"expected_sha256": "76ac013d1a676a0dfa58aea1ce87b0c3e72483ccd21f586a22c5475e9132f6c1",
"actual_sha256": "76ac013d1a676a0dfa58aea1ce87b0c3e72483ccd21f586a22c5475e9132f6c1",
"match": true
},
{
"path": "net-kingdom/sso-mfa/k8s/keycape/openbao-negative-session.py",
"expected_sha256": "24b7b803e4eb7e6e7c0700a069dad0ec315ee7eb5538a88b9e56147f8fab5cdd",
"actual_sha256": "24b7b803e4eb7e6e7c0700a069dad0ec315ee7eb5538a88b9e56147f8fab5cdd",
"match": true
},
{
"path": "net-kingdom/sso-mfa/k8s/keycape/test_openbao_negative_session.py",
"expected_sha256": "01e23f2b4fc77824a161a57acb3a52d19aad846b3b6c0fd3abd81afa1dc2985c",
"actual_sha256": "01e23f2b4fc77824a161a57acb3a52d19aad846b3b6c0fd3abd81afa1dc2985c",
"match": true
},
{
"path": "net-kingdom/sso-mfa/k8s/keycape/test_openbao_node_route.py",
"expected_sha256": "1c57053be6e8472174e4034fdfbf34b3e1729f5e239b3a9af89d9e59a08d6cb6",
"actual_sha256": "1c57053be6e8472174e4034fdfbf34b3e1729f5e239b3a9af89d9e59a08d6cb6",
"match": true
},
{
"path": "net-kingdom/sso-mfa/k8s/keycape/test_openbao_private_input.py",
"expected_sha256": "84277edb5bd7858885173dea802b6bdc4f0f0c7785d6e200ee9a98d8553891a1",
"actual_sha256": "84277edb5bd7858885173dea802b6bdc4f0f0c7785d6e200ee9a98d8553891a1",
"match": true
},
{
"path": "net-kingdom/sso-mfa/k8s/keycape/test_openbao_private_ready.py",
"expected_sha256": "8a7a033b1c509ba21397d1d74580c44f24592045b2b9de50fe87638607224277",
"actual_sha256": "8a7a033b1c509ba21397d1d74580c44f24592045b2b9de50fe87638607224277",
"match": true
},
{
"path": "key-cape/docs/openbao-negative-token-producer-decision.json",
"expected_sha256": "7b3e4a53ac4af33c780f16c3f1aa9cde0154040ad2747a8d361dd79bbb7f435c",
"actual_sha256": "7b3e4a53ac4af33c780f16c3f1aa9cde0154040ad2747a8d361dd79bbb7f435c",
"match": true
},
{
"path": "key-cape/docs/openbao-negative-token-producer-decision.md",
"expected_sha256": "38e4c9660ca57a1fb6e5ff04f214af61dd1a58abf564a5ed22216d909e27fc73",
"actual_sha256": "38e4c9660ca57a1fb6e5ff04f214af61dd1a58abf564a5ed22216d909e27fc73",
"match": true
},
{
"path": "key-cape/scripts/openbao_negative_private_handoff.py",
"expected_sha256": "faf63a3e9504dcbb46847a114275f83d508521e095410a47f92f02b86ba82b1b",
"actual_sha256": "faf63a3e9504dcbb46847a114275f83d508521e095410a47f92f02b86ba82b1b",
"match": true
},
{
"path": "key-cape/scripts/openbao_negative_private_launcher.py",
"expected_sha256": "46e57504b3185cc13f1656901a0ca02cc3887527cb09566e270f57b76099ab9c",
"actual_sha256": "46e57504b3185cc13f1656901a0ca02cc3887527cb09566e270f57b76099ab9c",
"match": true
},
{
"path": "key-cape/scripts/test_openbao_negative_private_handoff.py",
"expected_sha256": "e4eb600718e7d93b0e801ac3ab1427af9895a6e5d877c1134369e049e0849797",
"actual_sha256": "e4eb600718e7d93b0e801ac3ab1427af9895a6e5d877c1134369e049e0849797",
"match": true
},
{
"path": "key-cape/scripts/test_openbao_negative_private_launcher.py",
"expected_sha256": "243426a85075b3447adeb2ca320a13711409744f71837a06699de6ad5b04ee9d",
"actual_sha256": "243426a85075b3447adeb2ca320a13711409744f71837a06699de6ad5b04ee9d",
"match": true
},
{
"path": "key-cape/scripts/test_openbao_negative_private_preparation.py",
"expected_sha256": "8e4dd327c4a339a0151ecba57db5987965b5d536ca18123fb7c74a047a241548",
"actual_sha256": "8e4dd327c4a339a0151ecba57db5987965b5d536ca18123fb7c74a047a241548",
"match": true
},
{
"path": "railiance-platform/helm/openbao-ui-overlay-k8s.yaml",
"expected_sha256": "7b345359906bf1ecc4cb8e61de7a9f1a121068a66bd919e606190a9217a82daf",
"actual_sha256": "7b345359906bf1ecc4cb8e61de7a9f1a121068a66bd919e606190a9217a82daf",
"match": true
},
{
"path": "railiance-platform/helm/openbao-ui-overlay/nginx.conf",
"expected_sha256": "464f7f5cecc69ea343c1e2acc5932e832b2a9c0e6a5099113634a12abc80ccb3",
"actual_sha256": "464f7f5cecc69ea343c1e2acc5932e832b2a9c0e6a5099113634a12abc80ccb3",
"match": true
},
{
"path": "railiance-platform/helm/openbao-values.yaml",
"expected_sha256": "a10239851277889dd69dacb8636109dddd095551d85b46ca4ed2c141944e8d1e",
"actual_sha256": "a10239851277889dd69dacb8636109dddd095551d85b46ca4ed2c141944e8d1e",
"match": true
}
],
"primary_task_readback": [
{
"id": "4d06b059-3768-53bb-83a4-a9a71c0850b8",
"record_id": "KEY-WP-0039-T01",
"status": "done",
"blocking_reason": null,
"needs_human": false
},
{
"id": "03da4c38-1dac-53b1-8b0b-e697df48e9d3",
"record_id": "KEY-WP-0039-T02",
"status": "wait",
"blocking_reason": "Ordered identity gate: Forgejo first SecurityCase registration/claims proof, then NetKingdom registry session and attended human/coding-agent custody; original secrets-engine-openbao registration go remains resolved; probe/coding-client custody and attended readiness are not established.",
"needs_human": false
},
{
"id": "54d37ad8-2352-51c2-bb2e-af6070dbbd73",
"record_id": "KEY-WP-0039-T03",
"status": "done",
"blocking_reason": null,
"needs_human": false
},
{
"id": "ddcfb482-8f33-5c81-9ce8-84be8fa5dc30",
"record_id": "KEY-WP-0038-T02",
"status": "wait",
"blocking_reason": "Registration runs as the first KnownSecurityCase of type oidc-browser-relying-party (NK-WP-0048-T06), not as a hand-built rollout.",
"needs_human": false
},
{
"id": "40ddaa29-7245-508c-ad48-ddc063e25115",
"record_id": "KEY-WP-0038-T03",
"status": "wait",
"blocking_reason": "Claims are verified against the registered client.",
"needs_human": false
}
],
"parent_status": "active",
"disposition": "Source review finalized; native acceptance outstanding. Preserve active parent and T02 wait. No new approval request, credential access or native action.",
"assessment": "ASSESSMENT.md"
}

View file

@ -0,0 +1,92 @@
"""Prepared source integration only. Root runs --execute; no commit/projection here."""
from pathlib import Path
import argparse
import hashlib
import json
import re
import subprocess
import sys
PACKET = Path(__file__).resolve().parent
ROOT = Path('/home/worsch/net-kingdom')
WARDEN = Path('/home/worsch/ops-warden')
def sha(data):
return 'sha256:' + hashlib.sha256(data).hexdigest()
def git(root, *args):
return subprocess.check_output(['git', '-C', str(root), *args], text=True).strip()
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--execute', action='store_true')
args = parser.parse_args()
manifest = json.loads((PACKET / 'publication-inputs.json').read_text())
assert git(ROOT, 'rev-parse', '--abbrev-ref', 'HEAD') == 'main'
assert git(ROOT, 'rev-parse', 'HEAD') == manifest['base_revision']
assert git(WARDEN, 'rev-parse', 'HEAD') == manifest['warden_revision']
workplan = ROOT / manifest['workplan']
original = workplan.read_bytes()
candidate = (PACKET / 'workplan.candidate.md').read_bytes()
assert sha(original) == manifest['workplan_preimage_sha256']
assert sha(candidate) == manifest['workplan_candidate_sha256']
assert sha((PACKET / 'task-T35.md').read_bytes()) == manifest['task_addition_sha256']
assert candidate == original + (PACKET / 'task-T35.md').read_bytes()
assert len(re.findall(rb'^```task$', original, re.M)) == 34
assert len(re.findall(rb'^```task$', candidate, re.M)) == 35
assert b'id: NK-WP-0048-T35' not in original
assert sha((PACKET / 'candidate.patch').read_bytes()) == manifest['patch_sha256']
for row in manifest['files']:
path = ROOT / row['path']
if row['preimage_sha256'] is None:
assert not path.exists() and not path.is_symlink(), str(path)
else:
assert sha(path.read_bytes()) == row['preimage_sha256'], str(path)
protected_before = {name: sha((ROOT / name).read_bytes()) for name in manifest['protected_files']}
assert protected_before == manifest['protected_files'], 'Operator brief/index changed: refresh the prepared inputs first.'
# Preserve the original index exactly; this script never stages anything.
index = git(ROOT, 'ls-files', '--stage', '-z')
assert sha(Path('/home/worsch/repo-manager/src/repo_manager/identifiers.py').read_bytes()) == manifest['repo_manager_identifiers_sha256']
sys.path.insert(0, '/home/worsch/repo-manager/src')
from repo_manager.identifiers import ensure_missing_work_record_identifiers
before = ensure_missing_work_record_identifiers(ROOT, execute=False)
assert before['ok'] and before['assignments'] == [] and before['files_changed'] == []
subprocess.run(['git', 'apply', '--check', str(PACKET / 'candidate.patch')], cwd=ROOT, check=True)
if not args.execute:
print(json.dumps({'prepared_only': True, 'preimages_verified': True, 'files': 4,
'next': 'Run this script with --execute, then run_validation.py --execute.'}))
return
subprocess.run(['git', 'apply', str(PACKET / 'candidate.patch')], cwd=ROOT, check=True)
for row in manifest['files']:
assert sha((ROOT / row['path']).read_bytes()) == row['sha256'], row['path']
workplan.write_bytes(candidate)
preview = ensure_missing_work_record_identifiers(ROOT, execute=False)
(PACKET / 'identifier-preview.json').write_text(json.dumps(preview, indent=2) + '\n')
assert preview['ok'] and preview['files_changed'] == [manifest['workplan']]
assert len(preview['assignments']) == 1
assignment = preview['assignments'][0]
assert (assignment['kind'], assignment['record_id'], assignment['path']) == (
'task', 'NK-WP-0048-T35', manifest['workplan'])
# UUID comes only from the ordinary allocator, never from this packet.
actual = ensure_missing_work_record_identifiers(ROOT, execute=True)
assert actual['assignments'] == preview['assignments']
assert actual['files_changed'] == [manifest['workplan']]
(PACKET / 'identifier-assignment.json').write_text(json.dumps(actual, indent=2) + '\n')
allocated = workplan.read_bytes()
assert allocated.startswith(original), 'Existing workplan bytes must be preserved.'
assert len(re.findall(rb'^```task$', allocated, re.M)) == 35
assert allocated.count(b'id: NK-WP-0048-T35\n') == 1
assert not ensure_missing_work_record_identifiers(ROOT, execute=False)['assignments']
assert git(ROOT, 'ls-files', '--stage', '-z') == index, 'Index must remain unchanged.'
assert {name: sha((ROOT / name).read_bytes()) for name in manifest['protected_files']} == protected_before
(PACKET / 'workplan.allocated.md').write_bytes(allocated)
publication = {'owner': 'net-kingdom', 'base_revision': manifest['base_revision'],
'message': manifest['message'], 'files': [
{'path': row['path'], 'sha256': sha((ROOT / row['path']).read_bytes()).removeprefix('sha256:')}
for row in manifest['files'] + [{'path': manifest['workplan']}]]}
(PACKET / 'publication-inputs.allocated.json').write_text(json.dumps(publication, indent=2) + '\n')
print(json.dumps({'source_applied': True, 'task_count': 35, 'allocated_only': assignment['record_id'],
'files': len(publication['files']), 'commit_and_projection': 'Root handles separately.'}))
if __name__ == '__main__':
main()

View file

@ -0,0 +1,243 @@
diff --git a/sso-mfa/k8s/keycape/test_admit_1_3_type.py b/sso-mfa/k8s/keycape/test_admit_1_3_type.py
--- a/sso-mfa/k8s/keycape/test_admit_1_3_type.py
+++ b/sso-mfa/k8s/keycape/test_admit_1_3_type.py
@@ -8,7 +8,9 @@
acknowledged 1.3 is still refused until ops-warden adds a 1.3 pin. That is an
ops-warden owner change, and it is not made here. The tests show that 1.3's
parameters carry 1.2's pinned fingerprint, and that with only that one pin added in
-memory the committed map admits exactly the composed descriptors and nothing else.
+memory the five resolvable steps admit. The two Apps attended steps remain refused
+because their establishing login is unresolved in the synthetic catalog. Four real
+draft lane shapes are hypothetically active in that fixture; no catalog is promoted.
Trust is fixture-only, nothing is dispatched, and none of this is owner admission
or an acknowledgment.
"""
@@ -37,6 +39,8 @@
TYPE_DIR = REPO / 'security-case-type-revisions/1.3/oidc-browser-relying-party'
TYPE_BYTES = (TYPE_DIR / 'type.yaml').read_bytes()
ARTIFACT = json.loads((ROOT / 'descriptor-composition-1.3.candidate.json').read_text())
+CATALOG = (ROOT / 'kernel-catalog.fixture.yaml').read_bytes()
+UNRESOLVED_APPS = {'deliver-consumer-secret', 'hand-over'}
EVIDENCE = {'fixture-acceptance', 'fixture-materialization', 'fixture-descriptor', 'fixture-session'}
@@ -74,12 +78,13 @@
ARTIFACT['params']['consumer_owner_repo'],
version='1.3'))
- def admit(self, desc, type_source, *, actor=None, lane=None, agent_id=None):
+ def admit(self, desc, type_source, *, actor=None, lane=None, agent_id=None, catalog=CATALOG):
desc_bytes = c.encode(desc)
adapter = Adapter(desc.adapter, desc.adapter_source, unused, unused)
executor = Executor(Journal(Path(self.temp.name) / desc.step),
{adapter.reference: adapter},
- lambda purpose, source, evidence: evidence in EVIDENCE,
+ lambda purpose, source, evidence: (evidence in EVIDENCE and
+ (purpose != 'catalog-routing-acceptance' or source == digest(CATALOG))),
browser_inputs=inputs.BrowserInputs(REPO))
with mock.patch.dict(os.environ):
if agent_id is None:
@@ -87,7 +92,7 @@
else:
os.environ['WARDEN_AGENT_ID'] = agent_id
return executor.admit(self.case_source, type_source, desc_bytes,
- b'fixture-only-catalog', principal='founder', actor=actor or desc.actor,
+ catalog, principal='founder', actor=actor or desc.actor,
lane=lane or desc.lane,
acceptance_evidence='fixture-acceptance',
materialization_evidence='fixture-materialization',
@@ -112,18 +117,33 @@
self.assertEqual(parameter_fingerprint(TYPE_BYTES), inputs.PARAMETER_PINS['1.2'])
acknowledged = with_status('acknowledged')
for step, desc in self.descriptors.items():
+ if step in UNRESOLVED_APPS:
+ continue # The attended session gate correctly precedes parameter validation.
with self.subTest(step=step), self.assertRaisesRegex(
Refused, 'failed exact-version validation'):
self.admit(desc, acknowledged)
- def test_committed_map_admits_every_descriptor_once_acknowledged_and_pinned(self):
+ def test_committed_map_conditionally_admits_five_resolvable_steps(self):
acknowledged = with_status('acknowledged')
for step, desc in self.descriptors.items():
+ if step in UNRESOLVED_APPS:
+ continue
with self.subTest(step=step), pinned_13():
admitted, invocation, _ = self.admit(desc, acknowledged)
self.assertEqual(admitted, desc)
self.assertEqual((invocation.step, invocation.actor, invocation.target),
(desc.step, desc.actor, 'forgejo'))
+
+ def test_unresolved_apps_sessions_refused_even_once_acknowledged_and_pinned(self):
+ for step in sorted(UNRESOLVED_APPS):
+ with self.subTest(step=step), pinned_13(), self.assertRaisesRegex(
+ Refused, 'does not resolve to an active, reviewed login lane'):
+ self.admit(self.descriptors[step], with_status('acknowledged'))
+
+ def test_catalog_evidence_is_bound_to_exact_fixture_bytes(self):
+ mint = self.descriptors['mint-secret']
+ with pinned_13(), self.assertRaisesRegex(Refused, 'independent owner evidence not verified'):
+ self.admit(mint, with_status('acknowledged'), catalog=CATALOG + b'\n# changed source\n')
def test_descriptor_outside_the_map_is_refused(self):
acknowledged = with_status('acknowledged')
diff --git a/sso-mfa/k8s/keycape/test_keycape_registration_adapter.py b/sso-mfa/k8s/keycape/test_keycape_registration_adapter.py
--- a/sso-mfa/k8s/keycape/test_keycape_registration_adapter.py
+++ b/sso-mfa/k8s/keycape/test_keycape_registration_adapter.py
@@ -259,8 +259,13 @@
case_source = yaml.safe_dump(case).encode()
typ = yaml.safe_load((root / 'security-case-types/oidc-browser-relying-party/type.yaml').read_bytes())
typ['spec']['execution_descriptors'] = {'register-client': digest(self.desc_bytes)}
+ # Fixture-only successor lane for the adapter's current descriptor.
+ # Canonical 1.1 still names the earlier login lane and is not edited.
+ typ['spec']['follow_through'] = [
+ dict(step, lane=self.admitted.lane) if step['id'] == 'register-client' else step
+ for step in typ['spec']['follow_through']]
type_source = yaml.safe_dump(typ).encode()
- catalog = b'fixture-only-catalog'
+ catalog = (ROOT / 'kernel-catalog.fixture.yaml').read_bytes()
sheet = json.dumps(['register-client', 'net-kingdom', 'forgejo', 'human',
'founder', 'keycape-attended-case-change', 'fixture-acceptance', 'fixture-materialization',
'fixture-descriptor', 'fixture-session'], separators=(',', ':')).encode()
@@ -270,6 +275,8 @@
adapter = a.build(**dict(self.kw, admitted=invocation, case_source=case_source,
case_acceptance='fixture-acceptance'))
def fixture_verifier(purpose, source, evidence):
+ if purpose == 'catalog-routing-acceptance':
+ return source == digest(catalog) and evidence == 'fixture-descriptor'
if purpose.startswith('session-revocation:'):
_, lane, operation, attempt = purpose.split(':')
return source == digest(case_source) and lane == invocation.lane and evidence == (
diff --git a/sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml b/sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml
new file mode 100644
--- /dev/null
+++ b/sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml
@@ -0,0 +1,128 @@
+# TEST ONLY: synthetic subset shaped after ops-warden 5abde817 catalog.
+# Four draft entries are hypothetically active; Apps session_lane remains unresolved.
+# Not an authenticated owner catalog, promotion, login choice or native authority.
+entries:
+- id: key-cape-oidc-login
+ risk: standard
+ owner_repo: key-cape
+ warden_executes: false
+ reviewed: '2026-06-27'
+ status: active
+ delegation:
+ mode: interim
+ intended_owner: key-cape
+ reviewed: '2026-09-08'
+ blocked_on: fixture-only; no native authority
+ lane: login
+ title: Synthetic key-cape-oidc-login
+ need_keywords:
+ - key-cape-oidc-login
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: keycape-client-secret-generate
+ risk: high
+ owner_repo: railiance-platform
+ warden_executes: false
+ reviewed: '2026-10-10'
+ status: active
+ delegation:
+ mode: native
+ intended_owner: railiance-platform
+ reviewed: '2026-10-10'
+ lane: secret
+ title: Synthetic keycape-client-secret-generate
+ need_keywords:
+ - keycape-client-secret-generate
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: keycape-attended-case-change
+ lane: attended-change
+ session_lane: key-cape-oidc-login
+ risk: high
+ owner_repo: key-cape/net-kingdom
+ warden_executes: false
+ reviewed: '2026-10-17'
+ status: active
+ delegation:
+ mode: interim
+ intended_owner: key-cape
+ reviewed: '2026-10-17'
+ blocked_on: fixture-only; no native authority
+ title: Synthetic keycape-attended-case-change
+ need_keywords:
+ - keycape-attended-case-change
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: platform-secret-delivery
+ risk: high
+ owner_repo: railiance-platform
+ warden_executes: false
+ reviewed: '2026-10-17'
+ status: active
+ delegation:
+ mode: native
+ intended_owner: railiance-platform
+ reviewed: '2026-10-17'
+ title: Synthetic platform-secret-delivery
+ need_keywords:
+ - platform-secret-delivery
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: consumer-owner-deployment
+ lane: attended-change
+ session_lane: pending-owner-confirmation
+ risk: high
+ owner_repo: railiance-apps
+ warden_executes: false
+ reviewed: '2026-10-17'
+ status: active
+ delegation:
+ mode: native
+ intended_owner: railiance-apps
+ reviewed: '2026-10-17'
+ title: Synthetic consumer-owner-deployment
+ need_keywords:
+ - consumer-owner-deployment
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: apps-consumer-handover
+ lane: attended-change
+ session_lane: pending-owner-confirmation
+ risk: high
+ owner_repo: railiance-apps
+ warden_executes: false
+ reviewed: '2026-10-17'
+ status: active
+ delegation:
+ mode: native
+ intended_owner: railiance-apps
+ reviewed: '2026-10-17'
+ title: Synthetic apps-consumer-handover
+ need_keywords:
+ - apps-consumer-handover
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.

View file

@ -0,0 +1,36 @@
{
"schema": "custodian.nk48-catalog-fixture-publication-preparation.v1",
"status": "prepared only; canonical apply and validation runners not executed, including dry-run",
"owner_base": "342a6f25af5cdc602841948f42759ea52ef1c8f5",
"warden_base": "ae7bc73b4f4bac22454144959b870d161498e0af",
"root_source_review": "Root explicitly accepted fixture patch SHA256 df69fb2ec9f1e1cf0dd94194e3c046c995ed8a7deabf65a8e9bec34662adb501 for source integration; no owner/native assent inferred.",
"task_refinement": "Append completed T35 for distinct current authenticated-catalog/mode-aware fixture compatibility; preserve exact original workplan bytes, all34 existing task blocks/frontmatter/status/UUID. Normal allocator preview must yield exactlyT35 before execution; no manual UUID.",
"root_commands": [
"python3 /home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/apply_prepare.py --execute",
"python3 /home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/run_validation.py --execute",
"Root normal scoped commit using publication-inputs.allocated.json; normal owner projection afterwards."
],
"mutation_scope": [
"Exactly the three reviewed fixture files plus the appended T35 workplan task.",
"No git stage,commit,push,projection,brief refresh or index generation in prepared scripts.",
"Preexisting operator .custodian-brief.md/WORK-RECORDS.md remain byte-identical; unrelated dirty/untracked paths are never read or written by the apply script."
],
"validation_scope": "Canonical NK test and source files against Warden mainae7bc73;105 explicit public source hashes checked before and after. Two scoped test modules only; expected31 tests/53 subtests; no skip/deselection accepted. EmptyHOME and allowlisted environment; fresh redirected Python caches; pytest cache/conftest discovery disabled. Network denied. Native processes denied except exact pinned offline metadata validator with guarded empty-environment child. Reads from /home or /root denied except exact prehashed public source files; canonical writes denied.",
"unverified_limits": [
"Prepared runner has only been AST-parsed; root must execute and inspect logs.",
"Python audit controls are bounded to reviewed test execution and do not claim operating-system credential isolation or an autopilot grant.",
"Warden code is source-only; 1.3 parameter pin, draft promotion, pending Apps login, nativeT03 and downstream acceptance remain gated.",
"Existing adverse review history remains unchanged."
],
"files": {
"apply_prepare.py": "sha256:b294e6339e8c9af9ba911667646dd0ab52e75cf798de93238d84d1057c8a9e70",
"run_validation.py": "sha256:16236aa55a774f8ea6d66da4ee17f7737c6d1b013d844ca9b9759e02b615af51",
"validation-guard.py": "sha256:13611f4de25dc7d01348905c4b365a0ffbb95fd93a61c75c8faf38d705c54f50",
"workplan.preimage.md": "sha256:f92962c5aa21aade0fc2f6b4f8d9a95932fe85b107413cdd2824b6ebe72c36d9",
"publication-inputs.json": "sha256:d9bf5555013aa9e399037672c80a72af23c6815db03088bee3db4c8583197146",
"candidate.patch": "sha256:df69fb2ec9f1e1cf0dd94194e3c046c995ed8a7deabf65a8e9bec34662adb501",
"task-T35.md": "sha256:7d14d261ffbab2a930c4a3ff962cec786060cad6177280773cf1c0b0f006127f",
"validation-child.py": "sha256:6bd4e3cda22e65f90bbb4006b403270405947293be2ae8bf8fdade0abed61f45",
"workplan.candidate.md": "sha256:3bce122c5b83d9044b142fc2cabc48de5558ab0d65dc0223a8ed0325f219e981"
}
}

View file

@ -0,0 +1,176 @@
{
"schema": "custodian.nk48-catalog-fixture-publication-inputs.v1",
"prepared_only": true,
"owner": "net-kingdom",
"base_revision": "342a6f25af5cdc602841948f42759ea52ef1c8f5",
"warden_revision": "ae7bc73b4f4bac22454144959b870d161498e0af",
"message": "test: align security case fixtures with authenticated catalog admission",
"workplan": "workplans/NK-WP-0048-security-case-types.md",
"workplan_preimage_sha256": "sha256:f92962c5aa21aade0fc2f6b4f8d9a95932fe85b107413cdd2824b6ebe72c36d9",
"workplan_candidate_sha256": "sha256:3bce122c5b83d9044b142fc2cabc48de5558ab0d65dc0223a8ed0325f219e981",
"task_addition_sha256": "sha256:7d14d261ffbab2a930c4a3ff962cec786060cad6177280773cf1c0b0f006127f",
"patch_sha256": "sha256:df69fb2ec9f1e1cf0dd94194e3c046c995ed8a7deabf65a8e9bec34662adb501",
"files": [
{
"path": "sso-mfa/k8s/keycape/test_admit_1_3_type.py",
"preimage_sha256": "sha256:c512ba00513d066fd1ca8af08fd6bf106fbd7a132981b1dcc5af80a745ab03f0",
"sha256": "sha256:2186eab00b000a534ab1452f14fa7b1a7ed352d5b27c400687c1c8ec7c4c3019"
},
{
"path": "sso-mfa/k8s/keycape/test_keycape_registration_adapter.py",
"preimage_sha256": "sha256:4d0126416522e54eec1ae4c83b5488e09ff11ffb97ec1ee6d234548780c60f63",
"sha256": "sha256:86268e082763c388528e5175184fd32362167c3441716436e4b1cab150c3e79a"
},
{
"path": "sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml",
"preimage_sha256": null,
"sha256": "sha256:7885b8c380c03ccb0198e540532ce80c791c8e86698521d7173642e0c7a56e53"
}
],
"allocation": {
"method": "repo_manager.identifiers.ensure_missing_work_record_identifiers",
"manual_uuid": false,
"preexisting_assignments": [],
"expected_new_record_ids": [
"NK-WP-0048-T35"
],
"expected_files_changed": [
"workplans/NK-WP-0048-security-case-types.md"
],
"expected_task_count": 35,
"concrete_postallocation_manifest": "publication-inputs.allocated.json"
},
"protected_files": {
".custodian-brief.md": "sha256:3eb7f91f2443090c9b859a716d83711310364897b6144dcf10d3254342fec3d1",
"WORK-RECORDS.md": "sha256:a1fec217a6e380f528778d781dbea1fc5a836fdefa1dd4dd0308100fbe08112a"
},
"validation": {
"tests": [
"sso-mfa/k8s/keycape/test_admit_1_3_type.py",
"sso-mfa/k8s/keycape/test_keycape_registration_adapter.py"
],
"expected_result": "31 passed,53 subtests passed; no skipped or deselected tests",
"python": "/tmp/warden-kernel-review-r1/final/.venv/bin/python",
"source_hashes": {
"net-kingdom": {
"sso-mfa/k8s/keycape/test_vergabe_client_rollout.py": "sha256:f9b7defc312b0fea24ded92ef479dcc8aef063f7a66a8245760918bcf44c4af1",
"sso-mfa/k8s/keycape/test_compose_1_2_descriptors.py": "sha256:9a4b9fb0141221d6e5bcb72b3656613afda54d16ede300bffa8f71956ae6fd2c",
"sso-mfa/k8s/keycape/test_keycape_client.py": "sha256:9572044679feaedfe732e15a2b6f8ef6b41a8fe2e4430257f309a3e83e97736c",
"sso-mfa/k8s/keycape/openbao-negative-node-wrapper.py": "sha256:76ac013d1a676a0dfa58aea1ce87b0c3e72483ccd21f586a22c5475e9132f6c1",
"sso-mfa/k8s/keycape/portal-client-rollout.py": "sha256:158e1d36eb881cdd0a2eda91b472adea5e8fde5061e00d26dda368580aeb871f",
"sso-mfa/k8s/keycape/test_playwright_activation.py": "sha256:6fc22d091f27a76c32d2fb0a7fc3c6e18e54ff98d242699c518b2f9dc9fd4cbd",
"sso-mfa/k8s/keycape/exercise-approval-clients.py": "sha256:e2d3dd741ac52af28dce752344227a4443b78fedd4cfcc06ba902e679dfc9351",
"sso-mfa/k8s/keycape/keycape-client.py": "sha256:4b63161cf3365d34dd684a3116e2c935baaf7f6aa4b30983f6883546db3d6591",
"sso-mfa/k8s/keycape/test_openbao_negative_session.py": "sha256:01e23f2b4fc77824a161a57acb3a52d19aad846b3b6c0fd3abd81afa1dc2985c",
"sso-mfa/k8s/keycape/authentication-policy-rollout.py": "sha256:2c1bd23fded4855bae1eb3a08dbc4510d7f60f2bc4d625d60e471ab78f6f0251",
"sso-mfa/k8s/keycape/handover-adapter.py": "sha256:bad7c1132258f2140b0d83548031ac86eecea4f4019f34adedc1e9e3774a3832",
"sso-mfa/k8s/keycape/openbao-signin-diagnosis-rollout.py": "sha256:a57b957d6eed9e8fb09d2a7aa7405a39deeafd9aaf57a9e6dc907afabd380371",
"sso-mfa/k8s/keycape/test_handover_adapter.py": "sha256:cd1fb0eb64a777699221ebdfcd6fea96bafb9b27ec388e95dcfe66189eac8ca2",
"sso-mfa/k8s/keycape/test_authentication_policy_rollout.py": "sha256:11c10039d99a34d2819b09146a966c8b7cba6095e7a8b51c055a01e7167e3ed5",
"sso-mfa/k8s/keycape/test_deliver_consumer_secret_adapter.py": "sha256:f4e6c6acd75a36f675007d2f62a7c7c4f7bfe2951cbb5e3e4cdde8b53f17f473",
"sso-mfa/k8s/keycape/bind-env-adapter.py": "sha256:fa17fae21776b5c620ee9782adf050649c3a28719a6687d2524ff67ca7ad1925",
"sso-mfa/k8s/keycape/test_keycape_checker_snapshot.py": "sha256:9271f25c760ad732c257d59d259b5c767436a2dc2d5ba24fca259bc57761d6d1",
"sso-mfa/k8s/keycape/test_openbao_signin_diagnosis_rollout.py": "sha256:25d46fe7caca2ad4c262bd2a25188c91847304b6b051c4f3b3705c69f2803f01",
"sso-mfa/k8s/keycape/test_openbao_private_ready.py": "sha256:8a7a033b1c509ba21397d1d74580c44f24592045b2b9de50fe87638607224277",
"sso-mfa/k8s/keycape/test_mint_secret_adapter.py": "sha256:8110b6a8abd8e9a1f5e1feae11ec09c4e28cb7486c759b0e8459da1fb1b7144d",
"sso-mfa/k8s/keycape/playwright-activation.py": "sha256:5ac683b3324b00e6253f6040f4c73057027b1f98f7071160a6153794ba522757",
"sso-mfa/k8s/keycape/test_admit_1_3_type.py": "sha256:2186eab00b000a534ab1452f14fa7b1a7ed352d5b27c400687c1c8ec7c4c3019",
"sso-mfa/k8s/keycape/test_openbao_node_route.py": "sha256:1c57053be6e8472174e4034fdfbf34b3e1729f5e239b3a9af89d9e59a08d6cb6",
"sso-mfa/k8s/keycape/test_secrets_engine_openbao_client_rollout.py": "sha256:e6f86fb7712c1b9c01d9b684f26d5cc949649b823d2732eced132d59acd3fe01",
"sso-mfa/k8s/keycape/openbao-client-config.py": "sha256:1b908b4c36134212d78f9fbe7a2a201eb3ced06d31bb1dcea4a59d80689d84b1",
"sso-mfa/k8s/keycape/test_registration_original_intent_reconcile.py": "sha256:e2897b8200ec97445fc4a26c55ad82651fcb1a4d22efe7fe59d0fcfc5cd8ec71",
"sso-mfa/k8s/keycape/test_ensure_groups_adapter.py": "sha256:c8754a2ba735116edc6fe257aa993d0530cea9ca9f954ea5a621e38694906be2",
"sso-mfa/k8s/keycape/test_keycape_checker_environment.py": "sha256:35f316eed168d3df588498faf24ab9377733a7d857ddfa5e0e4322a6287c93ff",
"sso-mfa/k8s/keycape/test_bind_env_adapter.py": "sha256:a1e5e7a631a4843f9a0d2310a3942b26936103d786aeae47a142ff7c7b2fdbdb",
"sso-mfa/k8s/keycape/create-secrets.py": "sha256:5da672fff36eb94101741ad99e2a1a96ae81fea15ed1871304c40e63ce27c787",
"sso-mfa/k8s/keycape/approval-clients-rollout.py": "sha256:488d5cc59e081993dd2b5fc6d9e46bbddcaec4f5170b8f7a5ad0aae3a211a790",
"sso-mfa/k8s/keycape/vergabe-client-rollout.py": "sha256:8cee6cc5ff3e3e8617304055263d04b393d0e005c34d9af12cb7e8bc685bac1a",
"sso-mfa/k8s/keycape/keycape-registration-adapter.py": "sha256:a53beea4dbbe373ce7a5b84d55e79be8407ab9688037c7ee057afcc7be576047",
"sso-mfa/k8s/keycape/compose-1.2-descriptors.py": "sha256:39021cac900b11a59d00c5a1d5491b1ee4c639955cde07d07854c3db8bc04958",
"sso-mfa/k8s/keycape/test_approval_clients_rollout.py": "sha256:745316d42c3aba6b59b562d3bbcd4b2cb92871fb5e51a954e2254e2e550bb408",
"sso-mfa/k8s/keycape/register-user-engine-portal.py": "sha256:67173edc44f5457e7b6a3e0fb2321b398159cfce5dea8ead01eabf835fb38d76",
"sso-mfa/k8s/keycape/test_issuer_pin.py": "sha256:e471ed815af246633c0b21ac2cf5cae94d0dbdeff9e6ce801b4ddd033097dc20",
"sso-mfa/k8s/keycape/openbao-negative-session.py": "sha256:24b7b803e4eb7e6e7c0700a069dad0ec315ee7eb5538a88b9e56147f8fab5cdd",
"sso-mfa/k8s/keycape/test_keycape_registration_adapter.py": "sha256:86268e082763c388528e5175184fd32362167c3441716436e4b1cab150c3e79a",
"sso-mfa/k8s/keycape/deliver-consumer-secret-adapter.py": "sha256:65db5386cdf08a1aa932886c046abed20330a36c96e63d4267adb8341b23da42",
"sso-mfa/k8s/keycape/test_portal_client_rollout.py": "sha256:a16cd4bf278970c10de2e1b1025597b3872c9515713dd947ac6b50cb78feea1f",
"sso-mfa/k8s/keycape/test_deliver_secret_adapter.py": "sha256:24cedec29071b62fc2c2458950ed244feeff542bc20a7d480667dd99cda16b03",
"sso-mfa/k8s/keycape/deliver-secret-adapter.py": "sha256:cd1a515a1ae2def2093660ed2a810a9c66d1d4cf7126f573ee7e9c4c42afb98d",
"sso-mfa/k8s/keycape/test_openbao_private_input.py": "sha256:84277edb5bd7858885173dea802b6bdc4f0f0c7785d6e200ee9a98d8553891a1",
"sso-mfa/k8s/keycape/register-coulomb-social.py": "sha256:b40ff4bdba71b797f8f393e79cb3c9d73b790045a0f7df6ecea35803369793c7",
"sso-mfa/k8s/keycape/mint-secret-adapter.py": "sha256:246323c7243ded18229ab063956577e151d56d9be485d3bd44fc38e5af0edf3c",
"sso-mfa/k8s/keycape/test_adapter_source_closure.py": "sha256:63cb442636d996fcf1c36b7b746ed860106a7da35dbaeb1c5129a41420ca4155",
"sso-mfa/k8s/keycape/secrets-engine-openbao-client-rollout.py": "sha256:8b834e5f0353a5e11797637420609e06e7bf7de47777c7e78b774f74d4a6afbd",
"sso-mfa/k8s/keycape/test_openbao_client_config.py": "sha256:7104a73fb936aca4829ef8046e39497d0b7347d3e74810f672e4d4ddc3346457",
"sso-mfa/k8s/keycape/ensure-groups-adapter.py": "sha256:6cba5b07a9262a8e0bf445dc4095ba03b31ddc15e2efbfe374e93f4f78b6aed4",
"sso-mfa/k8s/keycape/verify-user-engine-portal.py": "sha256:ccd5106395bd5d7b4f3dbbcbad449e3793aff217d4429b5d5af9e52ab9a58103",
"sso-mfa/k8s/keycape/test_playwright_registration.py": "sha256:b97ea8619ac768f520e4058aeb50b0b1e8ef6d2e9a1a0fff932a151a3d4b61ae",
"sso-mfa/k8s/keycape/playwright-registration.py": "sha256:bf2d6b83d93629df8ddaf6c31d6c7408ae3866969d63895714df0e08a570da99",
"identity-provisioner/group_provenance_postgres.py": "sha256:2a0111e83ad7b611076a1b45634e7f698b3d2e9acc473320b4a8ba009ebd0932",
"identity-provisioner/password_setup.py": "sha256:53012fc708384fc9cd0fff4f3fa5f204ab85866db91d726457dd130799e88ca0",
"identity-provisioner/provisioner.py": "sha256:19d1b837cbafeeacb1aa815856cd68091e6702281d72b1d860230fa320e1725b",
"identity-provisioner/copy-client-secret.py": "sha256:0f1907a9f16688148aede9fceb53a55cfd0504bcb8552f158d0fa77e9ad960c8",
"identity-provisioner/group_provenance.py": "sha256:405e08eaaab7c21d618dff4db5970607806f32ab6c461effb81c737e32182b10",
"identity-provisioner/server.py": "sha256:b61c83da6c7ce20fa2790d5bb00aeca6a91dccd133526bc559ed26562f90eb29",
"security-case-types/oidc-browser-relying-party/type.yaml": "sha256:f705c64e4875e9b8e18a912fb51c135e77898926d6a451f5cb74ab3c0cbe4d1c",
"security-case-type-revisions/1.2/oidc-browser-relying-party/type.yaml": "sha256:9e60ff569fb0d860a2bbde7bbb0991a54d4b0688f62b56df0fa5d161fd624578",
"security-case-type-revisions/1.3/oidc-browser-relying-party/type.yaml": "sha256:e75fe94110ef9fb7fb18072fe2856941b33507c99cb406d36576046481485d0a",
"security-case-type-revisions/1.3/oidc-browser-relying-party/examples/forgejo.yaml": "sha256:546aad5cf26842c484fc6ba99940d56697b85531afea11872556761008923c94",
"security-cases/forgejo-netkingdom-oidc.yaml": "sha256:bcc2c6d5bae0d28242b3cdb71e74d8ca297c2afe04766b55d53597f86893351d",
"sso-mfa/k8s/keycape/descriptor-composition-1.3.candidate.json": "sha256:773daa1df72cc7cf6a6d8aa082208181ca2438cdecc9179b1bc5b1c3a09099c2",
"sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml": "sha256:7885b8c380c03ccb0198e540532ce80c791c8e86698521d7173642e0c7a56e53",
"tools/security-case-types/security_case_evidence.py": "sha256:da8efa59c52ad73283397ebe639ae259d0cb9c6348b5cb829135c24230dcdc75",
"tools/security-case-types/security_case_validator.py": "sha256:1bcc62e9bc374c711363295549f3cd5bb0b32952671ed4b08fddc7f74742959b",
"tools/security-scenario-composer/security_scenario_composer.py": "sha256:9f0cc69930aa8ee2cc3fb92236e6a99728df17b8c0fe36e1250241c38fc01c4f",
"tools/playbook-capability-contract/playbook_contract_validator.py": "sha256:2e1e0c809d4bc9d64c2d974cc23fecd1c5636785154c2554edd9191852fd926d"
},
"ops-warden": {
"src/warden/ca.py": "sha256:d5282819c5d29386fd59a7dc46d1abdc01e99fc6838a1a6637f90868389fe557",
"src/warden/inventory.py": "sha256:9401db92d7cbf3bea962b97e83ef2c252a19c69ab94ce4836ba58f68638cb311",
"src/warden/memory.py": "sha256:ecf5f7ccabb669b56bfca3a109b10bbe8437bdd2ea30a47a4c08570f97d7be2a",
"src/warden/case_inputs.py": "sha256:1334b0cd9897e763cfea2d306e997c659f3f284ecc3f9612140c2104835da7c7",
"src/warden/audit.py": "sha256:6b5b8fe053064d3905294bfde1b691fcca8a0806c889e52a49494470d29c24a0",
"src/warden/case_type.py": "sha256:7b659b8d682863cd28df24025be4b10dd7ca3df724350a22d360c6af9615bca7",
"src/warden/vault.py": "sha256:860b8c9f498b3955b363a74dd74087b6d0c399599ef22b951a076ee33c95929f",
"src/warden/taint.py": "sha256:8c3d161d18d429d026aad715ac01e2d33e0f4e84ac03fbaea3cea15017ad39a1",
"src/warden/case_run.py": "sha256:1bc73e30ac718fd75bbaff2a739495fc051aeaec73802ac71f0583cb2d53ab0a",
"src/warden/vault_hints.py": "sha256:0d158ffcc3a93d5442df5fbe13d4c1e3b3159dd60301530bbdae6db9bc9c709e",
"src/warden/access.py": "sha256:258d45d2f84b54b2464373ad4d7d6df6ff95b8e8d60f5e85ceb2d962fcfa8a61",
"src/warden/clock_attribution.py": "sha256:5fcf07a2525a6a250442e14b6f6229f7db2a6ca02fc6aac23cdaa4c1a78c63eb",
"src/warden/case_plan.py": "sha256:9352ae8683d1181980c4ff38524582e4be448d33c85b558f60582c1e5bb5bbaa",
"src/warden/caller_identity.py": "sha256:747edfaceecd470981949253bda0c3bd2f487d40a9a2f77c2cc1eff3f34f04f7",
"src/warden/policy.py": "sha256:aac46f538e986731cd841581c91efe004b8c1940966b954ef635780a719dada4",
"src/warden/case_receipt_state.py": "sha256:a2cda7f187e77bd76d4d209505638de44a587fae0bc033ec75c23ee9ea9f73bc",
"src/warden/config.py": "sha256:8a857faa3811b00303d4d5c904d69255ebdaff3239e8516f97e6606e53b46924",
"src/warden/openbao_caller.py": "sha256:7e6d07827d00eae7de3b2367c97bdcda1a13d6559627201a4ba09a0e42d46a17",
"src/warden/doubles.py": "sha256:5460e07f5bd0f51a81d3f3c0ac84efde65ca9130b1039f94ee22ca484976a9de",
"src/warden/posture.py": "sha256:1bb60c4dd4634ea42cb130ae1325d7415adf43096906bde2515396c368256e33",
"src/warden/cli.py": "sha256:196cd829d3dbfbd2333598a983687bde1f9bcdfadef95b2fd1d237c4a5f060a9",
"src/warden/proxy.py": "sha256:69649bcf8979e4ed7f9104e927b458827a355c4846143367f4cd49c8b89b96da",
"src/warden/plan.py": "sha256:001b3197e644221344d52e6b1594eb8eae78d10e73d18ed31273505909f3916b",
"src/warden/worker.py": "sha256:d7c2b391b36033d44d8c6841b9bce18a05c74b41ef2910b91689820b6a1cb44e",
"src/warden/mask.py": "sha256:0876412d453fa84109dc8ee0468449f40cf4d3421b056f30fc205f0f59ec494b",
"src/warden/models.py": "sha256:f4100b02c5d96d537980e00d4b874159cd5822ba8219f1f533a2516912b7bd85",
"src/warden/__init__.py": "sha256:047e0feba479474235f0707a207655ecfddfb33cd4f54069134419b8ca4ea24a",
"src/warden/scorecard.py": "sha256:0fa5aef34aeb004fa7fcfabc287759cc47421ca5244c1f31fc467b22a653353c",
"src/warden/desk.py": "sha256:2499120392a5a1c0fd8f423d5b5c787c75a4efb9a986a1b7bcb85eae13423e85",
"src/warden/routing/scaffold.py": "sha256:5079c8e51f8d487eae3f322a66324bd70cefb637bb28f46c861032de8ec54aa2",
"src/warden/routing/models.py": "sha256:b85372b2572a49af62e9534f26a33963b894633c7cd43dd2a28416b8959cba3e",
"src/warden/routing/__init__.py": "sha256:e9124811ebe11ad32c98ab462b2eed634d4ddca08792981d0f353b223a239902",
"src/warden/routing/catalog.py": "sha256:5b95810df9e6102a33d3a116a096cd75292c8572bad721fe6baa772caacc9bc3",
"src/warden/scripts/ops_ssh_wrapper.py": "sha256:e8c289882f2ad439d2eb32f9a871967420fefaffe745c9271c1a2e948fbdfe50",
"src/warden/scripts/__init__.py": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
}
},
"repo_manager_identifiers_sha256": "sha256:4e35fcd009c20822574fd33171176bd14a1ff2dd5af8b0bb2820954974593a2a",
"authorization": "Root accepted the exact source fixture patch for source integration. This packet adds no owner/native authority or catalog/pin promotion. No prepared script has been executed.",
"publishable": false,
"requires_allocated_manifest": true,
"publication_file_paths": [
"sso-mfa/k8s/keycape/test_admit_1_3_type.py",
"sso-mfa/k8s/keycape/test_keycape_registration_adapter.py",
"sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml",
"workplans/NK-WP-0048-security-case-types.md"
]
}

View file

@ -0,0 +1,73 @@
"""Prepared canonical source validation; --execute launches only the two scoped tests."""
from pathlib import Path
import argparse
import hashlib
import json
import re
import shutil
import subprocess
import tempfile
PACKET = Path(__file__).resolve().parent
ROOTS = {'net-kingdom': Path('/home/worsch/net-kingdom'), 'ops-warden': Path('/home/worsch/ops-warden')}
def sha(data):
return 'sha256:' + hashlib.sha256(data).hexdigest()
def sources(manifest):
allowed = []
for owner, rows in manifest['validation']['source_hashes'].items():
for relative, expected in rows.items():
path = ROOTS[owner] / relative
assert not path.is_symlink(), str(path)
assert sha(path.read_bytes()) == expected, str(path)
allowed.append(str(path.resolve()))
return allowed
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--execute', action='store_true')
args = parser.parse_args()
manifest = json.loads((PACKET / 'publication-inputs.json').read_text())
allowed = sources(manifest)
revision = subprocess.check_output(['git', '-C', str(ROOTS['ops-warden']), 'rev-parse', 'HEAD'], text=True).strip()
assert revision == manifest['warden_revision']
if not args.execute:
print(json.dumps({'prepared_only': True, 'public_source_files_verified': len(allowed),
'tests': manifest['validation']['tests']}))
return
protected = {name: sha((ROOTS['net-kingdom'] / name).read_bytes()) for name in manifest['protected_files']}
scratch = Path(tempfile.mkdtemp(prefix='nk48-catalog-canonical-validation-'))
for name in ['home', 'tmp', 'guard', 'pycache']:
(scratch / name).mkdir()
shutil.copyfile(PACKET / 'validation-guard.py', scratch / 'guard/sitecustomize.py')
shutil.copyfile(PACKET / 'validation-child.py', scratch / 'child.py')
(scratch / 'allowed.json').write_text(json.dumps(allowed))
(scratch / 'pytest.ini').write_text('[pytest]\n')
environment = {
'HOME': str(scratch / 'home'), 'TMPDIR': str(scratch / 'tmp'), 'PATH': '/usr/bin:/bin',
'PYTHONPATH': str(scratch / 'guard') + ':' + str(ROOTS['ops-warden'] / 'src'),
'PYTHONDONTWRITEBYTECODE': '1', 'PYTHONPYCACHEPREFIX': str(scratch / 'pycache'),
'LANG': 'C.UTF-8', 'WARDEN_REVIEW_ALLOWED_SOURCE_LIST': str(scratch / 'allowed.json'),
'WARDEN_REVIEW_VALIDATOR_PREFIX': str(scratch / 'tmp/warden-case-validator-'),
}
with (PACKET / 'canonical-validation.log').open('w') as log:
result = subprocess.run([manifest['validation']['python'], str(scratch / 'child.py')],
cwd=ROOTS['net-kingdom'], env=environment,
stdout=log, stderr=subprocess.STDOUT)
sources(manifest)
assert protected == {name: sha((ROOTS['net-kingdom'] / name).read_bytes()) for name in manifest['protected_files']}
log_text = (PACKET / 'canonical-validation.log').read_text()
counts_verified = bool(re.search(r'\b31 passed, 53 subtests passed\b', log_text))
counts_verified = counts_verified and not re.search(r'\b[1-9][0-9]* (?:skipped|deselected)\b', log_text)
receipt = {'executed': True, 'counts_verified': counts_verified, 'returncode': result.returncode, 'warden_revision': revision,
'net_kingdom_head': subprocess.check_output(['git', '-C', str(ROOTS['net-kingdom']), 'rev-parse', 'HEAD'], text=True).strip(),
'verified_public_source_files': len(allowed), 'tests': manifest['validation']['tests'],
'log_sha256': sha((PACKET / 'canonical-validation.log').read_bytes()), 'scratch': str(scratch),
'limitations': 'Source fixture tests only; no native owner execution, acceptance, catalog promotion or pin.'}
(PACKET / 'canonical-validation.json').write_text(json.dumps(receipt, indent=2) + '\n')
print(json.dumps(receipt, indent=2))
raise SystemExit(result.returncode or (0 if counts_verified else 1))
if __name__ == '__main__':
main()

View file

@ -0,0 +1,38 @@
## T35 — Align source admission fixtures with the authenticated catalog and attended-session API
```task
id: NK-WP-0048-T35
status: done
priority: high
```
Completed 2026-10-17, source fixture compatibility only. Distinct from T32's
independent agent-mint regression repair: both remaining opaque catalog byte
placeholders now use one well-formed synthetic catalog whose exact bytes are
bound by the fixture evidence verifier. The fixture mirrors the six relevant
Warden lane shapes; four draft statuses are hypothetically active, while both
Apps establishing login references remain unresolved. No real catalog entry,
owner login choice or production parameter pin changes.
Against the reviewed mode-aware Warden source now integrated at
`ae7bc73b4f4bac22454144959b870d161498e0af`, scratch validation passes 31 tests
and 53 subtests. Five resolvable 1.3 descriptors conditionally admit under
fixture-only acknowledgment and pinning; both Apps attended steps refuse before
execution. Changed catalog bytes refuse, all independent mint-guard tests still
reach their intended guard, and the registration fixture's actual kernel
run/rollback and uncertain-result paths pass with synthetic owner callbacks.
The registration fixture explicitly aligns its in-memory proposed type lane
with its current descriptor; canonical 1.1 is unchanged.
The same tests against predecessor `117fec9241e7b985dfb187b992e173d0a5dc3700`
pass 31 tests and 51 subtests, with only the two new Apps refusal assertions
failing because that predecessor lacks the attended-session catalog check.
Tests target the reviewed current API; the parser or Apps gate is not weakened
for predecessor compatibility. Evidence and root source review:
`the-custodian/docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-update-r1/`
and `nk48-catalog-fixture-publication-r1/`. Canonical validation/publication
receipts belong in the latter packet when performed. This records source
fixture work, not native T03, owner assent, exact-type acknowledgment, PIN-1,
composition/admission completion under T16 or the native first case under T06.
T33 and T34 retain their existing issuer-store and consumer-inverse work.

View file

@ -0,0 +1,43 @@
"""Focused canonical-source test process. Network/native/estate-read guard required."""
from pathlib import Path
import os
import socket
import subprocess
import sys
import sitecustomize
assert sitecustomize.ACTIVE is True
assert not {'BAO_TOKEN', 'VAULT_TOKEN', 'WARDEN_AGENT_ID'} & os.environ.keys()
assert list(Path.home().iterdir()) == []
try:
socket.socket()
except RuntimeError as error:
assert str(error) == 'fixture validation: network disabled'
else:
raise AssertionError('network guard inactive')
import warden.case_inputs as inputs
import pytest
assert Path(inputs.__file__).resolve() == Path('/home/worsch/ops-warden/src/warden/case_inputs.py')
PREAMBLE = '''import sys as _review_sys\ndef _review_guard(event,args):\n if event.startswith('socket.') or event in {'subprocess.Popen','os.system','os.exec','os.posix_spawn'}:\n raise RuntimeError('review validator: network/native disabled')\n if event=='open' and isinstance(args[0],str) and (args[0].startswith('/home/') or args[0].startswith('/root/')):\n raise RuntimeError('review validator: ambient home denied')\n_review_sys.addaudithook(_review_guard)\n'''
old_run = subprocess.run
def run_pinned(arguments, *positional, **keywords):
if (type(arguments) is not list or len(arguments) != 5
or arguments[:3] != [sys.executable, '-I', '-c']
or arguments[3] != inputs._VALIDATE
or not str(arguments[4]).startswith(sitecustomize.VALIDATOR_PREFIX)
or keywords.get('env') != {}):
raise RuntimeError('fixture validation: unexpected process refused')
return old_run([*arguments[:3], PREAMBLE + arguments[3], arguments[4]],
*positional, **keywords)
inputs.subprocess.run = run_pinned
raise SystemExit(pytest.main([
'-q', '-p', 'no:cacheprovider', '--noconftest',
'-c', str(Path(os.environ['TMPDIR']).parent / 'pytest.ini'),
'--rootdir=/home/worsch/net-kingdom',
'/home/worsch/net-kingdom/sso-mfa/k8s/keycape/test_admit_1_3_type.py',
'/home/worsch/net-kingdom/sso-mfa/k8s/keycape/test_keycape_registration_adapter.py',
]))

View file

@ -0,0 +1,35 @@
"""Copied as sitecustomize.py into a fresh scratch directory by run_validation."""
import json
import os
from pathlib import Path
import sys
ALLOWED = frozenset(json.loads(Path(os.environ['WARDEN_REVIEW_ALLOWED_SOURCE_LIST']).read_text()))
VALIDATOR_PREFIX = os.environ['WARDEN_REVIEW_VALIDATOR_PREFIX']
def guard(event, args):
if event.startswith('socket.'):
raise RuntimeError('fixture validation: network disabled')
if event == 'subprocess.Popen':
command = args[1]
if (type(command) is list and len(command) == 5
and command[:3] == [sys.executable, '-I', '-c']
and command[3].startswith('import sys as _review_sys\ndef _review_guard(')
and str(command[4]).startswith(VALIDATOR_PREFIX) and args[3] == {}):
return
raise RuntimeError('fixture validation: native process disabled')
if event in {'os.system', 'os.exec', 'os.posix_spawn'}:
raise RuntimeError('fixture validation: native process disabled')
if event == 'open' and isinstance(args[0], str):
path = str(Path(args[0]).absolute())
if path.startswith(('/home/', '/root/')):
# Only exact prehashed public source may be read from the estate.
if str(Path(path).resolve()) not in ALLOWED:
raise PermissionError('fixture validation: unlisted estate file disabled')
mode, flags = args[1:3]
if ((isinstance(mode, str) and any(c in mode for c in 'wax+'))
or (flags & (os.O_WRONLY | os.O_RDWR | os.O_CREAT | os.O_TRUNC | os.O_APPEND))):
raise PermissionError('fixture validation: canonical source writes disabled')
sys.addaudithook(guard)
ACTIVE = True

View file

@ -0,0 +1,92 @@
"""Prepared source integration only. Root runs --execute; no commit/projection here."""
from pathlib import Path
import argparse
import hashlib
import json
import re
import subprocess
import sys
PACKET = Path(__file__).resolve().parent
ROOT = Path('/home/worsch/net-kingdom')
WARDEN = Path('/home/worsch/ops-warden')
def sha(data):
return 'sha256:' + hashlib.sha256(data).hexdigest()
def git(root, *args):
return subprocess.check_output(['git', '-C', str(root), *args], text=True).strip()
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--execute', action='store_true')
args = parser.parse_args()
manifest = json.loads((PACKET / 'publication-inputs.json').read_text())
assert git(ROOT, 'rev-parse', '--abbrev-ref', 'HEAD') == 'main'
assert git(ROOT, 'rev-parse', 'HEAD') == manifest['base_revision']
assert git(WARDEN, 'rev-parse', 'HEAD') == manifest['warden_revision']
workplan = ROOT / manifest['workplan']
original = workplan.read_bytes()
candidate = (PACKET / 'workplan.candidate.md').read_bytes()
assert sha(original) == manifest['workplan_preimage_sha256']
assert sha(candidate) == manifest['workplan_candidate_sha256']
assert sha((PACKET / 'task-T35.md').read_bytes()) == manifest['task_addition_sha256']
assert candidate == original + (PACKET / 'task-T35.md').read_bytes()
assert len(re.findall(rb'^```task$', original, re.M)) == 34
assert len(re.findall(rb'^```task$', candidate, re.M)) == 35
assert b'id: NK-WP-0048-T35' not in original
assert sha((PACKET / 'candidate.patch').read_bytes()) == manifest['patch_sha256']
for row in manifest['files']:
path = ROOT / row['path']
if row['preimage_sha256'] is None:
assert not path.exists() and not path.is_symlink(), str(path)
else:
assert sha(path.read_bytes()) == row['preimage_sha256'], str(path)
protected_before = {name: sha((ROOT / name).read_bytes()) for name in manifest['protected_files']}
assert protected_before == manifest['protected_files'], 'Operator brief/index changed: refresh the prepared inputs first.'
# Preserve the original index exactly; this script never stages anything.
index = git(ROOT, 'ls-files', '--stage', '-z')
assert sha(Path('/home/worsch/repo-manager/src/repo_manager/identifiers.py').read_bytes()) == manifest['repo_manager_identifiers_sha256']
sys.path.insert(0, '/home/worsch/repo-manager/src')
from repo_manager.identifiers import ensure_missing_work_record_identifiers
before = ensure_missing_work_record_identifiers(ROOT, execute=False)
assert before['ok'] and before['assignments'] == [] and before['files_changed'] == []
subprocess.run(['git', 'apply', '--check', str(PACKET / 'candidate.patch')], cwd=ROOT, check=True)
if not args.execute:
print(json.dumps({'prepared_only': True, 'preimages_verified': True, 'files': 4,
'next': 'Run this script with --execute, then run_validation.py --execute.'}))
return
subprocess.run(['git', 'apply', str(PACKET / 'candidate.patch')], cwd=ROOT, check=True)
for row in manifest['files']:
assert sha((ROOT / row['path']).read_bytes()) == row['sha256'], row['path']
workplan.write_bytes(candidate)
preview = ensure_missing_work_record_identifiers(ROOT, execute=False)
(PACKET / 'identifier-preview.json').write_text(json.dumps(preview, indent=2) + '\n')
assert preview['ok'] and preview['files_changed'] == [manifest['workplan']]
assert len(preview['assignments']) == 1
assignment = preview['assignments'][0]
assert (assignment['kind'], assignment['record_id'], assignment['path']) == (
'task', 'NK-WP-0048-T35', manifest['workplan'])
# UUID comes only from the ordinary allocator, never from this packet.
actual = ensure_missing_work_record_identifiers(ROOT, execute=True)
assert actual['assignments'] == preview['assignments']
assert actual['files_changed'] == [manifest['workplan']]
(PACKET / 'identifier-assignment.json').write_text(json.dumps(actual, indent=2) + '\n')
allocated = workplan.read_bytes()
assert allocated.startswith(original), 'Existing workplan bytes must be preserved.'
assert len(re.findall(rb'^```task$', allocated, re.M)) == 35
assert allocated.count(b'id: NK-WP-0048-T35\n') == 1
assert not ensure_missing_work_record_identifiers(ROOT, execute=False)['assignments']
assert git(ROOT, 'ls-files', '--stage', '-z') == index, 'Index must remain unchanged.'
assert {name: sha((ROOT / name).read_bytes()) for name in manifest['protected_files']} == protected_before
(PACKET / 'workplan.allocated.md').write_bytes(allocated)
publication = {'owner': 'net-kingdom', 'base_revision': manifest['base_revision'],
'message': manifest['message'], 'files': [
{'path': row['path'], 'sha256': sha((ROOT / row['path']).read_bytes()).removeprefix('sha256:')}
for row in manifest['files'] + [{'path': manifest['workplan']}]]}
(PACKET / 'publication-inputs.allocated.json').write_text(json.dumps(publication, indent=2) + '\n')
print(json.dumps({'source_applied': True, 'task_count': 35, 'allocated_only': assignment['record_id'],
'files': len(publication['files']), 'commit_and_projection': 'Root handles separately.'}))
if __name__ == '__main__':
main()

View file

@ -0,0 +1,243 @@
diff --git a/sso-mfa/k8s/keycape/test_admit_1_3_type.py b/sso-mfa/k8s/keycape/test_admit_1_3_type.py
--- a/sso-mfa/k8s/keycape/test_admit_1_3_type.py
+++ b/sso-mfa/k8s/keycape/test_admit_1_3_type.py
@@ -8,7 +8,9 @@
acknowledged 1.3 is still refused until ops-warden adds a 1.3 pin. That is an
ops-warden owner change, and it is not made here. The tests show that 1.3's
parameters carry 1.2's pinned fingerprint, and that with only that one pin added in
-memory the committed map admits exactly the composed descriptors and nothing else.
+memory the five resolvable steps admit. The two Apps attended steps remain refused
+because their establishing login is unresolved in the synthetic catalog. Four real
+draft lane shapes are hypothetically active in that fixture; no catalog is promoted.
Trust is fixture-only, nothing is dispatched, and none of this is owner admission
or an acknowledgment.
"""
@@ -37,6 +39,8 @@
TYPE_DIR = REPO / 'security-case-type-revisions/1.3/oidc-browser-relying-party'
TYPE_BYTES = (TYPE_DIR / 'type.yaml').read_bytes()
ARTIFACT = json.loads((ROOT / 'descriptor-composition-1.3.candidate.json').read_text())
+CATALOG = (ROOT / 'kernel-catalog.fixture.yaml').read_bytes()
+UNRESOLVED_APPS = {'deliver-consumer-secret', 'hand-over'}
EVIDENCE = {'fixture-acceptance', 'fixture-materialization', 'fixture-descriptor', 'fixture-session'}
@@ -74,12 +78,13 @@
ARTIFACT['params']['consumer_owner_repo'],
version='1.3'))
- def admit(self, desc, type_source, *, actor=None, lane=None, agent_id=None):
+ def admit(self, desc, type_source, *, actor=None, lane=None, agent_id=None, catalog=CATALOG):
desc_bytes = c.encode(desc)
adapter = Adapter(desc.adapter, desc.adapter_source, unused, unused)
executor = Executor(Journal(Path(self.temp.name) / desc.step),
{adapter.reference: adapter},
- lambda purpose, source, evidence: evidence in EVIDENCE,
+ lambda purpose, source, evidence: (evidence in EVIDENCE and
+ (purpose != 'catalog-routing-acceptance' or source == digest(CATALOG))),
browser_inputs=inputs.BrowserInputs(REPO))
with mock.patch.dict(os.environ):
if agent_id is None:
@@ -87,7 +92,7 @@
else:
os.environ['WARDEN_AGENT_ID'] = agent_id
return executor.admit(self.case_source, type_source, desc_bytes,
- b'fixture-only-catalog', principal='founder', actor=actor or desc.actor,
+ catalog, principal='founder', actor=actor or desc.actor,
lane=lane or desc.lane,
acceptance_evidence='fixture-acceptance',
materialization_evidence='fixture-materialization',
@@ -112,18 +117,33 @@
self.assertEqual(parameter_fingerprint(TYPE_BYTES), inputs.PARAMETER_PINS['1.2'])
acknowledged = with_status('acknowledged')
for step, desc in self.descriptors.items():
+ if step in UNRESOLVED_APPS:
+ continue # The attended session gate correctly precedes parameter validation.
with self.subTest(step=step), self.assertRaisesRegex(
Refused, 'failed exact-version validation'):
self.admit(desc, acknowledged)
- def test_committed_map_admits_every_descriptor_once_acknowledged_and_pinned(self):
+ def test_committed_map_conditionally_admits_five_resolvable_steps(self):
acknowledged = with_status('acknowledged')
for step, desc in self.descriptors.items():
+ if step in UNRESOLVED_APPS:
+ continue
with self.subTest(step=step), pinned_13():
admitted, invocation, _ = self.admit(desc, acknowledged)
self.assertEqual(admitted, desc)
self.assertEqual((invocation.step, invocation.actor, invocation.target),
(desc.step, desc.actor, 'forgejo'))
+
+ def test_unresolved_apps_sessions_refused_even_once_acknowledged_and_pinned(self):
+ for step in sorted(UNRESOLVED_APPS):
+ with self.subTest(step=step), pinned_13(), self.assertRaisesRegex(
+ Refused, 'does not resolve to an active, reviewed login lane'):
+ self.admit(self.descriptors[step], with_status('acknowledged'))
+
+ def test_catalog_evidence_is_bound_to_exact_fixture_bytes(self):
+ mint = self.descriptors['mint-secret']
+ with pinned_13(), self.assertRaisesRegex(Refused, 'independent owner evidence not verified'):
+ self.admit(mint, with_status('acknowledged'), catalog=CATALOG + b'\n# changed source\n')
def test_descriptor_outside_the_map_is_refused(self):
acknowledged = with_status('acknowledged')
diff --git a/sso-mfa/k8s/keycape/test_keycape_registration_adapter.py b/sso-mfa/k8s/keycape/test_keycape_registration_adapter.py
--- a/sso-mfa/k8s/keycape/test_keycape_registration_adapter.py
+++ b/sso-mfa/k8s/keycape/test_keycape_registration_adapter.py
@@ -259,8 +259,13 @@
case_source = yaml.safe_dump(case).encode()
typ = yaml.safe_load((root / 'security-case-types/oidc-browser-relying-party/type.yaml').read_bytes())
typ['spec']['execution_descriptors'] = {'register-client': digest(self.desc_bytes)}
+ # Fixture-only successor lane for the adapter's current descriptor.
+ # Canonical 1.1 still names the earlier login lane and is not edited.
+ typ['spec']['follow_through'] = [
+ dict(step, lane=self.admitted.lane) if step['id'] == 'register-client' else step
+ for step in typ['spec']['follow_through']]
type_source = yaml.safe_dump(typ).encode()
- catalog = b'fixture-only-catalog'
+ catalog = (ROOT / 'kernel-catalog.fixture.yaml').read_bytes()
sheet = json.dumps(['register-client', 'net-kingdom', 'forgejo', 'human',
'founder', 'keycape-attended-case-change', 'fixture-acceptance', 'fixture-materialization',
'fixture-descriptor', 'fixture-session'], separators=(',', ':')).encode()
@@ -270,6 +275,8 @@
adapter = a.build(**dict(self.kw, admitted=invocation, case_source=case_source,
case_acceptance='fixture-acceptance'))
def fixture_verifier(purpose, source, evidence):
+ if purpose == 'catalog-routing-acceptance':
+ return source == digest(catalog) and evidence == 'fixture-descriptor'
if purpose.startswith('session-revocation:'):
_, lane, operation, attempt = purpose.split(':')
return source == digest(case_source) and lane == invocation.lane and evidence == (
diff --git a/sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml b/sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml
new file mode 100644
--- /dev/null
+++ b/sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml
@@ -0,0 +1,128 @@
+# TEST ONLY: synthetic subset shaped after ops-warden 5abde817 catalog.
+# Four draft entries are hypothetically active; Apps session_lane remains unresolved.
+# Not an authenticated owner catalog, promotion, login choice or native authority.
+entries:
+- id: key-cape-oidc-login
+ risk: standard
+ owner_repo: key-cape
+ warden_executes: false
+ reviewed: '2026-06-27'
+ status: active
+ delegation:
+ mode: interim
+ intended_owner: key-cape
+ reviewed: '2026-09-08'
+ blocked_on: fixture-only; no native authority
+ lane: login
+ title: Synthetic key-cape-oidc-login
+ need_keywords:
+ - key-cape-oidc-login
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: keycape-client-secret-generate
+ risk: high
+ owner_repo: railiance-platform
+ warden_executes: false
+ reviewed: '2026-10-10'
+ status: active
+ delegation:
+ mode: native
+ intended_owner: railiance-platform
+ reviewed: '2026-10-10'
+ lane: secret
+ title: Synthetic keycape-client-secret-generate
+ need_keywords:
+ - keycape-client-secret-generate
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: keycape-attended-case-change
+ lane: attended-change
+ session_lane: key-cape-oidc-login
+ risk: high
+ owner_repo: key-cape/net-kingdom
+ warden_executes: false
+ reviewed: '2026-10-17'
+ status: active
+ delegation:
+ mode: interim
+ intended_owner: key-cape
+ reviewed: '2026-10-17'
+ blocked_on: fixture-only; no native authority
+ title: Synthetic keycape-attended-case-change
+ need_keywords:
+ - keycape-attended-case-change
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: platform-secret-delivery
+ risk: high
+ owner_repo: railiance-platform
+ warden_executes: false
+ reviewed: '2026-10-17'
+ status: active
+ delegation:
+ mode: native
+ intended_owner: railiance-platform
+ reviewed: '2026-10-17'
+ title: Synthetic platform-secret-delivery
+ need_keywords:
+ - platform-secret-delivery
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: consumer-owner-deployment
+ lane: attended-change
+ session_lane: pending-owner-confirmation
+ risk: high
+ owner_repo: railiance-apps
+ warden_executes: false
+ reviewed: '2026-10-17'
+ status: active
+ delegation:
+ mode: native
+ intended_owner: railiance-apps
+ reviewed: '2026-10-17'
+ title: Synthetic consumer-owner-deployment
+ need_keywords:
+ - consumer-owner-deployment
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.
+- id: apps-consumer-handover
+ lane: attended-change
+ session_lane: pending-owner-confirmation
+ risk: high
+ owner_repo: railiance-apps
+ warden_executes: false
+ reviewed: '2026-10-17'
+ status: active
+ delegation:
+ mode: native
+ intended_owner: railiance-apps
+ reviewed: '2026-10-17'
+ title: Synthetic apps-consumer-handover
+ need_keywords:
+ - apps-consumer-handover
+ subsystem: synthetic source test
+ wiki_ref: fixture-only
+ canon_ref: fixture-only
+ workload_ref:
+ applicability: not-applicable
+ reason: Synthetic source test; no workload or native authority.

View file

@ -0,0 +1,15 @@
{
"executed": true,
"counts_verified": true,
"returncode": 0,
"warden_revision": "922c26da0f3fcb0182352ea83e6ae06f29878580",
"net_kingdom_head": "342a6f25af5cdc602841948f42759ea52ef1c8f5",
"verified_public_source_files": 105,
"tests": [
"sso-mfa/k8s/keycape/test_admit_1_3_type.py",
"sso-mfa/k8s/keycape/test_keycape_registration_adapter.py"
],
"log_sha256": "sha256:2ac155ce37c15bfd4f24483304036fec725bc3f166c0963d56280dea1d43ae73",
"scratch": "/tmp/nk48-catalog-canonical-validation-ntdpunql",
"limitations": "Source fixture tests only; no native owner execution, acceptance, catalog promotion or pin."
}

View file

@ -0,0 +1,20 @@
{
"schema": "repo-manager.identifier-assignment.v1",
"ok": true,
"executed": true,
"repo": "net-kingdom",
"namespace": "helixforge",
"assignments": [
{
"kind": "task",
"record_id": "NK-WP-0048-T35",
"uuid": "cf1d6ab3-846e-53ea-8575-d6347b6f4769",
"path": "workplans/NK-WP-0048-security-case-types.md"
}
],
"historical_invalid_identifiers": [],
"historical_identity_collisions": [],
"files_changed": [
"workplans/NK-WP-0048-security-case-types.md"
]
}

View file

@ -0,0 +1,20 @@
{
"schema": "repo-manager.identifier-assignment.v1",
"ok": true,
"executed": false,
"repo": "net-kingdom",
"namespace": "helixforge",
"assignments": [
{
"kind": "task",
"record_id": "NK-WP-0048-T35",
"uuid": "cf1d6ab3-846e-53ea-8575-d6347b6f4769",
"path": "workplans/NK-WP-0048-security-case-types.md"
}
],
"historical_invalid_identifiers": [],
"historical_identity_collisions": [],
"files_changed": [
"workplans/NK-WP-0048-security-case-types.md"
]
}

View file

@ -0,0 +1,36 @@
{
"schema": "custodian.nk48-catalog-fixture-publication-preparation.v1",
"status": "prepared only; canonical apply and validation runners not executed, including dry-run",
"owner_base": "342a6f25af5cdc602841948f42759ea52ef1c8f5",
"warden_base": "ae7bc73b4f4bac22454144959b870d161498e0af",
"root_source_review": "Root explicitly accepted fixture patch SHA256 df69fb2ec9f1e1cf0dd94194e3c046c995ed8a7deabf65a8e9bec34662adb501 for source integration; no owner/native assent inferred.",
"task_refinement": "Append completed T35 for distinct current authenticated-catalog/mode-aware fixture compatibility; preserve exact original workplan bytes, all34 existing task blocks/frontmatter/status/UUID. Normal allocator preview must yield exactlyT35 before execution; no manual UUID.",
"root_commands": [
"python3 /home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/apply_prepare.py --execute",
"python3 /home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/run_validation.py --execute",
"Root normal scoped commit using publication-inputs.allocated.json; normal owner projection afterwards."
],
"mutation_scope": [
"Exactly the three reviewed fixture files plus the appended T35 workplan task.",
"No git stage,commit,push,projection,brief refresh or index generation in prepared scripts.",
"Preexisting operator .custodian-brief.md/WORK-RECORDS.md remain byte-identical; unrelated dirty/untracked paths are never read or written by the apply script."
],
"validation_scope": "Canonical NK test and source files against Warden mainae7bc73;105 explicit public source hashes checked before and after. Two scoped test modules only; expected31 tests/53 subtests; no skip/deselection accepted. EmptyHOME and allowlisted environment; fresh redirected Python caches; pytest cache/conftest discovery disabled. Network denied. Native processes denied except exact pinned offline metadata validator with guarded empty-environment child. Reads from /home or /root denied except exact prehashed public source files; canonical writes denied.",
"unverified_limits": [
"Prepared runner has only been AST-parsed; root must execute and inspect logs.",
"Python audit controls are bounded to reviewed test execution and do not claim operating-system credential isolation or an autopilot grant.",
"Warden code is source-only; 1.3 parameter pin, draft promotion, pending Apps login, nativeT03 and downstream acceptance remain gated.",
"Existing adverse review history remains unchanged."
],
"files": {
"apply_prepare.py": "sha256:b294e6339e8c9af9ba911667646dd0ab52e75cf798de93238d84d1057c8a9e70",
"run_validation.py": "sha256:16236aa55a774f8ea6d66da4ee17f7737c6d1b013d844ca9b9759e02b615af51",
"validation-guard.py": "sha256:13611f4de25dc7d01348905c4b365a0ffbb95fd93a61c75c8faf38d705c54f50",
"workplan.preimage.md": "sha256:f92962c5aa21aade0fc2f6b4f8d9a95932fe85b107413cdd2824b6ebe72c36d9",
"publication-inputs.json": "sha256:d9bf5555013aa9e399037672c80a72af23c6815db03088bee3db4c8583197146",
"candidate.patch": "sha256:df69fb2ec9f1e1cf0dd94194e3c046c995ed8a7deabf65a8e9bec34662adb501",
"task-T35.md": "sha256:7d14d261ffbab2a930c4a3ff962cec786060cad6177280773cf1c0b0f006127f",
"validation-child.py": "sha256:6bd4e3cda22e65f90bbb4006b403270405947293be2ae8bf8fdade0abed61f45",
"workplan.candidate.md": "sha256:3bce122c5b83d9044b142fc2cabc48de5558ab0d65dc0223a8ed0325f219e981"
}
}

View file

@ -0,0 +1,23 @@
{
"owner": "net-kingdom",
"base_revision": "342a6f25af5cdc602841948f42759ea52ef1c8f5",
"message": "test: align security case fixtures with authenticated catalog admission",
"files": [
{
"path": "sso-mfa/k8s/keycape/test_admit_1_3_type.py",
"sha256": "2186eab00b000a534ab1452f14fa7b1a7ed352d5b27c400687c1c8ec7c4c3019"
},
{
"path": "sso-mfa/k8s/keycape/test_keycape_registration_adapter.py",
"sha256": "86268e082763c388528e5175184fd32362167c3441716436e4b1cab150c3e79a"
},
{
"path": "sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml",
"sha256": "7885b8c380c03ccb0198e540532ce80c791c8e86698521d7173642e0c7a56e53"
},
{
"path": "workplans/NK-WP-0048-security-case-types.md",
"sha256": "53f9e5826bd7e34287d59f46089ee50c31598ba1a56bcf6d3249525f7e23bb9b"
}
]
}

View file

@ -0,0 +1,176 @@
{
"schema": "custodian.nk48-catalog-fixture-publication-inputs.v1",
"prepared_only": true,
"owner": "net-kingdom",
"base_revision": "342a6f25af5cdc602841948f42759ea52ef1c8f5",
"warden_revision": "922c26da0f3fcb0182352ea83e6ae06f29878580",
"message": "test: align security case fixtures with authenticated catalog admission",
"workplan": "workplans/NK-WP-0048-security-case-types.md",
"workplan_preimage_sha256": "sha256:f92962c5aa21aade0fc2f6b4f8d9a95932fe85b107413cdd2824b6ebe72c36d9",
"workplan_candidate_sha256": "sha256:3bce122c5b83d9044b142fc2cabc48de5558ab0d65dc0223a8ed0325f219e981",
"task_addition_sha256": "sha256:7d14d261ffbab2a930c4a3ff962cec786060cad6177280773cf1c0b0f006127f",
"patch_sha256": "sha256:df69fb2ec9f1e1cf0dd94194e3c046c995ed8a7deabf65a8e9bec34662adb501",
"files": [
{
"path": "sso-mfa/k8s/keycape/test_admit_1_3_type.py",
"preimage_sha256": "sha256:c512ba00513d066fd1ca8af08fd6bf106fbd7a132981b1dcc5af80a745ab03f0",
"sha256": "sha256:2186eab00b000a534ab1452f14fa7b1a7ed352d5b27c400687c1c8ec7c4c3019"
},
{
"path": "sso-mfa/k8s/keycape/test_keycape_registration_adapter.py",
"preimage_sha256": "sha256:4d0126416522e54eec1ae4c83b5488e09ff11ffb97ec1ee6d234548780c60f63",
"sha256": "sha256:86268e082763c388528e5175184fd32362167c3441716436e4b1cab150c3e79a"
},
{
"path": "sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml",
"preimage_sha256": null,
"sha256": "sha256:7885b8c380c03ccb0198e540532ce80c791c8e86698521d7173642e0c7a56e53"
}
],
"allocation": {
"method": "repo_manager.identifiers.ensure_missing_work_record_identifiers",
"manual_uuid": false,
"preexisting_assignments": [],
"expected_new_record_ids": [
"NK-WP-0048-T35"
],
"expected_files_changed": [
"workplans/NK-WP-0048-security-case-types.md"
],
"expected_task_count": 35,
"concrete_postallocation_manifest": "publication-inputs.allocated.json"
},
"protected_files": {
".custodian-brief.md": "sha256:3eb7f91f2443090c9b859a716d83711310364897b6144dcf10d3254342fec3d1",
"WORK-RECORDS.md": "sha256:a1fec217a6e380f528778d781dbea1fc5a836fdefa1dd4dd0308100fbe08112a"
},
"validation": {
"tests": [
"sso-mfa/k8s/keycape/test_admit_1_3_type.py",
"sso-mfa/k8s/keycape/test_keycape_registration_adapter.py"
],
"expected_result": "31 passed,53 subtests passed; no skipped or deselected tests",
"python": "/tmp/warden-kernel-review-r1/final/.venv/bin/python",
"source_hashes": {
"net-kingdom": {
"sso-mfa/k8s/keycape/test_vergabe_client_rollout.py": "sha256:f9b7defc312b0fea24ded92ef479dcc8aef063f7a66a8245760918bcf44c4af1",
"sso-mfa/k8s/keycape/test_compose_1_2_descriptors.py": "sha256:9a4b9fb0141221d6e5bcb72b3656613afda54d16ede300bffa8f71956ae6fd2c",
"sso-mfa/k8s/keycape/test_keycape_client.py": "sha256:9572044679feaedfe732e15a2b6f8ef6b41a8fe2e4430257f309a3e83e97736c",
"sso-mfa/k8s/keycape/openbao-negative-node-wrapper.py": "sha256:76ac013d1a676a0dfa58aea1ce87b0c3e72483ccd21f586a22c5475e9132f6c1",
"sso-mfa/k8s/keycape/portal-client-rollout.py": "sha256:158e1d36eb881cdd0a2eda91b472adea5e8fde5061e00d26dda368580aeb871f",
"sso-mfa/k8s/keycape/test_playwright_activation.py": "sha256:6fc22d091f27a76c32d2fb0a7fc3c6e18e54ff98d242699c518b2f9dc9fd4cbd",
"sso-mfa/k8s/keycape/exercise-approval-clients.py": "sha256:e2d3dd741ac52af28dce752344227a4443b78fedd4cfcc06ba902e679dfc9351",
"sso-mfa/k8s/keycape/keycape-client.py": "sha256:4b63161cf3365d34dd684a3116e2c935baaf7f6aa4b30983f6883546db3d6591",
"sso-mfa/k8s/keycape/test_openbao_negative_session.py": "sha256:01e23f2b4fc77824a161a57acb3a52d19aad846b3b6c0fd3abd81afa1dc2985c",
"sso-mfa/k8s/keycape/authentication-policy-rollout.py": "sha256:2c1bd23fded4855bae1eb3a08dbc4510d7f60f2bc4d625d60e471ab78f6f0251",
"sso-mfa/k8s/keycape/handover-adapter.py": "sha256:bad7c1132258f2140b0d83548031ac86eecea4f4019f34adedc1e9e3774a3832",
"sso-mfa/k8s/keycape/openbao-signin-diagnosis-rollout.py": "sha256:a57b957d6eed9e8fb09d2a7aa7405a39deeafd9aaf57a9e6dc907afabd380371",
"sso-mfa/k8s/keycape/test_handover_adapter.py": "sha256:cd1fb0eb64a777699221ebdfcd6fea96bafb9b27ec388e95dcfe66189eac8ca2",
"sso-mfa/k8s/keycape/test_authentication_policy_rollout.py": "sha256:11c10039d99a34d2819b09146a966c8b7cba6095e7a8b51c055a01e7167e3ed5",
"sso-mfa/k8s/keycape/test_deliver_consumer_secret_adapter.py": "sha256:f4e6c6acd75a36f675007d2f62a7c7c4f7bfe2951cbb5e3e4cdde8b53f17f473",
"sso-mfa/k8s/keycape/bind-env-adapter.py": "sha256:fa17fae21776b5c620ee9782adf050649c3a28719a6687d2524ff67ca7ad1925",
"sso-mfa/k8s/keycape/test_keycape_checker_snapshot.py": "sha256:9271f25c760ad732c257d59d259b5c767436a2dc2d5ba24fca259bc57761d6d1",
"sso-mfa/k8s/keycape/test_openbao_signin_diagnosis_rollout.py": "sha256:25d46fe7caca2ad4c262bd2a25188c91847304b6b051c4f3b3705c69f2803f01",
"sso-mfa/k8s/keycape/test_openbao_private_ready.py": "sha256:8a7a033b1c509ba21397d1d74580c44f24592045b2b9de50fe87638607224277",
"sso-mfa/k8s/keycape/test_mint_secret_adapter.py": "sha256:8110b6a8abd8e9a1f5e1feae11ec09c4e28cb7486c759b0e8459da1fb1b7144d",
"sso-mfa/k8s/keycape/playwright-activation.py": "sha256:5ac683b3324b00e6253f6040f4c73057027b1f98f7071160a6153794ba522757",
"sso-mfa/k8s/keycape/test_admit_1_3_type.py": "sha256:2186eab00b000a534ab1452f14fa7b1a7ed352d5b27c400687c1c8ec7c4c3019",
"sso-mfa/k8s/keycape/test_openbao_node_route.py": "sha256:1c57053be6e8472174e4034fdfbf34b3e1729f5e239b3a9af89d9e59a08d6cb6",
"sso-mfa/k8s/keycape/test_secrets_engine_openbao_client_rollout.py": "sha256:e6f86fb7712c1b9c01d9b684f26d5cc949649b823d2732eced132d59acd3fe01",
"sso-mfa/k8s/keycape/openbao-client-config.py": "sha256:1b908b4c36134212d78f9fbe7a2a201eb3ced06d31bb1dcea4a59d80689d84b1",
"sso-mfa/k8s/keycape/test_registration_original_intent_reconcile.py": "sha256:e2897b8200ec97445fc4a26c55ad82651fcb1a4d22efe7fe59d0fcfc5cd8ec71",
"sso-mfa/k8s/keycape/test_ensure_groups_adapter.py": "sha256:c8754a2ba735116edc6fe257aa993d0530cea9ca9f954ea5a621e38694906be2",
"sso-mfa/k8s/keycape/test_keycape_checker_environment.py": "sha256:35f316eed168d3df588498faf24ab9377733a7d857ddfa5e0e4322a6287c93ff",
"sso-mfa/k8s/keycape/test_bind_env_adapter.py": "sha256:a1e5e7a631a4843f9a0d2310a3942b26936103d786aeae47a142ff7c7b2fdbdb",
"sso-mfa/k8s/keycape/create-secrets.py": "sha256:5da672fff36eb94101741ad99e2a1a96ae81fea15ed1871304c40e63ce27c787",
"sso-mfa/k8s/keycape/approval-clients-rollout.py": "sha256:488d5cc59e081993dd2b5fc6d9e46bbddcaec4f5170b8f7a5ad0aae3a211a790",
"sso-mfa/k8s/keycape/vergabe-client-rollout.py": "sha256:8cee6cc5ff3e3e8617304055263d04b393d0e005c34d9af12cb7e8bc685bac1a",
"sso-mfa/k8s/keycape/keycape-registration-adapter.py": "sha256:a53beea4dbbe373ce7a5b84d55e79be8407ab9688037c7ee057afcc7be576047",
"sso-mfa/k8s/keycape/compose-1.2-descriptors.py": "sha256:39021cac900b11a59d00c5a1d5491b1ee4c639955cde07d07854c3db8bc04958",
"sso-mfa/k8s/keycape/test_approval_clients_rollout.py": "sha256:745316d42c3aba6b59b562d3bbcd4b2cb92871fb5e51a954e2254e2e550bb408",
"sso-mfa/k8s/keycape/register-user-engine-portal.py": "sha256:67173edc44f5457e7b6a3e0fb2321b398159cfce5dea8ead01eabf835fb38d76",
"sso-mfa/k8s/keycape/test_issuer_pin.py": "sha256:e471ed815af246633c0b21ac2cf5cae94d0dbdeff9e6ce801b4ddd033097dc20",
"sso-mfa/k8s/keycape/openbao-negative-session.py": "sha256:24b7b803e4eb7e6e7c0700a069dad0ec315ee7eb5538a88b9e56147f8fab5cdd",
"sso-mfa/k8s/keycape/test_keycape_registration_adapter.py": "sha256:86268e082763c388528e5175184fd32362167c3441716436e4b1cab150c3e79a",
"sso-mfa/k8s/keycape/deliver-consumer-secret-adapter.py": "sha256:65db5386cdf08a1aa932886c046abed20330a36c96e63d4267adb8341b23da42",
"sso-mfa/k8s/keycape/test_portal_client_rollout.py": "sha256:a16cd4bf278970c10de2e1b1025597b3872c9515713dd947ac6b50cb78feea1f",
"sso-mfa/k8s/keycape/test_deliver_secret_adapter.py": "sha256:24cedec29071b62fc2c2458950ed244feeff542bc20a7d480667dd99cda16b03",
"sso-mfa/k8s/keycape/deliver-secret-adapter.py": "sha256:cd1a515a1ae2def2093660ed2a810a9c66d1d4cf7126f573ee7e9c4c42afb98d",
"sso-mfa/k8s/keycape/test_openbao_private_input.py": "sha256:84277edb5bd7858885173dea802b6bdc4f0f0c7785d6e200ee9a98d8553891a1",
"sso-mfa/k8s/keycape/register-coulomb-social.py": "sha256:b40ff4bdba71b797f8f393e79cb3c9d73b790045a0f7df6ecea35803369793c7",
"sso-mfa/k8s/keycape/mint-secret-adapter.py": "sha256:246323c7243ded18229ab063956577e151d56d9be485d3bd44fc38e5af0edf3c",
"sso-mfa/k8s/keycape/test_adapter_source_closure.py": "sha256:63cb442636d996fcf1c36b7b746ed860106a7da35dbaeb1c5129a41420ca4155",
"sso-mfa/k8s/keycape/secrets-engine-openbao-client-rollout.py": "sha256:8b834e5f0353a5e11797637420609e06e7bf7de47777c7e78b774f74d4a6afbd",
"sso-mfa/k8s/keycape/test_openbao_client_config.py": "sha256:7104a73fb936aca4829ef8046e39497d0b7347d3e74810f672e4d4ddc3346457",
"sso-mfa/k8s/keycape/ensure-groups-adapter.py": "sha256:6cba5b07a9262a8e0bf445dc4095ba03b31ddc15e2efbfe374e93f4f78b6aed4",
"sso-mfa/k8s/keycape/verify-user-engine-portal.py": "sha256:ccd5106395bd5d7b4f3dbbcbad449e3793aff217d4429b5d5af9e52ab9a58103",
"sso-mfa/k8s/keycape/test_playwright_registration.py": "sha256:b97ea8619ac768f520e4058aeb50b0b1e8ef6d2e9a1a0fff932a151a3d4b61ae",
"sso-mfa/k8s/keycape/playwright-registration.py": "sha256:bf2d6b83d93629df8ddaf6c31d6c7408ae3866969d63895714df0e08a570da99",
"identity-provisioner/group_provenance_postgres.py": "sha256:2a0111e83ad7b611076a1b45634e7f698b3d2e9acc473320b4a8ba009ebd0932",
"identity-provisioner/password_setup.py": "sha256:53012fc708384fc9cd0fff4f3fa5f204ab85866db91d726457dd130799e88ca0",
"identity-provisioner/provisioner.py": "sha256:19d1b837cbafeeacb1aa815856cd68091e6702281d72b1d860230fa320e1725b",
"identity-provisioner/copy-client-secret.py": "sha256:0f1907a9f16688148aede9fceb53a55cfd0504bcb8552f158d0fa77e9ad960c8",
"identity-provisioner/group_provenance.py": "sha256:405e08eaaab7c21d618dff4db5970607806f32ab6c461effb81c737e32182b10",
"identity-provisioner/server.py": "sha256:b61c83da6c7ce20fa2790d5bb00aeca6a91dccd133526bc559ed26562f90eb29",
"security-case-types/oidc-browser-relying-party/type.yaml": "sha256:f705c64e4875e9b8e18a912fb51c135e77898926d6a451f5cb74ab3c0cbe4d1c",
"security-case-type-revisions/1.2/oidc-browser-relying-party/type.yaml": "sha256:9e60ff569fb0d860a2bbde7bbb0991a54d4b0688f62b56df0fa5d161fd624578",
"security-case-type-revisions/1.3/oidc-browser-relying-party/type.yaml": "sha256:e75fe94110ef9fb7fb18072fe2856941b33507c99cb406d36576046481485d0a",
"security-case-type-revisions/1.3/oidc-browser-relying-party/examples/forgejo.yaml": "sha256:546aad5cf26842c484fc6ba99940d56697b85531afea11872556761008923c94",
"security-cases/forgejo-netkingdom-oidc.yaml": "sha256:bcc2c6d5bae0d28242b3cdb71e74d8ca297c2afe04766b55d53597f86893351d",
"sso-mfa/k8s/keycape/descriptor-composition-1.3.candidate.json": "sha256:773daa1df72cc7cf6a6d8aa082208181ca2438cdecc9179b1bc5b1c3a09099c2",
"sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml": "sha256:7885b8c380c03ccb0198e540532ce80c791c8e86698521d7173642e0c7a56e53",
"tools/security-case-types/security_case_evidence.py": "sha256:da8efa59c52ad73283397ebe639ae259d0cb9c6348b5cb829135c24230dcdc75",
"tools/security-case-types/security_case_validator.py": "sha256:1bcc62e9bc374c711363295549f3cd5bb0b32952671ed4b08fddc7f74742959b",
"tools/security-scenario-composer/security_scenario_composer.py": "sha256:9f0cc69930aa8ee2cc3fb92236e6a99728df17b8c0fe36e1250241c38fc01c4f",
"tools/playbook-capability-contract/playbook_contract_validator.py": "sha256:2e1e0c809d4bc9d64c2d974cc23fecd1c5636785154c2554edd9191852fd926d"
},
"ops-warden": {
"src/warden/ca.py": "sha256:d5282819c5d29386fd59a7dc46d1abdc01e99fc6838a1a6637f90868389fe557",
"src/warden/inventory.py": "sha256:9401db92d7cbf3bea962b97e83ef2c252a19c69ab94ce4836ba58f68638cb311",
"src/warden/memory.py": "sha256:ecf5f7ccabb669b56bfca3a109b10bbe8437bdd2ea30a47a4c08570f97d7be2a",
"src/warden/case_inputs.py": "sha256:1334b0cd9897e763cfea2d306e997c659f3f284ecc3f9612140c2104835da7c7",
"src/warden/audit.py": "sha256:6b5b8fe053064d3905294bfde1b691fcca8a0806c889e52a49494470d29c24a0",
"src/warden/case_type.py": "sha256:7b659b8d682863cd28df24025be4b10dd7ca3df724350a22d360c6af9615bca7",
"src/warden/vault.py": "sha256:860b8c9f498b3955b363a74dd74087b6d0c399599ef22b951a076ee33c95929f",
"src/warden/taint.py": "sha256:8c3d161d18d429d026aad715ac01e2d33e0f4e84ac03fbaea3cea15017ad39a1",
"src/warden/case_run.py": "sha256:1bc73e30ac718fd75bbaff2a739495fc051aeaec73802ac71f0583cb2d53ab0a",
"src/warden/vault_hints.py": "sha256:0d158ffcc3a93d5442df5fbe13d4c1e3b3159dd60301530bbdae6db9bc9c709e",
"src/warden/access.py": "sha256:258d45d2f84b54b2464373ad4d7d6df6ff95b8e8d60f5e85ceb2d962fcfa8a61",
"src/warden/clock_attribution.py": "sha256:5fcf07a2525a6a250442e14b6f6229f7db2a6ca02fc6aac23cdaa4c1a78c63eb",
"src/warden/case_plan.py": "sha256:9352ae8683d1181980c4ff38524582e4be448d33c85b558f60582c1e5bb5bbaa",
"src/warden/caller_identity.py": "sha256:747edfaceecd470981949253bda0c3bd2f487d40a9a2f77c2cc1eff3f34f04f7",
"src/warden/policy.py": "sha256:aac46f538e986731cd841581c91efe004b8c1940966b954ef635780a719dada4",
"src/warden/case_receipt_state.py": "sha256:a2cda7f187e77bd76d4d209505638de44a587fae0bc033ec75c23ee9ea9f73bc",
"src/warden/config.py": "sha256:8a857faa3811b00303d4d5c904d69255ebdaff3239e8516f97e6606e53b46924",
"src/warden/openbao_caller.py": "sha256:7e6d07827d00eae7de3b2367c97bdcda1a13d6559627201a4ba09a0e42d46a17",
"src/warden/doubles.py": "sha256:5460e07f5bd0f51a81d3f3c0ac84efde65ca9130b1039f94ee22ca484976a9de",
"src/warden/posture.py": "sha256:1bb60c4dd4634ea42cb130ae1325d7415adf43096906bde2515396c368256e33",
"src/warden/cli.py": "sha256:196cd829d3dbfbd2333598a983687bde1f9bcdfadef95b2fd1d237c4a5f060a9",
"src/warden/proxy.py": "sha256:69649bcf8979e4ed7f9104e927b458827a355c4846143367f4cd49c8b89b96da",
"src/warden/plan.py": "sha256:001b3197e644221344d52e6b1594eb8eae78d10e73d18ed31273505909f3916b",
"src/warden/worker.py": "sha256:d7c2b391b36033d44d8c6841b9bce18a05c74b41ef2910b91689820b6a1cb44e",
"src/warden/mask.py": "sha256:0876412d453fa84109dc8ee0468449f40cf4d3421b056f30fc205f0f59ec494b",
"src/warden/models.py": "sha256:f4100b02c5d96d537980e00d4b874159cd5822ba8219f1f533a2516912b7bd85",
"src/warden/__init__.py": "sha256:047e0feba479474235f0707a207655ecfddfb33cd4f54069134419b8ca4ea24a",
"src/warden/scorecard.py": "sha256:0fa5aef34aeb004fa7fcfabc287759cc47421ca5244c1f31fc467b22a653353c",
"src/warden/desk.py": "sha256:2499120392a5a1c0fd8f423d5b5c787c75a4efb9a986a1b7bcb85eae13423e85",
"src/warden/routing/scaffold.py": "sha256:5079c8e51f8d487eae3f322a66324bd70cefb637bb28f46c861032de8ec54aa2",
"src/warden/routing/models.py": "sha256:b85372b2572a49af62e9534f26a33963b894633c7cd43dd2a28416b8959cba3e",
"src/warden/routing/__init__.py": "sha256:e9124811ebe11ad32c98ab462b2eed634d4ddca08792981d0f353b223a239902",
"src/warden/routing/catalog.py": "sha256:5b95810df9e6102a33d3a116a096cd75292c8572bad721fe6baa772caacc9bc3",
"src/warden/scripts/ops_ssh_wrapper.py": "sha256:e8c289882f2ad439d2eb32f9a871967420fefaffe745c9271c1a2e948fbdfe50",
"src/warden/scripts/__init__.py": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
}
},
"repo_manager_identifiers_sha256": "sha256:4e35fcd009c20822574fd33171176bd14a1ff2dd5af8b0bb2820954974593a2a",
"authorization": "Root accepted the exact source fixture patch for source integration. This packet adds no owner/native authority or catalog/pin promotion. No prepared script has been executed.",
"publishable": false,
"requires_allocated_manifest": true,
"publication_file_paths": [
"sso-mfa/k8s/keycape/test_admit_1_3_type.py",
"sso-mfa/k8s/keycape/test_keycape_registration_adapter.py",
"sso-mfa/k8s/keycape/kernel-catalog.fixture.yaml",
"workplans/NK-WP-0048-security-case-types.md"
]
}