Record installed inert consumer and canonical runtime proof
This commit is contained in:
parent
cf59a5f9ab
commit
5a50901d9a
29 changed files with 1894 additions and 8 deletions
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"builder_repo_head": "53f800c4f7a9c91469834d04ef6f58e906b0bd49",
|
||||
"builder_last_change": "81b5fcff8e881263c885ea1a7e5c0d442f956610",
|
||||
"builder_script_sha256": "07e9a180dee4e27bb52f4ca2ba13f314ccc8f09a52155e084dc6e88c1e6c36ec",
|
||||
"execution": "existing sand-boxer builder --owner-runtime, PYTHONPATH set to clean pinned sandboxer221126 source; uv frozen/no-editable/local refresh + tracked source contents verified",
|
||||
"runtime_path": "/tmp/netkingdom-runtime-canonical-20261016/runtime",
|
||||
"native_install": false
|
||||
}
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
{
|
||||
"runtime": {
|
||||
"path": "/tmp/netkingdom-runtime-canonical-20261016/runtime",
|
||||
"sha256": "f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d"
|
||||
},
|
||||
"build": {
|
||||
"python": "3.12.3",
|
||||
"packages": {
|
||||
"h11": "0.16.0",
|
||||
"httpcore": "1.0.9",
|
||||
"llm-connect": "0.1.0",
|
||||
"fastapi": "0.141.1",
|
||||
"anyio": "4.14.2",
|
||||
"annotated-doc": "0.0.5",
|
||||
"idna": "3.18",
|
||||
"shellingham": "1.5.4",
|
||||
"certifi": "2026.7.22",
|
||||
"starlette": "1.6.0",
|
||||
"PyYAML": "6.0.3",
|
||||
"typer": "0.27.1",
|
||||
"toml": "0.10.2",
|
||||
"pydantic_core": "2.46.4",
|
||||
"sandboxer": "0.0.0",
|
||||
"typing_extensions": "4.16.0",
|
||||
"httpx": "0.28.1",
|
||||
"Pygments": "2.20.0",
|
||||
"markdown-it-py": "4.2.0",
|
||||
"pydantic": "2.13.4",
|
||||
"rich": "15.0.0",
|
||||
"rein-aharness": "0.1.0",
|
||||
"annotated-types": "0.8.0",
|
||||
"glas-harness": "0.1.0",
|
||||
"typing-inspection": "0.4.4",
|
||||
"mdurl": "0.1.2"
|
||||
},
|
||||
"claude": {
|
||||
"path": "/opt/sandboxer/runtime/bin/claude",
|
||||
"sha256": "19842705e989393fce936804df6d2ab034860e24b8f8880357981d87ffd83fac",
|
||||
"expected_version": "2.1.266",
|
||||
"source": "/home/worsch/.local/share/sandboxer/runtimes/818b1b7c8292e904a05e3f215fef9b67a61e7c00d34bfa36689352e8003df359/bin/claude"
|
||||
},
|
||||
"relocated_entrypoints": [
|
||||
"fastapi",
|
||||
"glas-harness",
|
||||
"httpx",
|
||||
"idna",
|
||||
"llm-connect",
|
||||
"markdown-it",
|
||||
"pygmentize",
|
||||
"rein-aharness",
|
||||
"sandboxer",
|
||||
"typer"
|
||||
],
|
||||
"source_revisions": {
|
||||
"rein-aharness": "9b88cadaa817e5abea7950b4a264d4e2739a5ddb",
|
||||
"llm-connect": "37436bb562a3f20abc3b88defc5bae6508c32e7e",
|
||||
"glas-harness": "7357115c8311e55ee3d495f5266f501a17ec3c89",
|
||||
"sandboxer": "221126cb77ea41ec283598a23d628f760a51bdea"
|
||||
},
|
||||
"source_contents": {
|
||||
"files_verified": 168,
|
||||
"manifest_sha256": "3c5cfd95c0accce81f59fbf06f501db238cca38975cf75d518a7c51986b28968"
|
||||
},
|
||||
"owner_runtime": true,
|
||||
"runtime_contract": {
|
||||
"dependencies": [
|
||||
{
|
||||
"clean": true,
|
||||
"commit": "37436bb562a3f20abc3b88defc5bae6508c32e7e",
|
||||
"distribution": "llm-connect",
|
||||
"version": "0.1.0"
|
||||
},
|
||||
{
|
||||
"clean": true,
|
||||
"commit": "7357115c8311e55ee3d495f5266f501a17ec3c89",
|
||||
"distribution": "glas-harness",
|
||||
"version": "0.1.0"
|
||||
},
|
||||
{
|
||||
"clean": true,
|
||||
"commit": "221126cb77ea41ec283598a23d628f760a51bdea",
|
||||
"distribution": "sandboxer",
|
||||
"version": "0.0.0"
|
||||
}
|
||||
],
|
||||
"ok": true,
|
||||
"schema_version": "1"
|
||||
},
|
||||
"uv_lock_sha256": "8775904b5c0b19aa16e09c25f7e33d1877abeef894b2d0127843c94fcff32683"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"dependencies": [
|
||||
{
|
||||
"clean": true,
|
||||
"commit": "37436bb562a3f20abc3b88defc5bae6508c32e7e",
|
||||
"distribution": "llm-connect",
|
||||
"version": "0.1.0"
|
||||
},
|
||||
{
|
||||
"clean": true,
|
||||
"commit": "7357115c8311e55ee3d495f5266f501a17ec3c89",
|
||||
"distribution": "glas-harness",
|
||||
"version": "0.1.0"
|
||||
},
|
||||
{
|
||||
"clean": true,
|
||||
"commit": "221126cb77ea41ec283598a23d628f760a51bdea",
|
||||
"distribution": "sandboxer",
|
||||
"version": "0.0.0"
|
||||
}
|
||||
],
|
||||
"ok": true,
|
||||
"schema_version": "1"
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"repo": "rein-aharness",
|
||||
"source_revision": "9b88cadaa817e5abea7950b4a264d4e2739a5ddb",
|
||||
"command": "statehub fix-consistency --repo rein-aharness --repo-path /home/worsch/rein-aharness --json",
|
||||
"result": "warn",
|
||||
"fail": 0,
|
||||
"automation_error": 0,
|
||||
"fixes_applied": [
|
||||
"bindings: synced 9/9",
|
||||
"C-17 cleared: pushed 1 backlogged commit(s)",
|
||||
"C-22 fixed: task 80318842 description updated",
|
||||
"push: pushed"
|
||||
],
|
||||
"retained_warnings": [
|
||||
"C-20 existing ACTIVITY-WP-0026 dependency unlinked",
|
||||
"C-39 existing T07 needs_human without decision_id"
|
||||
],
|
||||
"local_head_equals_origin_main": true,
|
||||
"working_tree_clean": true
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
....... [100%]
|
||||
7 passed in 0.61s
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"rein-aharness": "9b88cadaa817e5abea7950b4a264d4e2739a5ddb",
|
||||
"llm-connect": "37436bb562a3f20abc3b88defc5bae6508c32e7e",
|
||||
"glas-harness": "7357115c8311e55ee3d495f5266f501a17ec3c89",
|
||||
"sand-boxer": "221126cb77ea41ec283598a23d628f760a51bdea"
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"runtime_sha256": "sha256:f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d",
|
||||
"records_hashed": 1447,
|
||||
"method": "independent coordinator hashlib; exact owner serialization includes modes, files, directories and symlink targets",
|
||||
"after_independent_manager_proof": true,
|
||||
"native_admission": false
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
"ok": true,
|
||||
"runtime_sha256": "f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d",
|
||||
"gateway": {
|
||||
"ok": true,
|
||||
"profile": "harness.agent-dev-local@1.1.1",
|
||||
"readiness": "unverified",
|
||||
"proof": {
|
||||
"installed_packages": true,
|
||||
"host_file_denied": true,
|
||||
"inherited_env_and_child_denied": true,
|
||||
"runtime_readonly": true,
|
||||
"rein_cli_started": true,
|
||||
"glas_cli_started": true,
|
||||
"claude_version": "2.1.266",
|
||||
"loopback_only": true,
|
||||
"task_mode": "0600",
|
||||
"identity_exact": true,
|
||||
"credential_refs": [],
|
||||
"private_home": true
|
||||
},
|
||||
"task_removed_before_teardown": true,
|
||||
"workspace_removed": true,
|
||||
"state": "destroyed",
|
||||
"source_unchanged": true,
|
||||
"deterministic_commit": true,
|
||||
"model_run_proven": false
|
||||
},
|
||||
"synthetic_route_fixture": {
|
||||
"scope": "separate synthetic credential-route fixture using actual manager and gateway",
|
||||
"routes_by_owner_command": [
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[
|
||||
"synthetic"
|
||||
],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[]
|
||||
],
|
||||
"exactly_one_explicit_workload_delivery": true,
|
||||
"provider_output_redacted": true,
|
||||
"subsequent_housekeeping_clean": true,
|
||||
"workspace_removed": true,
|
||||
"readiness_changed": false
|
||||
},
|
||||
"manager": {
|
||||
"wrong_consumer_refused": {
|
||||
"actor": true,
|
||||
"project": true,
|
||||
"run_id": true
|
||||
},
|
||||
"expired_execution_refused": true,
|
||||
"expiry_cleanup": true,
|
||||
"cancellation_cleanup": true,
|
||||
"execution_after_cancellation_refused": true
|
||||
},
|
||||
"model_calls": 0,
|
||||
"real_credentials_read": false,
|
||||
"native_admission": false,
|
||||
"interactive_assignment_migrated": false
|
||||
}
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
"""Actual installed manager/gateway proof; deterministic dispatch, no model call.
|
||||
|
||||
Run using the candidate Python with -I -B. Only owner configuration directories
|
||||
are redirected to disposable fixtures; manager, gateway, bwrap, profile and
|
||||
runtime implementations are the installed, pinned code.
|
||||
"""
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from datetime import timedelta
|
||||
from pathlib import Path
|
||||
import yaml
|
||||
import sandboxer.extensions.registry as registry
|
||||
from sandboxer.extensions.runtime import runtime_digest
|
||||
from sandboxer.core.manager import SandboxManager
|
||||
from sandboxer.lifecycle.store import SandboxStore, utcnow
|
||||
from sandboxer.payments.credits import CreditsStore
|
||||
from sandboxer.snapshots.store import SnapshotStore
|
||||
from sandboxer.models import Consumer, SandboxCreateRequest, SandboxExecRequest
|
||||
from glas_harness.contract import ExecutionRequest, ToolResult
|
||||
from glas_harness.gateway import run_execution
|
||||
from glas_harness.profiles import ProfileCatalog
|
||||
from glas_harness.reins.rein_aharness import ReinAharness
|
||||
|
||||
RUNTIME = Path(sys.prefix).resolve()
|
||||
DIGEST = sys.argv[1]
|
||||
assert runtime_digest(RUNTIME) == DIGEST
|
||||
os.environ['SANDBOXER_NO_STATE_HUB'] = '1'
|
||||
DENIED = ('BAO_TOKEN','VAULT_TOKEN','AWS_SECRET_ACCESS_KEY','SSH_AUTH_SOCK')
|
||||
for key in DENIED:
|
||||
os.environ[key] = 'synthetic-inherited-only'
|
||||
|
||||
class RecordingManager(SandboxManager):
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.routes=[]
|
||||
def execute(self, sandbox_id, request):
|
||||
self.routes.append(list(request.credential_route_refs))
|
||||
return super().execute(sandbox_id, request)
|
||||
|
||||
class CredentialRein(ReinAharness):
|
||||
def dispatch_tool(self,session,tool_call):
|
||||
t=session['transport']
|
||||
for workload in (False,True,False):
|
||||
code=("import os; assert os.environ['ANTHROPIC_API_KEY']=='synthetic-provider-only'; print(os.environ['ANTHROPIC_API_KEY'])" if workload else "import os; assert 'ANTHROPIC_API_KEY' not in os.environ; print('clean')")
|
||||
result=(t.run_workload if workload else t.run)(['python3','-c',code],timeout=15)
|
||||
assert result.returncode==0, result.stderr
|
||||
assert result.stdout==('[REDACTED]\n' if workload else 'clean\n')
|
||||
result=t.run(['sh','-c',"printf 'synthetic tool effect\\n' > proof.txt"],timeout=15)
|
||||
assert result.returncode==0
|
||||
for command in (['git','add','proof.txt'],['git','commit','-q','-m','synthetic route fixture']):
|
||||
assert t.run(command,timeout=30).returncode==0
|
||||
return ToolResult(ok=True)
|
||||
|
||||
class ProofRein(ReinAharness):
|
||||
def __init__(self, source, sentinel):
|
||||
super().__init__()
|
||||
self.source, self.sentinel = source, sentinel
|
||||
self.proof, self.task_removed, self.workspace = {}, False, None
|
||||
def start_session(self, profile, inputs, sandbox):
|
||||
self.workspace = sandbox.reachability['workspace_dir']
|
||||
return super().start_session(profile, inputs, sandbox)
|
||||
def dispatch_tool(self, session, tool_call):
|
||||
code = r'''
|
||||
import json, os, subprocess, sys, stat
|
||||
from pathlib import Path
|
||||
import rein_aharness, glas_harness, sandboxer, llm_connect
|
||||
runtime = Path('/opt/sandboxer/runtime')
|
||||
assert all(Path(x.__file__).resolve().is_relative_to(runtime) for x in (rein_aharness,glas_harness,sandboxer,llm_connect))
|
||||
source, sentinel, task = map(Path, sys.argv[1:])
|
||||
assert not source.exists() and not sentinel.exists()
|
||||
assert all(x not in os.environ for x in ('BAO_TOKEN','VAULT_TOKEN','AWS_SECRET_ACCESS_KEY','SSH_AUTH_SOCK','ANTHROPIC_API_KEY'))
|
||||
child = subprocess.run(['python3','-c',"import os; assert all(k not in os.environ for k in ('BAO_TOKEN','VAULT_TOKEN','AWS_SECRET_ACCESS_KEY','SSH_AUTH_SOCK')); print('clean')"],capture_output=True,text=True)
|
||||
assert child.returncode == 0 and child.stdout == 'clean\n'
|
||||
assert stat.S_IMODE(task.stat().st_mode)==0o600
|
||||
assert json.loads(task.read_text())['max_budget_usd']==5.0
|
||||
assert os.environ['SANDBOXER_RUN_ID']=='tsa06-candidate-gateway'
|
||||
assert os.environ['SANDBOXER_ACTOR']=='agt'
|
||||
assert os.environ['SANDBOXER_PROJECT']=='tsa06-runtime-proof'
|
||||
assert json.loads(os.environ['SANDBOXER_CREDENTIAL_ROUTE_REFS']) == []
|
||||
for name in ('rein-aharness','glas-harness'):
|
||||
proc=subprocess.run([str(runtime/'bin'/name),'--help'],capture_output=True,text=True,timeout=30)
|
||||
assert proc.returncode==0 and 'usage:' in proc.stdout.lower(), name
|
||||
proc=subprocess.run([str(runtime/'bin/claude'),'--version'],capture_output=True,text=True,timeout=30)
|
||||
assert proc.returncode==0 and proc.stdout.strip()=='2.1.266 (Claude Code)'
|
||||
try: (runtime/'write-probe').write_text('refuse')
|
||||
except OSError: pass
|
||||
else: raise AssertionError('runtime writable')
|
||||
assert [x.split(':',1)[0].strip() for x in Path('/proc/net/dev').read_text().splitlines()[2:]]==['lo']
|
||||
home=Path(os.environ['HOME']); assert not home.is_relative_to(Path.cwd()); assert stat.S_IMODE(home.stat().st_mode)==0o700
|
||||
(home/'private-proof').write_text('synthetic')
|
||||
Path('proof.txt').write_text('disposable deterministic tool effect\n')
|
||||
print(json.dumps(dict(installed_packages=True,host_file_denied=True,inherited_env_and_child_denied=True,runtime_readonly=True,rein_cli_started=True,glas_cli_started=True,claude_version='2.1.266',loopback_only=True,task_mode='0600',identity_exact=True,credential_refs=[],private_home=True)))
|
||||
'''
|
||||
transport=session['transport']
|
||||
result=transport.run_workload(['python3','-c',code,str(self.source),str(self.sentinel),session['task_file']],timeout=90)
|
||||
assert result.returncode==0, result.stderr
|
||||
self.proof=json.loads(result.stdout)
|
||||
check=transport.run(['python3','-c',"import os,pathlib; assert (pathlib.Path(os.environ['HOME'])/'private-proof').is_file(); assert 'ANTHROPIC_API_KEY' not in os.environ"],timeout=15)
|
||||
assert check.returncode==0, check.stderr
|
||||
for command in (['git','add','proof.txt'],['git','commit','-q','-m','disposable deterministic proof']):
|
||||
check=transport.run(command,timeout=30)
|
||||
assert check.returncode==0, check.stderr
|
||||
return ToolResult(ok=True,output=result.stdout)
|
||||
def cleanup_session(self,session):
|
||||
super().cleanup_session(session)
|
||||
self.task_removed=session['transport'].run(['test','!','-e',session['task_file']],timeout=15).returncode==0
|
||||
assert self.task_removed
|
||||
|
||||
with tempfile.TemporaryDirectory(prefix='tsa06-manager-') as temporary:
|
||||
root=Path(temporary); source=root/'source'; source.mkdir()
|
||||
for args in (['init','-q'],['config','user.name','Disposable Proof'],['config','user.email','proof@example.invalid']):
|
||||
subprocess.run(['git','-C',str(source),*args],check=True)
|
||||
(source/'sentinel').write_text('unchanged')
|
||||
subprocess.run(['git','-C',str(source),'add','sentinel'],check=True)
|
||||
subprocess.run(['git','-C',str(source),'commit','-qm','fixture'],check=True)
|
||||
original_head=subprocess.check_output(['git','-C',str(source),'rev-parse','HEAD'])
|
||||
sentinel=root/'admin-file-synthetic'; sentinel.write_text('synthetic-file-only')
|
||||
# Owner config selects the exact artifact. No native owner config is changed.
|
||||
owner=root/'extensions'; owner.mkdir()
|
||||
extension=yaml.safe_load((registry.extensions_dir()/'ext.bwrap.yaml').read_text())
|
||||
extension['config']={'base_dir':str(root/'sandboxes'),'runtime':{'path':str(RUNTIME),'sha256':DIGEST}}
|
||||
(owner/'ext.bwrap.yaml').write_text(yaml.safe_dump(extension))
|
||||
registry._EXTENSIONS_DIR=owner
|
||||
manager=RecordingManager(store=SandboxStore(path=root/'store.json'),credits=CreditsStore(path=root/'credits.json'),snapshots=SnapshotStore(path=root/'snapshots.json'))
|
||||
catalog=ProfileCatalog(); profile,_=catalog.resolve('harness.agent-dev-local@1.1.1')
|
||||
assert profile.operational_readiness.status=='unverified' and profile.credential_route_refs==[]
|
||||
rein=ProofRein(source,sentinel)
|
||||
result=run_execution(ExecutionRequest(harness_profile_ref=str(profile.ref),repo=str(source),title='candidate runtime proof',description='deterministic no-model acceptance preparation',actor='agt',project='tsa06-runtime-proof',request_id='tsa06-candidate-gateway',report_to_hub=False),catalog=catalog,rein=rein,manager=manager)
|
||||
assert result.ok, result.tool_error
|
||||
state=manager.get(result.evidence.sandbox_id)
|
||||
assert state.state.value=='destroyed' and not Path(rein.workspace).exists() and rein.task_removed
|
||||
assert subprocess.check_output(['git','-C',str(source),'rev-parse','HEAD'])==original_head and not (source/'proof.txt').exists()
|
||||
gateway={'ok':True,'profile':str(profile.ref),'readiness':profile.operational_readiness.status,'proof':rein.proof,'task_removed_before_teardown':rein.task_removed,'workspace_removed':True,'state':state.state.value,'source_unchanged':True,'deterministic_commit':True,'model_run_proven':False}
|
||||
# Separate synthetic route fixture; profile readiness is still unchanged.
|
||||
provider=root/'provider.py'
|
||||
provider.write_text("import os,subprocess,sys\nenv={**os.environ,'ANTHROPIC_API_KEY':'synthetic-provider-only'}\nraise SystemExit(subprocess.call(sys.argv[sys.argv.index('--')+1:],env=env))\n")
|
||||
extension['config']['credential_routes']={'synthetic':{'profiles':['profile.bwrap-local'],'projects':['tsa06-route-fixture'],'actors':['agt'],'exec_argv':['/usr/bin/python3',str(provider),'--']}}
|
||||
(owner/'ext.bwrap.yaml').write_text(yaml.safe_dump(extension))
|
||||
fixture_profile=profile.model_copy(update={'credential_route_refs':['synthetic']})
|
||||
catalog.profiles()[(profile.id,profile.version)]=fixture_profile
|
||||
before=len(manager.routes)
|
||||
fixture=run_execution(ExecutionRequest(harness_profile_ref=str(profile.ref),repo=str(source),title='synthetic credential proof',description='synthetic provider only',actor='agt',project='tsa06-route-fixture',request_id='tsa06-synthetic-route',report_to_hub=False),catalog=catalog,rein=CredentialRein(),manager=manager)
|
||||
assert fixture.ok, fixture.tool_error
|
||||
fixture_routes=manager.routes[before:]
|
||||
assert fixture_routes.count(['synthetic'])==1 and all(route in ([],['synthetic']) for route in fixture_routes)
|
||||
fixture_state=manager.get(fixture.evidence.sandbox_id)
|
||||
assert fixture_state.state.value=='destroyed' and not Path(fixture_state.inputs['workspace_dir']).exists()
|
||||
route_proof={'scope':'separate synthetic credential-route fixture using actual manager and gateway','routes_by_owner_command':fixture_routes,'exactly_one_explicit_workload_delivery':True,'provider_output_redacted':True,'subsequent_housekeeping_clean':True,'workspace_removed':True,'readiness_changed':False}
|
||||
# Actual manager identity, expiry, cancellation, and execution-after-removal checks.
|
||||
consumer=Consumer(actor='agt',project='tsa06-runtime-proof',run_id='tsa06-cancel')
|
||||
status=manager.create(SandboxCreateRequest(profile=profile.sandbox_profile,inputs={'repo':str(source)},consumer=consumer),host='localhost')
|
||||
workspace=Path(status.inputs['workspace_dir'])
|
||||
try:
|
||||
refused={}
|
||||
for field,value in [('actor','adm'),('project','another-project'),('run_id','another-run')]:
|
||||
try: manager.execute(status.sandbox_id,SandboxExecRequest(command=['true'],consumer=consumer.model_copy(update={field:value})))
|
||||
except (ValueError,RuntimeError,PermissionError): refused[field]=True
|
||||
else: raise AssertionError('wrong consumer accepted: '+field)
|
||||
status.expires_at=utcnow()-timedelta(seconds=1); manager.store.save(status)
|
||||
try: manager.execute(status.sandbox_id,SandboxExecRequest(command=['true'],consumer=consumer))
|
||||
except RuntimeError as exc: assert 'expired' in str(exc)
|
||||
else: raise AssertionError('expired execution accepted')
|
||||
expiration=manager.expire(apply=True)
|
||||
assert any(x.sandbox_id==status.sandbox_id and x.action=='destroyed' for x in expiration)
|
||||
assert not workspace.exists()
|
||||
finally:
|
||||
manager.destroy(status.sandbox_id)
|
||||
cancel=manager.create(SandboxCreateRequest(profile=profile.sandbox_profile,inputs={'repo':str(source)},consumer=consumer.model_copy(update={'run_id':'tsa06-cancel-2'})),host='localhost')
|
||||
cancel_workspace=Path(cancel.inputs['workspace_dir']); manager.destroy(cancel.sandbox_id)
|
||||
assert not cancel_workspace.exists()
|
||||
try: manager.execute(cancel.sandbox_id,SandboxExecRequest(command=['true'],consumer=cancel.consumer))
|
||||
except RuntimeError: pass
|
||||
else: raise AssertionError('destroyed sandbox executed')
|
||||
print(json.dumps({'ok':True,'runtime_sha256':DIGEST,'gateway':gateway,'synthetic_route_fixture':route_proof,'manager':{'wrong_consumer_refused':refused,'expired_execution_refused':True,'expiry_cleanup':True,'cancellation_cleanup':True,'execution_after_cancellation_refused':True},'model_calls':0,'real_credentials_read':False,'native_admission':False,'interactive_assignment_migrated':False},indent=2))
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# Browser acceptance dependency checkpoint
|
||||
|
||||
NK-WP-0048 source repair, 16 October 2026. Source commit `015694e`.
|
||||
|
||||
The current owner-local blocker was a contract mismatch: Warden's existing
|
||||
`execution_descriptors` map was forbidden by NetKingdom's closed JSON schema,
|
||||
while NetKingdom's Python validator silently accepted malformed map values.
|
||||
That would prevent valid future descriptor source integration and could crash
|
||||
the evidence compatibility path. The repair adds the optional bounded exact-byte
|
||||
pin map to the schema and semantic validation, binds keys to declared steps, and
|
||||
makes the direct evidence API refuse malformed maps. It supplies no descriptors,
|
||||
owner acknowledgment, admission callback or execution authority.
|
||||
|
||||
Validation: 21 new contract checks; all 127 affected tests pass in an isolated
|
||||
checkout and canonical owner source. The canonical run reports two read-only
|
||||
pytest cache warnings. Focused diff whitespace checking passes. The normal Git
|
||||
scanner accepted all six committed files. Existing staged brief and unrelated
|
||||
changes are preserved. Exact base/file hashes and preserved type/case hashes are
|
||||
in `validation.json`; `implementation.patch` retains the source repair.
|
||||
|
||||
The workplan now records completed checker source (T10), completed pin-contract
|
||||
repair (T11), and the independently actionable next source task: NetKingdom-owned
|
||||
attended registration/config/env/group adapters or receipt-only steps (T12).
|
||||
T06 retains native acceptance and T07 remains dependent. This records outcomes
|
||||
without counting fixtures as operational proof.
|
||||
|
||||
The first browser case still lacks exact independently admitted owner descriptors
|
||||
and adapters, authenticated native structural/status-binding receipts for all six
|
||||
1.2 objects, exact broker/case source reconciliation, separately authorized
|
||||
mint/delivery, attended registry/group execution, real human sign-in and denied
|
||||
groups, revocation and created-only rollback. Canonical 1.1 remains acknowledged
|
||||
with its historical accepted case; 1.2 remains acknowledged with a proposed case.
|
||||
Ordinary admission refuses both unimplemented types. TSA-04 and TSA-05 remain open.
|
||||
No credentials, live security changes or other owner's assent were requested.
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"observed_at": "2026-10-16T19:26:32.083837+00:00",
|
||||
"commit": "015694ee414c802dc2ef1fa0120dfed610086e69",
|
||||
"exact_committed_files_verified": [
|
||||
"canon/schemas/security-case-type_v0.1.schema.json",
|
||||
"tools/security-case-types/security_case_validator.py",
|
||||
"tools/security-case-types/security_case_evidence.py",
|
||||
"tools/security-case-types/README.md",
|
||||
"tools/security-case-types/tests/test_descriptor_pins.py",
|
||||
"workplans/NK-WP-0048-security-case-types.md"
|
||||
],
|
||||
"origin_ancestry_verified": true,
|
||||
"independent_test_command": "python3 -m pytest -q -p no:cacheprovider tools/security-case-types/tests/test_descriptor_pins.py",
|
||||
"independent_passed": 21,
|
||||
"native_acceptance": false
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"schema": "netkingdom.browser-source-checkpoint.v1",
|
||||
"source_base": "8ae5150d4d43c8dd39175f0ba260198a3c022843",
|
||||
"changed_files": {
|
||||
"canon/schemas/security-case-type_v0.1.schema.json": "313bc162c1d1ea44895d14a2db9d56b89e48a274f0ff7dba23d72c861e452556",
|
||||
"tools/security-case-types/security_case_validator.py": "1bcc62e9bc374c711363295549f3cd5bb0b32952671ed4b08fddc7f74742959b",
|
||||
"tools/security-case-types/security_case_evidence.py": "da8efa59c52ad73283397ebe639ae259d0cb9c6348b5cb829135c24230dcdc75",
|
||||
"tools/security-case-types/README.md": "27bcc2f341a80f034f61ab7a5f317117dabc833d415ad58a93526c7639da3e9d",
|
||||
"tools/security-case-types/tests/test_descriptor_pins.py": "e3b6fe077f4a74bd3458d19b105797da339d1fdbc6dab71079e75111da2f2fb4",
|
||||
"workplans/NK-WP-0048-security-case-types.md": "47453bdd6743f3a02676bda4c21b15985dc446e4733ad92ab192a21a71b7bb61"
|
||||
},
|
||||
"unchanged_case_type_files": {
|
||||
"security-case-types/oidc-browser-relying-party/type.yaml": "f705c64e4875e9b8e18a912fb51c135e77898926d6a451f5cb74ab3c0cbe4d1c",
|
||||
"security-cases/forgejo-netkingdom-oidc.yaml": "bcc2c6d5bae0d28242b3cdb71e74d8ca297c2afe04766b55d53597f86893351d",
|
||||
"security-case-type-revisions/1.2/oidc-browser-relying-party/type.yaml": "9e60ff569fb0d860a2bbde7bbb0991a54d4b0688f62b56df0fa5d161fd624578",
|
||||
"security-case-type-revisions/1.2/oidc-browser-relying-party/examples/forgejo.yaml": "1c868c1da7d9077fae97bc6bc029706ec3dc418cfeaae30dc0f92b5b4ba6f2ab"
|
||||
},
|
||||
"tests": {
|
||||
"new_pin_contract": 21,
|
||||
"affected_suite": 127
|
||||
},
|
||||
"reproduced_original_gap": {
|
||||
"python_accepts_valid_pin": true,
|
||||
"schema_refuses_valid_pin": "additionalProperties",
|
||||
"python_accepts_list_instead_of_map": true
|
||||
},
|
||||
"native_complete": false,
|
||||
"execution_permitted": false,
|
||||
"knowledge_package": {
|
||||
"version": "0.2.6",
|
||||
"digest": "8d1d6a9d4d07fec7b619618de7dfe2be2254c1790f85f4198c7fe19db9751c02",
|
||||
"status": "withheld; source reviewed directly"
|
||||
},
|
||||
"source_commit": "015694ee414c802dc2ef1fa0120dfed610086e69",
|
||||
"canonical_suite": {
|
||||
"passed": 127,
|
||||
"warnings": "two pytest cache writes refused by canonical read-only filesystem",
|
||||
"native_acceptance": false
|
||||
},
|
||||
"publication": {
|
||||
"remote_main": "015694ee414c802dc2ef1fa0120dfed610086e69",
|
||||
"staged_scanner": "clean; six blobs",
|
||||
"receive_scanner": "clean; fourteen objects / one ref",
|
||||
"preexisting_staging_preserved": [
|
||||
".custodian-brief.md"
|
||||
],
|
||||
"projection_sync": "coordinating final combined owner sync with root; no index mutation by this worker"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"schema": "custodian.netkingdom-checkpoint-publication.v1",
|
||||
"commit": "cf59a5f9aba994058adfde57bbaa37b93c4b6ebe",
|
||||
"head_equals_origin_main": true,
|
||||
"normal_command": "statehub fix-consistency --repo the-custodian --repo-path /home/worsch/the-custodian --no-writeback --json",
|
||||
"exit_code": 0,
|
||||
"summary": {
|
||||
"fail": 0,
|
||||
"automation_error": 0,
|
||||
"warn": 7,
|
||||
"info": 4
|
||||
},
|
||||
"fixes_applied": [
|
||||
"bindings: synced 89/89",
|
||||
"C-17 cleared: pushed 1 backlogged commit(s)",
|
||||
"C-22 fixed: task 6aca534c\u2026 description updated",
|
||||
"push: pushed"
|
||||
],
|
||||
"source_revision_reason": "dirty_workplans",
|
||||
"scope": "25 public metadata/preflight/owner-review artifacts; followup implementation/workplan edits were still uncommitted at this first publication.",
|
||||
"original_staged_brief_and_worktree_restored": true,
|
||||
"initial_commit_refusal": "Public source hashes triggered unchanged scanner; typed SHA-256 formatting preserved values and passed. Original refusal and hashes retained.",
|
||||
"no_scanner_bypass": true,
|
||||
"native_gate_completion": false
|
||||
}
|
||||
|
|
@ -0,0 +1,370 @@
|
|||
{
|
||||
"providers": 60,
|
||||
"entries": 71,
|
||||
"errors": 0,
|
||||
"warnings": 0,
|
||||
"results": [
|
||||
{
|
||||
"repo": "access-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "activity-core",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "agentic-resources",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "approval-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "audit-core",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "coordination-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "emergent-security",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "fin-hub",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "gate-house",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "glas-harness",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "info-tech-canon",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "informed-decision",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "issue-core",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "key-cape",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "kings-guard",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "maturity-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "net-kingdom",
|
||||
"entries": 6,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "ops-bridge",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "ops-mason",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "ops-warden",
|
||||
"entries": 3,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "policy-nexus",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rail-knative",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rail-kubernetes",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-apps",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-bootstrap",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-cluster",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-enablement",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-fabric",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-forge",
|
||||
"entries": 2,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-infra",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-master",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-platform",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "railiance-telemetry",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rapp-openbao",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rapp-playwright",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rapp-policy-nexus",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rapp-postgres",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rapp-sbom-nexus",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rapp-telemetry",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rapp-tenant-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rapp-user-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "reef-railiance",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rein-aharness",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "rein-openweights",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "repo-manager",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "resource-control",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "reuse-surface",
|
||||
"entries": 3,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "risk-nexus",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "role-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "runbook-tutorials",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "sand-boxer",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "sbom-nexus",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "security-canon",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "state-hub",
|
||||
"entries": 2,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "tenant-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "the-custodian",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "user-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "whitehat-security",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
},
|
||||
{
|
||||
"repo": "zone-engine",
|
||||
"entries": 1,
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
}
|
||||
],
|
||||
"scope": "Current canonical native validator function across all reviewed provider roots; not hosted refresh or native capability acceptance",
|
||||
"retained_probe_refinement": "First coordinator invocation used incorrect function arguments and produced no validation result; corrected to inspected signature."
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"observed_at": "2026-10-16T19:25:10.598961+00:00",
|
||||
"url": "https://reuse.coulomb.social/v1/federated?refresh=true",
|
||||
"composed_at": "2026-10-16T19:25:11+00:00",
|
||||
"stale": false,
|
||||
"federation_warnings": null,
|
||||
"total": 114,
|
||||
"reviewed": 70,
|
||||
"reviewed_exactly_once_correct_owner": true,
|
||||
"errors": [],
|
||||
"corrected_fields": [
|
||||
{
|
||||
"id": "capability.security.bootstrap-recovery",
|
||||
"summary_equal": true,
|
||||
"tags_equal": true,
|
||||
"hosted_summary": "Guarded bootstrap custody, encrypted identity backup capture, independent retrieval and isolated recovery verification."
|
||||
},
|
||||
{
|
||||
"id": "capability.railiance.bootstrap-sequencing",
|
||||
"summary_equal": true,
|
||||
"tags_equal": true,
|
||||
"hosted_summary": "Bare-VM to estate sequence and handoff contract."
|
||||
}
|
||||
],
|
||||
"scope": "Discovery/index parity only; no runtime acceptance or maturity promotion."
|
||||
}
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
{
|
||||
"source_commits": {
|
||||
"reuse-surface": "dd00b27b4ce77180b01c5756c2a3841819fcac76",
|
||||
"net-kingdom": "49ddde451a69818b9558654fbc7d5744a80777fb",
|
||||
"railiance-bootstrap": "6927f5ec6406fd975530f469d949901d968c1afb"
|
||||
},
|
||||
"record_commits": {
|
||||
"reuse-surface": "01af18964b170eaa87f8560ce9285518e8dc6d7e",
|
||||
"railiance-bootstrap": "8d23103af2d5ff0da4eb5f612ea2bf09d8ff7344",
|
||||
"net-kingdom": "3223039 (normal concurrent identifier assignment)"
|
||||
},
|
||||
"new_cli_tests": 23,
|
||||
"root_independent_checks": "30 parity/native-registry checks passed across 27 initial passing tests and 3 required filesystem-approved reruns; sandbox write failures retained.",
|
||||
"malformed_regression_scope": [
|
||||
"index schema is not validated before _check_index_drift; validate mappings/list/string id/path before Counter",
|
||||
"availability null/list: do not call .get on nonmapping",
|
||||
"null/list frontmatter: retain parser failure, no projection traceback",
|
||||
"malformed YAML frontmatter/index: normal validation error"
|
||||
],
|
||||
"normal_publication": {
|
||||
"reuse_initial": {
|
||||
"exit": 0,
|
||||
"fail": 0,
|
||||
"automation_error": 0,
|
||||
"warn": 8,
|
||||
"source_pushed": true
|
||||
},
|
||||
"net-kingdom": {
|
||||
"exit": 0,
|
||||
"fail": 0,
|
||||
"automation_error": 0,
|
||||
"warn": 26,
|
||||
"source_pushed": true
|
||||
},
|
||||
"bootstrap_initial": {
|
||||
"exit": 1,
|
||||
"fail": 11,
|
||||
"automation_error": 0,
|
||||
"warn": 38,
|
||||
"source_pushed": true
|
||||
},
|
||||
"reuse_final": {
|
||||
"source_revision": "01af18964b170eaa87f8560ce9285518e8dc6d7e",
|
||||
"summary": {
|
||||
"fail": 0,
|
||||
"automation_error": 0,
|
||||
"warn": 7,
|
||||
"info": 0
|
||||
},
|
||||
"result": "warn",
|
||||
"fixes_applied": [
|
||||
"bindings: synced 27/27",
|
||||
"C-17 cleared: pushed 1 backlogged commit(s)",
|
||||
"C-22 fixed: task 63c0e025\u2026 description updated",
|
||||
"push: pushed"
|
||||
]
|
||||
},
|
||||
"bootstrap_final": {
|
||||
"source_revision": "8d23103af2d5ff0da4eb5f612ea2bf09d8ff7344",
|
||||
"summary": {
|
||||
"fail": 11,
|
||||
"automation_error": 0,
|
||||
"warn": 36,
|
||||
"info": 0
|
||||
},
|
||||
"result": "fail",
|
||||
"fixes_applied": [
|
||||
"bindings: synced 12/12",
|
||||
"C-17 cleared: pushed 1 backlogged commit(s)",
|
||||
"push: pushed"
|
||||
]
|
||||
}
|
||||
},
|
||||
"limits": "No production deployment, model spend, credential access or external messages. Root independently refreshed/read hosted federation after normal source publication. This bounded parity/uniqueness repair does not close all TSA-11 requirements or the TSA-12 runtime schedule.",
|
||||
"preserved_state": {
|
||||
"net-kingdom_brief": "Exact original staged blob/mode and worktree restored after observed post-sync hash/index race checks. Other staging untouched.",
|
||||
"net-kingdom_work_records": "Current file preserved amid concurrent recovery owner sync; original preimage retained in /tmp/netkingdom-discovery-preexisting-state.",
|
||||
"test_generated_outputs": "Six originally clean Reuse graph/catalog/federation outputs restored after checks; no generated test output staged.",
|
||||
"guard_refusal": "Automatic brief-only commit refusals retained without bypass. Generated brief/WORK-RECORDS changes may remain from normal sync."
|
||||
},
|
||||
"hosted_readback": {
|
||||
"root_receipt": "coordinator-hosted-refresh.json",
|
||||
"composed_at": "2026-10-16T19:25:11+00:00",
|
||||
"reviewed_exactly_once": 70,
|
||||
"reviewed_correct_owner": 70,
|
||||
"cohort_local_errors": 0,
|
||||
"cohort_local_warnings": 0,
|
||||
"both_owner_metadata_corrections_match_entries": true,
|
||||
"warning_header": null
|
||||
},
|
||||
"ci_readback": {
|
||||
"status": "unverified",
|
||||
"public_actions_api_http_status": 404,
|
||||
"receipt": "public-ci-readback.json"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
# KeyCape recovery acceptance next — 2026-10-16
|
||||
|
||||
Published owner source: key-cape `3c71226a1a7b8a2bdb710e9c497e1a1f7f8a3987`
|
||||
(`origin/main` matched after push). Only KEY-WP-0040 changed; preexisting staged
|
||||
`.custodian-brief.md` and unstaged `WORK-RECORDS.md` remain outside this commit.
|
||||
The patch is retained alongside this note.
|
||||
|
||||
KEY-WP-0040-T02 did **not** still need publication: the founder's October15
|
||||
release of image `cdec9dd7…` from `8c6c071` already includes `205a1c0`, the help
|
||||
link. Corrected the stale source-only statements by dated reconciliation with
|
||||
references to `key-cape/docs/operations.md` and KEY-WP-0041-T02. Existing
|
||||
user-engine attended procedure now has an exact resume point in KEY-WP-0040:
|
||||
observe the OTP link, then use platform-root's own fresh AAL2 session to preview
|
||||
tegwick through the supported recovery form. A changed factor must be reconciled,
|
||||
not forced to the historical suffix. T01 and T02 remain progress, and U08 remains
|
||||
open until the attended audited recovery, replacement enrollment and fresh login.
|
||||
No authenticated preview or factor change was performed.
|
||||
|
||||
Validation: 20 existing recovery tests passed; source ancestry confirms
|
||||
`205a1c0` is in `8c6c071`; exact-file diff check passed. These are preparation
|
||||
checks, not estate acceptance. Required `statehub fix-consistency --repo key-cape
|
||||
--repo-path /home/worsch/key-cape --no-writeback --json` exited0, synced44/44
|
||||
bindings, reported zero failures/automation errors and eight warnings (existing
|
||||
classification/legacy task/dependency/inbox issues). It did not write statuses
|
||||
back into the preexisting owner work.
|
||||
|
||||
## Exact dependency for NetKingdom T18
|
||||
|
||||
Use the existing shipped `keycape verify-client` and `keycape login`, documented
|
||||
in `key-cape/docs/native-authentication.md`; do not add a second verifier.
|
||||
`src/internal/authclient/verify.go` is the authoritative CLI/check contract.
|
||||
|
||||
The isolated restore owner must supply privately:
|
||||
|
||||
- The exact admitted archive/manifest/image/target lineage; original signing key,
|
||||
KeyCape config, client secret deliveries, authentication policy store and
|
||||
receipt store. Compare archive identity/integrity privately; do not copy their
|
||||
contents into this evidence directory.
|
||||
- An isolated transport preserving the **original HTTPS issuer hostname**, trust
|
||||
and same-origin discovery/token/JWKS endpoints, with only reviewed internal
|
||||
dependency routes. These commands offer no insecure TLS or plainHTTP bypass.
|
||||
Restored config must not accidentally reach production LDAP/Authelia/privacyIDEA,
|
||||
tenant-engine, notification or consumer endpoints. `/readyz` checks LDAP,
|
||||
Authelia, privacyIDEA and the factor reader; `/healthz` proves only process life.
|
||||
- A selected already-registered current service consumer with original private
|
||||
secret delivered to the command environment and exact client ID, audience,
|
||||
requested scopes, expected subject/tenant/roles and denied scope. No new
|
||||
registration or grant. `verify-client` emits bounded PASS/FAIL lines and exits
|
||||
nonzero on failure; it keeps JWTs in memory. Preserve results, not token bodies.
|
||||
- For human/browser continuity, selected existing owner-held account/factor,
|
||||
existing approved public-PKCE client/callback and a private browser route.
|
||||
`keycape login` writes private token output outside Git; it is not the OpenBao
|
||||
login command. T19 actual retained-token MFA still gates the selected flow.
|
||||
|
||||
`verify-client` proves issuance/JWKS/claim/scope behavior for its named
|
||||
registration. It does not compare the complete archived registry, policy and
|
||||
receipt identity, demonstrate an actual downstream consumer reconnect, or prove
|
||||
human MFA. Its optional `-previous-secret-env` is specifically a predecessor
|
||||
rotation check, not evidence that recovery rotated a secret. The native isolated
|
||||
adapter must separately demonstrate explicit wrong-secret refusal and selected
|
||||
consumer outcomes without exporting secrets, and capture public signing-key
|
||||
fingerprint, exact-source/target binding, registry/policy/receipt comparison
|
||||
booleans, isolation and cleanup. A discovery or TLS failure is not wrong-secret
|
||||
refusal. All are required before T18 closes.
|
||||
|
||||
No isolated KeyCape restore adapter exists in the inspected current NetKingdom
|
||||
recovery toolchain. Its archive/containment integration belongs to NetKingdom,
|
||||
with KeyCape/consumer owner acceptance. This work did not fabricate that assent,
|
||||
read keys/credentials, execute credential exchange, or make production changes.
|
||||
|
||||
## Current recovery boundary
|
||||
|
||||
The fresh NetKingdom `actual-isolated-privacyidea-review.json` accepts T20 stored
|
||||
row audit continuity and T31 retained-token-material readback (five token
|
||||
materials;279209 historical signatures; no unsigned/invalid rows). This is
|
||||
stronger than the older archive-only summary. Its explicit
|
||||
`existing_token_mfa_proven:false` remains binding: T19 actual existing-token MFA,
|
||||
T17 Authelia authentication/storage and T18 KeyCape/consumer continuity remain
|
||||
open. Stored-signature continuity does not claim event completeness.
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"schema": "custodian.keycape-recovery-acceptance-next.v1",
|
||||
"date": "2026-10-16",
|
||||
"owner_commit": "3c71226a1a7b8a2bdb710e9c497e1a1f7f8a3987",
|
||||
"published": true,
|
||||
"source_tests": {
|
||||
"existing_recovery_unittests_passed": 20,
|
||||
"estate_acceptance": false
|
||||
},
|
||||
"gate_status": {
|
||||
"KEY-WP-0040-T01": "progress; actual authenticated preview pending",
|
||||
"KEY-WP-0040-T02": "progress; published, attended OTP link observation pending",
|
||||
"NK-WP-0049-T18": "wait; isolated adapter, consumer owner proof and T19 pending",
|
||||
"NK-WP-0049-T19": "wait; real retained-token MFA pending",
|
||||
"NK-WP-0049-T20": "done per current independent owner receipt",
|
||||
"NK-WP-0049-T31": "done per current independent owner receipt"
|
||||
},
|
||||
"credentials_accessed": false,
|
||||
"production_mutated": false,
|
||||
"live_acceptance_claimed": false,
|
||||
"sources": [
|
||||
{
|
||||
"path": "key-cape/workplans/KEY-WP-0040-mfa-attended-run-findings.md",
|
||||
"sha256": "c213d8ad5ef2471d1ab8672502b561b9fee84b110575366c09148add83ad9d79"
|
||||
},
|
||||
{
|
||||
"path": "key-cape/docs/operations.md",
|
||||
"sha256": "e68ec32073b7731214308ccd2fceb522d934b00f1d76e6d438e2870030497cfc"
|
||||
},
|
||||
{
|
||||
"path": "key-cape/workplans/KEY-WP-0041-sign-in-diagnosis-page.md",
|
||||
"sha256": "7e44f46acd6b3942c1852b49e0d64b205dfd7d9bb378aed5241b1bf22d7ce88a"
|
||||
},
|
||||
{
|
||||
"path": "key-cape/docs/native-authentication.md",
|
||||
"sha256": "378a5fa8174580bde811b716ec8e987339013b9f8d7725cb398fa3b9f8d95655"
|
||||
},
|
||||
{
|
||||
"path": "key-cape/src/internal/authclient/verify.go",
|
||||
"sha256": "804735be927ba7d0228ac378056730040d3ccf2ed020b4da0714085bae972f25"
|
||||
},
|
||||
{
|
||||
"path": "net-kingdom/docs/identity-service-restore-packet.md",
|
||||
"sha256": "6cdcbd113c58b7f0baef327f00caad03a641e81076d1fb06874fad9923ab6d90"
|
||||
},
|
||||
{
|
||||
"path": "net-kingdom/docs/evidence/2026-10-16-identity-outage-recovery/actual-isolated-privacyidea-review.json",
|
||||
"sha256": "39d274ce99bb8c89281899821a5674d3ef5bbb35f824623cd2c4e08493f85cad"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"schema": "secrets-engine.inert-local-prekey-install.v1",
|
||||
"observed_at": "2026-10-16T19:01:36.301727+00:00",
|
||||
"installer_runner_sha256": "sha256:64fb4746aead56d7ddd45af17c38d2b6a45e3e7123b94d216d748741c9d18dec",
|
||||
"owner_review_sha256": "sha256:76eca7bc884bf4e5985330bcb0fbe3ff4a544fd4e5fc9367dbe306483069ec38",
|
||||
"baseline_sha256": "sha256:72521ff7729f8ddf5176092f3949cd50ac5f9241b0a5d1d30f3c63ce1d83091b",
|
||||
"install_receipt": {
|
||||
"admission": "artifact integrity only; trust and keys not admitted",
|
||||
"helper_sha256": "ed922b62533e4d33ae2d5f11175111f6f28e684a19e63ac704d43b63f0e0e12e",
|
||||
"launcher_sha256": "f642944e23b2379e870cce68758c2ba42a3d7b16a52948e9ac1a826301c9a1c9",
|
||||
"manifest_sha256": "105dcebe6f03e9799f91ea75175e20500df2aa7f08b5e32d39c1c367593ca47e",
|
||||
"prefix": "/home/worsch/.local/share/secrets-engine/releases/4dd004a22501-105dcebe6f03",
|
||||
"schema": "secrets-engine.cli-install.v1"
|
||||
},
|
||||
"configuration_parent": "/home/worsch/.config/secrets-engine/native-lifecycle/lifecycle-20261016-pre-key-r1",
|
||||
"configuration_files_sha256": {
|
||||
"catalog/activity-core-metered-worker-token.yaml": "sha256:67d6235bbf6e28b7d1392ff26fd13ce4933843d11407a8fe2b1c793b3748a1f5",
|
||||
"catalog/email-connect-transactional.yaml": "sha256:7869e96a7fca4c508f8a2a11a9b614db8c8a4100c2402597bde48a06aef77f97",
|
||||
"catalog/example-build-test-token.yaml": "sha256:6e2396af8c711c10a5af83edb3925227c251e82d16a5d5a7b7a87948e2229f54",
|
||||
"catalog/forgejo-admin-api-token.yaml": "sha256:193e231c5dbc175e82614fe35092ab649cf4152878f2679332b37888f176a991",
|
||||
"catalog/glas-claude-agent-dev-anthropic.yaml": "sha256:61f40b124d937516b18b77b3ae3253079f024f4522191e22a81fae3d859abb63",
|
||||
"catalog/issue-core-ingestion-api-key.yaml": "sha256:401b8c7a57d3e9a54e98711387577ecc6fc0674f2e32759a5c675e1d4adf176f",
|
||||
"catalog/openrouter-llm-connect.yaml": "sha256:3d46e4896aa3b2a9838f72d4f2e3b1afc9deb2c7b1be0c62ae1900eb9cb1713b",
|
||||
"catalog/reuse-surface-hub-write-token.yaml": "sha256:6f2ab0e31ba71bffb5d48b8ac787dee52b73f865af1c9f155d5046067a841111",
|
||||
"catalog/warden-sign.yaml": "sha256:54a9ec01bf87fa3cc6ab75fa6c818c4977f2f70800a16890a836a509ad5c73c9",
|
||||
"catalog/whynot-design-npm-publish.yaml": "sha256:18ada66f109a5532462b70b4d213bb73c7ab2e0ef9a4a2a149b7f9fcd77b034f",
|
||||
"environment.proposed.json": "sha256:78a19a1a33f1faf61353ce674048826c89c45e84f15467992fca347679c4908d",
|
||||
"pep-stance.yaml": "sha256:969ffd12506e2954c273e19ed6505692c1bacbe97a262a85862793254263e737",
|
||||
"policies/netkingdom-publication-scope.yaml": "sha256:018000cb29edf7707f3885bec2f54285adef1e5a71c749b6b7ab6044203de89b",
|
||||
"policies/secrets-engine-build.hcl": "sha256:ec5ce1987fbf2818f1ecd612d280cc419990dce12f85d7f5f38b621f4f9dbf69",
|
||||
"policies/secrets-engine-prod.hcl": "sha256:1d12ca47e4f3ab234370ddfadad2aca8ae0943d95833798be5af0ea09860c6ce",
|
||||
"policies/secrets-engine-test.hcl": "sha256:53c1d4146116784ba0024cc2c9f318e6443471ee97b7b1d2056ea840eb4ff6f6",
|
||||
"trust/lifecycle-pre-key.json": "sha256:5f01b418cccef03326c424a1de649a4bde42811aa1e2041a6d0417c8d65a3f6a"
|
||||
},
|
||||
"configuration_files_mode": "0600",
|
||||
"new_directories_mode": "0700",
|
||||
"evidence_root": "/home/worsch/.local/state/secrets-engine/native-lifecycle/lifecycle-20261016-r1",
|
||||
"installed_cli_help": true,
|
||||
"proof": {
|
||||
"catalog_rows": 10,
|
||||
"empty_key_refusal_before_caller_or_socket": true,
|
||||
"backend_configured": false,
|
||||
"approval_configured": false
|
||||
},
|
||||
"source_files_checked": 53,
|
||||
"caller_created": false,
|
||||
"native_key_admitted": false,
|
||||
"protected_effect_authority": false,
|
||||
"same_uid_code_isolation_established": false
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"initial_sandbox_preflight": "refused root/home UID65534 mapping; no writes",
|
||||
"host_preflight": "passed after required filesystem escalation with unchanged owner checks",
|
||||
"actual_install": "passed using normal reviewed installer and filesystem escalation",
|
||||
"same_uid_isolation": false
|
||||
}
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
"""One-off coordinator installation of the selected inert public CLI/config.
|
||||
|
||||
Uses the existing owner installer. No caller, key admission or backend access.
|
||||
"""
|
||||
import datetime
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import stat
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
ROOT = Path('/home/worsch/the-custodian')
|
||||
WAVE = ROOT / 'docs/changes/netkingdom-target-2026-10-16'
|
||||
REVIEW = WAVE / 'secrets-native-admission-next'
|
||||
SOURCE = WAVE / 'decision-native-preparation/consumer-admission-r1'
|
||||
BUNDLE = Path('/tmp/secrets-native-cli-4dd004a-one')
|
||||
MANIFEST = '105dcebe6f03e9799f91ea75175e20500df2aa7f08b5e32d39c1c367593ca47e'
|
||||
BASELINE = '72521ff7729f8ddf5176092f3949cd50ac5f9241b0a5d1d30f3c63ce1d83091b'
|
||||
|
||||
def sha(path):
|
||||
return hashlib.sha256(path.read_bytes()).hexdigest()
|
||||
|
||||
def controlled_chain(path):
|
||||
for item in reversed((path, *path.parents)):
|
||||
if not os.path.lexists(item):
|
||||
continue
|
||||
s = item.lstat()
|
||||
assert stat.S_ISDIR(s.st_mode), f'non-directory parent: {item}'
|
||||
assert s.st_uid in (0, 1000) and not s.st_mode & 0o022, f'uncontrolled parent: {item}'
|
||||
|
||||
def make_parents(path):
|
||||
controlled_chain(path)
|
||||
missing = []
|
||||
item = path
|
||||
while not item.exists():
|
||||
missing.append(item)
|
||||
item = item.parent
|
||||
for item in reversed(missing):
|
||||
item.mkdir(mode=0o700)
|
||||
controlled_chain(path)
|
||||
|
||||
assert os.getuid() == os.getgid() == 1000
|
||||
assert sha(SOURCE / 'consumer-baseline.json') == BASELINE
|
||||
baseline = json.loads((SOURCE / 'consumer-baseline.json').read_bytes())
|
||||
assert sha(BUNDLE / 'manifest.json') == MANIFEST
|
||||
manifest = json.loads((BUNDLE / 'manifest.json').read_bytes())
|
||||
assert (BUNDLE / 'manifest.json').read_bytes() == (WAVE / 'decision-native-preparation/r2/canonical-bundle-manifest.json').read_bytes()
|
||||
assert not BUNDLE.is_symlink() and BUNDLE.stat().st_uid == 1000 and stat.S_IMODE(BUNDLE.stat().st_mode) == 0o700
|
||||
assert {str(p.relative_to(BUNDLE)) for p in BUNDLE.rglob('*') if p.is_file()} == set(manifest['artifacts']) | {'manifest.json'}
|
||||
for name, expected in manifest['artifacts'].items():
|
||||
p = BUNDLE / name
|
||||
assert not any(x.is_symlink() for x in (p, *p.parents))
|
||||
assert sha(p) == expected, name
|
||||
for name, expected in manifest['source_files'].items():
|
||||
assert sha(Path('/home/worsch/secrets-engine') / name) == expected, name
|
||||
assert sha(BUNDLE / 'install.py') == sha(Path('/home/worsch/secrets-engine/scripts/install_release_bundle.py'))
|
||||
files = baseline['configuration']['files_sha256']
|
||||
for name, expected in files.items():
|
||||
p = SOURCE / 'configuration' / name
|
||||
assert not any(x.is_symlink() for x in (p, *p.parents))
|
||||
assert sha(p) == expected.removeprefix('sha256:'), name
|
||||
assert json.loads((SOURCE / 'configuration/trust/lifecycle-pre-key.json').read_bytes())['keys'] == {}
|
||||
prefix = Path(baseline['release']['prefix'])
|
||||
config = Path(baseline['configuration']['parent'])
|
||||
evidence = Path(baseline['configuration']['evidence_root'])
|
||||
for path in (prefix, config, evidence):
|
||||
controlled_chain(path.parent)
|
||||
assert not os.path.lexists(path), f'selected destination already exists: {path}'
|
||||
review = json.loads((REVIEW / 'owner-review.json').read_bytes())
|
||||
assert review['disposition'] == 'select-exact-public-source-bundle-and-empty-key-configuration-for-preparatory-install'
|
||||
assert review['native_key_admission'] is False and review['effect_authority'] is False
|
||||
if sys.argv[1:] == ['--check']:
|
||||
print(json.dumps({'preflight': 'pass', 'source_files': len(manifest['source_files']), 'public_configuration_files': len(files), 'fresh_destinations': True, 'controlled_parent_chains': True}))
|
||||
raise SystemExit(0)
|
||||
assert sys.argv[1:] == ['--install']
|
||||
os.umask(0o077)
|
||||
for path in (prefix, config, evidence):
|
||||
make_parents(path.parent)
|
||||
env = {'PATH': '/usr/bin:/bin', 'UV_CACHE_DIR': tempfile.mkdtemp(prefix='secrets-prekey-install-cache-')}
|
||||
|
||||
def checked(argv):
|
||||
result = subprocess.run(argv, cwd='/tmp', env=env, capture_output=True, text=True, timeout=120)
|
||||
if result.returncode:
|
||||
raise RuntimeError(f'public installation/proof command failed, exit {result.returncode}; partial prefixes retained')
|
||||
return result.stdout
|
||||
|
||||
installed = json.loads(checked(['/usr/bin/python3', str(BUNDLE / 'install.py'), '--bundle', str(BUNDLE), '--prefix', str(prefix), '--manifest-sha256', MANIFEST, '--python', '/usr/bin/python3', '--uv', '/home/worsch/.local/bin/uv']))
|
||||
config.mkdir(mode=0o700)
|
||||
evidence.mkdir(mode=0o700)
|
||||
for name in files:
|
||||
destination = config / name
|
||||
make_parents(destination.parent)
|
||||
fd = os.open(destination, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600)
|
||||
with os.fdopen(fd, 'wb') as output:
|
||||
output.write((SOURCE / 'configuration' / name).read_bytes())
|
||||
s = destination.lstat()
|
||||
assert s.st_uid == 1000 and stat.S_IMODE(s.st_mode) == 0o600
|
||||
assert sha(destination) == files[name].removeprefix('sha256:')
|
||||
help_output = checked([str(prefix / 'bin/secrets-engine'), '--help'])
|
||||
probe = '''import json,os,pathlib,sys
|
||||
from secrets_engine.config import Config
|
||||
from secrets_engine.catalog import load_catalog
|
||||
from secrets_engine.approval_consume import authorize_action
|
||||
from secrets_engine.errors import DecisionError
|
||||
env=json.loads(pathlib.Path(sys.argv[1]).read_bytes());os.environ.update(env)
|
||||
events=[]
|
||||
def refuse_io(event,args):
|
||||
if event.startswith('socket.') or (event=='open' and str(args[0])==env['SECRETS_ENGINE_PDP_TOKEN_FILE']):
|
||||
events.append(event);raise RuntimeError('credential/network access forbidden during inert proof')
|
||||
sys.addaudithook(refuse_io)
|
||||
cfg=Config.load();catalog=load_catalog(cfg.catalog_dir)
|
||||
assert cfg.bao_addr==cfg.approval_url==''
|
||||
try:authorize_action(cfg,None,'apply')
|
||||
except DecisionError as exc:
|
||||
assert str(exc)=='access-engine responder trust is missing or invalid'
|
||||
assert str(exc.__cause__)=='missing admitted keys'
|
||||
else:raise AssertionError('empty trust accepted')
|
||||
assert not events and len(catalog)==10
|
||||
print(json.dumps({'catalog_rows':len(catalog),'empty_key_refusal_before_caller_or_socket':True,'backend_configured':False,'approval_configured':False}))
|
||||
'''
|
||||
proof = json.loads(checked([str(prefix / 'venv/bin/python'), '-I', '-B', '-c', probe, str(config / 'environment.proposed.json')]))
|
||||
receipt = {'schema': 'secrets-engine.inert-local-prekey-install.v1', 'observed_at': datetime.datetime.now(datetime.timezone.utc).isoformat(), 'installer_runner_sha256': 'sha256:' + sha(Path(__file__)), 'owner_review_sha256': 'sha256:' + sha(REVIEW / 'owner-review.json'), 'baseline_sha256': 'sha256:' + BASELINE, 'install_receipt': installed, 'configuration_parent': str(config), 'configuration_files_sha256': files, 'configuration_files_mode': '0600', 'new_directories_mode': '0700', 'evidence_root': str(evidence), 'installed_cli_help': bool(help_output), 'proof': proof, 'source_files_checked': len(manifest['source_files']), 'caller_created': False, 'native_key_admitted': False, 'protected_effect_authority': False, 'same_uid_code_isolation_established': False}
|
||||
(REVIEW / 'actual-prekey-install.json').write_text(json.dumps(receipt, indent=2) + '\n')
|
||||
print(json.dumps({'installed': str(prefix), 'configuration': str(config), 'public_files': len(files), 'proof': proof, 'receipt': str(REVIEW / 'actual-prekey-install.json')}))
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"schema": "secrets-engine.inert-install-integration.v1",
|
||||
"selection_commit": "a4f1802b720b64f2b47483fbd597902bd4c354f5",
|
||||
"actual_install_record_commit": "535681052cd55ca613706ecc60c39d299929b3c5",
|
||||
"normal_publication": "both commits pushed successfully; remote scanner clean4objects each",
|
||||
"normal_commit_scanner": "both explicit-path commits clean1blob each",
|
||||
"actual_install_receipt_sha256": "sha256:1ab9c271dfb236f09c4528ae18897381f5e404541708bf36f50c41c77d183ba0",
|
||||
"owner_checkout_modified_only": "existing WP14 work-record; unrelated WORK-RECORDS.md retained; normal fix-consistency regenerated existing brief",
|
||||
"native_assent": false,
|
||||
"native_key_admission": false,
|
||||
"effect_authority": false,
|
||||
"native_effects_accepted": 0,
|
||||
"sites": 11,
|
||||
"handlers": 10,
|
||||
"first_sync": "pass with known WP13 lifecycle drift and old inbox warnings; T03description synced; generated-only brief commit refused without bypass",
|
||||
"second_sync": "pass:0automation-error,0assessment-fail,4warn,1info;16/16bindings and T03description synced; known WP13proposed/active drift and old inbox warnings retained; generated-only brief commit rejected without bypass; push completed",
|
||||
"progress_receipt_id": "7b2994e5-2a37-4687-b197-bbb4e9e57686",
|
||||
"unrelated_owner_status_after_commits": "M .custodian-brief.md (preexisting staged, normal consistency regeneration); M WORK-RECORDS.md (preexisting unstaged), no other owner changes"
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"schema": "secrets-engine.public-preparatory-install-owner-selection.v1",
|
||||
"disposition": "select-exact-public-source-bundle-and-empty-key-configuration-for-preparatory-install",
|
||||
"reviewer_role": "secrets-engine-owner-reviewer",
|
||||
"owner_head": "3718e60d7385db091d3423352f44e922863087de",
|
||||
"owner_work_record": "workplans/SECRETS-WP-0014-pdp-transport-and-responder-authentication.md",
|
||||
"owner_work_record_preimage_sha256": "sha256:2951cb7876801eff74af121c5d948c03f82ef53f25812e656342333e7561acb6",
|
||||
"patch_sha256": "sha256:938fa7de2e1bc42ac919815f519637c39a7ccf1cd65ce4b2de3640c71bd63472",
|
||||
"canonical_write_performed": false,
|
||||
"native_owner_assent_supplied": false,
|
||||
"native_key_admission": false,
|
||||
"actual_home_install_performed": false,
|
||||
"effect_authority": false,
|
||||
"runtime_defect_found": false,
|
||||
"corrected_stale_finding": "ConsumerR1 historical P1/failed400 image warning is superseded for exact PlatformP4/AccessR2 source join only; old bytes and review evidence preserved.",
|
||||
"current_owner_dirty_state": "Pre-existing staged .custodian-brief.md and unstaged WORK-RECORDS.md retained; neither modified.",
|
||||
"unchanged_gates": [
|
||||
"WP14T02 progress",
|
||||
"WP14T03 wait",
|
||||
"TSA01 open",
|
||||
"TSA02 open",
|
||||
"TSA03 open",
|
||||
"effect acceptance0/11 across10handlers"
|
||||
],
|
||||
"public_only": true
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"result": "pass",
|
||||
"public_source_files_verified": 53,
|
||||
"consumer_manifest_sha256": "sha256:7f4a49064b459a3b087943a00241eb9f744e3768f5c4139d1821d799ff2e584a",
|
||||
"platform_p4_manifest_sha256": "sha256:9eec861838a8e9138f2c821cff3014998fbe74bb01447642bf50d44e8b3b7cb3",
|
||||
"access_r2_manifest_sha256": "sha256:5be7a7f438624dcb35b7dbc96e7c9e5a8e2d5d1b1966cb4338aa5aecbe3a8b59",
|
||||
"baseline_sha256": "sha256:72521ff7729f8ddf5176092f3949cd50ac5f9241b0a5d1d30f3c63ce1d83091b",
|
||||
"bundle_manifest_sha256": "sha256:105dcebe6f03e9799f91ea75175e20500df2aa7f08b5e32d39c1c367593ca47e",
|
||||
"disposable_prefix": "/tmp/secrets-owner-preparation-r9dkqm6h/installed",
|
||||
"install_receipt": {
|
||||
"admission": "artifact integrity only; trust and keys not admitted",
|
||||
"helper_sha256": "ed922b62533e4d33ae2d5f11175111f6f28e684a19e63ac704d43b63f0e0e12e",
|
||||
"launcher_sha256": "d8fa2d1cacd5a1fd2924848c6b24f147cb61fc46b19feafd6845dee3adc22f96",
|
||||
"manifest_sha256": "105dcebe6f03e9799f91ea75175e20500df2aa7f08b5e32d39c1c367593ca47e",
|
||||
"prefix": "/tmp/secrets-owner-preparation-r9dkqm6h/installed",
|
||||
"schema": "secrets-engine.cli-install.v1"
|
||||
},
|
||||
"installed_cli_help": true,
|
||||
"baseline_probe": {
|
||||
"empty_trust_refusal": "before caller or socket access",
|
||||
"catalog_rows": 10,
|
||||
"backend_address": "",
|
||||
"approval_url": ""
|
||||
},
|
||||
"existing_prefix_refused": true,
|
||||
"current_owner_runtime_matches_bundle_sources": true,
|
||||
"consumer_platform_access_joins": "pass",
|
||||
"native_install": false,
|
||||
"key_or_credential_read_or_mint": false,
|
||||
"native_assent_created": false,
|
||||
"native_effects_accepted": 0,
|
||||
"native_effect_sites": 11,
|
||||
"handlers": 10,
|
||||
"retained_harness_failure": "First minimal PATH omitted uv; installer refused before venv creation and marked partial /tmp prefix. Corrected harness selects the existing explicit uv binary and uses a fresh disposable prefix. No runtime patch or retry into failed prefix.",
|
||||
"uv_binary": "/home/worsch/.local/bin/uv",
|
||||
"access_offline_tool_sha256": "sha256:33d3c50aba51b85cf85d2e234268e903004894299efc9b3745e0980c55578280",
|
||||
"access_api_sign_and_receipt_tool_diff_2b064ee_to_image84c78e0": "empty; exact git diff checked",
|
||||
"owner_work_record_patch_apply_check": "pass; canonical owner files unchanged"
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"schema": "custodian.netkingdom-source-wave.v1",
|
||||
"observed_at": "2026-10-16T18:28:18.107141+00:00",
|
||||
"observed_at": "2026-10-16T19:30:27.788551+00:00",
|
||||
"coordinator": "CUST-WP-0080-T06",
|
||||
"source_slices": [
|
||||
{
|
||||
|
|
@ -341,6 +341,110 @@
|
|||
"native_accepted": false,
|
||||
"receipt": "platform-signer-custody/native-owner-boundary-r5/canonical-integration.json",
|
||||
"patch_sha256": "sha256:43264f13da5ff20267dea424a7c7d8d911f7601edca6871f31394e0c292fcd59"
|
||||
},
|
||||
{
|
||||
"repo": "access-engine",
|
||||
"slice": "access-native-plan-review-next",
|
||||
"commit": "d328a2601095686f74376d87791bff01e2a3a2a3",
|
||||
"receipt": "access-native-plan-review-next/integration-receipt.json",
|
||||
"native_accepted": false,
|
||||
"published": true
|
||||
},
|
||||
{
|
||||
"repo": "railiance-platform",
|
||||
"slice": "platform-native-plan-review-next",
|
||||
"commit": "08c1f036f2750097750f435efd76e8f6ee6df393",
|
||||
"receipt": "platform-native-plan-review-next/publication-receipt.json",
|
||||
"native_accepted": false,
|
||||
"published": true
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"slice": "inert-native-package-selection",
|
||||
"commit": "a4f1802b720b64f2b47483fbd597902bd4c354f5",
|
||||
"receipt": "secrets-native-admission-next/integration.json",
|
||||
"native_accepted": false,
|
||||
"published": true
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"slice": "inert-native-package-install",
|
||||
"commit": "535681052cd55ca613706ecc60c39d299929b3c5",
|
||||
"receipt": "secrets-native-admission-next/integration.json",
|
||||
"native_accepted": false,
|
||||
"published": true
|
||||
},
|
||||
{
|
||||
"repo": "rein-aharness",
|
||||
"slice": "canonical-combined-runtime",
|
||||
"commit": "9b88cadaa817e5abea7950b4a264d4e2739a5ddb",
|
||||
"receipt": "agent-isolation-next/canonical-publication.json",
|
||||
"native_accepted": false,
|
||||
"published": true
|
||||
},
|
||||
{
|
||||
"repo": "net-kingdom",
|
||||
"slice": "browser-descriptor-pin-contract",
|
||||
"commit": "015694ee414c802dc2ef1fa0120dfed610086e69",
|
||||
"receipt": "browser-acceptance-next/validation.json",
|
||||
"published": true,
|
||||
"native_accepted": false
|
||||
},
|
||||
{
|
||||
"repo": "reuse-surface",
|
||||
"slice": "native-index-parity",
|
||||
"commit": "dd00b27b4ce77180b01c5756c2a3841819fcac76",
|
||||
"published": true,
|
||||
"native_accepted": false,
|
||||
"receipt": "source-wave12-coordinator-review.json"
|
||||
},
|
||||
{
|
||||
"repo": "reuse-surface",
|
||||
"slice": "native-index-parity-record",
|
||||
"commit": "01af18964b170eaa87f8560ce9285518e8dc6d7e",
|
||||
"published": true,
|
||||
"native_accepted": false,
|
||||
"receipt": "source-wave12-coordinator-review.json"
|
||||
},
|
||||
{
|
||||
"repo": "railiance-bootstrap",
|
||||
"slice": "owner-index-parity",
|
||||
"commit": "6927f5ec6406fd975530f469d949901d968c1afb",
|
||||
"published": true,
|
||||
"native_accepted": false,
|
||||
"receipt": "source-wave12-coordinator-review.json"
|
||||
},
|
||||
{
|
||||
"repo": "railiance-bootstrap",
|
||||
"slice": "owner-index-parity-record",
|
||||
"commit": "8d23103af2d5ff0da4eb5f612ea2bf09d8ff7344",
|
||||
"published": true,
|
||||
"native_accepted": false,
|
||||
"receipt": "source-wave12-coordinator-review.json"
|
||||
},
|
||||
{
|
||||
"repo": "net-kingdom",
|
||||
"slice": "owner-recovery-index-parity",
|
||||
"commit": "49ddde451a69818b9558654fbc7d5744a80777fb",
|
||||
"published": true,
|
||||
"native_accepted": false,
|
||||
"receipt": "source-wave12-coordinator-review.json"
|
||||
},
|
||||
{
|
||||
"repo": "railiance-cluster",
|
||||
"slice": "native-runtime-storage-plan-review",
|
||||
"commit": "cac8eabef5a0d0990a7b0de8f5e2c762666ac7f0",
|
||||
"published": true,
|
||||
"native_accepted": false,
|
||||
"receipt": "source-wave12-coordinator-review.json"
|
||||
},
|
||||
{
|
||||
"repo": "key-cape",
|
||||
"slice": "published-recovery-journey-reconciliation",
|
||||
"commit": "3c71226a1a7b8a2bdb710e9c497e1a1f7f8a3987",
|
||||
"published": true,
|
||||
"native_accepted": false,
|
||||
"receipt": "source-wave12-coordinator-review.json"
|
||||
}
|
||||
],
|
||||
"integrity_note": "Canonical owner commits are the durable source. Raw patches and temporary reconstructions are workspace-local review artifacts; their hashes retain revision identity. No runtime admission follows from these commits.",
|
||||
|
|
@ -350,7 +454,8 @@
|
|||
"Historical (resolved by Access B1 reconciliation): Access initial State Hub timeout preserved; retry succeeded38/38 but T05/T06 indexing needs second pass after reopened workplan.",
|
||||
"Generated-only writeback commit refusals retained; no scanner bypass.",
|
||||
"Platform scanner ref race retried through normal owner sync after review.",
|
||||
"Historical (resolved by Access B1 reconciliation): Access follow-up task-index repair timed out again; producer source remains published. Owner admission preparation also tracks qualified wait metadata."
|
||||
"Historical (resolved by Access B1 reconciliation): Access follow-up task-index repair timed out again; producer source remains published. Owner admission preparation also tracks qualified wait metadata.",
|
||||
"Bootstrap source/binding publication succeeded; normal consistency retains 11 preexisting validation failures and 36 warnings, 0 automation errors. Reuse public CI API returned404; no CI success inferred."
|
||||
],
|
||||
"remaining_critical_path": [
|
||||
"Admit independently approved signer custody/public trust, actual stopped fence and PV retention, consumer bundle/config/caller; verified image and local draft package are preparation evidence",
|
||||
|
|
@ -359,10 +464,11 @@
|
|||
"Actual browser identity/case, agent isolation, runner isolation, independent service recovery and all sixteen TSA gates"
|
||||
],
|
||||
"canonical_receipt_verification": {
|
||||
"checked_at": "2026-10-16T18:28:18.107141+00:00",
|
||||
"scope": "two new source slices plus cluster own-review work record",
|
||||
"all_commit_file_hashes_match": true,
|
||||
"checked_at": "2026-10-16T19:21:15.121893+00:00",
|
||||
"scope": "five new owner source/work-record commits; exact committed files hashed and origin ancestry verified",
|
||||
"all_commits_ancestor_of_origin_main": true,
|
||||
"native_acceptance": false
|
||||
"native_acceptance": false,
|
||||
"receipt": "source-wave11-coordinator-review.json",
|
||||
"additional_review": "source-wave12-coordinator-review.json"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,112 @@
|
|||
{
|
||||
"schema": "custodian.netkingdom-checkpoint-review.v1",
|
||||
"observed_at": "2026-10-16T19:21:15.121893+00:00",
|
||||
"published_owner_commits": [
|
||||
{
|
||||
"repo": "access-engine",
|
||||
"slice": "access-native-plan-review-next",
|
||||
"commit": "d328a2601095686f74376d87791bff01e2a3a2a3",
|
||||
"receipt": "access-native-plan-review-next/integration-receipt.json",
|
||||
"ancestor_of_origin_main": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "workplans/FLEX-WP-0024-decision-envelope-authenticity.md",
|
||||
"committed_sha256": "sha256:cc94a493c23c16a3baa718b75ef5d48a596c6386c11534d50fd4839a6f0448f2"
|
||||
}
|
||||
],
|
||||
"native_accepted": false
|
||||
},
|
||||
{
|
||||
"repo": "railiance-platform",
|
||||
"slice": "platform-native-plan-review-next",
|
||||
"commit": "08c1f036f2750097750f435efd76e8f6ee6df393",
|
||||
"receipt": "platform-native-plan-review-next/publication-receipt.json",
|
||||
"ancestor_of_origin_main": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "credential-change-requests/CCR-2026-0050-flex-auth-envelope-signing.yaml",
|
||||
"committed_sha256": "sha256:66b3ea12d3f3bb870fa0aa0e7598e32abdb9bf39efe1adcfac286407abeb98e4"
|
||||
},
|
||||
{
|
||||
"path": "docs/evidence/2026-10-16-flex-auth-native-plan-public-supplement.json",
|
||||
"committed_sha256": "sha256:f02a9b595d9246a358d19b37bdad8fde158b7f0c9657a6ff088874732511a32c"
|
||||
},
|
||||
{
|
||||
"path": "docs/evidence/2026-10-16-flex-auth-native-plan-review.json",
|
||||
"committed_sha256": "sha256:3a2b4e8a410ffa241540afcd25c1dc2036eab93f433feeaa7708bda9f2175f20"
|
||||
},
|
||||
{
|
||||
"path": "workplans/RPF-WP-0035-credential-lane-implementation.md",
|
||||
"committed_sha256": "sha256:139e4a6dd53f02cd184ebb12a5c30bcbfd0993cf9fdf1f42a1aa27b0823f32cf"
|
||||
}
|
||||
],
|
||||
"native_accepted": false
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"slice": "inert-native-package-selection",
|
||||
"commit": "a4f1802b720b64f2b47483fbd597902bd4c354f5",
|
||||
"receipt": "secrets-native-admission-next/integration.json",
|
||||
"ancestor_of_origin_main": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "workplans/SECRETS-WP-0014-pdp-transport-and-responder-authentication.md",
|
||||
"committed_sha256": "sha256:2712d3a4a4e551851645e5d4d79ebe41e5786bad334b1b709b85004690862eb2"
|
||||
}
|
||||
],
|
||||
"native_accepted": false
|
||||
},
|
||||
{
|
||||
"repo": "secrets-engine",
|
||||
"slice": "inert-native-package-install",
|
||||
"commit": "535681052cd55ca613706ecc60c39d299929b3c5",
|
||||
"receipt": "secrets-native-admission-next/integration.json",
|
||||
"ancestor_of_origin_main": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "workplans/SECRETS-WP-0014-pdp-transport-and-responder-authentication.md",
|
||||
"committed_sha256": "sha256:6cb4ec3500cddd5156235f1a493d7a979227a6b04eb037bacd23073fd1328efe"
|
||||
}
|
||||
],
|
||||
"native_accepted": false
|
||||
},
|
||||
{
|
||||
"repo": "rein-aharness",
|
||||
"slice": "canonical-combined-runtime",
|
||||
"commit": "9b88cadaa817e5abea7950b4a264d4e2739a5ddb",
|
||||
"receipt": "agent-isolation-next/canonical-publication.json",
|
||||
"ancestor_of_origin_main": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "deploy/runtime-contract-lock.json",
|
||||
"committed_sha256": "sha256:c01a46e66eccac750407b863ef0379bfeaa658886fe8bad4b952fcede7360816"
|
||||
},
|
||||
{
|
||||
"path": "workplans/REINAH-WP-0008-simpler-metered-retry.md",
|
||||
"committed_sha256": "sha256:9aac375bdb2e93c57cd513ab8cd5bf0c0979a0699ea0181e6d405899d906bf68"
|
||||
}
|
||||
],
|
||||
"native_accepted": false
|
||||
}
|
||||
],
|
||||
"native_gate_completion": false,
|
||||
"scope": "Bounded owner plan reviews, actual inert public package installation, canonical isolated runtime proof and public native preflight. No live signer/caller/trust admission or protected effect.",
|
||||
"evidence": {
|
||||
"native-preflight-r1/coordinator-review.json": "sha256:aa16de21f4018b433ac1497a0d637a6b852dbb1df17a15001597566fd32a3396",
|
||||
"native-preflight-r1/cluster-native-plan-review.json": "sha256:76e5e3c10cf62d93c801c08f0275f84cd523010f58a7c5db595dee2081ffa572",
|
||||
"access-native-plan-review-next/access-native-plan-review.json": "sha256:5f49b9d703b3b0c050be8b45a97aab07b0b3af13e9ce56139f886e88a0dc740d",
|
||||
"access-native-plan-review-next/execution-supplement.md": "sha256:2622cf68d33f5e5f4ede68655c250f70a8132ed03cb4b7c33bdbeec86100e25d",
|
||||
"platform-native-plan-review-next/owner-review.json": "sha256:3a2b4e8a410ffa241540afcd25c1dc2036eab93f433feeaa7708bda9f2175f20",
|
||||
"platform-native-plan-review-next/actual-public-supplement.json": "sha256:f02a9b595d9246a358d19b37bdad8fde158b7f0c9657a6ff088874732511a32c",
|
||||
"secrets-native-admission-next/actual-prekey-install.json": "sha256:1ab9c271dfb236f09c4528ae18897381f5e404541708bf36f50c41c77d183ba0",
|
||||
"agent-isolation-next/coordinator-canonical-manager-proof.json": "sha256:1fc6b0c79939ea4706ff786e4cd040ab2385850a4617325681234bed7c3414c3",
|
||||
"agent-isolation-next/coordinator-canonical-digest.json": "sha256:6c9dea5c1597c41d13b01c5b91196cbb2126b44090772d2cf481503467dd24de"
|
||||
},
|
||||
"publication_refinement": {
|
||||
"reason": "unchanged secret scanner flagged public source digest metadata",
|
||||
"original_blob": "327447b9e476ea8344cc3bad62da33736eb63c3d",
|
||||
"typed_digest_values_verified_unchanged": true,
|
||||
"receipt": "access-native-plan-review-next/formatting-successor.json",
|
||||
"scanner_bypass": false
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
{
|
||||
"schema": "custodian.netkingdom-followup-review.v1",
|
||||
"observed_at": "2026-10-16T19:30:27.788551+00:00",
|
||||
"owner_commits": [
|
||||
{
|
||||
"repo": "reuse-surface",
|
||||
"slice": "native-index-parity",
|
||||
"commit": "dd00b27b4ce77180b01c5756c2a3841819fcac76",
|
||||
"origin_ancestry_verified": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "reuse_surface/cli.py",
|
||||
"committed_sha256": "sha256:85a5ca4c5a431ae6a1d780bb8b3958514937b128d21351f3224a236013fcdec8"
|
||||
},
|
||||
{
|
||||
"path": "tests/test_index_parity.py",
|
||||
"committed_sha256": "sha256:c2654667b6f0f07ee52d8c4bffabdcaab16495275dcc00b9160f314dbef2200c"
|
||||
},
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-10-16.md",
|
||||
"committed_sha256": "sha256:7c25f5601b1aee06881950b225751787e09035de5d2479625c65eaa7cf4371e7"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "reuse-surface",
|
||||
"slice": "native-index-parity-record",
|
||||
"commit": "01af18964b170eaa87f8560ce9285518e8dc6d7e",
|
||||
"origin_ancestry_verified": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-10-16.md",
|
||||
"committed_sha256": "sha256:0b347785d69eab2b7ed2db9f6722767b02a66becb20bcd95ebcce89d9ffbb3fe"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "railiance-bootstrap",
|
||||
"slice": "owner-index-parity",
|
||||
"commit": "6927f5ec6406fd975530f469d949901d968c1afb",
|
||||
"origin_ancestry_verified": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "registry/indexes/capabilities.yaml",
|
||||
"committed_sha256": "sha256:45100a7bb78307cad88a4face63044d0cbe20e98eb809e934c00c3049b0df843"
|
||||
},
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-10-16.md",
|
||||
"committed_sha256": "sha256:7218ac1c7b817857cf8700869600b816e94a274d72afef2af42ca71f8ad70577"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "railiance-bootstrap",
|
||||
"slice": "owner-index-parity-record",
|
||||
"commit": "8d23103af2d5ff0da4eb5f612ea2bf09d8ff7344",
|
||||
"origin_ancestry_verified": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-10-16.md",
|
||||
"committed_sha256": "sha256:38d8af75a52472875972ca6aebdb61b1cec15c64049efe024e1a9310ed6601e6"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "net-kingdom",
|
||||
"slice": "owner-recovery-index-parity",
|
||||
"commit": "49ddde451a69818b9558654fbc7d5744a80777fb",
|
||||
"origin_ancestry_verified": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "registry/indexes/capabilities.yaml",
|
||||
"committed_sha256": "sha256:8e49ab9ea2c1fff10b70bab4fc279ad144f2295ef61fea3ef5a1873360410919"
|
||||
},
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-10-16.md",
|
||||
"committed_sha256": "sha256:ccf9f9a04ce54e05365beae13b37d0c8e9c5972d50eed9f347ab39702a13bed4"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "railiance-cluster",
|
||||
"slice": "native-runtime-storage-plan-review",
|
||||
"commit": "cac8eabef5a0d0990a7b0de8f5e2c762666ac7f0",
|
||||
"origin_ancestry_verified": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md",
|
||||
"committed_sha256": "sha256:76810b497e04548e3b22a28973303198f25aba5b47847e24b69024f8d07e39b7"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "key-cape",
|
||||
"slice": "published-recovery-journey-reconciliation",
|
||||
"commit": "3c71226a1a7b8a2bdb710e9c497e1a1f7f8a3987",
|
||||
"origin_ancestry_verified": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "workplans/KEY-WP-0040-mfa-attended-run-findings.md",
|
||||
"committed_sha256": "sha256:c213d8ad5ef2471d1ab8672502b561b9fee84b110575366c09148add83ad9d79"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"hosted_readback": "improvement-loop-next/coordinator-hosted-refresh.json",
|
||||
"browser_source_review": "browser-acceptance-next/coordinator-review.json",
|
||||
"keycape_owner_receipt": "recovery-acceptance-next/result.json",
|
||||
"native_gate_completion": false,
|
||||
"external_recovery_evidence": {
|
||||
"path": "net-kingdom/docs/evidence/2026-10-16-identity-outage-recovery/actual-isolated-privacyidea-review.json",
|
||||
"sha256": "sha256:39d274ce99bb8c89281899821a5674d3ef5bbb35f824623cd2c4e08493f85cad",
|
||||
"accepted_owner_tasks": [
|
||||
"NK-WP-0049-T20",
|
||||
"NK-WP-0049-T31"
|
||||
],
|
||||
"remaining": [
|
||||
"existing-token MFA",
|
||||
"Authelia service continuity",
|
||||
"KeyCape service and consumer continuity",
|
||||
"event completeness"
|
||||
]
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue