diff --git a/.kaizen/agents/custodian-codex/supervision.json b/.kaizen/agents/custodian-codex/supervision.json index b8c7f1b1..b5adf536 100644 --- a/.kaizen/agents/custodian-codex/supervision.json +++ b/.kaizen/agents/custodian-codex/supervision.json @@ -635,7 +635,7 @@ { "proposal_id": "FORGE6-EXPAND-001", "disposition": "unscored", - "outcome": "unverified", + "outcome": "succeeded", "original_revision": 1, "original_digest_sha256": "508d540e578b8cb93a187de644f15d5ef404e2c0a90fdb96ef22cdbb2bb94c78", "proposal_ref": "docs/changes/CUST-WP-0080/forge-expansion-proposal.json", @@ -653,7 +653,9 @@ "refinement_or_rescue": false, "executed_revision": 1, "executed_digest_sha256": "508d540e578b8cb93a187de644f15d5ef404e2c0a90fdb96ef22cdbb2bb94c78", - "execution_note": "Serialized expansion running; checkpoint receipt records attempted and verified numeric IDs. Do not replay or infer completion while its process is live." + "execution_note": "Exact revision 1 completed with process exit 0. All 143 targets verified; final read-only audit preserves 23 baseline profiles and confirms 166 of 167 current repositories admitted, zero unknown profiles, and no probe refs, vetoes or ownership markers. Repository 55 remains explicit compatibility work. No refinement or rescue; standing authorization remains unscored.", + "final_verification_ref": "docs/evidence/2026-10-13-netkingdom-security/forge-expansion-final.json", + "verified_at": "2026-10-13T15:25:26.589770+00:00" } ] } diff --git a/docs/changes/CUST-WP-0080/probe_forge_api_access.py b/docs/changes/CUST-WP-0080/probe_forge_api_access.py new file mode 100644 index 00000000..81b1b18c --- /dev/null +++ b/docs/changes/CUST-WP-0080/probe_forge_api_access.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +"""Silent read-only API admission through the existing protected credential route.""" +import argparse +import datetime +import hashlib +import json +import os +from pathlib import Path +import subprocess +import sys +import urllib.error +import urllib.request + +URL = 'https://forgejo.coulomb.social/api/v1/user' + + +class NoRedirect(urllib.request.HTTPRedirectHandler): + def redirect_request(self, req, fp, code, msg, headers, newurl): + return None + + +def inner(receipt): + result={'scope':'GET /api/v1/user only; no repository, identity or credential changes', + 'at':datetime.datetime.now(datetime.timezone.utc).isoformat(),'result':'unverified'} + token=os.environ.get('API_TOKEN','') + if not token: + result['reason']='protected-injection-absent' + else: + try: + opener=urllib.request.build_opener(urllib.request.ProxyHandler({}),NoRedirect()) + request=urllib.request.Request(URL,headers={'Authorization':'token '+token,'Accept':'application/json'}) + with opener.open(request,timeout=15) as response: + result['http_status']=response.status + body=json.loads(response.read(65536)) + result['expected_caller']=body.get('login')=='tegwick' + result['caller_id']=body.get('id') if isinstance(body.get('id'),int) else None + result['site_admin']=body.get('is_admin') is True + result['result']='authenticated' if result['http_status']==200 and result['expected_caller'] else 'unverified' + except urllib.error.HTTPError as error: + result.update(http_status=error.code,reason='http-refused') + except Exception: + result['reason']='request-unverified' + receipt.write_text(json.dumps(result,indent=2)+'\n') + return 0 if result['result']=='authenticated' else 1 + + +def main(): + parser=argparse.ArgumentParser(description=__doc__) + parser.add_argument('--receipt',type=Path,required=True) + parser.add_argument('--inner',action='store_true') + args=parser.parse_args() + if args.inner:return inner(args.receipt) + if args.receipt.exists():raise SystemExit('Receipt already exists; retain the prior attempt.') + env=dict(os.environ,WARDEN_AGENT_ID='custodian-codex') + result=subprocess.run(['warden','access','forgejo-admin-api-token','--field','API_TOKEN','--exec','--', + sys.executable,str(Path(__file__).resolve()),'--inner','--receipt',str(args.receipt.resolve())], + capture_output=True,env=env,timeout=90) + if args.receipt.exists():record=json.loads(args.receipt.read_text()) + else:record={'result':'route-unavailable','scope':'Protected read-only API admission; child receipt absent'} + record.update(route_exit_code=result.returncode,executor_sha256=hashlib.sha256(Path(__file__).read_bytes()).hexdigest(), + token_returned_to_agent=False,raw_child_diagnostics_retained=False) + args.receipt.write_text(json.dumps(record,indent=2)+'\n') + print(json.dumps(record)) + return 0 if record['result']=='authenticated' else 1 + + +if __name__=='__main__': + try:sys.exit(main()) + except Exception:sys.exit('Protected API admission incomplete; raw diagnostics suppressed.') diff --git a/docs/changes/CUST-WP-0080/verify_forge_expansion.py b/docs/changes/CUST-WP-0080/verify_forge_expansion.py new file mode 100644 index 00000000..8f773ae8 --- /dev/null +++ b/docs/changes/CUST-WP-0080/verify_forge_expansion.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +"""Independent read-only final inventory and cleanup audit for the exact cohort.""" +import argparse +import datetime +import hashlib +import importlib.util +import json +from pathlib import Path +import shlex +import subprocess +import sys + +HERE=Path(__file__).parent +s=importlib.util.spec_from_file_location('expand',HERE/'expand_forge_profiles.py') +m=importlib.util.module_from_spec(s) +s.loader.exec_module(m) + + +def main(): + parser=argparse.ArgumentParser(description=__doc__) + parser.add_argument('--inventory',type=Path,required=True) + parser.add_argument('--fresh-inventory',type=Path,required=True) + parser.add_argument('--inventory-receipt',type=Path,required=True) + parser.add_argument('--receipt',type=Path,required=True) + args=parser.parse_args() + p=json.loads((HERE/'forge-expansion-proposal.json').read_text()) + activation=Path('docs/evidence/2026-10-13-netkingdom-security/forge-expansion-activation.json') + a=json.loads(activation.read_text()) + assert a['result']=='verified' and a['ownership_markers_removed'] and a['vetoes_removed'],'activation-not-complete' + assert a['proposal_sha256']==hashlib.sha256((HERE/'forge-expansion-proposal.json').read_bytes()).hexdigest() + assert len(a['verified_ids'])==len(set(a['verified_ids']))==p['target_count'] + assert set(a['verified_ids'])==set(a['attempted_ids'])==set(p['target_ids']) + assert hashlib.sha256(args.inventory.read_bytes()).hexdigest()==p['inventory_sha256'] + old=json.loads(args.inventory.read_text());baseline={r['id'] for r in old['repositories'] if r['profile']=='admitted'} + process=subprocess.run([sys.executable,str(HERE/'inventory_forge_coverage.py'), + '--private-output',str(args.fresh_inventory),'--receipt',str(args.inventory_receipt)],capture_output=True,timeout=180) + if process.returncode:raise ValueError('fresh-inventory-incomplete') + fresh=json.loads(args.fresh_inventory.read_text());by_id={r['id']:r for r in fresh['repositories']} + expected=baseline|set(p['target_ids']) + assert all(by_id[i]['profile']=='admitted' for i in expected),'profile-not-preserved' + assert not any(r['profile']=='unknown' for r in by_id.values()),'unknown-hook-profile' + original=json.loads((HERE/'receive-hook-proposal.json').read_text()) + pod=m.t.target_pod(m.t.deployment(),original) + assert pod['pod_uid']==fresh['pod_uid'],'pod-changed-during-final-audit' + commands=['set -euo pipefail'] + for i in p['target_ids']: + path=m.repo_path(by_id[i]) + commands += ['repo='+shlex.quote(path), + 'test ! -e "$repo/hooks/pre-receive.d/'+p['veto_name']+'"', + 'test ! -e "$repo/.custodian-expand-'+original['hook_name']+'"', + 'test ! -e "$repo/.custodian-expand-'+p['veto_name']+'"', + 'test -z "$(git --git-dir="$repo" for-each-ref --format=\'%(refname)\' '+shlex.quote(p['probe_ref'])+')"'] + m.t.native.execute(pod,'bash','-s',payload=('\n'.join(commands)+'\n').encode(),timeout=180) + summary=json.loads(args.inventory_receipt.read_text()) + receipt={'result':'verified','observed_at':datetime.datetime.now(datetime.timezone.utc).isoformat(), + 'proposal_id':p['proposal_id'],'activation_receipt_sha256':hashlib.sha256(activation.read_bytes()).hexdigest(), + 'baseline_profiles_preserved':len(baseline),'expanded_profiles_verified':len(p['target_ids']), + 'current_profiles':summary['profiles'],'current_repositories':summary['repositories'], + 'no_probe_refs_or_vetoes_or_ownership_markers':True, + 'blocked_synthetic_commits_absent':'Verified separately by every native SSH probe in the activation receipt.', + 'remaining_builtin_only_ids':[r['id'] for r in by_id.values() if r['profile']=='builtin-only'], + 'api_route':'Unverified: protected route did not hand off; current capabilities check denied; attended login required.', + 'scope':'Exact native SSH scanner verdicts under ref-specific vetoes plus fresh hook/directory/custody and cleanup audit. Ordinary source acceptance remains separate; no full DSM conformance claimed.'} + args.receipt.write_text(json.dumps(receipt,indent=2)+'\n');print(json.dumps(receipt)) + + +if __name__=='__main__':main() diff --git a/docs/evidence/2026-10-12-netkingdom-security/sec-dsm-requirement-ledger.json b/docs/evidence/2026-10-12-netkingdom-security/sec-dsm-requirement-ledger.json index 893e26d6..dc86d467 100644 --- a/docs/evidence/2026-10-12-netkingdom-security/sec-dsm-requirement-ledger.json +++ b/docs/evidence/2026-10-12-netkingdom-security/sec-dsm-requirement-ledger.json @@ -840,9 +840,9 @@ ], "closure_evidence": [], "assessment": { - "scope": "Reviewed workstation checkouts and 22 deployed Forgejo repositories; separate exact-image isolated lifecycle checks; no estate-wide conformance inferred", - "observed": "Inherited generated-only hook allowed a synthetic private-key commit. New pinned scanner adapter detects that fixture in complete changed staged blobs with real-scanner tests. Actual configured hooks now enforce the pinned scanner on 22 exact workstation roots: clean accepted, disposable private key rejected, generated-only guard retained, unavailable scanner refused. Temporary alternate indexes/object stores preserved user state; unreviewed checkout behavior and routing stayed unchanged. Forge-owned introduced-history adapter now passes 33 source/protocol leaf cases with actual disposable pushes; exact-binary native activation is now verified on 22 Forgejo repositories. Actual SSH clean/detection probes passed under a temporary veto, with absent probe refs/quarantine and veto cleanup; fresh read-only hashes match. Ordinary source pushes to Custodian and railiance-forge succeeded. Separate exact-image isolated HTTP/API/merge, regeneration, Git-template inheritance and restart checks pass (23 assertions), with all earlier incomplete preparation attempts retained. Exact template source was deployed on October 13: same-image generation 12 Ready, actual global Git template selection and regular/executable inheritance in a native temporary repository verified, all original 22 profiles/binaries preserved. Thirty isolated mounted-file/configuration/rollback checks and six conditional-patch regressions pass. The first live template rollout subsequently failed ordinary source acceptance: group-writable0775 scanner permissions were refused. Trial retained as failed. Recovery restored0755 and persisted a hash/owner-checked startup guard (railiance-apps50b66c4). Two Kubernetes replacements, generations13/14, completed the guard and passed inherited native clean/secret/quarantine/recovery probes. Six isolated custody checks pass; builtin authorization excluded in temporary native probes. See recovery summary for separate ordinary SSH acceptance.", - "remaining": "Fresh inventory has 166 repositories: 22 installed profiles and 144 builtin-only; other workstation clones remain uncovered. Production authenticated HTTP/SSO/frontend creation remains open. Import/mirror clone/fetch bypass receive-pack; historical, LFS, logs/artifacts/runtime coverage, CI authority and private detection-to-response are unverified.", + "scope": "22 reviewed workstation checkouts and 166 of 167 deployed Forgejo repositories; isolated lifecycle checks separately scoped; no estate-wide conformance inferred", + "observed": "Inherited generated-only hook allowed a synthetic private-key commit. New pinned scanner adapter detects that fixture in complete changed staged blobs with real-scanner tests. Actual configured hooks now enforce the pinned scanner on 22 exact workstation roots: clean accepted, disposable private key rejected, generated-only guard retained, unavailable scanner refused. Temporary alternate indexes/object stores preserved user state; unreviewed checkout behavior and routing stayed unchanged. Forge-owned introduced-history adapter now passes 33 source/protocol leaf cases with actual disposable pushes; exact-binary native activation is now verified on 22 Forgejo repositories. Actual SSH clean/detection probes passed under a temporary veto, with absent probe refs/quarantine and veto cleanup; fresh read-only hashes match. Ordinary source pushes to Custodian and railiance-forge succeeded. Separate exact-image isolated HTTP/API/merge, regeneration, Git-template inheritance and restart checks pass (23 assertions), with all earlier incomplete preparation attempts retained. Exact template source was deployed on October 13: same-image generation 12 Ready, actual global Git template selection and regular/executable inheritance in a native temporary repository verified, all original 22 profiles/binaries preserved. Thirty isolated mounted-file/configuration/rollback checks and six conditional-patch regressions pass. The first live template rollout subsequently failed ordinary source acceptance: group-writable0775 scanner permissions were refused. Trial retained as failed. Recovery restored0755 and persisted a hash/owner-checked startup guard (railiance-apps50b66c4). Two Kubernetes replacements, generations13/14, completed the guard and passed inherited native clean/secret/quarantine/recovery probes. Six isolated custody checks pass; builtin authorization excluded in temporary native probes. See recovery summary for separate ordinary SSH acceptance. Exact FORGE6-EXPAND-001 completed 143 further native SSH scanner/verdict probes under ref-specific vetoes. Final audit verifies 166 of 167 profiles, all 23 baseline profiles preserved, zero unknown profiles and no probe refs, vetoes or ownership markers.", + "remaining": "One repository (numeric ID 55) has four external submodules and remains builtin-only; other workstation clones remain uncovered. Production authenticated HTTP/API/SSO/frontend acceptance is open; protected credential route unavailable before child handoff. Import/mirror clone/fetch bypass receive-pack; historical, LFS, logs/artifacts/runtime coverage, CI authority and private detection-to-response remain unverified.", "owner_task": "RMGR-WP-0021-T01/T02/T03/T04; CUST-WP-0080-T03; FORGE-WP-0006-T02/T03", "verification_evidence": [ "secret-detection.json", @@ -855,7 +855,9 @@ "../2026-10-13-netkingdom-security/forge-template-activation.json", "../2026-10-13-netkingdom-security/forge-template-isolated.json", "../2026-10-13-netkingdom-security/forge-hook-coverage-refresh.json", - "../2026-10-13-netkingdom-security/forge-custody-recovery-summary.json" + "../2026-10-13-netkingdom-security/forge-custody-recovery-summary.json", + "../2026-10-13-netkingdom-security/forge-expansion-final.json", + "../2026-10-13-netkingdom-security/forge-api-route-readiness.json" ], "assessed_at": "2026-10-13" } @@ -873,9 +875,9 @@ ], "closure_evidence": [], "assessment": { - "scope": "Reviewed workstation checkouts and 22 deployed Forgejo repositories; separate exact-image isolated lifecycle checks; no estate-wide conformance inferred", - "observed": "Verified local hook wiring in 21 review repositories plus Custodian; source adapter covers changed Git index blobs only. Actual configured hooks now enforce the pinned scanner on 22 exact workstation roots: clean accepted, disposable private key rejected, generated-only guard retained, unavailable scanner refused. Temporary alternate indexes/object stores preserved user state; unreviewed checkout behavior and routing stayed unchanged. Forge-owned introduced-history adapter now passes 33 source/protocol leaf cases with actual disposable pushes; exact-binary native activation is now verified on 22 Forgejo repositories. Actual SSH clean/detection probes passed under a temporary veto, with absent probe refs/quarantine and veto cleanup; fresh read-only hashes match. Ordinary source pushes to Custodian and railiance-forge succeeded. Separate exact-image isolated HTTP/API/merge, regeneration, Git-template inheritance and restart checks pass (23 assertions), with all earlier incomplete preparation attempts retained. Exact template source was deployed on October 13: same-image generation 12 Ready, actual global Git template selection and regular/executable inheritance in a native temporary repository verified, all original 22 profiles/binaries preserved. Thirty isolated mounted-file/configuration/rollback checks and six conditional-patch regressions pass. The first live template rollout subsequently failed ordinary source acceptance: group-writable0775 scanner permissions were refused. Trial retained as failed. Recovery restored0755 and persisted a hash/owner-checked startup guard (railiance-apps50b66c4). Two Kubernetes replacements, generations13/14, completed the guard and passed inherited native clean/secret/quarantine/recovery probes. Six isolated custody checks pass; builtin authorization excluded in temporary native probes. See recovery summary for separate ordinary SSH acceptance.", - "remaining": "Fresh inventory has 166 repositories: 22 installed profiles and 144 builtin-only; other workstation clones remain uncovered. Production authenticated HTTP/SSO/frontend creation remains open. Import/mirror clone/fetch bypass receive-pack; historical, LFS, logs/artifacts/runtime coverage, CI authority and private detection-to-response are unverified.", + "scope": "22 reviewed workstation checkouts and 166 of 167 deployed Forgejo repositories; isolated lifecycle checks separately scoped; no estate-wide conformance inferred", + "observed": "Verified local hook wiring in 21 review repositories plus Custodian; source adapter covers changed Git index blobs only. Actual configured hooks now enforce the pinned scanner on 22 exact workstation roots: clean accepted, disposable private key rejected, generated-only guard retained, unavailable scanner refused. Temporary alternate indexes/object stores preserved user state; unreviewed checkout behavior and routing stayed unchanged. Forge-owned introduced-history adapter now passes 33 source/protocol leaf cases with actual disposable pushes; exact-binary native activation is now verified on 22 Forgejo repositories. Actual SSH clean/detection probes passed under a temporary veto, with absent probe refs/quarantine and veto cleanup; fresh read-only hashes match. Ordinary source pushes to Custodian and railiance-forge succeeded. Separate exact-image isolated HTTP/API/merge, regeneration, Git-template inheritance and restart checks pass (23 assertions), with all earlier incomplete preparation attempts retained. Exact template source was deployed on October 13: same-image generation 12 Ready, actual global Git template selection and regular/executable inheritance in a native temporary repository verified, all original 22 profiles/binaries preserved. Thirty isolated mounted-file/configuration/rollback checks and six conditional-patch regressions pass. The first live template rollout subsequently failed ordinary source acceptance: group-writable0775 scanner permissions were refused. Trial retained as failed. Recovery restored0755 and persisted a hash/owner-checked startup guard (railiance-apps50b66c4). Two Kubernetes replacements, generations13/14, completed the guard and passed inherited native clean/secret/quarantine/recovery probes. Six isolated custody checks pass; builtin authorization excluded in temporary native probes. See recovery summary for separate ordinary SSH acceptance. Exact FORGE6-EXPAND-001 completed 143 further native SSH scanner/verdict probes under ref-specific vetoes. Final audit verifies 166 of 167 profiles, all 23 baseline profiles preserved, zero unknown profiles and no probe refs, vetoes or ownership markers.", + "remaining": "One repository (numeric ID 55) has four external submodules and remains builtin-only; other workstation clones remain uncovered. Production authenticated HTTP/API/SSO/frontend acceptance is open; protected credential route unavailable before child handoff. Import/mirror clone/fetch bypass receive-pack; historical, LFS, logs/artifacts/runtime coverage, CI authority and private detection-to-response remain unverified.", "owner_task": "RMGR-WP-0021-T01/T02/T03/T04; CUST-WP-0080-T03; FORGE-WP-0006-T02/T03", "verification_evidence": [ "secret-detection.json", @@ -888,7 +890,9 @@ "../2026-10-13-netkingdom-security/forge-template-activation.json", "../2026-10-13-netkingdom-security/forge-template-isolated.json", "../2026-10-13-netkingdom-security/forge-hook-coverage-refresh.json", - "../2026-10-13-netkingdom-security/forge-custody-recovery-summary.json" + "../2026-10-13-netkingdom-security/forge-custody-recovery-summary.json", + "../2026-10-13-netkingdom-security/forge-expansion-final.json", + "../2026-10-13-netkingdom-security/forge-api-route-readiness.json" ], "assessed_at": "2026-10-13" } diff --git a/docs/evidence/2026-10-13-netkingdom-security/forge-api-access.json b/docs/evidence/2026-10-13-netkingdom-security/forge-api-access.json new file mode 100644 index 00000000..30a846ff --- /dev/null +++ b/docs/evidence/2026-10-13-netkingdom-security/forge-api-access.json @@ -0,0 +1,8 @@ +{ + "result": "route-unavailable", + "scope": "Protected read-only API admission; child receipt absent", + "route_exit_code": 5, + "executor_sha256": "ba3a98f6bd078a1eb933754b6eb50e0dbb61412eeaf4de9b497dbe513e590f61", + "token_returned_to_agent": false, + "raw_child_diagnostics_retained": false +} diff --git a/docs/evidence/2026-10-13-netkingdom-security/forge-api-capabilities.json b/docs/evidence/2026-10-13-netkingdom-security/forge-api-capabilities.json new file mode 100644 index 00000000..7e36145e --- /dev/null +++ b/docs/evidence/2026-10-13-netkingdom-security/forge-api-capabilities.json @@ -0,0 +1,8 @@ +{ + "probe": "capabilities-only", + "route": "forgejo-admin-api-token", + "exit_code": 2, + "capabilities": [], + "error_class": "permission-denied", + "secret_value_requested": false +} diff --git a/docs/evidence/2026-10-13-netkingdom-security/forge-api-route-readiness.json b/docs/evidence/2026-10-13-netkingdom-security/forge-api-route-readiness.json new file mode 100644 index 00000000..dd51fc99 --- /dev/null +++ b/docs/evidence/2026-10-13-netkingdom-security/forge-api-route-readiness.json @@ -0,0 +1,22 @@ +{ + "observed_at": "2026-10-13T15:13:41.153515+00:00", + "route": "forgejo-admin-api-token", + "credential_owner": "railiance-platform", + "protected_transport": "warden access --exec --field API_TOKEN", + "route_plan_verdict": "autonomous route in catalog; not proof of current authentication or permission", + "protected_probe_receipt": "forge-api-access.json", + "capabilities_receipt": "forge-api-capabilities.json", + "observed_route_exit_code": 5, + "protected_child_ran": false, + "capabilities_result": "permission-denied", + "login_plan": { + "lane": "key-cape-oidc-login", + "verdict": "founder_required", + "kind": "oidc_login" + }, + "next_requirement": "Prepare and verify one complete scoped API/HTTP acceptance command, then include its contained login+execution in the existing attended window. Do not request a login-only session or expose the token.", + "credential_scope_expanded": false, + "secret_value_returned": false, + "legacy_token_file_used": false, + "http_acceptance": "unverified" +} diff --git a/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-activation.json b/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-activation.json new file mode 100644 index 00000000..78be1324 --- /dev/null +++ b/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-activation.json @@ -0,0 +1,303 @@ +{ + "proposal_id": "FORGE6-EXPAND-001", + "proposal_sha256": "508d540e578b8cb93a187de644f15d5ef404e2c0a90fdb96ef22cdbb2bb94c78", + "pod_uid": "d4728052-b8df-4574-8a3e-74490a04472d", + "result": "verified", + "target_count": 143, + "attempted_ids": [ + 1, + 6, + 7, + 8, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 56, + 57, + 58, + 59, + 61, + 62, + 63, + 64, + 65, + 66, + 68, + 69, + 70, + 72, + 73, + 74, + 75, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 103, + 104, + 105, + 106, + 107, + 109, + 110, + 112, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 125, + 126, + 127, + 128, + 130, + 132, + 133, + 134, + 135, + 136, + 140, + 141, + 142, + 143, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171 + ], + "verified_ids": [ + 1, + 6, + 7, + 8, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 56, + 57, + 58, + 59, + 61, + 62, + 63, + 64, + 65, + 66, + 68, + 69, + 70, + 72, + 73, + 74, + 75, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 103, + 104, + 105, + 106, + 107, + 109, + 110, + 112, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 125, + 126, + 127, + 128, + 130, + 132, + 133, + 134, + 135, + 136, + 140, + 141, + 142, + 143, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171 + ], + "at": "2026-10-13T14:48:43.346657+00:00", + "clean_scanner_and_synthetic_refusal_under_veto": true, + "no_probe_refs_or_quarantined_commits": true, + "vetoes_removed": true, + "original_dispatchers_preserved": true, + "ownership_markers_removed": true +} diff --git a/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-final-check-plan.json b/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-final-check-plan.json new file mode 100644 index 00000000..f14abdd0 --- /dev/null +++ b/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-final-check-plan.json @@ -0,0 +1,20 @@ +{ + "proposal_id": "FORGE6-EXPAND-001", + "activation_receipt": "forge-expansion-activation.json", + "required_before_claiming_success": [ + "Process exits successfully; receipt result verified with all143distinct target IDs and cleanup flags", + "Fresh database/directory count and exact-hook inventory, preserving the23baseline profiles", + "No probe ref, blocked synthetic commit or temporary veto retained according to each actual SSH probe pair", + "No .custodian-expand-* ownership markers in repository roots", + "Named external-gitlink repository remains explicit uncovered work", + "Successful ordinary source sync push after expansion; no claim that vetoed probes alone prove ordinary acceptance for every repository" + ], + "remaining_native_gates": [ + "Production authenticated HTTP/API/frontend and merge acceptance", + "SSO lifecycle acceptance", + "External gitlink admission/handling", + "Import/mirror and history/LFS/log/artifact detection", + "CI authority and private detection-to-response" + ], + "http_route_ref": "forge-api-route-readiness.json" +} diff --git a/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-final.json b/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-final.json new file mode 100644 index 00000000..ce3e610d --- /dev/null +++ b/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-final.json @@ -0,0 +1,21 @@ +{ + "result": "verified", + "observed_at": "2026-10-13T15:25:26.589770+00:00", + "proposal_id": "FORGE6-EXPAND-001", + "activation_receipt_sha256": "574f93dbf8f7c90f72722643705a546fe00edc2865b86045fdef159e0248b997", + "baseline_profiles_preserved": 23, + "expanded_profiles_verified": 143, + "current_profiles": { + "admitted": 166, + "builtin-only": 1, + "unknown": 0 + }, + "current_repositories": 167, + "no_probe_refs_or_vetoes_or_ownership_markers": true, + "blocked_synthetic_commits_absent": "Verified separately by every native SSH probe in the activation receipt.", + "remaining_builtin_only_ids": [ + 55 + ], + "api_route": "Unverified: protected route did not hand off; current capabilities check denied; attended login required.", + "scope": "Exact native SSH scanner verdicts under ref-specific vetoes plus fresh hook/directory/custody and cleanup audit. Ordinary source acceptance remains separate; no full DSM conformance claimed." +} diff --git a/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-post-inventory.json b/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-post-inventory.json new file mode 100644 index 00000000..d1931c6e --- /dev/null +++ b/docs/evidence/2026-10-13-netkingdom-security/forge-expansion-post-inventory.json @@ -0,0 +1,21 @@ +{ + "result": "reconciled", + "observed_at": "2026-10-13T15:25:24.371725+00:00", + "pod_uid": "d4728052-b8df-4574-8a3e-74490a04472d", + "repositories": 167, + "repository_directories": 167, + "profiles": { + "admitted": 166, + "builtin-only": 1, + "unknown": 0 + }, + "builtin_only_head_compatible": 0, + "repositories_with_head_gitlinks": 1, + "shallow": 0, + "partial": 0, + "mirrors": 0, + "private": 12, + "lfs_nonzero_size": 0, + "private_inventory_sha256": "f259e909fc2fcb85867c6ca0d33b2765d36f9f0fc4d71e274e6ac9bd07b7a457", + "scope": "Current database/directory reconciliation, exact hook content, shallow/partial and default-HEAD gitlink compatibility; not historical scanning or authenticated route acceptance." +} diff --git a/docs/netkingdom-security-gaps.md b/docs/netkingdom-security-gaps.md index 89552108..9d085931 100644 --- a/docs/netkingdom-security-gaps.md +++ b/docs/netkingdom-security-gaps.md @@ -15,7 +15,7 @@ No whole-estate SEC-DSM conformance or maturity level is claimed. | G04 | Credential inventory is incomplete and its five metadata fields do not by themselves establish full SEC-DSM lifecycle coverage. Mason's dated survey found 49 paths; coverage is not current estate-wide discovery. | MASON-WP-0004-T03/T04; RPF-WP-0035; CUST-WP-0080-T03 | Current metadata-only discovery denominator; owners/consumers/scopes; rotation and revocation procedures; unknown entries remain findings | | G05 | Agent effective authority and credential isolation are unproven. Glas declares no ready profile; the Custodian record grants no autopilot authority. | CUST-WP-0073-T02/T04; GLAS-WP-0012 | Actual admitted agent identity, runtime read-denial and tool-effect restrictions, task expiry/cancel cleanup, no cross-task credential accumulation | | G06 | Native evidence delivery, source completeness and attribution remain incomplete. Independent archive custody is not source completeness. | AUDIT-WP-0013/0014/0015; RPF-WP-0035-T08; existing FLEX-WP-0031 and NK-WP-0035/0040 residual records | Admitted sender, durable outbox, native archive readback, heartbeat/reconciliation and failure recovery. Residual work requires explicit promotion | -| G07 | The original generated-only hook accepted a disposable private-key commit. The pinned scanner is now enforced by actual configured hooks on 22 exact workstation checkouts; clean, synthetic-secret, generated-only and unavailable-scanner probes pass. The additive forge scanner is installed on the same 22 named repositories and SSH refusal probes passed; ordinary SSH acceptance is verified; other deployed write paths, broader forge/CI coverage and response remain unverified. | RMGR-WP-0021-T01/T02 source and local activation done; T03 forge/CI via FORGE-WP-0006, T04 response open; CUST-WP-0080-T03 coordinates railiance-forge ownership | Deterministic production-repo inventory; actual prevention/detection runs; scanner findings kept private; finding-to-revocation procedure | +| G07 | The original generated-only hook accepted a disposable private-key commit. The pinned scanner is now enforced by actual configured hooks on 22 exact workstation checkouts; clean, synthetic-secret, generated-only and unavailable-scanner probes pass. The additive forge scanner is verified on 166 of 167 repositories, including 143 newly probed targets; one repository with four external submodules remains uncovered. Ordinary SSH source acceptance is verified separately; authenticated HTTP/frontend, CI and response remain open. | RMGR-WP-0021-T01/T02 source and local activation done; T03 forge/CI via FORGE-WP-0006, T04 response open; CUST-WP-0080-T03 coordinates railiance-forge ownership | Deterministic production-repo inventory; actual prevention/detection runs; scanner findings kept private; finding-to-revocation procedure | | G08 | Legacy root export and generation-prefix disclosure reproduced and removed in source. Bootstrap now uses a registered public recipient, explicit temporary-key resume and an encrypted handoff bound to the bundle digest. Other custody callers and native recovery acceptance remain unverified. | NK-WP-0049 T01 repaired; T02 caller reconciliation; T03 native recovery. NK-WP-0045 covers only the non-secret root-grant record; CUST-WP-0073 retains isolation/incident work | Inspect actual bootstrap callers; stop secret output reaching model/logs; owner-reviewed safe recovery procedure and tests | | G09 | Rotation and revocation closure are incomplete: existing exposure rotation is founder-deferred, npm migration remains open, and five-field descriptions do not prove consumer adoption. | CUST-WP-0073-T05; SECRETS-WP-0006-T06; WARDEN-WP-0037-T03; RPF-WP-0035-T07 | For each relevant credential: new consumer accepted, old credential refused, copies reconciled; explicit DSM exception if still deferred | | G10 | Build-mode exceptions and close-down checklist do not uniformly contain DSM-EXC requirement, risk, compensating controls and review fields. | CUST-WP-0080-T03; existing security-close-down checklist and October 11 decisions | Requirement-level exception records with real approval references and revalidation; no invented approval or retroactive conformance | @@ -173,6 +173,22 @@ supersedes the initial acceptance claim without discarding its original receipt. The temporary native probes exclude builtin authorization; ordinary source pushes supply separate SSH evidence. G07 and all wider coverage requirements remain open. +2026-10-13 expansion completed: FORGE6-EXPAND-001 revision 1 exited 0 after +all 143 targets passed actual SSH clean/scanner-refusal probes under an exact-ref +veto. The independent final read-only audit reconciles 167 repositories: 166 +admitted profiles, one builtin-only (numeric ID 55), zero unknown profiles. All +23 baseline profiles remain exact; no probe refs, temporary vetoes or ownership +markers remain. Each rejected synthetic commit was absent after its probe. +Repository 55 has four external submodules and remains required compatibility +work. Ordinary source acceptance is distinct from vetoed scanner checks. +Production HTTP/API/frontend acceptance remains unverified: the protected API +credential route failed before child handoff and the metadata-only capability +check denied access. Prepare one complete acceptance command for the existing +attended login window. CI, import/mirror, historical/LFS/log/artifact detection +and private response gates remain open; this is no whole-estate closure. +Evidence: Custodian `docs/evidence/2026-10-13-netkingdom-security/forge-expansion-final.json` +and `forge-api-route-readiness.json`. + ## SEC DSM requirement coverage Each numbered requirement in these families is in scope for assessment. The diff --git a/docs/security-close-down-checklist.md b/docs/security-close-down-checklist.md index de242e5c..956ef19a 100644 --- a/docs/security-close-down-checklist.md +++ b/docs/security-close-down-checklist.md @@ -27,4 +27,4 @@ Add a row whenever you loosen, shortcut or leave unarmed a control. Remove nothi | 18 | Ordinary authenticated operator/PDP admission for User Engine application.register | Executed one-use exception USER-CATALOGUE-INFDEC-20261011-R1 under confirmed founder approval b859698b-5d08-4da5-9599-4760c6a799f1 (02:07:09Z). Exact executor b0dbbb97 and transport3e594e0e; packet307c4fc5, grant SHA 72ee846034809f4ae6848eac3a43f2b7390f1df7a67ede50eff7435d1b43f839. Two exact informed-decision catalogue records committed; genuine denial retained, three truthful audits, one consumed ledger and unsent/unclaimed registered event verified. Private grant removed. Ordinary management admission remains unmet; no IAM/human claim/future registration/targeted replay authority. Execution deadline2026-10-12T23:59:59Z does not erase facts. [Outcome](evidence/2026-10-10-security-consolidation/user-catalogue-independent-postapply-verification.json). | Before customer production, supported authenticated operator management with genuine ordinary allow/deny/attribution and unavailable refusal; retire bootstrap use, preserve/reconcile ledger/audits/events. Broader USER-WP-0026-T03/USER-WP-0028-T02 remain live; no human journey completion inferred. | user-engine, access-engine; Custodian tracks | 2026-10-11 | | 19 | Fresh informed-decision readback during a failed T05 rollout | Exact new trial INFD-WP-0009-T05/zlib85091-r1 approved under founder acceptance b5ce337c-5d7d-44fa-864d-706b54039f7c at2026-10-11T10:40:55Z. Image f558/source312ab97 verified Ready and actual canonical lifecycle HTTP200 at11:20:25Z, with latest database preserved. Proposed bounded30minute manual outage recovery was expressly accepted but never invoked; trial completed. Original proposed packet and pre-execution refusals remain immutable. [Outcome](evidence/2026-10-10-security-consolidation/zlib-native-completed/canonical-provider-verification.json). | Completed2026-10-11. Ordinary fresh-authority gate retained; no standing cached authority, autonomy promotion, other-trial or customer-production reuse. Any future standing recovery mechanism needs independently obtainable authority and separate review. | informed-decision, railiance-platform; Custodian tracks | 2026-10-11 | | 20 | Unattended origin publication for assembly-economics checkpoints | rein-aharness approach `assembly-checkpoint` pushes to `coulomb/assembly-economics` origin without an attended session, limited to `checkpoints/`, fast-forward only, rebase-once, never force (mirrors the FI brief grant). Founder-approved 2026-10-12: assembly-economics `docs/decisions/2026-10-12-checkpoint-origin-publication.md`. Runs on legacy profile-absent routing until 2026-12-31. | Publication through rein-aharness's governed publish lane with a per-repo, path-scoped grant and a governed execution profile; legacy route removed. | rein-aharness / assembly-economics | 2026-10-12 | -| 21 | Independent repository secret detection and response (CUST-WP-0080 G07) | Scanner active on 22 workstation checkouts and 22 Forgejo repositories; 144 of the refreshed 166 repositories remain builtin-only. Template inheritance deployed October 13; its first rollout broke scanner custody permissions and is retained as failed. Recovery adds a pinned startup guard; two Kubernetes replacements (generations 13/14) pass 0755 custody and native clean/secret/quarantine/recovery checks. Thirty isolated configuration/lifecycle/rollback checks pass; authenticated production API/SSO/frontend acceptance remains open. Import/mirror fetch, historical/LFS/log/artifact coverage and private finding response remain open. [Recovery evidence](evidence/2026-10-13-netkingdom-security/forge-custody-recovery-summary.json). | Complete FORGE-WP-0006 and RMGR-WP-0021: admit the full repository denominator, persist/reconcile hooks across creation and lifecycle, verify deployed write paths and unsupported input handling, and prove private detection-to-response with existing custody owners. Rejection alone does not revoke prior exposure; CUST-WP-0073-T05 remains founder-deferred. | railiance-forge, repo-manager; Custodian coordinates | 2026-10-13 | +| 21 | Independent repository secret detection and response (CUST-WP-0080 G07) | Scanner active on 22 workstation checkouts and 166 of 167 Forgejo repositories. Exact expansion of 143 targets passed native SSH scanner verdicts and final cleanup audit; one repository with four external submodules remains builtin-only. [Expansion evidence](evidence/2026-10-13-netkingdom-security/forge-expansion-final.json). Template inheritance deployed October 13; its first rollout broke scanner custody permissions and is retained as failed. Recovery adds a pinned startup guard; two Kubernetes replacements (generations 13/14) pass 0755 custody and native clean/secret/quarantine/recovery checks. Thirty isolated configuration/lifecycle/rollback checks pass; authenticated production API/SSO/frontend acceptance remains open. Import/mirror fetch, historical/LFS/log/artifact coverage and private finding response remain open. [Recovery evidence](evidence/2026-10-13-netkingdom-security/forge-custody-recovery-summary.json). | Complete FORGE-WP-0006 and RMGR-WP-0021: admit the full repository denominator, persist/reconcile hooks across creation and lifecycle, verify deployed write paths and unsupported input handling, and prove private detection-to-response with existing custody owners. Rejection alone does not revoke prior exposure; CUST-WP-0073-T05 remains founder-deferred. | railiance-forge, repo-manager; Custodian coordinates | 2026-10-13 | diff --git a/workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md b/workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md index a31144a5..5bc52d13 100644 --- a/workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md +++ b/workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md @@ -292,20 +292,22 @@ tests and two real 65-second receive-hook acceptance/refusal sequences pass; the installed State Hub packaged module matches source. Both owner projections applied against exact pushed commits. Receipt: `push-deadline.json`. -Fresh read-only inventory now reconciles 167 database repositories/directories: -23 admitted profiles, 144 builtin-only, zero unknown hooks. A repository created -since the earlier inventory inherited the exact hook. One builtin-only repository -has four external submodule references; 143 others pass default-HEAD compatibility. -Exact proposal FORGE6-EXPAND-001 is executing serialized additive activation and -actual SSH clean/synthetic refusal probes under a ref-specific veto. Its current -receipt records attempted and verified numeric IDs; do not infer full acceptance -until `result: verified` and cleanup are confirmed. The submodule case remains -required work, not an exemption. Original 23 profiles and generated dispatchers -are preserved. Private scope mapping and synthetic fixture are retained under -ignored mode-0700 `.private-backups/forge-expansion-20261013/`; their digests are -bound in the proposal. No credential value is committed. Evidence: -`forge-expansion-inventory.json`, `forge-gitlink-binding.json`, and the pending -`forge-expansion-activation.json` in the October 13 directory. +2026-10-13 expansion completed: FORGE6-EXPAND-001 revision 1 exited 0 after +all 143 targets passed actual SSH clean/scanner-refusal probes under an exact-ref +veto. The independent final read-only audit reconciles 167 repositories: 166 +admitted profiles, one builtin-only (numeric ID 55), zero unknown profiles. All +23 baseline profiles remain exact; no probe refs, temporary vetoes or ownership +markers remain. Each rejected synthetic commit was absent after its probe. +Repository 55 has four external submodules and remains required compatibility +work. Ordinary source acceptance is distinct from vetoed scanner checks. +Production HTTP/API/frontend acceptance remains unverified: the protected API +credential route failed before child handoff and the metadata-only capability +check denied access. Prepare one complete acceptance command for the existing +attended login window. CI, import/mirror, historical/LFS/log/artifact detection +and private response gates remain open; this is no whole-estate closure. +Evidence: Custodian `docs/evidence/2026-10-13-netkingdom-security/forge-expansion-final.json` +and `forge-api-route-readiness.json`. + ## Verify native closure against every requirement