diff --git a/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/execution-plan.json b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/execution-plan.json new file mode 100644 index 00000000..1842fa0f --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/execution-plan.json @@ -0,0 +1,29 @@ +{ + "status": "review-required-before-execution", + "helper_sha256": "02b028822e07cc1612a2e5dea3c9f271f0020f9adfb656c0aac42555b0805502", + "patch_sha256": "a50c419c4ab3a35a6f953559546c88fe0cfb75605ef63b51fe30307180262610", + "manifest_sha256": "9ac8f5e43f84add61ec8560be78e4d10e55bdd2918467581f367e816a4592385", + "check_only_result": "passed at26671d33600e218316d29c9cd020f115ebfb35b2", + "execute_command": [ + "python3", + "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/apply_forward_correction.py", + "--execute" + ], + "then_required_publication": [ + "/home/worsch/repo-manager/.venv/bin/rmgr", + "sync", + "--path", + "/home/worsch/railiance-cluster", + "--push" + ], + "postconditions": [ + "new forward commit exactly two paths, parent266", + "HEAD brief bytes equal c562; original86c0brief indexentry and originalbackupworktree retained", + "original WORK-RECORDS.md indexentry and dirtyworktree unchanged", + "all other indexentries unchanged except intentional WP18", + "source/remote HEAD identical and primary/railiance01 expected=derived applied receipt", + "WP18 active and exact5taskIDs/UUIDs/status3internaledges readback", + "no legacydeepfix or full18rowrestoration/nativeTLSclaim" + ], + "canonical_mutations": false +} diff --git a/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/execution-start.json b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/execution-start.json new file mode 100644 index 00000000..cbd74345 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/execution-start.json @@ -0,0 +1,148 @@ +{ + "status": "started", + "base": "26671d33600e218316d29c9cd020f115ebfb35b2", + "index_entries": [ + "100644 0e8a5d95b6d263fbaeae4261a7051112fb27ee18 0\t.claude/rules/agents.md", + "100644 7c2a64580a2fb55d6586e154ee70d801430faa3e 0\t.claude/rules/architecture.md", + "100644 64b84033daa3eea88ed07993a62bf0d35abd5705 0\t.claude/rules/credential-routing.md", + "100644 3b263fc0085c9cbcdc9de1dce015b5af67937875 0\t.claude/rules/first-session.md", + "100644 2f85f27000175e115dc6210ce3f87b5d1eefdb21 0\t.claude/rules/repo-boundary.md", + "100644 60c065fa1af76a3234ab5a156cda98612f67f14c 0\t.claude/rules/repo-identity.md", + "100644 a26f834124d5c9e7cdc77842b5b46f1923f0d6c3 0\t.claude/rules/session-protocol.md", + "100644 ee026b2fbbcf7f920ca21b7ad4209c5d2009ef44 0\t.claude/rules/stack-and-commands.md", + "100644 7d08acc433f44cbe649a66ae2c0c312dfb588cdd 0\t.claude/rules/workplan-convention.md", + "100644 86c0e6c7306f54aebda9b59c7e3b72e4ab3e75ba 0\t.custodian-brief.md", + "100644 95847006236387ab1a6a17f40b9efb0445d56547 0\t.editorconfig", + "100644 bd44c56a4f8a6c12bdab40257e450c2a676f751a 0\t.forgejo/workflows/ci-smoke.yaml", + "100644 e3975118068d1760ad2915fa15dd74cc1ef16d21 0\t.gitattributes", + "100644 bfd3dd9e1dffd45197045b9ef7b8dc7bb8dd9534 0\t.github/workflows/tests.yml", + "100644 57cf4d7e3e5e362da4e55b276b562871f36a39d2 0\t.gitignore", + "100644 34833e54fc69369cfeef8cbca71f2a416032d027 0\t.repo-classification.yaml", + "100644 18185bcf111aa96fc9204e04a9acb9f90eecda88 0\t.sops.yaml", + "100644 895538687b80cfdd1dacdd9c410bb675a24f480d 0\tAGENTS.md", + "100644 84f1c45d5992562844466d519011c04946f464eb 0\tCLAUDE.md", + "100644 31ab8b7d44ac38ddceae11094b1a67de6c515649 0\tDECISIONS.md", + "100644 03774676ce916c5b4abc897e17cfd0b38b82ff3c 0\tINTENT.md", + "100644 7e08e28d5f32bdea3a9e1c828ae9f1e21d9edae7 0\tLICENSE", + "100644 c958ede876b319ac9c9a254c1534f86c37009673 0\tMakefile", + "100644 d75037495f97c0d5c43ae94e0afab77c57315d10 0\tQUICKSTART.md", + "100644 c0012eae79f18baaf11a966c3c5c9f3c627f90b2 0\tREADME.md", + "100644 d4b3ea41d327292b492cafa3c6241c32b0b7ebee 0\tSCOPE.md", + "100644 ffbf8bc5fdd53b659ef84e6468dd1d43d745a8bf 0\tWORK-RECORDS.md", + "100644 66667e3d177459af1d44ecc0fd3f1dc56b774450 0\tansible/ansible.cfg", + "100644 7e4719f07dc5d27bfcaa41ad1e8ab328e64024db 0\tansible/bootstrap.yml", + "100644 e4bb7f5d25c74e545d66a550fc636a824226491c 0\tansible/harden.yml", + "100644 da2e3994cdce71d181f361401f125b087ae8b676 0\tansible/hosts.ini.example", + "100644 4e52fd4bbadc00b14e566ea003270b8fa37e79ad 0\tansible/requirements.yml", + "100755 28499688ae41aa60e946bf5b262d401bd55903e7 0\tbin/railiance", + "100644 5261f8886d61c50f4f531a2900a12d0025f73021 0\tcloudinit/user-data.yaml", + "100644 2ca9e9a23dae7f1334002109d6bd3253a34f980f 0\tdocs/CONTRIBUTING.md", + "100644 bc5cda9c1391119aab14b8224d6851aa1546ee9e 0\tdocs/OODA.md", + "100644 0da1fb472a503162151920b4faf58a8851950385 0\tdocs/README.md", + "100644 cbd2d280777a35123a52fae508d6ac095c7cef0c 0\tdocs/app-toml-contract.md", + "100644 5a3f5d96bf2a0b97c143d29c3e0495c94b517640 0\tdocs/backup-restore.md", + "100644 54d4ce16a98292c378af6f89b2bc051b6ff655cb 0\tdocs/canary-helm-template.md", + "100644 800ccefc95212fe5512a51a5e73c9ade0096fcdb 0\tdocs/cluster-resource-evidence.md", + "100644 2dcdf5d96cab063c8bce952f83bff235e700d8bf 0\tdocs/deployment-lifecycle.md", + "100644 28e9604f496b73001fdcdbc4ef1db0b4bdc059b1 0\tdocs/evidence/2026-10-13-publication-diagnosis.json", + "100644 97af3b44c8a4fd65835d72797a35287e46ff7e00 0\tdocs/evidence/2026-10-13-publication-timeout-rollout.json", + "100644 91157a54602517987dbee52dcbd8b4a991b624f5 0\tdocs/evidence/2026-10-13-publication-upload-timings.json", + "100644 69ce806c009c1846c650dc9858110818a07277a6 0\tdocs/evidence/2026-10-13-published-image-pull.json", + "100644 2a82cc9488046edb48213e3665290730d2c6d1bf 0\tdocs/evidence/resource-reef-railiance-k3s/observations/20260822T100349Z.json", + "100644 2a82cc9488046edb48213e3665290730d2c6d1bf 0\tdocs/evidence/resource-reef-railiance-k3s/observations/latest.json", + "100644 8caed08a5d292ca335df7dd2194c5824c1eba792 0\tdocs/first_host.md", + "100644 ad03fad9a435e82d2b95497b44c6d6d6f213df7f 0\tdocs/incidents/2026-03-10-pgpool-missing-secret.md", + "100644 40953976dd249c53fa650d670822216abd07e71c 0\tdocs/keycape-tls-recovery-boundary.md", + "100644 d74014ffa05a656d02356c350948bd7bc6b1f8da 0\tdocs/kubeconfig.md", + "100644 88ef13d70a4006c3adaf0e8acb85c6a131fdc967 0\tdocs/operator-runbook.md", + "100644 ce2e68dd9f76bada355862d08656bef167cfba33 0\tdocs/overlay-repo-pattern.md", + "100644 99ced4683e494209919507cbe633944752f4b0dd 0\tdocs/promote-rollback-onboarding.md", + "100644 7973760dcfd6b5995fb4075778ce5b1f6ebbac9b 0\tdocs/rail-kubernetes-compatibility-shim.md", + "100644 8034f074198be24650bb32cf2b9cf698814bc13f 0\tdocs/rail-kubernetes-extraction-map.md", + "100644 c2c4ca68d39d7da3d19df878600620586239a45f 0\tdocs/rail-kubernetes-substrate-profile.md", + "100644 7390e2a751969b07aa05895e0f5c66077eb28a15 0\tdocs/railiance-run-command.md", + "100644 b6e315b8274adc3caf8d6829ce89f925f9b8bf3a 0\tdocs/stage2-deploy-observe.md", + "100644 dbba0a87e2193472e0e0263665524eb57d334442 0\tdocs/threephoenix-implementation-gate.md", + "100644 d97f37b871efcced405ff0404b5ccce444c88dc8 0\texamples/railiance/app.toml", + "100644 84f399494219054e6c740a1365199f6c4a0d26f2 0\thelm/MOVED.md", + "100644 ca9ccf397fd401bd8a5355d94c66bd4825872f81 0\thelm/gitea-ssh-nodeport.yaml", + "100644 87f4228e1b12449e0cfe8f0257c442e0a1166e3b 0\tinstall/knative/README.md", + "100755 0d6797ce819172a8825d2b866c4a1895203fabc9 0\tinstall/knative/install.sh", + "100644 9245114e677f4f558a89b4af7d4abf023c638709 0\tinstall/knative/overlays/kourier/cpu-requests.patch.yaml", + "100644 4a5501c87b8c0731dbdc15161a6a8f536644b7c8 0\tinstall/knative/overlays/kourier/kustomization.yaml", + "100644 cdac368756da136ffd7d01efe57257f02505a1cf 0\tinstall/knative/overlays/kourier/service-clusterip.patch.yaml", + "100644 8676ab8c8d33a46b4465dd5f971448cc9463b56c 0\tinstall/knative/overlays/serving-core/cpu-requests.patch.yaml", + "100644 6e1be69e25ff00a22f2e50d40c946bc3d982a08b 0\tinstall/knative/overlays/serving-core/kustomization.yaml", + "100644 03cd8fa5a0bbcf1b8db77ab12e4c12d34702ca33 0\tinstall/knative/release-lock.env", + "100755 5e5fd2339f8a26048b13b441097195cb9a55e389 0\tinstall/knative/render.sh", + "100755 49b07865173f1653faf3b420548b8f417a65d504 0\tinstall/knative/verify.sh", + "100644 92232a6dbed33d5926c1732632e55b76272a97a9 0\tinstall/traefik/README.md", + "100644 ada1efe8a4e55b4dff31879c47b0172957e90729 0\tinstall/traefik/railiance01-helmchartconfig.yaml", + "100644 22a977bcb726ad6f9137492331b81f4f8cb2525a 0\tlib/railiance-print.sh", + "100644 687943e1d9115a182de136f6137f6b7911ee2226 0\tpyproject.toml", + "100644 569abe99c95e163d39048f4b02ccb47165751c7e 0\tregistry/README.md", + "100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0\tregistry/capabilities/.gitkeep", + "100644 6b7a5c0633b4a71f201f52c8ebe1e7923f12ac6e 0\tregistry/capabilities/capability.railiance.cluster-bootstrap.md", + "100644 a6161da4395f626569955ef486b981a5cc000853 0\tregistry/indexes/capabilities.yaml", + "100644 21cde4335115ab3071bdc258f5c51a271f92435c 0\tsbom-tools.yaml", + "100644 2ff92a5e869a7c4fee6854f920031731c2ca16f3 0\tschemas/railiance-app.schema.json", + "100644 cd841cad4977c04743955ffee339e7c16a772bbc 0\ttests/smoke_kube.sh", + "100644 aab9ea62a0d4cd139b8cae6b865b3ccb9d6f40df 0\ttests/test_cluster_resources.py", + "100755 add5bbd4b685750021bf01c40ee505ef13ae23c1 0\ttests/test_ha_failover.sh", + "100644 fc295bd80c263c30d99e5547db3fec090db7f78d 0\ttests/test_knative_render.py", + "100644 53b323ec2a5df12a2d61ffbc21b15e1b5e19c9ca 0\ttests/test_public_tls_metadata.py", + "100644 512082e7c84971ef8f51e14a1fded03787757892 0\ttools/README_tools.md", + "100644 9a09669cef3d69d6197faaacb29adbbc61a1b821 0\ttools/build_spore.sh", + "100755 6ebb8be44fe0d54ca69774f26aa604f825c3c2df 0\ttools/cmd/railiance-admin-sync-smoke", + "100755 f7b124bb7cec773441053092c9aa6fa7c22b1ba5 0\ttools/cmd/railiance-backup", + "100755 79fe69ed1e8d8a1c192a2b45bca198c82300c447 0\ttools/cmd/railiance-backup-s2", + "100755 1ef60715ff7abafb2c3cb31d6c9418a516ad7c4b 0\ttools/cmd/railiance-deploy-activity-core-triage-robustness", + "100644 6720eed5e96ebe789f165ed84146d690df5615ef 0\ttools/cmd/railiance-doctor", + "100755 4413b89d57126cfdfc6eb26507181e136b0dc0cb 0\ttools/cmd/railiance-plan-host", + "100755 323e6d1205cb4ed2255ce99a09aa8a65ee32522a 0\ttools/cmd/railiance-preflight", + "100755 0742f2e5b9cdba161875e86ed8310686fc14b499 0\ttools/cmd/railiance-reconcile-activity-core-llm-connect", + "100755 0aa3eb4910886b101bf259c2011250aa023c3ca3 0\ttools/cmd/railiance-restore-s2", + "100755 45c15d93fef3bba542fd95d28c392891330ca027 0\ttools/cmd/railiance-run", + "100755 2961eb8cf6081dc73bca167f09a38f0576528333 0\ttools/cmd/railiance-stage2", + "100755 0aa76e8ca0ca5b46397cddde1879908c3d564d0b 0\ttools/cmd/railiance-stage3", + "100755 5d26e13a3d6b6454cbdef6a09be7048f9846a767 0\ttools/cmd/railiance-verify-activity-core", + "100755 8a44e308bd4a14303eca09fa5e97f1767351902c 0\ttools/create_railiance_overlay_repo.sh", + "100644 83680c80c1afc01ad9ed81f60dd0fcaffede863e 0\ttools/create_railiance_repo.sh", + "100644 df5734ab3b12da40d0e748be27f465852bca5046 0\ttools/furnish_railiance_repo.sh", + "100755 d32abaa70bacbb9ca6446958e6c021a6315231d4 0\ttools/knative-preflight.sh", + "100755 08e5a33490db582444d92945e54f5f2f901adccc 0\ttools/observe_cluster_resources.py", + "100644 b3d429f318a0531fdb9769a75ea6f88c8a2ef84c 0\ttools/public-tls-metadata.py", + "100644 a486165db61a8303e0388bd20d29f08e666687e7 0\ttools/seed_node.sh", + "100644 c25ac23649217e15db35f184e87e07cad1c61891 0\tuv.lock", + "100644 1430ac54fc1bfb099e84cc48cf755714bce77541 0\twiki/RailianceThreePhoenix.md", + "100644 db2b87c5f12d5ca3c60cfa180f098e552a0c4f0d 0\twiki/ThreePhoenixWorkplan.md", + "100644 30a71bcd36f7660a1e9c17baec245f112249a4f5 0\tworkplans/ADHOC-2026-07-27.md", + "100644 43139e0843d52926b963310bf7aacc731e9da073 0\tworkplans/RAIL-BS-WP-0008-activity-core-wp0016-triage-output-deploy.md", + "100644 ea669bd74c15e6ec7ddae8d4ada22981b522561c 0\tworkplans/RAIL-BS-WP-0009-activity-core-admin-sync-smoke.md", + "100644 20270d80de60eddbbadba56e672f15ee71fb067d 0\tworkplans/RAIL-BS-WP-0010-weekly-legacy-meter-review-rollout.md", + "100644 e5526e441cd41dd31f5a969c8d2c5c6d4fad6f7e 0\tworkplans/RAIL-BS-WP-0011-legacy-meter-8h-capture-image-reconcile.md", + "100644 ae22dfb2b9fe831227784dd461bcf78bf2cd11de 0\tworkplans/RAIL-BS-WP-0012-rail-kubernetes-extraction.md", + "100644 525ce5d6caea8929ebc5233bf2053342db3f44b8 0\tworkplans/RAIL-BS-WP-0013-knative-substrate.md", + "100644 868aa948f8fa0d65c1f6fb0587ceb493d991c068 0\tworkplans/RAIL-BS-WP-0014-state-hub-surge-headroom.md", + "100644 6954393976731375ed1570f0c92edbe03892aeb5 0\tworkplans/RAIL-BS-WP-0015-knative-declared-cpu-requests.md", + "100644 555ae300fd36e7db282c51bca21a42217f01af7e 0\tworkplans/RCLUSTER-WP-0007-threephoenix-ha-cluster.md", + "100644 f205ac6cb1a0def27715edeb8f9f741f77693f62 0\tworkplans/RCLUSTER-WP-0014-capacity-utilization-and-allocation-evidence.md", + "100644 b2f385967cde17a870a96b6447a1ec3c40213da5 0\tworkplans/RCLUSTER-WP-0016-forgejo-upload-timeout.md", + "100644 bf474d1fc329f4fd547382e32d156fad4bf1fde6 0\tworkplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md", + "100644 78f7319674238fe8afd9f540db48651837f041d3 0\tworkplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md", + "100644 375d935626d073011f52b8c5929a770b0c5655e1 0\tworkplans/archived/260622-RAIL-BS-WP-0001-dependency-management.md", + "100644 595cd5c19fa88faae24c5ae784d210194af36d61 0\tworkplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md", + "100644 fe7b21da629dd86942be36db4e6fc7e5920f8bc6 0\tworkplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md", + "100644 89d14fff27277d467c896611bb3b26324fef5f4b 0\tworkplans/archived/260622-RAIL-BS-WP-0004-safety-net.md", + "100644 28bf1d4e58420a6d1fab7b44c57b98f0a20ac9e4 0\tworkplans/archived/260622-RAIL-BS-WP-0005-kubeconfig-delivery.md", + "100644 2cf33b46fbae45bba67ec257259a61df4fc3f878 0\tworkplans/archived/260622-RCLUSTER-WP-0001-activity-core-cluster-owned-deploy-verify.md", + "100644 d7e2374c72813c2e3d8bbfc9b9a85bba1af02938 0\tworkplans/archived/260622-RCLUSTER-WP-0002-activity-core-verifier-evidence-hardening.md", + "100644 7f258e7c9b2da1f99fb7e115cd75157e1376ef0a 0\tworkplans/archived/260627-RAIL-BS-WP-0006-staged-promotion-lifecycle.md", + "100644 0944b98107bb5ed99884ef359106bfcf330707e1 0\tworkplans/archived/260701-RCLUSTER-WP-0003-activity-core-llm-connect-live-reconcile.md" + ], + "frozen_sha256": { + "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md": "4dc2f61e15adc3c5c81f9ecf8b933512275b95e8f829fac52ae7cde1385cea4a", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md": "04f787078232395bd2d43861de16c521848559fa286f06e1caa9cb779aa71ac3", + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md": "8d6f8533c119117686bc0d5bb9ed5349726aa6c3189ff98b53409c68ac685ca9" + } +} diff --git a/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction-commit.json b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction-commit.json new file mode 100644 index 00000000..6d8d3152 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction-commit.json @@ -0,0 +1,22 @@ +{ + "status": "committed-forward-correction", + "head": "6ae3f847c83da3402883453ee7110457bfb2d0d6", + "parent": "26671d33600e218316d29c9cd020f115ebfb35b2", + "paths": [ + "workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md", + ".custodian-brief.md" + ], + "commit_output": "[main 6ae3f84] Record Cluster publication and restore unrelated staged brief\n 2 files changed, 23 insertions(+), 8 deletions(-)\n", + "head_brief_equals_c562": true, + "original_brief_index_and_worktree_restored": true, + "all_other_index_entries_identical": true, + "work_records_index_and_dirty_worktree_preserved": true, + "three_archives_unchanged": true, + "wp18_status": "active", + "task_blocks_and_UUIDs_unchanged": true, + "legacy_deepfix": false, + "history_rewrite": false, + "native_TLS_acceptance": false, + "all18historical_preservation_claim": false, + "status_porcelain": "M .custodian-brief.md\n M WORK-RECORDS.md\n" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction-publication-readback.json b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction-publication-readback.json new file mode 100644 index 00000000..a630e9e3 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction-publication-readback.json @@ -0,0 +1,77 @@ +{ + "status": "verified", + "scope": "Cluster WP18 owner publication; read-only Git remote and Hub snapshots", + "writes_to_source_index_refs_or_Hub": false, + "rows": [ + { + "repo": "railiance-cluster", + "published_commit": "6ae3f847c83da3402883453ee7110457bfb2d0d6", + "remote": { + "HEAD": "6ae3f847c83da3402883453ee7110457bfb2d0d6", + "refs/heads/main": "6ae3f847c83da3402883453ee7110457bfb2d0d6", + "symbolic_HEAD": "refs/heads/main" + }, + "workplan": { + "id": "e0a7813d-c916-5e49-84b2-5e5b30441891", + "slug": "rcluster-wp-0018", + "status": "active" + }, + "source_record_id": "RCLUSTER-WP-0018", + "tasks": [ + { + "id": "7280193d-0d59-5b78-a2d3-96ebd127127f", + "record_id": "RCLUSTER-WP-0018-T01", + "status": "done" + }, + { + "id": "90836435-917f-504c-a711-3f29ece348e3", + "record_id": "RCLUSTER-WP-0018-T02", + "status": "todo" + }, + { + "id": "5dfa9a3a-2639-5cf6-b0a4-13eef417d47a", + "record_id": "RCLUSTER-WP-0018-T03", + "status": "wait" + }, + { + "id": "021b07bb-65bc-5743-bac5-4294b4be74f6", + "record_id": "RCLUSTER-WP-0018-T04", + "status": "wait" + }, + { + "id": "5bc67a22-0991-5625-86a6-f749560d8a0e", + "record_id": "RCLUSTER-WP-0018-T05", + "status": "todo" + } + ], + "external_source_declarations_not_projected": [], + "dependencies": [ + { + "from_task_id": "021b07bb-65bc-5743-bac5-4294b4be74f6", + "to_task_id": "5dfa9a3a-2639-5cf6-b0a4-13eef417d47a", + "relationship_type": "starts_after" + }, + { + "from_task_id": "021b07bb-65bc-5743-bac5-4294b4be74f6", + "to_task_id": "90836435-917f-504c-a711-3f29ece348e3", + "relationship_type": "starts_after" + }, + { + "from_task_id": "5dfa9a3a-2639-5cf6-b0a4-13eef417d47a", + "to_task_id": "90836435-917f-504c-a711-3f29ece348e3", + "relationship_type": "starts_after" + } + ], + "source_file_sha256": "96d52b6dbae056399159632d50b32ccc6662e4f6d3677af154f7c8a3d618334b", + "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": "ccf1776a2a8b3de5b1cc75f90ba4c10fbf8ade1b79fa4ba721be1c908be11d7d" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction-sync.json b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction-sync.json new file mode 100644 index 00000000..76e49c56 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction-sync.json @@ -0,0 +1,246 @@ +{ + "ok": true, + "status": "applied", + "repo_slug": "railiance-cluster", + "commit": "6ae3f847c83da3402883453ee7110457bfb2d0d6", + "requests": 2, + "elapsed_ms": 6624.2, + "git": { + "upstream": "origin/main", + "behind": 0, + "ahead": 0 + }, + "identifiers": { + "schema": "repo-manager.identifier-assignment.v1", + "ok": true, + "executed": true, + "repo": "railiance-cluster", + "namespace": "helixforge", + "assignments": [], + "historical_invalid_identifiers": [ + { + "kind": "task", + "id": "T01", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-1" + }, + { + "kind": "task", + "id": "T02", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-2" + }, + { + "kind": "task", + "id": "T03", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-3" + }, + { + "kind": "task", + "id": "T04", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-4" + }, + { + "kind": "task", + "id": "T05", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-5" + }, + { + "kind": "task", + "id": "T01", + "source": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-1" + }, + { + "kind": "task", + "id": "T02", + "source": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-2" + }, + { + "kind": "task", + "id": "T03", + "source": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-3" + }, + { + "kind": "task", + "id": "T04", + "source": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-4" + }, + { + "kind": "task", + "id": "T01", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-1" + }, + { + "kind": "task", + "id": "T02", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-2" + }, + { + "kind": "task", + "id": "T03", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-3" + }, + { + "kind": "task", + "id": "T04", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-4" + }, + { + "kind": "task", + "id": "T05", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-5" + }, + { + "kind": "task", + "id": "T06", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-6" + } + ], + "historical_identity_collisions": [ + { + "kind": "task", + "id": "T01", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-1", + "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-1", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-1" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "3f042630-eab0-4c6a-9167-e2b28ff20e40", + "4526a842-ea31-4874-9231-92ab556cfe7b", + "6841c93a-f146-47eb-9f7c-8fa0e02c1bbc" + ] + }, + { + "kind": "task", + "id": "T02", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-2", + "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-2", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-2" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "a6313e06-1976-46a7-8e31-df4eb2eca880", + "ab166073-30a7-4702-a037-4091e8706e20", + "e8510646-46ed-4697-a345-f3d3009eea78" + ] + }, + { + "kind": "task", + "id": "T03", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-3", + "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-3", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-3" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "05d42a55-921f-4aa7-bb76-e8af9c7e0ac3", + "140da396-8e30-4f4d-b88c-c42c0cd46c01", + "dab2c07f-8aa0-4635-8df6-857e87e93fc5" + ] + }, + { + "kind": "task", + "id": "T04", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-4", + "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-4", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-4" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "08233868-d522-4117-bc4e-6c0f52545665", + "5c3d40e4-239b-488e-9519-6f7a38d2325f", + "d8a3ba40-fda0-4c1f-a9f1-ffcd621a5b3d" + ] + }, + { + "kind": "task", + "id": "T05", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-5", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-5" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "2d5acff7-4a4e-4ddd-ad06-08237ad3dac8", + "7f9e0e58-a130-467a-a2d0-b3f2564e496f" + ] + } + ], + "files_changed": [] + }, + "receipt": { + "schema": "state-hub.repository-projection-reconcile.v1", + "instance_role": "primary", + "instance_label": "railiance01", + "expected_commit": "6ae3f847c83da3402883453ee7110457bfb2d0d6", + "derived_commit": "6ae3f847c83da3402883453ee7110457bfb2d0d6", + "outcome": { + "schema": "state-hub.projection-reset.v1", + "repo_slug": "railiance-cluster", + "commit": "6ae3f847c83da3402883453ee7110457bfb2d0d6", + "status": "applied", + "counts": { + "created": 0, + "updated": 20, + "retired": 0, + "refused": 0, + "released": 0, + "created_tasks": 0, + "updated_tasks": 1, + "cancelled_tasks": 0, + "created_edges": 0, + "removed_edges": 0, + "unresolved_edges": 0, + "external_edges": 0 + }, + "created": [], + "updated": [ + "RAIL-BS-WP-0001", + "RAIL-BS-WP-0005", + "RAIL-BS-WP-0006", + "RAIL-BS-WP-0008", + "RAIL-BS-WP-0009", + "RAIL-BS-WP-0010", + "RAIL-BS-WP-0011", + "RAIL-BS-WP-0012", + "RAIL-BS-WP-0013", + "RAIL-BS-WP-0014", + "RAIL-BS-WP-0015", + "RCLUSTER-WP-0001", + "RCLUSTER-WP-0002", + "RCLUSTER-WP-0003", + "RCLUSTER-WP-0007", + "RCLUSTER-WP-0014", + "RCLUSTER-WP-0016", + "RCLUSTER-WP-0017", + "RCLUSTER-WP-0018", + "RCLUSTER-WP-ADHOC-2026-07-27" + ], + "retired": [], + "released": [], + "created_tasks": [], + "updated_tasks": [ + "RCLUSTER-WP-0018-T01" + ], + "cancelled_tasks": [], + "created_edges": [], + "removed_edges": [], + "unresolved_edges": [], + "external_edges": [], + "refused": [], + "notes": [ + "Preserved bound historical row and task UUIDs: RAIL-BS-WP-0002", + "Preserved bound historical row and task UUIDs: RAIL-BS-WP-0003", + "Preserved bound historical row and task UUIDs: RAIL-BS-WP-0004" + ] + } + } +} diff --git a/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction.patch b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction.patch new file mode 100644 index 00000000..2dc76d89 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/forward-correction.patch @@ -0,0 +1,60 @@ +--- a/workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md ++++ b/workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md +@@ -43,6 +43,26 @@ + + Evidence: the-custodian docs/changes/netkingdom-target-2026-10-16/ + recovery-owner-handoffs-r1/ and prior recovery-attempt-r1/t35-t36-source-next/. ++ ++Publication return, 2026-10-17: normal owner source publication at ++c562d7134c38679952a8ffd17a8a893a900aef0d was applied on primary/railiance01 ++with expected and derived commits equal. Read-only source/remote/Hub proof ++verified this workplan's five exact task ID/UUID/status bindings and three ++internal dependency edges. Receipts are retained in the Custodian packet ++docs/changes/netkingdom-target-2026-10-17/railiance-cluster-projection.json and ++cluster-publication-readback.json. The later legitimate C23 lifecycle repair ++at 26671d33600e218316d29c9cd020f115ebfb35b2 changed ready to active; active ++is retained. This return records publication separately from the completed ++source preparation above. Original TLS artifact/provider custody, extraction ++and native admission remain T02–T05 obligations; publication proves no TLS ++recovery, private-key custody or native acceptance. ++ ++The whole maintenance pipeline's historical-row guard failed for three parent ++rows while 15 task full-row hashes remained unchanged. STATE-WP-0095-T07 and ++RMGR-WP-0019-T06 remain wait; neither publication nor this memo asserts full ++historical-row preservation or restoration. The subsequent forward correction ++restores the brief's committed content to its pre-accident version while restoring ++the original staged/worktree change for its owner; history is not rewound. No legacy deep consistency fix is run by the correction. + + ## Establish exact independent original TLS artifact and provider custody metadata + +--- a/.custodian-brief.md ++++ b/.custodian-brief.md +@@ -2,7 +2,7 @@ + # Custodian Brief — railiance-cluster + + **Domain:** financials +-**Last synced:** 2026-10-16 19:05 UTC ++**Last synced:** 2026-10-13 18:24 UTC + **State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)* + + ## Current Goal +@@ -11,17 +11,12 @@ + + ## Active Workstreams + +-### Review NetKingdom signer runtime and node-local storage readiness +-Progress: 1/3 done | workplan_id: `f383557d-c8a8-553e-adcd-9f82ff9c2929` +- +-**Open tasks:** +-- ► Review the bounded native preflight and storage action `7f4320c6` +-- · Verify the approved runtime and storage result `747a8d77` ++*(none — repo may need first-session setup)* + + ## Inbox Hygiene + + **Stale unread:** 6 message(s) older than 3 day(s) — triage at session start. +-**Missing thread_id:** 8 unread message(s) lack supersession chains. ++**Missing thread_id:** 6 unread message(s) lack supersession chains. + - ! the-custodian: Workplan 'three-phoenix-ha-cluster' is blocked with no wait task `a1368d99` + + --- diff --git a/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/manifest.json b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/manifest.json new file mode 100644 index 00000000..26137d7b --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/manifest.json @@ -0,0 +1,28 @@ +{ + "status": "prepared-not-applied", + "base": "26671d33600e218316d29c9cd020f115ebfb35b2", + "restore_brief_from_commit": "c562d7134c38679952a8ffd17a8a893a900aef0d", + "paths": [ + "workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md", + ".custodian-brief.md" + ], + "files": { + "WP18.preimage.md": "ec6213ddedd82a872f727ba030268d253ffbc8363e56df8b0f85c8d2168f1a49", + "WP18.candidate.md": "96d52b6dbae056399159632d50b32ccc6662e4f6d3677af154f7c8a3d618334b", + "brief.committed-preimage.md": "973c36a552854aa801708aecf45f80d07ce2215dfc7bfa58e1ab8c9e78b2de67", + "brief.forward-restore.md": "ce9a06a6e85437781f090615d989b82cb1fa2e8c509ed0dd99b6dc28152128b5", + "forward-correction.patch": "a50c419c4ab3a35a6f953559546c88fe0cfb75605ef63b51fe30307180262610" + }, + "original_backup": "../railiance-cluster-publication-backup", + "original_backup_sha256": { + "originals.json": "009ec3ff5b3e4556ec06a363e6b4e43c6d58d97796258b4a06974932fd3ca1d2", + ".custodian-brief.md.worktree": "973c36a552854aa801708aecf45f80d07ce2215dfc7bfa58e1ab8c9e78b2de67", + "WORK-RECORDS.md.worktree": "37bc7e5d2c28f62776189db3d89b5d238931a683d8b05ddae39c8f42f9778cce" + }, + "brief_original_index_entry": "100644 86c0e6c7306f54aebda9b59c7e3b72e4ab3e75ba 0\t.custodian-brief.md\n", + "workplan_task_blocks_UUIDs_and_statuses_unchanged": true, + "workplan_status_retained": "active", + "legacy_deepfix": false, + "history_rewrite": false, + "all18preservation_claim": false +} diff --git a/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/publication-final-manifest.json b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/publication-final-manifest.json new file mode 100644 index 00000000..9fa356b5 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/publication-final-manifest.json @@ -0,0 +1,30 @@ +{ + "status": "forward-correction-published-verified", + "head": "6ae3f847c83da3402883453ee7110457bfb2d0d6", + "parent": "26671d33600e218316d29c9cd020f115ebfb35b2", + "paths": [ + "workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md", + ".custodian-brief.md" + ], + "HEAD_brief_restored_to_c562": true, + "original_brief_staged_entry_and_worktree_exact": true, + "staged_brief_change_visible_again": true, + "original_WORK_RECORDS_dirty_worktree_and_index_exact": true, + "three_archive_hashes_unchanged": true, + "normal_fast_sync_applied_primary": true, + "five_task_three_edge_active_readback_verified": true, + "history_rewrite": false, + "legacy_deepfix": false, + "all18historical_preservation_or_restoration_claim": false, + "native_TLS_acceptance": false, + "files": { + "manifest.json": "9ac8f5e43f84add61ec8560be78e4d10e55bdd2918467581f367e816a4592385", + "execution-plan.json": "c374c9299bf30b5a746955e7ab3f883d76350a4eb0823f26ff5abccab1d5e69c", + "apply_forward_correction.py": "02b028822e07cc1612a2e5dea3c9f271f0020f9adfb656c0aac42555b0805502", + "forward-correction.patch": "a50c419c4ab3a35a6f953559546c88fe0cfb75605ef63b51fe30307180262610", + "forward-correction-commit.json": "d93f1d84b052b786332bc2238301cecf9d68f5a73d5ddc1376f25c859a765ed8", + "forward-correction-sync.json": "e022e5f8b92d154babe76de39dbc799d4cb04d4349f8642ed69f8587de18cb58", + "verify_forward_publication.py": "ccf1776a2a8b3de5b1cc75f90ba4c10fbf8ade1b79fa4ba721be1c908be11d7d", + "forward-correction-publication-readback.json": "cd1903b634511da269d19dd6d367482933ce06a175f8392db82b5655bd1b1de0" + } +} diff --git a/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/verify_forward_publication.py b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/verify_forward_publication.py new file mode 100644 index 00000000..274418cf --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-forward-correction-r1/verify_forward_publication.py @@ -0,0 +1,140 @@ +#!/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':'railiance-cluster','commit':'6ae3f847c83da3402883453ee7110457bfb2d0d6','path':'workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md','id':'RCLUSTER-WP-0018','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':'Cluster WP18 owner publication; read-only Git remote and Hub 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') + # Unchanged exact three edges retain their original creation commit. + if any(edge.get('source_commit') not in (None,owner['commit']) and not (edge.get('source_commit')=='c562d7134c38679952a8ffd17a8a893a900aef0d' and edge.get('source_owner')=='forge:railiance-cluster') 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/'forward-correction-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/cluster-publication-readback.json b/docs/changes/netkingdom-target-2026-10-17/cluster-publication-readback.json new file mode 100644 index 00000000..a52ef0cc --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/cluster-publication-readback.json @@ -0,0 +1,77 @@ +{ + "status": "verified", + "scope": "Cluster WP18 owner publication; read-only Git remote and Hub snapshots", + "writes_to_source_index_refs_or_Hub": false, + "rows": [ + { + "repo": "railiance-cluster", + "published_commit": "c562d7134c38679952a8ffd17a8a893a900aef0d", + "remote": { + "HEAD": "c562d7134c38679952a8ffd17a8a893a900aef0d", + "refs/heads/main": "c562d7134c38679952a8ffd17a8a893a900aef0d", + "symbolic_HEAD": "refs/heads/main" + }, + "workplan": { + "id": "e0a7813d-c916-5e49-84b2-5e5b30441891", + "slug": "rcluster-wp-0018", + "status": "ready" + }, + "source_record_id": "RCLUSTER-WP-0018", + "tasks": [ + { + "id": "7280193d-0d59-5b78-a2d3-96ebd127127f", + "record_id": "RCLUSTER-WP-0018-T01", + "status": "done" + }, + { + "id": "90836435-917f-504c-a711-3f29ece348e3", + "record_id": "RCLUSTER-WP-0018-T02", + "status": "todo" + }, + { + "id": "5dfa9a3a-2639-5cf6-b0a4-13eef417d47a", + "record_id": "RCLUSTER-WP-0018-T03", + "status": "wait" + }, + { + "id": "021b07bb-65bc-5743-bac5-4294b4be74f6", + "record_id": "RCLUSTER-WP-0018-T04", + "status": "wait" + }, + { + "id": "5bc67a22-0991-5625-86a6-f749560d8a0e", + "record_id": "RCLUSTER-WP-0018-T05", + "status": "todo" + } + ], + "external_source_declarations_not_projected": [], + "dependencies": [ + { + "from_task_id": "021b07bb-65bc-5743-bac5-4294b4be74f6", + "to_task_id": "5dfa9a3a-2639-5cf6-b0a4-13eef417d47a", + "relationship_type": "starts_after" + }, + { + "from_task_id": "021b07bb-65bc-5743-bac5-4294b4be74f6", + "to_task_id": "90836435-917f-504c-a711-3f29ece348e3", + "relationship_type": "starts_after" + }, + { + "from_task_id": "5dfa9a3a-2639-5cf6-b0a4-13eef417d47a", + "to_task_id": "90836435-917f-504c-a711-3f29ece348e3", + "relationship_type": "starts_after" + } + ], + "source_file_sha256": "ca521f5330dfd42d22f6ee92774e036d0d3c85e33ebbd27ea89e4be2b3f62b5c", + "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": "a0687ae6e05a6faf4efd2122c9ebd9f9a25a8cfb936741c8971295bb029abb1f" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/corrected-client-cluster-consistency.json b/docs/changes/netkingdom-target-2026-10-17/corrected-client-cluster-consistency.json new file mode 100644 index 00000000..4853c2fd --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/corrected-client-cluster-consistency.json @@ -0,0 +1,553 @@ +{ + "repo_slug": "railiance-cluster", + "repo_path": "/home/worsch/railiance-cluster", + "source_revision": "c562d7134c38679952a8ffd17a8a893a900aef0d", + "source_revision_reason": null, + "issues": [ + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager warning: .repo-classification.yaml: category is project but slug is not prj-*; not every category:project is a prj- repo", + "file_path": ".repo-classification.yaml", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-1: task id 'T01' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-1", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-2: task id 'T02' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-2", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-3: task id 'T03' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-3", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-4: task id 'T04' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-4", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-5: task id 'T05' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-5", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-1: task id 'T01' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-1", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-2: task id 'T02' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-2", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-3: task id 'T03' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-3", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-4: task id 'T04' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-4", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-1: task id 'T01' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-1", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-2: task id 'T02' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-2", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-3: task id 'T03' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-3", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-4: task id 'T04' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-4", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-5: task id 'T05' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-5", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-6: task id 'T06' is not accepted by the canon kind registry", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-6", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-1: task 'T01' has conflicting UUID assignments at ['workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-1', 'workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-1', 'workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-1']", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-1", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-2: task 'T02' has conflicting UUID assignments at ['workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-2', 'workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-2', 'workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-2']", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-2", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-3: task 'T03' has conflicting UUID assignments at ['workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-3', 'workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-3', 'workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-3']", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-3", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-4: task 'T04' has conflicting UUID assignments at ['workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-4', 'workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-4', 'workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-4']", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-4", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-35", + "message": "Repo Manager contradictory: workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-5: task 'T05' has conflicting UUID assignments at ['workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-5', 'workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-5']", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-5", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-33", + "message": "WORK-RECORDS.md is missing or stale \u2014 regenerate via fix-consistency (CUST-WP-0061-T04 generated work-record index)", + "file_path": "WORK-RECORDS.md", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": true + }, + { + "severity": "WARN", + "check_id": "C-23", + "message": "Lifecycle drift in 'rcluster-wp-0018': workplan status 'ready' has an active task \u2014 repair to 'active'", + "file_path": "workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md", + "db_id": "e0a7813d-c916-5e49-84b2-5e5b30441891", + "file_value": "ready", + "db_value": "ready", + "fixable": true + }, + { + "severity": "WARN", + "check_id": "C-34", + "message": "status=ready without quality_dor DoR-Ok \u2014 process claim without DoR assessment (soft; see docs/work-record-quality-gates.md)", + "file_path": "workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md", + "db_id": "", + "file_value": "unassessed", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-39", + "message": "Human wait task 'RCLUSTER-WP-0018-T04' in workplan 'RCLUSTER-WP-0018' has needs_human: true without decision_id \u2014 unrouted human gate", + "file_path": "workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md#RCLUSTER-WP-0018-T04", + "db_id": "", + "file_value": "needs_human: true", + "db_value": "", + "fixable": false + }, + { + "severity": "INFO", + "check_id": "C-08", + "message": "Retired DB workstream 'rail-bs-wp-0008-activity-core-wp0016-triage-output-deploy@retired-20260828' (id=f2ca1a5d\u2026, status=archived) has no backing workplan file \u2014 projection tombstone, not live work", + "file_path": "", + "db_id": "f2ca1a5d-4dd6-42ea-8003-969c7265f891", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "INFO", + "check_id": "C-08", + "message": "Retired DB workstream 'rail-bs-wp-0009-activity-core-admin-sync-smoke@retired-20260828' (id=366eec46\u2026, status=archived) has no backing workplan file \u2014 projection tombstone, not live work", + "file_path": "", + "db_id": "366eec46-3139-4810-ace6-ea75750fe821", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "INFO", + "check_id": "C-08", + "message": "Closed DB workstream 'rail-bs-wp-0008' (id=5032c55c\u2026, status=finished) has no backing workplan file", + "file_path": "", + "db_id": "5032c55c-2ee2-4b7e-b1eb-157f0f8ac647", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "INFO", + "check_id": "C-08", + "message": "Retired DB workstream 'railiance-wp-0014@retired-20260826' (id=a152ddda\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work", + "file_path": "", + "db_id": "a152ddda-d60a-4a65-9b9c-59e2db9ff2b7", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "INFO", + "check_id": "C-08", + "message": "Retired DB workstream 'railiance-wp-0012@retired-20260826' (id=6434f7cb\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work", + "file_path": "", + "db_id": "6434f7cb-e13c-4c05-839b-197bb239d5cd", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "INFO", + "check_id": "C-08", + "message": "Retired DB workstream 'railiance-wp-0013@retired-20260826' (id=a3abb83a\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work", + "file_path": "", + "db_id": "a3abb83a-2d42-40f9-a5f6-1dbc36903436", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "INFO", + "check_id": "C-08", + "message": "Retired DB workstream 'rail-bs-rcluster-wp-adhoc-2026-07-27@retired-20260828' (id=b37f3c6e\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work", + "file_path": "", + "db_id": "b37f3c6e-a9e5-58c2-84ec-77ef2a2978a7", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "INFO", + "check_id": "C-08", + "message": "Retired DB workstream 'rail-bs-adhoc-2026-07-27@retired-20260828' (id=9a77bc91\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work", + "file_path": "", + "db_id": "9a77bc91-f457-5545-996f-04f49707f54b", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-28", + "message": "8 unread inbox message(s) older than 3 day(s): railiance-platform:0c1023ce, railiance-platform:f643ce05, prj-forgejo-org-refactor:be06609c, prj-forgejo-org-refactor:6eac8c3f, prj-forgejo-org-refactor:82225aca, ...", + "file_path": "", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-28", + "message": "8 unread message(s) lack thread_id for supersession tracking: railiance-platform:0c1023ce, railiance-platform:f643ce05, prj-forgejo-org-refactor:be06609c, prj-forgejo-org-refactor:6eac8c3f, prj-forgejo-org-refactor:82225aca", + "file_path": "", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-29", + "message": "Unread work request from railiance-platform (f643ce05) may need a workplan file: RPF56: implement native JWT consumer-group mapping for Playwright", + "file_path": "", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-29", + "message": "Unread work request from the-custodian (a1368d99) may need a workplan file: Workplan 'three-phoenix-ha-cluster' is blocked with no wait task", + "file_path": "", + "db_id": "", + "file_value": "", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-26", + "message": "Workplan id 'RCLUSTER-WP-0007' uses prefix 'RCLUSTER-WP' but repo canonical prefix is 'RAIL-BS-WP' \u2014 new plans must conform", + "file_path": "workplans/RCLUSTER-WP-0007-threephoenix-ha-cluster.md", + "db_id": "", + "file_value": "RCLUSTER-WP-0007", + "db_value": "RAIL-BS-WP", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-26", + "message": "Workplan id 'RCLUSTER-WP-0014' uses prefix 'RCLUSTER-WP' but repo canonical prefix is 'RAIL-BS-WP' \u2014 new plans must conform", + "file_path": "workplans/RCLUSTER-WP-0014-capacity-utilization-and-allocation-evidence.md", + "db_id": "", + "file_value": "RCLUSTER-WP-0014", + "db_value": "RAIL-BS-WP", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-26", + "message": "Workplan id 'RCLUSTER-WP-0016' uses prefix 'RCLUSTER-WP' but repo canonical prefix is 'RAIL-BS-WP' \u2014 new plans must conform", + "file_path": "workplans/RCLUSTER-WP-0016-forgejo-upload-timeout.md", + "db_id": "", + "file_value": "RCLUSTER-WP-0016", + "db_value": "RAIL-BS-WP", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-26", + "message": "Workplan id 'RCLUSTER-WP-0017' uses prefix 'RCLUSTER-WP' but repo canonical prefix is 'RAIL-BS-WP' \u2014 new plans must conform", + "file_path": "workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md", + "db_id": "", + "file_value": "RCLUSTER-WP-0017", + "db_value": "RAIL-BS-WP", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-26", + "message": "Workplan id 'RCLUSTER-WP-0018' uses prefix 'RCLUSTER-WP' but repo canonical prefix is 'RAIL-BS-WP' \u2014 new plans must conform", + "file_path": "workplans/RCLUSTER-WP-0018-keycape-original-tls-recovery.md", + "db_id": "", + "file_value": "RCLUSTER-WP-0018", + "db_value": "RAIL-BS-WP", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-26", + "message": "Workplan id 'RCLUSTER-WP-0001' uses prefix 'RCLUSTER-WP' but repo canonical prefix is 'RAIL-BS-WP' \u2014 new plans must conform", + "file_path": "workplans/archived/260622-RCLUSTER-WP-0001-activity-core-cluster-owned-deploy-verify.md", + "db_id": "", + "file_value": "RCLUSTER-WP-0001", + "db_value": "RAIL-BS-WP", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-26", + "message": "Workplan id 'RCLUSTER-WP-0002' uses prefix 'RCLUSTER-WP' but repo canonical prefix is 'RAIL-BS-WP' \u2014 new plans must conform", + "file_path": "workplans/archived/260622-RCLUSTER-WP-0002-activity-core-verifier-evidence-hardening.md", + "db_id": "", + "file_value": "RCLUSTER-WP-0002", + "db_value": "RAIL-BS-WP", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-26", + "message": "Workplan id 'RCLUSTER-WP-0003' uses prefix 'RCLUSTER-WP' but repo canonical prefix is 'RAIL-BS-WP' \u2014 new plans must conform", + "file_path": "workplans/archived/260701-RCLUSTER-WP-0003-activity-core-llm-connect-live-reconcile.md", + "db_id": "", + "file_value": "RCLUSTER-WP-0003", + "db_value": "RAIL-BS-WP", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-27", + "message": "Workplan id 'RAIL-BS-WP-0008' collides across repos: railiance-bootstrap/RAIL-BS-WP-0008-activity-core-wp0016-triage-output-deploy.md, railiance-cluster/RAIL-BS-WP-0008-activity-core-wp0016-triage-output-deploy.md", + "file_path": "workplans/RAIL-BS-WP-0008-activity-core-wp0016-triage-output-deploy.md", + "db_id": "", + "file_value": "RAIL-BS-WP-0008", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-27", + "message": "Workplan id 'RAIL-BS-WP-0009' collides across repos: railiance-bootstrap/RAIL-BS-WP-0009-activity-core-admin-sync-smoke.md, railiance-cluster/RAIL-BS-WP-0009-activity-core-admin-sync-smoke.md", + "file_path": "workplans/RAIL-BS-WP-0009-activity-core-admin-sync-smoke.md", + "db_id": "", + "file_value": "RAIL-BS-WP-0009", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-27", + "message": "Workplan id 'RAIL-BS-WP-0001' collides across repos: railiance-bootstrap/260622-RAIL-BS-WP-0001-dependency-management.md, railiance-cluster/260622-RAIL-BS-WP-0001-dependency-management.md", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0001-dependency-management.md", + "db_id": "", + "file_value": "RAIL-BS-WP-0001", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-27", + "message": "Workplan id 'RAIL-BS-WP-0002' collides across repos: railiance-bootstrap/260622-RAIL-BS-WP-0002-k3s-baseline.md, railiance-cluster/260622-RAIL-BS-WP-0002-k3s-baseline.md", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md", + "db_id": "", + "file_value": "RAIL-BS-WP-0002", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-27", + "message": "Workplan id 'RAIL-BS-WP-0003' collides across repos: railiance-bootstrap/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md, railiance-cluster/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md", + "db_id": "", + "file_value": "RAIL-BS-WP-0003", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-27", + "message": "Workplan id 'RAIL-BS-WP-0004' collides across repos: railiance-bootstrap/260622-RAIL-BS-WP-0004-safety-net.md, railiance-cluster/260622-RAIL-BS-WP-0004-safety-net.md", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md", + "db_id": "", + "file_value": "RAIL-BS-WP-0004", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-27", + "message": "Workplan id 'RAIL-BS-WP-0005' collides across repos: railiance-bootstrap/260622-RAIL-BS-WP-0005-kubeconfig-delivery.md, railiance-cluster/260622-RAIL-BS-WP-0005-kubeconfig-delivery.md", + "file_path": "workplans/archived/260622-RAIL-BS-WP-0005-kubeconfig-delivery.md", + "db_id": "", + "file_value": "RAIL-BS-WP-0005", + "db_value": "", + "fixable": false + }, + { + "severity": "WARN", + "check_id": "C-27", + "message": "Workplan id 'RAIL-BS-WP-0006' collides across repos: railiance-bootstrap/260627-RAIL-BS-WP-0006-staged-promotion-lifecycle.md, railiance-cluster/260627-RAIL-BS-WP-0006-staged-promotion-lifecycle.md", + "file_path": "workplans/archived/260627-RAIL-BS-WP-0006-staged-promotion-lifecycle.md", + "db_id": "", + "file_value": "RAIL-BS-WP-0006", + "db_value": "", + "fixable": false + } + ], + "fixes_applied": [ + "bindings: synced 23/23", + "C-33 fixed: regenerated WORK-RECORDS.md", + "C-23 fixed: workstream e0a7813d\u2026 status \u2192 'active'", + "C-23 fixed: RCLUSTER-WP-0018-keycape-original-tls-recovery.md status ready \u2192 active (committed)", + "brief: .custodian-brief.md updated", + "push: pushed" + ], + "summary": { + "fail": 0, + "automation_error": 0, + "warn": 45, + "info": 8 + }, + "result": "warn" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/corrected-client-cluster-projection.json b/docs/changes/netkingdom-target-2026-10-17/corrected-client-cluster-projection.json new file mode 100644 index 00000000..d0389d25 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/corrected-client-cluster-projection.json @@ -0,0 +1,244 @@ +{ + "ok": true, + "status": "applied", + "repo_slug": "railiance-cluster", + "commit": "26671d33600e218316d29c9cd020f115ebfb35b2", + "requests": 2, + "elapsed_ms": 2311.2, + "git": { + "upstream": "origin/main", + "behind": 0, + "ahead": 0 + }, + "identifiers": { + "schema": "repo-manager.identifier-assignment.v1", + "ok": true, + "executed": true, + "repo": "railiance-cluster", + "namespace": "helixforge", + "assignments": [], + "historical_invalid_identifiers": [ + { + "kind": "task", + "id": "T01", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-1" + }, + { + "kind": "task", + "id": "T02", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-2" + }, + { + "kind": "task", + "id": "T03", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-3" + }, + { + "kind": "task", + "id": "T04", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-4" + }, + { + "kind": "task", + "id": "T05", + "source": "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-5" + }, + { + "kind": "task", + "id": "T01", + "source": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-1" + }, + { + "kind": "task", + "id": "T02", + "source": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-2" + }, + { + "kind": "task", + "id": "T03", + "source": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-3" + }, + { + "kind": "task", + "id": "T04", + "source": "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-4" + }, + { + "kind": "task", + "id": "T01", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-1" + }, + { + "kind": "task", + "id": "T02", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-2" + }, + { + "kind": "task", + "id": "T03", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-3" + }, + { + "kind": "task", + "id": "T04", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-4" + }, + { + "kind": "task", + "id": "T05", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-5" + }, + { + "kind": "task", + "id": "T06", + "source": "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-6" + } + ], + "historical_identity_collisions": [ + { + "kind": "task", + "id": "T01", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-1", + "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-1", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-1" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "3f042630-eab0-4c6a-9167-e2b28ff20e40", + "4526a842-ea31-4874-9231-92ab556cfe7b", + "6841c93a-f146-47eb-9f7c-8fa0e02c1bbc" + ] + }, + { + "kind": "task", + "id": "T02", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-2", + "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-2", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-2" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "a6313e06-1976-46a7-8e31-df4eb2eca880", + "ab166073-30a7-4702-a037-4091e8706e20", + "e8510646-46ed-4697-a345-f3d3009eea78" + ] + }, + { + "kind": "task", + "id": "T03", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-3", + "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-3", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-3" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "05d42a55-921f-4aa7-bb76-e8af9c7e0ac3", + "140da396-8e30-4f4d-b88c-c42c0cd46c01", + "dab2c07f-8aa0-4635-8df6-857e87e93fc5" + ] + }, + { + "kind": "task", + "id": "T04", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-4", + "workplans/archived/260622-RAIL-BS-WP-0003-pgpool-ha-failover-fix.md#task-block-4", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-4" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "08233868-d522-4117-bc4e-6c0f52545665", + "5c3d40e4-239b-488e-9519-6f7a38d2325f", + "d8a3ba40-fda0-4c1f-a9f1-ffcd621a5b3d" + ] + }, + { + "kind": "task", + "id": "T05", + "uuid": null, + "sources": [ + "workplans/archived/260622-RAIL-BS-WP-0002-k3s-baseline.md#task-block-5", + "workplans/archived/260622-RAIL-BS-WP-0004-safety-net.md#task-block-5" + ], + "parent_id": "RAIL-BS-WP-0002", + "uuids": [ + "2d5acff7-4a4e-4ddd-ad06-08237ad3dac8", + "7f9e0e58-a130-467a-a2d0-b3f2564e496f" + ] + } + ], + "files_changed": [] + }, + "receipt": { + "schema": "state-hub.repository-projection-reconcile.v1", + "instance_role": "primary", + "instance_label": "railiance01", + "expected_commit": "26671d33600e218316d29c9cd020f115ebfb35b2", + "derived_commit": "26671d33600e218316d29c9cd020f115ebfb35b2", + "outcome": { + "schema": "state-hub.projection-reset.v1", + "repo_slug": "railiance-cluster", + "commit": "26671d33600e218316d29c9cd020f115ebfb35b2", + "status": "applied", + "counts": { + "created": 0, + "updated": 20, + "retired": 0, + "refused": 0, + "released": 0, + "created_tasks": 0, + "updated_tasks": 0, + "cancelled_tasks": 0, + "created_edges": 0, + "removed_edges": 0, + "unresolved_edges": 0, + "external_edges": 0 + }, + "created": [], + "updated": [ + "RAIL-BS-WP-0001", + "RAIL-BS-WP-0005", + "RAIL-BS-WP-0006", + "RAIL-BS-WP-0008", + "RAIL-BS-WP-0009", + "RAIL-BS-WP-0010", + "RAIL-BS-WP-0011", + "RAIL-BS-WP-0012", + "RAIL-BS-WP-0013", + "RAIL-BS-WP-0014", + "RAIL-BS-WP-0015", + "RCLUSTER-WP-0001", + "RCLUSTER-WP-0002", + "RCLUSTER-WP-0003", + "RCLUSTER-WP-0007", + "RCLUSTER-WP-0014", + "RCLUSTER-WP-0016", + "RCLUSTER-WP-0017", + "RCLUSTER-WP-0018", + "RCLUSTER-WP-ADHOC-2026-07-27" + ], + "retired": [], + "released": [], + "created_tasks": [], + "updated_tasks": [], + "cancelled_tasks": [], + "created_edges": [], + "removed_edges": [], + "unresolved_edges": [], + "external_edges": [], + "refused": [], + "notes": [ + "Preserved bound historical row and task UUIDs: RAIL-BS-WP-0002", + "Preserved bound historical row and task UUIDs: RAIL-BS-WP-0003", + "Preserved bound historical row and task UUIDs: RAIL-BS-WP-0004" + ] + } + } +} diff --git a/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/e9bc-reviewed-manifest.json b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/e9bc-reviewed-manifest.json new file mode 100644 index 00000000..32fbd9e7 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/e9bc-reviewed-manifest.json @@ -0,0 +1,77 @@ +{ + "schema": "statehub.source-owner-followthrough.v1", + "revision": 3, + "status": "isolated_source_candidate_not_published", + "base_revision": "086d79a2736e34b916bd7de3c8a65e2ea38a3d64", + "files": [ + { + "path": "workplans/STATE-WP-0095-historical-source-receiving.md", + "action": "modify", + "base_sha256": "ef10359cc5974283b5bdbfc602adf14e3c24362adf00640698d2937c6538483a", + "candidate_sha256": "287001ec92d5a9b851b0d70e56747730a9bb150fcda09e97d6e6e9ddf39c7b5c" + }, + { + "path": "Makefile", + "action": "modify", + "base_sha256": "5584ef94071044cca8215141ecd8aee8d6ae5cfe73e8f5719358c680eb8af0d4", + "candidate_sha256": "c5b70e8d4b8ae70380e0ade1c35f9e7fe80038de10080a4723b21ef07a98001e" + }, + { + "path": "deploy/railiance/apps/charts/state-hub/Chart.yaml", + "action": "modify", + "base_sha256": "7fe02b390ffd2ba4ce6f82bd62df900826826401e31bdc2138dd5bf36b51a6ae", + "candidate_sha256": "61a989fcf277d05ffbececb7332ee3ca1d8f369c72f960ab1bc4dbc6815536b8" + }, + { + "path": "deploy/railiance/apps/helm/state-hub-values.yaml", + "action": "modify", + "base_sha256": "f7cc0e9968598f6ce0faa0d56f62d6817845c3570c18b6ac39ed6561b952b197", + "candidate_sha256": "b51296fc937450f4ecf0ae43243262a631b551389c0d09c8bfe58fa10e2f3ee9" + }, + { + "path": "docs/evidence/2026-10-17-cluster-historical-receiving-rollout.json", + "action": "add", + "base_sha256": null, + "candidate_sha256": "fb0b59ba3558e084fb4ae2c36c556f3cfbb2a889f6fd86d4e803c52f483b26fd" + }, + { + "path": "deploy/railiance/apps/charts/state-hub/files/repo-classification.allowed.yaml", + "action": "modify", + "base_sha256": "9c36fbd5308b19695f9f05d86f8e315bbeccdd267575ce4e2fccf6fb2ea82e32", + "candidate_sha256": "f53c651bb4329c09c04c66f906e2462fe4339ab51ef0ec3da9f942c3016f5bed" + }, + { + "path": "api/services/historical_projection.py", + "action": "modify", + "base_sha256": "e3c4bf965764b32a6df5d61c71272ee22569df9a9ddae2a3fc3df97ec554e0b2", + "candidate_sha256": "e24e57c58f4aaa4ec9d9bf088009ac69006e53f75b9477ee53dc26c4e850b975" + }, + { + "path": "api/routers/workstreams.py", + "action": "modify", + "base_sha256": "61e7a0ab638b155e9e0b2a72fe8e0ddd2edf5bc6c2d3ca7f6c3ff51e8868910b", + "candidate_sha256": "9c9bf4376dd323b52109912bb3f615949e89ac02c8b88b4720f569f8565ad1d6" + }, + { + "path": "scripts/consistency_check.py", + "action": "modify", + "base_sha256": "1827921c79b476bee823c2ddf9896aeb83f3efca6548427e17b3244216bbc6b5", + "candidate_sha256": "ae96d6260f6c88d35bc2d3f22f2a6061367621fd0416387d25d8683c8e804e06" + }, + { + "path": "tests/test_frozen_binding_guard_isolated.py", + "action": "add", + "base_sha256": null, + "candidate_sha256": "78eb62178fdecf9b5f6c40d398f8c44e93ff740abaf86557ab51ceb708d2ed65" + } + ], + "patch_sha256": "sha256:e9bc2ba9f81b6290945b6de6e0a00ba4c995478b17da786605f5a0466e300b3d", + "T06": "done_verified_approved_rollout_at_stage", + "T07": "wait_actual_later_parent_row_preservation_failure", + "T08": "done_source_repair_pending_publication", + "T09": "progress_until_source_published", + "T10": "wait_needs_human_new_runtime", + "live_effects": false, + "original_parent_preimages": "unknown_do_not_restore_guesses", + "managed_UUIDs": "T09_T10_not_allocated_pending_review" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/intermediate-review.json b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/intermediate-review.json new file mode 100644 index 00000000..93380f97 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/intermediate-review.json @@ -0,0 +1,19 @@ +{ + "status": "intermediate-reviewed-new-fix-guard-pending", + "reviewed_patch": "e9bc2ba9f81b6290945b6de6e0a00ba4c995478b17da786605f5a0466e300b3d", + "isolated_tests": { + "candidate": 40, + "independent": 4, + "passed": 44, + "seconds": 2.84 + }, + "tests_scope": "AST-extracted API/checker functions; generated in-memory rows and copies of exact historical source files; no actual DB/network", + "findings": [ + "original missing frozen scan path guard fixed in e9bc", + "original repo-unqualified path matcher fixed in e9bc", + "original refusal without automation FAIL fixed in e9bc", + "legacy fix_repo still needs protected parent/task repair preflight; recovery agent notified" + ], + "independent_test_sha256": "6896ec48f02829cbc97954c78f29284024727330af38997149e7f03b01f36abc", + "canonical_source_mutation": false +} diff --git a/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/r5-final-review.json b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/r5-final-review.json new file mode 100644 index 00000000..1ae2e9dc --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/r5-final-review.json @@ -0,0 +1,27 @@ +{ + "status": "reviewed-no-blocking-source-findings", + "reviewed_patch_sha256": "ad3d49b83435dd026118ee1e4a25779b5a7739473619bbda256f160c4eb0e56a", + "manifest_file": "r5-reviewed-manifest.json", + "isolated_tests": { + "candidate": 102, + "reviewer": 7, + "passed": 109, + "seconds": 10.89 + }, + "coverage": [ + "all3parents API no-setter preservation and missing expected-task refusal", + "ordinary-first all3frozen invalid-final-task batch refuses with no setter or commit", + "all18knownUUIDs nested mutating-context denial, including foreign repo claims", + "candidate exact3source metadata/hash/missing/symlink failclosed and C44automationnonzero", + "candidate protected legacy repair preflight before binding sync and fix side effects", + "ordinary dependency TO historical record allowed; FROM protected parent/task refused" + ], + "limits": [ + "AST-extracted endpoint and checker tests use in-memory generated rows, not delivered runtime or PostgreSQL transactions", + "API requires all15knownUUIDs owned and terminal; additional children remain permitted, consistent current Forge semantics", + "no original parent preimages reconstructed; no restoration claim", + "source review does not complete T07/RMGR19T06 or authorize new runtime activation" + ], + "canonical_source_or_database_changes": false, + "test_file_sha256": "fa2a347d8a2f0a28f9e81752de42d151138f71f5d1e83adb86f7cfe3e530486f" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/r5-reviewed-manifest.json b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/r5-reviewed-manifest.json new file mode 100644 index 00000000..6bbc2df3 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/r5-reviewed-manifest.json @@ -0,0 +1,77 @@ +{ + "schema": "statehub.source-owner-followthrough.v1", + "revision": 5, + "status": "isolated_source_candidate_not_published", + "base_revision": "086d79a2736e34b916bd7de3c8a65e2ea38a3d64", + "files": [ + { + "path": "workplans/STATE-WP-0095-historical-source-receiving.md", + "action": "modify", + "base_sha256": "ef10359cc5974283b5bdbfc602adf14e3c24362adf00640698d2937c6538483a", + "candidate_sha256": "5671189ee87f2d4dff08979f6243e5eb7888b140955899642a74d569496b71c7" + }, + { + "path": "Makefile", + "action": "modify", + "base_sha256": "5584ef94071044cca8215141ecd8aee8d6ae5cfe73e8f5719358c680eb8af0d4", + "candidate_sha256": "c5b70e8d4b8ae70380e0ade1c35f9e7fe80038de10080a4723b21ef07a98001e" + }, + { + "path": "deploy/railiance/apps/charts/state-hub/Chart.yaml", + "action": "modify", + "base_sha256": "7fe02b390ffd2ba4ce6f82bd62df900826826401e31bdc2138dd5bf36b51a6ae", + "candidate_sha256": "61a989fcf277d05ffbececb7332ee3ca1d8f369c72f960ab1bc4dbc6815536b8" + }, + { + "path": "deploy/railiance/apps/helm/state-hub-values.yaml", + "action": "modify", + "base_sha256": "f7cc0e9968598f6ce0faa0d56f62d6817845c3570c18b6ac39ed6561b952b197", + "candidate_sha256": "b51296fc937450f4ecf0ae43243262a631b551389c0d09c8bfe58fa10e2f3ee9" + }, + { + "path": "docs/evidence/2026-10-17-cluster-historical-receiving-rollout.json", + "action": "add", + "base_sha256": null, + "candidate_sha256": "fb0b59ba3558e084fb4ae2c36c556f3cfbb2a889f6fd86d4e803c52f483b26fd" + }, + { + "path": "deploy/railiance/apps/charts/state-hub/files/repo-classification.allowed.yaml", + "action": "modify", + "base_sha256": "9c36fbd5308b19695f9f05d86f8e315bbeccdd267575ce4e2fccf6fb2ea82e32", + "candidate_sha256": "f53c651bb4329c09c04c66f906e2462fe4339ab51ef0ec3da9f942c3016f5bed" + }, + { + "path": "api/services/historical_projection.py", + "action": "modify", + "base_sha256": "e3c4bf965764b32a6df5d61c71272ee22569df9a9ddae2a3fc3df97ec554e0b2", + "candidate_sha256": "e24e57c58f4aaa4ec9d9bf088009ac69006e53f75b9477ee53dc26c4e850b975" + }, + { + "path": "api/routers/workstreams.py", + "action": "modify", + "base_sha256": "61e7a0ab638b155e9e0b2a72fe8e0ddd2edf5bc6c2d3ca7f6c3ff51e8868910b", + "candidate_sha256": "9c9bf4376dd323b52109912bb3f615949e89ac02c8b88b4720f569f8565ad1d6" + }, + { + "path": "scripts/consistency_check.py", + "action": "modify", + "base_sha256": "1827921c79b476bee823c2ddf9896aeb83f3efca6548427e17b3244216bbc6b5", + "candidate_sha256": "eaee916f46a11f49d2621fc9386717d73b7fd517acbe4b695e7b551d67bfa8f7" + }, + { + "path": "tests/test_frozen_binding_guard_isolated.py", + "action": "add", + "base_sha256": null, + "candidate_sha256": "4dc64df78a02dc633e5744d0277afe5d350fbb0637196e78dec992f91135bded" + } + ], + "patch_sha256": "sha256:ad3d49b83435dd026118ee1e4a25779b5a7739473619bbda256f160c4eb0e56a", + "T06": "done_verified_approved_rollout_at_stage", + "T07": "wait_actual_later_parent_row_preservation_failure", + "T08": "done_source_repair_pending_publication", + "T09": "progress_until_source_published", + "T10": "wait_needs_human_new_runtime", + "live_effects": false, + "original_parent_preimages": "unknown_do_not_restore_guesses", + "managed_UUIDs": "T09_T10_not_allocated_pending_review" +} diff --git a/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/r5-test-independent-review.py b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/r5-test-independent-review.py new file mode 100644 index 00000000..474ee8b1 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/r5-test-independent-review.py @@ -0,0 +1,34 @@ +import importlib.util,asyncio,uuid +from pathlib import Path +import pytest +spec=importlib.util.spec_from_file_location('guardtest',Path(__file__).with_name('test_frozen_binding_guard_isolated.py')) +t=importlib.util.module_from_spec(spec);spec.loader.exec_module(t) +@pytest.mark.parametrize('bound',t.h.FROZEN_CLUSTER_BINDINGS) +def test_independent_all_three_preserve_and_missing_refuse(bound): + previous=t.B;t.B=bound + try: + repo,parent,tasks=t.closure(bound) + r,s=asyncio.run(t.run_api([t.binding(_bound=bound)],repo,parent,tasks)) + assert r['preserved']==1 and s.commits==0 and parent.writes==[] + with pytest.raises(t.HTTPException):asyncio.run(t.run_api([t.binding(_bound=bound)],repo,parent,tasks[:-1])) + finally:t.B=previous + +def test_independent_three_parent_invalid_last_batch_no_setters(): + repo=t.Obj(id=uuid.uuid4());parents=[];tasks=[];entries=[] + for b in t.h.FROZEN_CLUSTER_BINDINGS: + parent=t.Obj(id=uuid.UUID(b['uuid']),repo_id=repo.id,status='finished');parents.append(parent) + tasks.extend(t.Obj(id=uuid.UUID(x['uuid']),workplan_id=parent.id,status='done') for x in b['tasks']) + entries.append(t.Entry(workplan_id=parent.id,repo_slug=b['repo'],filename=Path(b['path']).name,relative_path=b['path'],archived=True,status='finished')) + ordinary=t.Obj(id=uuid.uuid4());normal=t.Entry(workplan_id=ordinary.id,repo_slug='ordinary',filename='ordinary.md',relative_path='workplans/ordinary.md',archived=False,status='active') + tasks[-1].status='progress';tasks[-1].writes.clear() + session=t.Session([[ordinary,*parents],[repo],tasks]) + fn=t.extracted('api/routers/workstreams.py','sync_workplan_bindings',dict(frozen_cluster_binding=t.h.frozen_cluster_binding,validate_frozen_cluster_rows=t.h.validate_frozen_cluster_rows,HTTPException=t.HTTPException,select=lambda *_:t.Query(),Workplan=t.Model,Task=t.Model,ManagedRepo=t.Model,_invalidate_workplan_index_cache=lambda:None)) + with pytest.raises(t.HTTPException):asyncio.run(fn(t.Obj(bindings=[normal,*entries]),session)) + assert session.commits==0 and ordinary.writes==[] and all(p.writes==[] for p in parents) and all(x.writes==[] for x in tasks) + +@pytest.mark.parametrize('bound',t.h.FROZEN_CLUSTER_BINDINGS) +def test_independent_all_eighteen_ids_nested_repair_denied(bound): + guard=t.extracted('scripts/consistency_check.py','_refuse_frozen_fix_batch',dict(FROZEN_CLUSTER_BINDINGS=t.h.FROZEN_CLUSTER_BINDINGS)) + for protected in [bound['uuid'],*[x['uuid'] for x in bound['tasks']]]: + report=t.actual_report();report.add(severity='WARN',check_id='C-41',message='drift',fixable=True,_fix_context={'nested':[{'from_task_id':protected}]}) + assert guard(report,'foreign') and report.automation_errors diff --git a/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/test_independent_review.py b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/test_independent_review.py new file mode 100644 index 00000000..18cb8434 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/frozen-binding-independent-review-r1/test_independent_review.py @@ -0,0 +1,27 @@ +import importlib.util,asyncio,uuid +from pathlib import Path +import pytest +spec=importlib.util.spec_from_file_location('guardtest',Path(__file__).with_name('test_frozen_binding_guard_isolated.py')) +t=importlib.util.module_from_spec(spec);spec.loader.exec_module(t) +@pytest.mark.parametrize('bound',t.h.FROZEN_CLUSTER_BINDINGS) +def test_independent_all_three_preserve_and_missing_refuse(bound): + previous=t.B;t.B=bound + try: + repo,parent,tasks=t.closure() + r,s=asyncio.run(t.run_api([t.binding()],repo,parent,tasks)) + assert r['preserved']==1 and s.commits==0 and parent.writes==[] + with pytest.raises(t.HTTPException):asyncio.run(t.run_api([t.binding()],repo,parent,tasks[:-1])) + finally:t.B=previous + +def test_independent_three_parent_invalid_last_batch_no_setters(): + repo=t.Obj(id=uuid.uuid4());parents=[];tasks=[];entries=[] + for b in t.h.FROZEN_CLUSTER_BINDINGS: + parent=t.Obj(id=uuid.UUID(b['uuid']),repo_id=repo.id,status='finished');parents.append(parent) + tasks.extend(t.Obj(id=uuid.UUID(x['uuid']),workplan_id=parent.id,status='done') for x in b['tasks']) + entries.append(t.Entry(workplan_id=parent.id,repo_slug=b['repo'],filename=Path(b['path']).name,relative_path=b['path'],archived=True,status='finished')) + ordinary=t.Obj(id=uuid.uuid4());normal=t.Entry(workplan_id=ordinary.id,repo_slug='ordinary',filename='ordinary.md',relative_path='workplans/ordinary.md',archived=False,status='active') + tasks[-1].status='progress';tasks[-1].writes.clear() + session=t.Session([[ordinary,*parents],[repo],tasks]) + fn=t.extracted('api/routers/workstreams.py','sync_workplan_bindings',dict(frozen_cluster_binding=t.h.frozen_cluster_binding,validate_frozen_cluster_rows=t.h.validate_frozen_cluster_rows,HTTPException=t.HTTPException,select=lambda *_:t.Query(),Workplan=t.Model,Task=t.Model,ManagedRepo=t.Model,_invalidate_workplan_index_cache=lambda:None)) + with pytest.raises(t.HTTPException):asyncio.run(fn(t.Obj(bindings=[normal,*entries]),session)) + assert session.commits==0 and ordinary.writes==[] and all(p.writes==[] for p in parents) and all(x.writes==[] for x in tasks) diff --git a/docs/changes/netkingdom-target-2026-10-17/guard-image-a25b62f-inspection.json b/docs/changes/netkingdom-target-2026-10-17/guard-image-a25b62f-inspection.json new file mode 100644 index 00000000..e3f4fe80 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/guard-image-a25b62f-inspection.json @@ -0,0 +1,774 @@ +{ + "schema": "statehub.guard-image-inspection.v1", + "status": "verified-selected-public-image-bytes", + "source_commit": "a25b62f75aab6165ee9872ee53ac90c679ec746a", + "tag": "main-a25b62f", + "image_digest": "sha256:226086b1acaec3fc77e30014a101c96de687e38c9eb52cd522e5e69efb1980a0", + "selected_source_hashes": { + "app/api/services/historical_projection.py": "sha256:e24e57c58f4aaa4ec9d9bf088009ac69006e53f75b9477ee53dc26c4e850b975", + "app/api/routers/workstreams.py": "sha256:9c9bf4376dd323b52109912bb3f615949e89ac02c8b88b4720f569f8565ad1d6", + "app/scripts/consistency_check.py": "sha256:eaee916f46a11f49d2621fc9386717d73b7fd517acbe4b695e7b551d67bfa8f7", + "app/api/services/forge_projection.py": "sha256:b980e62cbd85c3e7df42b01abf14354e04133374db94af6531dcd91629c3487d", + "app/migrations/versions/c4d5e6f7a8b9_inbox_feed_revision.py": "sha256:48f1730037be99b5623e878d7f20a06bec243ce27317fde81c82e16006d7b3ce", + "tmp/.ci-build-id": "sha256:ea57ead67d610c44a6237a7d96be66a8f9882f026de544b8efc69dbd7d57315d" + }, + "observed_files": { + "tmp/.ci-build-id": "sha256:ea57ead67d610c44a6237a7d96be66a8f9882f026de544b8efc69dbd7d57315d", + "tmp/hub-core/hub_core/__init__.py": "sha256:098578bae76f7d97354b8f3dfe8ddc63b15806a46d1691d70ed12d9839d69aec", + "tmp/hub-core/hub_core/conformance/__init__.py": "sha256:f7ce0a651913f157e586afd6e953b483add0dd5257ee9f2406c47e8d46ee9587", + "tmp/hub-core/hub_core/conformance/harness.py": "sha256:ca870fbbec7b7f5db6521d615fd76dfcbb9e97cbdfb037ffa993851a663b3c40", + "tmp/hub-core/hub_core/contracts/__init__.py": "sha256:ffb7a6b79ce15ddd57943bfbc40799e078c6f57c6690018237baa3f3a755ac49", + "tmp/hub-core/hub_core/contracts/helixforge_hub_extension/__init__.py": "sha256:32c095a16f777127ec0d2cd5e8373889866b81e9955d01e5adaf9503f6864da4", + "tmp/hub-core/hub_core/contracts/helixforge_hub_extension/v0_1_0/__init__.py": "sha256:e176b86b24d79c11f78ad714878bc3fca41c7821654fa766278b697360a41201", + "tmp/hub-core/hub_core/contracts/repository_navigation/__init__.py": "sha256:64912fe6673b72c3c0d8a2da28673d58bdf6f4185a1376ffe43d3735350adb60", + "tmp/hub-core/hub_core/contracts/repository_navigation/v1_0_0/__init__.py": "sha256:574cf1fee8433e0b11d9475cfbcc3837730b55f6ea1faa4920cba106d959464f", + "tmp/hub-core/hub_core/contracts/workload_projection/__init__.py": "sha256:c01198d23571442c1c3a596c7cd16be17dc1a3efdcfe3e8f9725b7dba16fc103", + "tmp/hub-core/hub_core/contracts/workload_projection/v1_0_0/__init__.py": "sha256:a9ecfecbf44893d32268288c872cdede0440d2a1373d37a47f69ba8c6431de0d", + "tmp/hub-core/hub_core/database.py": "sha256:a7704e97509433e90655b0ea22d5fa626d75b8b6470015ef8b9e5997e7a7f5ea", + "tmp/hub-core/hub_core/events.py": "sha256:c7125a242ed638a3ede29129e4ad826cd188cf76239b59a8587a40d182bbd0e7", + "tmp/hub-core/hub_core/mcp/__init__.py": "sha256:f97b25193573e56886b66f91cb8c86ef4a39f2100d709869e279e17456959859", + "tmp/hub-core/hub_core/mcp/credentials.py": "sha256:f5433d29848bd5a399a5e31695e0d908748e0a0856d26b2d691b667c50c95c34", + "tmp/hub-core/hub_core/mcp/server.py": "sha256:fc6a6de0a29ad9b6da176302a7d24e4ba987f667b6a7fb001029f00cb0d0c582", + "tmp/hub-core/hub_core/message_identity.py": "sha256:0ab996ba50f236c1342ce72ca8ae6ff28102ef41216972a745f7260e0c93fb24", + "tmp/hub-core/hub_core/migrations/__init__.py": "sha256:ccf4820e270c97fd5d4ac02f0c96362a772b8f4d1bcccc3f5e0077b77f575d36", + "tmp/hub-core/hub_core/migrations/env.py": "sha256:282e6e1a9e4a3cfdc111887f04dc5c1645307b3943a421852abe1709ce712e57", + "tmp/hub-core/hub_core/migrations/roles.py": "sha256:91e85297d296b0c4b9c78b16ae67d3a4707232d8f32b2cac2b2e84f31fa80e89", + "tmp/hub-core/hub_core/migrations/versions/0001_core_schema.py": "sha256:c65f076a7b56fb93ee67869e04d922ea396eab72a4c2d2f0dabd706c918aa081", + "tmp/hub-core/hub_core/migrations/versions/0002_runtime_ports.py": "sha256:d3ce15463841b3c13eaafdd137a65d4cf2839c0b8e8fddcb2cb2f1adbceb9f00", + "tmp/hub-core/hub_core/migrations/versions/0003_repository_navigation.py": "sha256:fb2d2cb5ed10f1760ab789ced8d43c657c1bedc29ba666231a70a18636160902", + "tmp/hub-core/hub_core/migrations/versions/0004_workload_projection.py": "sha256:87ce668bfef5cf4aaf0cfd3b48d498f2370f68e06a6e66375e446af6fbbb9c96", + "tmp/hub-core/hub_core/migrations/versions/0005_message_identity_aliases.py": "sha256:ec05d2c3cb906b78cdec4d220a7ce09264c38904c792cdad3cd1082e7eace7c0", + "tmp/hub-core/hub_core/migrations/versions/0006_outcome_outbox.py": "sha256:05effdf6f258836d1cd223f9d9fc3447d264484021d3a51cfa42517453d613e1", + "tmp/hub-core/hub_core/migrations/versions/__init__.py": "sha256:569f6d7e5cc1c17b7b1eee3eec3b82774b745d01ee1dfdf851a5c6f5c337f0bb", + "tmp/hub-core/hub_core/models/__init__.py": "sha256:c0b6de4986614a163dbb2467d15882eadbd66800478a50de4d6404198d1f773a", + "tmp/hub-core/hub_core/models/agent_message.py": "sha256:23d16eeaffe780f326b08e6c441100e6ae7b4075bbb6421734c06156a87c4375", + "tmp/hub-core/hub_core/models/base.py": "sha256:85bb40bde6f4cf8e6c5700a3a016a711fab4adff77c5eb78f89827fe28b9537b", + "tmp/hub-core/hub_core/models/capability_catalog.py": "sha256:eebbb31f264821a61662d3c9e8c7eba74f46d7f68b946e35f8127343bf2ff9c4", + "tmp/hub-core/hub_core/models/capability_request.py": "sha256:70a867c82aaa061a4e1c671b023d213032464e776226280f99e2ca192e2a6eba", + "tmp/hub-core/hub_core/models/domain.py": "sha256:ddf45c37e3c37014ddd9148be01cf104658e1601abba2a8ba96f7680cdb581b3", + "tmp/hub-core/hub_core/models/managed_repo.py": "sha256:835c5d44581daf7d7dd95325e3f7fdf0add4d529b83779ed83b5e812dcb3aa61", + "tmp/hub-core/hub_core/models/message_identity_alias.py": "sha256:d07d59cd9c9351669e8319727d08bc0e9bb7e0ee36bf8a34c0c258f0b4ea61e4", + "tmp/hub-core/hub_core/models/progress_event.py": "sha256:ee750127db2f49c5b9b94773a408f7f965d834b02e6d962220f4bc762309161f", + "tmp/hub-core/hub_core/models/tpsc.py": "sha256:cb28cbe3512486adb73c0bce633b3c542a41a64e7ec673e86a5a25ab20d94afe", + "tmp/hub-core/hub_core/routers/__init__.py": "sha256:800d1c45f597fcb4970ca7a83acd2b36016006efbdf638e14a3482a954d9046d", + "tmp/hub-core/hub_core/routers/capabilities.py": "sha256:18a403ad6ac961bc490543b698e079336f60ef9902a6cd71ef9899076660d5c0", + "tmp/hub-core/hub_core/routers/domains.py": "sha256:d4c4061d2ab0d2d6390a10f4f815deb0b93b3979345aee965b666110ba32e6e0", + "tmp/hub-core/hub_core/routers/messages.py": "sha256:903bd4f8c8ca599b606cf2229315de21097360816fcda907159dac4f48cee512", + "tmp/hub-core/hub_core/routers/policy.py": "sha256:358271263295fdebb5bcb95c3a27bd3ea456964a77bc01c3f784fb7a8754aacf", + "tmp/hub-core/hub_core/routers/progress.py": "sha256:680cf4dea00a1734d7d70ef7880acc8fd39f045521baa47f415c17934779d18a", + "tmp/hub-core/hub_core/routers/repos.py": "sha256:1bca6c9b2b5bbe172f5b935b763ac1e399b1d403cdc2c463000ae79f843257a2", + "tmp/hub-core/hub_core/routers/tpsc.py": "sha256:706815b01be1c0320bf73cf9cff3e9415c1f27b8449ee9e6fea67b12d3042fd1", + "tmp/hub-core/hub_core/runtime/__init__.py": "sha256:c522e626373407bf9bcd727dac7bb812cbdc8c3ef5bb6509a74949e5b49ab4c2", + "tmp/hub-core/hub_core/runtime/app.py": "sha256:87b077498bbe321c73139e51f7ca689fdc7963a98c4d72a5a3bbcc564f47ee76", + "tmp/hub-core/hub_core/runtime/cli.py": "sha256:98ec00f2a12911245827f515877472ae1c37cea65a42454494450ffbe7380e57", + "tmp/hub-core/hub_core/runtime/compat.py": "sha256:9f1c4575bb406ae1174da1a005ec16f44ace63768617e11164b44b4051162d0d", + "tmp/hub-core/hub_core/runtime/compat_catalogs.py": "sha256:250f61ea39cced32c8cd932c4e770ae8be54ff1cf1e257ee2c82324bde0d7a26", + "tmp/hub-core/hub_core/runtime/config.py": "sha256:009b2fc5d1f8fc390d478b01444f610ada91e5fee30534936382be2529a843fc", + "tmp/hub-core/hub_core/runtime/inbox_projection.py": "sha256:84499238654310b86f7a97f2817163ff4c4da0dfce562c677294fa3dfef7f398", + "tmp/hub-core/hub_core/runtime/migration.py": "sha256:d12731fa581c48bf58deec19405ece977c89d08993b2a2ad047cb1fd17318ea8", + "tmp/hub-core/hub_core/runtime/models.py": "sha256:367ca4aa29f59f8e3f59eab22f12782146cf623fa7ac7c22346c794b85a88185", + "tmp/hub-core/hub_core/runtime/ports.py": "sha256:ab70a401deae73389761a0e88dc8ee843df00a671fae6919b1f7eed344cfb542", + "tmp/hub-core/hub_core/runtime/postgres_store.py": "sha256:9286e7845009b66f00069d67177733dabe372d79986c33ca9b43e00dfa5a2341", + "tmp/hub-core/hub_core/runtime/repo_manager_client.py": "sha256:8fa305277c5f3ddfdbe1daf4023ce6c3cde03b5c18c1292dd6aac3fe995aabe1", + "tmp/hub-core/hub_core/runtime/repository_navigation.py": "sha256:f3503596781f3e7f7d53dd28dd3aaf563905f1398575b40c8080e2b1b9978b1e", + "tmp/hub-core/hub_core/runtime/repository_navigation_routes.py": "sha256:eab78ab418a7b542dcdcab5da023bacc65fb50520853f8d179accb2105e373cf", + "tmp/hub-core/hub_core/runtime/store.py": "sha256:2fb78f14bab8df08807322d6f6416745856d69e6001381246abbac879891858d", + "tmp/hub-core/hub_core/runtime/tables.py": "sha256:a5ff72a9c54eedcc8bb81330e62ee72578a383a1d03a1acb598c72c96cdfbe9e", + "tmp/hub-core/hub_core/runtime/validation.py": "sha256:2add804d95d5d0469d6d8d605fbd1013885da972489a017260c6fddef7b80c79", + "tmp/hub-core/hub_core/runtime/workload_projection.py": "sha256:8500260404b0c566a62e51fef63ee320d4e3dafe5e2467f44db884296b9e3bf4", + "tmp/hub-core/hub_core/runtime/workload_projection_routes.py": "sha256:5c71189b98867f2f1f7612f47ee69c0ec3ddf836b9b1c7e134b98a2be45791de", + "tmp/hub-core/hub_core/schemas/__init__.py": "sha256:dfa2ec2d125f03a532637d2fbef3058ebe1f85c515ff42a930198e164b7812f7", + "tmp/hub-core/hub_core/schemas/agent_message.py": "sha256:d6a7f40dc9a3c61be761f4d2e2c08f726fb0a423ef73e273a7cd97c69ae6c6a3", + "tmp/hub-core/hub_core/schemas/capability.py": "sha256:949c55cb1f2694de4617ad53dc9cb7bc0e72addd7b9d0f104b93d783e4edc647", + "tmp/hub-core/hub_core/schemas/doi.py": "sha256:73d675aecabd5a62ae13184494a4b9db122ad24b3132e1d0e908eef802382f36", + "tmp/hub-core/hub_core/schemas/domain.py": "sha256:872a704fea959d2e4d0ff771770a97160457282218f4748ba4f830c489543aac", + "tmp/hub-core/hub_core/schemas/managed_repo.py": "sha256:a7ab3b1ab399da81324693dcd5d3feeccb211642b10f11cd3f03c7fe6ba751d4", + "tmp/hub-core/hub_core/schemas/policy.py": "sha256:bdaef1640783ac325a050cadf214e731d7c8e5e3a35dbb8f7562d5abbd209a4c", + "tmp/hub-core/hub_core/schemas/progress_event.py": "sha256:9ac7b7fd4881d424bfe59c5001554fd7302243e8489d5e777584d11ead1db328", + "tmp/hub-core/hub_core/schemas/tpsc.py": "sha256:5640d96a7fa862a468eeb0d6da002697b1f58e4cd675a4603b91e448d4db851e", + "tmp/hub-core/hub_core/security/__init__.py": "sha256:2754e25ec0f5725c33cb0b4dff1b7d10b364ebd828e609bb5b44eee3309d2d60", + "tmp/hub-core/hub_core/security/account_reader.py": "sha256:27019616b84cf030969a8e3c0850b5ae52f336008fd9daa4c26360566e74a39b", + "tmp/hub-core/hub_core/security/audit.py": "sha256:94cb85d71f065443c6423871b59d41e929af0441c95928273caf3e38dad8125c", + "tmp/hub-core/hub_core/security/boundary.py": "sha256:a1629ac717672276f61015c83f7af6e375bbd8c1234c712dd3d225da307ae0d6", + "tmp/hub-core/hub_core/security/browser.py": "sha256:fd474ee4b9611fe8dd2c60111402c2fce67d680a7da3519b5d4a495a6b559b7a", + "tmp/hub-core/hub_core/security/config.py": "sha256:7d604f6aeebde393a371ec3e0ab174934e10808c29fb370acba031486e9c02a3", + "tmp/hub-core/hub_core/security/context.py": "sha256:1181bbf12ba86bfd5046dab2f3a22a64ee3686be6dd52ab3e843303349b13a52", + "tmp/hub-core/hub_core/security/facts.py": "sha256:3de4db38ffd3f86f4918d76f811289cd501be3c28dcba16f5088aa2a2b7529ce", + "tmp/hub-core/hub_core/security/identity.py": "sha256:d7a0bab9d59a5f342fdedc9723d818a9d2537a59c6a9415455786af748f912e9", + "tmp/hub-core/hub_core/security/policy.py": "sha256:a2370e9ea5b04b1d5a429644d7f81edb1cbe8e15214c23b16cd6f949613eebd6", + "tmp/hub-core/hub_core/utils/__init__.py": "sha256:ce4ddb30ccc4fd2c4ee59e8a3c088a12165171af02aea957f17f72cd868e1899", + "tmp/hub-core/hub_core/utils/pagination.py": "sha256:366250b85052c7aabc2a2262521d34233124ba3a41026042792f8eda706ecb4f", + "tmp/hub-core/hub_core/utils/paths.py": "sha256:988a889be74f0626ca3c27b1d6677bd4a556e35de389c060d07ab64fa1c22fc8", + "tmp/hub-core/hub_core/utils/routing.py": "sha256:c94b44c5f1ab723e123503e20e0309f28abeeabea6d51beda79247d99852ad1e", + "tmp/hub-core/hub_core/utils/slugs.py": "sha256:eda7a7d18ff21a4d949223b75a2b615a949e615f461152a9cb9a2cf74b491e2d", + "app/.venv/lib/python3.12/site-packages/hub_core/__init__.py": "sha256:098578bae76f7d97354b8f3dfe8ddc63b15806a46d1691d70ed12d9839d69aec", + "app/.venv/lib/python3.12/site-packages/hub_core/conformance/__init__.py": "sha256:f7ce0a651913f157e586afd6e953b483add0dd5257ee9f2406c47e8d46ee9587", + "app/.venv/lib/python3.12/site-packages/hub_core/conformance/harness.py": "sha256:ca870fbbec7b7f5db6521d615fd76dfcbb9e97cbdfb037ffa993851a663b3c40", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/__init__.py": "sha256:ffb7a6b79ce15ddd57943bfbc40799e078c6f57c6690018237baa3f3a755ac49", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/helixforge_hub_extension/__init__.py": "sha256:32c095a16f777127ec0d2cd5e8373889866b81e9955d01e5adaf9503f6864da4", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/helixforge_hub_extension/v0_1_0/__init__.py": "sha256:e176b86b24d79c11f78ad714878bc3fca41c7821654fa766278b697360a41201", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/repository_navigation/__init__.py": "sha256:64912fe6673b72c3c0d8a2da28673d58bdf6f4185a1376ffe43d3735350adb60", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/repository_navigation/v1_0_0/__init__.py": "sha256:574cf1fee8433e0b11d9475cfbcc3837730b55f6ea1faa4920cba106d959464f", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/workload_projection/__init__.py": "sha256:c01198d23571442c1c3a596c7cd16be17dc1a3efdcfe3e8f9725b7dba16fc103", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/workload_projection/v1_0_0/__init__.py": "sha256:a9ecfecbf44893d32268288c872cdede0440d2a1373d37a47f69ba8c6431de0d", + "app/.venv/lib/python3.12/site-packages/hub_core/database.py": "sha256:a7704e97509433e90655b0ea22d5fa626d75b8b6470015ef8b9e5997e7a7f5ea", + "app/.venv/lib/python3.12/site-packages/hub_core/events.py": "sha256:c7125a242ed638a3ede29129e4ad826cd188cf76239b59a8587a40d182bbd0e7", + "app/.venv/lib/python3.12/site-packages/hub_core/mcp/__init__.py": "sha256:f97b25193573e56886b66f91cb8c86ef4a39f2100d709869e279e17456959859", + "app/.venv/lib/python3.12/site-packages/hub_core/mcp/credentials.py": "sha256:f5433d29848bd5a399a5e31695e0d908748e0a0856d26b2d691b667c50c95c34", + "app/.venv/lib/python3.12/site-packages/hub_core/mcp/server.py": "sha256:fc6a6de0a29ad9b6da176302a7d24e4ba987f667b6a7fb001029f00cb0d0c582", + "app/.venv/lib/python3.12/site-packages/hub_core/message_identity.py": "sha256:0ab996ba50f236c1342ce72ca8ae6ff28102ef41216972a745f7260e0c93fb24", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/__init__.py": "sha256:ccf4820e270c97fd5d4ac02f0c96362a772b8f4d1bcccc3f5e0077b77f575d36", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/env.py": "sha256:282e6e1a9e4a3cfdc111887f04dc5c1645307b3943a421852abe1709ce712e57", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/roles.py": "sha256:91e85297d296b0c4b9c78b16ae67d3a4707232d8f32b2cac2b2e84f31fa80e89", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0001_core_schema.py": "sha256:c65f076a7b56fb93ee67869e04d922ea396eab72a4c2d2f0dabd706c918aa081", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0002_runtime_ports.py": "sha256:d3ce15463841b3c13eaafdd137a65d4cf2839c0b8e8fddcb2cb2f1adbceb9f00", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0003_repository_navigation.py": "sha256:fb2d2cb5ed10f1760ab789ced8d43c657c1bedc29ba666231a70a18636160902", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0004_workload_projection.py": "sha256:87ce668bfef5cf4aaf0cfd3b48d498f2370f68e06a6e66375e446af6fbbb9c96", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0005_message_identity_aliases.py": "sha256:ec05d2c3cb906b78cdec4d220a7ce09264c38904c792cdad3cd1082e7eace7c0", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0006_outcome_outbox.py": "sha256:05effdf6f258836d1cd223f9d9fc3447d264484021d3a51cfa42517453d613e1", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/__init__.py": "sha256:569f6d7e5cc1c17b7b1eee3eec3b82774b745d01ee1dfdf851a5c6f5c337f0bb", + "app/.venv/lib/python3.12/site-packages/hub_core/models/__init__.py": "sha256:c0b6de4986614a163dbb2467d15882eadbd66800478a50de4d6404198d1f773a", + "app/.venv/lib/python3.12/site-packages/hub_core/models/agent_message.py": "sha256:23d16eeaffe780f326b08e6c441100e6ae7b4075bbb6421734c06156a87c4375", + "app/.venv/lib/python3.12/site-packages/hub_core/models/base.py": "sha256:85bb40bde6f4cf8e6c5700a3a016a711fab4adff77c5eb78f89827fe28b9537b", + "app/.venv/lib/python3.12/site-packages/hub_core/models/capability_catalog.py": "sha256:eebbb31f264821a61662d3c9e8c7eba74f46d7f68b946e35f8127343bf2ff9c4", + "app/.venv/lib/python3.12/site-packages/hub_core/models/capability_request.py": "sha256:70a867c82aaa061a4e1c671b023d213032464e776226280f99e2ca192e2a6eba", + "app/.venv/lib/python3.12/site-packages/hub_core/models/domain.py": "sha256:ddf45c37e3c37014ddd9148be01cf104658e1601abba2a8ba96f7680cdb581b3", + "app/.venv/lib/python3.12/site-packages/hub_core/models/managed_repo.py": "sha256:835c5d44581daf7d7dd95325e3f7fdf0add4d529b83779ed83b5e812dcb3aa61", + "app/.venv/lib/python3.12/site-packages/hub_core/models/message_identity_alias.py": "sha256:d07d59cd9c9351669e8319727d08bc0e9bb7e0ee36bf8a34c0c258f0b4ea61e4", + "app/.venv/lib/python3.12/site-packages/hub_core/models/progress_event.py": "sha256:ee750127db2f49c5b9b94773a408f7f965d834b02e6d962220f4bc762309161f", + "app/.venv/lib/python3.12/site-packages/hub_core/models/tpsc.py": "sha256:cb28cbe3512486adb73c0bce633b3c542a41a64e7ec673e86a5a25ab20d94afe", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/__init__.py": "sha256:800d1c45f597fcb4970ca7a83acd2b36016006efbdf638e14a3482a954d9046d", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/capabilities.py": "sha256:18a403ad6ac961bc490543b698e079336f60ef9902a6cd71ef9899076660d5c0", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/domains.py": "sha256:d4c4061d2ab0d2d6390a10f4f815deb0b93b3979345aee965b666110ba32e6e0", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/messages.py": "sha256:903bd4f8c8ca599b606cf2229315de21097360816fcda907159dac4f48cee512", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/policy.py": "sha256:358271263295fdebb5bcb95c3a27bd3ea456964a77bc01c3f784fb7a8754aacf", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/progress.py": "sha256:680cf4dea00a1734d7d70ef7880acc8fd39f045521baa47f415c17934779d18a", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/repos.py": "sha256:1bca6c9b2b5bbe172f5b935b763ac1e399b1d403cdc2c463000ae79f843257a2", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/tpsc.py": "sha256:706815b01be1c0320bf73cf9cff3e9415c1f27b8449ee9e6fea67b12d3042fd1", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/__init__.py": "sha256:c522e626373407bf9bcd727dac7bb812cbdc8c3ef5bb6509a74949e5b49ab4c2", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/app.py": "sha256:87b077498bbe321c73139e51f7ca689fdc7963a98c4d72a5a3bbcc564f47ee76", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/cli.py": "sha256:98ec00f2a12911245827f515877472ae1c37cea65a42454494450ffbe7380e57", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/compat.py": "sha256:9f1c4575bb406ae1174da1a005ec16f44ace63768617e11164b44b4051162d0d", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/compat_catalogs.py": "sha256:250f61ea39cced32c8cd932c4e770ae8be54ff1cf1e257ee2c82324bde0d7a26", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/config.py": "sha256:009b2fc5d1f8fc390d478b01444f610ada91e5fee30534936382be2529a843fc", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/inbox_projection.py": "sha256:84499238654310b86f7a97f2817163ff4c4da0dfce562c677294fa3dfef7f398", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/migration.py": "sha256:d12731fa581c48bf58deec19405ece977c89d08993b2a2ad047cb1fd17318ea8", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/models.py": "sha256:367ca4aa29f59f8e3f59eab22f12782146cf623fa7ac7c22346c794b85a88185", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/ports.py": "sha256:ab70a401deae73389761a0e88dc8ee843df00a671fae6919b1f7eed344cfb542", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/postgres_store.py": "sha256:9286e7845009b66f00069d67177733dabe372d79986c33ca9b43e00dfa5a2341", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/repo_manager_client.py": "sha256:8fa305277c5f3ddfdbe1daf4023ce6c3cde03b5c18c1292dd6aac3fe995aabe1", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/repository_navigation.py": "sha256:f3503596781f3e7f7d53dd28dd3aaf563905f1398575b40c8080e2b1b9978b1e", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/repository_navigation_routes.py": "sha256:eab78ab418a7b542dcdcab5da023bacc65fb50520853f8d179accb2105e373cf", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/store.py": "sha256:2fb78f14bab8df08807322d6f6416745856d69e6001381246abbac879891858d", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/tables.py": "sha256:a5ff72a9c54eedcc8bb81330e62ee72578a383a1d03a1acb598c72c96cdfbe9e", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/validation.py": "sha256:2add804d95d5d0469d6d8d605fbd1013885da972489a017260c6fddef7b80c79", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/workload_projection.py": "sha256:8500260404b0c566a62e51fef63ee320d4e3dafe5e2467f44db884296b9e3bf4", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/workload_projection_routes.py": "sha256:5c71189b98867f2f1f7612f47ee69c0ec3ddf836b9b1c7e134b98a2be45791de", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/__init__.py": "sha256:dfa2ec2d125f03a532637d2fbef3058ebe1f85c515ff42a930198e164b7812f7", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/agent_message.py": "sha256:d6a7f40dc9a3c61be761f4d2e2c08f726fb0a423ef73e273a7cd97c69ae6c6a3", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/capability.py": "sha256:949c55cb1f2694de4617ad53dc9cb7bc0e72addd7b9d0f104b93d783e4edc647", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/doi.py": "sha256:73d675aecabd5a62ae13184494a4b9db122ad24b3132e1d0e908eef802382f36", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/domain.py": "sha256:872a704fea959d2e4d0ff771770a97160457282218f4748ba4f830c489543aac", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/managed_repo.py": "sha256:a7ab3b1ab399da81324693dcd5d3feeccb211642b10f11cd3f03c7fe6ba751d4", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/policy.py": "sha256:bdaef1640783ac325a050cadf214e731d7c8e5e3a35dbb8f7562d5abbd209a4c", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/progress_event.py": "sha256:9ac7b7fd4881d424bfe59c5001554fd7302243e8489d5e777584d11ead1db328", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/tpsc.py": "sha256:5640d96a7fa862a468eeb0d6da002697b1f58e4cd675a4603b91e448d4db851e", + "app/.venv/lib/python3.12/site-packages/hub_core/security/__init__.py": "sha256:2754e25ec0f5725c33cb0b4dff1b7d10b364ebd828e609bb5b44eee3309d2d60", + "app/.venv/lib/python3.12/site-packages/hub_core/security/account_reader.py": "sha256:27019616b84cf030969a8e3c0850b5ae52f336008fd9daa4c26360566e74a39b", + "app/.venv/lib/python3.12/site-packages/hub_core/security/audit.py": "sha256:94cb85d71f065443c6423871b59d41e929af0441c95928273caf3e38dad8125c", + "app/.venv/lib/python3.12/site-packages/hub_core/security/boundary.py": "sha256:a1629ac717672276f61015c83f7af6e375bbd8c1234c712dd3d225da307ae0d6", + "app/.venv/lib/python3.12/site-packages/hub_core/security/browser.py": "sha256:fd474ee4b9611fe8dd2c60111402c2fce67d680a7da3519b5d4a495a6b559b7a", + "app/.venv/lib/python3.12/site-packages/hub_core/security/config.py": "sha256:7d604f6aeebde393a371ec3e0ab174934e10808c29fb370acba031486e9c02a3", + "app/.venv/lib/python3.12/site-packages/hub_core/security/context.py": "sha256:1181bbf12ba86bfd5046dab2f3a22a64ee3686be6dd52ab3e843303349b13a52", + "app/.venv/lib/python3.12/site-packages/hub_core/security/facts.py": "sha256:3de4db38ffd3f86f4918d76f811289cd501be3c28dcba16f5088aa2a2b7529ce", + "app/.venv/lib/python3.12/site-packages/hub_core/security/identity.py": "sha256:d7a0bab9d59a5f342fdedc9723d818a9d2537a59c6a9415455786af748f912e9", + "app/.venv/lib/python3.12/site-packages/hub_core/security/policy.py": "sha256:a2370e9ea5b04b1d5a429644d7f81edb1cbe8e15214c23b16cd6f949613eebd6", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/__init__.py": "sha256:ce4ddb30ccc4fd2c4ee59e8a3c088a12165171af02aea957f17f72cd868e1899", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/pagination.py": "sha256:366250b85052c7aabc2a2262521d34233124ba3a41026042792f8eda706ecb4f", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/paths.py": "sha256:988a889be74f0626ca3c27b1d6677bd4a556e35de389c060d07ab64fa1c22fc8", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/routing.py": "sha256:c94b44c5f1ab723e123503e20e0309f28abeeabea6d51beda79247d99852ad1e", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/slugs.py": "sha256:eda7a7d18ff21a4d949223b75a2b615a949e615f461152a9cb9a2cf74b491e2d", + "app/api/routers/workstreams.py": "sha256:9c9bf4376dd323b52109912bb3f615949e89ac02c8b88b4720f569f8565ad1d6", + "app/api/services/forge_projection.py": "sha256:b980e62cbd85c3e7df42b01abf14354e04133374db94af6531dcd91629c3487d", + "app/api/services/historical_projection.py": "sha256:e24e57c58f4aaa4ec9d9bf088009ac69006e53f75b9477ee53dc26c4e850b975", + "app/migrations/versions/c4d5e6f7a8b9_inbox_feed_revision.py": "sha256:48f1730037be99b5623e878d7f20a06bec243ce27317fde81c82e16006d7b3ce", + "app/scripts/consistency_check.py": "sha256:eaee916f46a11f49d2621fc9386717d73b7fd517acbe4b695e7b551d67bfa8f7" + }, + "layers": [ + { + "digest": "sha256:304074f06047f3dee0c586de265e0e27b577930bc80dc7f97f3829b188bc4fb0", + "compressed_bytes": 30855435, + "archive_entries": 3271, + "whiteouts": 0 + }, + { + "digest": "sha256:75b6a36c64a1cf3520fc4b4aae4739d5caa8a6a05c27835a920a61784c9c32f8", + "compressed_bytes": 1294052, + "archive_entries": 553, + "whiteouts": 0 + }, + { + "digest": "sha256:6912e23eb44595b44dc6d9882b34f305ad6f6e9667cec70b13e5dbc4f8cd97f4", + "compressed_bytes": 12121637, + "archive_entries": 1828, + "whiteouts": 0 + }, + { + "digest": "sha256:bbc5a12237474ec0b23b5051260d56d6436a24d70d9cad961adebe7a037ed813", + "compressed_bytes": 249, + "archive_entries": 8, + "whiteouts": 0 + }, + { + "digest": "sha256:e16e3995c15e64ae03e700d74eab2389f1151e6bd5d40f55faa047e9124aeb20", + "compressed_bytes": 93, + "archive_entries": 1, + "whiteouts": 0 + }, + { + "digest": "sha256:14568be832d0c877348328755de4e94cf4d0397d03f2161f6995e3b3e756e802", + "compressed_bytes": 55305356, + "archive_entries": 2898, + "whiteouts": 62 + }, + { + "digest": "sha256:2a6eb309967b62bf0c483ef7ca6b595a3222af9824d7d76df93588d2db516195", + "compressed_bytes": 148, + "archive_entries": 2, + "whiteouts": 0 + }, + { + "digest": "sha256:fb5adb1b205f7c2a5a53dc53c300aa7fa968e3bf2ba85bfcf569b8f45131ae94", + "compressed_bytes": 940, + "archive_entries": 2, + "whiteouts": 0 + }, + { + "digest": "sha256:2971f0a710787419ec533843974be96de47b083059b02e4a0dfdd48a98fdb458", + "compressed_bytes": 35700592, + "archive_entries": 5471, + "whiteouts": 0 + }, + { + "digest": "sha256:ab3e8c3939ccb8f5d731704f1e752ddb7fa9d135402990246724232683b00ff0", + "compressed_bytes": 598, + "archive_entries": 3, + "whiteouts": 0 + }, + { + "digest": "sha256:d1dbbe039887ff15d19e26f1fb3c559ea123a580c77bff5e286de1d6e3540595", + "compressed_bytes": 102610, + "archive_entries": 143, + "whiteouts": 0 + }, + { + "digest": "sha256:b62bd61a70f8477e54c01355ae337a553326e09974eebd65870d66f0b2f1ae3f", + "compressed_bytes": 109565, + "archive_entries": 160, + "whiteouts": 0 + }, + { + "digest": "sha256:99e6faeb00ebe8336cefd27da2bbedb3b4edc9d3c9e36ce05097163ba105a036", + "compressed_bytes": 475, + "archive_entries": 2, + "whiteouts": 0 + }, + { + "digest": "sha256:f910ccb3f35e942317fb817caf1ea13ddd0a49263e7bfbf6b8be6d132a663b29", + "compressed_bytes": 243471, + "archive_entries": 181, + "whiteouts": 0 + }, + { + "digest": "sha256:793e1ade12c8a9541429984963ef1084a96d41a69cbd5669d655829982b3bea7", + "compressed_bytes": 1675, + "archive_entries": 7, + "whiteouts": 0 + }, + { + "digest": "sha256:7a36c195ce44bc1ce1c7964cfd1fa3f3c32daf3dc9568a4ff7b550b0d93ef0fc", + "compressed_bytes": 36056, + "archive_entries": 7, + "whiteouts": 0 + }, + { + "digest": "sha256:231fbd5b3576f8c671a67522bad6a83935990a9a7fbe120ff26b422f78bd5f60", + "compressed_bytes": 33942, + "archive_entries": 63, + "whiteouts": 0 + }, + { + "digest": "sha256:23a0876f55835a5ee79ed45c5a67ba7ac9ca1e4e3168dfa2436dd234a370434a", + "compressed_bytes": 10801, + "archive_entries": 8, + "whiteouts": 0 + }, + { + "digest": "sha256:9a13796803f4255f7c8a1df9b693923fa002647c2690a148ebf901e4de66cb4f", + "compressed_bytes": 2116, + "archive_entries": 3, + "whiteouts": 0 + }, + { + "digest": "sha256:48d53f6a4a6c1a1f0ee5b6f45e8e8b47792ff9a4416c00c9c92454634155f915", + "compressed_bytes": 155200, + "archive_entries": 67, + "whiteouts": 0 + }, + { + "digest": "sha256:d5d5b11d971cbb2269dc1684898da2c0a41bff26630affbd8123ba7c82bd41b1", + "compressed_bytes": 2963, + "archive_entries": 7, + "whiteouts": 0 + }, + { + "digest": "sha256:d8438040b445dc9c2ad739b44d49d347d4c276ba889d5cdd8153fdadbe14f34d", + "compressed_bytes": 538, + "archive_entries": 4, + "whiteouts": 0 + } + ], + "python_package_metadata": { + "usr/local/lib/python3.12/site-packages/pip-25.0.1.dist-info/METADATA": { + "name": "pip", + "version": "25.0.1", + "metadata_sha256": "sha256:4fa7318cf30f979db7cec45c12cbbc2b4f88a15f12eefbf59a6291d0a03af926" + }, + "usr/local/lib/python3.12/site-packages/uv-0.13.1.dist-info/METADATA": { + "name": "uv", + "version": "0.13.1", + "metadata_sha256": "sha256:3554d26fcb1db453b54bde82aa3830ddc37179f3ac4394d670361553c02d0cf2" + }, + "app/.venv/lib/python3.12/site-packages/aiofile-3.12.3.dist-info/METADATA": { + "name": "aiofile", + "version": "3.12.3", + "metadata_sha256": "sha256:faaa3115c495ac1989aa6bda262b79a6c97e056c83e04afcfc71584a59e3ceb1" + }, + "app/.venv/lib/python3.12/site-packages/alembic-1.20.0.dist-info/METADATA": { + "name": "alembic", + "version": "1.20.0", + "metadata_sha256": "sha256:bd32c118c43955c106bfa4255b2fb5ac9db410b0f7255a4cafb14b9e221ff41c" + }, + "app/.venv/lib/python3.12/site-packages/annotated_doc-0.0.5.dist-info/METADATA": { + "name": "annotated-doc", + "version": "0.0.5", + "metadata_sha256": "sha256:8c24d70c5d9153d22123353a906042fd7603df2d15c2196290b0f8a962558c46" + }, + "app/.venv/lib/python3.12/site-packages/annotated_types-0.8.0.dist-info/METADATA": { + "name": "annotated-types", + "version": "0.8.0", + "metadata_sha256": "sha256:614985b278f601b8ef863f82783b991cc3ada4b89f592eb71c7c48c5f2ef2298" + }, + "app/.venv/lib/python3.12/site-packages/anyio-4.15.1.dist-info/METADATA": { + "name": "anyio", + "version": "4.15.1", + "metadata_sha256": "sha256:043aecb571af7189e8a6c528f5d8e32545f1b2cdfaaf761d51e6d5b67ea3ca81" + }, + "app/.venv/lib/python3.12/site-packages/asyncpg-0.32.0.dist-info/METADATA": { + "name": "asyncpg", + "version": "0.32.0", + "metadata_sha256": "sha256:10c1e84f762a55c69630704e8a429793dcab1ce5edba7deadb35f40476d502c9" + }, + "app/.venv/lib/python3.12/site-packages/attrs-26.1.0.dist-info/METADATA": { + "name": "attrs", + "version": "26.1.0", + "metadata_sha256": "sha256:4cd40e690f23bf37cbcad34efd6758e062df1df07c86833f7e3ce95bf1fa38cc" + }, + "app/.venv/lib/python3.12/site-packages/authlib-1.9.1.dist-info/METADATA": { + "name": "Authlib", + "version": "1.9.1", + "metadata_sha256": "sha256:7141e57ccac936724fd004b401d0695e0ae48f32f2aee14d90259a9d4bc4fdbd" + }, + "app/.venv/lib/python3.12/site-packages/beartype-0.23.1.dist-info/METADATA": { + "name": "beartype", + "version": "0.23.1", + "metadata_sha256": "sha256:ac75ec7a0bd6407db75c5c1da887798dfd4d5d12099e299602d03baa0ba22986" + }, + "app/.venv/lib/python3.12/site-packages/cachetools-7.2.2.dist-info/METADATA": { + "name": "cachetools", + "version": "7.2.2", + "metadata_sha256": "sha256:76bbee4a06789a8c42253966988a07aff8f2f29cb1ae3ff9d6f16d661f01f2d4" + }, + "app/.venv/lib/python3.12/site-packages/caio-0.12.9.dist-info/METADATA": { + "name": "caio", + "version": "0.12.9", + "metadata_sha256": "sha256:3128051d993cbf71f589f68b0082167fe1c910b17379d27653b6945ec848c3c8" + }, + "app/.venv/lib/python3.12/site-packages/certifi-2026.7.22.dist-info/METADATA": { + "name": "certifi", + "version": "2026.7.22", + "metadata_sha256": "sha256:ef5af1638fbb23676ac3c5777dfcfc2cd9c348fe4172ed5ba3d277655b248090" + }, + "app/.venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA": { + "name": "cffi", + "version": "2.1.1", + "metadata_sha256": "sha256:558bafb9093a8e790175d9ecff9688382981d744877dad86fd6770db0f4dc918" + }, + "app/.venv/lib/python3.12/site-packages/click-8.5.0.dist-info/METADATA": { + "name": "click", + "version": "8.5.0", + "metadata_sha256": "sha256:e87bce0bd194de70dfb8e708e0a6b0483009f25611804eaf87bfeb63e6c20501" + }, + "app/.venv/lib/python3.12/site-packages/cryptography-50.0.2.dist-info/METADATA": { + "name": "cryptography", + "version": "50.0.2", + "metadata_sha256": "sha256:047cfc71226409de4318b360aef15c63a2adf609731e3dcf7fe932f14ea042ee" + }, + "app/.venv/lib/python3.12/site-packages/cyclopts-5.2.0.dist-info/METADATA": { + "name": "cyclopts", + "version": "5.2.0", + "metadata_sha256": "sha256:a1bcd1e587744ec6f5c5c64126ac03a03fc2468f7c91cd1c44572a5ac11dcb2a" + }, + "app/.venv/lib/python3.12/site-packages/dnspython-2.9.0.dist-info/METADATA": { + "name": "dnspython", + "version": "2.9.0", + "metadata_sha256": "sha256:d25dbd09b39758cd5cebe518701012a6278731986cd384fc4a7f25e78f7de929" + }, + "app/.venv/lib/python3.12/site-packages/docstring_parser-0.18.0.dist-info/METADATA": { + "name": "docstring_parser", + "version": "0.18.0", + "metadata_sha256": "sha256:cbc42027997fd4b194ae5fd064a4d1e57b92976941d0c26d369561a7c016a333" + }, + "app/.venv/lib/python3.12/site-packages/email_validator-2.3.0.dist-info/METADATA": { + "name": "email-validator", + "version": "2.3.0", + "metadata_sha256": "sha256:2a97b81eefcd856bc80b0346f47fa2d800b9a438bf8f9231ae00fe931d5c9fbc" + }, + "app/.venv/lib/python3.12/site-packages/exceptiongroup-1.3.1.dist-info/METADATA": { + "name": "exceptiongroup", + "version": "1.3.1", + "metadata_sha256": "sha256:81984a523a2f7a522ad12bea784a8bb85edec0805ebbd0fb4e350169a36dd802" + }, + "app/.venv/lib/python3.12/site-packages/fastapi-0.143.3.dist-info/METADATA": { + "name": "fastapi", + "version": "0.143.3", + "metadata_sha256": "sha256:364f68b16f489abe36d621da2fa727f774bec90916cd3325b78e422af3b59a5f" + }, + "app/.venv/lib/python3.12/site-packages/fastmcp-4.1.0.dist-info/METADATA": { + "name": "fastmcp", + "version": "4.1.0", + "metadata_sha256": "sha256:cfdcfd24ad904514087ec1735baa54df174f72f570833a16b6074887cfc51fa6" + }, + "app/.venv/lib/python3.12/site-packages/fastmcp_slim-4.1.0.dist-info/METADATA": { + "name": "fastmcp-slim", + "version": "4.1.0", + "metadata_sha256": "sha256:e8eca5fbae348ee6dcda0a0f1bf0dffa493e8d4d8763647ee48f4f871e35c998" + }, + "app/.venv/lib/python3.12/site-packages/greenlet-3.5.6.dist-info/METADATA": { + "name": "greenlet", + "version": "3.5.6", + "metadata_sha256": "sha256:b9b4cbbc1f3165e50fbc4696c433fe82b8a151fde65eede28fb6ec5efb3e1fab" + }, + "app/.venv/lib/python3.12/site-packages/griffelib-2.3.2.dist-info/METADATA": { + "name": "griffelib", + "version": "2.3.2", + "metadata_sha256": "sha256:fd24a68ed08309718d5759b8de3b90392b5804240d94834e6455be110ead34b3" + }, + "app/.venv/lib/python3.12/site-packages/h11-0.16.0.dist-info/METADATA": { + "name": "h11", + "version": "0.16.0", + "metadata_sha256": "sha256:28f326098ac09fcba79b8f180f96087c841fe2456215cb7b872a9c7d5cd19d64" + }, + "app/.venv/lib/python3.12/site-packages/httpcore-1.0.9.dist-info/METADATA": { + "name": "httpcore", + "version": "1.0.9", + "metadata_sha256": "sha256:fe2d4fda6199128978779e0cf27f3c045c531863fcdd987eacc74f3a18d41c21" + }, + "app/.venv/lib/python3.12/site-packages/httpcore2-2.13.1.dist-info/METADATA": { + "name": "httpcore2", + "version": "2.13.1", + "metadata_sha256": "sha256:37a0ea0674e98b7c3a1f99c17d9bb5457de27a0f93c8b6560c9d17d525139abb" + }, + "app/.venv/lib/python3.12/site-packages/httptools-0.9.0.dist-info/METADATA": { + "name": "httptools", + "version": "0.9.0", + "metadata_sha256": "sha256:8a743396f45465204e2b44b43cb57ec4a343c423f52604bbaf1777fd438698c9" + }, + "app/.venv/lib/python3.12/site-packages/httpx-0.28.1.dist-info/METADATA": { + "name": "httpx", + "version": "0.28.1", + "metadata_sha256": "sha256:febb9b0f8f3e80d57c8199c304f35c4336e8581d1d18d7983c92766b82793b25" + }, + "app/.venv/lib/python3.12/site-packages/httpx2-2.13.1.dist-info/METADATA": { + "name": "httpx2", + "version": "2.13.1", + "metadata_sha256": "sha256:b75b03a003b5593e000907cf7239fcc3f688b8f17db4ecff883d11221ea988fc" + }, + "app/.venv/lib/python3.12/site-packages/idna-3.20.dist-info/METADATA": { + "name": "idna", + "version": "3.20", + "metadata_sha256": "sha256:dbd8c14c1e4ca1e0c9824a6dbc7cbbf78884f38eb52d91148cd3025f671e4b85" + }, + "app/.venv/lib/python3.12/site-packages/jaraco.classes-3.4.0.dist-info/METADATA": { + "name": "jaraco.classes", + "version": "3.4.0", + "metadata_sha256": "sha256:2e6b102232edd45ae1bb8a6b4091fd40cf3201a6bb6fd4bc97c5e8cd765a44b8" + }, + "app/.venv/lib/python3.12/site-packages/jaraco_context-6.1.2.dist-info/METADATA": { + "name": "jaraco.context", + "version": "6.1.2", + "metadata_sha256": "sha256:f1b65b60aea229af54e09b17ae0036cf048fe4a6161fa2e7966a8ea5c2321491" + }, + "app/.venv/lib/python3.12/site-packages/jaraco_functools-4.6.0.dist-info/METADATA": { + "name": "jaraco.functools", + "version": "4.6.0", + "metadata_sha256": "sha256:6ed3cae5b8eef084c3c7b2385a0a8ac4c8155ab7c729212bea099bee69d5bd6c" + }, + "app/.venv/lib/python3.12/site-packages/jeepney-0.9.0.dist-info/METADATA": { + "name": "jeepney", + "version": "0.9.0", + "metadata_sha256": "sha256:b8e6c353e9aaed0ed0144029556417fda23b64f344e718331907054ba05b8c62" + }, + "app/.venv/lib/python3.12/site-packages/joserfc-1.7.5.dist-info/METADATA": { + "name": "joserfc", + "version": "1.7.5", + "metadata_sha256": "sha256:17df62bbdc7212bbcda3144e72720a62fc34bbf76c573062939120738545250f" + }, + "app/.venv/lib/python3.12/site-packages/jsonref-1.1.0.dist-info/METADATA": { + "name": "jsonref", + "version": "1.1.0", + "metadata_sha256": "sha256:f98db3890394fba23912faab86ad8f70ed564fc8c885298b636b270f28453e43" + }, + "app/.venv/lib/python3.12/site-packages/jsonschema-4.26.0.dist-info/METADATA": { + "name": "jsonschema", + "version": "4.26.0", + "metadata_sha256": "sha256:05b189866ca98a96da3934bf6b83687ced3ff85325273b77e16b705f6d8b26d2" + }, + "app/.venv/lib/python3.12/site-packages/jsonschema_path-0.5.0.dist-info/METADATA": { + "name": "jsonschema-path", + "version": "0.5.0", + "metadata_sha256": "sha256:cd7e9a4426436980f099d826dbce8f61afa6603b496385fba9a9eb0ad59cdd48" + }, + "app/.venv/lib/python3.12/site-packages/jsonschema_specifications-2025.9.1.dist-info/METADATA": { + "name": "jsonschema-specifications", + "version": "2025.9.1", + "metadata_sha256": "sha256:35abd41757f32b4ea24756920ded47b70173d77cbc052a5a6d3ab583b2e8d89d" + }, + "app/.venv/lib/python3.12/site-packages/keyring-25.7.0.dist-info/METADATA": { + "name": "keyring", + "version": "25.7.0", + "metadata_sha256": "sha256:bd54de98fede6dc3e1f3cd89b4e37c95d8842a523bdbb9e52ab40edff1837163" + }, + "app/.venv/lib/python3.12/site-packages/mako-1.4.3.dist-info/METADATA": { + "name": "Mako", + "version": "1.4.3", + "metadata_sha256": "sha256:39ea65f21e706265428ea6f2925520f419a10f0113a59318192ed38175d8838b" + }, + "app/.venv/lib/python3.12/site-packages/markdown_it_py-4.2.0.dist-info/METADATA": { + "name": "markdown-it-py", + "version": "4.2.0", + "metadata_sha256": "sha256:72c36ff516755443b1ecb61e17b2567a990230b49a504b0eb0c42d5f82448a9c" + }, + "app/.venv/lib/python3.12/site-packages/markupsafe-3.0.4.dist-info/METADATA": { + "name": "MarkupSafe", + "version": "3.0.4", + "metadata_sha256": "sha256:66767d76388ece15d49d50dafb655891ef5d868715e7128e7f7d737a70b353c4" + }, + "app/.venv/lib/python3.12/site-packages/mcp-2.3.0.dist-info/METADATA": { + "name": "mcp", + "version": "2.3.0", + "metadata_sha256": "sha256:a94577513a4fa0cb639c279c1ad6f4d49650872d45f2f4ab9bb2d9c2a505d457" + }, + "app/.venv/lib/python3.12/site-packages/mcp_types-2.3.0.dist-info/METADATA": { + "name": "mcp-types", + "version": "2.3.0", + "metadata_sha256": "sha256:eb973e8b7f53d52ab1df9d1f18854ffa84f074f6052e310089e2655961c48ca9" + }, + "app/.venv/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/METADATA": { + "name": "mdurl", + "version": "0.1.2", + "metadata_sha256": "sha256:b53b29d48f499367053fda3c81e7ce27d2558380ebbf83e66023b02eb7ddd25d" + }, + "app/.venv/lib/python3.12/site-packages/more_itertools-11.2.1.dist-info/METADATA": { + "name": "more-itertools", + "version": "11.2.1", + "metadata_sha256": "sha256:8c558bfab61818450e78db4018281f8f7b22115e681cd53ae1d9d4931be54f15" + }, + "app/.venv/lib/python3.12/site-packages/nats_py-2.16.0.dist-info/METADATA": { + "name": "nats-py", + "version": "2.16.0", + "metadata_sha256": "sha256:58ddf3dd698f9026d397e5bb56a0baac723ba221d3dddae0831cfacc75c34255" + }, + "app/.venv/lib/python3.12/site-packages/openapi_pydantic-0.6.0.dist-info/METADATA": { + "name": "openapi-pydantic", + "version": "0.6.0", + "metadata_sha256": "sha256:e46a181161c62fa24d7d3d0ff2eaabea3a7b580ad7aa9f70d1f08bd129d46f49" + }, + "app/.venv/lib/python3.12/site-packages/opentelemetry_api-1.45.1.dist-info/METADATA": { + "name": "opentelemetry-api", + "version": "1.45.1", + "metadata_sha256": "sha256:5bc71e90cb421be92a43bf5ad5b0f25dccfa2a24ddceaa2877779879962a4c9e" + }, + "app/.venv/lib/python3.12/site-packages/packaging-26.3.dist-info/METADATA": { + "name": "packaging", + "version": "26.3", + "metadata_sha256": "sha256:70fdb89fc4d4a9a043bf7372b8972bcc883fddff34ab55e9cf80d73875384763" + }, + "app/.venv/lib/python3.12/site-packages/pathable-0.6.0.dist-info/METADATA": { + "name": "pathable", + "version": "0.6.0", + "metadata_sha256": "sha256:c418727931012c2306cb8fa2726d044616c3178c1fc078ce182385dcf2b59922" + }, + "app/.venv/lib/python3.12/site-packages/platformdirs-4.13.3.dist-info/METADATA": { + "name": "platformdirs", + "version": "4.13.3", + "metadata_sha256": "sha256:3814840758f662bb98053d08f99085fb77721812258573732b092fd7f2120c30" + }, + "app/.venv/lib/python3.12/site-packages/psycopg2_binary-2.9.13.dist-info/METADATA": { + "name": "psycopg2-binary", + "version": "2.9.13", + "metadata_sha256": "sha256:a5267b4520191137e34589704162fce02cfd40efcfeb899c45187c7f6bfea7e5" + }, + "app/.venv/lib/python3.12/site-packages/py_key_value_aio-0.4.6.dist-info/METADATA": { + "name": "py-key-value-aio", + "version": "0.4.6", + "metadata_sha256": "sha256:0c1af357b841bc3862e39543faa863346c487be9f2e2ffefba009e957a256bee" + }, + "app/.venv/lib/python3.12/site-packages/pycparser-3.11.dist-info/METADATA": { + "name": "pycparser", + "version": "3.11", + "metadata_sha256": "sha256:e3a74c846648bb55f4f907284b745e2003b87b96d9c9d17a8a50cf37804541c9" + }, + "app/.venv/lib/python3.12/site-packages/pydantic-2.14.1.dist-info/METADATA": { + "name": "pydantic", + "version": "2.14.1", + "metadata_sha256": "sha256:4d4c8e8d5e6a27d5208f0d7949f25628e6747133034969d4d1399b1ad5394036" + }, + "app/.venv/lib/python3.12/site-packages/pydantic_core-2.50.1.dist-info/METADATA": { + "name": "pydantic_core", + "version": "2.50.1", + "metadata_sha256": "sha256:ae6817764b603fa2300cd31b9566ecc33476df46163c4150fffc353121a166f2" + }, + "app/.venv/lib/python3.12/site-packages/pydantic_settings-2.16.0.dist-info/METADATA": { + "name": "pydantic-settings", + "version": "2.16.0", + "metadata_sha256": "sha256:470656112388bca95fd7d27b8954fda1f11dd6579563cfb9c0ea0445d1746b77" + }, + "app/.venv/lib/python3.12/site-packages/pygments-2.21.0.dist-info/METADATA": { + "name": "Pygments", + "version": "2.21.0", + "metadata_sha256": "sha256:1dde075570136774c706bf0009183a793fe0ee262e4a5590cc6eff8453eedd43" + }, + "app/.venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA": { + "name": "PyJWT", + "version": "2.15.1", + "metadata_sha256": "sha256:1ea0c9f139b8c928276b3628af165955f6f764491448a6ad8f103cdcbb382da3" + }, + "app/.venv/lib/python3.12/site-packages/pyperclip-1.11.0.dist-info/METADATA": { + "name": "pyperclip", + "version": "1.11.0", + "metadata_sha256": "sha256:2493839e0751761f27d39aa6d5c5dfd1df839c45da8f328aba4ae4102868b825" + }, + "app/.venv/lib/python3.12/site-packages/python_dotenv-1.2.4.dist-info/METADATA": { + "name": "python-dotenv", + "version": "1.2.4", + "metadata_sha256": "sha256:87cfee6042412d48df1100ea7822684988c3f2b79de7a250f4717f4df3026d6f" + }, + "app/.venv/lib/python3.12/site-packages/python_multipart-0.0.32.dist-info/METADATA": { + "name": "python-multipart", + "version": "0.0.32", + "metadata_sha256": "sha256:e9d399d7dea5eddf0e4d24b5c24687a82e7e50bf2c2b30f8f8a06a64d887dd86" + }, + "app/.venv/lib/python3.12/site-packages/pyyaml-6.0.3.dist-info/METADATA": { + "name": "PyYAML", + "version": "6.0.3", + "metadata_sha256": "sha256:03c3b415ed38d09faedc49360e930769b40c58f68585e6de00e2e4916a858d34" + }, + "app/.venv/lib/python3.12/site-packages/referencing-0.37.0.dist-info/METADATA": { + "name": "referencing", + "version": "0.37.0", + "metadata_sha256": "sha256:c93b00e6ab1524fd60848376604c189a114374776475c25a31d57be47b29de6a" + }, + "app/.venv/lib/python3.12/site-packages/rich-15.0.0.dist-info/METADATA": { + "name": "rich", + "version": "15.0.0", + "metadata_sha256": "sha256:fad34fc603fac4481bf81f8dd629492fc302c0ec31909c86644751512afb2e3b" + }, + "app/.venv/lib/python3.12/site-packages/rich_rst-2.2.0.dist-info/METADATA": { + "name": "rich-rst", + "version": "2.2.0", + "metadata_sha256": "sha256:2cd1f39149e69bd94c4f1c30cb26c763e45689e6d6527b4c23afa1112c48f165" + }, + "app/.venv/lib/python3.12/site-packages/rpds_py-2026.9.1.dist-info/METADATA": { + "name": "rpds-py", + "version": "2026.9.1", + "metadata_sha256": "sha256:5d72dca2e387c8d2b4180b68ee87c15b64751e059100a6db58891ec9995445c3" + }, + "app/.venv/lib/python3.12/site-packages/secretstorage-3.5.0.dist-info/METADATA": { + "name": "SecretStorage", + "version": "3.5.0", + "metadata_sha256": "sha256:b98e3dc42ff7e9b1bacce60dac2662cd9965fad6e4469fc9483c9eb99998c367" + }, + "app/.venv/lib/python3.12/site-packages/sqlalchemy-2.1.5.dist-info/METADATA": { + "name": "SQLAlchemy", + "version": "2.1.5", + "metadata_sha256": "sha256:7f568ea71aecfb29792ccee2c8b1345825e385d54b7e7bba755e445e53b5696f" + }, + "app/.venv/lib/python3.12/site-packages/sse_starlette-3.5.0.dist-info/METADATA": { + "name": "sse-starlette", + "version": "3.5.0", + "metadata_sha256": "sha256:6dc401682bdae1a3e1f31b1c320b7f926c354643993840393875ebfc171c9014" + }, + "app/.venv/lib/python3.12/site-packages/starlette-1.8.0.dist-info/METADATA": { + "name": "starlette", + "version": "1.8.0", + "metadata_sha256": "sha256:551e8d74d290002521c655b816b27654e49922b88cb474c8d710a893099036f8" + }, + "app/.venv/lib/python3.12/site-packages/truststore-0.10.5.dist-info/METADATA": { + "name": "truststore", + "version": "0.10.5", + "metadata_sha256": "sha256:1fd496f290853214e630d96f7163d2dd916f84ebe634b58aa827d6853e8f8610" + }, + "app/.venv/lib/python3.12/site-packages/typing_extensions-4.16.0.dist-info/METADATA": { + "name": "typing_extensions", + "version": "4.16.0", + "metadata_sha256": "sha256:b05084ca1d50879865178d9fff9fabeab61bdfb1f361bfbde95421ffc8f9be46" + }, + "app/.venv/lib/python3.12/site-packages/typing_inspection-0.4.4.dist-info/METADATA": { + "name": "typing-inspection", + "version": "0.4.4", + "metadata_sha256": "sha256:bad3d9e6342ef6750cf5128ec942327b8bebdce0b6e4d6f67cb15b27ae5118da" + }, + "app/.venv/lib/python3.12/site-packages/uncalled_for-0.4.1.dist-info/METADATA": { + "name": "uncalled-for", + "version": "0.4.1", + "metadata_sha256": "sha256:45a21666ddfa8ca8d4e2423c05edaeaa7827686a3ae4fed82b24427854745c2f" + }, + "app/.venv/lib/python3.12/site-packages/uvicorn-0.54.0.dist-info/METADATA": { + "name": "uvicorn", + "version": "0.54.0", + "metadata_sha256": "sha256:9399e5ddda3d26e842d6fb5420c38b0857aac568d53badbdc224b3a21339efa8" + }, + "app/.venv/lib/python3.12/site-packages/uvloop-0.23.0.dist-info/METADATA": { + "name": "uvloop", + "version": "0.23.0", + "metadata_sha256": "sha256:fe11a50198ffd4d9f1cb20922dc638ad459d5e63e6c615b0c1c69448d3362977" + }, + "app/.venv/lib/python3.12/site-packages/watchfiles-1.3.0.dist-info/METADATA": { + "name": "watchfiles", + "version": "1.3.0", + "metadata_sha256": "sha256:1fba87d08d66f10f7515e4817abd4ac7f27abf3300cb33b7ad3f79762987a502" + }, + "app/.venv/lib/python3.12/site-packages/websockets-17.2.dist-info/METADATA": { + "name": "websockets", + "version": "17.2", + "metadata_sha256": "sha256:0d5f1279d095e7ba84ef21614af0822dc500ccb2e51b7c3a19eda7159b2dade4" + }, + "app/.venv/lib/python3.12/site-packages/hub_core-0.2.0.dist-info/METADATA": { + "name": "hub-core", + "version": "0.2.0", + "metadata_sha256": "sha256:84a59c6ea36d6d8a0b91b76e52f351a5ce6f2fd9ace8a4c887b51bab05973953" + } + }, + "package_metadata_equal_to_deployed_image": true, + "hub_core_source_hashes_equal_to_deployed_image": true, + "image_executed": false, + "image_installed_or_daemon_pulled": false, + "anonymous_protocol_only": true, + "token_retained": false, + "limitations": [ + "Selected code hashes and package inventory do not prove full application acceptance or hermetic provenance.", + "Floating dependency origins remain unknown; observed byte changes require explicit review.", + "New API behavior is not deployed or natively accepted." + ] +} diff --git a/docs/changes/netkingdom-target-2026-10-17/guard-image-c103cbf-inspection.json b/docs/changes/netkingdom-target-2026-10-17/guard-image-c103cbf-inspection.json new file mode 100644 index 00000000..6b7cf3fa --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/guard-image-c103cbf-inspection.json @@ -0,0 +1,774 @@ +{ + "schema": "statehub.guard-image-inspection.v1", + "status": "verified-selected-public-image-bytes", + "source_commit": "c103cbf3c8bed5dba87a03e320595ddded9301a3", + "tag": "main-c103cbf", + "image_digest": "sha256:4cc4ce17bbcdb1b66132d07c5b7b741f46df83124ef1c8403ffabdafba6993d1", + "selected_source_hashes": { + "app/api/services/historical_projection.py": "sha256:e24e57c58f4aaa4ec9d9bf088009ac69006e53f75b9477ee53dc26c4e850b975", + "app/api/routers/workstreams.py": "sha256:9c9bf4376dd323b52109912bb3f615949e89ac02c8b88b4720f569f8565ad1d6", + "app/scripts/consistency_check.py": "sha256:1bfbc89d3ff5c621ec541fd32384083cc7dcf96a639b217d62b6fc34de238efd", + "app/api/services/forge_projection.py": "sha256:b980e62cbd85c3e7df42b01abf14354e04133374db94af6531dcd91629c3487d", + "app/migrations/versions/c4d5e6f7a8b9_inbox_feed_revision.py": "sha256:48f1730037be99b5623e878d7f20a06bec243ce27317fde81c82e16006d7b3ce", + "tmp/.ci-build-id": "sha256:97f14badea4537238f1f271813f40c4390fb6c99fbe7fc00025ee2af974901e2" + }, + "observed_files": { + "tmp/.ci-build-id": "sha256:97f14badea4537238f1f271813f40c4390fb6c99fbe7fc00025ee2af974901e2", + "tmp/hub-core/hub_core/__init__.py": "sha256:098578bae76f7d97354b8f3dfe8ddc63b15806a46d1691d70ed12d9839d69aec", + "tmp/hub-core/hub_core/conformance/__init__.py": "sha256:f7ce0a651913f157e586afd6e953b483add0dd5257ee9f2406c47e8d46ee9587", + "tmp/hub-core/hub_core/conformance/harness.py": "sha256:ca870fbbec7b7f5db6521d615fd76dfcbb9e97cbdfb037ffa993851a663b3c40", + "tmp/hub-core/hub_core/contracts/__init__.py": "sha256:ffb7a6b79ce15ddd57943bfbc40799e078c6f57c6690018237baa3f3a755ac49", + "tmp/hub-core/hub_core/contracts/helixforge_hub_extension/__init__.py": "sha256:32c095a16f777127ec0d2cd5e8373889866b81e9955d01e5adaf9503f6864da4", + "tmp/hub-core/hub_core/contracts/helixforge_hub_extension/v0_1_0/__init__.py": "sha256:e176b86b24d79c11f78ad714878bc3fca41c7821654fa766278b697360a41201", + "tmp/hub-core/hub_core/contracts/repository_navigation/__init__.py": "sha256:64912fe6673b72c3c0d8a2da28673d58bdf6f4185a1376ffe43d3735350adb60", + "tmp/hub-core/hub_core/contracts/repository_navigation/v1_0_0/__init__.py": "sha256:574cf1fee8433e0b11d9475cfbcc3837730b55f6ea1faa4920cba106d959464f", + "tmp/hub-core/hub_core/contracts/workload_projection/__init__.py": "sha256:c01198d23571442c1c3a596c7cd16be17dc1a3efdcfe3e8f9725b7dba16fc103", + "tmp/hub-core/hub_core/contracts/workload_projection/v1_0_0/__init__.py": "sha256:a9ecfecbf44893d32268288c872cdede0440d2a1373d37a47f69ba8c6431de0d", + "tmp/hub-core/hub_core/database.py": "sha256:a7704e97509433e90655b0ea22d5fa626d75b8b6470015ef8b9e5997e7a7f5ea", + "tmp/hub-core/hub_core/events.py": "sha256:c7125a242ed638a3ede29129e4ad826cd188cf76239b59a8587a40d182bbd0e7", + "tmp/hub-core/hub_core/mcp/__init__.py": "sha256:f97b25193573e56886b66f91cb8c86ef4a39f2100d709869e279e17456959859", + "tmp/hub-core/hub_core/mcp/credentials.py": "sha256:f5433d29848bd5a399a5e31695e0d908748e0a0856d26b2d691b667c50c95c34", + "tmp/hub-core/hub_core/mcp/server.py": "sha256:fc6a6de0a29ad9b6da176302a7d24e4ba987f667b6a7fb001029f00cb0d0c582", + "tmp/hub-core/hub_core/message_identity.py": "sha256:0ab996ba50f236c1342ce72ca8ae6ff28102ef41216972a745f7260e0c93fb24", + "tmp/hub-core/hub_core/migrations/__init__.py": "sha256:ccf4820e270c97fd5d4ac02f0c96362a772b8f4d1bcccc3f5e0077b77f575d36", + "tmp/hub-core/hub_core/migrations/env.py": "sha256:282e6e1a9e4a3cfdc111887f04dc5c1645307b3943a421852abe1709ce712e57", + "tmp/hub-core/hub_core/migrations/roles.py": "sha256:91e85297d296b0c4b9c78b16ae67d3a4707232d8f32b2cac2b2e84f31fa80e89", + "tmp/hub-core/hub_core/migrations/versions/0001_core_schema.py": "sha256:c65f076a7b56fb93ee67869e04d922ea396eab72a4c2d2f0dabd706c918aa081", + "tmp/hub-core/hub_core/migrations/versions/0002_runtime_ports.py": "sha256:d3ce15463841b3c13eaafdd137a65d4cf2839c0b8e8fddcb2cb2f1adbceb9f00", + "tmp/hub-core/hub_core/migrations/versions/0003_repository_navigation.py": "sha256:fb2d2cb5ed10f1760ab789ced8d43c657c1bedc29ba666231a70a18636160902", + "tmp/hub-core/hub_core/migrations/versions/0004_workload_projection.py": "sha256:87ce668bfef5cf4aaf0cfd3b48d498f2370f68e06a6e66375e446af6fbbb9c96", + "tmp/hub-core/hub_core/migrations/versions/0005_message_identity_aliases.py": "sha256:ec05d2c3cb906b78cdec4d220a7ce09264c38904c792cdad3cd1082e7eace7c0", + "tmp/hub-core/hub_core/migrations/versions/0006_outcome_outbox.py": "sha256:05effdf6f258836d1cd223f9d9fc3447d264484021d3a51cfa42517453d613e1", + "tmp/hub-core/hub_core/migrations/versions/__init__.py": "sha256:569f6d7e5cc1c17b7b1eee3eec3b82774b745d01ee1dfdf851a5c6f5c337f0bb", + "tmp/hub-core/hub_core/models/__init__.py": "sha256:c0b6de4986614a163dbb2467d15882eadbd66800478a50de4d6404198d1f773a", + "tmp/hub-core/hub_core/models/agent_message.py": "sha256:23d16eeaffe780f326b08e6c441100e6ae7b4075bbb6421734c06156a87c4375", + "tmp/hub-core/hub_core/models/base.py": "sha256:85bb40bde6f4cf8e6c5700a3a016a711fab4adff77c5eb78f89827fe28b9537b", + "tmp/hub-core/hub_core/models/capability_catalog.py": "sha256:eebbb31f264821a61662d3c9e8c7eba74f46d7f68b946e35f8127343bf2ff9c4", + "tmp/hub-core/hub_core/models/capability_request.py": "sha256:70a867c82aaa061a4e1c671b023d213032464e776226280f99e2ca192e2a6eba", + "tmp/hub-core/hub_core/models/domain.py": "sha256:ddf45c37e3c37014ddd9148be01cf104658e1601abba2a8ba96f7680cdb581b3", + "tmp/hub-core/hub_core/models/managed_repo.py": "sha256:835c5d44581daf7d7dd95325e3f7fdf0add4d529b83779ed83b5e812dcb3aa61", + "tmp/hub-core/hub_core/models/message_identity_alias.py": "sha256:d07d59cd9c9351669e8319727d08bc0e9bb7e0ee36bf8a34c0c258f0b4ea61e4", + "tmp/hub-core/hub_core/models/progress_event.py": "sha256:ee750127db2f49c5b9b94773a408f7f965d834b02e6d962220f4bc762309161f", + "tmp/hub-core/hub_core/models/tpsc.py": "sha256:cb28cbe3512486adb73c0bce633b3c542a41a64e7ec673e86a5a25ab20d94afe", + "tmp/hub-core/hub_core/routers/__init__.py": "sha256:800d1c45f597fcb4970ca7a83acd2b36016006efbdf638e14a3482a954d9046d", + "tmp/hub-core/hub_core/routers/capabilities.py": "sha256:18a403ad6ac961bc490543b698e079336f60ef9902a6cd71ef9899076660d5c0", + "tmp/hub-core/hub_core/routers/domains.py": "sha256:d4c4061d2ab0d2d6390a10f4f815deb0b93b3979345aee965b666110ba32e6e0", + "tmp/hub-core/hub_core/routers/messages.py": "sha256:903bd4f8c8ca599b606cf2229315de21097360816fcda907159dac4f48cee512", + "tmp/hub-core/hub_core/routers/policy.py": "sha256:358271263295fdebb5bcb95c3a27bd3ea456964a77bc01c3f784fb7a8754aacf", + "tmp/hub-core/hub_core/routers/progress.py": "sha256:680cf4dea00a1734d7d70ef7880acc8fd39f045521baa47f415c17934779d18a", + "tmp/hub-core/hub_core/routers/repos.py": "sha256:1bca6c9b2b5bbe172f5b935b763ac1e399b1d403cdc2c463000ae79f843257a2", + "tmp/hub-core/hub_core/routers/tpsc.py": "sha256:706815b01be1c0320bf73cf9cff3e9415c1f27b8449ee9e6fea67b12d3042fd1", + "tmp/hub-core/hub_core/runtime/__init__.py": "sha256:c522e626373407bf9bcd727dac7bb812cbdc8c3ef5bb6509a74949e5b49ab4c2", + "tmp/hub-core/hub_core/runtime/app.py": "sha256:87b077498bbe321c73139e51f7ca689fdc7963a98c4d72a5a3bbcc564f47ee76", + "tmp/hub-core/hub_core/runtime/cli.py": "sha256:98ec00f2a12911245827f515877472ae1c37cea65a42454494450ffbe7380e57", + "tmp/hub-core/hub_core/runtime/compat.py": "sha256:9f1c4575bb406ae1174da1a005ec16f44ace63768617e11164b44b4051162d0d", + "tmp/hub-core/hub_core/runtime/compat_catalogs.py": "sha256:250f61ea39cced32c8cd932c4e770ae8be54ff1cf1e257ee2c82324bde0d7a26", + "tmp/hub-core/hub_core/runtime/config.py": "sha256:009b2fc5d1f8fc390d478b01444f610ada91e5fee30534936382be2529a843fc", + "tmp/hub-core/hub_core/runtime/inbox_projection.py": "sha256:84499238654310b86f7a97f2817163ff4c4da0dfce562c677294fa3dfef7f398", + "tmp/hub-core/hub_core/runtime/migration.py": "sha256:d12731fa581c48bf58deec19405ece977c89d08993b2a2ad047cb1fd17318ea8", + "tmp/hub-core/hub_core/runtime/models.py": "sha256:367ca4aa29f59f8e3f59eab22f12782146cf623fa7ac7c22346c794b85a88185", + "tmp/hub-core/hub_core/runtime/ports.py": "sha256:ab70a401deae73389761a0e88dc8ee843df00a671fae6919b1f7eed344cfb542", + "tmp/hub-core/hub_core/runtime/postgres_store.py": "sha256:9286e7845009b66f00069d67177733dabe372d79986c33ca9b43e00dfa5a2341", + "tmp/hub-core/hub_core/runtime/repo_manager_client.py": "sha256:8fa305277c5f3ddfdbe1daf4023ce6c3cde03b5c18c1292dd6aac3fe995aabe1", + "tmp/hub-core/hub_core/runtime/repository_navigation.py": "sha256:f3503596781f3e7f7d53dd28dd3aaf563905f1398575b40c8080e2b1b9978b1e", + "tmp/hub-core/hub_core/runtime/repository_navigation_routes.py": "sha256:eab78ab418a7b542dcdcab5da023bacc65fb50520853f8d179accb2105e373cf", + "tmp/hub-core/hub_core/runtime/store.py": "sha256:2fb78f14bab8df08807322d6f6416745856d69e6001381246abbac879891858d", + "tmp/hub-core/hub_core/runtime/tables.py": "sha256:a5ff72a9c54eedcc8bb81330e62ee72578a383a1d03a1acb598c72c96cdfbe9e", + "tmp/hub-core/hub_core/runtime/validation.py": "sha256:2add804d95d5d0469d6d8d605fbd1013885da972489a017260c6fddef7b80c79", + "tmp/hub-core/hub_core/runtime/workload_projection.py": "sha256:8500260404b0c566a62e51fef63ee320d4e3dafe5e2467f44db884296b9e3bf4", + "tmp/hub-core/hub_core/runtime/workload_projection_routes.py": "sha256:5c71189b98867f2f1f7612f47ee69c0ec3ddf836b9b1c7e134b98a2be45791de", + "tmp/hub-core/hub_core/schemas/__init__.py": "sha256:dfa2ec2d125f03a532637d2fbef3058ebe1f85c515ff42a930198e164b7812f7", + "tmp/hub-core/hub_core/schemas/agent_message.py": "sha256:d6a7f40dc9a3c61be761f4d2e2c08f726fb0a423ef73e273a7cd97c69ae6c6a3", + "tmp/hub-core/hub_core/schemas/capability.py": "sha256:949c55cb1f2694de4617ad53dc9cb7bc0e72addd7b9d0f104b93d783e4edc647", + "tmp/hub-core/hub_core/schemas/doi.py": "sha256:73d675aecabd5a62ae13184494a4b9db122ad24b3132e1d0e908eef802382f36", + "tmp/hub-core/hub_core/schemas/domain.py": "sha256:872a704fea959d2e4d0ff771770a97160457282218f4748ba4f830c489543aac", + "tmp/hub-core/hub_core/schemas/managed_repo.py": "sha256:a7ab3b1ab399da81324693dcd5d3feeccb211642b10f11cd3f03c7fe6ba751d4", + "tmp/hub-core/hub_core/schemas/policy.py": "sha256:bdaef1640783ac325a050cadf214e731d7c8e5e3a35dbb8f7562d5abbd209a4c", + "tmp/hub-core/hub_core/schemas/progress_event.py": "sha256:9ac7b7fd4881d424bfe59c5001554fd7302243e8489d5e777584d11ead1db328", + "tmp/hub-core/hub_core/schemas/tpsc.py": "sha256:5640d96a7fa862a468eeb0d6da002697b1f58e4cd675a4603b91e448d4db851e", + "tmp/hub-core/hub_core/security/__init__.py": "sha256:2754e25ec0f5725c33cb0b4dff1b7d10b364ebd828e609bb5b44eee3309d2d60", + "tmp/hub-core/hub_core/security/account_reader.py": "sha256:27019616b84cf030969a8e3c0850b5ae52f336008fd9daa4c26360566e74a39b", + "tmp/hub-core/hub_core/security/audit.py": "sha256:94cb85d71f065443c6423871b59d41e929af0441c95928273caf3e38dad8125c", + "tmp/hub-core/hub_core/security/boundary.py": "sha256:a1629ac717672276f61015c83f7af6e375bbd8c1234c712dd3d225da307ae0d6", + "tmp/hub-core/hub_core/security/browser.py": "sha256:fd474ee4b9611fe8dd2c60111402c2fce67d680a7da3519b5d4a495a6b559b7a", + "tmp/hub-core/hub_core/security/config.py": "sha256:7d604f6aeebde393a371ec3e0ab174934e10808c29fb370acba031486e9c02a3", + "tmp/hub-core/hub_core/security/context.py": "sha256:1181bbf12ba86bfd5046dab2f3a22a64ee3686be6dd52ab3e843303349b13a52", + "tmp/hub-core/hub_core/security/facts.py": "sha256:3de4db38ffd3f86f4918d76f811289cd501be3c28dcba16f5088aa2a2b7529ce", + "tmp/hub-core/hub_core/security/identity.py": "sha256:d7a0bab9d59a5f342fdedc9723d818a9d2537a59c6a9415455786af748f912e9", + "tmp/hub-core/hub_core/security/policy.py": "sha256:a2370e9ea5b04b1d5a429644d7f81edb1cbe8e15214c23b16cd6f949613eebd6", + "tmp/hub-core/hub_core/utils/__init__.py": "sha256:ce4ddb30ccc4fd2c4ee59e8a3c088a12165171af02aea957f17f72cd868e1899", + "tmp/hub-core/hub_core/utils/pagination.py": "sha256:366250b85052c7aabc2a2262521d34233124ba3a41026042792f8eda706ecb4f", + "tmp/hub-core/hub_core/utils/paths.py": "sha256:988a889be74f0626ca3c27b1d6677bd4a556e35de389c060d07ab64fa1c22fc8", + "tmp/hub-core/hub_core/utils/routing.py": "sha256:c94b44c5f1ab723e123503e20e0309f28abeeabea6d51beda79247d99852ad1e", + "tmp/hub-core/hub_core/utils/slugs.py": "sha256:eda7a7d18ff21a4d949223b75a2b615a949e615f461152a9cb9a2cf74b491e2d", + "app/.venv/lib/python3.12/site-packages/hub_core/__init__.py": "sha256:098578bae76f7d97354b8f3dfe8ddc63b15806a46d1691d70ed12d9839d69aec", + "app/.venv/lib/python3.12/site-packages/hub_core/conformance/__init__.py": "sha256:f7ce0a651913f157e586afd6e953b483add0dd5257ee9f2406c47e8d46ee9587", + "app/.venv/lib/python3.12/site-packages/hub_core/conformance/harness.py": "sha256:ca870fbbec7b7f5db6521d615fd76dfcbb9e97cbdfb037ffa993851a663b3c40", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/__init__.py": "sha256:ffb7a6b79ce15ddd57943bfbc40799e078c6f57c6690018237baa3f3a755ac49", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/helixforge_hub_extension/__init__.py": "sha256:32c095a16f777127ec0d2cd5e8373889866b81e9955d01e5adaf9503f6864da4", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/helixforge_hub_extension/v0_1_0/__init__.py": "sha256:e176b86b24d79c11f78ad714878bc3fca41c7821654fa766278b697360a41201", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/repository_navigation/__init__.py": "sha256:64912fe6673b72c3c0d8a2da28673d58bdf6f4185a1376ffe43d3735350adb60", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/repository_navigation/v1_0_0/__init__.py": "sha256:574cf1fee8433e0b11d9475cfbcc3837730b55f6ea1faa4920cba106d959464f", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/workload_projection/__init__.py": "sha256:c01198d23571442c1c3a596c7cd16be17dc1a3efdcfe3e8f9725b7dba16fc103", + "app/.venv/lib/python3.12/site-packages/hub_core/contracts/workload_projection/v1_0_0/__init__.py": "sha256:a9ecfecbf44893d32268288c872cdede0440d2a1373d37a47f69ba8c6431de0d", + "app/.venv/lib/python3.12/site-packages/hub_core/database.py": "sha256:a7704e97509433e90655b0ea22d5fa626d75b8b6470015ef8b9e5997e7a7f5ea", + "app/.venv/lib/python3.12/site-packages/hub_core/events.py": "sha256:c7125a242ed638a3ede29129e4ad826cd188cf76239b59a8587a40d182bbd0e7", + "app/.venv/lib/python3.12/site-packages/hub_core/mcp/__init__.py": "sha256:f97b25193573e56886b66f91cb8c86ef4a39f2100d709869e279e17456959859", + "app/.venv/lib/python3.12/site-packages/hub_core/mcp/credentials.py": "sha256:f5433d29848bd5a399a5e31695e0d908748e0a0856d26b2d691b667c50c95c34", + "app/.venv/lib/python3.12/site-packages/hub_core/mcp/server.py": "sha256:fc6a6de0a29ad9b6da176302a7d24e4ba987f667b6a7fb001029f00cb0d0c582", + "app/.venv/lib/python3.12/site-packages/hub_core/message_identity.py": "sha256:0ab996ba50f236c1342ce72ca8ae6ff28102ef41216972a745f7260e0c93fb24", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/__init__.py": "sha256:ccf4820e270c97fd5d4ac02f0c96362a772b8f4d1bcccc3f5e0077b77f575d36", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/env.py": "sha256:282e6e1a9e4a3cfdc111887f04dc5c1645307b3943a421852abe1709ce712e57", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/roles.py": "sha256:91e85297d296b0c4b9c78b16ae67d3a4707232d8f32b2cac2b2e84f31fa80e89", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0001_core_schema.py": "sha256:c65f076a7b56fb93ee67869e04d922ea396eab72a4c2d2f0dabd706c918aa081", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0002_runtime_ports.py": "sha256:d3ce15463841b3c13eaafdd137a65d4cf2839c0b8e8fddcb2cb2f1adbceb9f00", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0003_repository_navigation.py": "sha256:fb2d2cb5ed10f1760ab789ced8d43c657c1bedc29ba666231a70a18636160902", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0004_workload_projection.py": "sha256:87ce668bfef5cf4aaf0cfd3b48d498f2370f68e06a6e66375e446af6fbbb9c96", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0005_message_identity_aliases.py": "sha256:ec05d2c3cb906b78cdec4d220a7ce09264c38904c792cdad3cd1082e7eace7c0", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/0006_outcome_outbox.py": "sha256:05effdf6f258836d1cd223f9d9fc3447d264484021d3a51cfa42517453d613e1", + "app/.venv/lib/python3.12/site-packages/hub_core/migrations/versions/__init__.py": "sha256:569f6d7e5cc1c17b7b1eee3eec3b82774b745d01ee1dfdf851a5c6f5c337f0bb", + "app/.venv/lib/python3.12/site-packages/hub_core/models/__init__.py": "sha256:c0b6de4986614a163dbb2467d15882eadbd66800478a50de4d6404198d1f773a", + "app/.venv/lib/python3.12/site-packages/hub_core/models/agent_message.py": "sha256:23d16eeaffe780f326b08e6c441100e6ae7b4075bbb6421734c06156a87c4375", + "app/.venv/lib/python3.12/site-packages/hub_core/models/base.py": "sha256:85bb40bde6f4cf8e6c5700a3a016a711fab4adff77c5eb78f89827fe28b9537b", + "app/.venv/lib/python3.12/site-packages/hub_core/models/capability_catalog.py": "sha256:eebbb31f264821a61662d3c9e8c7eba74f46d7f68b946e35f8127343bf2ff9c4", + "app/.venv/lib/python3.12/site-packages/hub_core/models/capability_request.py": "sha256:70a867c82aaa061a4e1c671b023d213032464e776226280f99e2ca192e2a6eba", + "app/.venv/lib/python3.12/site-packages/hub_core/models/domain.py": "sha256:ddf45c37e3c37014ddd9148be01cf104658e1601abba2a8ba96f7680cdb581b3", + "app/.venv/lib/python3.12/site-packages/hub_core/models/managed_repo.py": "sha256:835c5d44581daf7d7dd95325e3f7fdf0add4d529b83779ed83b5e812dcb3aa61", + "app/.venv/lib/python3.12/site-packages/hub_core/models/message_identity_alias.py": "sha256:d07d59cd9c9351669e8319727d08bc0e9bb7e0ee36bf8a34c0c258f0b4ea61e4", + "app/.venv/lib/python3.12/site-packages/hub_core/models/progress_event.py": "sha256:ee750127db2f49c5b9b94773a408f7f965d834b02e6d962220f4bc762309161f", + "app/.venv/lib/python3.12/site-packages/hub_core/models/tpsc.py": "sha256:cb28cbe3512486adb73c0bce633b3c542a41a64e7ec673e86a5a25ab20d94afe", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/__init__.py": "sha256:800d1c45f597fcb4970ca7a83acd2b36016006efbdf638e14a3482a954d9046d", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/capabilities.py": "sha256:18a403ad6ac961bc490543b698e079336f60ef9902a6cd71ef9899076660d5c0", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/domains.py": "sha256:d4c4061d2ab0d2d6390a10f4f815deb0b93b3979345aee965b666110ba32e6e0", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/messages.py": "sha256:903bd4f8c8ca599b606cf2229315de21097360816fcda907159dac4f48cee512", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/policy.py": "sha256:358271263295fdebb5bcb95c3a27bd3ea456964a77bc01c3f784fb7a8754aacf", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/progress.py": "sha256:680cf4dea00a1734d7d70ef7880acc8fd39f045521baa47f415c17934779d18a", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/repos.py": "sha256:1bca6c9b2b5bbe172f5b935b763ac1e399b1d403cdc2c463000ae79f843257a2", + "app/.venv/lib/python3.12/site-packages/hub_core/routers/tpsc.py": "sha256:706815b01be1c0320bf73cf9cff3e9415c1f27b8449ee9e6fea67b12d3042fd1", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/__init__.py": "sha256:c522e626373407bf9bcd727dac7bb812cbdc8c3ef5bb6509a74949e5b49ab4c2", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/app.py": "sha256:87b077498bbe321c73139e51f7ca689fdc7963a98c4d72a5a3bbcc564f47ee76", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/cli.py": "sha256:98ec00f2a12911245827f515877472ae1c37cea65a42454494450ffbe7380e57", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/compat.py": "sha256:9f1c4575bb406ae1174da1a005ec16f44ace63768617e11164b44b4051162d0d", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/compat_catalogs.py": "sha256:250f61ea39cced32c8cd932c4e770ae8be54ff1cf1e257ee2c82324bde0d7a26", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/config.py": "sha256:009b2fc5d1f8fc390d478b01444f610ada91e5fee30534936382be2529a843fc", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/inbox_projection.py": "sha256:84499238654310b86f7a97f2817163ff4c4da0dfce562c677294fa3dfef7f398", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/migration.py": "sha256:d12731fa581c48bf58deec19405ece977c89d08993b2a2ad047cb1fd17318ea8", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/models.py": "sha256:367ca4aa29f59f8e3f59eab22f12782146cf623fa7ac7c22346c794b85a88185", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/ports.py": "sha256:ab70a401deae73389761a0e88dc8ee843df00a671fae6919b1f7eed344cfb542", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/postgres_store.py": "sha256:9286e7845009b66f00069d67177733dabe372d79986c33ca9b43e00dfa5a2341", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/repo_manager_client.py": "sha256:8fa305277c5f3ddfdbe1daf4023ce6c3cde03b5c18c1292dd6aac3fe995aabe1", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/repository_navigation.py": "sha256:f3503596781f3e7f7d53dd28dd3aaf563905f1398575b40c8080e2b1b9978b1e", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/repository_navigation_routes.py": "sha256:eab78ab418a7b542dcdcab5da023bacc65fb50520853f8d179accb2105e373cf", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/store.py": "sha256:2fb78f14bab8df08807322d6f6416745856d69e6001381246abbac879891858d", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/tables.py": "sha256:a5ff72a9c54eedcc8bb81330e62ee72578a383a1d03a1acb598c72c96cdfbe9e", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/validation.py": "sha256:2add804d95d5d0469d6d8d605fbd1013885da972489a017260c6fddef7b80c79", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/workload_projection.py": "sha256:8500260404b0c566a62e51fef63ee320d4e3dafe5e2467f44db884296b9e3bf4", + "app/.venv/lib/python3.12/site-packages/hub_core/runtime/workload_projection_routes.py": "sha256:5c71189b98867f2f1f7612f47ee69c0ec3ddf836b9b1c7e134b98a2be45791de", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/__init__.py": "sha256:dfa2ec2d125f03a532637d2fbef3058ebe1f85c515ff42a930198e164b7812f7", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/agent_message.py": "sha256:d6a7f40dc9a3c61be761f4d2e2c08f726fb0a423ef73e273a7cd97c69ae6c6a3", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/capability.py": "sha256:949c55cb1f2694de4617ad53dc9cb7bc0e72addd7b9d0f104b93d783e4edc647", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/doi.py": "sha256:73d675aecabd5a62ae13184494a4b9db122ad24b3132e1d0e908eef802382f36", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/domain.py": "sha256:872a704fea959d2e4d0ff771770a97160457282218f4748ba4f830c489543aac", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/managed_repo.py": "sha256:a7ab3b1ab399da81324693dcd5d3feeccb211642b10f11cd3f03c7fe6ba751d4", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/policy.py": "sha256:bdaef1640783ac325a050cadf214e731d7c8e5e3a35dbb8f7562d5abbd209a4c", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/progress_event.py": "sha256:9ac7b7fd4881d424bfe59c5001554fd7302243e8489d5e777584d11ead1db328", + "app/.venv/lib/python3.12/site-packages/hub_core/schemas/tpsc.py": "sha256:5640d96a7fa862a468eeb0d6da002697b1f58e4cd675a4603b91e448d4db851e", + "app/.venv/lib/python3.12/site-packages/hub_core/security/__init__.py": "sha256:2754e25ec0f5725c33cb0b4dff1b7d10b364ebd828e609bb5b44eee3309d2d60", + "app/.venv/lib/python3.12/site-packages/hub_core/security/account_reader.py": "sha256:27019616b84cf030969a8e3c0850b5ae52f336008fd9daa4c26360566e74a39b", + "app/.venv/lib/python3.12/site-packages/hub_core/security/audit.py": "sha256:94cb85d71f065443c6423871b59d41e929af0441c95928273caf3e38dad8125c", + "app/.venv/lib/python3.12/site-packages/hub_core/security/boundary.py": "sha256:a1629ac717672276f61015c83f7af6e375bbd8c1234c712dd3d225da307ae0d6", + "app/.venv/lib/python3.12/site-packages/hub_core/security/browser.py": "sha256:fd474ee4b9611fe8dd2c60111402c2fce67d680a7da3519b5d4a495a6b559b7a", + "app/.venv/lib/python3.12/site-packages/hub_core/security/config.py": "sha256:7d604f6aeebde393a371ec3e0ab174934e10808c29fb370acba031486e9c02a3", + "app/.venv/lib/python3.12/site-packages/hub_core/security/context.py": "sha256:1181bbf12ba86bfd5046dab2f3a22a64ee3686be6dd52ab3e843303349b13a52", + "app/.venv/lib/python3.12/site-packages/hub_core/security/facts.py": "sha256:3de4db38ffd3f86f4918d76f811289cd501be3c28dcba16f5088aa2a2b7529ce", + "app/.venv/lib/python3.12/site-packages/hub_core/security/identity.py": "sha256:d7a0bab9d59a5f342fdedc9723d818a9d2537a59c6a9415455786af748f912e9", + "app/.venv/lib/python3.12/site-packages/hub_core/security/policy.py": "sha256:a2370e9ea5b04b1d5a429644d7f81edb1cbe8e15214c23b16cd6f949613eebd6", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/__init__.py": "sha256:ce4ddb30ccc4fd2c4ee59e8a3c088a12165171af02aea957f17f72cd868e1899", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/pagination.py": "sha256:366250b85052c7aabc2a2262521d34233124ba3a41026042792f8eda706ecb4f", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/paths.py": "sha256:988a889be74f0626ca3c27b1d6677bd4a556e35de389c060d07ab64fa1c22fc8", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/routing.py": "sha256:c94b44c5f1ab723e123503e20e0309f28abeeabea6d51beda79247d99852ad1e", + "app/.venv/lib/python3.12/site-packages/hub_core/utils/slugs.py": "sha256:eda7a7d18ff21a4d949223b75a2b615a949e615f461152a9cb9a2cf74b491e2d", + "app/api/routers/workstreams.py": "sha256:9c9bf4376dd323b52109912bb3f615949e89ac02c8b88b4720f569f8565ad1d6", + "app/api/services/forge_projection.py": "sha256:b980e62cbd85c3e7df42b01abf14354e04133374db94af6531dcd91629c3487d", + "app/api/services/historical_projection.py": "sha256:e24e57c58f4aaa4ec9d9bf088009ac69006e53f75b9477ee53dc26c4e850b975", + "app/migrations/versions/c4d5e6f7a8b9_inbox_feed_revision.py": "sha256:48f1730037be99b5623e878d7f20a06bec243ce27317fde81c82e16006d7b3ce", + "app/scripts/consistency_check.py": "sha256:1bfbc89d3ff5c621ec541fd32384083cc7dcf96a639b217d62b6fc34de238efd" + }, + "layers": [ + { + "digest": "sha256:304074f06047f3dee0c586de265e0e27b577930bc80dc7f97f3829b188bc4fb0", + "compressed_bytes": 30855435, + "archive_entries": 3271, + "whiteouts": 0 + }, + { + "digest": "sha256:75b6a36c64a1cf3520fc4b4aae4739d5caa8a6a05c27835a920a61784c9c32f8", + "compressed_bytes": 1294052, + "archive_entries": 553, + "whiteouts": 0 + }, + { + "digest": "sha256:6912e23eb44595b44dc6d9882b34f305ad6f6e9667cec70b13e5dbc4f8cd97f4", + "compressed_bytes": 12121637, + "archive_entries": 1828, + "whiteouts": 0 + }, + { + "digest": "sha256:bbc5a12237474ec0b23b5051260d56d6436a24d70d9cad961adebe7a037ed813", + "compressed_bytes": 249, + "archive_entries": 8, + "whiteouts": 0 + }, + { + "digest": "sha256:e16e3995c15e64ae03e700d74eab2389f1151e6bd5d40f55faa047e9124aeb20", + "compressed_bytes": 93, + "archive_entries": 1, + "whiteouts": 0 + }, + { + "digest": "sha256:14568be832d0c877348328755de4e94cf4d0397d03f2161f6995e3b3e756e802", + "compressed_bytes": 55305356, + "archive_entries": 2898, + "whiteouts": 62 + }, + { + "digest": "sha256:bf1e1db2d1d373afe88df2f128ce08f7d271029d1c17de4d10e5e78124a6bb2d", + "compressed_bytes": 149, + "archive_entries": 2, + "whiteouts": 0 + }, + { + "digest": "sha256:cca568db8f6125ab1f5cc9404ac5cb680bd5f01aa44b2629cf2de438b91c177a", + "compressed_bytes": 939, + "archive_entries": 2, + "whiteouts": 0 + }, + { + "digest": "sha256:c7a4b7e67b1547f874baf3665689c5a71ac812dd3f4a457e88718704e3455d87", + "compressed_bytes": 35705202, + "archive_entries": 5471, + "whiteouts": 0 + }, + { + "digest": "sha256:7d941269c77dad23eb3cf2e20c329048395c423fe9757df3a6caa8fafca24255", + "compressed_bytes": 598, + "archive_entries": 3, + "whiteouts": 0 + }, + { + "digest": "sha256:2a88d6d68641dd9017cbb4c2a77c4a935a731d4ba1f2f118a62ec3105c97a960", + "compressed_bytes": 102613, + "archive_entries": 143, + "whiteouts": 0 + }, + { + "digest": "sha256:3558878fca903a25435eb78655b429261a518d3cdd69d8e27ed24a26cef6bfa5", + "compressed_bytes": 109561, + "archive_entries": 160, + "whiteouts": 0 + }, + { + "digest": "sha256:2c7101586f5978e425a539185f940607388c99304a1cfebbaf7574bec6f15273", + "compressed_bytes": 475, + "archive_entries": 2, + "whiteouts": 0 + }, + { + "digest": "sha256:59d38644e2bc333e0aa244c6ac7ef2e48d1eaa81e6134debe010e4322915fa6d", + "compressed_bytes": 243466, + "archive_entries": 181, + "whiteouts": 0 + }, + { + "digest": "sha256:52fa1200348c5b4962eb106f996f253ad7f4bd3b26cfa55b80a526398560246a", + "compressed_bytes": 1678, + "archive_entries": 7, + "whiteouts": 0 + }, + { + "digest": "sha256:82fdcd1e818c2dcee02108202c3c67a6a4c6ad59304dc8040f77dd824db82b3d", + "compressed_bytes": 36058, + "archive_entries": 7, + "whiteouts": 0 + }, + { + "digest": "sha256:085010e655b31f98dcf873b131d4a11742af387bec0a75d341058635a2f5cecb", + "compressed_bytes": 33942, + "archive_entries": 63, + "whiteouts": 0 + }, + { + "digest": "sha256:4aa7035189d4ba6594935b119c6014a27ca406f740f36ed66a586c03b547247d", + "compressed_bytes": 10803, + "archive_entries": 8, + "whiteouts": 0 + }, + { + "digest": "sha256:f7b6a72fd1110c2fb3e9e34032269dd8b47627bb2b8bdd142716a547f9a4fefe", + "compressed_bytes": 2118, + "archive_entries": 3, + "whiteouts": 0 + }, + { + "digest": "sha256:dc64ac4230f824b7ba637ebd59951abca1e9cbdcbbfc4b26f1600c0e95e7f554", + "compressed_bytes": 155207, + "archive_entries": 67, + "whiteouts": 0 + }, + { + "digest": "sha256:26abb1e017025d62034b1ea4b8c461f330c282e529bc7949788f455ed633d864", + "compressed_bytes": 2966, + "archive_entries": 7, + "whiteouts": 0 + }, + { + "digest": "sha256:4a46de9d4b0f85f756bf71e82b4e00459b9a0968013da1a92a848213448814b0", + "compressed_bytes": 539, + "archive_entries": 4, + "whiteouts": 0 + } + ], + "python_package_metadata": { + "usr/local/lib/python3.12/site-packages/pip-25.0.1.dist-info/METADATA": { + "name": "pip", + "version": "25.0.1", + "metadata_sha256": "sha256:4fa7318cf30f979db7cec45c12cbbc2b4f88a15f12eefbf59a6291d0a03af926" + }, + "usr/local/lib/python3.12/site-packages/uv-0.13.1.dist-info/METADATA": { + "name": "uv", + "version": "0.13.1", + "metadata_sha256": "sha256:3554d26fcb1db453b54bde82aa3830ddc37179f3ac4394d670361553c02d0cf2" + }, + "app/.venv/lib/python3.12/site-packages/aiofile-3.12.3.dist-info/METADATA": { + "name": "aiofile", + "version": "3.12.3", + "metadata_sha256": "sha256:faaa3115c495ac1989aa6bda262b79a6c97e056c83e04afcfc71584a59e3ceb1" + }, + "app/.venv/lib/python3.12/site-packages/alembic-1.20.0.dist-info/METADATA": { + "name": "alembic", + "version": "1.20.0", + "metadata_sha256": "sha256:bd32c118c43955c106bfa4255b2fb5ac9db410b0f7255a4cafb14b9e221ff41c" + }, + "app/.venv/lib/python3.12/site-packages/annotated_doc-0.0.5.dist-info/METADATA": { + "name": "annotated-doc", + "version": "0.0.5", + "metadata_sha256": "sha256:8c24d70c5d9153d22123353a906042fd7603df2d15c2196290b0f8a962558c46" + }, + "app/.venv/lib/python3.12/site-packages/annotated_types-0.8.0.dist-info/METADATA": { + "name": "annotated-types", + "version": "0.8.0", + "metadata_sha256": "sha256:614985b278f601b8ef863f82783b991cc3ada4b89f592eb71c7c48c5f2ef2298" + }, + "app/.venv/lib/python3.12/site-packages/anyio-4.15.1.dist-info/METADATA": { + "name": "anyio", + "version": "4.15.1", + "metadata_sha256": "sha256:043aecb571af7189e8a6c528f5d8e32545f1b2cdfaaf761d51e6d5b67ea3ca81" + }, + "app/.venv/lib/python3.12/site-packages/asyncpg-0.32.0.dist-info/METADATA": { + "name": "asyncpg", + "version": "0.32.0", + "metadata_sha256": "sha256:10c1e84f762a55c69630704e8a429793dcab1ce5edba7deadb35f40476d502c9" + }, + "app/.venv/lib/python3.12/site-packages/attrs-26.1.0.dist-info/METADATA": { + "name": "attrs", + "version": "26.1.0", + "metadata_sha256": "sha256:4cd40e690f23bf37cbcad34efd6758e062df1df07c86833f7e3ce95bf1fa38cc" + }, + "app/.venv/lib/python3.12/site-packages/authlib-1.9.1.dist-info/METADATA": { + "name": "Authlib", + "version": "1.9.1", + "metadata_sha256": "sha256:7141e57ccac936724fd004b401d0695e0ae48f32f2aee14d90259a9d4bc4fdbd" + }, + "app/.venv/lib/python3.12/site-packages/beartype-0.23.1.dist-info/METADATA": { + "name": "beartype", + "version": "0.23.1", + "metadata_sha256": "sha256:ac75ec7a0bd6407db75c5c1da887798dfd4d5d12099e299602d03baa0ba22986" + }, + "app/.venv/lib/python3.12/site-packages/cachetools-7.2.2.dist-info/METADATA": { + "name": "cachetools", + "version": "7.2.2", + "metadata_sha256": "sha256:76bbee4a06789a8c42253966988a07aff8f2f29cb1ae3ff9d6f16d661f01f2d4" + }, + "app/.venv/lib/python3.12/site-packages/caio-0.12.9.dist-info/METADATA": { + "name": "caio", + "version": "0.12.9", + "metadata_sha256": "sha256:3128051d993cbf71f589f68b0082167fe1c910b17379d27653b6945ec848c3c8" + }, + "app/.venv/lib/python3.12/site-packages/certifi-2026.7.22.dist-info/METADATA": { + "name": "certifi", + "version": "2026.7.22", + "metadata_sha256": "sha256:ef5af1638fbb23676ac3c5777dfcfc2cd9c348fe4172ed5ba3d277655b248090" + }, + "app/.venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/METADATA": { + "name": "cffi", + "version": "2.1.1", + "metadata_sha256": "sha256:558bafb9093a8e790175d9ecff9688382981d744877dad86fd6770db0f4dc918" + }, + "app/.venv/lib/python3.12/site-packages/click-8.5.0.dist-info/METADATA": { + "name": "click", + "version": "8.5.0", + "metadata_sha256": "sha256:e87bce0bd194de70dfb8e708e0a6b0483009f25611804eaf87bfeb63e6c20501" + }, + "app/.venv/lib/python3.12/site-packages/cryptography-50.0.2.dist-info/METADATA": { + "name": "cryptography", + "version": "50.0.2", + "metadata_sha256": "sha256:047cfc71226409de4318b360aef15c63a2adf609731e3dcf7fe932f14ea042ee" + }, + "app/.venv/lib/python3.12/site-packages/cyclopts-5.2.0.dist-info/METADATA": { + "name": "cyclopts", + "version": "5.2.0", + "metadata_sha256": "sha256:a1bcd1e587744ec6f5c5c64126ac03a03fc2468f7c91cd1c44572a5ac11dcb2a" + }, + "app/.venv/lib/python3.12/site-packages/dnspython-2.9.0.dist-info/METADATA": { + "name": "dnspython", + "version": "2.9.0", + "metadata_sha256": "sha256:d25dbd09b39758cd5cebe518701012a6278731986cd384fc4a7f25e78f7de929" + }, + "app/.venv/lib/python3.12/site-packages/docstring_parser-0.18.0.dist-info/METADATA": { + "name": "docstring_parser", + "version": "0.18.0", + "metadata_sha256": "sha256:cbc42027997fd4b194ae5fd064a4d1e57b92976941d0c26d369561a7c016a333" + }, + "app/.venv/lib/python3.12/site-packages/email_validator-2.3.0.dist-info/METADATA": { + "name": "email-validator", + "version": "2.3.0", + "metadata_sha256": "sha256:2a97b81eefcd856bc80b0346f47fa2d800b9a438bf8f9231ae00fe931d5c9fbc" + }, + "app/.venv/lib/python3.12/site-packages/exceptiongroup-1.3.1.dist-info/METADATA": { + "name": "exceptiongroup", + "version": "1.3.1", + "metadata_sha256": "sha256:81984a523a2f7a522ad12bea784a8bb85edec0805ebbd0fb4e350169a36dd802" + }, + "app/.venv/lib/python3.12/site-packages/fastapi-0.143.3.dist-info/METADATA": { + "name": "fastapi", + "version": "0.143.3", + "metadata_sha256": "sha256:364f68b16f489abe36d621da2fa727f774bec90916cd3325b78e422af3b59a5f" + }, + "app/.venv/lib/python3.12/site-packages/fastmcp-4.1.0.dist-info/METADATA": { + "name": "fastmcp", + "version": "4.1.0", + "metadata_sha256": "sha256:cfdcfd24ad904514087ec1735baa54df174f72f570833a16b6074887cfc51fa6" + }, + "app/.venv/lib/python3.12/site-packages/fastmcp_slim-4.1.0.dist-info/METADATA": { + "name": "fastmcp-slim", + "version": "4.1.0", + "metadata_sha256": "sha256:e8eca5fbae348ee6dcda0a0f1bf0dffa493e8d4d8763647ee48f4f871e35c998" + }, + "app/.venv/lib/python3.12/site-packages/greenlet-3.5.6.dist-info/METADATA": { + "name": "greenlet", + "version": "3.5.6", + "metadata_sha256": "sha256:b9b4cbbc1f3165e50fbc4696c433fe82b8a151fde65eede28fb6ec5efb3e1fab" + }, + "app/.venv/lib/python3.12/site-packages/griffelib-2.3.2.dist-info/METADATA": { + "name": "griffelib", + "version": "2.3.2", + "metadata_sha256": "sha256:fd24a68ed08309718d5759b8de3b90392b5804240d94834e6455be110ead34b3" + }, + "app/.venv/lib/python3.12/site-packages/h11-0.16.0.dist-info/METADATA": { + "name": "h11", + "version": "0.16.0", + "metadata_sha256": "sha256:28f326098ac09fcba79b8f180f96087c841fe2456215cb7b872a9c7d5cd19d64" + }, + "app/.venv/lib/python3.12/site-packages/httpcore-1.0.9.dist-info/METADATA": { + "name": "httpcore", + "version": "1.0.9", + "metadata_sha256": "sha256:fe2d4fda6199128978779e0cf27f3c045c531863fcdd987eacc74f3a18d41c21" + }, + "app/.venv/lib/python3.12/site-packages/httpcore2-2.13.1.dist-info/METADATA": { + "name": "httpcore2", + "version": "2.13.1", + "metadata_sha256": "sha256:37a0ea0674e98b7c3a1f99c17d9bb5457de27a0f93c8b6560c9d17d525139abb" + }, + "app/.venv/lib/python3.12/site-packages/httptools-0.9.0.dist-info/METADATA": { + "name": "httptools", + "version": "0.9.0", + "metadata_sha256": "sha256:8a743396f45465204e2b44b43cb57ec4a343c423f52604bbaf1777fd438698c9" + }, + "app/.venv/lib/python3.12/site-packages/httpx-0.28.1.dist-info/METADATA": { + "name": "httpx", + "version": "0.28.1", + "metadata_sha256": "sha256:febb9b0f8f3e80d57c8199c304f35c4336e8581d1d18d7983c92766b82793b25" + }, + "app/.venv/lib/python3.12/site-packages/httpx2-2.13.1.dist-info/METADATA": { + "name": "httpx2", + "version": "2.13.1", + "metadata_sha256": "sha256:b75b03a003b5593e000907cf7239fcc3f688b8f17db4ecff883d11221ea988fc" + }, + "app/.venv/lib/python3.12/site-packages/idna-3.20.dist-info/METADATA": { + "name": "idna", + "version": "3.20", + "metadata_sha256": "sha256:dbd8c14c1e4ca1e0c9824a6dbc7cbbf78884f38eb52d91148cd3025f671e4b85" + }, + "app/.venv/lib/python3.12/site-packages/jaraco.classes-3.4.0.dist-info/METADATA": { + "name": "jaraco.classes", + "version": "3.4.0", + "metadata_sha256": "sha256:2e6b102232edd45ae1bb8a6b4091fd40cf3201a6bb6fd4bc97c5e8cd765a44b8" + }, + "app/.venv/lib/python3.12/site-packages/jaraco_context-6.1.2.dist-info/METADATA": { + "name": "jaraco.context", + "version": "6.1.2", + "metadata_sha256": "sha256:f1b65b60aea229af54e09b17ae0036cf048fe4a6161fa2e7966a8ea5c2321491" + }, + "app/.venv/lib/python3.12/site-packages/jaraco_functools-4.6.0.dist-info/METADATA": { + "name": "jaraco.functools", + "version": "4.6.0", + "metadata_sha256": "sha256:6ed3cae5b8eef084c3c7b2385a0a8ac4c8155ab7c729212bea099bee69d5bd6c" + }, + "app/.venv/lib/python3.12/site-packages/jeepney-0.9.0.dist-info/METADATA": { + "name": "jeepney", + "version": "0.9.0", + "metadata_sha256": "sha256:b8e6c353e9aaed0ed0144029556417fda23b64f344e718331907054ba05b8c62" + }, + "app/.venv/lib/python3.12/site-packages/joserfc-1.7.5.dist-info/METADATA": { + "name": "joserfc", + "version": "1.7.5", + "metadata_sha256": "sha256:17df62bbdc7212bbcda3144e72720a62fc34bbf76c573062939120738545250f" + }, + "app/.venv/lib/python3.12/site-packages/jsonref-1.1.0.dist-info/METADATA": { + "name": "jsonref", + "version": "1.1.0", + "metadata_sha256": "sha256:f98db3890394fba23912faab86ad8f70ed564fc8c885298b636b270f28453e43" + }, + "app/.venv/lib/python3.12/site-packages/jsonschema-4.26.0.dist-info/METADATA": { + "name": "jsonschema", + "version": "4.26.0", + "metadata_sha256": "sha256:05b189866ca98a96da3934bf6b83687ced3ff85325273b77e16b705f6d8b26d2" + }, + "app/.venv/lib/python3.12/site-packages/jsonschema_path-0.5.0.dist-info/METADATA": { + "name": "jsonschema-path", + "version": "0.5.0", + "metadata_sha256": "sha256:cd7e9a4426436980f099d826dbce8f61afa6603b496385fba9a9eb0ad59cdd48" + }, + "app/.venv/lib/python3.12/site-packages/jsonschema_specifications-2025.9.1.dist-info/METADATA": { + "name": "jsonschema-specifications", + "version": "2025.9.1", + "metadata_sha256": "sha256:35abd41757f32b4ea24756920ded47b70173d77cbc052a5a6d3ab583b2e8d89d" + }, + "app/.venv/lib/python3.12/site-packages/keyring-25.7.0.dist-info/METADATA": { + "name": "keyring", + "version": "25.7.0", + "metadata_sha256": "sha256:bd54de98fede6dc3e1f3cd89b4e37c95d8842a523bdbb9e52ab40edff1837163" + }, + "app/.venv/lib/python3.12/site-packages/mako-1.4.3.dist-info/METADATA": { + "name": "Mako", + "version": "1.4.3", + "metadata_sha256": "sha256:39ea65f21e706265428ea6f2925520f419a10f0113a59318192ed38175d8838b" + }, + "app/.venv/lib/python3.12/site-packages/markdown_it_py-4.2.0.dist-info/METADATA": { + "name": "markdown-it-py", + "version": "4.2.0", + "metadata_sha256": "sha256:72c36ff516755443b1ecb61e17b2567a990230b49a504b0eb0c42d5f82448a9c" + }, + "app/.venv/lib/python3.12/site-packages/markupsafe-3.0.4.dist-info/METADATA": { + "name": "MarkupSafe", + "version": "3.0.4", + "metadata_sha256": "sha256:66767d76388ece15d49d50dafb655891ef5d868715e7128e7f7d737a70b353c4" + }, + "app/.venv/lib/python3.12/site-packages/mcp-2.3.0.dist-info/METADATA": { + "name": "mcp", + "version": "2.3.0", + "metadata_sha256": "sha256:a94577513a4fa0cb639c279c1ad6f4d49650872d45f2f4ab9bb2d9c2a505d457" + }, + "app/.venv/lib/python3.12/site-packages/mcp_types-2.3.0.dist-info/METADATA": { + "name": "mcp-types", + "version": "2.3.0", + "metadata_sha256": "sha256:eb973e8b7f53d52ab1df9d1f18854ffa84f074f6052e310089e2655961c48ca9" + }, + "app/.venv/lib/python3.12/site-packages/mdurl-0.1.2.dist-info/METADATA": { + "name": "mdurl", + "version": "0.1.2", + "metadata_sha256": "sha256:b53b29d48f499367053fda3c81e7ce27d2558380ebbf83e66023b02eb7ddd25d" + }, + "app/.venv/lib/python3.12/site-packages/more_itertools-11.2.1.dist-info/METADATA": { + "name": "more-itertools", + "version": "11.2.1", + "metadata_sha256": "sha256:8c558bfab61818450e78db4018281f8f7b22115e681cd53ae1d9d4931be54f15" + }, + "app/.venv/lib/python3.12/site-packages/nats_py-2.16.0.dist-info/METADATA": { + "name": "nats-py", + "version": "2.16.0", + "metadata_sha256": "sha256:58ddf3dd698f9026d397e5bb56a0baac723ba221d3dddae0831cfacc75c34255" + }, + "app/.venv/lib/python3.12/site-packages/openapi_pydantic-0.6.0.dist-info/METADATA": { + "name": "openapi-pydantic", + "version": "0.6.0", + "metadata_sha256": "sha256:e46a181161c62fa24d7d3d0ff2eaabea3a7b580ad7aa9f70d1f08bd129d46f49" + }, + "app/.venv/lib/python3.12/site-packages/opentelemetry_api-1.45.1.dist-info/METADATA": { + "name": "opentelemetry-api", + "version": "1.45.1", + "metadata_sha256": "sha256:5bc71e90cb421be92a43bf5ad5b0f25dccfa2a24ddceaa2877779879962a4c9e" + }, + "app/.venv/lib/python3.12/site-packages/packaging-26.3.dist-info/METADATA": { + "name": "packaging", + "version": "26.3", + "metadata_sha256": "sha256:70fdb89fc4d4a9a043bf7372b8972bcc883fddff34ab55e9cf80d73875384763" + }, + "app/.venv/lib/python3.12/site-packages/pathable-0.6.0.dist-info/METADATA": { + "name": "pathable", + "version": "0.6.0", + "metadata_sha256": "sha256:c418727931012c2306cb8fa2726d044616c3178c1fc078ce182385dcf2b59922" + }, + "app/.venv/lib/python3.12/site-packages/platformdirs-4.13.3.dist-info/METADATA": { + "name": "platformdirs", + "version": "4.13.3", + "metadata_sha256": "sha256:3814840758f662bb98053d08f99085fb77721812258573732b092fd7f2120c30" + }, + "app/.venv/lib/python3.12/site-packages/psycopg2_binary-2.9.13.dist-info/METADATA": { + "name": "psycopg2-binary", + "version": "2.9.13", + "metadata_sha256": "sha256:a5267b4520191137e34589704162fce02cfd40efcfeb899c45187c7f6bfea7e5" + }, + "app/.venv/lib/python3.12/site-packages/py_key_value_aio-0.4.6.dist-info/METADATA": { + "name": "py-key-value-aio", + "version": "0.4.6", + "metadata_sha256": "sha256:0c1af357b841bc3862e39543faa863346c487be9f2e2ffefba009e957a256bee" + }, + "app/.venv/lib/python3.12/site-packages/pycparser-3.11.dist-info/METADATA": { + "name": "pycparser", + "version": "3.11", + "metadata_sha256": "sha256:e3a74c846648bb55f4f907284b745e2003b87b96d9c9d17a8a50cf37804541c9" + }, + "app/.venv/lib/python3.12/site-packages/pydantic-2.14.1.dist-info/METADATA": { + "name": "pydantic", + "version": "2.14.1", + "metadata_sha256": "sha256:4d4c8e8d5e6a27d5208f0d7949f25628e6747133034969d4d1399b1ad5394036" + }, + "app/.venv/lib/python3.12/site-packages/pydantic_core-2.50.1.dist-info/METADATA": { + "name": "pydantic_core", + "version": "2.50.1", + "metadata_sha256": "sha256:ae6817764b603fa2300cd31b9566ecc33476df46163c4150fffc353121a166f2" + }, + "app/.venv/lib/python3.12/site-packages/pydantic_settings-2.16.0.dist-info/METADATA": { + "name": "pydantic-settings", + "version": "2.16.0", + "metadata_sha256": "sha256:470656112388bca95fd7d27b8954fda1f11dd6579563cfb9c0ea0445d1746b77" + }, + "app/.venv/lib/python3.12/site-packages/pygments-2.21.0.dist-info/METADATA": { + "name": "Pygments", + "version": "2.21.0", + "metadata_sha256": "sha256:1dde075570136774c706bf0009183a793fe0ee262e4a5590cc6eff8453eedd43" + }, + "app/.venv/lib/python3.12/site-packages/pyjwt-2.15.1.dist-info/METADATA": { + "name": "PyJWT", + "version": "2.15.1", + "metadata_sha256": "sha256:1ea0c9f139b8c928276b3628af165955f6f764491448a6ad8f103cdcbb382da3" + }, + "app/.venv/lib/python3.12/site-packages/pyperclip-1.11.0.dist-info/METADATA": { + "name": "pyperclip", + "version": "1.11.0", + "metadata_sha256": "sha256:2493839e0751761f27d39aa6d5c5dfd1df839c45da8f328aba4ae4102868b825" + }, + "app/.venv/lib/python3.12/site-packages/python_dotenv-1.2.4.dist-info/METADATA": { + "name": "python-dotenv", + "version": "1.2.4", + "metadata_sha256": "sha256:87cfee6042412d48df1100ea7822684988c3f2b79de7a250f4717f4df3026d6f" + }, + "app/.venv/lib/python3.12/site-packages/python_multipart-0.0.32.dist-info/METADATA": { + "name": "python-multipart", + "version": "0.0.32", + "metadata_sha256": "sha256:e9d399d7dea5eddf0e4d24b5c24687a82e7e50bf2c2b30f8f8a06a64d887dd86" + }, + "app/.venv/lib/python3.12/site-packages/pyyaml-6.0.3.dist-info/METADATA": { + "name": "PyYAML", + "version": "6.0.3", + "metadata_sha256": "sha256:03c3b415ed38d09faedc49360e930769b40c58f68585e6de00e2e4916a858d34" + }, + "app/.venv/lib/python3.12/site-packages/referencing-0.37.0.dist-info/METADATA": { + "name": "referencing", + "version": "0.37.0", + "metadata_sha256": "sha256:c93b00e6ab1524fd60848376604c189a114374776475c25a31d57be47b29de6a" + }, + "app/.venv/lib/python3.12/site-packages/rich-15.0.0.dist-info/METADATA": { + "name": "rich", + "version": "15.0.0", + "metadata_sha256": "sha256:fad34fc603fac4481bf81f8dd629492fc302c0ec31909c86644751512afb2e3b" + }, + "app/.venv/lib/python3.12/site-packages/rich_rst-2.2.0.dist-info/METADATA": { + "name": "rich-rst", + "version": "2.2.0", + "metadata_sha256": "sha256:2cd1f39149e69bd94c4f1c30cb26c763e45689e6d6527b4c23afa1112c48f165" + }, + "app/.venv/lib/python3.12/site-packages/rpds_py-2026.9.1.dist-info/METADATA": { + "name": "rpds-py", + "version": "2026.9.1", + "metadata_sha256": "sha256:5d72dca2e387c8d2b4180b68ee87c15b64751e059100a6db58891ec9995445c3" + }, + "app/.venv/lib/python3.12/site-packages/secretstorage-3.5.0.dist-info/METADATA": { + "name": "SecretStorage", + "version": "3.5.0", + "metadata_sha256": "sha256:b98e3dc42ff7e9b1bacce60dac2662cd9965fad6e4469fc9483c9eb99998c367" + }, + "app/.venv/lib/python3.12/site-packages/sqlalchemy-2.1.5.dist-info/METADATA": { + "name": "SQLAlchemy", + "version": "2.1.5", + "metadata_sha256": "sha256:7f568ea71aecfb29792ccee2c8b1345825e385d54b7e7bba755e445e53b5696f" + }, + "app/.venv/lib/python3.12/site-packages/sse_starlette-3.5.0.dist-info/METADATA": { + "name": "sse-starlette", + "version": "3.5.0", + "metadata_sha256": "sha256:6dc401682bdae1a3e1f31b1c320b7f926c354643993840393875ebfc171c9014" + }, + "app/.venv/lib/python3.12/site-packages/starlette-1.8.0.dist-info/METADATA": { + "name": "starlette", + "version": "1.8.0", + "metadata_sha256": "sha256:551e8d74d290002521c655b816b27654e49922b88cb474c8d710a893099036f8" + }, + "app/.venv/lib/python3.12/site-packages/truststore-0.10.5.dist-info/METADATA": { + "name": "truststore", + "version": "0.10.5", + "metadata_sha256": "sha256:1fd496f290853214e630d96f7163d2dd916f84ebe634b58aa827d6853e8f8610" + }, + "app/.venv/lib/python3.12/site-packages/typing_extensions-4.16.0.dist-info/METADATA": { + "name": "typing_extensions", + "version": "4.16.0", + "metadata_sha256": "sha256:b05084ca1d50879865178d9fff9fabeab61bdfb1f361bfbde95421ffc8f9be46" + }, + "app/.venv/lib/python3.12/site-packages/typing_inspection-0.4.4.dist-info/METADATA": { + "name": "typing-inspection", + "version": "0.4.4", + "metadata_sha256": "sha256:bad3d9e6342ef6750cf5128ec942327b8bebdce0b6e4d6f67cb15b27ae5118da" + }, + "app/.venv/lib/python3.12/site-packages/uncalled_for-0.4.1.dist-info/METADATA": { + "name": "uncalled-for", + "version": "0.4.1", + "metadata_sha256": "sha256:45a21666ddfa8ca8d4e2423c05edaeaa7827686a3ae4fed82b24427854745c2f" + }, + "app/.venv/lib/python3.12/site-packages/uvicorn-0.54.0.dist-info/METADATA": { + "name": "uvicorn", + "version": "0.54.0", + "metadata_sha256": "sha256:9399e5ddda3d26e842d6fb5420c38b0857aac568d53badbdc224b3a21339efa8" + }, + "app/.venv/lib/python3.12/site-packages/uvloop-0.23.0.dist-info/METADATA": { + "name": "uvloop", + "version": "0.23.0", + "metadata_sha256": "sha256:fe11a50198ffd4d9f1cb20922dc638ad459d5e63e6c615b0c1c69448d3362977" + }, + "app/.venv/lib/python3.12/site-packages/watchfiles-1.3.0.dist-info/METADATA": { + "name": "watchfiles", + "version": "1.3.0", + "metadata_sha256": "sha256:1fba87d08d66f10f7515e4817abd4ac7f27abf3300cb33b7ad3f79762987a502" + }, + "app/.venv/lib/python3.12/site-packages/websockets-17.2.dist-info/METADATA": { + "name": "websockets", + "version": "17.2", + "metadata_sha256": "sha256:0d5f1279d095e7ba84ef21614af0822dc500ccb2e51b7c3a19eda7159b2dade4" + }, + "app/.venv/lib/python3.12/site-packages/hub_core-0.2.0.dist-info/METADATA": { + "name": "hub-core", + "version": "0.2.0", + "metadata_sha256": "sha256:84a59c6ea36d6d8a0b91b76e52f351a5ce6f2fd9ace8a4c887b51bab05973953" + } + }, + "package_metadata_equal_to_deployed_image": true, + "hub_core_source_hashes_equal_to_deployed_image": true, + "image_executed": false, + "image_installed_or_daemon_pulled": false, + "anonymous_protocol_only": true, + "token_retained": false, + "limitations": [ + "Selected code hashes and package inventory do not prove full application acceptance or hermetic provenance.", + "Floating dependency origins remain unknown; observed byte changes require explicit review.", + "New API behavior is not deployed or natively accepted." + ] +} diff --git a/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/FINAL-PROPOSAL.md b/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/FINAL-PROPOSAL.md new file mode 100644 index 00000000..51d5d6a5 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/FINAL-PROPOSAL.md @@ -0,0 +1,23 @@ +# Deploy the frozen-binding API guard + +Proposal **STATE-WP-0095-T10-frozen-bindings-guard-r1**, revision 1. Pending founder approval for `ADMINISTER @ realm:kubernetes/railiance01`, `activation=APPROVED`. + +The approved receiver rollout is healthy at Helm 76. Its later ordinary maintenance path exposed a separate defect: the legacy binding endpoint refreshed three frozen parent rows. All fifteen task rows and the archive bytes stayed unchanged. The original failed full-row comparison is retained; the original parent preimages were not saved and will not be guessed. + +The source fixes are published in State Hub c103cbf3c8bed5dba87a03e320595ddded9301a3. They protect the exact three bound parents and fifteen task UUIDs in the checker, repair engine and API binding endpoint. Ordinary inbound dependencies remain allowed. The installed checker is now hash-verified against that source. Its actual maintenance rerun omitted all three frozen bindings and preserved all eighteen **current** full rows. The unrelated staged brief accidentally included by the old writeback helper was restored through a forward commit; its original index/worktree state is preserved. Five real Git tests verify the corrected file-scoped commit behavior. Independent guard review passed 109 isolated cases; canonical guard tests passed 102. These are separate from new runtime acceptance. + +Promote this verified CI artifact through the owner Helm path: + +`forgejo.coulomb.social/coulomb/state-hub:main-c103cbf@sha256:4cc4ce17bbcdb1b66132d07c5b7b741f46df83124ef1c8403ffabdafba6993d1` + +Use the already frozen chart archive with SHA256 b5c0663d830fc8d3b65080f237a0be8d01f8b2f7fec9dc33aeba91b1b6b281d4, preserving release values. Its fresh server dry-run passes: eight identities, three image changes. Public read-only image inspection verifies the selected guard/receiver/migration files and CI build ID; package metadata and hub-core source hashes match the deployed image. Fresh target/schema/readiness/headroom checks pass. All are refreshed before actual execution. Floating build origins and complete application/concurrent-writer acceptance remain outside these byte checks. + +The exact upgrade is bound in proposal-metadata.json: stage the hash-verified archive in the specified owned remote directory, then use `--reuse-values --set-string image.tag= --atomic --timeout 3m`. Observe the exact new Job and owned Pods. Schema is already c4d5e6f7a8b9, and no migration file changed, but the existing migration hook and its recovery limitations still apply. + +Verify delivered digest and module hashes, API/MCP readiness, schema and full-row preservation from a fresh **current** baseline. Run the eight prepared native cases only inside rollback transactions with commit interception enforced, then compare a fresh transaction. The prepared probe helper covers all three parents, ordinary-first invalid batches and expected-task/ownership/status refusals; its actual schema and commit-interception contracts are checked without a database connection. New probes are not yet executed. Rerun the verified-client ordinary maintenance path between current hash snapshots, preserve archive bytes and unrelated staged files, and read back source/remote/Hub bindings. + +Approval includes using the current hashed rows for successor acceptance while retaining the prior parent-row mismatch as an explicit historical exception. It does not turn that failed comparison into a pass or restore its unavailable preimages. T07 and RMGR19T06 close only after the new receiving and corrected whole-pipeline checks pass with that exception recorded. All sixteen NetKingdom native target gates remain separate. + +Approval must also cover [the exact conditional recovery](RECOVERY.md): only the newly observed owned Job may be cancelled with a UID precondition; verify database connection/lock quiescence before rollback to Helm **76**. Unknown mapping or mixed state stops for attended owner recovery. Helm timeout is not an outage or Job-lifetime bound; rollback retains schema. + +Attributable EUR cost and credible loss exposure remain unpriced on the existing cluster. This needs scoped supervised approval and creates no autopilot, credential or monetary grant. diff --git a/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/RECOVERY.md b/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/RECOVERY.md new file mode 100644 index 00000000..7d699db3 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/RECOVERY.md @@ -0,0 +1,17 @@ +# Guard successor: conditional recovery + +Proposal STATE-WP-0095-T10-frozen-bindings-guard-r1, revision 1. + +The prior deployed release is Helm 76, with image manifest c802690ee1811b3d77df4077936f9cdced1385514e8673fcbc9232b84d645015 and schema c4d5e6f7a8b9. Refresh this baseline before execution. The successor's migration files are unchanged, but its existing pre-upgrade migration hook still runs. Its three-minute Helm wait does not stop the Job or bound outage, and the Job has no active deadline. + +Observe the new Job UID, creation timestamp, exact successor image, Helm release/hook ownership and owned Pod UIDs/IPs using watch_rollout.py. If Helm fails or times out with this trial Job active, revalidate all identities immediately. Approval includes deleting only this exact new Job with a UID precondition and foreground propagation, and observing its bound Pods terminate. A reused name, foreign ownership, unexpected image, unobserved UID or ambiguous mapping stops automatic recovery. No name-only or blanket deletion, finalizer removal or broad database cancellation is authorized. + +Through the existing private database-owner execution path, bind migration connections to the captured Pod/IP and start window, and verify those exact connections, transactions and locks are gone. Retain only connection-identity/state/lock-count metadata. Query text, parameters, credentials and DSNs remain private. If pooling/NAT, missing observation or access makes this mapping unknown, stop for attended database-owner recovery. Pod disappearance alone is insufficient. + +After verified quiescence, inspect actual schema and release state. If application rollback is needed, the approved prior target is **76**, retaining frozen Forge receiving support. Use the normal owner SSH path, KUBECONFIG=/etc/rancher/k3s/k3s.yaml, and: + +``` +helm -n state-hub rollback state-hub 76 --no-hooks --wait --timeout 3m +``` + +Verify image, readiness, schema, full-row hashes and remaining Job/Pod state. The database retains its additive schema; do not downgrade or invent old parent values. The verified installed client guard remains in use. Removing receiving support or reverting the client guard is outside this recovery. Unknown/mixed state stops for attended handling; a failed or rescued attempt remains a failed/refined outcome. diff --git a/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/SUPERSEDED.md b/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/SUPERSEDED.md new file mode 100644 index 00000000..3e611541 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/SUPERSEDED.md @@ -0,0 +1,9 @@ +Revision 1 was never approved or executed. The same proposal's current review is +[revision 2](../guard-successor-review-r2/FINAL-PROPOSAL.md). + +The original metadata and its bound digests remain unchanged. The original helper +is retained locally; its generic API-key scanner finding was a module-to-SHA256 +mapping. Revision 2 exposes the same hashes as explicit module/SHA256 records. +The published `verify_revision1_helper_preimage.py` reconstructs the original +helper bytes in memory and checks their original bound SHA256 without executing +the helper or printing source. No scanner rule or ignore list was changed. diff --git a/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/exact-server-dryrun.json b/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/exact-server-dryrun.json new file mode 100644 index 00000000..ce1a1f9f --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/guard-successor-review-r1/exact-server-dryrun.json @@ -0,0 +1,136 @@ +{ + "schema": "statehub.exact-reuse-values-readonly-diff.v1", + "status": "passed_images_only", + "dryrun_argv": [ + "helm", + "--kubeconfig", + "/home/worsch/.kube/config-railiance01", + "-n", + "state-hub", + "upgrade", + "state-hub", + "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-16/cluster-historical-publication-r1/revisions/r4-rollout-review/state-hub-0.1.0.tgz", + "--reuse-values", + "--set-string", + "image.tag=main-c103cbf@sha256:4cc4ce17bbcdb1b66132d07c5b7b741f46df83124ef1c8403ffabdafba6993d1", + "--dry-run=server", + "--hide-secret", + "--no-hooks", + "--timeout", + "3m" + ], + "production_mutations": false, + "hooks_executed": false, + "raw_helm_values_release_content_logs_retained": false, + "limitations": [ + "Dry-run admission/render only, not an actual image pull/migration/deployment.", + "Helm timeout does not stop a later live migration Job; exact scoped cancellation/quiescence remains required." + ], + "chart_archive_sha256": "sha256:b5c0663d830fc8d3b65080f237a0be8d01f8b2f7fec9dc33aeba91b1b6b281d4", + "stage": "exact_upgrade_server_dryrun", + "objects": [ + { + "api_version": "apps/v1", + "kind": "Deployment", + "namespace": "state-hub", + "name": "state-hub", + "intended_images": [ + "forgejo.coulomb.social/coulomb/state-hub:main-c103cbf@sha256:4cc4ce17bbcdb1b66132d07c5b7b741f46df83124ef1c8403ffabdafba6993d1" + ], + "intended_spec_sha256": "sha256:df32d106c28b270c67aa683c8a4f20b26c430b121420c4023d34d23ede0eaed9", + "baseline_object_sha256": "sha256:01e7278447f3204ec8abfd9a7b5b6be61850995b3e792fc1f97fbc3207536d69", + "intended_object_sha256": "sha256:7b7c78921b071732c8e7c4c062bdbd26787498581102ea9916b07c1f57887a73", + "changed_paths": [ + "/spec/template/spec/containers/0/image" + ] + }, + { + "api_version": "apps/v1", + "kind": "Deployment", + "namespace": "state-hub", + "name": "state-hub-mcp", + "intended_images": [ + "forgejo.coulomb.social/coulomb/state-hub:main-c103cbf@sha256:4cc4ce17bbcdb1b66132d07c5b7b741f46df83124ef1c8403ffabdafba6993d1" + ], + "intended_spec_sha256": "sha256:50ae88c8c57919bf745a772a8ff34ea7e469751a403ac39d1d01ab2e9d3a27db", + "baseline_object_sha256": "sha256:9a4376e004060a4ec2c76784fd50ec6ce05f61b3793f6458625d88122a7b8713", + "intended_object_sha256": "sha256:b78c66a3e27bca60ff4dd4f51c1bbe789a4e246be3d1e7e6fb9659ffdce80127", + "changed_paths": [ + "/spec/template/spec/containers/0/image" + ] + }, + { + "api_version": "batch/v1", + "kind": "Job", + "namespace": "state-hub", + "name": "state-hub-migrate", + "intended_images": [ + "forgejo.coulomb.social/coulomb/state-hub:main-c103cbf@sha256:4cc4ce17bbcdb1b66132d07c5b7b741f46df83124ef1c8403ffabdafba6993d1" + ], + "intended_spec_sha256": "sha256:2eb273b5e2ca5538fa1b13a8cf8cd10d259ad7cd3510bce1e86075f8c4c4a915", + "baseline_object_sha256": "sha256:6909dca9acd5e1b816491b91b6a32ef6d934e288e2d8d0d3d66fac9fe67468ec", + "intended_object_sha256": "sha256:208b52d9b958b9d4490182bda4d0da27b4a6f0961f6bf182c34ef4b640fcbb5e", + "changed_paths": [ + "/spec/template/spec/containers/0/image" + ] + }, + { + "api_version": "v1", + "kind": "ConfigMap", + "namespace": "state-hub", + "name": "state-hub-classification-allowed", + "intended_images": [], + "intended_spec_sha256": "sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "baseline_object_sha256": "sha256:924d16a0a6b4ba8a46b59f0990dcc2adc6dd813cf5d7d83bdb389844068d7cfd", + "intended_object_sha256": "sha256:924d16a0a6b4ba8a46b59f0990dcc2adc6dd813cf5d7d83bdb389844068d7cfd", + "changed_paths": [] + }, + { + "api_version": "v1", + "kind": "ConfigMap", + "namespace": "state-hub", + "name": "state-hub-config", + "intended_images": [], + "intended_spec_sha256": "sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "baseline_object_sha256": "sha256:26707b20933b4f6de78f9059c0efec6df7f0e90c8f1a67db6d2f1ac72e674560", + "intended_object_sha256": "sha256:26707b20933b4f6de78f9059c0efec6df7f0e90c8f1a67db6d2f1ac72e674560", + "changed_paths": [] + }, + { + "api_version": "v1", + "kind": "Service", + "namespace": "state-hub", + "name": "state-hub", + "intended_images": [], + "intended_spec_sha256": "sha256:da5895e6aee1f619d16c07dafd4342cf7ec8f9de0944a84979c624a4e9eea22a", + "baseline_object_sha256": "sha256:62098bbc3ef6265e072f416ecb11de85d59fce7e2e0d22b2616bd233e720dafe", + "intended_object_sha256": "sha256:62098bbc3ef6265e072f416ecb11de85d59fce7e2e0d22b2616bd233e720dafe", + "changed_paths": [] + }, + { + "api_version": "v1", + "kind": "Service", + "namespace": "state-hub", + "name": "state-hub-mcp", + "intended_images": [], + "intended_spec_sha256": "sha256:4e04175b03bcd75833109d6843e282cee79d73eae2bc85e36097264b832ba26f", + "baseline_object_sha256": "sha256:ab096d239c9cd72e6177a260d9b4d548a7d5b7c0a285c3a11b7267193e336bba", + "intended_object_sha256": "sha256:ab096d239c9cd72e6177a260d9b4d548a7d5b7c0a285c3a11b7267193e336bba", + "changed_paths": [] + }, + { + "api_version": "v1", + "kind": "ServiceAccount", + "namespace": "state-hub", + "name": "state-hub", + "intended_images": [], + "intended_spec_sha256": "sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "baseline_object_sha256": "sha256:750594b51a534d603f50640d02a3c4eec79cc52fe07d5f442102d37b7299adb8", + "intended_object_sha256": "sha256:750594b51a534d603f50640d02a3c4eec79cc52fe07d5f442102d37b7299adb8", + "changed_paths": [] + } + ], + "changed_object_count": 3, + "intended_diff_only_images": true, + "object_identity_set_unchanged": true +}