docs: preserve reviewed NetKingdom session artifacts
Some checks are pending
CI Smoke / host-smoke (push) Waiting to run
CI Smoke / container-smoke (push) Waiting to run
Reject generated-only commits / generated-commit-guard (push) Waiting to run

This commit is contained in:
codex 2026-11-01 23:28:44 +01:00
parent 403e218dec
commit c7bd0a17dd
50 changed files with 4566 additions and 0 deletions

View file

@ -0,0 +1,71 @@
#!/usr/bin/env python3
"""Deterministic public-runtime transfer; no runtime launch or network access."""
import argparse
import gzip
import hashlib
import importlib.util
import io
import json
import os
from pathlib import Path
import stat
import tarfile
ROOT = Path('/tmp/netkingdom-runtime-canonical-20261016/runtime')
EXPECTED = 'f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d'
HERE = Path(__file__).resolve().parent
class CountingHash:
def __init__(self, target=None):
self.target, self.hash, self.size = target, hashlib.sha256(), 0
def write(self, value):
self.hash.update(value); self.size += len(value)
if self.target: self.target.write(value)
return len(value)
def flush(self):
if self.target: self.target.flush()
def runtime_module():
p = HERE/'runtime.py'
spec = importlib.util.spec_from_file_location('reviewed_runtime_digest', p)
module = importlib.util.module_from_spec(spec); spec.loader.exec_module(module)
return module
def build(target=None):
if runtime_module().runtime_digest(ROOT) != EXPECTED:
raise ValueError('source_runtime_changed')
result = CountingHash(target); logical = 0; members = 0
with gzip.GzipFile(filename='', mode='wb', compresslevel=6, mtime=0, fileobj=result) as stream:
with tarfile.open(fileobj=stream, mode='w|', format=tarfile.PAX_FORMAT) as archive:
for p in [ROOT, *sorted(ROOT.rglob('*'))]:
s=p.lstat(); name='runtime' + ('/'+p.relative_to(ROOT).as_posix() if p!=ROOT else '')
info=tarfile.TarInfo(name);info.uid=1000;info.gid=1000;info.mtime=0;info.mode=stat.S_IMODE(s.st_mode)
if stat.S_ISDIR(s.st_mode):info.type=tarfile.DIRTYPE
elif stat.S_ISLNK(s.st_mode):
info.type=tarfile.SYMTYPE; info.linkname=os.readlink(p)
if Path(info.linkname).is_absolute() or not p.resolve(strict=True).is_relative_to(ROOT):
raise ValueError('unsafe_runtime_symlink')
elif stat.S_ISREG(s.st_mode):info.type=tarfile.REGTYPE; info.size=s.st_size; logical += s.st_size
else:raise ValueError('runtime_special_file')
with p.open('rb') if stat.S_ISREG(s.st_mode) else io.BytesIO() as data:
archive.addfile(info,data if stat.S_ISREG(s.st_mode) else None)
members+=1
if runtime_module().runtime_digest(ROOT) != EXPECTED:
raise ValueError('source_runtime_changed_during_archive')
return {'sha256':'sha256:'+result.hash.hexdigest(),'bytes':result.size,'logical_file_bytes':logical,'members':members,
'format':'gzip mtime0; PAX tar; sorted tree; root runtime; UID/GID1000; modes and relative symlinks retained'}
def main():
parser=argparse.ArgumentParser(description=__doc__);parser.add_argument('--output',type=Path)
args=parser.parse_args()
if args.output:
with args.output.open('xb') as stream:result=build(stream)
else:result=build()
print(json.dumps(result,sort_keys=True))
if __name__=='__main__':main()

View file

@ -0,0 +1,31 @@
#!/usr/bin/env python3
"""Conditional cleanup only when the durable receipt proves exec never started."""
import argparse,json,shlex,subprocess
from pathlib import Path
HERE=Path(__file__).resolve().parent
def main():
p=argparse.ArgumentParser(description=__doc__);p.add_argument('--apply',action='store_true');args=p.parse_args()
receipt=json.loads((HERE/'execution-receipt.json').read_text())
if not (receipt.get('status')=='staging_created' and receipt.get('phase')=='before_transfer'
and receipt.get('proposal_id')=='REINAH-WP-0008-T07-install-f599-r1'):
raise ValueError('not_a_preexecution_upload_failure')
inode=receipt['staging_identity']['inode']
if not args.apply:
print(json.dumps({'status':'conditional_cleanup_review','inode':inode,'native_mutations':0}));return 0
code=r'''import json,os,shutil,stat,sys
from pathlib import Path
p=Path('/home/tegwick/.helixforge-factory/runtime-install-f599-r1-20261017');s=p.lstat()
assert os.getuid()==1000 and os.getgid()==1000 and stat.S_ISDIR(s.st_mode) and s.st_uid==1000 and s.st_gid==1000 and stat.S_IMODE(s.st_mode)==0o700 and s.st_dev==2049 and s.st_ino==int(sys.argv[1])
assert {f.name for f in p.iterdir()} <= {'runtime.tar.gz','runtime.py','install-verified.py'}
for f in p.iterdir():
s=f.lstat();assert stat.S_ISREG(s.st_mode) and s.st_uid==1000 and not stat.S_ISLNK(s.st_mode)
shutil.rmtree(p);print(json.dumps({'status':'owned_upload_staging_removed','absent':not p.exists()}))'''
cp=subprocess.run(['ssh','-o','BatchMode=yes','-o','ConnectTimeout=15','railiance01','/usr/bin/python3 -I -B -c '+shlex.quote(code)+' '+shlex.quote(str(inode))],capture_output=True,text=True,timeout=30)
if cp.returncode:raise RuntimeError('conditional_cleanup_refused_or_uncertain')
result=json.loads(cp.stdout);(HERE/'upload-cleanup-receipt.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result));return 0
if __name__=='__main__':
try:raise SystemExit(main())
except Exception as exc:
print(json.dumps({'status':'cleanup_refused_or_uncertain','failure_type':type(exc).__name__}));raise SystemExit(1) from None

View file

@ -0,0 +1 @@
{"sample_seconds": 0.5, "cpu_busy_fraction": 0.9949748743718593}

View file

@ -0,0 +1 @@
{"python_executable": "/usr/bin/python3", "kubectl": "/usr/local/bin/kubectl", "bwrap": "/usr/bin/bwrap", "system_python_resolved": "/usr/bin/python3.12"}

View file

@ -0,0 +1,155 @@
#!/usr/bin/env python3
"""Install-only orchestration. Default is read-only; --apply requires founder go."""
import argparse
from datetime import datetime, timezone
import hashlib
import importlib.util
import json
import os
from pathlib import Path
import shlex
import subprocess
import sys
import tempfile
HERE=Path(__file__).resolve().parent
DIGEST='f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d'
STAGE='/home/tegwick/.helixforge-factory/runtime-install-f599-r1-20261017'
STORE='/home/tegwick/.helixforge-factory/runtimes'
SOURCE=Path('/tmp/netkingdom-runtime-canonical-20261016/runtime')
READ_TARGET=r'''import json,os,pwd,stat,subprocess,shutil,time
from pathlib import Path
store=Path('/home/tegwick/.helixforge-factory/runtimes'); stage=Path('/home/tegwick/.helixforge-factory/runtime-install-f599-r1-20261017');digest='f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d'
def meta(p):
try:
s=p.lstat();return {'uid':s.st_uid,'gid':s.st_gid,'mode':oct(stat.S_IMODE(s.st_mode)),'device':s.st_dev,'inode':s.st_ino,'directory':stat.S_ISDIR(s.st_mode),'symlink':stat.S_ISLNK(s.st_mode)}
except FileNotFoundError:return None
cp=subprocess.run(['/usr/local/bin/kubectl','get','nodes','-o','json'],capture_output=True,timeout=20)
assert cp.returncode==0
nodes=json.loads(cp.stdout)['items'];assert len(nodes)==1
mem=dict(x.split(':',1) for x in Path('/proc/meminfo').read_text().splitlines())
read_cpu=lambda:[int(x) for x in Path('/proc/stat').read_text().splitlines()[0].split()[1:9]]
a=read_cpu();time.sleep(1);b=read_cpu();d=[y-x for x,y in zip(a,b)];busy=1-(d[3]+d[4])/sum(d)
print(json.dumps({'account':pwd.getpwuid(os.getuid()).pw_name,'uid':os.getuid(),'gid':os.getgid(),'store':meta(store),'destination':meta(store/digest),'stage':meta(stage),'memory_available_bytes':int(mem['MemAvailable'].split()[0])*1024,'disk_free_bytes':shutil.disk_usage(store).free,'load_average':list(os.getloadavg()),'cpu_count':os.cpu_count(),'cpu_busy_fraction':busy,'cpu_sample_seconds':1,'node_addresses':nodes[0]['status']['addresses'],'node_ready':any(c['type']=='Ready' and c['status']=='True' for c in nodes[0]['status']['conditions'])}))'''
def sha(path):
with path.open('rb') as stream:return 'sha256:'+hashlib.file_digest(stream,'sha256').hexdigest()
def command(argv,timeout=60):
cp=subprocess.run(argv,stdout=subprocess.PIPE,stderr=subprocess.DEVNULL,timeout=timeout)
if cp.returncode:raise RuntimeError('command_failed')
return cp.stdout
def ssh(code,args=(),timeout=60):
remote='/usr/bin/python3 -I -B -c '+shlex.quote(code)
if args:remote+=' '+' '.join(shlex.quote(str(x)) for x in args)
return json.loads(command(['ssh','-o','BatchMode=yes','-o','ConnectTimeout=15','railiance01',remote],timeout))
def module(name,path):
spec=importlib.util.spec_from_file_location(name,path)
result=importlib.util.module_from_spec(spec);spec.loader.exec_module(result);return result
def preflight():
inputs=json.loads((HERE/'action-inputs.json').read_text())
for name,expected in inputs['helper_hashes'].items():
if sha(HERE/name)!=expected:raise ValueError('helper_changed')
if module('reviewed_runtime_reader',HERE/'runtime.py').runtime_digest(SOURCE)!=DIGEST:
raise ValueError('source_changed')
observation=ssh(READ_TARGET)
store=observation['store']
expected=json.loads((HERE/'target-readonly-observation.json').read_text())['paths'][STORE]
checks={
'account':observation['account']=='tegwick' and observation['uid']==1000 and observation['gid']==1000,
'protected_store':store['uid']==1000 and store['gid']==1000 and store['mode']=='0o700' and store['directory'] and not store['symlink'] and store['device']==expected['device'] and store['inode']==expected['inode'],
'destination_absent':observation['destination'] is None,
'staging_absent':observation['stage'] is None,
'exact_ready_node':observation['node_ready'] and any(x['address']=='92.205.62.239' for x in observation['node_addresses']),
'disk_headroom':observation['disk_free_bytes']>=2*1024**3,
'memory_headroom':observation['memory_available_bytes']>=1024**3,
'load_headroom':observation['load_average'][0]<=2*observation['cpu_count'],
'cpu_headroom':observation['cpu_busy_fraction']<=0.85,
}
observation['checks']=checks
return inputs,observation
def save(path,value):
fd=os.open(path,os.O_WRONLY|os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW,0o600)
with os.fdopen(fd,'w') as stream:json.dump(value,stream,indent=2);stream.write('\n')
def main():
parser=argparse.ArgumentParser(description=__doc__)
parser.add_argument('--apply',action='store_true');parser.add_argument('--dry-run',action='store_true')
args=parser.parse_args()
if args.apply and args.dry_run:raise ValueError('conflicting_modes')
inputs,observation=preflight()
if not args.apply:
report={'status':'read_only_dry_run_passed' if all(observation['checks'].values()) else 'read_only_dry_run_blocked','proposal_id':inputs['proposal_id'],'revision':1,
'observed_at':datetime.now(timezone.utc).isoformat(),'target':observation,
'source_runtime_complete_digest_verified':True,'archive':inputs['archive'],
'remote_mutations':0,'provider_calls':0,'private_configuration_reads':False,
'next_exact_command':'python3 -I -B '+str(HERE/'execute-install.py')+' --apply'}
print(json.dumps(report,sort_keys=True));return 0 if all(observation['checks'].values()) else 2
if not all(observation['checks'].values()):raise ValueError('target_headroom_or_identity_refused')
receipt=HERE/'execution-receipt.json'
if receipt.exists():raise ValueError('prior_attempt_requires_reconciliation')
save(receipt,{'status':'intent_recorded','proposal_id':inputs['proposal_id'],'revision':1,
'automatic_retry':False,'observed_at':datetime.now(timezone.utc).isoformat()})
# No native attempt is retried by this helper. Intent survives an SSH loss.
with tempfile.TemporaryDirectory(prefix='nk-runtime-install-r1-') as temporary:
archive=Path(temporary)/'runtime.tar.gz'
with archive.open('xb') as stream:built=module('reviewed_transfer',HERE/'build-transfer.py').build(stream)
if built!=inputs['archive']:raise ValueError('archive_changed')
archive.chmod(0o600)
create=r'''import json,os,stat,time
from pathlib import Path
assert os.getuid()==1000 and os.getgid()==1000
store=Path('/home/tegwick/.helixforge-factory/runtimes');s=store.lstat()
assert stat.S_ISDIR(s.st_mode) and s.st_uid==1000 and stat.S_IMODE(s.st_mode)==0o700 and s.st_ino==4751222 and s.st_dev==2049
assert not (store/'f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d').exists()
read_cpu=lambda:[int(x) for x in Path('/proc/stat').read_text().splitlines()[0].split()[1:9]]
a=read_cpu();time.sleep(1);b=read_cpu();d=[y-x for x,y in zip(a,b)];assert 1-(d[3]+d[4])/sum(d)<=0.85
stage=Path('/home/tegwick/.helixforge-factory/runtime-install-f599-r1-20261017');stage.mkdir(mode=0o700)
s=stage.lstat();print(json.dumps({'inode':s.st_ino,'device':s.st_dev}))'''
created=ssh(create)
receipt.write_text(json.dumps({'status':'staging_created','phase':'before_transfer','proposal_id':inputs['proposal_id'],'revision':1,'automatic_retry':False,'staging_identity':created,'staging_path':STAGE},indent=2)+'\n')
command(['scp','-q',str(archive),str(HERE/'runtime.py'),str(HERE/'install-verified.py'),'railiance01:'+STAGE+'/'],120)
execute=r'''import hashlib,json,os,stat,sys
from pathlib import Path
stage=Path('/home/tegwick/.helixforge-factory/runtime-install-f599-r1-20261017');s=stage.lstat()
assert stat.S_ISDIR(s.st_mode) and s.st_uid==1000 and stat.S_IMODE(s.st_mode)==0o700 and s.st_ino==int(sys.argv[1]) and s.st_dev==2049
expected=json.loads(sys.argv[2]);assert {p.name for p in stage.iterdir()}==set(expected)
for name,want in expected.items():
p=stage/name;s=p.lstat();assert stat.S_ISREG(s.st_mode) and s.st_uid==1000 and not stat.S_ISLNK(s.st_mode)
with p.open('rb') as stream:assert hashlib.file_digest(stream,'sha256').hexdigest()==want
p.chmod(0o600)
os.execve('/usr/bin/python3',['python3','-I','-B',str(stage/'install-verified.py'),'--stage-inode',sys.argv[1]],{'HOME':'/home/tegwick','PATH':'/usr/bin:/bin','LANG':'C.UTF-8','PYTHONDONTWRITEBYTECODE':'1'})'''
hashes={'runtime.tar.gz':inputs['archive']['sha256'].removeprefix('sha256:'),
'runtime.py':inputs['helper_hashes']['runtime.py'].removeprefix('sha256:'),
'install-verified.py':inputs['helper_hashes']['install-verified.py'].removeprefix('sha256:')}
# Parse the structured final helper return even when its action failed.
remote='/usr/bin/python3 -I -B -c '+shlex.quote(execute)+' '+shlex.quote(str(created['inode']))+' '+shlex.quote(json.dumps(hashes,separators=(',',':')))
receipt.write_text(json.dumps({'status':'remote_execution_started','proposal_id':inputs['proposal_id'],'revision':1,'automatic_retry':False,'staging_identity':created,'staging_path':STAGE},indent=2)+'\n')
cp=subprocess.run(['ssh','-o','BatchMode=yes','-o','ConnectTimeout=15','railiance01',remote],stdout=subprocess.PIPE,stderr=subprocess.DEVNULL,timeout=600)
try:result=json.loads(cp.stdout)
except Exception:raise RuntimeError('remote_outcome_uncertain') from None
result['ssh_exit_code']=cp.returncode;result['staging_identity']=created
# Replace only our exact local intent receipt, never a previous attempt.
receipt.write_text(json.dumps(result,indent=2)+'\n');receipt.chmod(0o600)
print(json.dumps(result,sort_keys=True))
return 0 if cp.returncode==0 and result.get('status')=='installed_and_offline_rehearsal_verified' else 1
if __name__=='__main__':
try:raise SystemExit(main())
except Exception as exc:
print(json.dumps({'status':'failed_or_uncertain','failure_type':type(exc).__name__,
'automatic_retry':False,'private_diagnostics_suppressed':True}))
raise SystemExit(1) from None

View file

@ -0,0 +1,71 @@
{
"archive": {
"bytes": 109931109,
"format": "gzip mtime0; PAX tar; sorted tree; root runtime; UID/GID1000; modes and relative symlinks retained",
"logical_file_bytes": 260668241,
"members": 1448,
"sha256": "sha256:4c55b2740e759175d645705518fc33db30b26b4611f68e052a4ca909173084c7"
},
"next_exact_command": "python3 -I -B /home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r1/execute-install.py --apply",
"observed_at": "2026-10-17T02:35:19.659916+00:00",
"private_configuration_reads": false,
"process_exit_code": 0,
"proposal_id": "REINAH-WP-0008-T07-install-f599-r1",
"provider_calls": 0,
"remote_mutations": 0,
"revision": 1,
"source_runtime_complete_digest_verified": true,
"status": "read_only_dry_run_passed",
"target": {
"account": "tegwick",
"checks": {
"account": true,
"cpu_headroom": true,
"destination_absent": true,
"disk_headroom": true,
"exact_ready_node": true,
"load_headroom": true,
"memory_headroom": true,
"protected_store": true,
"staging_absent": true
},
"cpu_busy_fraction": 0.5852417302798982,
"cpu_count": 4,
"cpu_sample_seconds": 1,
"destination": null,
"disk_free_bytes": 124211384320,
"gid": 1000,
"load_average": [
5.0595703125,
6.404296875,
5.111328125
],
"memory_available_bytes": 7645528064,
"node_addresses": [
{
"address": "92.205.62.239",
"type": "InternalIP"
},
{
"address": "2a00:1169:111:6d70::",
"type": "InternalIP"
},
{
"address": "239.62.205.92.host.secureserver.net",
"type": "Hostname"
}
],
"node_ready": true,
"stage": null,
"store": {
"device": 2049,
"directory": true,
"gid": 1000,
"inode": 4751222,
"mode": "0o700",
"symlink": false,
"uid": 1000
},
"uid": 1000
}
}

View file

@ -0,0 +1,213 @@
#!/usr/bin/env python3
"""Exact install-only action; execute remotely only after founder approval."""
import argparse
import hashlib
import importlib.util
import json
import os
from pathlib import Path, PurePosixPath
import pwd
import shutil
import signal
import stat
import subprocess
import sys
import tarfile
import time
DIGEST = 'f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d'
ARCHIVE = '4c55b2740e759175d645705518fc33db30b26b4611f68e052a4ca909173084c7'
RUNTIME_MODULE = '19b5fb687288bbc836978b0251599dc1e4d1593e8b5efee85a6abb6a7f388412'
STORE_MODULE = 'c3d6ec09d08881611d3d02b8f55d68deed6ecfedaa1a809b6b11c57cc4ca97cf'
REHEARSAL_MODULE = '192f654cad4a5f065c7faa5e35b03493297a472e8d7fe641be2c42c5fb00dcc3'
STAGE = Path('/home/tegwick/.helixforge-factory/runtime-install-f599-r1-20261017')
STORE = Path('/home/tegwick/.helixforge-factory/runtimes')
DESTINATION = STORE/DIGEST
LOGICAL_BYTES = 260668241
ARCHIVE_BYTES = 109931109
MEMBERS = 1448
ENV = {'HOME':'/home/tegwick','PATH':'/usr/bin:/bin','LANG':'C.UTF-8','PYTHONDONTWRITEBYTECODE':'1'}
def require(value, code):
if not value: raise ValueError(code)
def file_digest(path):
with path.open('rb') as source:return hashlib.file_digest(source,'sha256').hexdigest()
def protected(path, *, directory=False, mode=None):
s=path.lstat()
require(not stat.S_ISLNK(s.st_mode) and s.st_uid==1000 and s.st_gid==1000,'path_ownership')
require(stat.S_ISDIR(s.st_mode) if directory else stat.S_ISREG(s.st_mode),'path_type')
require(not stat.S_IMODE(s.st_mode)&0o022,'path_write_mode')
if mode is not None:require(stat.S_IMODE(s.st_mode)==mode,'path_exact_mode')
return s
def identify():
require(os.getuid()==1000 and os.getgid()==1000 and pwd.getpwuid(1000).pw_name=='tegwick','account_identity')
for p in (Path('/home/tegwick'),Path('/home/tegwick/.helixforge-factory'),STORE):
protected(p,directory=True,mode=0o700 if p!=Path('/home/tegwick') else 0o750)
protected(STORE/'.install.lock',mode=0o600)
cp=subprocess.run(['/usr/local/bin/kubectl','get','nodes','-o','json'],stdout=subprocess.PIPE,stderr=subprocess.DEVNULL,timeout=20,env=ENV)
require(cp.returncode==0,'node_readback')
nodes=json.loads(cp.stdout)['items']
require(len(nodes)==1 and any(a['address']=='92.205.62.239' for a in nodes[0]['status']['addresses'])
and any(c['type']=='Ready' and c['status']=='True' for c in nodes[0]['status']['conditions']),'node_identity')
require(shutil.disk_usage(STORE).free >= 2*1024**3,'disk_headroom')
mem=dict(x.split(':',1) for x in Path('/proc/meminfo').read_text().splitlines())
require(int(mem['MemAvailable'].split()[0])*1024>=1024**3,'memory_headroom')
require(os.getloadavg()[0]<=2*(os.cpu_count() or 1),'load_headroom')
read_cpu=lambda:[int(x) for x in Path('/proc/stat').read_text().splitlines()[0].split()[1:9]]
a=read_cpu();time.sleep(1);b=read_cpu();d=[y-x for x,y in zip(a,b)]
require(1-(d[3]+d[4])/sum(d)<=0.85,'cpu_headroom')
def runtime_reader():
p=STAGE/'runtime.py';protected(p,mode=0o600)
require(file_digest(p)==RUNTIME_MODULE,'runtime_reader_pin')
spec=importlib.util.spec_from_file_location('approved_runtime_reader',p)
module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module)
return module
def extract():
archive=STAGE/'runtime.tar.gz';protected(archive,mode=0o600)
require(archive.stat().st_size==ARCHIVE_BYTES and file_digest(archive)==ARCHIVE,'archive_pin')
root=STAGE/'runtime';require(not root.exists() and not root.is_symlink(),'extraction_already_present')
with tarfile.open(archive,mode='r:gz') as tf:
members=tf.getmembers();require(len(members)==MEMBERS,'archive_member_count')
seen=set(); logical=0
for info in members:
name=PurePosixPath(info.name)
require(not name.is_absolute() and name.parts and name.parts[0]=='runtime'
and all(x not in ('','..','.') for x in name.parts),'archive_name')
require(info.name not in seen,'archive_duplicate');seen.add(info.name)
require(info.uid==1000 and info.gid==1000 and (info.issym() or not info.mode&0o7022),'archive_modes')
require(info.isdir() or info.isfile() or info.issym(),'archive_special_member')
if info.isfile():logical+=info.size
if info.issym():require(not PurePosixPath(info.linkname).is_absolute(),'archive_absolute_symlink')
require(logical==LOGICAL_BYTES,'archive_size')
# Populate directories and files before any symlink; never traverse an
# archive-created symlink while extracting a later member.
dirs=[]
for info in members:
if not info.isdir():continue
p=STAGE/info.name;p.mkdir(mode=0o700);dirs.append((p,info.mode))
for info in members:
if not info.isfile():continue
p=STAGE/info.name
require(all(not x.is_symlink() for x in (p.parent,*p.parent.parents)),'archive_parent_alias')
fd=os.open(p,os.O_WRONLY|os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW,0o600)
with os.fdopen(fd,'wb') as target, tf.extractfile(info) as source:
shutil.copyfileobj(source,target,1024*1024)
p.chmod(info.mode)
for info in members:
if info.issym():
p=STAGE/info.name;p.symlink_to(info.linkname)
require(p.resolve(strict=True).is_relative_to(root),'archive_symlink_escape')
for p,mode in reversed(dirs):p.chmod(mode)
require(runtime_reader().runtime_digest(root)==DIGEST,'extracted_complete_digest')
return root
def expired(signum, frame):
raise TimeoutError('bounded_stage_deadline')
def install_phase():
from sandboxer.extensions import runtime_store, runtime
source=STAGE/'runtime'
require(Path(runtime_store.__file__).resolve().is_relative_to(source)
and file_digest(Path(runtime_store.__file__))==STORE_MODULE,'installer_source_pin')
require(Path(runtime.__file__).resolve().is_relative_to(source)
and file_digest(Path(runtime.__file__))==RUNTIME_MODULE,'installed_digest_source_pin')
require(not DESTINATION.exists() and not DESTINATION.is_symlink(),'destination_not_absent')
signal.signal(signal.SIGALRM,expired);signal.alarm(180)
try:result=runtime_store.install_runtime(source,STORE,DIGEST)
finally:signal.alarm(0)
require(result['runtime']['path']==str(DESTINATION) and not result['reused']
and result['profile_activated'] is False and result['credential_delivery_configured'] is False,'installer_result')
print(json.dumps({'status':'installed','result':result},sort_keys=True))
def rehearse_phase():
from rein_aharness import owner_rehearsal
require(Path(owner_rehearsal.__file__).resolve().is_relative_to(DESTINATION)
and file_digest(Path(owner_rehearsal.__file__))==REHEARSAL_MODULE,'rehearsal_source_pin')
signal.signal(signal.SIGALRM,expired);signal.alarm(240)
try:steps=owner_rehearsal.rehearse(DESTINATION)
finally:signal.alarm(0)
require([x.name for x in steps]==['rein-aharness','glas-harness','claude'],'rehearsal_steps')
report={x.name:x.exit_code for x in steps}
print(json.dumps({'status':'rehearsed' if all(x.ok for x in steps) else 'rehearsal_failed','steps':report,
'model_calls':0,'credential_reads':False,'owner_configuration_read':False},sort_keys=True))
return 0 if all(x.ok for x in steps) else 1
def phase(argv, timeout):
p=subprocess.run(argv,env=ENV,stdin=subprocess.DEVNULL,stdout=subprocess.PIPE,
stderr=subprocess.DEVNULL,timeout=timeout)
require(len(p.stdout)<=65536,'phase_output_bound')
try:result=json.loads(p.stdout)
except Exception:raise ValueError('phase_receipt_unavailable') from None
return p.returncode,result
def main():
parser=argparse.ArgumentParser(description=__doc__)
parser.add_argument('--stage-inode',type=int)
parser.add_argument('--phase',choices=('install','rehearse'))
args=parser.parse_args()
if args.phase=='install':install_phase();return 0
if args.phase=='rehearse':return rehearse_phase()
receipt={'proposal_id':'REINAH-WP-0008-T07-install-f599-r1','revision':1,'status':'failed',
'model_calls':0,'credential_reads':False,'owner_configuration_read':False,
'renewal_or_catalog_or_queue_mutation':False,'destination':str(DESTINATION)}
identity=None
try:
observed=protected(STAGE,directory=True,mode=0o700)
require(observed.st_ino==args.stage_inode and observed.st_dev==2049,'stage_identity')
identity=observed
identify()
require(not DESTINATION.exists() and not DESTINATION.is_symlink(),'destination_not_absent')
require({p.name for p in STAGE.iterdir()}=={'runtime.tar.gz','runtime.py','install-verified.py'},'stage_inventory')
os.nice(19)
receipt['phase']='extract_and_verify';source=extract()
receipt['extracted_complete_digest_verified']=True
receipt['phase']='install'
code,result=phase([str(source/'bin/python3'),'-I','-B',str(STAGE/'install-verified.py'),'--phase','install'],200)
receipt['installation']=result;require(code==0 and result['status']=='installed','installation_failed')
require(runtime_reader().runtime_digest(DESTINATION)==DIGEST,'installed_complete_digest')
receipt['installed_complete_digest_verified']=True
receipt['phase']='offline_rehearsal'
code,result=phase([str(DESTINATION/'bin/python3'),'-I','-B',str(STAGE/'install-verified.py'),'--phase','rehearse'],260)
receipt['rehearsal']=result;require(code==0 and result['status']=='rehearsed','rehearsal_failed')
require(runtime_reader().runtime_digest(DESTINATION)==DIGEST,'post_rehearsal_complete_digest')
receipt['post_rehearsal_complete_digest_verified']=True
receipt['status']='installed_and_offline_rehearsal_verified'
except Exception as exc:
receipt['failure_type']=type(exc).__name__
if isinstance(exc,ValueError) and str(exc).replace('_','').isalnum():receipt['failure_code']=str(exc)
finally:
receipt['destination_exists']=DESTINATION.exists() or DESTINATION.is_symlink()
if identity is not None:
try:
current=protected(STAGE,directory=True,mode=0o700)
require((current.st_dev,current.st_ino)==(identity.st_dev,identity.st_ino),'cleanup_stage_identity')
require({p.name for p in STAGE.iterdir()} <= {'runtime.tar.gz','runtime.py','install-verified.py','runtime'},'cleanup_unexpected_stage_member')
shutil.rmtree(STAGE)
receipt['owned_staging_removed']=not STAGE.exists() and not STAGE.is_symlink()
except Exception:receipt['owned_staging_removed']=False;receipt['status']='failed'
else:receipt['owned_staging_removed']=False
print(json.dumps(receipt,sort_keys=True))
return 0 if receipt['status']=='installed_and_offline_rehearsal_verified' else 1
if __name__=='__main__':
try:raise SystemExit(main())
except Exception as exc:
print(json.dumps({'status':'failed','failure_type':type(exc).__name__,'private_diagnostics_suppressed':True}))
raise SystemExit(1) from None

View file

@ -0,0 +1,28 @@
#!/usr/bin/env python3
"""Local archive roundtrip only; no native execution or runtime launch."""
import importlib.util,json,shutil,tempfile
from pathlib import Path
HERE=Path(__file__).resolve().parent
def load(name,path):
s=importlib.util.spec_from_file_location(name,path);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m
def main():
builder=load('transfer_builder',HERE/'build-transfer.py')
verifier=load('remote_install_code_review',HERE/'install-verified.py')
with tempfile.TemporaryDirectory(prefix='nk-runtime-transfer-check-') as directory:
p=Path(directory); archive=p/'runtime.tar.gz'
with archive.open('xb') as target:built=builder.build(target)
assert built==json.loads((HERE/'transfer-archive.json').read_text())
archive.chmod(0o600);shutil.copyfile(HERE/'runtime.py',p/'runtime.py');(p/'runtime.py').chmod(0o600)
verifier.STAGE=p
extracted=verifier.extract()
result={'scope':'local temporary archive roundtrip only','archive_sha256':built['sha256'],
'archive_bytes':built['bytes'],'member_count':built['members'],
'complete_extracted_digest':verifier.runtime_reader().runtime_digest(extracted),
'modes_and_internal_symlinks_preserved':True,'native_actions':0,'runtime_launches':0}
assert not p.exists();result['local_temporary_tree_removed']=True
(HERE/'local-transfer-verification.json').write_text(json.dumps(result,indent=2)+'\n')
print(json.dumps(result))
if __name__=='__main__':main()

View file

@ -0,0 +1,12 @@
{
"scope": "local archive extraction function roundtrip; no remote installer or runtime launch",
"archive_sha256": "sha256:4c55b2740e759175d645705518fc33db30b26b4611f68e052a4ca909173084c7",
"archive_bytes": 109931109,
"member_count": 1448,
"complete_extracted_digest": "f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d",
"modes_and_internal_symlinks_preserved": true,
"native_actions": 0,
"runtime_launches": 0,
"local_temporary_tree_removed": true,
"tested_extract_function_sha256": "sha256:6671d4a0d03860e4ed4dd860c5f9405aefdb342f51eb39b6bce7c59bf18c6321"
}

View file

@ -0,0 +1,71 @@
{
"archive": {
"bytes": 109931109,
"format": "gzip mtime0; PAX tar; sorted tree; root runtime; UID/GID1000; modes and relative symlinks retained",
"logical_file_bytes": 260668241,
"members": 1448,
"sha256": "sha256:4c55b2740e759175d645705518fc33db30b26b4611f68e052a4ca909173084c7"
},
"next_exact_command": "python3 -I -B /home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r1/execute-install.py --apply",
"observed_at": "2026-10-17T02:33:46.370722+00:00",
"private_configuration_reads": false,
"process_exit_code": 0,
"proposal_id": "REINAH-WP-0008-T07-install-f599-r1",
"provider_calls": 0,
"remote_mutations": 0,
"revision": 1,
"source_runtime_complete_digest_verified": true,
"status": "read_only_dry_run_passed",
"target": {
"account": "tegwick",
"checks": {
"account": true,
"cpu_headroom": true,
"destination_absent": true,
"disk_headroom": true,
"exact_ready_node": true,
"load_headroom": true,
"memory_headroom": true,
"protected_store": true,
"staging_absent": true
},
"cpu_busy_fraction": 0.3913043478260869,
"cpu_count": 4,
"cpu_sample_seconds": 1,
"destination": null,
"disk_free_bytes": 124223250432,
"gid": 1000,
"load_average": [
7.2421875,
6.92138671875,
5.1103515625
],
"memory_available_bytes": 7817695232,
"node_addresses": [
{
"address": "92.205.62.239",
"type": "InternalIP"
},
{
"address": "2a00:1169:111:6d70::",
"type": "InternalIP"
},
{
"address": "239.62.205.92.host.secureserver.net",
"type": "Hostname"
}
],
"node_ready": true,
"stage": null,
"store": {
"device": 2049,
"directory": true,
"gid": 1000,
"inode": 4751222,
"mode": "0o700",
"symlink": false,
"uid": 1000
},
"uid": 1000
}
}

View file

@ -0,0 +1,20 @@
{
"source": "actual pre-freeze read-only dry-run tool return retained from session",
"observed_at": "2026-10-17T02:32:39.125837+00:00",
"status": "read_only_dry_run_blocked",
"one_second_cpu_busy_fraction": 0.850632911392405,
"load_average": [
12.60107421875,
7.4990234375,
5.14306640625
],
"cpu_count": 4,
"refused_guards": [
"cpu_headroom",
"load_headroom"
],
"all_identity_store_absence_disk_memory_guards": true,
"remote_mutations": 0,
"provider_calls": 0,
"later_return": "final-readonly-dry-run.json; does not erase this refusal"
}

View file

@ -0,0 +1,52 @@
"""Digest-pinned, owner-configured Python runtimes for bwrap."""
from __future__ import annotations
import hashlib
import json
import os
import stat
from pathlib import Path
RUNTIME_MOUNT = "/opt/sandboxer/runtime"
def runtime_digest(root: Path) -> str:
"""Hash the complete artifact, including modes and internal symlink targets."""
if not root.is_absolute() or root.resolve(strict=True) != root or not root.is_dir():
raise ValueError("runtime path must be a canonical absolute directory")
records = []
for path in sorted(root.rglob("*")):
mode = path.lstat().st_mode
if stat.S_ISLNK(mode):
target = os.readlink(path)
if Path(target).is_absolute() or not path.resolve(strict=True).is_relative_to(root):
raise ValueError("runtime symlink escapes the artifact")
value = ["symlink", target]
elif stat.S_ISREG(mode):
with path.open("rb") as stream:
value = ["file", hashlib.file_digest(stream, "sha256").hexdigest()]
elif stat.S_ISDIR(mode):
value = ["directory"]
else:
raise ValueError("runtime contains an unsupported special file")
records.append([path.relative_to(root).as_posix(), stat.S_IMODE(mode), *value])
return hashlib.sha256(json.dumps(records, separators=(",", ":")).encode()).hexdigest()
def verified_runtime(config: dict) -> Path | None:
"""Only owner extension configuration can select a runtime artifact."""
runtime = config.get("runtime")
if runtime is None:
return None
if not isinstance(runtime, dict) or set(runtime) != {"path", "sha256"}:
raise ValueError("runtime requires exactly path and sha256")
if not isinstance(runtime["path"], str) or not isinstance(runtime["sha256"], str):
raise ValueError("runtime path and sha256 must be strings")
root = Path(runtime["path"])
if (not (root / "pyvenv.cfg").is_file() or not (root / "bin/python3").is_file()
or (root / ".git").exists()):
raise ValueError("runtime must be a standalone Python environment, not a checkout")
if runtime_digest(root) != runtime["sha256"]:
raise ValueError("runtime artifact digest does not match owner configuration")
return root

View file

@ -0,0 +1 @@
{"python": "3.12.3", "stage_path": "/home/tegwick/.helixforge-factory/runtime-install-f599-r1-20261017", "stage_exists": false}

View file

@ -0,0 +1,125 @@
{
"account": "tegwick",
"bwrap": "/usr/bin/bwrap",
"cpu_count": 4,
"disk_bytes": {
"free": 124361916416,
"total": 206900281344,
"used": 82521587712
},
"gid": 1000,
"home": "/home/tegwick",
"hostname": "239.62.205.92.host.secureserver.net",
"load_average": [
3.326171875,
3.8720703125,
3.53125
],
"memory_bytes": {
"MemAvailable": 7864901632,
"MemTotal": 16770080768,
"SwapFree": 3914285056,
"SwapTotal": 4294963200
},
"nodes": [
{
"addresses": [
{
"address": "92.205.62.239",
"type": "InternalIP"
},
{
"address": "2a00:1169:111:6d70::",
"type": "InternalIP"
},
{
"address": "239.62.205.92.host.secureserver.net",
"type": "Hostname"
}
],
"name": "239.62.205.92.host.secureserver.net",
"ready": "True"
}
],
"paths": {
"/home/tegwick": {
"device": 2049,
"directory": true,
"exists": true,
"gid": 1000,
"inode": 529950,
"mode": "0o750",
"regular": false,
"symlink": false,
"uid": 1000
},
"/home/tegwick/.helixforge-factory": {
"device": 2049,
"directory": true,
"exists": true,
"gid": 1000,
"inode": 4751221,
"mode": "0o700",
"regular": false,
"symlink": false,
"uid": 1000
},
"/home/tegwick/.helixforge-factory/runtimes": {
"device": 2049,
"directory": true,
"exists": true,
"gid": 1000,
"inode": 4751222,
"mode": "0o700",
"regular": false,
"symlink": false,
"uid": 1000
},
"/home/tegwick/.helixforge-factory/runtimes/.install.lock": {
"device": 2049,
"directory": false,
"exists": true,
"gid": 1000,
"inode": 4751223,
"mode": "0o600",
"regular": true,
"symlink": false,
"uid": 1000
},
"/home/tegwick/.helixforge-factory/runtimes/f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d": {
"exists": false
},
"/run/user/1000": {
"device": 47,
"directory": true,
"exists": true,
"gid": 1000,
"inode": 1,
"mode": "0o700",
"regular": false,
"symlink": false,
"uid": 1000
}
},
"public_sources": {
"/home/tegwick/rein-aharness/rein_aharness/owner_rehearsal.py": {
"exists": false
},
"/home/tegwick/sand-boxer/scripts/install-bwrap-runtime.py": {
"exists": false
},
"/home/tegwick/sand-boxer/src/sandboxer/extensions/runtime.py": {
"exists": false
},
"/home/tegwick/sand-boxer/src/sandboxer/extensions/runtime_store.py": {
"exists": false
}
},
"store_digest_directories": [
"2cfc7b5f5c03318820ed279ab8269a741067ded66a768dcf83565986dd9dfa80",
"5371156d2027dde6e8f140cc0a1833c4e90b8c75b3bec862e05f06a957f5fd34",
"95c9edb1241788dacdb8471c0bd0f34170ce565e097a455befb57f61ff1272ea",
"b6e4e8a429393d68831c996a65c0489664205df969ac9882e581983ec2da4969"
],
"uid": 1000
}

View file

@ -0,0 +1,7 @@
{
"sha256": "sha256:4c55b2740e759175d645705518fc33db30b26b4611f68e052a4ca909173084c7",
"bytes": 109931109,
"logical_file_bytes": 260668241,
"members": 1448,
"format": "gzip mtime0; PAX tar; sorted tree; root runtime; UID/GID1000; modes and relative symlinks retained"
}

View file

@ -0,0 +1,14 @@
{
"status": "read_only_dry_run_passed",
"observed_at": "2026-10-17T08:34:38.132187+00:00",
"source": "actual root --dry-run tool return",
"revision": 2,
"source_runtime_complete_digest_verified": true,
"all_identity_absence_resource_and_supervision_checks_passed": true,
"cpu_busy_fraction": 0.7473958333333333,
"load_average_1m": 2.46337890625,
"disk_free_bytes": 123358224384,
"memory_available_bytes": 7780913152,
"remote_mutations": 0,
"provider_calls": 0
}

View file

@ -0,0 +1,7 @@
{
"id": "b6abb6ab-b182-4b4f-9f84-79ddc5ad91f3",
"status": "open",
"decision_type": "pending",
"title": "Approve exact install-only runtime f599 proposal revision 2",
"proposal_sha256": "44b17589c323e1a966caf6c1b1def123092ee289b929c8ea014bc84109103b1d"
}

View file

@ -0,0 +1,23 @@
{
"schema": "custodian.runtime-install-root-review.v1",
"observed_at": "2026-10-17T06:52:15.521924+00:00",
"proposal_id": "REINAH-WP-0008-T07-install-f599-r1",
"revision": 2,
"status": "accepted_for_submission_not_approved",
"proposal_sha256": "44b17589c323e1a966caf6c1b1def123092ee289b929c8ea014bc84109103b1d",
"manifest_sha256": "aea5dbfe0742fe0bb6c36a41ca7b0d70473683b2731f92cc279d43929e5c35c9",
"r1_frozen_and_verified": true,
"all_r1_r2_manifest_files_verified": true,
"independent_checks": {
"command": "python3 -B test_process_supervision.py ProcessSupervisionTests.test_timeout_reaps_session_escaped_descendant_and_retains_sibling ProcessSupervisionTests.test_hard_controller_loss_reaps_descendant_and_retains_stage",
"tests": 2,
"exit_code": 0,
"scope": "actual disposable process trees, no runtime/SSH/bwrap/provider launches"
},
"source_review": "Existing owner installer and rehearsal callback retained; exact runtime unchanged. Runner bounds descendant ownership through private subreaper/pidfds and parent-death behavior; positive quiescence is required before staging deletion, uncertainty retains staging. Exact proposed helper/argv/archive and existing store guards reviewed.",
"runtime_enforcement_or_autopilot_granted": false,
"supervision_before_sha256": "4a4b0e61df23f1499916c04d85e61c558df810f43f485abf84792acfbbb66016",
"supervision_after_sha256": "d144ae59f67f91639d5c9c9f1b0247af7250abcef2e54fa2b563779924e3f5bf",
"fresh_founder_approval_required": true,
"native_executed": false
}

View file

@ -0,0 +1,29 @@
"""Read-only verification of the approved R2 partial install; never launches it."""
from pathlib import Path
import hashlib
import json
import shlex
import subprocess
HERE = Path(__file__).resolve().parent
R2 = HERE.parent / 'native-runtime-install-r2'
reader = (R2 / 'runtime.py').read_text()
assert hashlib.sha256(reader.encode()).hexdigest() == '19b5fb687288bbc836978b0251599dc1e4d1593e8b5efee85a6abb6a7f388412'
code = reader + '''
import pwd
digest='f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d'
store=Path('/home/tegwick/.helixforge-factory/runtimes');s=store.lstat()
assert os.getuid()==1000 and os.getgid()==1000 and pwd.getpwuid(1000).pw_name=='tegwick'
assert stat.S_ISDIR(s.st_mode) and s.st_uid==1000 and s.st_gid==1000 and stat.S_IMODE(s.st_mode)==0o700 and s.st_dev==2049 and s.st_ino==4751222
destination=store/digest
actual=runtime_digest(destination)
stage=Path('/home/tegwick/.helixforge-factory/runtime-install-f599-r2-20261017')
assert actual==digest and not stage.exists() and not stage.is_symlink()
print(json.dumps({'status':'partial_install_verified_read_only','runtime_sha256':actual,'installed_complete_digest_verified':True,'owned_stage_absent':True,'store_uid':s.st_uid,'store_gid':s.st_gid,'store_mode':oct(stat.S_IMODE(s.st_mode)),'runtime_launched':False,'private_configuration_read':False,'profile_or_queue_or_owner_state_changed':False,'native_launcher_acceptance':'unverified_after_failed_R2','model_calls':0}))
'''
result = subprocess.run(['ssh', '-o', 'BatchMode=yes', '-o', 'ConnectTimeout=15', 'railiance01',
'/usr/bin/python3 -I -B -c ' + shlex.quote(code)], capture_output=True, timeout=120)
assert result.returncode == 0, 'read-only verification failed; raw diagnostics suppressed'
value = json.loads(result.stdout)
(HERE / 'installed-partial-verification.json').write_text(json.dumps(value, indent=2) + '\n')
print(json.dumps(value))

View file

@ -0,0 +1,14 @@
{
"workplan_id": "dfadb19b-445e-59c6-bcd6-48e87b912c52",
"id": "34d6ec9e-6b78-407b-9053-38dabe3288ef",
"topic_id": null,
"task_id": null,
"decision_id": "bec667cc-15ea-4f87-ae16-111f08562e48",
"event_type": "note",
"summary": "Founder approved exact verification-only R3 SHA2567d5741ab...5d6b2d30. Fresh read-only preflight verified installed f599 and all other checks but refused CPU headroom: busy0.992481 vs0.85 limit. Zero R3 remote mutations/launcher calls, no execution receipt and no automatic polling/retry. Same-trial completed R2 outcome remains failed/partial; independent readback proves full installed digest and owned staging absence, while the R2 watchdog receipt reports process quiescence (no independent retrospective process classification). User steered active goal to inspect KEY-WP0039 and infrastructure reviews for possible finalization; source approvals/old registration go preserved, actual negative/cleanup acceptance still under review.",
"detail": null,
"author": "codex",
"session_id": null,
"created_at": "2026-10-17T11:02:21.658442Z",
"workstream_id": "dfadb19b-445e-59c6-bcd6-48e87b912c52"
}

View file

@ -0,0 +1,14 @@
{
"workplan_id": "dfadb19b-445e-59c6-bcd6-48e87b912c52",
"id": "80f70ad2-f202-4f42-aede-b0a6a4f7ad4a",
"topic_id": null,
"task_id": null,
"decision_id": "bec667cc-15ea-4f87-ae16-111f08562e48",
"event_type": "note",
"summary": "Completed exact founder-approved R3 offline verification once after major source publication checks finished and one fresh preflight passedCPU0.6633; originalCPU0.9925read-onlyrefusal retained. All3original empty-egress launchers rein-aharness/glas-harness/claude exit0; f599before/postcompletehashverified. Actualpublicjournal records3deadadoptedzombies reaped and positivequiescence, durable0600nativeprecleanupcheckpoint preserved beforeownedstageremoval. Independentread-onlynativeverification matches checkpointSHA8e6468c2cbb89f1a6feb038d2f53e888d14b1bf4c64f93386e39802cf7916282 to exactlocalprecleanupreconstruction, recheckscompletef599 andstageabsence. Same supervisedtrial succeedsafterrefinement; failedR2receipt/history/nativecauseuncertainty preserved, no unchangedsuccesscredit/autopilot. Zero reinstall/model/provider calls, credential/profile/catalog/queue changes or native16gateclosure. KEY39source tasksdone but T02stillwait: actualdenials/cleanupabsent, KEY38andcodingcustodyprerequisitesopen. Exactcaafe4beHubreadback covers originalKEY37secretsclientonly, not newprobe/codingcustody; standingattendedrule separate. Finalownerbindingauditpendingfinalsourceclarificationsync.",
"detail": null,
"author": "codex",
"session_id": null,
"created_at": "2026-10-17T11:41:11.826896Z",
"workstream_id": "dfadb19b-445e-59c6-bcd6-48e87b912c52"
}

View file

@ -0,0 +1,22 @@
{
"agent_id": "custodian-codex",
"scope": "CUST-WP-0071 and CUST-WP-0073 preparation and founder-authorized Railiance changes",
"mode": "supervised",
"counts": {
"unscored": 12,
"total": 23,
"outcome_failed": 4,
"refinement_or_rescue": 12,
"outcome_succeeded": 17,
"accepted_unchanged": 8,
"adjudicated": 11,
"verified_executions": 10,
"unchanged_successes": 4,
"outcome_not_executed": 2,
"accepted_revised": 3
},
"unchanged_acceptance_rate": 0.7272727272727273,
"unchanged_execution_success_rate": 0.4,
"authority_granted": false,
"note": "Descriptive evidence only; null rates mean no eligible sample. Never promotes an agent."
}

View file

@ -0,0 +1,31 @@
{
"exit_code": 0,
"commit": "275e034883882199dca585e4cd3dc34d173270da",
"parent": "ceaeef1ee79eeba37e7cacf73ba8aed3357a5e7c",
"paths": [
"docs/changes/netkingdom-target-2026-10-17/native-gates-r1/native-gate-audit.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/README.md",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/consumer-proof-plan.md",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/focused-regressions.stderr.txt",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/focused-regressions.stdout.txt",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/hub-readback.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/next-attempt-proposal.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/original-behavior-regression.txt",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/owner-declaration.template.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/owner-source.patch",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/postimages/tests/isolated-keycape-native-fixture-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/postimages/tests/test_isolated_keycape_recovery.py",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/postimages/tools/bootstrap-recovery/isolated-keycape.py",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/postimages/workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/preimages/tests/isolated-keycape-native-fixture-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/preimages/tests/test_isolated_keycape_recovery.py",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/preimages/tools/bootstrap-recovery/isolated-keycape.py"
],
"stdout": "[main 275e034] Record native security preparation and owner checkpoints (1/7)\n 18 files changed, 7262 insertions(+)\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-gates-r1/native-gate-audit.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/README.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/consumer-proof-plan.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/focused-regressions.stderr.txt\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/focused-regressions.stdout.txt\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/hub-readback.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/next-attempt-proposal.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/original-behavior-regression.txt\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/owner-declaration.template.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/owner-source.patch\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/postimages/tests/isolated-keycape-native-fixture-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/postimages/tests/test_isolated_keycape_recovery.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/postimages/tools/bootstrap-recovery/isolated-keycape.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/postimages/workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/preimages/tests/isolated-keycape-native-fixture-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/preimages/tests/test_isolated_keycape_recovery.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/preimages/tools/bootstrap-recovery/isolated-keycape.py\n",
"stderr": "{\"blocked_blob_ids\": [], \"scanned_blobs\": 18, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"clean\"}\n",
"push_exit_code": 0,
"push_stdout": "",
"push_stderr": "remote: {\"status\":\"clean\",\"scope\":\"introduced-reachable-git-objects-and-updated-ref-names\",\"scanned_objects\":33,\"scanned_refs\":1,\"scanner_version\":\"8.30.1\"} \nTo forgejo-remote:coulomb/the-custodian.git\n ceaeef1..275e034 main -> main\n",
"remote_exact": true
}

View file

@ -0,0 +1,31 @@
{
"exit_code": 0,
"commit": "a6eee04d420eb993660c914594f3ceab83b3f567",
"parent": "275e034883882199dca585e4cd3dc34d173270da",
"paths": [
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/preimages/workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/NK-WP-0049.postimage.md",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/NK-WP-0049.preimage.md",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/task-refinement.patch",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/updated-owner-source.patch",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/routing-discovery.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/selector-preflight.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/selector-uniqueness.patch",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/source-references.json",
"docs/changes/netkingdom-target-2026-10-17/native-identity-r1/verification.json",
"docs/changes/netkingdom-target-2026-10-17/native-registration-r1/assemble_review.py",
"docs/changes/netkingdom-target-2026-10-17/native-registration-r1/descriptor-composition.json",
"docs/changes/netkingdom-target-2026-10-17/native-registration-r1/manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-registration-r1/original-attempt-review.json",
"docs/changes/netkingdom-target-2026-10-17/native-registration-r1/register-client.proposed-descriptor.json",
"docs/changes/netkingdom-target-2026-10-17/native-registration-r1/source-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-registration-r1/source-verification.json"
],
"stdout": "[main a6eee04] Record native security preparation and owner checkpoints (2/7)\n 18 files changed, 5770 insertions(+)\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/preimages/workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/NK-WP-0049.postimage.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/NK-WP-0049.preimage.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/task-refinement.patch\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/refinement-r2/updated-owner-source.patch\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/routing-discovery.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/selector-preflight.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/selector-uniqueness.patch\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/source-references.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-identity-r1/verification.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-r1/assemble_review.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-r1/descriptor-composition.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-r1/manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-r1/original-attempt-review.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-r1/register-client.proposed-descriptor.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-r1/source-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-r1/source-verification.json\n",
"stderr": "{\"blocked_blob_ids\": [], \"scanned_blobs\": 18, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"clean\"}\n",
"push_exit_code": 0,
"push_stdout": "",
"push_stderr": "remote: {\"status\":\"clean\",\"scope\":\"introduced-reachable-git-objects-and-updated-ref-names\",\"scanned_objects\":27,\"scanned_refs\":1,\"scanner_version\":\"8.30.1\"} \nTo forgejo-remote:coulomb/the-custodian.git\n 275e034..a6eee04 main -> main\n",
"remote_exact": true
}

View file

@ -0,0 +1,31 @@
{
"exit_code": 0,
"commit": "b5c80ce59565d2107c4f8eeca8171ce325f53e47",
"parent": "a6eee04d420eb993660c914594f3ceab83b3f567",
"paths": [
"docs/changes/netkingdom-target-2026-10-17/native-registration-r1/summary.json",
"docs/changes/netkingdom-target-2026-10-17/native-registration-r1/work-record-proposal.json",
"docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/postimage.md",
"docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/preimage.md",
"docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/t22-applied-intermediate.md",
"docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/workplan.patch",
"docs/changes/netkingdom-target-2026-10-17/native-storage-r1/OWNER-REVIEW.md",
"docs/changes/netkingdom-target-2026-10-17/native-storage-r1/artifact-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-storage-r1/identity-provisioner.consumer.PROPOSED.yaml",
"docs/changes/netkingdom-target-2026-10-17/native-storage-r1/rapp-identity-provisioner.PROPOSED.yaml",
"docs/changes/netkingdom-target-2026-10-17/native-storage-r1/rendered/identity-provisioner.sql",
"docs/changes/netkingdom-target-2026-10-17/native-storage-r1/rendered/identity-provisioner.yaml",
"docs/changes/netkingdom-target-2026-10-17/native-storage-r1/source-references.json",
"docs/changes/netkingdom-target-2026-10-17/native-storage-r1/source-validation.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/FINAL-PROPOSAL.md",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/artifact-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/exec-owner.REVIEW.json"
],
"stdout": "[main b5c80ce] Record native security preparation and owner checkpoints (3/7)\n 18 files changed, 4823 insertions(+)\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-r1/summary.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-r1/work-record-proposal.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/postimage.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/preimage.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/t22-applied-intermediate.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-registration-refinement-r2/workplan.patch\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/FINAL-PROPOSAL.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/artifact-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/exec-owner.REVIEW.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-storage-r1/OWNER-REVIEW.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-storage-r1/artifact-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-storage-r1/identity-provisioner.consumer.PROPOSED.yaml\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-storage-r1/rapp-identity-provisioner.PROPOSED.yaml\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-storage-r1/rendered/identity-provisioner.sql\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-storage-r1/rendered/identity-provisioner.yaml\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-storage-r1/source-references.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-storage-r1/source-validation.json\n",
"stderr": "{\"blocked_blob_ids\": [], \"scanned_blobs\": 18, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"clean\"}\n",
"push_exit_code": 0,
"push_stdout": "",
"push_stderr": "remote: {\"status\":\"clean\",\"scope\":\"introduced-reachable-git-objects-and-updated-ref-names\",\"scanned_objects\":28,\"scanned_refs\":1,\"scanner_version\":\"8.30.1\"} \nTo forgejo-remote:coulomb/the-custodian.git\n a6eee04..b5c80ce main -> main\n",
"remote_exact": true
}

View file

@ -0,0 +1,31 @@
{
"exit_code": 0,
"commit": "43f88d5f7329c9f8e4554efdacca43f5ca67ce98",
"parent": "b5c80ce59565d2107c4f8eeca8171ce325f53e47",
"paths": [
"docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/one-task.REVIEW.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/pricing-observation.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/runtime-pins.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/source-references.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/source-review.json",
"docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/access-need.json",
"docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/capabilities-evidence.json",
"docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/findings.json",
"docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/manifest.json",
"docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/routing-evidence.json",
"docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/source-history-followthrough-r2.json",
"docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/source-references.json",
"docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/README.md",
"docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/hub-readback.json",
"docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/manifest.json",
"docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/metadata-handoff.template.json",
"docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/rehearsal-cases.json",
"docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/review.json"
],
"stdout": "[main 43f88d5] Record native security preparation and owner checkpoints (4/7)\n 18 files changed, 1068 insertions(+)\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/one-task.REVIEW.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/pricing-observation.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/runtime-pins.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/source-references.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-r1/source-review.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/README.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/hub-readback.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/metadata-handoff.template.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/rehearsal-cases.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/review.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/access-need.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/capabilities-evidence.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/findings.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/routing-evidence.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/source-history-followthrough-r2.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/storage-share-tls-r1/source-references.json\n",
"stderr": "{\"blocked_blob_ids\": [], \"scanned_blobs\": 18, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"clean\"}\n",
"push_exit_code": 0,
"push_stdout": "",
"push_stderr": "remote: {\"status\":\"clean\",\"scope\":\"introduced-reachable-git-objects-and-updated-ref-names\",\"scanned_objects\":26,\"scanned_refs\":1,\"scanner_version\":\"8.30.1\"} \nTo forgejo-remote:coulomb/the-custodian.git\n b5c80ce..43f88d5 main -> main\n",
"remote_exact": true
}

View file

@ -0,0 +1,31 @@
{
"exit_code": 0,
"commit": "ae055669d0e623040ce4f9ea843e834efa515e91",
"parent": "43f88d5f7329c9f8e4554efdacca43f5ca67ce98",
"paths": [
"docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/source-references.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/OWNER-PLAN.md",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/artifact-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/consumer-proof-interface.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/consumer-source-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/consumer_contract_observer.py",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/existing-selector-preflight.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/source-checks.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/source-references.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/test_consumer_contract_observer.py",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/artifact-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/integration-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/integration-result.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/owner-plan.post.md",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/publish_owner.py",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-commit.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-consistency.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-consistency.stderr.txt"
],
"stdout": "[main ae05566] Record native security preparation and owner checkpoints (5/7)\n 18 files changed, 1278 insertions(+)\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/artifact-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/integration-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/integration-result.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/owner-plan.post.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/publish_owner.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-commit.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-consistency.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-consistency.stderr.txt\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/OWNER-PLAN.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/artifact-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/consumer-proof-interface.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/consumer-source-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/consumer_contract_observer.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/existing-selector-preflight.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/source-checks.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/source-references.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-r1/test_consumer_contract_observer.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/scanner-response-r1/source-references.json\n",
"stderr": "{\"blocked_blob_ids\": [], \"scanned_blobs\": 18, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"clean\"}\n",
"push_exit_code": 0,
"push_stdout": "",
"push_stderr": "remote: {\"status\":\"clean\",\"scope\":\"introduced-reachable-git-objects-and-updated-ref-names\",\"scanned_objects\":26,\"scanned_refs\":1,\"scanner_version\":\"8.30.1\"} \nTo forgejo-remote:coulomb/the-custodian.git\n 43f88d5..ae05566 main -> main\n",
"remote_exact": true
}

View file

@ -0,0 +1,31 @@
{
"exit_code": 0,
"commit": "a6d0e1ea3db297010c7cb6a2a05e90291929dcca",
"parent": "ae055669d0e623040ce4f9ea843e834efa515e91",
"paths": [
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-projection.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-projection.stderr.txt",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-integration.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/source.patch",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/verification.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/verified-bindings.json",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/workplan.post.md",
"docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/workplan.pre.md",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/checkpoint-progress.json",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/commit.json",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/commit.stderr.txt",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/commit.stdout.txt",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/consistency.json",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/consistency.stderr.txt",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/projection.json",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/projection.stderr.txt",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/publish-before-verifier-refinement.py",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/publish.py"
],
"stdout": "[main a6d0e1e] Record native security preparation and owner checkpoints (6/7)\n 18 files changed, 2334 insertions(+)\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-projection.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-engine-projection.stderr.txt\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/secrets-integration.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/source.patch\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/verification.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/verified-bindings.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/workplan.post.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/consumer-outage-owner-followthrough-r1/workplan.pre.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/checkpoint-progress.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/commit.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/commit.stderr.txt\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/commit.stdout.txt\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/consistency.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/consistency.stderr.txt\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/projection.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/projection.stderr.txt\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/publish-before-verifier-refinement.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/publish.py\n",
"stderr": "{\"blocked_blob_ids\": [], \"scanned_blobs\": 17, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"clean\"}\n",
"push_exit_code": 0,
"push_stdout": "",
"push_stderr": "remote: {\"status\":\"clean\",\"scope\":\"introduced-reachable-git-objects-and-updated-ref-names\",\"scanned_objects\":22,\"scanned_refs\":1,\"scanner_version\":\"8.30.1\"} \nTo forgejo-remote:coulomb/the-custodian.git\n ae05566..a6d0e1e main -> main\n",
"remote_exact": true
}

View file

@ -0,0 +1,20 @@
{
"exit_code": 0,
"commit": "6f61224f12f0be060d2686f0466c80d7274f77cb",
"parent": "a6d0e1ea3db297010c7cb6a2a05e90291929dcca",
"paths": [
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/publish_custodian.py",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/root-source-review.json",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/verification-refusals.json",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/verified-bindings.json",
"docs/netkingdom-target-implementation.md",
"workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md",
"docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/custodian-publication-inputs.json"
],
"stdout": "[main 6f61224] Record native security preparation and owner checkpoints (7/7)\n 7 files changed, 1046 insertions(+)\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/custodian-publication-inputs.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/publish_custodian.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/root-source-review.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/verification-refusals.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-source-publication-r1/verified-bindings.json\n",
"stderr": "{\"blocked_blob_ids\": [], \"scanned_blobs\": 7, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"clean\"}\n",
"push_exit_code": 0,
"push_stdout": "",
"push_stderr": "remote: {\"status\":\"clean\",\"scope\":\"introduced-reachable-git-objects-and-updated-ref-names\",\"scanned_objects\":14,\"scanned_refs\":1,\"scanner_version\":\"8.30.1\"} \nTo forgejo-remote:coulomb/the-custodian.git\n a6d0e1e..6f61224 main -> main\n",
"remote_exact": true
}

View file

@ -0,0 +1,130 @@
{
"repo_slug": "the-custodian",
"repo_path": "/home/worsch/the-custodian",
"source_revision": "6f61224f12f0be060d2686f0466c80d7274f77cb",
"source_revision_reason": null,
"issues": [
{
"severity": "WARN",
"check_id": "C-35",
"message": "Repo Manager warning: workplans/: repository uses more than one workplan prefix: ['CUST-WP', 'THE-WP']",
"file_path": "workplans/",
"db_id": "",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-35",
"message": "Repo Manager contradictory: workplans/ADHOC-2026-08-25-retired.md: workplan id 'CUST-WP-ADHOC-2026-08-25-RETIRED' is not accepted by the canon kind registry",
"file_path": "workplans/ADHOC-2026-08-25-retired.md",
"db_id": "",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-05",
"message": "Title drift in 'cust-wp-0010': file='Domain and Repository Goals' db='Workplan Lifecycle Documentation' (file wins)",
"file_path": "workplans/CUST-WP-0010b-domain-and-repo-goals.md",
"db_id": "def8455a-9de4-4891-a15a-5b09ca98ab1e",
"file_value": "Domain and Repository Goals",
"db_value": "Workplan Lifecycle Documentation",
"fixable": true
},
{
"severity": "WARN",
"check_id": "C-20",
"message": "Workplan dependency target 'STATE-WP-0092' is not linked to State Hub",
"file_path": "workplans/CUST-WP-0072-fleet-flavor-and-depends-on-backfill.md",
"db_id": "",
"file_value": "STATE-WP-0092",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-40",
"message": "blocker satisfied, task still wait: 'CUST-WP-0073-T05' in workplan 'CUST-WP-0073' \u2014 decision 1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa is resolved",
"file_path": "workplans/CUST-WP-0073-agent-credential-separation.md#CUST-WP-0073-T05",
"db_id": "",
"file_value": "1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-39",
"message": "Human wait task 'CUST-WP-0079-T06' in workplan 'CUST-WP-0079' has needs_human: true without decision_id \u2014 unrouted human gate",
"file_path": "workplans/CUST-WP-0079-deterministic-security-flow.md#CUST-WP-0079-T06",
"db_id": "",
"file_value": "needs_human: true",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Closed DB workstream 'cust-wp-0010b' (id=416ff571\u2026, status=finished) has no backing workplan file",
"file_path": "",
"db_id": "416ff571-18cf-5cb2-9c8b-836f68a301b3",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'interactive-the-custodian@retired-20260828' (id=370c2481\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "370c2481-6806-41eb-a917-f8874f03184f",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'the-custodian-adhoc-2026-07-02@retired-20260827' (id=5c53733b\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "5c53733b-c077-4a93-be66-9c3af8f9b6fd",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'adhoc-2026-05-02@retired-20260827' (id=3f54ce9c\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "3f54ce9c-1f95-42de-894f-0f81a52ba2e8",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-26",
"message": "Workplan id 'THE-WP-0001' uses prefix 'THE-WP' but repo canonical prefix is 'CUST-WP' \u2014 new plans must conform",
"file_path": "workplans/THE-WP-0001-federation-interface.md",
"db_id": "",
"file_value": "THE-WP-0001",
"db_value": "CUST-WP",
"fixable": false
}
],
"fixes_applied": [
"bindings: synced 89/89",
"C-05 fixed: workstream def8455a\u2026 title \u2192 'Domain and Repository Goals'",
"push: pushed"
],
"summary": {
"fail": 0,
"automation_error": 0,
"warn": 7,
"info": 4
},
"result": "warn"
}

View file

@ -0,0 +1 @@
WARN: working-memory commit failed: Generated-only commits rejected: staged

View file

@ -0,0 +1,292 @@
{
"ok": true,
"status": "applied",
"repo_slug": "the-custodian",
"commit": "6f61224f12f0be060d2686f0466c80d7274f77cb",
"requests": 2,
"elapsed_ms": 12228.0,
"git": {
"upstream": "origin/main",
"behind": 0,
"ahead": 0
},
"identifiers": {
"schema": "repo-manager.identifier-assignment.v1",
"ok": true,
"executed": true,
"repo": "the-custodian",
"namespace": "helixforge",
"assignments": [],
"historical_invalid_identifiers": [
{
"kind": "workplan",
"id": "CUST-WP-ADHOC-2026-08-25-RETIRED",
"source": "workplans/ADHOC-2026-08-25-retired.md"
}
],
"historical_identity_collisions": [],
"files_changed": []
},
"receipt": {
"schema": "state-hub.repository-projection-reconcile.v1",
"instance_role": "primary",
"instance_label": "railiance01",
"expected_commit": "6f61224f12f0be060d2686f0466c80d7274f77cb",
"derived_commit": "6f61224f12f0be060d2686f0466c80d7274f77cb",
"outcome": {
"schema": "state-hub.projection-reset.v1",
"repo_slug": "the-custodian",
"commit": "6f61224f12f0be060d2686f0466c80d7274f77cb",
"status": "applied",
"counts": {
"created": 0,
"updated": 88,
"retired": 0,
"refused": 0,
"released": 0,
"created_tasks": 0,
"updated_tasks": 0,
"cancelled_tasks": 0,
"created_edges": 0,
"removed_edges": 0,
"unresolved_edges": 0,
"external_edges": 13
},
"created": [],
"updated": [
"CUST-WP-0000",
"CUST-WP-0000b",
"CUST-WP-0000c",
"CUST-WP-0001",
"CUST-WP-0002",
"CUST-WP-0004",
"CUST-WP-0005",
"CUST-WP-0006",
"CUST-WP-0007",
"CUST-WP-0008",
"CUST-WP-0009",
"CUST-WP-0010",
"CUST-WP-0010b",
"CUST-WP-0013",
"CUST-WP-0014",
"CUST-WP-0015",
"CUST-WP-0016",
"CUST-WP-0017",
"CUST-WP-0017-LEGACY",
"CUST-WP-0018",
"CUST-WP-0019",
"CUST-WP-0020",
"CUST-WP-0021",
"CUST-WP-0022",
"CUST-WP-0023",
"CUST-WP-0024",
"CUST-WP-0025",
"CUST-WP-0026",
"CUST-WP-0027",
"CUST-WP-0028",
"CUST-WP-0029",
"CUST-WP-0030",
"CUST-WP-0031",
"CUST-WP-0032",
"CUST-WP-0033",
"CUST-WP-0034",
"CUST-WP-0035",
"CUST-WP-0036",
"CUST-WP-0037",
"CUST-WP-0039",
"CUST-WP-0040",
"CUST-WP-0041",
"CUST-WP-0043",
"CUST-WP-0044",
"CUST-WP-0045",
"CUST-WP-0046",
"CUST-WP-0047",
"CUST-WP-0048",
"CUST-WP-0049",
"CUST-WP-0050",
"CUST-WP-0051",
"CUST-WP-0052",
"CUST-WP-0053",
"CUST-WP-0053-LEGACY",
"CUST-WP-0054",
"CUST-WP-0055",
"CUST-WP-0056",
"CUST-WP-0057",
"CUST-WP-0058",
"CUST-WP-0059",
"CUST-WP-0060",
"CUST-WP-0061",
"CUST-WP-0062",
"CUST-WP-0063",
"CUST-WP-0064",
"CUST-WP-0065",
"CUST-WP-0066",
"CUST-WP-0067",
"CUST-WP-0068",
"CUST-WP-0069",
"CUST-WP-0070",
"CUST-WP-0071",
"CUST-WP-0072",
"CUST-WP-0073",
"CUST-WP-0074",
"CUST-WP-0075",
"CUST-WP-0076",
"CUST-WP-0077",
"CUST-WP-0078",
"CUST-WP-0079",
"CUST-WP-0080",
"CUST-WP-0081",
"CUST-WP-ADHOC-2026-03-29",
"CUST-WP-ADHOC-2026-05-02",
"CUST-WP-ADHOC-2026-07-02",
"CUST-WP-ADHOC-2026-08-25",
"CUST-WP-ADHOC-2026-09-06",
"THE-WP-0001"
],
"retired": [],
"released": [],
"created_tasks": [],
"updated_tasks": [],
"cancelled_tasks": [],
"created_edges": [],
"removed_edges": [],
"unresolved_edges": [],
"external_edges": [
{
"workplan": "CUST-WP-0071",
"from": "CUST-WP-0071-T05",
"target": "CUST-WP-0071-T04",
"relationship_type": "starts_after",
"from_workplan_id": "2249bddb-7524-5add-bd5c-c4163a6ca0f3",
"from_task_id": "20ddd4d7-d85d-5b95-bb0a-7b0ca8af76ca",
"to_workplan_id": null,
"to_task_id": "944f98e2-7e42-5894-925b-752423f3a1cc"
},
{
"workplan": "CUST-WP-0071",
"from": "CUST-WP-0071-T03",
"target": "CUST-WP-0071-T01",
"relationship_type": "starts_after",
"from_workplan_id": "2249bddb-7524-5add-bd5c-c4163a6ca0f3",
"from_task_id": "6dc67558-eb1e-5bb6-a667-986f884dd495",
"to_workplan_id": null,
"to_task_id": "4ae8eb8d-f8c5-5256-ae50-c323cfd73d7a"
},
{
"workplan": "CUST-WP-0071",
"from": "CUST-WP-0071-T03",
"target": "CUST-WP-0071-T02",
"relationship_type": "starts_after",
"from_workplan_id": "2249bddb-7524-5add-bd5c-c4163a6ca0f3",
"from_task_id": "6dc67558-eb1e-5bb6-a667-986f884dd495",
"to_workplan_id": null,
"to_task_id": "82192370-2fd7-5363-88d2-3c67889d3d68"
},
{
"workplan": "CUST-WP-0071",
"from": "CUST-WP-0071-T02",
"target": "CUST-WP-0071-T01",
"relationship_type": "starts_after",
"from_workplan_id": "2249bddb-7524-5add-bd5c-c4163a6ca0f3",
"from_task_id": "82192370-2fd7-5363-88d2-3c67889d3d68",
"to_workplan_id": null,
"to_task_id": "4ae8eb8d-f8c5-5256-ae50-c323cfd73d7a"
},
{
"workplan": "CUST-WP-0071",
"from": "CUST-WP-0071-T02",
"target": "RAPPS-WP-0014-T03",
"relationship_type": "starts_after",
"from_workplan_id": "2249bddb-7524-5add-bd5c-c4163a6ca0f3",
"from_task_id": "82192370-2fd7-5363-88d2-3c67889d3d68",
"to_workplan_id": null,
"to_task_id": "dd069c6d-fcc1-5bac-b233-976f2f0d5cd1"
},
{
"workplan": "CUST-WP-0071",
"from": "CUST-WP-0071-T04",
"target": "CUST-WP-0071-T03",
"relationship_type": "starts_after",
"from_workplan_id": "2249bddb-7524-5add-bd5c-c4163a6ca0f3",
"from_task_id": "944f98e2-7e42-5894-925b-752423f3a1cc",
"to_workplan_id": null,
"to_task_id": "6dc67558-eb1e-5bb6-a667-986f884dd495"
},
{
"workplan": "CUST-WP-0073",
"from": "CUST-WP-0073-T02",
"target": "GLAS-WP-0012",
"relationship_type": "blocks",
"from_workplan_id": "a98a9f34-83b4-5c8c-8107-e05f7806d50d",
"from_task_id": "4b88b0b7-dc7e-5612-aa5d-1a08f0530c35",
"to_workplan_id": "170bf1ae-337f-5553-8d1e-03b07100e08f",
"to_task_id": null
},
{
"workplan": "CUST-WP-0073",
"from": "CUST-WP-0073-T04",
"target": "CUST-WP-0073-T02",
"relationship_type": "starts_after",
"from_workplan_id": "a98a9f34-83b4-5c8c-8107-e05f7806d50d",
"from_task_id": "90725511-4e31-549f-b567-47feff1a9ca4",
"to_workplan_id": null,
"to_task_id": "4b88b0b7-dc7e-5612-aa5d-1a08f0530c35"
},
{
"workplan": "CUST-WP-0079",
"from": "CUST-WP-0079-T03",
"target": "ACTIVITY-WP-0047",
"relationship_type": "blocks",
"from_workplan_id": "ab288f92-d364-5c24-9362-aee451f266c3",
"from_task_id": "1be0569c-221d-5925-a0ff-fd2af88e52b1",
"to_workplan_id": "ee97869b-dca2-54c9-aa18-0b479c244fb3",
"to_task_id": null
},
{
"workplan": "CUST-WP-0079",
"from": "CUST-WP-0079-T04",
"target": "PNEX-WP-0006",
"relationship_type": "blocks",
"from_workplan_id": "ab288f92-d364-5c24-9362-aee451f266c3",
"from_task_id": "5dd52156-09a8-5781-b288-99ae822f59a6",
"to_workplan_id": "774c5037-a3d0-5e65-893c-d18970acd66a",
"to_task_id": null
},
{
"workplan": "CUST-WP-0080",
"from": "CUST-WP-0080-T04",
"target": "CUST-WP-0080-T03",
"relationship_type": "starts_after",
"from_workplan_id": "dfadb19b-445e-59c6-bcd6-48e87b912c52",
"from_task_id": "82378b0f-7004-5c2f-9683-b356a1227576",
"to_workplan_id": null,
"to_task_id": "87637402-02f1-57c1-8fbc-4141598af8e3"
},
{
"workplan": "CUST-WP-0080",
"from": "CUST-WP-0080-T05",
"target": "RPF-WP-0056",
"relationship_type": "blocks",
"from_workplan_id": "dfadb19b-445e-59c6-bcd6-48e87b912c52",
"from_task_id": "ed8b909a-23bf-5e5f-b600-e477fbae136b",
"to_workplan_id": "31933d08-c877-5fda-aff9-6220c3705c92",
"to_task_id": null
},
{
"workplan": "CUST-WP-0080",
"from": "CUST-WP-0080-T05",
"target": "RAPP-PLAYWRIGHT-WP-0004",
"relationship_type": "blocks",
"from_workplan_id": "dfadb19b-445e-59c6-bcd6-48e87b912c52",
"from_task_id": "ed8b909a-23bf-5e5f-b600-e477fbae136b",
"to_workplan_id": "f9280c40-201e-59b5-a6f0-1aace8e0e2e2",
"to_task_id": null
}
],
"refused": [],
"notes": [
"Preserved bound historical row and task UUIDs: CUST-WP-ADHOC-2026-08-25-RETIRED"
]
}
}
}

View file

@ -0,0 +1,85 @@
<!-- custodian-brief: generated by fix-consistency — do not edit manually -->
# Custodian Brief — net-kingdom
**Domain:** infotech
**Last synced:** 2026-10-16 19:19 UTC
**State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)*
## Active Workstreams
### Publish the NetKingdom emission-cadence security profile
Progress: 5/6 done | workplan_id: `04685f94-1991-5e62-80d2-5669913e99fc`
**Open tasks:**
- ► Bind and hand off the published contract `e3fbc8b8`
### Register Playwright human and agent consumers through governed identity delivery
Progress: 1/3 done | workplan_id: `06ba98d5-609e-5aaa-9bf7-4c4f4460e377`
**Open tasks:**
- ! Verify issuer and real consumer acceptance `5a3aaf57`
*(wait: Await owner-scoped registry/custody activation, native cluster authentication and individual transport, then real human and agent acceptance under CUST-WP-0080-T05.)*
- ► Deliver custody integration and guarded registration activation `a9dadd07`
### Remove bootstrap secret output and verify separated recovery custody
Progress: 22/31 done | workplan_id: `17d315f0-829e-57c7-85cc-3a7914152804`
**Open tasks:**
- ! Accept remaining recovery and caller evidence and close the G08 handoff `d68cd4d3`
*(wait: Await the separately tracked native service proofs, current/legacy caller dispositions and residual-scope decisions; archive recovery, backup activation, independent outage retrieval and guide publication are complete.)*
- ! Resolve historical credential and configuration-preserving rotation dispositions `3ea6bf00`
*(wait: Await the caller/consumer ledger, current replacement-lane acceptance and explicit credential-owner dispositions; existing exposure-rotation deferral is unchanged.)*
- ! Verify current caller and provider admission at their actual boundaries `77aa42be`
*(wait: Await the current-caller ledger and exact per-caller owner admission/test inputs; the backup credential grants do not admit unrelated callers.)*
- ! Prove retained privacyIDEA token decryption and existing-token MFA `6f8af1a7`
*(wait: LLDAP T16, token-material T31 and audit T20 passed; await the exact isolated MFA adapter and owner-selected retained-token/factor inputs.)*
- ! Prove restored KeyCape issuer, policy and consumer continuity `141dd773`
*(wait: LLDAP recovery T16 passed; await the exact isolated KeyCape adapter/procedure and retained-token MFA proof for the selected flow.)*
- ! Prove restored Authelia storage and OIDC continuity `b47f9975`
*(wait: LLDAP recovery T16 passed; await the exact isolated Authelia adapter/procedure and private authentication-flow inputs from T15.)*
- ► Map current callers, owners and native acceptance gaps `479d6970`
- … and 2 more open tasks
### Establish SecurityCaseTypes so that known security cases are light
Progress: 7/9 done | workplan_id: `e31f3f9d-0748-5137-b0a3-7b3ca46a66eb`
**Open tasks:**
- ! T05 — Acknowledge the type through informed-decision `d9b26bcf`
*(wait: Type1.2 architecture has a confirmed source-only founder acknowledgment; canonical1.1 remains unchanged/default and the1.2 reference case stays proposed. Needs explicit version selection/reference-source integration without normal admission bypass, closed owner adapters plus global/native receipt verifier (WARDEN-WP-0044-T03), independently verified six-object structural materialization and CCR42 claims/created-only provenance, exact broker/case/source reconciliation, then separately authorized native mint/delivery and attended registry/consumer verification. Source acknowledgment, a bundle or local tests do not prove implemented/materialized/live status.)*
- ! T06 — First KnownSecurityCase: Forgejo `c3c9c3ae`
*(wait: The next types follow once the first one is proven end to end.)*
### Define an execution-attribution receipt for Railiance runs
Progress: 1/2 done | workplan_id: `e2533f3a-aa43-59b3-bff3-8e64b6149487`
**Open tasks:**
- ! Agree the evidence holder and schema with audit-core and Railiance `963120c1`
*(wait: Audit-core accepted evidence custody and published field/admission requirements in AUDIT-WP-0014-T01. Still needs Railiance owner confirmation of exact emitter and wire binding before canonical schema/validator implementation, followed by actual emission/readback and attribution/clock/unknown-case acceptance.)*
### Enterprise Federation & SAML — Expanded-Mode Keycloak Identity Broker
Progress: 1/9 done | workplan_id: `1075448f-d533-5f9e-94b7-c3adfe151a07`
**Open tasks:**
- ! Admit the database consumer `2fe6f100`
*(wait: ADR-0009 adoption trigger absent; then railiance-platform/rapp-postgres must admit the database consumer and return backup/restore evidence.)*
- ! Package the broker deployment `32d1411b`
*(wait: ADR-0009 adoption trigger and named package/runtime owner absent; requires T02 database admission and governed OpenBao/ESO role plus immutable issuer assignment.)*
- ! Integrate an upstream identity provider `6697a994`
*(wait: Named tenant/upstream IdP owner/federation need absent; requires admitted broker and owner-reviewed tenant-scoped claim mappings plus actual login evidence.)*
- ! Define federated assurance `d845380d`
*(wait: Adoption trigger absent; requires per-IdP assurance trust mapping and reviewed privileged step-up delivery from issuer/package and access-engine owners.)*
- ! Verify IAM conformance and coexistence `9cb7fd93`
*(wait: Requires admitted live broker, canonical tenant issuer selection and dedicated test-client conformance/coexistence evidence; adoption trigger absent.)*
- ! Enforce tenant and platform boundaries `38998c68`
*(wait: Requires tenant-engine tier/issuer ownership and access-engine boundary/freshness enforcement evidence after adoption trigger and broker admission.)*
- ! Prove recovery and audit delivery `e5f44ddc`
*(wait: Requires admitted database/broker, named recovery and audit owners, off-host restore and observed audit/break-glass receipts; adoption trigger absent.)*
- … and 1 more open tasks
---
## MCP Orientation (when available)
If the state-hub MCP server is reachable, call:
`get_domain_summary("infotech")`
This provides richer cross-domain context.
If the MCP call fails, use this file as your orientation source.

View file

@ -0,0 +1,272 @@
# Work Records — net-kingdom
> Generated by `statehub fix-consistency` (CUST-WP-0061-T04, work-record
> stage 3). Do not edit by hand — edit the source file/block listed for
> each record and re-run fix-consistency to refresh this index. Archived
> workplans are omitted; closed decisions/intakes/engagements stay listed
> so recently-resolved work is still visible. [auto]
| Kind | ID | Status | Lane | Source |
| --- | --- | --- | --- | --- |
| workplan | NK-WP-ADHOC-2026-07-02 | finished | — | workplans/ADHOC-2026-07-02.md |
| workplan | NK-WP-ADHOC-2026-08-14 | finished | — | workplans/ADHOC-2026-08-14.md |
| workplan | NK-WP-ADHOC-2026-08-23 | finished | — | workplans/ADHOC-2026-08-23.md |
| workplan | NK-WP-ADHOC-2026-10-03 | finished | — | workplans/ADHOC-2026-10-03.md |
| workplan | NK-WP-ADHOC-2026-10-10 | finished | — | workplans/ADHOC-2026-10-10.md |
| workplan | NK-WP-ADHOC-2026-10-11 | finished | — | workplans/ADHOC-2026-10-11.md |
| workplan | NK-WP-ADHOC-2026-10-16 | finished | — | workplans/ADHOC-2026-10-16.md |
| workplan | NET-WP-0020 | finished | — | workplans/NET-WP-0020-openbao-unseal-custody-and-ssh-automation.md |
| workplan | NK-WP-0009 | finished | — | workplans/NK-WP-0009-netkingdom-security-pattern-tutorials.md |
| workplan | NK-WP-0011 | active | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| workplan | NK-WP-0021 | finished | — | workplans/NK-WP-0021-activity-core-ops-sso-operators.md |
| workplan | NK-WP-0022 | finished | — | workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md |
| workplan | NK-WP-0023 | finished | — | workplans/NK-WP-0023-user-engine-portal-platform-integration.md |
| workplan | NK-WP-0024 | finished | — | workplans/NK-WP-0024-user-engine-portal-integration-expansion.md |
| workplan | NK-WP-0025 | finished | — | workplans/NK-WP-0025-public-self-registration-and-application-jit.md |
| workplan | NK-WP-0026 | finished | — | workplans/NK-WP-0026-flex-auth-caller-identity-rollout.md |
| workplan | NK-WP-0027 | backlog | — | workplans/NK-WP-0027-reef-placement-reconciliation.md |
| workplan | NK-WP-0028 | finished | — | workplans/NK-WP-0028-canon-publication-and-grouping-semantics.md |
| workplan | NK-WP-0029 | finished | — | workplans/NK-WP-0029-scope-and-intent-reconciliation.md |
| workplan | NK-WP-0030 | finished | — | workplans/NK-WP-0030-deterministic-security-scenario-composition.md |
| workplan | NK-WP-0031 | finished | — | workplans/NK-WP-0031-deterministic-posture-feedback.md |
| workplan | NK-WP-0032 | finished | — | workplans/NK-WP-0032-openbao-operator-loopback-callback.md |
| workplan | NK-WP-0033 | finished | — | workplans/NK-WP-0033-keycape-secret-exposure-rotation.md |
| workplan | NK-WP-0034 | finished | — | workplans/NK-WP-0034-verification-that-verifies.md |
| workplan | NK-WP-0035 | active | — | workplans/NK-WP-0035-emission-cadence-security-profile.md |
| workplan | NK-WP-0036 | finished | — | workplans/NK-WP-0036-restore-user-portal-client-registration.md |
| workplan | NK-WP-0037 | finished | — | workplans/NK-WP-0037-vergabe-company-welcome.md |
| workplan | NK-WP-0038 | finished | — | workplans/NK-WP-0038-tenant-scoped-identity-lifecycle.md |
| workplan | NK-WP-0039 | finished | — | workplans/NK-WP-0039-flex-auth-access-engine-coordinate-intake.md |
| workplan | NK-WP-0040 | active | — | workplans/NK-WP-0040-execution-attribution-receipt.md |
| workplan | NK-WP-0041 | finished | — | workplans/NK-WP-0041-onboarding-journey-usability.md |
| workplan | NK-WP-0042 | finished | — | workplans/NK-WP-0042-workload-mfa-step-up.md |
| workplan | NK-WP-0043 | finished | — | workplans/NK-WP-0043-cadence-assessment-and-operating-guidance.md |
| workplan | NK-WP-0044 | finished | — | workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md |
| workplan | NK-WP-0045 | finished | — | workplans/NK-WP-0045-root-grant-custody-record.md |
| workplan | NK-WP-0046 | finished | — | workplans/NK-WP-0046-secrets-engine-openbao-client-registration.md |
| workplan | NK-WP-0047 | finished | — | workplans/NK-WP-0047-platform-password-reset-mail.md |
| workplan | NK-WP-0048 | active | — | workplans/NK-WP-0048-security-case-types.md |
| workplan | NK-WP-0049 | active | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| workplan | NK-WP-0050 | active | — | workplans/NK-WP-0050-playwright-consumer-registration.md |
| workplan | NK-WP-0051 | finished | — | workplans/NK-WP-0051-sign-in-diagnosis.md |
| task | NK-WP-ADHOC-2026-07-02-T01 | done | — | workplans/ADHOC-2026-07-02.md |
| task | NK-WP-ADHOC-2026-07-02-T02 | done | — | workplans/ADHOC-2026-07-02.md |
| task | NK-WP-ADHOC-2026-08-14-T01 | done | — | workplans/ADHOC-2026-08-14.md |
| task | NK-WP-ADHOC-2026-08-14-T02 | done | — | workplans/ADHOC-2026-08-14.md |
| task | NK-WP-ADHOC-2026-08-14-T03 | done | — | workplans/ADHOC-2026-08-14.md |
| task | NK-WP-ADHOC-2026-08-23-T01 | done | — | workplans/ADHOC-2026-08-23.md |
| task | NK-WP-ADHOC-2026-10-03-T01 | done | — | workplans/ADHOC-2026-10-03.md |
| task | NK-WP-ADHOC-2026-10-10-T01 | done | — | workplans/ADHOC-2026-10-10.md |
| task | NK-WP-ADHOC-2026-10-11-T01 | done | — | workplans/ADHOC-2026-10-11.md |
| task | NK-WP-ADHOC-2026-10-11-T02 | done | — | workplans/ADHOC-2026-10-11.md |
| task | NK-WP-ADHOC-2026-10-11-T03 | done | — | workplans/ADHOC-2026-10-11.md |
| task | NK-WP-ADHOC-2026-10-11-T04 | done | — | workplans/ADHOC-2026-10-11.md |
| task | NK-WP-ADHOC-2026-10-11-T05 | done | — | workplans/ADHOC-2026-10-11.md |
| task | NK-WP-ADHOC-2026-10-11-T06 | done | — | workplans/ADHOC-2026-10-11.md |
| task | NK-WP-ADHOC-2026-10-11-T07 | done | — | workplans/ADHOC-2026-10-11.md |
| task | NK-WP-ADHOC-2026-10-16-T01 | done | — | workplans/ADHOC-2026-10-16.md |
| task | NET-WP-0020-T01 | done | — | workplans/NET-WP-0020-openbao-unseal-custody-and-ssh-automation.md |
| task | NET-WP-0020-T02 | done | — | workplans/NET-WP-0020-openbao-unseal-custody-and-ssh-automation.md |
| task | NET-WP-0020-T03 | done | — | workplans/NET-WP-0020-openbao-unseal-custody-and-ssh-automation.md |
| task | NET-WP-0020-T04 | done | — | workplans/NET-WP-0020-openbao-unseal-custody-and-ssh-automation.md |
| task | NET-WP-0020-T05 | done | — | workplans/NET-WP-0020-openbao-unseal-custody-and-ssh-automation.md |
| task | NK-WP-0009-T01 | done | — | workplans/NK-WP-0009-netkingdom-security-pattern-tutorials.md |
| task | NK-WP-0009-T02 | done | — | workplans/NK-WP-0009-netkingdom-security-pattern-tutorials.md |
| task | NK-WP-0009-T03 | done | — | workplans/NK-WP-0009-netkingdom-security-pattern-tutorials.md |
| task | NK-WP-0009-T04 | done | — | workplans/NK-WP-0009-netkingdom-security-pattern-tutorials.md |
| task | NK-WP-0009-T05 | done | — | workplans/NK-WP-0009-netkingdom-security-pattern-tutorials.md |
| task | NK-WP-0009-T06 | done | — | workplans/NK-WP-0009-netkingdom-security-pattern-tutorials.md |
| task | NK-WP-0011-T01 | done | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| task | NK-WP-0011-T02 | wait | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| task | NK-WP-0011-T03 | wait | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| task | NK-WP-0011-T04 | wait | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| task | NK-WP-0011-T05 | wait | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| task | NK-WP-0011-T06 | wait | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| task | NK-WP-0011-T07 | wait | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| task | NK-WP-0011-T08 | wait | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| task | NK-WP-0011-T09 | wait | — | workplans/NK-WP-0011-enterprise-federation-saml.md |
| task | NK-WP-0021-T01 | done | — | workplans/NK-WP-0021-activity-core-ops-sso-operators.md |
| task | NK-WP-0021-T02 | done | — | workplans/NK-WP-0021-activity-core-ops-sso-operators.md |
| task | NK-WP-0021-T03 | done | — | workplans/NK-WP-0021-activity-core-ops-sso-operators.md |
| task | NK-WP-0021-T04 | done | — | workplans/NK-WP-0021-activity-core-ops-sso-operators.md |
| task | NK-WP-0021-T05 | done | — | workplans/NK-WP-0021-activity-core-ops-sso-operators.md |
| task | NK-WP-0022-T01 | done | — | workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md |
| task | NK-WP-0022-T02 | done | — | workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md |
| task | NK-WP-0022-T03 | done | — | workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md |
| task | NK-WP-0022-T04 | done | — | workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md |
| task | NK-WP-0022-T05 | done | — | workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md |
| task | NK-WP-0022-T06 | done | — | workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md |
| task | NK-WP-0022-T07 | done | — | workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md |
| task | NK-WP-0022-T08 | done | — | workplans/NK-WP-0022-railiance01-identity-cutover-and-coulombcore-retirement.md |
| task | NK-WP-0023-T01 | done | — | workplans/NK-WP-0023-user-engine-portal-platform-integration.md |
| task | NK-WP-0023-T02 | done | — | workplans/NK-WP-0023-user-engine-portal-platform-integration.md |
| task | NK-WP-0023-T03 | done | — | workplans/NK-WP-0023-user-engine-portal-platform-integration.md |
| task | NK-WP-0023-T04 | done | — | workplans/NK-WP-0023-user-engine-portal-platform-integration.md |
| task | NK-WP-0023-T05 | done | — | workplans/NK-WP-0023-user-engine-portal-platform-integration.md |
| task | NK-WP-0023-T06 | done | — | workplans/NK-WP-0023-user-engine-portal-platform-integration.md |
| task | NK-WP-0023-T07 | done | — | workplans/NK-WP-0023-user-engine-portal-platform-integration.md |
| task | NK-WP-0023-T08 | done | — | workplans/NK-WP-0023-user-engine-portal-platform-integration.md |
| task | NK-WP-0024-T01 | done | — | workplans/NK-WP-0024-user-engine-portal-integration-expansion.md |
| task | NK-WP-0024-T02 | done | — | workplans/NK-WP-0024-user-engine-portal-integration-expansion.md |
| task | NK-WP-0024-T03 | done | — | workplans/NK-WP-0024-user-engine-portal-integration-expansion.md |
| task | NK-WP-0024-T04 | done | — | workplans/NK-WP-0024-user-engine-portal-integration-expansion.md |
| task | NK-WP-0025-T01 | done | — | workplans/NK-WP-0025-public-self-registration-and-application-jit.md |
| task | NK-WP-0025-T02 | done | — | workplans/NK-WP-0025-public-self-registration-and-application-jit.md |
| task | NK-WP-0025-T03 | done | — | workplans/NK-WP-0025-public-self-registration-and-application-jit.md |
| task | NK-WP-0025-T04 | done | — | workplans/NK-WP-0025-public-self-registration-and-application-jit.md |
| task | NK-WP-0025-T05 | done | — | workplans/NK-WP-0025-public-self-registration-and-application-jit.md |
| task | NK-WP-0026-T01 | done | — | workplans/NK-WP-0026-flex-auth-caller-identity-rollout.md |
| task | NK-WP-0026-T02 | done | — | workplans/NK-WP-0026-flex-auth-caller-identity-rollout.md |
| task | NK-WP-0027-T01 | done | — | workplans/NK-WP-0027-reef-placement-reconciliation.md |
| task | NK-WP-0027-T02 | todo | — | workplans/NK-WP-0027-reef-placement-reconciliation.md |
| task | NK-WP-0027-T03 | todo | — | workplans/NK-WP-0027-reef-placement-reconciliation.md |
| task | NK-WP-0027-T04 | done | — | workplans/NK-WP-0027-reef-placement-reconciliation.md |
| task | NK-WP-0027-T05 | done | — | workplans/NK-WP-0027-reef-placement-reconciliation.md |
| task | NK-WP-0027-T06 | todo | — | workplans/NK-WP-0027-reef-placement-reconciliation.md |
| task | NK-WP-0028-T01 | done | — | workplans/NK-WP-0028-canon-publication-and-grouping-semantics.md |
| task | NK-WP-0028-T02 | done | — | workplans/NK-WP-0028-canon-publication-and-grouping-semantics.md |
| task | NK-WP-0028-T03 | done | — | workplans/NK-WP-0028-canon-publication-and-grouping-semantics.md |
| task | NK-WP-0028-T04 | done | — | workplans/NK-WP-0028-canon-publication-and-grouping-semantics.md |
| task | NK-WP-0029-T01 | done | — | workplans/NK-WP-0029-scope-and-intent-reconciliation.md |
| task | NK-WP-0029-T02 | done | — | workplans/NK-WP-0029-scope-and-intent-reconciliation.md |
| task | NK-WP-0029-T03 | done | — | workplans/NK-WP-0029-scope-and-intent-reconciliation.md |
| task | NK-WP-0029-T04 | done | — | workplans/NK-WP-0029-scope-and-intent-reconciliation.md |
| task | NK-WP-0030-T01 | done | — | workplans/NK-WP-0030-deterministic-security-scenario-composition.md |
| task | NK-WP-0030-T02 | done | — | workplans/NK-WP-0030-deterministic-security-scenario-composition.md |
| task | NK-WP-0030-T03 | done | — | workplans/NK-WP-0030-deterministic-security-scenario-composition.md |
| task | NK-WP-0030-T04 | done | — | workplans/NK-WP-0030-deterministic-security-scenario-composition.md |
| task | NK-WP-0030-T05 | done | — | workplans/NK-WP-0030-deterministic-security-scenario-composition.md |
| task | NK-WP-0031-T01 | done | — | workplans/NK-WP-0031-deterministic-posture-feedback.md |
| task | NK-WP-0031-T02 | done | — | workplans/NK-WP-0031-deterministic-posture-feedback.md |
| task | NK-WP-0031-T03 | done | — | workplans/NK-WP-0031-deterministic-posture-feedback.md |
| task | NK-WP-0031-T04 | done | — | workplans/NK-WP-0031-deterministic-posture-feedback.md |
| task | NK-WP-0031-T05 | done | — | workplans/NK-WP-0031-deterministic-posture-feedback.md |
| task | NK-WP-0032-T01 | done | — | workplans/NK-WP-0032-openbao-operator-loopback-callback.md |
| task | NK-WP-0032-T02 | done | — | workplans/NK-WP-0032-openbao-operator-loopback-callback.md |
| task | NK-WP-0032-T03 | done | — | workplans/NK-WP-0032-openbao-operator-loopback-callback.md |
| task | NK-WP-0032-T04 | done | — | workplans/NK-WP-0032-openbao-operator-loopback-callback.md |
| task | NK-WP-0033-T01 | done | — | workplans/NK-WP-0033-keycape-secret-exposure-rotation.md |
| task | NK-WP-0033-T02 | done | — | workplans/NK-WP-0033-keycape-secret-exposure-rotation.md |
| task | NK-WP-0033-T03 | done | — | workplans/NK-WP-0033-keycape-secret-exposure-rotation.md |
| task | NK-WP-0033-T04 | done | — | workplans/NK-WP-0033-keycape-secret-exposure-rotation.md |
| task | NK-WP-0033-T05 | done | — | workplans/NK-WP-0033-keycape-secret-exposure-rotation.md |
| task | NK-WP-0034-T01 | done | — | workplans/NK-WP-0034-verification-that-verifies.md |
| task | NK-WP-0034-T02 | done | — | workplans/NK-WP-0034-verification-that-verifies.md |
| task | NK-WP-0034-T03 | done | — | workplans/NK-WP-0034-verification-that-verifies.md |
| task | NK-WP-0034-T04 | done | — | workplans/NK-WP-0034-verification-that-verifies.md |
| task | NK-WP-0035-T01 | done | — | workplans/NK-WP-0035-emission-cadence-security-profile.md |
| task | NK-WP-0035-T02 | done | — | workplans/NK-WP-0035-emission-cadence-security-profile.md |
| task | NK-WP-0035-T03 | done | — | workplans/NK-WP-0035-emission-cadence-security-profile.md |
| task | NK-WP-0035-T04 | progress | — | workplans/NK-WP-0035-emission-cadence-security-profile.md |
| task | NK-WP-0035-T05 | done | — | workplans/NK-WP-0035-emission-cadence-security-profile.md |
| task | NK-WP-0035-T06 | done | — | workplans/NK-WP-0035-emission-cadence-security-profile.md |
| task | NK-WP-0036-T01 | done | — | workplans/NK-WP-0036-restore-user-portal-client-registration.md |
| task | NK-WP-0036-T02 | done | — | workplans/NK-WP-0036-restore-user-portal-client-registration.md |
| task | NK-WP-0036-T03 | done | — | workplans/NK-WP-0036-restore-user-portal-client-registration.md |
| task | NK-WP-0036-T04 | done | — | workplans/NK-WP-0036-restore-user-portal-client-registration.md |
| task | NK-WP-0036-T05 | done | — | workplans/NK-WP-0036-restore-user-portal-client-registration.md |
| task | NK-WP-0036-T06 | done | — | workplans/NK-WP-0036-restore-user-portal-client-registration.md |
| task | NK-WP-0037-T01 | done | — | workplans/NK-WP-0037-vergabe-company-welcome.md |
| task | NK-WP-0037-T02 | done | — | workplans/NK-WP-0037-vergabe-company-welcome.md |
| task | NK-WP-0038-T01 | done | — | workplans/NK-WP-0038-tenant-scoped-identity-lifecycle.md |
| task | NK-WP-0038-T02 | done | — | workplans/NK-WP-0038-tenant-scoped-identity-lifecycle.md |
| task | NK-WP-0039-T01 | done | — | workplans/NK-WP-0039-flex-auth-access-engine-coordinate-intake.md |
| task | NK-WP-0039-T02 | done | — | workplans/NK-WP-0039-flex-auth-access-engine-coordinate-intake.md |
| task | NK-WP-0039-T03 | done | — | workplans/NK-WP-0039-flex-auth-access-engine-coordinate-intake.md |
| task | NK-WP-0039-T04 | done | — | workplans/NK-WP-0039-flex-auth-access-engine-coordinate-intake.md |
| task | NK-WP-0040-T01 | done | — | workplans/NK-WP-0040-execution-attribution-receipt.md |
| task | NK-WP-0040-T02 | wait | — | workplans/NK-WP-0040-execution-attribution-receipt.md |
| task | NK-WP-0041-T01 | done | — | workplans/NK-WP-0041-onboarding-journey-usability.md |
| task | NK-WP-0041-T02 | done | — | workplans/NK-WP-0041-onboarding-journey-usability.md |
| task | NK-WP-0041-T03 | done | — | workplans/NK-WP-0041-onboarding-journey-usability.md |
| task | NK-WP-0042-T01 | done | — | workplans/NK-WP-0042-workload-mfa-step-up.md |
| task | NK-WP-0042-T02 | cancel | — | workplans/NK-WP-0042-workload-mfa-step-up.md |
| task | NK-WP-0043-T01 | done | — | workplans/NK-WP-0043-cadence-assessment-and-operating-guidance.md |
| task | NK-WP-0043-T02 | done | — | workplans/NK-WP-0043-cadence-assessment-and-operating-guidance.md |
| task | NK-WP-0043-T03 | done | — | workplans/NK-WP-0043-cadence-assessment-and-operating-guidance.md |
| task | NK-WP-0044-T01 | done | — | workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md |
| task | NK-WP-0044-T02 | done | — | workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md |
| task | NK-WP-0044-T03 | done | — | workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md |
| task | NK-WP-0044-T04 | done | — | workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md |
| task | NK-WP-0044-T05 | done | — | workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md |
| task | NK-WP-0044-T06 | done | — | workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md |
| task | NK-WP-0044-T07 | done | — | workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md |
| task | NK-WP-0045-T01 | done | — | workplans/NK-WP-0045-root-grant-custody-record.md |
| task | NK-WP-0045-T02 | done | — | workplans/NK-WP-0045-root-grant-custody-record.md |
| task | NK-WP-0045-T03 | done | — | workplans/NK-WP-0045-root-grant-custody-record.md |
| task | NK-WP-0045-T04 | done | — | workplans/NK-WP-0045-root-grant-custody-record.md |
| task | NK-WP-0045-T05 | done | — | workplans/NK-WP-0045-root-grant-custody-record.md |
| task | NK-WP-0045-T06 | done | — | workplans/NK-WP-0045-root-grant-custody-record.md |
| task | NK-WP-0046-T01 | done | — | workplans/NK-WP-0046-secrets-engine-openbao-client-registration.md |
| task | NK-WP-0046-T02 | done | — | workplans/NK-WP-0046-secrets-engine-openbao-client-registration.md |
| task | NK-WP-0046-T03 | done | — | workplans/NK-WP-0046-secrets-engine-openbao-client-registration.md |
| task | NK-WP-0047-T01 | done | — | workplans/NK-WP-0047-platform-password-reset-mail.md |
| task | NK-WP-0047-T02 | done | — | workplans/NK-WP-0047-platform-password-reset-mail.md |
| task | NK-WP-0047-T03 | done | — | workplans/NK-WP-0047-platform-password-reset-mail.md |
| task | NK-WP-0048-T01 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T02 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T03 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T04 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T05 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T06 | wait | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T07 | wait | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T08 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T09 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T10 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T11 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T12 | todo | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T13 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T14 | todo | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T15 | todo | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T16 | todo | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T17 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T18 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0048-T19 | done | — | workplans/NK-WP-0048-security-case-types.md |
| task | NK-WP-0049-T01 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T02 | progress | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T03 | wait | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T04 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T05 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T06 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T07 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T08 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T09 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T10 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T11 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T12 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T13 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T14 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T15 | progress | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T16 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T17 | wait | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T18 | wait | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T19 | wait | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T20 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T21 | wait | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T22 | wait | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T23 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T24 | todo | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T25 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T26 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T27 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T28 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T29 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T30 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T31 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T32 | done | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0049-T33 | todo | — | workplans/NK-WP-0049-bootstrap-secret-free-recovery-handoff.md |
| task | NK-WP-0050-T01 | done | — | workplans/NK-WP-0050-playwright-consumer-registration.md |
| task | NK-WP-0050-T02 | progress | — | workplans/NK-WP-0050-playwright-consumer-registration.md |
| task | NK-WP-0050-T03 | wait | — | workplans/NK-WP-0050-playwright-consumer-registration.md |
| task | NK-WP-0051-T01 | done | — | workplans/NK-WP-0051-sign-in-diagnosis.md |
| task | NK-WP-0051-T02 | done | — | workplans/NK-WP-0051-sign-in-diagnosis.md |
| task | NK-WP-0051-T03 | done | — | workplans/NK-WP-0051-sign-in-diagnosis.md |
| task | NK-WP-0051-T04 | done | — | workplans/NK-WP-0051-sign-in-diagnosis.md |
| task | NK-WP-0051-T05 | done | — | workplans/NK-WP-0051-sign-in-diagnosis.md |
| task | NK-WP-0051-T06 | done | — | workplans/NK-WP-0051-sign-in-diagnosis.md |
| intake | NK-IN-0001 | closed | blue | docs/intakes/activity-core-ops-sso-operators.md |
| intake | NK-IN-0002 | closed | blue | docs/intakes/activity-core-ops-sso-operators.md |
| intake | NET-IN-0001 | open | — | intakes/intakes.md |
| intake | NET-IN-0002 | open | — | intakes/intakes.md |
| intake | NET-IN-0003 | open | — | intakes/intakes.md |
| intake | NET-IN-0004 | open | — | intakes/intakes.md |

View file

@ -0,0 +1 @@
{".custodian-brief.md": "100644 ea9ccd0b2bd2cc1ec89723b35c44c53f0d79ba98 0\t.custodian-brief.md\n", "WORK-RECORDS.md": "100644 76a6b7fc304c508f1b50010cb72d892826c6a831 0\tWORK-RECORDS.md\n"}

View file

@ -0,0 +1,73 @@
"""Normal file-scoped owner publication with exact unrelated-state preservation."""
from pathlib import Path
import argparse
import hashlib
import json
import subprocess
import sys
parser = argparse.ArgumentParser()
parser.add_argument('manifest', type=Path)
parser.add_argument('phase', choices=['commit', 'sync'])
args = parser.parse_args()
cfg = json.loads(args.manifest.read_text()); here = args.manifest.parent
root = Path('/home/worsch') / cfg['owner']; backup = here / 'publication-backup'
paths = [f['path'] for f in cfg['files']]
def git(*argv):
return subprocess.check_output(['git', '-C', str(root), *argv], stderr=subprocess.PIPE, timeout=40).decode().strip()
def preserve(restore=False):
for row in json.loads((backup / 'originals.json').read_text()):
name = row['path']; raw = (backup / (name + '.worktree')).read_bytes()
if restore:
(root / name).write_bytes(raw)
if row['index']:
mode, oid, stage, path = row['index'].split()
assert stage == '0'
git('update-index', '--cacheinfo', mode, oid, path)
assert (root / name).read_bytes() == raw
assert git('ls-files', '--stage', '--', name) == row['index']
if args.phase == 'commit':
assert git('rev-parse', 'HEAD') == cfg['base_revision']
assert git('ls-remote', 'origin', 'refs/heads/main').split()[0] == cfg['base_revision']
for row in cfg['files']:
assert hashlib.sha256((root / row['path']).read_bytes()).hexdigest() == row['sha256']
assert not backup.exists(); backup.mkdir()
originals = []
for name in ['.custodian-brief.md', 'WORK-RECORDS.md']:
if (root / name).exists():
(backup / (name + '.worktree')).write_bytes((root / name).read_bytes())
originals.append({'path': name, 'index': git('ls-files', '--stage', '--', name)})
(backup / 'originals.json').write_text(json.dumps(originals, indent=2) + '\n')
git('add', '--', *paths)
result = subprocess.run(['git', '-C', str(root), 'commit', '--only', '-m', cfg['message'], '--', *paths],
capture_output=True, text=True, timeout=240)
head = git('rev-parse', 'HEAD')
(here / 'publication-commit.json').write_text(json.dumps({'exit_code': result.returncode, 'commit': head,
'base': cfg['base_revision'], 'files': cfg['files'], 'stdout': result.stdout, 'stderr': result.stderr}, indent=2) + '\n')
preserve()
assert result.returncode == 0, 'normal commit refused; receipt retained'
assert set(git('diff-tree', '--no-commit-id', '--name-only', '-r', head).splitlines()) == set(paths)
print(json.dumps({'status': 'committed', 'owner': cfg['owner'], 'commit': head, 'files': len(paths)}))
else:
head = json.loads((here / 'publication-commit.json').read_text())['commit']
assert git('rev-parse', 'HEAD') == head
sys.path.insert(0, '/home/worsch/repo-manager/src')
from repo_manager.identifiers import ensure_missing_work_record_identifiers
preview = ensure_missing_work_record_identifiers(root, execute=False)
assert preview['ok'] and not preview['files_changed'] and not preview['assignments'], 'unrelated UUID assignment requires review'
try:
for label, argv, timeout in [
('consistency', ['statehub', 'fix-consistency', '--repo', cfg['owner'], '--json'], 300),
('projection', ['/home/worsch/repo-manager/.venv/bin/rmgr', 'sync', '--path', str(root), '--push'], 180)]:
result = subprocess.run(argv, cwd=root, capture_output=True, text=True, timeout=timeout)
(here / (label + '.json')).write_text(result.stdout)
(here / (label + '.stderr.txt')).write_text(result.stderr)
assert result.returncode == 0, label + ' refused; receipt retained'
finally:
preserve(restore=True)
projection = json.loads((here / 'projection.json').read_text())
assert projection['status'] == 'applied' and projection['commit'] == head
assert projection['receipt']['expected_commit'] == projection['receipt']['derived_commit'] == head
assert (projection['receipt']['instance_role'], projection['receipt']['instance_label']) == ('primary', 'railiance01')
assert git('ls-remote', 'origin', 'refs/heads/main').split()[0] == head
print(json.dumps({'status': 'applied', 'owner': cfg['owner'], 'commit': head, 'unrelated_work_preserved': True}))

View file

@ -0,0 +1,131 @@
{
"repo_slug": "the-custodian",
"repo_path": "/home/worsch/the-custodian",
"source_revision": null,
"source_revision_reason": "dirty_workplans",
"issues": [
{
"severity": "WARN",
"check_id": "C-35",
"message": "Repo Manager warning: workplans/: repository uses more than one workplan prefix: ['CUST-WP', 'THE-WP']",
"file_path": "workplans/",
"db_id": "",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-35",
"message": "Repo Manager contradictory: workplans/ADHOC-2026-08-25-retired.md: workplan id 'CUST-WP-ADHOC-2026-08-25-RETIRED' is not accepted by the canon kind registry",
"file_path": "workplans/ADHOC-2026-08-25-retired.md",
"db_id": "",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-05",
"message": "Title drift in 'cust-wp-0010': file='Domain and Repository Goals' db='Workplan Lifecycle Documentation' (file wins)",
"file_path": "workplans/CUST-WP-0010b-domain-and-repo-goals.md",
"db_id": "def8455a-9de4-4891-a15a-5b09ca98ab1e",
"file_value": "Domain and Repository Goals",
"db_value": "Workplan Lifecycle Documentation",
"fixable": true
},
{
"severity": "WARN",
"check_id": "C-20",
"message": "Workplan dependency target 'STATE-WP-0092' is not linked to State Hub",
"file_path": "workplans/CUST-WP-0072-fleet-flavor-and-depends-on-backfill.md",
"db_id": "",
"file_value": "STATE-WP-0092",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-40",
"message": "blocker satisfied, task still wait: 'CUST-WP-0073-T05' in workplan 'CUST-WP-0073' \u2014 decision 1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa is resolved",
"file_path": "workplans/CUST-WP-0073-agent-credential-separation.md#CUST-WP-0073-T05",
"db_id": "",
"file_value": "1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-39",
"message": "Human wait task 'CUST-WP-0079-T06' in workplan 'CUST-WP-0079' has needs_human: true without decision_id \u2014 unrouted human gate",
"file_path": "workplans/CUST-WP-0079-deterministic-security-flow.md#CUST-WP-0079-T06",
"db_id": "",
"file_value": "needs_human: true",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Closed DB workstream 'cust-wp-0010b' (id=416ff571\u2026, status=finished) has no backing workplan file",
"file_path": "",
"db_id": "416ff571-18cf-5cb2-9c8b-836f68a301b3",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'interactive-the-custodian@retired-20260828' (id=370c2481\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "370c2481-6806-41eb-a917-f8874f03184f",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'adhoc-2026-05-02@retired-20260827' (id=3f54ce9c\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "3f54ce9c-1f95-42de-894f-0f81a52ba2e8",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'the-custodian-adhoc-2026-07-02@retired-20260827' (id=5c53733b\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "5c53733b-c077-4a93-be66-9c3af8f9b6fd",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-26",
"message": "Workplan id 'THE-WP-0001' uses prefix 'THE-WP' but repo canonical prefix is 'CUST-WP' \u2014 new plans must conform",
"file_path": "workplans/THE-WP-0001-federation-interface.md",
"db_id": "",
"file_value": "THE-WP-0001",
"db_value": "CUST-WP",
"fixable": false
}
],
"fixes_applied": [
"bindings: synced 89/89",
"C-17 cleared: pushed 2 backlogged commit(s)",
"C-05 fixed: workstream def8455a\u2026 title \u2192 'Domain and Repository Goals'",
"push: pushed"
],
"summary": {
"fail": 0,
"automation_error": 0,
"warn": 7,
"info": 4
},
"result": "warn"
}

View file

@ -0,0 +1 @@
WARN: working-memory commit failed: Generated-only commits rejected: staged

View file

@ -0,0 +1,8 @@
{
"ok": false,
"status": "pending_commit",
"error": "authoritative workplan files have uncommitted changes",
"dirty_paths": [
"workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md"
]
}

View file

@ -0,0 +1,25 @@
{
"parent": "4097a0bfbc42b937f23a06d19d3aa4587c51927f",
"commit": "ffd995213c1d980172598a0f97371e4e9a63c75e",
"paths": [
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/FINAL-PROPOSAL.md",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/PROCESS-CONTRACT.md",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/action-inputs.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/artifact-manifest.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/build-transfer.py",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/cleanup-upload-staging.py",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/cpu-readonly-observation.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/executable-readonly-observation.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/execute-install.py",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/execution-receipt.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/final-readonly-dry-run.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/frozen-native-argv.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/install-verified.py",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/local-bytecode-refinement.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/local-transfer-check.py",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/local-transfer-verification.json"
],
"commit_exit_code": 0,
"stdout": "[main ffd9952] Record failed runtime trial and reviewed verification proposal (1/4)\n 16 files changed, 1298 insertions(+)\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/FINAL-PROPOSAL.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/PROCESS-CONTRACT.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/action-inputs.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/artifact-manifest.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/build-transfer.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/cleanup-upload-staging.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/cpu-readonly-observation.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/executable-readonly-observation.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/execute-install.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/execution-receipt.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/final-readonly-dry-run.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/frozen-native-argv.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/install-verified.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/local-bytecode-refinement.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/local-transfer-check.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/local-transfer-verification.json\n",
"stderr": "{\"blocked_blob_ids\": [], \"scanned_blobs\": 16, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"clean\"}\n"
}

View file

@ -0,0 +1,120 @@
{
"repo_slug": "the-custodian",
"repo_path": "/home/worsch/the-custodian",
"source_revision": null,
"source_revision_reason": "dirty_workplans",
"issues": [
{
"severity": "WARN",
"check_id": "C-35",
"message": "Repo Manager warning: workplans/: repository uses more than one workplan prefix: ['CUST-WP', 'THE-WP']",
"file_path": "workplans/",
"db_id": "",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-35",
"message": "Repo Manager contradictory: workplans/ADHOC-2026-08-25-retired.md: workplan id 'CUST-WP-ADHOC-2026-08-25-RETIRED' is not accepted by the canon kind registry",
"file_path": "workplans/ADHOC-2026-08-25-retired.md",
"db_id": "",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-20",
"message": "Workplan dependency target 'STATE-WP-0092' is not linked to State Hub",
"file_path": "workplans/CUST-WP-0072-fleet-flavor-and-depends-on-backfill.md",
"db_id": "",
"file_value": "STATE-WP-0092",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-40",
"message": "blocker satisfied, task still wait: 'CUST-WP-0073-T05' in workplan 'CUST-WP-0073' \u2014 decision 1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa is resolved",
"file_path": "workplans/CUST-WP-0073-agent-credential-separation.md#CUST-WP-0073-T05",
"db_id": "",
"file_value": "1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-39",
"message": "Human wait task 'CUST-WP-0079-T06' in workplan 'CUST-WP-0079' has needs_human: true without decision_id \u2014 unrouted human gate",
"file_path": "workplans/CUST-WP-0079-deterministic-security-flow.md#CUST-WP-0079-T06",
"db_id": "",
"file_value": "needs_human: true",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Closed DB workstream 'cust-wp-0010b' (id=416ff571\u2026, status=finished) has no backing workplan file",
"file_path": "",
"db_id": "416ff571-18cf-5cb2-9c8b-836f68a301b3",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'interactive-the-custodian@retired-20260828' (id=370c2481\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "370c2481-6806-41eb-a917-f8874f03184f",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'adhoc-2026-05-02@retired-20260827' (id=3f54ce9c\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "3f54ce9c-1f95-42de-894f-0f81a52ba2e8",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'the-custodian-adhoc-2026-07-02@retired-20260827' (id=5c53733b\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "5c53733b-c077-4a93-be66-9c3af8f9b6fd",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-26",
"message": "Workplan id 'THE-WP-0001' uses prefix 'THE-WP' but repo canonical prefix is 'CUST-WP' \u2014 new plans must conform",
"file_path": "workplans/THE-WP-0001-federation-interface.md",
"db_id": "",
"file_value": "THE-WP-0001",
"db_value": "CUST-WP",
"fixable": false
}
],
"fixes_applied": [
"bindings: synced 89/89",
"C-17 cleared: pushed 2 backlogged commit(s)",
"push: pushed"
],
"summary": {
"fail": 0,
"automation_error": 0,
"warn": 6,
"info": 4
},
"result": "warn"
}

View file

@ -0,0 +1 @@
WARN: working-memory commit failed: Generated-only commits rejected: staged

View file

@ -0,0 +1,25 @@
{
"parent": "ffd995213c1d980172598a0f97371e4e9a63c75e",
"commit": "6844177f48e15158678232d8259b87abded67b12",
"paths": [
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/pre-absolute-path-dry-run.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/process-fixture-results.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/process_supervision.py",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/r1-preservation.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/r1-to-r2.patch",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/r2-initial-readonly-dry-run.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/retained-headroom-refusal.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/retained-local-source-refusal.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/runtime.py",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/target-readonly-addendum.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/target-readonly-observation.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/test_process_supervision.py",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/transfer-archive.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r3/FINAL-PROPOSAL.md",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r3/action-inputs.json",
"docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r3/artifact-manifest.json"
],
"commit_exit_code": 0,
"stdout": "[main 6844177] Record failed runtime trial and reviewed verification proposal (2/4)\n 16 files changed, 1479 insertions(+)\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/pre-absolute-path-dry-run.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/process-fixture-results.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/process_supervision.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/r1-preservation.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/r1-to-r2.patch\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/r2-initial-readonly-dry-run.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/retained-headroom-refusal.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/retained-local-source-refusal.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/runtime.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/target-readonly-addendum.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/target-readonly-observation.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/test_process_supervision.py\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r2/transfer-archive.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r3/FINAL-PROPOSAL.md\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r3/action-inputs.json\n create mode 100644 docs/changes/netkingdom-target-2026-10-17/native-runtime-install-r3/artifact-manifest.json\n",
"stderr": "{\"blocked_blob_ids\": [], \"scanned_blobs\": 16, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"clean\"}\n"
}

View file

@ -0,0 +1,9 @@
{
"expected": "6844177f48e15158678232d8259b87abded67b12",
"actual": "08870d65de615cbb8b5e1f374bf53a2229c21930",
"intervening_paths": [
"docs/changes/netkingdom-target-2026-10-17/nk48-adapters-1.2-review/coordinator-review-r5.json"
],
"overlap_with_selected_paths": false,
"history_preserved": true
}

View file

@ -0,0 +1,120 @@
{
"repo_slug": "the-custodian",
"repo_path": "/home/worsch/the-custodian",
"source_revision": null,
"source_revision_reason": "dirty_workplans",
"issues": [
{
"severity": "WARN",
"check_id": "C-35",
"message": "Repo Manager warning: workplans/: repository uses more than one workplan prefix: ['CUST-WP', 'THE-WP']",
"file_path": "workplans/",
"db_id": "",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-35",
"message": "Repo Manager contradictory: workplans/ADHOC-2026-08-25-retired.md: workplan id 'CUST-WP-ADHOC-2026-08-25-RETIRED' is not accepted by the canon kind registry",
"file_path": "workplans/ADHOC-2026-08-25-retired.md",
"db_id": "",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-20",
"message": "Workplan dependency target 'STATE-WP-0092' is not linked to State Hub",
"file_path": "workplans/CUST-WP-0072-fleet-flavor-and-depends-on-backfill.md",
"db_id": "",
"file_value": "STATE-WP-0092",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-40",
"message": "blocker satisfied, task still wait: 'CUST-WP-0073-T05' in workplan 'CUST-WP-0073' \u2014 decision 1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa is resolved",
"file_path": "workplans/CUST-WP-0073-agent-credential-separation.md#CUST-WP-0073-T05",
"db_id": "",
"file_value": "1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-39",
"message": "Human wait task 'CUST-WP-0079-T06' in workplan 'CUST-WP-0079' has needs_human: true without decision_id \u2014 unrouted human gate",
"file_path": "workplans/CUST-WP-0079-deterministic-security-flow.md#CUST-WP-0079-T06",
"db_id": "",
"file_value": "needs_human: true",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Closed DB workstream 'cust-wp-0010b' (id=416ff571\u2026, status=finished) has no backing workplan file",
"file_path": "",
"db_id": "416ff571-18cf-5cb2-9c8b-836f68a301b3",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'interactive-the-custodian@retired-20260828' (id=370c2481\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "370c2481-6806-41eb-a917-f8874f03184f",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'adhoc-2026-05-02@retired-20260827' (id=3f54ce9c\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "3f54ce9c-1f95-42de-894f-0f81a52ba2e8",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "INFO",
"check_id": "C-08",
"message": "Retired DB workstream 'the-custodian-adhoc-2026-07-02@retired-20260827' (id=5c53733b\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
"file_path": "",
"db_id": "5c53733b-c077-4a93-be66-9c3af8f9b6fd",
"file_value": "",
"db_value": "",
"fixable": false
},
{
"severity": "WARN",
"check_id": "C-26",
"message": "Workplan id 'THE-WP-0001' uses prefix 'THE-WP' but repo canonical prefix is 'CUST-WP' \u2014 new plans must conform",
"file_path": "workplans/THE-WP-0001-federation-interface.md",
"db_id": "",
"file_value": "THE-WP-0001",
"db_value": "CUST-WP",
"fixable": false
}
],
"fixes_applied": [
"bindings: synced 89/89",
"C-17 cleared: pushed 1 backlogged commit(s)",
"push: pushed"
],
"summary": {
"fail": 0,
"automation_error": 0,
"warn": 6,
"info": 4
},
"result": "warn"
}

View file

@ -0,0 +1 @@
WARN: working-memory commit failed: Generated-only commits rejected: staged