diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/receiving-return.json b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/receiving-return.json new file mode 100644 index 00000000..afa6e6fd --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/receiving-return.json @@ -0,0 +1,41 @@ +{ + "schema": "custodian.registrar-receiving-return.v1", + "status": "verified", + "proposal_id": "STATE-WP-0095-T06-cluster-frozen-receiving-r1", + "receiver_source_commit": "51bc70d1ff8f25450a8650d8e50caf053093a02e", + "receiver_image_digest": "sha256:c802690ee1811b3d77df4077936f9cdced1385514e8673fcbc9232b84d645015", + "delivered_module_sha256": "e3c4bf965764b32a6df5d61c71272ee22569df9a9ddae2a3fc3df97ec554e0b2", + "schema_revision": "c4d5e6f7a8b9", + "api_ready": true, + "mcp_ready": true, + "historical_three_parents_fifteen_tasks_preserved": true, + "safe_refusal_probe_rollback_verified": true, + "helm_revision": 76, + "verified_at": "2026-10-17T00:07:47.015454+00:00", + "native_receipts": [ + { + "path": "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/delivered-runtime.json", + "sha256": "89681066e8fe139456163ebfafa3efe77ffae8534ea167219230b0a74367f129" + }, + { + "path": "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/native-refusal-probes.json", + "sha256": "673ccef965c820704dc310a1bf7832b583c30c3edfeb814528cf892555199172" + }, + { + "path": "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/before-full-row-hashes.json", + "sha256": "75cdd87eef79059ff3f484ed24ca69e285899cdf8d851cc4e472653c417eb0ee" + }, + { + "path": "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/after-full-row-hashes.json", + "sha256": "2156aad18f190384838c27e792706a156a7423391408afbc6107e6c28c5872d8" + }, + { + "path": "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/helm-return.json", + "sha256": "61727deacf22d37da2d28cbaf04f5a3ddee0f9ff7571c77f1e85dba97963b572" + }, + { + "path": "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/job-observation.json", + "sha256": "b0db49a54f040142be46f0caa76bfd3f09e4ac060fbc1e88c74c4077eeb0552c" + } + ] +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/receiving-return.pending-template.json b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/receiving-return.pending-template.json new file mode 100644 index 00000000..e0b5750b --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/receiving-return.pending-template.json @@ -0,0 +1,15 @@ +{ + "schema": "custodian.registrar-receiving-return.v1", + "status": "pending-root-native-verification", + "proposal_id": "STATE-WP-0095-T06-cluster-frozen-receiving-r1", + "receiver_source_commit": "51bc70d1ff8f25450a8650d8e50caf053093a02e", + "receiver_image_digest": "sha256:c802690ee1811b3d77df4077936f9cdced1385514e8673fcbc9232b84d645015", + "delivered_module_sha256": "e3c4bf965764b32a6df5d61c71272ee22569df9a9ddae2a3fc3df97ec554e0b2", + "schema_revision": "c4d5e6f7a8b9", + "api_ready": null, + "mcp_ready": null, + "historical_three_parents_fifteen_tasks_preserved": null, + "safe_refusal_probe_rollback_verified": null, + "native_receipts": [], + "authority_note": "evidence binding only; root explicit go remains required" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/registrar-commit.json b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/registrar-commit.json new file mode 100644 index 00000000..c63b59d0 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/registrar-commit.json @@ -0,0 +1,49 @@ +{ + "status": "committed-exact-seven-paths", + "head": "70cd754996870638848616e37819790a5c4d52b3", + "parent": "9ebde0a9bd60d5c82910494fbe6bd1b891455cee", + "paths": [ + "src/repo_manager/historical_sources.py", + "src/repo_manager/identifiers.py", + "tests/test_cluster_frozen_history.py", + "workplans/RMGR-WP-0019-historical-source-admission.md", + "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md", + "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md", + "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md" + ], + "managed_assignments": [ + { + "kind": "task", + "record_id": "RMGR-WP-0019-T04", + "uuid": "1ccb06c6-ad30-5847-8704-e5628ba81f35", + "path": "workplans/RMGR-WP-0019-historical-source-admission.md" + }, + { + "kind": "task", + "record_id": "RMGR-WP-0019-T05", + "uuid": "36f47e21-42d0-5aef-b065-4a5dd3af0726", + "path": "workplans/RMGR-WP-0019-historical-source-admission.md" + }, + { + "kind": "task", + "record_id": "RMGR-WP-0019-T06", + "uuid": "4d1675b6-f49f-5b01-8d76-bbf2030d1b34", + "path": "workplans/RMGR-WP-0019-historical-source-admission.md" + } + ], + "scanner_sha256_unchanged": "e709c658f779534fcab093207b0a78e49d54fc584c515fdf7ac535ce75f6c400", + "t05": "done", + "t06": "wait", + "commit_output": "[main 70cd754] Admit exact frozen Cluster histories after verified receiving\n 7 files changed, 934 insertions(+), 6 deletions(-)\n create mode 100644 tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md\n create mode 100644 tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md\n create mode 100644 tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md\n create mode 100644 tests/test_cluster_frozen_history.py\n", + "source_files": { + "src/repo_manager/historical_sources.py": "838a0422b81e1215e3ec148c3104dd603d9dfc476610bb5617d98ccf5d3be218", + "src/repo_manager/identifiers.py": "4e35fcd009c20822574fd33171176bd14a1ff2dd5af8b0bb2820954974593a2a", + "tests/test_cluster_frozen_history.py": "0490ef3eb474f653e4a6a52b711999876bef061c07de3e7a6d327a8ba54acaf3", + "workplans/RMGR-WP-0019-historical-source-admission.md": "c09c685313de13ad4a31891fd67b8a92f3d9a085c37cee92257d15b485a32cde", + "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md": "8d6f8533c119117686bc0d5bb9ed5349726aa6c3189ff98b53409c68ac685ca9", + "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md": "4dc2f61e15adc3c5c81f9ecf8b933512275b95e8f829fac52ae7cde1385cea4a", + "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md": "04f787078232395bd2d43861de16c521848559fa286f06e1caa9cb779aa71ac3" + }, + "receiving_gate_sha256": "d088c336d62c7bdde0e586b0f1b73c3aa3d4031a4debd9ac90206128728257f4", + "cluster_source_mutation": false +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/registrar-publication-readback.json b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/registrar-publication-readback.json new file mode 100644 index 00000000..f7bc6c7a --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/registrar-publication-readback.json @@ -0,0 +1,136 @@ +{ + "status": "verified", + "scope": "RepoManager registrar WP19 and preserved scanner WP21; read-only Git ls-remote and Hub GET snapshots", + "writes_to_source_index_refs_or_Hub": false, + "rows": [ + { + "repo": "repo-manager", + "published_commit": "70cd754996870638848616e37819790a5c4d52b3", + "remote": { + "HEAD": "70cd754996870638848616e37819790a5c4d52b3", + "refs/heads/main": "70cd754996870638848616e37819790a5c4d52b3", + "symbolic_HEAD": "refs/heads/main" + }, + "workplan": { + "id": "efe0ecb2-2f3f-5f49-baee-b90ad1d353ab", + "slug": "rmgr-wp-0019", + "status": "active" + }, + "source_record_id": "RMGR-WP-0019", + "tasks": [ + { + "id": "d78a622e-39f9-5923-b4e1-f70fdc17fb42", + "record_id": "RMGR-WP-0019-T01", + "status": "done" + }, + { + "id": "95240c81-1805-5365-9b35-d238621a16bf", + "record_id": "RMGR-WP-0019-T02", + "status": "done" + }, + { + "id": "682eea14-a4a8-5f33-9a9f-8f2f1ac8288d", + "record_id": "RMGR-WP-0019-T03", + "status": "done" + }, + { + "id": "1ccb06c6-ad30-5847-8704-e5628ba81f35", + "record_id": "RMGR-WP-0019-T04", + "status": "done" + }, + { + "id": "36f47e21-42d0-5aef-b065-4a5dd3af0726", + "record_id": "RMGR-WP-0019-T05", + "status": "done" + }, + { + "id": "4d1675b6-f49f-5b01-8d76-bbf2030d1b34", + "record_id": "RMGR-WP-0019-T06", + "status": "wait" + } + ], + "external_source_declarations_not_projected": [ + { + "from_task_id": "95240c81-1805-5365-9b35-d238621a16bf", + "target_record_id": "STATE-WP-0095-T03", + "target_uuid": "e8566341-cf6e-5b9c-ad80-8564d14cd52a" + }, + { + "from_task_id": "36f47e21-42d0-5aef-b065-4a5dd3af0726", + "target_record_id": "STATE-WP-0095-T06", + "target_uuid": "6af973b4-1964-5d4d-a2f8-8dbd4c01fda4" + } + ], + "dependencies": [ + { + "from_task_id": "4d1675b6-f49f-5b01-8d76-bbf2030d1b34", + "to_task_id": "36f47e21-42d0-5aef-b065-4a5dd3af0726", + "relationship_type": "starts_after" + }, + { + "from_task_id": "682eea14-a4a8-5f33-9a9f-8f2f1ac8288d", + "to_task_id": "95240c81-1805-5365-9b35-d238621a16bf", + "relationship_type": "starts_after" + } + ], + "source_file_sha256": "c09c685313de13ad4a31891fd67b8a92f3d9a085c37cee92257d15b485a32cde", + "source_file_unchanged": true, + "dependency_scope": "internal edges verified; external source target identities checked without claiming projected external edges", + "index_stat_unchanged": true + }, + { + "repo": "repo-manager", + "published_commit": "70cd754996870638848616e37819790a5c4d52b3", + "remote": { + "HEAD": "70cd754996870638848616e37819790a5c4d52b3", + "refs/heads/main": "70cd754996870638848616e37819790a5c4d52b3", + "symbolic_HEAD": "refs/heads/main" + }, + "workplan": { + "id": "5aa6f84a-c682-5996-ae26-96daef670833", + "slug": "rmgr-wp-0021", + "status": "active" + }, + "source_record_id": "RMGR-WP-0021", + "tasks": [ + { + "id": "d3d20c18-5a5f-5f8a-b5c4-a22b4b662ebe", + "record_id": "RMGR-WP-0021-T01", + "status": "done" + }, + { + "id": "e27817e6-b298-581f-b99a-05ec459be749", + "record_id": "RMGR-WP-0021-T02", + "status": "done" + }, + { + "id": "0ab44bd9-00d8-5470-ad45-7350e7868d0a", + "record_id": "RMGR-WP-0021-T03", + "status": "progress" + }, + { + "id": "44272818-db49-58a2-83b1-d2f9e9d5976c", + "record_id": "RMGR-WP-0021-T04", + "status": "todo" + }, + { + "id": "25fbe694-41d8-5232-bce0-4ed362387d5a", + "record_id": "RMGR-WP-0021-T05", + "status": "done" + } + ], + "external_source_declarations_not_projected": [], + "dependencies": [], + "source_file_sha256": "966d15ccdabc8edf98bc58f9422ea190566d05fe4208f4749f59a9731f4e108d", + "source_file_unchanged": true, + "dependency_scope": "internal edges verified; external source target identities checked without claiming projected external edges", + "index_stat_unchanged": true + } + ], + "hub_instance": { + "status": "ok", + "instance_role": "primary", + "instance_label": "railiance01" + }, + "verifier_sha256": "a7ea9793e5d31a1deddecf9422e57178cb8734aad9619dc1ec5c4d01cc8b53f7" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/registrar-sync.json b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/registrar-sync.json new file mode 100644 index 00000000..843158e1 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/registrar-sync.json @@ -0,0 +1,58 @@ +{ + "evidence_type": "normalized actual command output", + "command": [ + "/home/worsch/repo-manager/.venv/bin/rmgr", + "sync", + "--path", + "/home/worsch/repo-manager", + "--push" + ], + "exit_code": 0, + "ok": true, + "status": "applied", + "repo_slug": "repo-manager", + "commit": "70cd754996870638848616e37819790a5c4d52b3", + "requests": 2, + "elapsed_ms": 22911.0, + "git": { + "upstream": "origin/main", + "behind": 0, + "ahead": 0 + }, + "identifiers": { + "assignments": [], + "files_changed": [] + }, + "receipt": { + "schema": "state-hub.repository-projection-reconcile.v1", + "instance_role": "primary", + "instance_label": "railiance01", + "expected_commit": "70cd754996870638848616e37819790a5c4d52b3", + "derived_commit": "70cd754996870638848616e37819790a5c4d52b3", + "outcome": { + "status": "applied", + "counts": { + "created": 0, + "updated": 25, + "retired": 0, + "refused": 0, + "released": 0, + "created_tasks": 3, + "updated_tasks": 0, + "cancelled_tasks": 0, + "created_edges": 1, + "removed_edges": 0, + "unresolved_edges": 0, + "external_edges": 0 + }, + "created_tasks": [ + "RMGR-WP-0019-T04", + "RMGR-WP-0019-T05", + "RMGR-WP-0019-T06" + ], + "refused": [], + "retired": [], + "notes": [] + } + } +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/source-application.json b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/source-application.json new file mode 100644 index 00000000..66b4efbc --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/source-application.json @@ -0,0 +1,20 @@ +{ + "status": "applied-exact-local-registrar-source", + "base": "9ebde0a9bd60d5c82910494fbe6bd1b891455cee", + "frozen_patch_sha256": "232552c3d601d185984be5a8e5bc9937bc9ddda7327923b5f0440f6deb2c87fc", + "receiving_gate_sha256": "d088c336d62c7bdde0e586b0f1b73c3aa3d4031a4debd9ac90206128728257f4", + "files": { + "src/repo_manager/historical_sources.py": "838a0422b81e1215e3ec148c3104dd603d9dfc476610bb5617d98ccf5d3be218", + "src/repo_manager/identifiers.py": "4e35fcd009c20822574fd33171176bd14a1ff2dd5af8b0bb2820954974593a2a", + "tests/test_cluster_frozen_history.py": "0490ef3eb474f653e4a6a52b711999876bef061c07de3e7a6d327a8ba54acaf3", + "workplans/RMGR-WP-0019-historical-source-admission.md": "6378d96b70259ae81435b6ce8f97864698bdc5b6679cabbe9dc61a1fc1d09699", + "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md": "8d6f8533c119117686bc0d5bb9ed5349726aa6c3189ff98b53409c68ac685ca9", + "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md": "4dc2f61e15adc3c5c81f9ecf8b933512275b95e8f829fac52ae7cde1385cea4a", + "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md": "04f787078232395bd2d43861de16c521848559fa286f06e1caa9cb779aa71ac3" + }, + "index_unchanged": true, + "allocator_executed": false, + "task_completion_applied": false, + "cluster_source_or_hub_mutation": false, + "commit_or_push_performed": false +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/source-review.json b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/source-review.json new file mode 100644 index 00000000..8895f707 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/source-review.json @@ -0,0 +1,55 @@ +{ + "state": "read-onlypreimagesverified; isolatedcandidatechecks only; notcanonicaladmission", + "owner_head": "9ebde0a9bd60d5c82910494fbe6bd1b891455cee", + "frozen_patch_sha256": "232552c3d601d185984be5a8e5bc9937bc9ddda7327923b5f0440f6deb2c87fc", + "preimages": [ + { + "path": "src/repo_manager/historical_sources.py", + "expected": "a465aa595867c5e80918168158f8a27bf429d469b2e5249eca98b4e5ef84ce03", + "actual": "a465aa595867c5e80918168158f8a27bf429d469b2e5249eca98b4e5ef84ce03", + "matched": true + }, + { + "path": "src/repo_manager/identifiers.py", + "expected": "68dbbd3f137f326a49d20ba3f5855d6b00b4d62eb01dc904b51a08d77552d2bf", + "actual": "68dbbd3f137f326a49d20ba3f5855d6b00b4d62eb01dc904b51a08d77552d2bf", + "matched": true + }, + { + "path": "tests/test_cluster_frozen_history.py", + "expected": null, + "actual": null, + "matched": true + }, + { + "path": "workplans/RMGR-WP-0019-historical-source-admission.md", + "expected": "638af4000aa442a57df8eddef2d8b5aa5dffb9dbc9ccf547d9e04cf25012ffe4", + "actual": "638af4000aa442a57df8eddef2d8b5aa5dffb9dbc9ccf547d9e04cf25012ffe4", + "matched": true + }, + { + "path": "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md", + "expected": null, + "actual": null, + "matched": true + }, + { + "path": "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md", + "expected": null, + "actual": null, + "matched": true + }, + { + "path": "tests/fixtures/railiance-cluster/workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md", + "expected": null, + "actual": null, + "matched": true + } + ], + "test_exit_code": 0, + "test_result": "............................................... [100%]\n47 passed in 5.34s", + "canonical_registrar_modified": false, + "actual_cluster_allocator_run": false, + "managed_cluster_UUIDs_applied": false, + "scanner_T05_preserved": true +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/verify_registrar_publication.py b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/verify_registrar_publication.py new file mode 100644 index 00000000..a990f039 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/verify_registrar_publication.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 +"""Read-only Git+Hub task binding verifier; never syncs or changes source/index.""" +import hashlib +import json +import os +from pathlib import Path +import re +import subprocess +import urllib.request + +HERE=Path(__file__).resolve().parent +OWNERS=[ + {'repo':'repo-manager','commit':'70cd754996870638848616e37819790a5c4d52b3','path':'workplans/RMGR-WP-0019-historical-source-admission.md','id':'RMGR-WP-0019','tasks':6}, + {'repo':'repo-manager','commit':'70cd754996870638848616e37819790a5c4d52b3','path':'workplans/RMGR-WP-0021-secret-detection-controls.md','id':'RMGR-WP-0021','tasks':5}, +] +API=os.environ.get('API_BASE','http://127.0.0.1:8000').rstrip('/') +EXTERNAL={'STATE-WP-0095-T03':'e8566341-cf6e-5b9c-ad80-8564d14cd52a','STATE-WP-0095-T06':'6af973b4-1964-5d4d-a2f8-8dbd4c01fda4','NK-WP-0049-T33':'56c8d469-7a10-5d50-a30e-95cbf3cd4756'} + + +class Refused(Exception):pass + + +def git(root,*args): + result=subprocess.run(['git','--no-optional-locks','-C',str(root),*args], + capture_output=True,timeout=30,check=False) + if result.returncode:raise Refused('read-only-git-failed') + return result.stdout + + +def field(text,key): + values=re.findall(r'^'+re.escape(key)+r':\s*(.*?)\s*$',text,re.M) + if len(values)!=1:raise Refused('source-field-ambiguous') + return values[0].strip('"\'') + + +def source(text): + header=text.split('---',2)[1] + tasks=[] + for block in re.findall(r'```task\n(.*?)\n```',text,re.S): + deps=re.findall(r'^depends_on:\s*\[(.*?)\]',block,re.M) + tasks.append({'record_id':field(block,'id'),'id':field(block,'state_hub_task_id'), + 'status':field(block,'status'),'dependencies':[x.strip() for x in deps[0].split(',') if x.strip()] if deps else []}) + return {'id':field(header,'state_hub_workstream_id'),'source_record_id':field(header,'id'), + 'slug':field(header,'id').lower(), + 'status':field(header,'status'),'tasks':tasks} + + +def get(path): + class NoRedirect(urllib.request.HTTPRedirectHandler): + def redirect_request(self,*args,**kwargs):raise Refused('hub-redirect-refused') + opener=urllib.request.build_opener(urllib.request.ProxyHandler({}),NoRedirect) + with opener.open(urllib.request.Request(API+path,method='GET'),timeout=20) as response: + data=response.read(8*1024**2+1) + if len(data)>8*1024**2:raise Refused('hub-read-limit') + return json.loads(data) + + +def index_stat(root): + raw=git(root,'rev-parse','--git-path','index').decode().strip();path=Path(raw) + if not path.is_absolute():path=root/path + try:item=path.lstat() + except FileNotFoundError:return None + return [item.st_dev,item.st_ino,item.st_size,item.st_mtime_ns,item.st_mode] + + +def remote(root,expected,repo): + if git(root,'remote','get-url','origin').decode().strip()!='forgejo-remote:coulomb/'+repo+'.git': + raise Refused('remote-route-drift') + lines=git(root,'ls-remote','--symref','origin','HEAD','refs/heads/main').decode().splitlines() + if set(lines)!={'ref: refs/heads/main\tHEAD',expected+'\tHEAD',expected+'\trefs/heads/main'}: + raise Refused('remote-head-mismatch') + return {'HEAD':expected,'refs/heads/main':expected,'symbolic_HEAD':'refs/heads/main'} + + +def verify(): + result={'status':'unverified','scope':'RepoManager registrar WP19 and preserved scanner WP21; read-only Git ls-remote and Hub GET snapshots', + 'writes_to_source_index_refs_or_Hub':False,'rows':[]} + try: + if API not in {'http://127.0.0.1:8000','http://127.0.0.1:18080','http://10.43.68.154:8000'}: + raise Refused('unrecognized-hub-endpoint') + health=get('/state/health') + result['hub_instance']={key:health.get(key) for key in ('status','instance_role','instance_label')} + if result['hub_instance']!={'status':'ok','instance_role':'primary','instance_label':'railiance01'}: + raise Refused('hub-identity-mismatch') + for owner in OWNERS: + root=Path('/home/worsch')/owner['repo'];before_index=index_stat(root) + if git(root,'rev-parse','HEAD').decode().strip()!=owner['commit']: + raise Refused('local-head-drift') + committed=git(root,'show',owner['commit']+':'+owner['path']) + local=(root/owner['path']).read_bytes() + if local!=committed:raise Refused('published-workplan-local-drift') + expected=source(committed.decode()) + if expected['source_record_id']!=owner['id'] or len(expected['tasks'])!=owner['tasks']: + raise Refused('source-task-denominator-mismatch') + snapshot=get('/repos/'+owner['repo']+'/work-record-projection/snapshot') + plans=[row for row in snapshot['workplans'] if row['id']==expected['id']] + if len(plans)!=1 or any(plans[0].get(key)!=expected[key] for key in ('id','slug','status')): + raise Refused('workplan-binding-mismatch') + projected=[row for row in snapshot['tasks'] + if row.get('workplan_id',row.get('workstream_id'))==expected['id']] + if len(projected)!=len(expected['tasks']):raise Refused('projected-task-denominator-mismatch') + byid={row['id']:row for row in projected} + if len(byid)!=len(projected):raise Refused('duplicate-projected-uuid') + observed=[] + for task in expected['tasks']: + row=byid.get(task['id'],{}) + if any(row.get(key)!=task[key] for key in ('id','record_id','status')): + raise Refused('task-id-uuid-status-mismatch') + observed.append({key:row[key] for key in ('id','record_id','status')}) + identifiers={task['record_id']:task['id'] for task in expected['tasks']} + edges={(task['id'],identifiers[dep],'starts_after') for task in expected['tasks'] for dep in task['dependencies'] if dep in identifiers} + actual=[edge for edge in snapshot['dependencies'] if edge['from_workplan_id']==expected['id']] + projected_edges={(edge.get('from_task_id'),edge.get('to_task_id'),edge['relationship_type']) for edge in actual} + if len(actual)!=len(edges) or projected_edges!=edges: + raise Refused('dependency-binding-mismatch') + if any(edge.get('source_commit') not in (None,owner['commit']) for edge in actual): + raise Refused('dependency-source-commit-mismatch') + for task in expected['tasks']: + for dep in task['dependencies']: + if dep in EXTERNAL: + target=get('/tasks/'+EXTERNAL[dep]) + if target.get('id')!=EXTERNAL[dep] or target.get('record_id')!=dep: + raise Refused('external-dependency-target-mismatch') + remote_readback=remote(root,owner['commit'],owner['repo']) + if index_stat(root)!=before_index or (root/owner['path']).read_bytes()!=local: + raise Refused('source-or-index-stat-changed') + result['rows'].append({'repo':owner['repo'],'published_commit':owner['commit'], + 'remote':remote_readback,'workplan':{key:plans[0][key] for key in ('id','slug','status')}, + 'source_record_id':expected['source_record_id'], + 'tasks':observed,'external_source_declarations_not_projected':[{'from_task_id':task['id'],'target_record_id':dep,'target_uuid':EXTERNAL[dep]} for task in expected['tasks'] for dep in task['dependencies'] if dep in EXTERNAL],'dependencies':[{'from_task_id':a,'to_task_id':b,'relationship_type':c} for a,b,c in sorted(edges)], + 'source_file_sha256':hashlib.sha256(local).hexdigest(),'source_file_unchanged':True,'dependency_scope':'internal edges verified; external source target identities checked without claiming projected external edges', + 'index_stat_unchanged':True}) + result['status']='verified' + except Exception as error: + result['reason']=error.args[0] if isinstance(error,Refused) else 'readback-unavailable' + result['verifier_sha256']=hashlib.sha256(Path(__file__).read_bytes()).hexdigest() + (HERE/'registrar-publication-readback.json').write_text(json.dumps(result,indent=2)+'\n') + print(json.dumps({'status':result['status'],'owners':len(result['rows'])})) + return 0 if result['status']=='verified' else 2 + + +if __name__=='__main__':raise SystemExit(verify()) diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/wp19-actual-projected-dependencies.json b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/wp19-actual-projected-dependencies.json new file mode 100644 index 00000000..a99f98ee --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-followthrough-r1/wp19-actual-projected-dependencies.json @@ -0,0 +1,28 @@ +[ + { + "id": "5f8d26dc-836c-40a0-92ad-409e0c03c9ba", + "from_workplan_id": "efe0ecb2-2f3f-5f49-baee-b90ad1d353ab", + "from_task_id": "682eea14-a4a8-5f33-9a9f-8f2f1ac8288d", + "to_workplan_id": null, + "to_task_id": "95240c81-1805-5365-9b35-d238621a16bf", + "relationship_type": "starts_after", + "description": "RMGR-WP-0019-T03 depends_on RMGR-WP-0019-T02", + "source_owner": null, + "source_commit": null, + "created_at": "2026-10-06T08:38:27.839836Z", + "updated_at": "2026-10-06T08:38:27.839836Z" + }, + { + "id": "6830cfe7-d935-4682-af36-b1f508cf73d6", + "from_workplan_id": "efe0ecb2-2f3f-5f49-baee-b90ad1d353ab", + "from_task_id": "4d1675b6-f49f-5b01-8d76-bbf2030d1b34", + "to_workplan_id": null, + "to_task_id": "36f47e21-42d0-5aef-b065-4a5dd3af0726", + "relationship_type": "starts_after", + "description": "RMGR-WP-0019-T06 depends_on RMGR-WP-0019-T05", + "source_owner": "forge:repo-manager", + "source_commit": "70cd754996870638848616e37819790a5c4d52b3", + "created_at": "2026-10-17T00:11:55.880322Z", + "updated_at": "2026-10-17T00:11:55.880322Z" + } +] diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/WP19.candidate.md b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/WP19.candidate.md new file mode 100644 index 00000000..f4b92915 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/WP19.candidate.md @@ -0,0 +1,297 @@ +--- +id: RMGR-WP-0019 +type: workplan +title: "Admit exact historical source views after receiving preservation support" +domain: infotech +repo: repo-manager +status: active +owner: codex +created: "2026-10-04" +updated: "2026-10-17" +flavor: implementation +depends_on: [] +state_hub_workstream_id: "efe0ecb2-2f3f-5f49-baee-b90ad1d353ab" +--- + +## Goal + +Unblock normal authoritative registration of the exact closed Activity legacy +source views and Custodian retired ADHOC source after receiving preserves their +existing records. Preserve every legacy source byte, label and UUID; do not +expand canonical syntax or the general grandfathering rules. CUST-WP-0077 owns +cross-owner coordination with STATE-WP-0095. + +## Review exact historical receiving contract + +```task +id: RMGR-WP-0019-T01 +status: done +priority: high +state_hub_task_id: "d78a622e-39f9-5923-b4e1-f70fdc17fb42" +``` + +Seven Activity sources yield four existing parents/64 closed bound tasks; +three split views repeat the archived parent. One Custodian retired source keeps +its existing parent/task IDs. Earlier /tmp/activity-core-bound-history-write.py +is superseded and must not be applied: registrar bypass alone would admit an +unsupported receiving projection. RMGR-WP-0014/0015 are finished and do not own +this new implementation demand; this workplan is not residual. + +## Enable exact frozen registrar exceptions after receiving deployment + +```task +id: RMGR-WP-0019-T02 +status: done +priority: high +depends_on: [STATE-WP-0095-T03] +state_hub_task_id: "95240c81-1805-5365-9b35-d238621a16bf" +``` + +Prepared code permits only source paths with reviewed full SHA256 digests in +repo_manager/historical_sources.py. Strict conformance scans retain their legacy +findings. Unknown/missing/altered source refuses before allocation. Source UUIDs +are neither changed nor allocated for these histories. Receiving and registrar +manifests must remain identical. Apply helper requires a deployment receipt. + +## Run normal owner sync and verify preserved identities + +```task +id: RMGR-WP-0019-T03 +status: done +priority: high +depends_on: [RMGR-WP-0019-T02] +state_hub_task_id: "682eea14-a4a8-5f33-9a9f-8f2f1ac8288d" +``` + +Use rmgr sync --path --push. No deep-check repair or direct hub UUID +patch substitutes for receiving. Historical unrelated stale projections are not +retirement-authorized by this workplan. Feed receipts back to STATE-WP-0095-T04. + +## Offline evidence, 2026-10-04 + +Prepared registrar suite: 38 focused cases passed (identifiers, registrar, +Custodian legacy identity and exact frozen source cases). Read-only execute=False +against both current owning repos accepted exact histories without source writes. +Implementation is staged; deployment gate is unresolved. + +## Approved deployment and actual registrar verification, 2026-10-04 + +STATE-WP-0095-T03 returned verified main-5dd3df9 / Helm revision72. +Global task-holder refusal passed inside the delivered API against the retired +Custodian parent, with transaction rollback and no committed probe. Five +historical parents/65 tasks retained their entire row snapshots. The gated +three-file registrar patch committed as c41d36c2ef8930628221ef36ec81d8b5d2145ed6; +38 actual owning-source cases passed and Repo Manager primary sync applied. + +Normal owner sync admitted all exact frozen histories without changing their +source bytes, UUIDs, parent ownership or row content. Custodian receiving +applied. Activity receiving refused only three empty duplicate projections +that would be retired; no retirement acknowledgement was issued. Registrar +allocated four missing IDs in ordinary Activity ad-hoc sources through its +normal path; frozen historical source files stayed unchanged. T03 remains wait +for explicit disposition and bounded receiving support under STATE-WP-0095-T04 +(decision91b7c633-a66f-5d43-9f4b-6565aefb9356). +Evidence: docs/evidence/2026-10-04-historical-registrar-verification.json. + +## Ungated T03 preparation, 2026-10-06 + +Re-ran the registrar suite at 8a47a5c (registrar source unchanged since +c41d36c2): 89 focused registrar/identity/historical cases and the full suite +(226) passed. Read-only hub check: the three refused projections are +683724d9 (custodian-wp-0003), 644017c7 (custodian-wp-0003a) and a5806df9 +(custodian-wp-0003b), each with zero tasks; every custodian-WP-0003* source +file binds parent b4eb45a9, which holds the tasks and must not be retired. +Added repo_manager.retirement_disposition, a read-only check that an Activity +expected_retirement_uuids set equals exactly those three empty projections and +excludes the preserved parent. It authorizes nothing; retirement stays with +Activity receiving under STATE-WP-0095-T04. + +## Activity disposition received, 2026-10-06 + +activity-core returned the exact expected_retirement_uuids (message 17ba4201, +evidence activity-core 941fac0, ACTIVITY-WP-0045): 683724d9, 644017c7, +a5806df9. repo_manager.retirement_disposition accepted the set: it equals the +three projections the 2026-10-04 run refused, each holds zero tasks, and it +excludes preserved parent b4eb45a9. Nothing was applied. T03 stays wait: its +acceptance needs a successful Activity owner sync with receipts, which can run +only after the founder decides 91b7c633 and STATE-WP-0095-T04 retires exactly +this set in a reviewed live rollout. Then re-run rmgr sync --path +~/activity-core --push and feed the receipt back to STATE-WP-0095-T04. + +## Post-retirement owner sync attempt, 2026-10-06 + +State Hub reported decision 91b7c633 resolved, main-968a811 / Helm rev 74 +deployed, and Activity reconcile at 67a92d2 retiring exactly the three empty +projections (3 retired, 0 created, 0 refused; 4 historical parents / 64 tasks +unchanged). Evidence: state-hub docs/evidence/2026-10-06-activity-stale-retirement-rollout.json. +`rmgr sync --path ~/activity-core --push` stopped before reconciliation with +status pending_commit: uncommitted `state_hub_workstream_id` / `state_hub_task_id` +writeback in activity-core workplans/ACTIVITY-WP-0045-stale-historical-projection-disposition.md +(plus WORK-RECORDS.md). No hub request was made. Repo Manager does not commit in +activity-core; T03 stays wait until Activity Core commits and the sync re-runs. + +Re-run 2026-10-06 08:42Z after Activity Core committed the writeback (e809fb2): +status applied, created 0 / updated 45 (ACTIVITY-WP only) / retired 0 / refused 0, +no task changes, notes preserve custodian-WP-0001..0004 UUIDs; hub shows 4 parents, +64 tasks. Not closed: historical parent b4eb45a9 (custodian-WP-0003, source +`status: archived`, evidence snapshot archived) now reads `finished` in the hub, +updated 08:42:03Z during this sync. Needs State Hub review before T03 closes. + +Closed 2026-10-06: State Hub traced the b4eb45a9 status change to its own C-04 +check, which ran once per file. The custodian-WP-0003a/b/c split views share the +parent UUID, so whichever view ran last set the row. The Forge reconcile did not +cause it. Fixed in state-hub 2b5d8f9 (STATE-WP-ADHOC-2026-10-06-T01); b4eb45a9 is +back to `archived`. Re-check: 4 parents (b4eb45a9 archived; 3a4f47d9, 759b1255, +e22516cc finished) holding 64 tasks (24+12+7+21). Receipt: Activity sync at e809fb2, +primary/railiance01, applied, 0 created / 45 updated (ACTIVITY-WP only) / 0 retired +/ 0 refused, 0 task changes, historical UUIDs preserved. Evidence: +state-hub docs/evidence/2026-10-06-activity-stale-retirement-rollout.json. + + +## Cluster exact historical source successor, 2026-10-17 + +This scoped extension preserves the completed Activity/Custodian work above. +The cluster publisher now refuses three closed RAIL-BS source files containing +15 existing UUID-bound bare task labels. Preserve all three source bytes, IDs, +and UUIDs. No new alias or general syntax exemption is introduced. Evidence and +exact receiver-first proposal: cluster-historical-publication-r1 in the Custodian +NetKingdom change packet. The existing SHR-WP-0001 project driver owns the +Repo Manager / State Hub cross-owner wait; NK-WP-0049-T35 benefits from the +blocked cluster publication. No worker or human gate is woken here. + +## Prepare exact cluster registrar successor + +```task +id: RMGR-WP-0019-T04 +status: done +priority: high +state_hub_task_id: "1ccb06c6-ad30-5847-8704-e5628ba81f35" +``` + +Prepared full-file SHA256 bindings for three archives and 15 exact task +occurrences; strict scans still return 15 invalid labels and five collisions. +Unknown/live sources, changed/missing/symlinked histories, UUID drift and +qualified/global collisions refuse before allocation. Candidate tests pass 47; +canonical application remains a separate reviewed step. The read-only current +cluster preview proposes seven ordinary UUID bindings in two files and changes +no bytes. One pre-existing ADHOC field is included explicitly: task +RCLUSTER-WP-ADHOC-2026-07-27-T01 in workplans/ADHOC-2026-07-27.md receives +3e3f39d3-5070-5ba3-97db-19f5f361f264 through managed allocation only. + +## Admit cluster registrar successor only after receiving verification + +```task +id: RMGR-WP-0019-T05 +status: done +priority: high +depends_on: [STATE-WP-0095-T06] +state_hub_task_id: "36f47e21-42d0-5aef-b065-4a5dd3af0726" +``` + +Retain the current guard until exact reviewed receiving source has been delivered +and verified through State Hub's normal owner deployment. Match both manifests, +then integrate reviewed registrar source and verify ordinary allocator preview. +No direct API patch, history rename or bypass substitutes for this gate. + +## Run ordinary cluster owner publication and verify preservation + +```task +id: RMGR-WP-0019-T06 +status: wait +priority: high +depends_on: [RMGR-WP-0019-T05, STATE-WP-0095-T10] +blocking_reason: "Await State Hub T10 founder approval, delivered API guard verification and explicit current-baseline/historical-exception disposition; original parent hashes are not restored." +state_hub_task_id: "4d1675b6-f49f-5b01-8d76-bbf2030d1b34" +``` + +Only then run normal owner consistency/publication with the reviewed expected +file set: RCLUSTER-WP-0018 and the one-field ADHOC managed backfill, plus ordinary +generated indexes. Preserve all three archived files and all 18 existing +parent/task rows. Return actual receiving/publication receipts to STATE-WP-0095-T07. +Do not infer TLS recovery, credential custody or native acceptance from sync. + +Cluster publication returned, preservation acceptance failed, 2026-10-17: +normal owner publication at c562d7134c38679952a8ffd17a8a893a900aef0d +is applied on primary/railiance01 with expected and derived commits equal. +Read-only source/remote/Hub verification confirms WP0018's five task bindings +and three internal dependency edges. These publication results do not close T06. +The full-row guard after the required legacy deep consistency pass failed: +all three historical parent full-row hashes changed; all 15 historical task +full-row hashes remain equal. The entire pipeline therefore has no successful +18-row preservation acceptance. + +Custodian receipts under docs/changes/netkingdom-target-2026-10-17: +railiance-cluster-projection.json and cluster-publication-readback.json retain +the applied publication and bounded readback; receiver-rollout-r4/ +pre-publication-full-row-hashes.json retains the passing pre-publication guard; +receiver-rollout-r4/post-publication-full-row-hashes-FAILED.json retains the +failed native comparison. Exact receipt digests are retained in +registrar-t06-preservation-failure-r1/manifest.json. Coordinator and recovery +source review identified the unguarded PUT /workplans/index/bindings path +writing backing_synced_at and ORM updated_at, outside the native forge +projection's preservation guard. Full baseline rows were not retained, only +full-row hashes; no guessed database restoration is authorized or claimed. + +The original rollout's pre-Cluster preservation/refusal verification remains +valid for that earlier stage, and T05 remains done. T06 stays wait pending +the reviewed exact-frozen binding guard, regression coverage and a verified +recovery/preservation disposition. No source or native gate is promoted by the +successful publication alone; no TLS or credential-custody acceptance follows. + +Verified installed-client successor, 2026-10-17: after verifying the installed +R6 checker module rather than assuming canonical source was loaded, the full +normal Cluster maintenance pipeline preserved all 18 CURRENT historical row +hashes. It synced 20/20 ordinary bindings while omitting the three exact frozen +histories. Cluster HEAD remained 6ae3f847c83da3402883453ee7110457bfb2d0d6; +the owner's original staged brief and dirty WORK-RECORDS content were preserved. +Passing CURRENT before/after snapshots are retained under the Custodian packet +receiver-rollout-r4/before-verified-client.json and after-verified-client.json; +verified-loaded-client.json, verified-client-cluster-consistency.json and +verified-client-cluster-projection.json retain the actual client/pipeline proof. +This new baseline pass does not restore or replace the earlier failed three +parent comparisons; those failures and unavailable original preimages remain. + +The new API guard artifact c103cbf3c8bed5dba87a03e320595ddded9301a3 at +image digest sha256:4cc4ce17bbcdb1b66132d07c5b7b741f46df83124ef1c8403ffabdafba6993d1 +has image-only server dry-run proof, not delivered-runtime acceptance. T06 +therefore also depends on STATE-WP-0095-T10. Founder decision +df703266-6719-4c04-ae1b-ba9afd3bca1c remains pending for exact proposal +STATE-WP-0095-T10-frozen-bindings-guard-r1 revision 1, metadata SHA256 +81d365926fc585a186955d8c98ee83501fd3cec12135b2256d71b46a75097932, in +Custodian docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/. +That decision includes the proposed CURRENT-baseline acceptance with the +earlier mismatch retained as an exception; no baseline disposition is inferred +here. Await its approved scope and verified owner return before T06 closes. +T05 stays done; no runtime activation, guessed database restoration, worker +wakeup, TLS recovery or native private-admission acceptance follows. + + +## Receiver-first registrar source follow-through, 2026-10-17 + +The exact receiving return is retained in Custodian +`docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/verified-receiving-return.json`, +bound to the actual native rollout/preservation/refusal receipts. It verifies the +reviewed receiver source/image/module, API/MCP readiness, expected additive schema, +three existing historical parents/15 tasks and rolled-back safe refusal probes. +Only after that return was the exact registrar patch +`232552c3d601d185984be5a8e5bc9937bc9ddda7327923b5f0440f6deb2c87fc` +admitted in the Repo Manager owner source. T04 retains its source-preparation +outcome; T05 records this receiving-gated registrar admission, not a substitute +for receiving. Canonical focused registrar/identity checks passed 47 cases in 5.84 seconds. +The actual bounded read-only current Cluster allocator preview agreed with the +reviewed source: seven ordinary missing UUID bindings in exactly the new WP0018 and +one-field existing ADHOC backfill, with 15 invalid labels/five collisions still +reported by the strict conformance scan. The three historical file bytes, IDs, +UUIDs and ownership are unchanged. No broad syntax relaxation or direct Hub UUID +patch is introduced. Exact source application/test/preview receipts travel with +the same packet; source publication/projection is verified separately. + +T06 remains wait until actual ordinary Cluster owner publication and receiving +preservation are verified. Registrar source readiness alone does not mark that +publication complete. Preserve the 18 existing rows and all three archives; the +root coordinator owns the normal seven-field managed allocation and dirty-source +preservation. Own Repo Manager projection must show exactly T01–T05 done, T06 +wait and active workplan status, including the managed new T04/T05/T06 UUIDs and +unchanged earlier task UUIDs. The separate scanner RMGR-WP-0021-T05 completion +and unrelated owner work remain untouched. No native TLS recovery, custody, +current registration/private admission or NetKingdom target acceptance follows. diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/WP19.preimage.md b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/WP19.preimage.md new file mode 100644 index 00000000..98cc2d2a --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/WP19.preimage.md @@ -0,0 +1,269 @@ +--- +id: RMGR-WP-0019 +type: workplan +title: "Admit exact historical source views after receiving preservation support" +domain: infotech +repo: repo-manager +status: active +owner: codex +created: "2026-10-04" +updated: "2026-10-17" +flavor: implementation +depends_on: [] +state_hub_workstream_id: "efe0ecb2-2f3f-5f49-baee-b90ad1d353ab" +--- + +## Goal + +Unblock normal authoritative registration of the exact closed Activity legacy +source views and Custodian retired ADHOC source after receiving preserves their +existing records. Preserve every legacy source byte, label and UUID; do not +expand canonical syntax or the general grandfathering rules. CUST-WP-0077 owns +cross-owner coordination with STATE-WP-0095. + +## Review exact historical receiving contract + +```task +id: RMGR-WP-0019-T01 +status: done +priority: high +state_hub_task_id: "d78a622e-39f9-5923-b4e1-f70fdc17fb42" +``` + +Seven Activity sources yield four existing parents/64 closed bound tasks; +three split views repeat the archived parent. One Custodian retired source keeps +its existing parent/task IDs. Earlier /tmp/activity-core-bound-history-write.py +is superseded and must not be applied: registrar bypass alone would admit an +unsupported receiving projection. RMGR-WP-0014/0015 are finished and do not own +this new implementation demand; this workplan is not residual. + +## Enable exact frozen registrar exceptions after receiving deployment + +```task +id: RMGR-WP-0019-T02 +status: done +priority: high +depends_on: [STATE-WP-0095-T03] +state_hub_task_id: "95240c81-1805-5365-9b35-d238621a16bf" +``` + +Prepared code permits only source paths with reviewed full SHA256 digests in +repo_manager/historical_sources.py. Strict conformance scans retain their legacy +findings. Unknown/missing/altered source refuses before allocation. Source UUIDs +are neither changed nor allocated for these histories. Receiving and registrar +manifests must remain identical. Apply helper requires a deployment receipt. + +## Run normal owner sync and verify preserved identities + +```task +id: RMGR-WP-0019-T03 +status: done +priority: high +depends_on: [RMGR-WP-0019-T02] +state_hub_task_id: "682eea14-a4a8-5f33-9a9f-8f2f1ac8288d" +``` + +Use rmgr sync --path --push. No deep-check repair or direct hub UUID +patch substitutes for receiving. Historical unrelated stale projections are not +retirement-authorized by this workplan. Feed receipts back to STATE-WP-0095-T04. + +## Offline evidence, 2026-10-04 + +Prepared registrar suite: 38 focused cases passed (identifiers, registrar, +Custodian legacy identity and exact frozen source cases). Read-only execute=False +against both current owning repos accepted exact histories without source writes. +Implementation is staged; deployment gate is unresolved. + +## Approved deployment and actual registrar verification, 2026-10-04 + +STATE-WP-0095-T03 returned verified main-5dd3df9 / Helm revision72. +Global task-holder refusal passed inside the delivered API against the retired +Custodian parent, with transaction rollback and no committed probe. Five +historical parents/65 tasks retained their entire row snapshots. The gated +three-file registrar patch committed as c41d36c2ef8930628221ef36ec81d8b5d2145ed6; +38 actual owning-source cases passed and Repo Manager primary sync applied. + +Normal owner sync admitted all exact frozen histories without changing their +source bytes, UUIDs, parent ownership or row content. Custodian receiving +applied. Activity receiving refused only three empty duplicate projections +that would be retired; no retirement acknowledgement was issued. Registrar +allocated four missing IDs in ordinary Activity ad-hoc sources through its +normal path; frozen historical source files stayed unchanged. T03 remains wait +for explicit disposition and bounded receiving support under STATE-WP-0095-T04 +(decision91b7c633-a66f-5d43-9f4b-6565aefb9356). +Evidence: docs/evidence/2026-10-04-historical-registrar-verification.json. + +## Ungated T03 preparation, 2026-10-06 + +Re-ran the registrar suite at 8a47a5c (registrar source unchanged since +c41d36c2): 89 focused registrar/identity/historical cases and the full suite +(226) passed. Read-only hub check: the three refused projections are +683724d9 (custodian-wp-0003), 644017c7 (custodian-wp-0003a) and a5806df9 +(custodian-wp-0003b), each with zero tasks; every custodian-WP-0003* source +file binds parent b4eb45a9, which holds the tasks and must not be retired. +Added repo_manager.retirement_disposition, a read-only check that an Activity +expected_retirement_uuids set equals exactly those three empty projections and +excludes the preserved parent. It authorizes nothing; retirement stays with +Activity receiving under STATE-WP-0095-T04. + +## Activity disposition received, 2026-10-06 + +activity-core returned the exact expected_retirement_uuids (message 17ba4201, +evidence activity-core 941fac0, ACTIVITY-WP-0045): 683724d9, 644017c7, +a5806df9. repo_manager.retirement_disposition accepted the set: it equals the +three projections the 2026-10-04 run refused, each holds zero tasks, and it +excludes preserved parent b4eb45a9. Nothing was applied. T03 stays wait: its +acceptance needs a successful Activity owner sync with receipts, which can run +only after the founder decides 91b7c633 and STATE-WP-0095-T04 retires exactly +this set in a reviewed live rollout. Then re-run rmgr sync --path +~/activity-core --push and feed the receipt back to STATE-WP-0095-T04. + +## Post-retirement owner sync attempt, 2026-10-06 + +State Hub reported decision 91b7c633 resolved, main-968a811 / Helm rev 74 +deployed, and Activity reconcile at 67a92d2 retiring exactly the three empty +projections (3 retired, 0 created, 0 refused; 4 historical parents / 64 tasks +unchanged). Evidence: state-hub docs/evidence/2026-10-06-activity-stale-retirement-rollout.json. +`rmgr sync --path ~/activity-core --push` stopped before reconciliation with +status pending_commit: uncommitted `state_hub_workstream_id` / `state_hub_task_id` +writeback in activity-core workplans/ACTIVITY-WP-0045-stale-historical-projection-disposition.md +(plus WORK-RECORDS.md). No hub request was made. Repo Manager does not commit in +activity-core; T03 stays wait until Activity Core commits and the sync re-runs. + +Re-run 2026-10-06 08:42Z after Activity Core committed the writeback (e809fb2): +status applied, created 0 / updated 45 (ACTIVITY-WP only) / retired 0 / refused 0, +no task changes, notes preserve custodian-WP-0001..0004 UUIDs; hub shows 4 parents, +64 tasks. Not closed: historical parent b4eb45a9 (custodian-WP-0003, source +`status: archived`, evidence snapshot archived) now reads `finished` in the hub, +updated 08:42:03Z during this sync. Needs State Hub review before T03 closes. + +Closed 2026-10-06: State Hub traced the b4eb45a9 status change to its own C-04 +check, which ran once per file. The custodian-WP-0003a/b/c split views share the +parent UUID, so whichever view ran last set the row. The Forge reconcile did not +cause it. Fixed in state-hub 2b5d8f9 (STATE-WP-ADHOC-2026-10-06-T01); b4eb45a9 is +back to `archived`. Re-check: 4 parents (b4eb45a9 archived; 3a4f47d9, 759b1255, +e22516cc finished) holding 64 tasks (24+12+7+21). Receipt: Activity sync at e809fb2, +primary/railiance01, applied, 0 created / 45 updated (ACTIVITY-WP only) / 0 retired +/ 0 refused, 0 task changes, historical UUIDs preserved. Evidence: +state-hub docs/evidence/2026-10-06-activity-stale-retirement-rollout.json. + + +## Cluster exact historical source successor, 2026-10-17 + +This scoped extension preserves the completed Activity/Custodian work above. +The cluster publisher now refuses three closed RAIL-BS source files containing +15 existing UUID-bound bare task labels. Preserve all three source bytes, IDs, +and UUIDs. No new alias or general syntax exemption is introduced. Evidence and +exact receiver-first proposal: cluster-historical-publication-r1 in the Custodian +NetKingdom change packet. The existing SHR-WP-0001 project driver owns the +Repo Manager / State Hub cross-owner wait; NK-WP-0049-T35 benefits from the +blocked cluster publication. No worker or human gate is woken here. + +## Prepare exact cluster registrar successor + +```task +id: RMGR-WP-0019-T04 +status: done +priority: high +state_hub_task_id: "1ccb06c6-ad30-5847-8704-e5628ba81f35" +``` + +Prepared full-file SHA256 bindings for three archives and 15 exact task +occurrences; strict scans still return 15 invalid labels and five collisions. +Unknown/live sources, changed/missing/symlinked histories, UUID drift and +qualified/global collisions refuse before allocation. Candidate tests pass 47; +canonical application remains a separate reviewed step. The read-only current +cluster preview proposes seven ordinary UUID bindings in two files and changes +no bytes. One pre-existing ADHOC field is included explicitly: task +RCLUSTER-WP-ADHOC-2026-07-27-T01 in workplans/ADHOC-2026-07-27.md receives +3e3f39d3-5070-5ba3-97db-19f5f361f264 through managed allocation only. + +## Admit cluster registrar successor only after receiving verification + +```task +id: RMGR-WP-0019-T05 +status: done +priority: high +depends_on: [STATE-WP-0095-T06] +state_hub_task_id: "36f47e21-42d0-5aef-b065-4a5dd3af0726" +``` + +Retain the current guard until exact reviewed receiving source has been delivered +and verified through State Hub's normal owner deployment. Match both manifests, +then integrate reviewed registrar source and verify ordinary allocator preview. +No direct API patch, history rename or bypass substitutes for this gate. + +## Run ordinary cluster owner publication and verify preservation + +```task +id: RMGR-WP-0019-T06 +status: wait +priority: high +depends_on: [RMGR-WP-0019-T05] +state_hub_task_id: "4d1675b6-f49f-5b01-8d76-bbf2030d1b34" +``` + +Only then run normal owner consistency/publication with the reviewed expected +file set: RCLUSTER-WP-0018 and the one-field ADHOC managed backfill, plus ordinary +generated indexes. Preserve all three archived files and all 18 existing +parent/task rows. Return actual receiving/publication receipts to STATE-WP-0095-T07. +Do not infer TLS recovery, credential custody or native acceptance from sync. + +Cluster publication returned, preservation acceptance failed, 2026-10-17: +normal owner publication at c562d7134c38679952a8ffd17a8a893a900aef0d +is applied on primary/railiance01 with expected and derived commits equal. +Read-only source/remote/Hub verification confirms WP0018's five task bindings +and three internal dependency edges. These publication results do not close T06. +The full-row guard after the required legacy deep consistency pass failed: +all three historical parent full-row hashes changed; all 15 historical task +full-row hashes remain equal. The entire pipeline therefore has no successful +18-row preservation acceptance. + +Custodian receipts under docs/changes/netkingdom-target-2026-10-17: +railiance-cluster-projection.json and cluster-publication-readback.json retain +the applied publication and bounded readback; receiver-rollout-r4/ +pre-publication-full-row-hashes.json retains the passing pre-publication guard; +receiver-rollout-r4/post-publication-full-row-hashes-FAILED.json retains the +failed native comparison. Exact receipt digests are retained in +registrar-t06-preservation-failure-r1/manifest.json. Coordinator and recovery +source review identified the unguarded PUT /workplans/index/bindings path +writing backing_synced_at and ORM updated_at, outside the native forge +projection's preservation guard. Full baseline rows were not retained, only +full-row hashes; no guessed database restoration is authorized or claimed. + +The original rollout's pre-Cluster preservation/refusal verification remains +valid for that earlier stage, and T05 remains done. T06 stays wait pending +the reviewed exact-frozen binding guard, regression coverage and a verified +recovery/preservation disposition. No source or native gate is promoted by the +successful publication alone; no TLS or credential-custody acceptance follows. + + +## Receiver-first registrar source follow-through, 2026-10-17 + +The exact receiving return is retained in Custodian +`docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/verified-receiving-return.json`, +bound to the actual native rollout/preservation/refusal receipts. It verifies the +reviewed receiver source/image/module, API/MCP readiness, expected additive schema, +three existing historical parents/15 tasks and rolled-back safe refusal probes. +Only after that return was the exact registrar patch +`232552c3d601d185984be5a8e5bc9937bc9ddda7327923b5f0440f6deb2c87fc` +admitted in the Repo Manager owner source. T04 retains its source-preparation +outcome; T05 records this receiving-gated registrar admission, not a substitute +for receiving. Canonical focused registrar/identity checks passed 47 cases in 5.84 seconds. +The actual bounded read-only current Cluster allocator preview agreed with the +reviewed source: seven ordinary missing UUID bindings in exactly the new WP0018 and +one-field existing ADHOC backfill, with 15 invalid labels/five collisions still +reported by the strict conformance scan. The three historical file bytes, IDs, +UUIDs and ownership are unchanged. No broad syntax relaxation or direct Hub UUID +patch is introduced. Exact source application/test/preview receipts travel with +the same packet; source publication/projection is verified separately. + +T06 remains wait until actual ordinary Cluster owner publication and receiving +preservation are verified. Registrar source readiness alone does not mark that +publication complete. Preserve the 18 existing rows and all three archives; the +root coordinator owns the normal seven-field managed allocation and dirty-source +preservation. Own Repo Manager projection must show exactly T01–T05 done, T06 +wait and active workplan status, including the managed new T04/T05/T06 UUIDs and +unchanged earlier task UUIDs. The separate scanner RMGR-WP-0021-T05 completion +and unrelated owner work remain untouched. No native TLS recovery, custody, +current registration/private admission or NetKingdom target acceptance follows. diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/amendment-commit.json b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/amendment-commit.json new file mode 100644 index 00000000..b97cf9df --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/amendment-commit.json @@ -0,0 +1,14 @@ +{ + "status": "committed-exact-one-file", + "head": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "parent": "7c15c0ea48981867fc1683d9b7576f6444c256da", + "path": "workplans/RMGR-WP-0019-historical-source-admission.md", + "source_sha256": "3c28ff7809a56a2096f58986f1b3d7e6f99d365d42d0e8a97ee786ae7d067cc1", + "scanner_sha256_unchanged": "e709c658f779534fcab093207b0a78e49d54fc584c515fdf7ac535ce75f6c400", + "task_statuses_and_UUIDs_unchanged": true, + "added_dependency": "STATE-WP-0095-T10", + "t05": "done", + "t06": "wait", + "commit_output": "[main 1dacdd4] Qualify Cluster preservation wait with verified client and API gate\n 1 file changed, 29 insertions(+), 1 deletion(-)\n", + "cluster_or_database_mutation": false +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/amendment-publication-readback.json b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/amendment-publication-readback.json new file mode 100644 index 00000000..34fc9715 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/amendment-publication-readback.json @@ -0,0 +1,149 @@ +{ + "status": "verified", + "scope": "RepoManager registrar WP19 and preserved scanner WP21; read-only Git ls-remote and Hub GET snapshots", + "writes_to_source_index_refs_or_Hub": false, + "rows": [ + { + "repo": "repo-manager", + "published_commit": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "remote": { + "HEAD": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "refs/heads/main": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "symbolic_HEAD": "refs/heads/main" + }, + "workplan": { + "id": "efe0ecb2-2f3f-5f49-baee-b90ad1d353ab", + "slug": "rmgr-wp-0019", + "status": "active" + }, + "source_record_id": "RMGR-WP-0019", + "tasks": [ + { + "id": "d78a622e-39f9-5923-b4e1-f70fdc17fb42", + "record_id": "RMGR-WP-0019-T01", + "status": "done" + }, + { + "id": "95240c81-1805-5365-9b35-d238621a16bf", + "record_id": "RMGR-WP-0019-T02", + "status": "done" + }, + { + "id": "682eea14-a4a8-5f33-9a9f-8f2f1ac8288d", + "record_id": "RMGR-WP-0019-T03", + "status": "done" + }, + { + "id": "1ccb06c6-ad30-5847-8704-e5628ba81f35", + "record_id": "RMGR-WP-0019-T04", + "status": "done" + }, + { + "id": "36f47e21-42d0-5aef-b065-4a5dd3af0726", + "record_id": "RMGR-WP-0019-T05", + "status": "done" + }, + { + "id": "4d1675b6-f49f-5b01-8d76-bbf2030d1b34", + "record_id": "RMGR-WP-0019-T06", + "status": "wait" + } + ], + "external_source_declarations_not_projected": [ + { + "from_task_id": "95240c81-1805-5365-9b35-d238621a16bf", + "target_record_id": "STATE-WP-0095-T03", + "target_uuid": "e8566341-cf6e-5b9c-ad80-8564d14cd52a" + }, + { + "from_task_id": "36f47e21-42d0-5aef-b065-4a5dd3af0726", + "target_record_id": "STATE-WP-0095-T06", + "target_uuid": "6af973b4-1964-5d4d-a2f8-8dbd4c01fda4" + } + ], + "projected_external_dependencies": [ + { + "from_task_id": "4d1675b6-f49f-5b01-8d76-bbf2030d1b34", + "target_record_id": "STATE-WP-0095-T10", + "target_uuid": "88585c69-d9b9-5e1f-a256-6416ff71e824" + } + ], + "dependencies": [ + { + "from_task_id": "4d1675b6-f49f-5b01-8d76-bbf2030d1b34", + "to_task_id": "36f47e21-42d0-5aef-b065-4a5dd3af0726", + "relationship_type": "starts_after" + }, + { + "from_task_id": "4d1675b6-f49f-5b01-8d76-bbf2030d1b34", + "to_task_id": "88585c69-d9b9-5e1f-a256-6416ff71e824", + "relationship_type": "starts_after" + }, + { + "from_task_id": "682eea14-a4a8-5f33-9a9f-8f2f1ac8288d", + "to_task_id": "95240c81-1805-5365-9b35-d238621a16bf", + "relationship_type": "starts_after" + } + ], + "source_file_sha256": "3c28ff7809a56a2096f58986f1b3d7e6f99d365d42d0e8a97ee786ae7d067cc1", + "source_file_unchanged": true, + "dependency_scope": "exact internal and active-task external edges verified; closed-task external declarations retained separately", + "index_stat_unchanged": true + }, + { + "repo": "repo-manager", + "published_commit": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "remote": { + "HEAD": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "refs/heads/main": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "symbolic_HEAD": "refs/heads/main" + }, + "workplan": { + "id": "5aa6f84a-c682-5996-ae26-96daef670833", + "slug": "rmgr-wp-0021", + "status": "active" + }, + "source_record_id": "RMGR-WP-0021", + "tasks": [ + { + "id": "d3d20c18-5a5f-5f8a-b5c4-a22b4b662ebe", + "record_id": "RMGR-WP-0021-T01", + "status": "done" + }, + { + "id": "e27817e6-b298-581f-b99a-05ec459be749", + "record_id": "RMGR-WP-0021-T02", + "status": "done" + }, + { + "id": "0ab44bd9-00d8-5470-ad45-7350e7868d0a", + "record_id": "RMGR-WP-0021-T03", + "status": "progress" + }, + { + "id": "44272818-db49-58a2-83b1-d2f9e9d5976c", + "record_id": "RMGR-WP-0021-T04", + "status": "todo" + }, + { + "id": "25fbe694-41d8-5232-bce0-4ed362387d5a", + "record_id": "RMGR-WP-0021-T05", + "status": "done" + } + ], + "external_source_declarations_not_projected": [], + "projected_external_dependencies": [], + "dependencies": [], + "source_file_sha256": "966d15ccdabc8edf98bc58f9422ea190566d05fe4208f4749f59a9731f4e108d", + "source_file_unchanged": true, + "dependency_scope": "exact internal and active-task external edges verified; closed-task external declarations retained separately", + "index_stat_unchanged": true + } + ], + "hub_instance": { + "status": "ok", + "instance_role": "primary", + "instance_label": "railiance01" + }, + "verifier_sha256": "c794ce4e1b1672982a606dce9bd364de0754dd905d63fbaf3cf6b1b2c42f4764" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/amendment-sync.json b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/amendment-sync.json new file mode 100644 index 00000000..87ef1f29 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/amendment-sync.json @@ -0,0 +1,103 @@ +{ + "ok": true, + "status": "applied", + "repo_slug": "repo-manager", + "commit": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "requests": 2, + "elapsed_ms": 8706.5, + "git": { + "upstream": "origin/main", + "behind": 0, + "ahead": 0 + }, + "identifiers": { + "schema": "repo-manager.identifier-assignment.v1", + "ok": true, + "executed": true, + "repo": "repo-manager", + "namespace": "helixforge", + "assignments": [], + "historical_invalid_identifiers": [], + "historical_identity_collisions": [], + "files_changed": [] + }, + "receipt": { + "schema": "state-hub.repository-projection-reconcile.v1", + "instance_role": "primary", + "instance_label": "railiance01", + "expected_commit": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "derived_commit": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "outcome": { + "schema": "state-hub.projection-reset.v1", + "repo_slug": "repo-manager", + "commit": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "status": "applied", + "counts": { + "created": 0, + "updated": 25, + "retired": 0, + "refused": 0, + "released": 0, + "created_tasks": 0, + "updated_tasks": 1, + "cancelled_tasks": 0, + "created_edges": 1, + "removed_edges": 0, + "unresolved_edges": 0, + "external_edges": 0 + }, + "created": [], + "updated": [ + "RMGR-WP-0001", + "RMGR-WP-0002", + "RMGR-WP-0003", + "RMGR-WP-0004", + "RMGR-WP-0005", + "RMGR-WP-0006", + "RMGR-WP-0007", + "RMGR-WP-0008", + "RMGR-WP-0009", + "RMGR-WP-0010", + "RMGR-WP-0011", + "RMGR-WP-0012", + "RMGR-WP-0013", + "RMGR-WP-0014", + "RMGR-WP-0015", + "RMGR-WP-0016", + "RMGR-WP-0017", + "RMGR-WP-0018", + "RMGR-WP-0019", + "RMGR-WP-0020", + "RMGR-WP-0021", + "RMGR-WP-ADHOC-2026-09-06", + "RMGR-WP-ADHOC-2026-09-09", + "RMGR-WP-ADHOC-2026-09-11", + "RMGR-WP-ADHOC-2026-10-03" + ], + "retired": [], + "released": [], + "created_tasks": [], + "updated_tasks": [ + "RMGR-WP-0019-T06" + ], + "cancelled_tasks": [], + "created_edges": [ + { + "workplan": "RMGR-WP-0019", + "from": "RMGR-WP-0019-T06", + "target": "STATE-WP-0095-T10", + "relationship_type": "starts_after", + "from_workplan_id": "efe0ecb2-2f3f-5f49-baee-b90ad1d353ab", + "from_task_id": "4d1675b6-f49f-5b01-8d76-bbf2030d1b34", + "to_workplan_id": null, + "to_task_id": "88585c69-d9b9-5e1f-a256-6416ff71e824" + } + ], + "removed_edges": [], + "unresolved_edges": [], + "external_edges": [], + "refused": [], + "notes": [] + } + } +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/manifest.json b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/manifest.json new file mode 100644 index 00000000..50be0045 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/manifest.json @@ -0,0 +1,23 @@ +{ + "status": "prepared-not-applied", + "base": "7c15c0ea48981867fc1683d9b7576f6444c256da", + "path": "workplans/RMGR-WP-0019-historical-source-admission.md", + "preimage_sha256": "4ff763ea24b9948d59b4bdd4f5ef3e95bee72fef3016f0b6404b5db663cb83ff", + "candidate_sha256": "3c28ff7809a56a2096f58986f1b3d7e6f99d365d42d0e8a97ee786ae7d067cc1", + "patch_sha256": "8527c5fa953a86dea8bc3f3bcf783084608c6850dd323f3390cfa27157f9cd2a", + "t05": "done", + "t06": "wait", + "added_dependency": "STATE-WP-0095-T10", + "UUIDs_unchanged": true, + "runtime_activation": false, + "original_rows_restored": false, + "receipts": { + "receiver-rollout-r4/before-verified-client.json": "ee41be2d74085603abf2bfe2c91c1bb430b4ea0539a6cbf988528b18f3f5ef46", + "receiver-rollout-r4/after-verified-client.json": "8cd8921271cd647fe40dde0f00bc55b714313426e14091397d8fd11314c5e610", + "verified-loaded-client.json": "0745b5df92d2533714e2a87a43c73b3b685e7bab7bcf4444f7a5fbd82dd4722f", + "verified-client-cluster-consistency.json": "fd8a7d58d9e08b4866420ad77d01fbc7c28c0c2c9610ffbe95ddc77dddd9b1a6", + "verified-client-cluster-projection.json": "c25b43575273df0e648842d447979aca1b41ade16fcdaf9f5f870024e7ca06e9", + "guard-successor-review-r1/proposal-metadata.json": "81d365926fc585a186955d8c98ee83501fd3cec12135b2256d71b46a75097932", + "guard-successor-review-r1/pending-decision.json": "b1dbd9b700555c0081231d49ca03522bd0af1a635b6e11ecbd72ff0797b27de5" + } +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/owner-amendment.patch b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/owner-amendment.patch new file mode 100644 index 00000000..cf2ba88a --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/owner-amendment.patch @@ -0,0 +1,46 @@ +--- a/workplans/RMGR-WP-0019-historical-source-admission.md ++++ b/workplans/RMGR-WP-0019-historical-source-admission.md +@@ -199,7 +199,8 @@ + id: RMGR-WP-0019-T06 + status: wait + priority: high +-depends_on: [RMGR-WP-0019-T05] ++depends_on: [RMGR-WP-0019-T05, STATE-WP-0095-T10] ++blocking_reason: "Await State Hub T10 founder approval, delivered API guard verification and explicit current-baseline/historical-exception disposition; original parent hashes are not restored." + state_hub_task_id: "4d1675b6-f49f-5b01-8d76-bbf2030d1b34" + ``` + +@@ -236,6 +237,33 @@ + the reviewed exact-frozen binding guard, regression coverage and a verified + recovery/preservation disposition. No source or native gate is promoted by the + successful publication alone; no TLS or credential-custody acceptance follows. ++ ++Verified installed-client successor, 2026-10-17: after verifying the installed ++R6 checker module rather than assuming canonical source was loaded, the full ++normal Cluster maintenance pipeline preserved all 18 CURRENT historical row ++hashes. It synced 20/20 ordinary bindings while omitting the three exact frozen ++histories. Cluster HEAD remained 6ae3f847c83da3402883453ee7110457bfb2d0d6; ++the owner's original staged brief and dirty WORK-RECORDS content were preserved. ++Passing CURRENT before/after snapshots are retained under the Custodian packet ++receiver-rollout-r4/before-verified-client.json and after-verified-client.json; ++verified-loaded-client.json, verified-client-cluster-consistency.json and ++verified-client-cluster-projection.json retain the actual client/pipeline proof. ++This new baseline pass does not restore or replace the earlier failed three ++parent comparisons; those failures and unavailable original preimages remain. ++ ++The new API guard artifact c103cbf3c8bed5dba87a03e320595ddded9301a3 at ++image digest sha256:4cc4ce17bbcdb1b66132d07c5b7b741f46df83124ef1c8403ffabdafba6993d1 ++has image-only server dry-run proof, not delivered-runtime acceptance. T06 ++therefore also depends on STATE-WP-0095-T10. Founder decision ++df703266-6719-4c04-ae1b-ba9afd3bca1c remains pending for exact proposal ++STATE-WP-0095-T10-frozen-bindings-guard-r1 revision 1, metadata SHA256 ++81d365926fc585a186955d8c98ee83501fd3cec12135b2256d71b46a75097932, in ++Custodian docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/. ++That decision includes the proposed CURRENT-baseline acceptance with the ++earlier mismatch retained as an exception; no baseline disposition is inferred ++here. Await its approved scope and verified owner return before T06 closes. ++T05 stays done; no runtime activation, guessed database restoration, worker ++wakeup, TLS recovery or native private-admission acceptance follows. + + + ## Receiver-first registrar source follow-through, 2026-10-17 diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/publication-final-manifest.json b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/publication-final-manifest.json new file mode 100644 index 00000000..8330a573 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/publication-final-manifest.json @@ -0,0 +1,32 @@ +{ + "status": "published-and-readback-verified", + "commit": "1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd", + "scope": "one owner-record qualifier; no code/Cluster/rollout changes", + "t05": "done", + "t06": "wait", + "task_statuses_and_UUIDs_unchanged": true, + "scanner_unchanged": true, + "repo_worktree_clean": true, + "wp19_six_task_bindings_and_wp21_five_bindings_verified": true, + "new_actual_projected_external_edge": { + "from": "RMGR-WP-0019-T06", + "to": "STATE-WP-0095-T10", + "target_uuid": "88585c69-d9b9-5e1f-a256-6416ff71e824", + "target_identity_GET_verified": true + }, + "closed_task_external_declarations_not_claimed_as_projected": true, + "first_verifier_mismatch_retained": "R1 expected only internal edges; actual current wait-task external edge existed, R2 verifies exact three projected edges and target", + "original_parent_hash_failure_retained": true, + "new_runtime_approval_or_execution": false, + "files": { + "manifest.json": "5b5600ccc9611b86ef190895a39dca2bda6032caa37e664cd995a6ae36868c2f", + "owner-amendment.patch": "8527c5fa953a86dea8bc3f3bcf783084608c6850dd323f3390cfa27157f9cd2a", + "publish_amendment.py": "d30ea83e814b32ef603056a8338125e5a5cf49765d698adfda317e8a3f8e3435", + "amendment-commit.json": "c73ee532b9018808de14c03cf42ded7eeddf4589dd5521eeae052703644a2748", + "amendment-sync.json": "43467eb3ada96f3207ed97d3809e6b5230636280b400569660ece5813b1535ab", + "verify_amendment_publication.py": "c794ce4e1b1672982a606dce9bd364de0754dd905d63fbaf3cf6b1b2c42f4764", + "amendment-publication-readback.json": "ef1a342f12b2007480f7c3bf9039f257a238ebce921be076ce277641642e2f96", + "r1-verify_amendment_publication.py": "f1c08cf2912c894de4825291fc9d56c2813dfd21436a7596781967b139cd4ec8", + "r1-amendment-publication-readback.json": "e4478c48af15dac3a67b8514ce68cf50c4a6502c497dcb7d29e8873c97941737" + } +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/publish_amendment.py b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/publish_amendment.py new file mode 100644 index 00000000..9922b5af --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/publish_amendment.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +from pathlib import Path +import hashlib,json,subprocess +P=Path(__file__).resolve().parent +R=Path('/home/worsch/repo-manager') +m=json.loads((P/'manifest.json').read_text()); f=R/m['path'] +def h(p):return hashlib.sha256(p.read_bytes()).hexdigest() +def git(*args): + r=subprocess.run(['git',*args],cwd=R,text=True,capture_output=True,timeout=180) + if r.returncode: raise RuntimeError(json.dumps({'args':args,'stdout':r.stdout,'stderr':r.stderr,'code':r.returncode})) + return r.stdout +assert git('rev-parse','HEAD').strip()==m['base'] +assert h(f)==m['preimage_sha256'] +assert h(P/'owner-amendment.patch')==m['patch_sha256']=='8527c5fa953a86dea8bc3f3bcf783084608c6850dd323f3390cfa27157f9cd2a' +assert h(P/'WP19.candidate.md')==m['candidate_sha256'] +assert not git('diff','--cached','--name-only') +scanner=R/'src/repo_manager/secret_scan.py'; before=h(scanner) +assert before=='e709c658f779534fcab093207b0a78e49d54fc584c515fdf7ac535ce75f6c400' +git('apply','--check',str(P/'owner-amendment.patch')) +git('apply',str(P/'owner-amendment.patch')) +assert h(f)==m['candidate_sha256'] +git('add','--',m['path']) +assert git('diff','--cached','--name-only').splitlines()==[m['path']] +git('diff','--cached','--check') +output=git('commit','-m','Qualify Cluster preservation wait with verified client and API gate') +head=git('rev-parse','HEAD').strip() +assert git('diff-tree','--no-commit-id','--name-only','-r',head).splitlines()==[m['path']] +assert h(scanner)==before +receipt={'status':'committed-exact-one-file','head':head,'parent':m['base'],'path':m['path'],'source_sha256':h(f),'scanner_sha256_unchanged':before,'task_statuses_and_UUIDs_unchanged':True,'added_dependency':'STATE-WP-0095-T10','t05':'done','t06':'wait','commit_output':output,'cluster_or_database_mutation':False} +(P/'amendment-commit.json').write_text(json.dumps(receipt,indent=2)+'\n');print(json.dumps(receipt,indent=2)) diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/r1-amendment-publication-readback.json b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/r1-amendment-publication-readback.json new file mode 100644 index 00000000..4a6c433a --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/r1-amendment-publication-readback.json @@ -0,0 +1,13 @@ +{ + "status": "unverified", + "scope": "RepoManager registrar WP19 and preserved scanner WP21; read-only Git ls-remote and Hub GET snapshots", + "writes_to_source_index_refs_or_Hub": false, + "rows": [], + "hub_instance": { + "status": "ok", + "instance_role": "primary", + "instance_label": "railiance01" + }, + "reason": "dependency-binding-mismatch", + "verifier_sha256": "f1c08cf2912c894de4825291fc9d56c2813dfd21436a7596781967b139cd4ec8" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/r1-verify_amendment_publication.py b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/r1-verify_amendment_publication.py new file mode 100644 index 00000000..cf950b1e --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/r1-verify_amendment_publication.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python3 +"""Read-only Git+Hub task binding verifier; never syncs or changes source/index.""" +import hashlib +import json +import os +from pathlib import Path +import re +import subprocess +import urllib.request + +HERE=Path(__file__).resolve().parent +OWNERS=[ + {'repo':'repo-manager','commit':'1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd','path':'workplans/RMGR-WP-0019-historical-source-admission.md','id':'RMGR-WP-0019','tasks':6}, + {'repo':'repo-manager','commit':'1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd','path':'workplans/RMGR-WP-0021-secret-detection-controls.md','id':'RMGR-WP-0021','tasks':5}, +] +API=os.environ.get('API_BASE','http://127.0.0.1:8000').rstrip('/') +EXTERNAL={'STATE-WP-0095-T10':'88585c69-d9b9-5e1f-a256-6416ff71e824','STATE-WP-0095-T03':'e8566341-cf6e-5b9c-ad80-8564d14cd52a','STATE-WP-0095-T06':'6af973b4-1964-5d4d-a2f8-8dbd4c01fda4','NK-WP-0049-T33':'56c8d469-7a10-5d50-a30e-95cbf3cd4756'} + + +class Refused(Exception):pass + + +def git(root,*args): + result=subprocess.run(['git','--no-optional-locks','-C',str(root),*args], + capture_output=True,timeout=30,check=False) + if result.returncode:raise Refused('read-only-git-failed') + return result.stdout + + +def field(text,key): + values=re.findall(r'^'+re.escape(key)+r':\s*(.*?)\s*$',text,re.M) + if len(values)!=1:raise Refused('source-field-ambiguous') + return values[0].strip('"\'') + + +def source(text): + header=text.split('---',2)[1] + tasks=[] + for block in re.findall(r'```task\n(.*?)\n```',text,re.S): + deps=re.findall(r'^depends_on:\s*\[(.*?)\]',block,re.M) + tasks.append({'record_id':field(block,'id'),'id':field(block,'state_hub_task_id'), + 'status':field(block,'status'),'dependencies':[x.strip() for x in deps[0].split(',') if x.strip()] if deps else []}) + return {'id':field(header,'state_hub_workstream_id'),'source_record_id':field(header,'id'), + 'slug':field(header,'id').lower(), + 'status':field(header,'status'),'tasks':tasks} + + +def get(path): + class NoRedirect(urllib.request.HTTPRedirectHandler): + def redirect_request(self,*args,**kwargs):raise Refused('hub-redirect-refused') + opener=urllib.request.build_opener(urllib.request.ProxyHandler({}),NoRedirect) + with opener.open(urllib.request.Request(API+path,method='GET'),timeout=20) as response: + data=response.read(8*1024**2+1) + if len(data)>8*1024**2:raise Refused('hub-read-limit') + return json.loads(data) + + +def index_stat(root): + raw=git(root,'rev-parse','--git-path','index').decode().strip();path=Path(raw) + if not path.is_absolute():path=root/path + try:item=path.lstat() + except FileNotFoundError:return None + return [item.st_dev,item.st_ino,item.st_size,item.st_mtime_ns,item.st_mode] + + +def remote(root,expected,repo): + if git(root,'remote','get-url','origin').decode().strip()!='forgejo-remote:coulomb/'+repo+'.git': + raise Refused('remote-route-drift') + lines=git(root,'ls-remote','--symref','origin','HEAD','refs/heads/main').decode().splitlines() + if set(lines)!={'ref: refs/heads/main\tHEAD',expected+'\tHEAD',expected+'\trefs/heads/main'}: + raise Refused('remote-head-mismatch') + return {'HEAD':expected,'refs/heads/main':expected,'symbolic_HEAD':'refs/heads/main'} + + +def verify(): + result={'status':'unverified','scope':'RepoManager registrar WP19 and preserved scanner WP21; read-only Git ls-remote and Hub GET snapshots', + 'writes_to_source_index_refs_or_Hub':False,'rows':[]} + try: + if API not in {'http://127.0.0.1:8000','http://127.0.0.1:18080','http://10.43.68.154:8000'}: + raise Refused('unrecognized-hub-endpoint') + health=get('/state/health') + result['hub_instance']={key:health.get(key) for key in ('status','instance_role','instance_label')} + if result['hub_instance']!={'status':'ok','instance_role':'primary','instance_label':'railiance01'}: + raise Refused('hub-identity-mismatch') + for owner in OWNERS: + root=Path('/home/worsch')/owner['repo'];before_index=index_stat(root) + if git(root,'rev-parse','HEAD').decode().strip()!=owner['commit']: + raise Refused('local-head-drift') + committed=git(root,'show',owner['commit']+':'+owner['path']) + local=(root/owner['path']).read_bytes() + if local!=committed:raise Refused('published-workplan-local-drift') + expected=source(committed.decode()) + if expected['source_record_id']!=owner['id'] or len(expected['tasks'])!=owner['tasks']: + raise Refused('source-task-denominator-mismatch') + snapshot=get('/repos/'+owner['repo']+'/work-record-projection/snapshot') + plans=[row for row in snapshot['workplans'] if row['id']==expected['id']] + if len(plans)!=1 or any(plans[0].get(key)!=expected[key] for key in ('id','slug','status')): + raise Refused('workplan-binding-mismatch') + projected=[row for row in snapshot['tasks'] + if row.get('workplan_id',row.get('workstream_id'))==expected['id']] + if len(projected)!=len(expected['tasks']):raise Refused('projected-task-denominator-mismatch') + byid={row['id']:row for row in projected} + if len(byid)!=len(projected):raise Refused('duplicate-projected-uuid') + observed=[] + for task in expected['tasks']: + row=byid.get(task['id'],{}) + if any(row.get(key)!=task[key] for key in ('id','record_id','status')): + raise Refused('task-id-uuid-status-mismatch') + observed.append({key:row[key] for key in ('id','record_id','status')}) + identifiers={task['record_id']:task['id'] for task in expected['tasks']} + edges={(task['id'],identifiers[dep],'starts_after') for task in expected['tasks'] for dep in task['dependencies'] if dep in identifiers} + actual=[edge for edge in snapshot['dependencies'] if edge['from_workplan_id']==expected['id']] + projected_edges={(edge.get('from_task_id'),edge.get('to_task_id'),edge['relationship_type']) for edge in actual} + if len(actual)!=len(edges) or projected_edges!=edges: + raise Refused('dependency-binding-mismatch') + # An unchanged edge retains its original forge creation commit on description-only sync. + def valid_edge_commit(edge): + if edge.get('source_commit') in (None,owner['commit']):return True + return (owner['id']=='RMGR-WP-0019' and + edge.get('from_task_id')=='4d1675b6-f49f-5b01-8d76-bbf2030d1b34' and + edge.get('to_task_id')=='36f47e21-42d0-5aef-b065-4a5dd3af0726' and + edge.get('source_owner')=='forge:repo-manager' and + edge.get('source_commit')=='70cd754996870638848616e37819790a5c4d52b3') + if any(not valid_edge_commit(edge) for edge in actual): + raise Refused('dependency-source-commit-mismatch') + for task in expected['tasks']: + for dep in task['dependencies']: + if dep in EXTERNAL: + target=get('/tasks/'+EXTERNAL[dep]) + if target.get('id')!=EXTERNAL[dep] or target.get('record_id')!=dep: + raise Refused('external-dependency-target-mismatch') + remote_readback=remote(root,owner['commit'],owner['repo']) + if index_stat(root)!=before_index or (root/owner['path']).read_bytes()!=local: + raise Refused('source-or-index-stat-changed') + result['rows'].append({'repo':owner['repo'],'published_commit':owner['commit'], + 'remote':remote_readback,'workplan':{key:plans[0][key] for key in ('id','slug','status')}, + 'source_record_id':expected['source_record_id'], + 'tasks':observed,'external_source_declarations_not_projected':[{'from_task_id':task['id'],'target_record_id':dep,'target_uuid':EXTERNAL[dep]} for task in expected['tasks'] for dep in task['dependencies'] if dep in EXTERNAL],'dependencies':[{'from_task_id':a,'to_task_id':b,'relationship_type':c} for a,b,c in sorted(edges)], + 'source_file_sha256':hashlib.sha256(local).hexdigest(),'source_file_unchanged':True,'dependency_scope':'internal edges verified; external source target identities checked without claiming projected external edges', + 'index_stat_unchanged':True}) + result['status']='verified' + except Exception as error: + result['reason']=error.args[0] if isinstance(error,Refused) else 'readback-unavailable' + result['verifier_sha256']=hashlib.sha256(Path(__file__).read_bytes()).hexdigest() + (HERE/'amendment-publication-readback.json').write_text(json.dumps(result,indent=2)+'\n') + print(json.dumps({'status':result['status'],'owners':len(result['rows'])})) + return 0 if result['status']=='verified' else 2 + + +if __name__=='__main__':raise SystemExit(verify()) diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/verify_amendment_publication.py b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/verify_amendment_publication.py new file mode 100644 index 00000000..64d13a5f --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-current-client-r1/verify_amendment_publication.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python3 +"""Read-only Git+Hub task binding verifier; never syncs or changes source/index.""" +import hashlib +import json +import os +from pathlib import Path +import re +import subprocess +import urllib.request + +HERE=Path(__file__).resolve().parent +OWNERS=[ + {'repo':'repo-manager','commit':'1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd','path':'workplans/RMGR-WP-0019-historical-source-admission.md','id':'RMGR-WP-0019','tasks':6}, + {'repo':'repo-manager','commit':'1dacdd4a31c8e9b1bb1ddfb0c349dfb87e29e8cd','path':'workplans/RMGR-WP-0021-secret-detection-controls.md','id':'RMGR-WP-0021','tasks':5}, +] +API=os.environ.get('API_BASE','http://127.0.0.1:8000').rstrip('/') +EXTERNAL={'STATE-WP-0095-T10':'88585c69-d9b9-5e1f-a256-6416ff71e824','STATE-WP-0095-T03':'e8566341-cf6e-5b9c-ad80-8564d14cd52a','STATE-WP-0095-T06':'6af973b4-1964-5d4d-a2f8-8dbd4c01fda4','NK-WP-0049-T33':'56c8d469-7a10-5d50-a30e-95cbf3cd4756'} + + +class Refused(Exception):pass + + +def git(root,*args): + result=subprocess.run(['git','--no-optional-locks','-C',str(root),*args], + capture_output=True,timeout=30,check=False) + if result.returncode:raise Refused('read-only-git-failed') + return result.stdout + + +def field(text,key): + values=re.findall(r'^'+re.escape(key)+r':\s*(.*?)\s*$',text,re.M) + if len(values)!=1:raise Refused('source-field-ambiguous') + return values[0].strip('"\'') + + +def source(text): + header=text.split('---',2)[1] + tasks=[] + for block in re.findall(r'```task\n(.*?)\n```',text,re.S): + deps=re.findall(r'^depends_on:\s*\[(.*?)\]',block,re.M) + tasks.append({'record_id':field(block,'id'),'id':field(block,'state_hub_task_id'), + 'status':field(block,'status'),'dependencies':[x.strip() for x in deps[0].split(',') if x.strip()] if deps else []}) + return {'id':field(header,'state_hub_workstream_id'),'source_record_id':field(header,'id'), + 'slug':field(header,'id').lower(), + 'status':field(header,'status'),'tasks':tasks} + + +def get(path): + class NoRedirect(urllib.request.HTTPRedirectHandler): + def redirect_request(self,*args,**kwargs):raise Refused('hub-redirect-refused') + opener=urllib.request.build_opener(urllib.request.ProxyHandler({}),NoRedirect) + with opener.open(urllib.request.Request(API+path,method='GET'),timeout=20) as response: + data=response.read(8*1024**2+1) + if len(data)>8*1024**2:raise Refused('hub-read-limit') + return json.loads(data) + + +def index_stat(root): + raw=git(root,'rev-parse','--git-path','index').decode().strip();path=Path(raw) + if not path.is_absolute():path=root/path + try:item=path.lstat() + except FileNotFoundError:return None + return [item.st_dev,item.st_ino,item.st_size,item.st_mtime_ns,item.st_mode] + + +def remote(root,expected,repo): + if git(root,'remote','get-url','origin').decode().strip()!='forgejo-remote:coulomb/'+repo+'.git': + raise Refused('remote-route-drift') + lines=git(root,'ls-remote','--symref','origin','HEAD','refs/heads/main').decode().splitlines() + if set(lines)!={'ref: refs/heads/main\tHEAD',expected+'\tHEAD',expected+'\trefs/heads/main'}: + raise Refused('remote-head-mismatch') + return {'HEAD':expected,'refs/heads/main':expected,'symbolic_HEAD':'refs/heads/main'} + + +def verify(): + result={'status':'unverified','scope':'RepoManager registrar WP19 and preserved scanner WP21; read-only Git ls-remote and Hub GET snapshots', + 'writes_to_source_index_refs_or_Hub':False,'rows':[]} + try: + if API not in {'http://127.0.0.1:8000','http://127.0.0.1:18080','http://10.43.68.154:8000'}: + raise Refused('unrecognized-hub-endpoint') + health=get('/state/health') + result['hub_instance']={key:health.get(key) for key in ('status','instance_role','instance_label')} + if result['hub_instance']!={'status':'ok','instance_role':'primary','instance_label':'railiance01'}: + raise Refused('hub-identity-mismatch') + for owner in OWNERS: + root=Path('/home/worsch')/owner['repo'];before_index=index_stat(root) + if git(root,'rev-parse','HEAD').decode().strip()!=owner['commit']: + raise Refused('local-head-drift') + committed=git(root,'show',owner['commit']+':'+owner['path']) + local=(root/owner['path']).read_bytes() + if local!=committed:raise Refused('published-workplan-local-drift') + expected=source(committed.decode()) + if expected['source_record_id']!=owner['id'] or len(expected['tasks'])!=owner['tasks']: + raise Refused('source-task-denominator-mismatch') + snapshot=get('/repos/'+owner['repo']+'/work-record-projection/snapshot') + plans=[row for row in snapshot['workplans'] if row['id']==expected['id']] + if len(plans)!=1 or any(plans[0].get(key)!=expected[key] for key in ('id','slug','status')): + raise Refused('workplan-binding-mismatch') + projected=[row for row in snapshot['tasks'] + if row.get('workplan_id',row.get('workstream_id'))==expected['id']] + if len(projected)!=len(expected['tasks']):raise Refused('projected-task-denominator-mismatch') + byid={row['id']:row for row in projected} + if len(byid)!=len(projected):raise Refused('duplicate-projected-uuid') + observed=[] + for task in expected['tasks']: + row=byid.get(task['id'],{}) + if any(row.get(key)!=task[key] for key in ('id','record_id','status')): + raise Refused('task-id-uuid-status-mismatch') + observed.append({key:row[key] for key in ('id','record_id','status')}) + identifiers={task['record_id']:task['id'] for task in expected['tasks']}|EXTERNAL + edges={(task['id'],identifiers[dep],'starts_after') for task in expected['tasks'] for dep in task['dependencies'] if dep in identifiers and (dep not in EXTERNAL or task['status'] not in {'done','cancel'})} + actual=[edge for edge in snapshot['dependencies'] if edge['from_workplan_id']==expected['id']] + projected_edges={(edge.get('from_task_id'),edge.get('to_task_id'),edge['relationship_type']) for edge in actual} + if len(actual)!=len(edges) or projected_edges!=edges: + raise Refused('dependency-binding-mismatch') + # An unchanged edge retains its original forge creation commit on description-only sync. + def valid_edge_commit(edge): + if edge.get('source_commit') in (None,owner['commit']):return True + return (owner['id']=='RMGR-WP-0019' and + edge.get('from_task_id')=='4d1675b6-f49f-5b01-8d76-bbf2030d1b34' and + edge.get('to_task_id')=='36f47e21-42d0-5aef-b065-4a5dd3af0726' and + edge.get('source_owner')=='forge:repo-manager' and + edge.get('source_commit')=='70cd754996870638848616e37819790a5c4d52b3') + if any(not valid_edge_commit(edge) for edge in actual): + raise Refused('dependency-source-commit-mismatch') + for task in expected['tasks']: + for dep in task['dependencies']: + if dep in EXTERNAL: + target=get('/tasks/'+EXTERNAL[dep]) + if target.get('id')!=EXTERNAL[dep] or target.get('record_id')!=dep: + raise Refused('external-dependency-target-mismatch') + remote_readback=remote(root,owner['commit'],owner['repo']) + if index_stat(root)!=before_index or (root/owner['path']).read_bytes()!=local: + raise Refused('source-or-index-stat-changed') + result['rows'].append({'repo':owner['repo'],'published_commit':owner['commit'], + 'remote':remote_readback,'workplan':{key:plans[0][key] for key in ('id','slug','status')}, + 'source_record_id':expected['source_record_id'], + 'tasks':observed,'external_source_declarations_not_projected':[{'from_task_id':task['id'],'target_record_id':dep,'target_uuid':EXTERNAL[dep]} for task in expected['tasks'] for dep in task['dependencies'] if dep in EXTERNAL and task['status'] in {'done','cancel'}],'projected_external_dependencies':[{'from_task_id':task['id'],'target_record_id':dep,'target_uuid':EXTERNAL[dep]} for task in expected['tasks'] for dep in task['dependencies'] if dep in EXTERNAL and task['status'] not in {'done','cancel'}],'dependencies':[{'from_task_id':a,'to_task_id':b,'relationship_type':c} for a,b,c in sorted(edges)], + 'source_file_sha256':hashlib.sha256(local).hexdigest(),'source_file_unchanged':True,'dependency_scope':'exact internal and active-task external edges verified; closed-task external declarations retained separately', + 'index_stat_unchanged':True}) + result['status']='verified' + except Exception as error: + result['reason']=error.args[0] if isinstance(error,Refused) else 'readback-unavailable' + result['verifier_sha256']=hashlib.sha256(Path(__file__).read_bytes()).hexdigest() + (HERE/'amendment-publication-readback.json').write_text(json.dumps(result,indent=2)+'\n') + print(json.dumps({'status':result['status'],'owners':len(result['rows'])})) + return 0 if result['status']=='verified' else 2 + + +if __name__=='__main__':raise SystemExit(verify()) diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-preservation-failure-r1/RMGR-WP-0019.candidate.md b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-preservation-failure-r1/RMGR-WP-0019.candidate.md new file mode 100644 index 00000000..98cc2d2a --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-preservation-failure-r1/RMGR-WP-0019.candidate.md @@ -0,0 +1,269 @@ +--- +id: RMGR-WP-0019 +type: workplan +title: "Admit exact historical source views after receiving preservation support" +domain: infotech +repo: repo-manager +status: active +owner: codex +created: "2026-10-04" +updated: "2026-10-17" +flavor: implementation +depends_on: [] +state_hub_workstream_id: "efe0ecb2-2f3f-5f49-baee-b90ad1d353ab" +--- + +## Goal + +Unblock normal authoritative registration of the exact closed Activity legacy +source views and Custodian retired ADHOC source after receiving preserves their +existing records. Preserve every legacy source byte, label and UUID; do not +expand canonical syntax or the general grandfathering rules. CUST-WP-0077 owns +cross-owner coordination with STATE-WP-0095. + +## Review exact historical receiving contract + +```task +id: RMGR-WP-0019-T01 +status: done +priority: high +state_hub_task_id: "d78a622e-39f9-5923-b4e1-f70fdc17fb42" +``` + +Seven Activity sources yield four existing parents/64 closed bound tasks; +three split views repeat the archived parent. One Custodian retired source keeps +its existing parent/task IDs. Earlier /tmp/activity-core-bound-history-write.py +is superseded and must not be applied: registrar bypass alone would admit an +unsupported receiving projection. RMGR-WP-0014/0015 are finished and do not own +this new implementation demand; this workplan is not residual. + +## Enable exact frozen registrar exceptions after receiving deployment + +```task +id: RMGR-WP-0019-T02 +status: done +priority: high +depends_on: [STATE-WP-0095-T03] +state_hub_task_id: "95240c81-1805-5365-9b35-d238621a16bf" +``` + +Prepared code permits only source paths with reviewed full SHA256 digests in +repo_manager/historical_sources.py. Strict conformance scans retain their legacy +findings. Unknown/missing/altered source refuses before allocation. Source UUIDs +are neither changed nor allocated for these histories. Receiving and registrar +manifests must remain identical. Apply helper requires a deployment receipt. + +## Run normal owner sync and verify preserved identities + +```task +id: RMGR-WP-0019-T03 +status: done +priority: high +depends_on: [RMGR-WP-0019-T02] +state_hub_task_id: "682eea14-a4a8-5f33-9a9f-8f2f1ac8288d" +``` + +Use rmgr sync --path --push. No deep-check repair or direct hub UUID +patch substitutes for receiving. Historical unrelated stale projections are not +retirement-authorized by this workplan. Feed receipts back to STATE-WP-0095-T04. + +## Offline evidence, 2026-10-04 + +Prepared registrar suite: 38 focused cases passed (identifiers, registrar, +Custodian legacy identity and exact frozen source cases). Read-only execute=False +against both current owning repos accepted exact histories without source writes. +Implementation is staged; deployment gate is unresolved. + +## Approved deployment and actual registrar verification, 2026-10-04 + +STATE-WP-0095-T03 returned verified main-5dd3df9 / Helm revision72. +Global task-holder refusal passed inside the delivered API against the retired +Custodian parent, with transaction rollback and no committed probe. Five +historical parents/65 tasks retained their entire row snapshots. The gated +three-file registrar patch committed as c41d36c2ef8930628221ef36ec81d8b5d2145ed6; +38 actual owning-source cases passed and Repo Manager primary sync applied. + +Normal owner sync admitted all exact frozen histories without changing their +source bytes, UUIDs, parent ownership or row content. Custodian receiving +applied. Activity receiving refused only three empty duplicate projections +that would be retired; no retirement acknowledgement was issued. Registrar +allocated four missing IDs in ordinary Activity ad-hoc sources through its +normal path; frozen historical source files stayed unchanged. T03 remains wait +for explicit disposition and bounded receiving support under STATE-WP-0095-T04 +(decision91b7c633-a66f-5d43-9f4b-6565aefb9356). +Evidence: docs/evidence/2026-10-04-historical-registrar-verification.json. + +## Ungated T03 preparation, 2026-10-06 + +Re-ran the registrar suite at 8a47a5c (registrar source unchanged since +c41d36c2): 89 focused registrar/identity/historical cases and the full suite +(226) passed. Read-only hub check: the three refused projections are +683724d9 (custodian-wp-0003), 644017c7 (custodian-wp-0003a) and a5806df9 +(custodian-wp-0003b), each with zero tasks; every custodian-WP-0003* source +file binds parent b4eb45a9, which holds the tasks and must not be retired. +Added repo_manager.retirement_disposition, a read-only check that an Activity +expected_retirement_uuids set equals exactly those three empty projections and +excludes the preserved parent. It authorizes nothing; retirement stays with +Activity receiving under STATE-WP-0095-T04. + +## Activity disposition received, 2026-10-06 + +activity-core returned the exact expected_retirement_uuids (message 17ba4201, +evidence activity-core 941fac0, ACTIVITY-WP-0045): 683724d9, 644017c7, +a5806df9. repo_manager.retirement_disposition accepted the set: it equals the +three projections the 2026-10-04 run refused, each holds zero tasks, and it +excludes preserved parent b4eb45a9. Nothing was applied. T03 stays wait: its +acceptance needs a successful Activity owner sync with receipts, which can run +only after the founder decides 91b7c633 and STATE-WP-0095-T04 retires exactly +this set in a reviewed live rollout. Then re-run rmgr sync --path +~/activity-core --push and feed the receipt back to STATE-WP-0095-T04. + +## Post-retirement owner sync attempt, 2026-10-06 + +State Hub reported decision 91b7c633 resolved, main-968a811 / Helm rev 74 +deployed, and Activity reconcile at 67a92d2 retiring exactly the three empty +projections (3 retired, 0 created, 0 refused; 4 historical parents / 64 tasks +unchanged). Evidence: state-hub docs/evidence/2026-10-06-activity-stale-retirement-rollout.json. +`rmgr sync --path ~/activity-core --push` stopped before reconciliation with +status pending_commit: uncommitted `state_hub_workstream_id` / `state_hub_task_id` +writeback in activity-core workplans/ACTIVITY-WP-0045-stale-historical-projection-disposition.md +(plus WORK-RECORDS.md). No hub request was made. Repo Manager does not commit in +activity-core; T03 stays wait until Activity Core commits and the sync re-runs. + +Re-run 2026-10-06 08:42Z after Activity Core committed the writeback (e809fb2): +status applied, created 0 / updated 45 (ACTIVITY-WP only) / retired 0 / refused 0, +no task changes, notes preserve custodian-WP-0001..0004 UUIDs; hub shows 4 parents, +64 tasks. Not closed: historical parent b4eb45a9 (custodian-WP-0003, source +`status: archived`, evidence snapshot archived) now reads `finished` in the hub, +updated 08:42:03Z during this sync. Needs State Hub review before T03 closes. + +Closed 2026-10-06: State Hub traced the b4eb45a9 status change to its own C-04 +check, which ran once per file. The custodian-WP-0003a/b/c split views share the +parent UUID, so whichever view ran last set the row. The Forge reconcile did not +cause it. Fixed in state-hub 2b5d8f9 (STATE-WP-ADHOC-2026-10-06-T01); b4eb45a9 is +back to `archived`. Re-check: 4 parents (b4eb45a9 archived; 3a4f47d9, 759b1255, +e22516cc finished) holding 64 tasks (24+12+7+21). Receipt: Activity sync at e809fb2, +primary/railiance01, applied, 0 created / 45 updated (ACTIVITY-WP only) / 0 retired +/ 0 refused, 0 task changes, historical UUIDs preserved. Evidence: +state-hub docs/evidence/2026-10-06-activity-stale-retirement-rollout.json. + + +## Cluster exact historical source successor, 2026-10-17 + +This scoped extension preserves the completed Activity/Custodian work above. +The cluster publisher now refuses three closed RAIL-BS source files containing +15 existing UUID-bound bare task labels. Preserve all three source bytes, IDs, +and UUIDs. No new alias or general syntax exemption is introduced. Evidence and +exact receiver-first proposal: cluster-historical-publication-r1 in the Custodian +NetKingdom change packet. The existing SHR-WP-0001 project driver owns the +Repo Manager / State Hub cross-owner wait; NK-WP-0049-T35 benefits from the +blocked cluster publication. No worker or human gate is woken here. + +## Prepare exact cluster registrar successor + +```task +id: RMGR-WP-0019-T04 +status: done +priority: high +state_hub_task_id: "1ccb06c6-ad30-5847-8704-e5628ba81f35" +``` + +Prepared full-file SHA256 bindings for three archives and 15 exact task +occurrences; strict scans still return 15 invalid labels and five collisions. +Unknown/live sources, changed/missing/symlinked histories, UUID drift and +qualified/global collisions refuse before allocation. Candidate tests pass 47; +canonical application remains a separate reviewed step. The read-only current +cluster preview proposes seven ordinary UUID bindings in two files and changes +no bytes. One pre-existing ADHOC field is included explicitly: task +RCLUSTER-WP-ADHOC-2026-07-27-T01 in workplans/ADHOC-2026-07-27.md receives +3e3f39d3-5070-5ba3-97db-19f5f361f264 through managed allocation only. + +## Admit cluster registrar successor only after receiving verification + +```task +id: RMGR-WP-0019-T05 +status: done +priority: high +depends_on: [STATE-WP-0095-T06] +state_hub_task_id: "36f47e21-42d0-5aef-b065-4a5dd3af0726" +``` + +Retain the current guard until exact reviewed receiving source has been delivered +and verified through State Hub's normal owner deployment. Match both manifests, +then integrate reviewed registrar source and verify ordinary allocator preview. +No direct API patch, history rename or bypass substitutes for this gate. + +## Run ordinary cluster owner publication and verify preservation + +```task +id: RMGR-WP-0019-T06 +status: wait +priority: high +depends_on: [RMGR-WP-0019-T05] +state_hub_task_id: "4d1675b6-f49f-5b01-8d76-bbf2030d1b34" +``` + +Only then run normal owner consistency/publication with the reviewed expected +file set: RCLUSTER-WP-0018 and the one-field ADHOC managed backfill, plus ordinary +generated indexes. Preserve all three archived files and all 18 existing +parent/task rows. Return actual receiving/publication receipts to STATE-WP-0095-T07. +Do not infer TLS recovery, credential custody or native acceptance from sync. + +Cluster publication returned, preservation acceptance failed, 2026-10-17: +normal owner publication at c562d7134c38679952a8ffd17a8a893a900aef0d +is applied on primary/railiance01 with expected and derived commits equal. +Read-only source/remote/Hub verification confirms WP0018's five task bindings +and three internal dependency edges. These publication results do not close T06. +The full-row guard after the required legacy deep consistency pass failed: +all three historical parent full-row hashes changed; all 15 historical task +full-row hashes remain equal. The entire pipeline therefore has no successful +18-row preservation acceptance. + +Custodian receipts under docs/changes/netkingdom-target-2026-10-17: +railiance-cluster-projection.json and cluster-publication-readback.json retain +the applied publication and bounded readback; receiver-rollout-r4/ +pre-publication-full-row-hashes.json retains the passing pre-publication guard; +receiver-rollout-r4/post-publication-full-row-hashes-FAILED.json retains the +failed native comparison. Exact receipt digests are retained in +registrar-t06-preservation-failure-r1/manifest.json. Coordinator and recovery +source review identified the unguarded PUT /workplans/index/bindings path +writing backing_synced_at and ORM updated_at, outside the native forge +projection's preservation guard. Full baseline rows were not retained, only +full-row hashes; no guessed database restoration is authorized or claimed. + +The original rollout's pre-Cluster preservation/refusal verification remains +valid for that earlier stage, and T05 remains done. T06 stays wait pending +the reviewed exact-frozen binding guard, regression coverage and a verified +recovery/preservation disposition. No source or native gate is promoted by the +successful publication alone; no TLS or credential-custody acceptance follows. + + +## Receiver-first registrar source follow-through, 2026-10-17 + +The exact receiving return is retained in Custodian +`docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/verified-receiving-return.json`, +bound to the actual native rollout/preservation/refusal receipts. It verifies the +reviewed receiver source/image/module, API/MCP readiness, expected additive schema, +three existing historical parents/15 tasks and rolled-back safe refusal probes. +Only after that return was the exact registrar patch +`232552c3d601d185984be5a8e5bc9937bc9ddda7327923b5f0440f6deb2c87fc` +admitted in the Repo Manager owner source. T04 retains its source-preparation +outcome; T05 records this receiving-gated registrar admission, not a substitute +for receiving. Canonical focused registrar/identity checks passed 47 cases in 5.84 seconds. +The actual bounded read-only current Cluster allocator preview agreed with the +reviewed source: seven ordinary missing UUID bindings in exactly the new WP0018 and +one-field existing ADHOC backfill, with 15 invalid labels/five collisions still +reported by the strict conformance scan. The three historical file bytes, IDs, +UUIDs and ownership are unchanged. No broad syntax relaxation or direct Hub UUID +patch is introduced. Exact source application/test/preview receipts travel with +the same packet; source publication/projection is verified separately. + +T06 remains wait until actual ordinary Cluster owner publication and receiving +preservation are verified. Registrar source readiness alone does not mark that +publication complete. Preserve the 18 existing rows and all three archives; the +root coordinator owns the normal seven-field managed allocation and dirty-source +preservation. Own Repo Manager projection must show exactly T01–T05 done, T06 +wait and active workplan status, including the managed new T04/T05/T06 UUIDs and +unchanged earlier task UUIDs. The separate scanner RMGR-WP-0021-T05 completion +and unrelated owner work remain untouched. No native TLS recovery, custody, +current registration/private admission or NetKingdom target acceptance follows. diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-preservation-failure-r1/RMGR-WP-0019.preimage.md b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-preservation-failure-r1/RMGR-WP-0019.preimage.md new file mode 100644 index 00000000..5bc6b7d5 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-preservation-failure-r1/RMGR-WP-0019.preimage.md @@ -0,0 +1,241 @@ +--- +id: RMGR-WP-0019 +type: workplan +title: "Admit exact historical source views after receiving preservation support" +domain: infotech +repo: repo-manager +status: active +owner: codex +created: "2026-10-04" +updated: "2026-10-17" +flavor: implementation +depends_on: [] +state_hub_workstream_id: "efe0ecb2-2f3f-5f49-baee-b90ad1d353ab" +--- + +## Goal + +Unblock normal authoritative registration of the exact closed Activity legacy +source views and Custodian retired ADHOC source after receiving preserves their +existing records. Preserve every legacy source byte, label and UUID; do not +expand canonical syntax or the general grandfathering rules. CUST-WP-0077 owns +cross-owner coordination with STATE-WP-0095. + +## Review exact historical receiving contract + +```task +id: RMGR-WP-0019-T01 +status: done +priority: high +state_hub_task_id: "d78a622e-39f9-5923-b4e1-f70fdc17fb42" +``` + +Seven Activity sources yield four existing parents/64 closed bound tasks; +three split views repeat the archived parent. One Custodian retired source keeps +its existing parent/task IDs. Earlier /tmp/activity-core-bound-history-write.py +is superseded and must not be applied: registrar bypass alone would admit an +unsupported receiving projection. RMGR-WP-0014/0015 are finished and do not own +this new implementation demand; this workplan is not residual. + +## Enable exact frozen registrar exceptions after receiving deployment + +```task +id: RMGR-WP-0019-T02 +status: done +priority: high +depends_on: [STATE-WP-0095-T03] +state_hub_task_id: "95240c81-1805-5365-9b35-d238621a16bf" +``` + +Prepared code permits only source paths with reviewed full SHA256 digests in +repo_manager/historical_sources.py. Strict conformance scans retain their legacy +findings. Unknown/missing/altered source refuses before allocation. Source UUIDs +are neither changed nor allocated for these histories. Receiving and registrar +manifests must remain identical. Apply helper requires a deployment receipt. + +## Run normal owner sync and verify preserved identities + +```task +id: RMGR-WP-0019-T03 +status: done +priority: high +depends_on: [RMGR-WP-0019-T02] +state_hub_task_id: "682eea14-a4a8-5f33-9a9f-8f2f1ac8288d" +``` + +Use rmgr sync --path --push. No deep-check repair or direct hub UUID +patch substitutes for receiving. Historical unrelated stale projections are not +retirement-authorized by this workplan. Feed receipts back to STATE-WP-0095-T04. + +## Offline evidence, 2026-10-04 + +Prepared registrar suite: 38 focused cases passed (identifiers, registrar, +Custodian legacy identity and exact frozen source cases). Read-only execute=False +against both current owning repos accepted exact histories without source writes. +Implementation is staged; deployment gate is unresolved. + +## Approved deployment and actual registrar verification, 2026-10-04 + +STATE-WP-0095-T03 returned verified main-5dd3df9 / Helm revision72. +Global task-holder refusal passed inside the delivered API against the retired +Custodian parent, with transaction rollback and no committed probe. Five +historical parents/65 tasks retained their entire row snapshots. The gated +three-file registrar patch committed as c41d36c2ef8930628221ef36ec81d8b5d2145ed6; +38 actual owning-source cases passed and Repo Manager primary sync applied. + +Normal owner sync admitted all exact frozen histories without changing their +source bytes, UUIDs, parent ownership or row content. Custodian receiving +applied. Activity receiving refused only three empty duplicate projections +that would be retired; no retirement acknowledgement was issued. Registrar +allocated four missing IDs in ordinary Activity ad-hoc sources through its +normal path; frozen historical source files stayed unchanged. T03 remains wait +for explicit disposition and bounded receiving support under STATE-WP-0095-T04 +(decision91b7c633-a66f-5d43-9f4b-6565aefb9356). +Evidence: docs/evidence/2026-10-04-historical-registrar-verification.json. + +## Ungated T03 preparation, 2026-10-06 + +Re-ran the registrar suite at 8a47a5c (registrar source unchanged since +c41d36c2): 89 focused registrar/identity/historical cases and the full suite +(226) passed. Read-only hub check: the three refused projections are +683724d9 (custodian-wp-0003), 644017c7 (custodian-wp-0003a) and a5806df9 +(custodian-wp-0003b), each with zero tasks; every custodian-WP-0003* source +file binds parent b4eb45a9, which holds the tasks and must not be retired. +Added repo_manager.retirement_disposition, a read-only check that an Activity +expected_retirement_uuids set equals exactly those three empty projections and +excludes the preserved parent. It authorizes nothing; retirement stays with +Activity receiving under STATE-WP-0095-T04. + +## Activity disposition received, 2026-10-06 + +activity-core returned the exact expected_retirement_uuids (message 17ba4201, +evidence activity-core 941fac0, ACTIVITY-WP-0045): 683724d9, 644017c7, +a5806df9. repo_manager.retirement_disposition accepted the set: it equals the +three projections the 2026-10-04 run refused, each holds zero tasks, and it +excludes preserved parent b4eb45a9. Nothing was applied. T03 stays wait: its +acceptance needs a successful Activity owner sync with receipts, which can run +only after the founder decides 91b7c633 and STATE-WP-0095-T04 retires exactly +this set in a reviewed live rollout. Then re-run rmgr sync --path +~/activity-core --push and feed the receipt back to STATE-WP-0095-T04. + +## Post-retirement owner sync attempt, 2026-10-06 + +State Hub reported decision 91b7c633 resolved, main-968a811 / Helm rev 74 +deployed, and Activity reconcile at 67a92d2 retiring exactly the three empty +projections (3 retired, 0 created, 0 refused; 4 historical parents / 64 tasks +unchanged). Evidence: state-hub docs/evidence/2026-10-06-activity-stale-retirement-rollout.json. +`rmgr sync --path ~/activity-core --push` stopped before reconciliation with +status pending_commit: uncommitted `state_hub_workstream_id` / `state_hub_task_id` +writeback in activity-core workplans/ACTIVITY-WP-0045-stale-historical-projection-disposition.md +(plus WORK-RECORDS.md). No hub request was made. Repo Manager does not commit in +activity-core; T03 stays wait until Activity Core commits and the sync re-runs. + +Re-run 2026-10-06 08:42Z after Activity Core committed the writeback (e809fb2): +status applied, created 0 / updated 45 (ACTIVITY-WP only) / retired 0 / refused 0, +no task changes, notes preserve custodian-WP-0001..0004 UUIDs; hub shows 4 parents, +64 tasks. Not closed: historical parent b4eb45a9 (custodian-WP-0003, source +`status: archived`, evidence snapshot archived) now reads `finished` in the hub, +updated 08:42:03Z during this sync. Needs State Hub review before T03 closes. + +Closed 2026-10-06: State Hub traced the b4eb45a9 status change to its own C-04 +check, which ran once per file. The custodian-WP-0003a/b/c split views share the +parent UUID, so whichever view ran last set the row. The Forge reconcile did not +cause it. Fixed in state-hub 2b5d8f9 (STATE-WP-ADHOC-2026-10-06-T01); b4eb45a9 is +back to `archived`. Re-check: 4 parents (b4eb45a9 archived; 3a4f47d9, 759b1255, +e22516cc finished) holding 64 tasks (24+12+7+21). Receipt: Activity sync at e809fb2, +primary/railiance01, applied, 0 created / 45 updated (ACTIVITY-WP only) / 0 retired +/ 0 refused, 0 task changes, historical UUIDs preserved. Evidence: +state-hub docs/evidence/2026-10-06-activity-stale-retirement-rollout.json. + + +## Cluster exact historical source successor, 2026-10-17 + +This scoped extension preserves the completed Activity/Custodian work above. +The cluster publisher now refuses three closed RAIL-BS source files containing +15 existing UUID-bound bare task labels. Preserve all three source bytes, IDs, +and UUIDs. No new alias or general syntax exemption is introduced. Evidence and +exact receiver-first proposal: cluster-historical-publication-r1 in the Custodian +NetKingdom change packet. The existing SHR-WP-0001 project driver owns the +Repo Manager / State Hub cross-owner wait; NK-WP-0049-T35 benefits from the +blocked cluster publication. No worker or human gate is woken here. + +## Prepare exact cluster registrar successor + +```task +id: RMGR-WP-0019-T04 +status: done +priority: high +state_hub_task_id: "1ccb06c6-ad30-5847-8704-e5628ba81f35" +``` + +Prepared full-file SHA256 bindings for three archives and 15 exact task +occurrences; strict scans still return 15 invalid labels and five collisions. +Unknown/live sources, changed/missing/symlinked histories, UUID drift and +qualified/global collisions refuse before allocation. Candidate tests pass 47; +canonical application remains a separate reviewed step. The read-only current +cluster preview proposes seven ordinary UUID bindings in two files and changes +no bytes. One pre-existing ADHOC field is included explicitly: task +RCLUSTER-WP-ADHOC-2026-07-27-T01 in workplans/ADHOC-2026-07-27.md receives +3e3f39d3-5070-5ba3-97db-19f5f361f264 through managed allocation only. + +## Admit cluster registrar successor only after receiving verification + +```task +id: RMGR-WP-0019-T05 +status: done +priority: high +depends_on: [STATE-WP-0095-T06] +state_hub_task_id: "36f47e21-42d0-5aef-b065-4a5dd3af0726" +``` + +Retain the current guard until exact reviewed receiving source has been delivered +and verified through State Hub's normal owner deployment. Match both manifests, +then integrate reviewed registrar source and verify ordinary allocator preview. +No direct API patch, history rename or bypass substitutes for this gate. + +## Run ordinary cluster owner publication and verify preservation + +```task +id: RMGR-WP-0019-T06 +status: wait +priority: high +depends_on: [RMGR-WP-0019-T05] +state_hub_task_id: "4d1675b6-f49f-5b01-8d76-bbf2030d1b34" +``` + +Only then run normal owner consistency/publication with the reviewed expected +file set: RCLUSTER-WP-0018 and the one-field ADHOC managed backfill, plus ordinary +generated indexes. Preserve all three archived files and all 18 existing +parent/task rows. Return actual receiving/publication receipts to STATE-WP-0095-T07. +Do not infer TLS recovery, credential custody or native acceptance from sync. + + +## Receiver-first registrar source follow-through, 2026-10-17 + +The exact receiving return is retained in Custodian +`docs/changes/netkingdom-target-2026-10-17/receiver-rollout-r4/verified-receiving-return.json`, +bound to the actual native rollout/preservation/refusal receipts. It verifies the +reviewed receiver source/image/module, API/MCP readiness, expected additive schema, +three existing historical parents/15 tasks and rolled-back safe refusal probes. +Only after that return was the exact registrar patch +`232552c3d601d185984be5a8e5bc9937bc9ddda7327923b5f0440f6deb2c87fc` +admitted in the Repo Manager owner source. T04 retains its source-preparation +outcome; T05 records this receiving-gated registrar admission, not a substitute +for receiving. Canonical focused registrar/identity checks passed 47 cases in 5.84 seconds. +The actual bounded read-only current Cluster allocator preview agreed with the +reviewed source: seven ordinary missing UUID bindings in exactly the new WP0018 and +one-field existing ADHOC backfill, with 15 invalid labels/five collisions still +reported by the strict conformance scan. The three historical file bytes, IDs, +UUIDs and ownership are unchanged. No broad syntax relaxation or direct Hub UUID +patch is introduced. Exact source application/test/preview receipts travel with +the same packet; source publication/projection is verified separately. + +T06 remains wait until actual ordinary Cluster owner publication and receiving +preservation are verified. Registrar source readiness alone does not mark that +publication complete. Preserve the 18 existing rows and all three archives; the +root coordinator owns the normal seven-field managed allocation and dirty-source +preservation. Own Repo Manager projection must show exactly T01–T05 done, T06 +wait and active workplan status, including the managed new T04/T05/T06 UUIDs and +unchanged earlier task UUIDs. The separate scanner RMGR-WP-0021-T05 completion +and unrelated owner work remain untouched. No native TLS recovery, custody, +current registration/private admission or NetKingdom target acceptance follows. diff --git a/docs/changes/netkingdom-target-2026-10-17/registrar-t06-preservation-failure-r1/amendment-commit.json b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-preservation-failure-r1/amendment-commit.json new file mode 100644 index 00000000..6d61620a --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/registrar-t06-preservation-failure-r1/amendment-commit.json @@ -0,0 +1,13 @@ +{ + "status": "committed-exact-one-file", + "head": "7c15c0ea48981867fc1683d9b7576f6444c256da", + "parent": "70cd754996870638848616e37819790a5c4d52b3", + "path": "workplans/RMGR-WP-0019-historical-source-admission.md", + "source_sha256": "4ff763ea24b9948d59b4bdd4f5ef3e95bee72fef3016f0b6404b5db663cb83ff", + "scanner_sha256_unchanged": "e709c658f779534fcab093207b0a78e49d54fc584c515fdf7ac535ce75f6c400", + "task_blocks_and_UUIDs_unchanged": true, + "t05": "done", + "t06": "wait", + "commit_output": "[main 7c15c0e] Retain Cluster publication with failed historical row preservation\n 1 file changed, 28 insertions(+)\n", + "cluster_or_database_mutation": false +}