diff --git a/decisions/RMGR-DEC-2026-002-markitect-identifier-batch.md b/decisions/RMGR-DEC-2026-002-markitect-identifier-batch.md new file mode 100644 index 0000000..3ee2510 --- /dev/null +++ b/decisions/RMGR-DEC-2026-002-markitect-identifier-batch.md @@ -0,0 +1,47 @@ +# RMGR-DEC-2026-002 — Markitect identifier cutover batch + +```yaml +id: RMGR-DEC-2026-002 +kind: decision +title: Approve deterministic identifier batch 0003 for markitect-main +status: open +decision_type: pending +owner: Bernd Worsch +repo: repo-manager +workplan: RMGR-WP-0005 +workplan_task: RMGR-WP-0005-T04 +requested_dispositions: + - approved + - revised + - rejected +source_plan: docs/evidence/RMGR-WP-0005-helixforge-uuid-migration-plan-2026-08-22-v2.json +source_plan_sha256: ac97f6e4f0b35db63a0dc1b4a439f0a39738d13c1407f18419f706d780d4eea0 +batch_manifest: docs/evidence/RMGR-WP-0005-batch-0003-markitect-main.json +batch_sha256: 494db8e101aeae7f8488082565dec3b4dd5c9c6ccb5f8812aaf233f813768f67 +scope: + repositories: [markitect-main] + replacements: 2 + assignments: 0 +apply_authorized: false +approval_effect: >- + Approved authorizes one repository-atomic forward cutover of exactly the + pinned batch in both current projections and the authoritative repository + file, subject to repeated no-drift and restore-point checks. Revised or + rejected authorizes no mutation. +rollback: >- + Reverse the file transaction if written, then reverse production and + workstation projection transactions using their durable aliases. +evidence: docs/evidence/RMGR-WP-0005-batch-0003-markitect-readiness-2026-08-22.md +created: "2026-08-22" +updated: "2026-08-22" +``` + +## Decision requested + +Approve, revise, or reject the exact batch manifest named above. Approval is +limited to `markitect-main`, `MARKITECT-WP-0002`, and +`MARKITECT-WP-0002-T01`; it does not authorize any later or broader batch. + +The manifest remains fail-closed: any Git, source-fingerprint, projection, or +plan-seal drift before execution voids the approval and requires a new batch +hash. diff --git a/docs/evidence/RMGR-WP-0005-batch-0003-markitect-main.json b/docs/evidence/RMGR-WP-0005-batch-0003-markitect-main.json new file mode 100644 index 0000000..c5cb368 --- /dev/null +++ b/docs/evidence/RMGR-WP-0005-batch-0003-markitect-main.json @@ -0,0 +1,47 @@ +{ + "schema": "repo-manager.identifier-migration-batch.v1", + "ok": true, + "ready_for_approval": true, + "apply_authorized": false, + "approval_required": true, + "namespace": "helixforge", + "source_plan_sha256": "ac97f6e4f0b35db63a0dc1b4a439f0a39738d13c1407f18419f706d780d4eea0", + "batch_policy": "repository-atomic, sequential, stop on first failure", + "rollback_order": "reverse files if written, then reverse central projection", + "generated_at": "2026-08-22T14:20:25.402175Z", + "totals": { + "repositories": 1, + "records": 2, + "replace": 2, + "assign": 0, + "unchanged": 0 + }, + "repositories": [ + { + "repo": "markitect-main", + "path": "/home/worsch/markitect-main", + "planned_head_sha": "3a45d51bbad49512d2610950eccaa3c2782a8523", + "source_fingerprint": "a6c5a705f7d5e0dc5620f469e0382467b7908a71390afac915557d7e9c33df77", + "source_verified": true, + "git_preflight": { + "ok": true, + "head_sha": "3a45d51bbad49512d2610950eccaa3c2782a8523", + "expected_head_sha": "3a45d51bbad49512d2610950eccaa3c2782a8523", + "upstream": "origin/main", + "behind": 0, + "ahead": 0, + "origin": "forgejo-remote:coulomb/markitect-main.git", + "errors": [] + }, + "mapping_counts": { + "records": 2, + "replace": 2, + "assign": 0, + "unchanged": 0 + }, + "ready": true + } + ], + "errors": [], + "batch_sha256": "494db8e101aeae7f8488082565dec3b4dd5c9c6ccb5f8812aaf233f813768f67" +} diff --git a/docs/evidence/RMGR-WP-0005-batch-0003-markitect-readiness-2026-08-22.md b/docs/evidence/RMGR-WP-0005-batch-0003-markitect-readiness-2026-08-22.md new file mode 100644 index 0000000..c82a745 --- /dev/null +++ b/docs/evidence/RMGR-WP-0005-batch-0003-markitect-readiness-2026-08-22.md @@ -0,0 +1,72 @@ +# RMGR-WP-0005 batch 0003 readiness + +**Observed at:** `2026-08-22T14:20:25Z` + +**Scope:** `markitect-main` only + +**Decision:** `RMGR-DEC-2026-002` + +## Outcome + +The next deterministic-identifier batch is sealed and ready for an explicit +approval decision. No database or repository identifier was changed. + +Source plan: +`RMGR-WP-0005-helixforge-uuid-migration-plan-2026-08-22-v2.json`, SHA-256 seal +`ac97f6e4f0b35db63a0dc1b4a439f0a39738d13c1407f18419f706d780d4eea0`. + +Batch manifest: +`RMGR-WP-0005-batch-0003-markitect-main.json`, SHA-256 seal +`494db8e101aeae7f8488082565dec3b4dd5c9c6ccb5f8812aaf233f813768f67`. + +## Mappings + +| Kind | Record | Current UUID | Derived UUID | +| --- | --- | --- | --- | +| Workplan | `MARKITECT-WP-0002` | `e203d487-01f1-494a-b14d-a436241a4c01` | `e03ef262-5284-5dd3-92d2-dbd85c6b6159` | +| Task | `MARKITECT-WP-0002-T01` | `88b3c206-4d45-4bb3-bbb3-47443cdf2123` | `1852eca1-92e2-518e-bb21-9dffbeb32a4f` | + +The batch contains two replacements, no assignments, and no unchanged records. +`markitect-main` is clean, exactly synchronized with `origin/main`, and uses +the Forgejo lineage. The source plan pins HEAD +`3a45d51bbad49512d2610950eccaa3c2782a8523` and source fingerprint +`a6c5a705f7d5e0dc5620f469e0382467b7908a71390afac915557d7e9c33df77`. + +## Projection preflight + +Read-only checks against the workstation and production projections agree: + +| Check | Workstation | Production | +| --- | ---: | ---: | +| Current workplan UUID lookup | 200 | 200 | +| Derived workplan UUID lookup | 404 | 404 | +| Current task UUID lookup | 200 | 200 | +| Derived task UUID lookup | 404 | 404 | +| Tasks linked to current workplan | 10 | 10 | +| Progress events linked to current workplan | 9 | 9 | +| Foreign-key references to current task | 0 | 0 | + +The workplan and task targets are absent in both projections. Dynamic inspection +of every current foreign key into `workplans` and `tasks` found only the ten +task rows and nine progress events shown above; the existing cascade contract +covers them. + +## Approved execution interface + +If `RMGR-DEC-2026-002` is approved against the exact batch hash: + +1. Re-run batch/source/Git and projection preflight; stop on any drift. +2. Retain fresh, verified workstation and production database restore points. +3. Apply the repository transaction to workstation and production projections. +4. Apply the sealed authoritative file transaction for `markitect-main`. +5. Commit and push only the mapped workplan file. +6. Run consistency twice against each projection and require old/new API + lookups of 404/200 for both records. +7. Require all ten tasks and nine progress events to remain linked to the + derived workplan and the mapped task's reference count to remain zero. +8. On failure after database apply, reverse written files if necessary, then + reverse production and workstation projection transactions through their + durable aliases. + +The decision does not authorize another repository, an assignment-only batch, +or restoration of the disabled production sweep. diff --git a/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md b/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md index cb464b1..e247604 100644 --- a/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md +++ b/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md @@ -463,6 +463,17 @@ restore hashes, commits, checks, and the bounded warning are in progress because the remaining fleet repositories require separately sealed and approved batches. +**Batch 0003 prepared (2026-08-22):** `markitect-main` is the smallest next +repository whose two mapped rows exist in both current projections. Its clean, +Forgejo-synchronized source still matches the sealed fleet plan. Both +projections return old/new lookups 200/404 for `MARKITECT-WP-0002` and +`MARKITECT-WP-0002-T01`, with 10 tasks and 9 progress events linked to the +workplan and no foreign-key reference to the mapped task. The fail-closed batch +hash is `494db8e101aeae7f8488082565dec3b4dd5c9c6ccb5f8812aaf233f813768f67`. +`RMGR-DEC-2026-002` is the directly actionable approval interface; no mutation +has run. Evidence: +`docs/evidence/RMGR-WP-0005-batch-0003-markitect-readiness-2026-08-22.md`. + ## Retire the interim rule ```task