diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index 9341fc4..9ac4aa3 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -383,5 +383,5 @@ | task | STATE-WP-0094-T05 | progress | — | workplans/STATE-WP-0094-routed-gates-and-owner-returns.md | | task | STATE-WP-0095-T01 | done | — | workplans/STATE-WP-0095-historical-source-receiving.md | | task | STATE-WP-0095-T02 | done | — | workplans/STATE-WP-0095-historical-source-receiving.md | -| task | STATE-WP-0095-T03 | wait | — | workplans/STATE-WP-0095-historical-source-receiving.md | +| task | STATE-WP-0095-T03 | done | — | workplans/STATE-WP-0095-historical-source-receiving.md | | task | STATE-WP-0095-T04 | wait | — | workplans/STATE-WP-0095-historical-source-receiving.md | diff --git a/deploy/railiance/apps/charts/state-hub/Chart.yaml b/deploy/railiance/apps/charts/state-hub/Chart.yaml index d44f611..b20f207 100644 --- a/deploy/railiance/apps/charts/state-hub/Chart.yaml +++ b/deploy/railiance/apps/charts/state-hub/Chart.yaml @@ -3,4 +3,4 @@ name: state-hub description: State Hub API service for private Railiance operation type: application version: 0.1.0 -appVersion: "main-3791e60" +appVersion: "main-5dd3df9" diff --git a/docs/evidence/2026-10-04-historical-receiving-rollout.json b/docs/evidence/2026-10-04-historical-receiving-rollout.json new file mode 100644 index 0000000..7f71087 --- /dev/null +++ b/docs/evidence/2026-10-04-historical-receiving-rollout.json @@ -0,0 +1,280 @@ +{ + "workplan_id": "STATE-WP-0095", + "task_id": "STATE-WP-0095-T03", + "status": "verified", + "deployed_commit": "5dd3df9c69eb564af10ea5ea01e349786212501a", + "historical_preservation_verified": true, + "global_task_holder_guard_verified": true, + "helm_revision": 72, + "rollback_revision": 71, + "verified_at": "2026-10-04T09:32:27.114135+00:00", + "pods": [ + { + "name": "state-hub-6b8d94478f-68n9d", + "containers": [ + { + "name": "state-hub", + "ready": true, + "image": "forgejo.coulomb.social/coulomb/state-hub:main-5dd3df9", + "image_id": "forgejo.coulomb.social/coulomb/state-hub@sha256:907a9bfe3241c9e68127f0db84c0b4774744f92180935e9d7ed62eea7f06f145" + } + ] + }, + { + "name": "state-hub-mcp-7c7c54449c-d67v6", + "containers": [ + { + "name": "state-hub-mcp", + "ready": true, + "image": "forgejo.coulomb.social/coulomb/state-hub:main-5dd3df9", + "image_id": "forgejo.coulomb.social/coulomb/state-hub@sha256:907a9bfe3241c9e68127f0db84c0b4774744f92180935e9d7ed62eea7f06f145" + } + ] + } + ], + "health": { + "status": "ok", + "db": "connected", + "instance_role": "primary", + "instance_label": "railiance01", + "schema": { + "status": "ok", + "applied": "a0b1c2d3e4f5", + "expected": "a0b1c2d3e4f5" + } + }, + "historical_preservation": { + "activity-core": { + "expected_commit": "3dd68d118b3fb60e45926dcb238d4f1ab4d447ac", + "receipt": { + "schema": "state-hub.repository-projection-reconcile.v1", + "instance_role": "primary", + "instance_label": "railiance01", + "expected_commit": "3dd68d118b3fb60e45926dcb238d4f1ab4d447ac", + "derived_commit": "3dd68d118b3fb60e45926dcb238d4f1ab4d447ac", + "outcome": { + "schema": "state-hub.projection-reset.v1", + "repo_slug": "activity-core", + "commit": "3dd68d118b3fb60e45926dcb238d4f1ab4d447ac", + "status": "refused", + "counts": { + "created": 0, + "updated": 0, + "retired": 0, + "refused": 3, + "released": 0, + "created_tasks": 0, + "updated_tasks": 0, + "cancelled_tasks": 0 + }, + "created": [], + "updated": [], + "retired": [], + "released": [], + "created_tasks": [], + "updated_tasks": [], + "cancelled_tasks": [], + "refused": [ + { + "reason": "would be retired; the forge no longer derives it", + "slug": "custodian-wp-0003a", + "status": "done", + "backing_relative_path": "workplans/custodian-WP-0003a-event-bridge-model-rules-registry.md" + }, + { + "reason": "would be retired; the forge no longer derives it", + "slug": "custodian-wp-0003b", + "status": "done", + "backing_relative_path": "workplans/custodian-WP-0003b-event-bridge-parser-workflow-triggers.md" + }, + { + "reason": "would be retired; the forge no longer derives it", + "slug": "custodian-wp-0003", + "status": "archived", + "backing_relative_path": "workplans/archived/260707-custodian-WP-0003-event-bridge.md" + } + ], + "notes": [ + "Re-run with acknowledgement to retire these. Nothing was changed." + ] + } + }, + "parents": 4, + "tasks": 64, + "historical_rows_equal": true, + "parent_uuid_set_preserved": true, + "task_uuid_set_preserved": true + }, + "the-custodian": { + "expected_commit": "580a7fb00fbb9d0a6dcc2cbca56ec4cdbc3dd793", + "receipt": { + "schema": "state-hub.repository-projection-reconcile.v1", + "instance_role": "primary", + "instance_label": "railiance01", + "expected_commit": "580a7fb00fbb9d0a6dcc2cbca56ec4cdbc3dd793", + "derived_commit": "580a7fb00fbb9d0a6dcc2cbca56ec4cdbc3dd793", + "outcome": { + "schema": "state-hub.projection-reset.v1", + "repo_slug": "the-custodian", + "commit": "580a7fb00fbb9d0a6dcc2cbca56ec4cdbc3dd793", + "status": "applied", + "counts": { + "created": 0, + "updated": 84, + "retired": 0, + "refused": 0, + "released": 0, + "created_tasks": 0, + "updated_tasks": 27, + "cancelled_tasks": 0 + }, + "created": [], + "updated": [ + "CUST-WP-0000", + "CUST-WP-0000b", + "CUST-WP-0000c", + "CUST-WP-0001", + "CUST-WP-0002", + "CUST-WP-0004", + "CUST-WP-0005", + "CUST-WP-0006", + "CUST-WP-0007", + "CUST-WP-0008", + "CUST-WP-0009", + "CUST-WP-0010", + "CUST-WP-0010b", + "CUST-WP-0013", + "CUST-WP-0014", + "CUST-WP-0015", + "CUST-WP-0016", + "CUST-WP-0017", + "CUST-WP-0017-LEGACY", + "CUST-WP-0018", + "CUST-WP-0019", + "CUST-WP-0020", + "CUST-WP-0021", + "CUST-WP-0022", + "CUST-WP-0023", + "CUST-WP-0024", + "CUST-WP-0025", + "CUST-WP-0026", + "CUST-WP-0027", + "CUST-WP-0028", + "CUST-WP-0029", + "CUST-WP-0030", + "CUST-WP-0031", + "CUST-WP-0032", + "CUST-WP-0033", + "CUST-WP-0034", + "CUST-WP-0035", + "CUST-WP-0036", + "CUST-WP-0037", + "CUST-WP-0039", + "CUST-WP-0040", + "CUST-WP-0041", + "CUST-WP-0043", + "CUST-WP-0044", + "CUST-WP-0045", + "CUST-WP-0046", + "CUST-WP-0047", + "CUST-WP-0048", + "CUST-WP-0049", + "CUST-WP-0050", + "CUST-WP-0051", + "CUST-WP-0052", + "CUST-WP-0053", + "CUST-WP-0053-LEGACY", + "CUST-WP-0054", + "CUST-WP-0055", + "CUST-WP-0056", + "CUST-WP-0057", + "CUST-WP-0058", + "CUST-WP-0059", + "CUST-WP-0060", + "CUST-WP-0061", + "CUST-WP-0062", + "CUST-WP-0063", + "CUST-WP-0064", + "CUST-WP-0065", + "CUST-WP-0066", + "CUST-WP-0067", + "CUST-WP-0068", + "CUST-WP-0069", + "CUST-WP-0070", + "CUST-WP-0071", + "CUST-WP-0072", + "CUST-WP-0073", + "CUST-WP-0074", + "CUST-WP-0075", + "CUST-WP-0076", + "CUST-WP-0077", + "CUST-WP-ADHOC-2026-03-29", + "CUST-WP-ADHOC-2026-05-02", + "CUST-WP-ADHOC-2026-07-02", + "CUST-WP-ADHOC-2026-08-25", + "CUST-WP-ADHOC-2026-09-06", + "THE-WP-0001" + ], + "retired": [], + "released": [], + "created_tasks": [], + "updated_tasks": [ + "CUST-WP-0072-T01", + "CUST-WP-0072-T02", + "CUST-WP-0072-T03", + "CUST-WP-0072-T04", + "CUST-WP-0073-T01", + "CUST-WP-0073-T02", + "CUST-WP-0073-T03", + "CUST-WP-0073-T04", + "CUST-WP-0073-T05", + "CUST-WP-0074-T01", + "CUST-WP-0074-T02", + "CUST-WP-0074-T03", + "CUST-WP-0074-T04", + "CUST-WP-0074-T05", + "CUST-WP-0074-T06", + "CUST-WP-0075-T01", + "CUST-WP-0075-T02", + "CUST-WP-0075-T03", + "CUST-WP-0075-T04", + "CUST-WP-0075-T05", + "CUST-WP-0075-T06", + "CUST-WP-0076-T01", + "CUST-WP-0077-T01", + "CUST-WP-0077-T02", + "CUST-WP-0077-T03", + "CUST-WP-0077-T04", + "CUST-WP-0077-T05" + ], + "cancelled_tasks": [], + "refused": [], + "notes": [ + "Preserved bound historical row and task UUIDs: CUST-WP-ADHOC-2026-08-25-RETIRED" + ] + } + }, + "parents": 1, + "tasks": 1, + "historical_rows_equal": true, + "parent_uuid_set_preserved": true, + "task_uuid_set_preserved": true + } + }, + "global_holder_guard": { + "status": "refused", + "global_task_holder_guard_verified": true, + "holder_parent_retired": true, + "committed": false, + "refusal_reasons": [ + "derived task identifier already belongs to another workplan" + ], + "transaction_rolled_back": true + }, + "approval_ref": "user_reply:call_o87uEfFs3AtXfxO5YqUnSpcg:0", + "unrelated_activity_gate": "Three stale custodian-wp-0003/a/b projections need separate disposition; no retirement acknowledgement issued.", + "deployed_source_sha256": { + "api/services/forge_projection.py": "d6cb3e520ca75d3addeb1c0775c2b36f0e81252efd41a22ab2dd7f035207d05c", + "api/services/historical_projection.py": "4d7cd127462bedaaf1c0915c6a11f58b25d28ae6f000eb89c95d903bf4a0e94e" + } +} diff --git a/workplans/STATE-WP-0095-historical-source-receiving.md b/workplans/STATE-WP-0095-historical-source-receiving.md index 688a73a..2080521 100644 --- a/workplans/STATE-WP-0095-historical-source-receiving.md +++ b/workplans/STATE-WP-0095-historical-source-receiving.md @@ -59,11 +59,11 @@ finish after applying reviewed source and its focused tests to the owning repo. ```task id: STATE-WP-0095-T03 -status: wait +status: done priority: high depends_on: [STATE-WP-0095-T02] -blocked_on: "state-hub owner must deliver the reviewed receiving commit through the normal deployment path and return deployment commit/version evidence before registrar admission" state_hub_task_id: "e8566341-cf6e-5b9c-ad80-8564d14cd52a" +decision_id: "36772026-f43d-4331-b466-5f4b1afe4eca" ``` No direct live code patch. This task is a deployment return, not policy authority @@ -77,8 +77,12 @@ id: STATE-WP-0095-T04 status: wait priority: high depends_on: [STATE-WP-0095-T03, RMGR-WP-0019-T03] -blocked_on: "repo-manager owner RMGR-WP-0019-T02/T03 must return normal historical registrar/replay receipts and before/after preserved UUID verification" +blocked_on: "message-from:activity-core" +blocking_reason: "Normal Activity replay transaction refused three stale custodian-wp-0003/custodian-wp-0003a/custodian-wp-0003b projections. Activity Core owner must return separately reviewed disposition before any retirement acknowledgement; none is authorized. Retain RMGR-WP-0019-T03 normal-replay dependency." state_hub_task_id: "3bbb311f-194e-5862-8aed-358a580f22b4" +decision_id: "91b7c633-a66f-5d43-9f4b-6565aefb9356" +needs_human: true +intervention_note: "Owner disposition must name the three empty duplicate Activity projections; receiving must enforce the exact expected retirement set before execution. Existing rollout approval excludes retirement acknowledgement." ``` Verify Activity four historical parent UUIDs/64 task UUIDs and Custodian retired @@ -98,3 +102,32 @@ cases passed; the independent offline current-source/current-hub-snapshot proof retained five existing parents and 65 task UUIDs, no mutations, clean historical diff. T02 is source-complete; T03/T04 remain wait for reviewed deployment and normal registrar/replay receiving, respectively. Evidence: docs/evidence/2026-10-04-historical-receiving-source.json. + + +## Verified receiving rollout and remaining replay gate, 2026-10-04 + +T03 is done on actual founder approval of proposal +STATE-WP-0095-T03-historical-receiving revision 1, SHA256 +`d6789359b3fe7988a6201fff6f367cb46948aa197e1cc0ca66c31f45e1ea9981`, +approval receipt reference `user_reply:call_o87uEfFs3AtXfxO5YqUnSpcg:0`. +The normal owner Helm path delivered `main-5dd3df9`, commit +`5dd3df9c69eb564af10ea5ea01e349786212501a`, revision 72; API and MCP are Ready, +primary/railiance01 health and schema a0b1c2d3e4f5 verified, running source +hashes match. Rollback remains revision 71; no receipt-table downgrade is needed. +Actual historical preservation and global task-holder refusal were verified in +the delivered version. Durable receipt: +[verified historical receiving rollout](../docs/evidence/2026-10-04-historical-receiving-rollout.json). + +Custodian immutable replay applied while preserving the retired historical +parent/task UUIDs. Activity immutable replay retained all four historical parent +and 64 task UUIDs and historical row contents, but refused transactionally on +three unrelated stale projections: custodian-wp-0003 (archived), +custodian-wp-0003a (done), custodian-wp-0003b (done). No retirement acknowledgement +was issued and that refusal is not represented as normal replay success. + +Registrar source `c41d36c2` has 38 actual passing tests and Repo Manager's own +normal sync succeeded; registrar admission does not authorize retiring Activity +projections. T04 therefore remains wait, retaining RMGR-WP-0019-T03 and awaiting +Activity Core's precise reviewed disposition of those three stale rows. No +rename, identity migration, new paid native trial or further live action is +included in this source status update.