diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index ae7d0c5..d87e282 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -47,7 +47,7 @@ | task | RMGR-WP-0005-T04 | progress | — | workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md | | task | RMGR-WP-0005-T05 | wait | — | workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md | | task | RMGR-WP-0005-T06 | done | — | workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md | -| task | RMGR-WP-0005-T07 | wait | — | workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md | +| task | RMGR-WP-0005-T07 | progress | — | workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md | | task | RMGR-WP-0005-T08 | done | — | workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md | | task | RMGR-WP-0005-T09 | done | — | workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md | | task | RMGR-WP-0005-T10 | done | — | workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md | diff --git a/docs/cache-rebuild_v1.md b/docs/cache-rebuild_v1.md new file mode 100644 index 0000000..f159c7f --- /dev/null +++ b/docs/cache-rebuild_v1.md @@ -0,0 +1,62 @@ +--- +id: RMGR-RUNBOOK-CACHE-0001 +type: runbook +title: "Repository projection cache rebuild" +version: "1" +status: active +created: "2026-08-21" +updated: "2026-08-21" +workplan_task: RMGR-WP-0005-T07 +--- + +# Repository projection cache rebuild v1 + +Repo Manager's local index is advisory. Repository files and Git history are +authoritative; deleting `.repo-manager/index.json` cannot delete work. + +## Inspect and rebuild + +```bash +rmgr cache status --path /path/to/repository +rmgr cache rebuild --path /path/to/repository --slug repository-slug +``` + +Status always reports `advisory`, `observed_at`, `age_seconds`, the indexed and +current source fingerprints, and explicit staleness reasons. Legacy indexes +without a fingerprint are stale. A source file changing after observation is +stale. Rebuild parses the files afresh and atomically replaces only the local +JSON projection. + +The fingerprint covers workplans, intake/decision record locations, registers, +classification, and the repository intent/goal file. It hashes relative paths +and bytes so uncommitted authoritative changes are visible even when Git HEAD +has not moved. + +## State Hub cache replacement gate + +Before replacing a legacy State Hub database, export the closed unbound +workplan provenance: + +```bash +rmgr cache export-closed \ + --api-base http://127.0.0.1:8000 \ + --output closed-workplan-provenance.json +``` + +The export is minimized to identity, repository, title, lifecycle, owner, and +creation/update timestamps. It includes a canonical UTC generation timestamp +and SHA-256 over canonical row JSON. The command refuses to overwrite an +existing export unless `--force` is supplied. + +A database replacement is not authorized by this command. Before replacement: + +1. verify the export count and `rows_sha256`; +2. prove that no live unbound file-derived records remain; +3. prove that hub-native records have reached their one authoritative central + owner, or retain the old database; +4. rebuild file-derived records into an isolated database and compare counts, + identifiers, statuses, and source provenance; +5. switch the local cache only after the comparison passes. + +The old database remains a recoverable source until those gates pass. Repo +Manager does not merge database-local file-derived state back into repositories. diff --git a/docs/evidence/RMGR-WP-0005-closed-provenance-2026-08-21.json b/docs/evidence/RMGR-WP-0005-closed-provenance-2026-08-21.json new file mode 100644 index 0000000..7e27e8d --- /dev/null +++ b/docs/evidence/RMGR-WP-0005-closed-provenance-2026-08-21.json @@ -0,0 +1,2398 @@ +{ + "schema": "repo-manager.closed-workplan-provenance.v1", + "ok": true, + "generated_at": "2026-08-21T21:21:02.247705Z", + "source": "http://127.0.0.1:8000", + "filter": "backing_filename is null and status in [finished, archived]", + "count": 217, + "rows_sha256": "40f227ecb138880d41cebf30a1f0559e709ab2d753be892409ea8e00f96d37d7", + "rows": [ + { + "id": "a2bf0779-bcb5-4c93-bb04-8de144dc2704", + "repo_id": "bb7ff575-e7d4-4115-aed8-228ba01a8b09", + "repo_slug": "binky-control", + "slug": "binky-control-statehub-cli-entrypoint-verification", + "title": "statehub CLI entrypoint verification", + "status": "archived", + "owner": "codex", + "created_at": "2026-07-20T23:05:26.615079Z", + "updated_at": "2026-07-20T23:05:35.049568Z" + }, + { + "id": "67045642-5dee-413e-b133-1dde7ba17ce5", + "repo_id": "bb7ff575-e7d4-4115-aed8-228ba01a8b09", + "repo_slug": "binky-control", + "slug": "binky-control-t03-live-promotion-verification-retest-workplan", + "title": "T03 live promotion verification retest (workplan)", + "status": "archived", + "owner": "codex", + "created_at": "2026-07-20T23:01:09.180841Z", + "updated_at": "2026-07-20T23:01:37.736474Z" + }, + { + "id": "f12e91f7-994a-453b-9484-8713d1fd3e4b", + "repo_id": "cce28433-34ce-4ab1-9ab4-4dac9222c802", + "repo_slug": "fin-hub", + "slug": "fin-wp-0002", + "title": "Fabric authority boundary for State Hub retirement", + "status": "archived", + "owner": "codex", + "created_at": "2026-08-09T19:39:52.921150Z", + "updated_at": "2026-08-10T18:06:40.561155Z" + }, + { + "id": "09350395-f628-4d8e-8c36-3cea330a8b6f", + "repo_id": "4432bf5e-37ba-4f30-90df-7adb92bf91cb", + "repo_slug": "ground-game", + "slug": "ground-wp-0002-report-260805", + "title": "clay-borg finding report, 2026-08-05 \u2014 one withdrawal, and ten rulings we had not collected", + "status": "archived", + "owner": "bernd", + "created_at": "2026-08-05T13:23:51.343212Z", + "updated_at": "2026-08-07T20:17:55.240881Z" + }, + { + "id": "fb552dd0-a746-4339-9b6f-49597796ea7d", + "repo_id": "4432bf5e-37ba-4f30-90df-7adb92bf91cb", + "repo_slug": "ground-game", + "slug": "ground-wp-0003-report-260807", + "title": "clay-borg: GR-E03 and GR-E04 played to the end, and what ATTACK is worth in each", + "status": "archived", + "owner": "bernd", + "created_at": "2026-08-07T08:40:18.030817Z", + "updated_at": "2026-08-07T20:18:07.476340Z" + }, + { + "id": "61cabf31-88a8-4ca6-9383-55b8fccddecf", + "repo_id": "4432bf5e-37ba-4f30-90df-7adb92bf91cb", + "repo_slug": "ground-game", + "slug": "ground-wp-0005-report-260805", + "title": "clay-borg difficulty measurement, 2026-08-05 \u2014 and a retraction of what we nearly sent instead", + "status": "archived", + "owner": "bernd", + "created_at": "2026-08-05T17:25:34.888668Z", + "updated_at": "2026-08-07T20:18:01.363863Z" + }, + { + "id": "2c9caad8-2ced-492d-9d63-376387b4b9b0", + "repo_id": "8a99bb74-1ec0-4478-ac70-35a7cddb0e3c", + "repo_slug": "key-cape", + "slug": "keycape-implementation", + "title": "KeyCape Implementation \u2014 Lightweight IAM Profile", + "status": "archived", + "owner": "Bernd", + "created_at": "2026-03-12T23:44:01.454718Z", + "updated_at": "2026-03-13T01:48:48.165815Z" + }, + { + "id": "f9accdbb-5ec5-431a-a22d-99edfcb31811", + "repo_id": "4589488d-625b-4ffe-b8f0-48744d7b1498", + "repo_slug": "net-kingdom", + "slug": "net-wp-0021", + "title": "Cut over NetKingdom identity to railiance01 and retire CoulombCore", + "status": "archived", + "owner": "codex", + "created_at": "2026-07-27T19:38:25.880250Z", + "updated_at": "2026-07-27T19:39:45.725068Z" + }, + { + "id": "6506b85d-ac7c-45ff-9bcc-c033941b0af0", + "repo_id": "c96dd8b3-3d15-4c50-8daf-0ec6a2c56ddf", + "repo_slug": "ops-hub", + "slug": "ops-wp-0002-probe", + "title": "Probe ops-hub workstream create", + "status": "archived", + "owner": "codex", + "created_at": "2026-06-06T17:26:16.796005Z", + "updated_at": "2026-06-06T17:28:13.109402Z" + }, + { + "id": "caed40ea-f6b8-4335-835b-ecf242d38380", + "repo_id": "74df727e-a756-42de-b776-11928b03bd1f", + "repo_slug": "ops-warden", + "slug": "warden-wp-0032", + "title": "Security zones \u2014 scope enforcement to bands of differing rigidity", + "status": "archived", + "owner": "ops-warden", + "created_at": "2026-08-19T18:32:14.745884Z", + "updated_at": "2026-08-19T18:42:03.742435Z" + }, + { + "id": "e82b1c2d-0c5e-47d3-9627-f85e7173dcbe", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-maturity-scorecard", + "title": "Phase Memory Maturity Scorecard", + "status": "archived", + "owner": "phase-memory", + "created_at": "2026-05-18T10:48:57.776685Z", + "updated_at": "2026-05-18T20:52:56.039486Z" + }, + { + "id": "5032c55c-2ee2-4b7e-b1eb-157f0f8ac647", + "repo_id": "c3fd0dd2-a0de-415c-8e3a-e37406f4b8f8", + "repo_slug": "railiance-cluster", + "slug": "rail-bs-wp-0008", + "title": "activity-core WP-0016 triage-output robustness deploy", + "status": "archived", + "owner": "railiance-cluster", + "created_at": "2026-07-01T22:03:47.292787Z", + "updated_at": "2026-07-01T22:13:01.034391Z" + }, + { + "id": "f2ca1a5d-4dd6-42ea-8003-969c7265f891", + "repo_id": "c3fd0dd2-a0de-415c-8e3a-e37406f4b8f8", + "repo_slug": "railiance-cluster", + "slug": "rail-bs-wp-0008-activity-core-wp0016-triage-output-deploy", + "title": "activity-core WP-0016 triage-output robustness deploy", + "status": "archived", + "owner": "railiance-cluster", + "created_at": "2026-07-01T21:59:30.974980Z", + "updated_at": "2026-07-01T22:12:48.626941Z" + }, + { + "id": "366eec46-3139-4810-ace6-ea75750fe821", + "repo_id": "c3fd0dd2-a0de-415c-8e3a-e37406f4b8f8", + "repo_slug": "railiance-cluster", + "slug": "rail-bs-wp-0009-activity-core-admin-sync-smoke", + "title": "activity-core no-restart admin-sync smoke (ACTIVITY-WP-0012-T05)", + "status": "archived", + "owner": "railiance-cluster", + "created_at": "2026-07-01T21:59:34.796426Z", + "updated_at": "2026-07-01T22:12:53.553543Z" + }, + { + "id": "6ead1dd5-bd12-476b-9e6c-67d437844834", + "repo_id": "2c0de614-e468-4eb6-8157-470649ac8c05", + "repo_slug": "railiance-fabric", + "slug": "railiance-fabric-rail-fab-wp-0024", + "title": "Rail Rapp Reef Fabric Adaptation", + "status": "archived", + "owner": "codex", + "created_at": "2026-07-25T13:28:27.285757Z", + "updated_at": "2026-07-25T13:41:54.377315Z" + }, + { + "id": "2749b45e-13f7-4065-9066-de709917a8ca", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "vergabe_teilnahme_impl", + "title": "Vergabe Teilnahme \u2014 Implementierung", + "status": "archived", + "owner": null, + "created_at": "2026-05-08T14:51:42.065602Z", + "updated_at": "2026-05-08T16:01:47.562288Z" + }, + { + "id": "aebf996c-8721-4e8c-9e56-61d5e4bf8dcb", + "repo_id": "e1575e7c-e1b0-4b46-98be-78bd49e06318", + "repo_slug": "artifact-store", + "slug": "artifact-store-wp-0001", + "title": "Foundation: Scaffold, Core Kernels, Local FS Backend", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T16:31:02.498225Z", + "updated_at": "2026-05-16T07:10:07.869670Z" + }, + { + "id": "cedbfe03-363c-43fd-a5cb-bef52b29af7e", + "repo_id": "e1575e7c-e1b0-4b46-98be-78bd49e06318", + "repo_slug": "artifact-store", + "slug": "artifact-store-wp-0002", + "title": "Ingestion API And Manifest Surface", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T19:25:33.718982Z", + "updated_at": "2026-05-16T13:15:19.955170Z" + }, + { + "id": "84930f4c-3bcf-415e-a94c-bfa854a15871", + "repo_id": "e1575e7c-e1b0-4b46-98be-78bd49e06318", + "repo_slug": "artifact-store", + "slug": "artifact-store-wp-0003", + "title": "Retention Lifecycle: Defaults, Extensions, Holds, Deletion Eligibility", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T19:25:34.648348Z", + "updated_at": "2026-05-16T21:07:56.734131Z" + }, + { + "id": "d0526cfc-e532-431f-970d-f3e548d27a80", + "repo_id": "e1575e7c-e1b0-4b46-98be-78bd49e06318", + "repo_slug": "artifact-store", + "slug": "artifact-store-wp-0004", + "title": "S3-Compatible Backend (Ceph RGW Target)", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T19:25:35.303371Z", + "updated_at": "2026-05-17T11:37:33.099567Z" + }, + { + "id": "701c4d8c-5cf4-4a4a-ab60-1dcae53fe771", + "repo_id": "e1575e7c-e1b0-4b46-98be-78bd49e06318", + "repo_slug": "artifact-store", + "slug": "artifact-store-wp-0005", + "title": "Guide-Board Pilot Ingestion", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T19:25:35.979179Z", + "updated_at": "2026-05-17T11:37:33.311697Z" + }, + { + "id": "ccef72e9-a160-45c0-9952-c64be7c8cfa4", + "repo_id": "e1575e7c-e1b0-4b46-98be-78bd49e06318", + "repo_slug": "artifact-store", + "slug": "artifact-store-wp-0006", + "title": "Garbage Collection And Reference Counting", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-16T22:24:51.843476Z", + "updated_at": "2026-05-16T22:26:53.275045Z" + }, + { + "id": "2f34bb96-7206-4cb5-acdf-43880b57a9ec", + "repo_id": "e1575e7c-e1b0-4b46-98be-78bd49e06318", + "repo_slug": "artifact-store", + "slug": "artifact-store-wp-0007", + "title": "MinIO Compatibility, MaxIO Fork Assessment, And STS Credential Vending", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-17T11:37:33.680459Z", + "updated_at": "2026-07-02T09:27:05.354171Z" + }, + { + "id": "a3ef5a46-17be-41a9-8df8-f457d86462da", + "repo_id": "32549b0d-b065-4294-b577-fad643fa38de", + "repo_slug": "can-you-assist", + "slug": "cya-wp-0001", + "title": "Console-Native MVP: CLI Skeleton, Safe Assistance Flow, and Integration Boundaries", + "status": "finished", + "owner": "grok", + "created_at": "2026-05-26T00:27:09.190718Z", + "updated_at": "2026-05-26T00:27:09.190718Z" + }, + { + "id": "ef676f87-97f4-4635-a80d-4065730df87f", + "repo_id": "32549b0d-b065-4294-b577-fad643fa38de", + "repo_slug": "can-you-assist", + "slug": "cya-wp-0002-memory-integration", + "title": "Memory Integration Roadmap: From Thin Ports to Profile-Driven phase-memory Backing", + "status": "finished", + "owner": "grok", + "created_at": "2026-05-26T00:44:55.292026Z", + "updated_at": "2026-05-26T05:01:35.178760Z" + }, + { + "id": "ac9a9d42-4db9-44d0-9b41-5e16d87c65c8", + "repo_id": "32549b0d-b065-4294-b577-fad643fa38de", + "repo_slug": "can-you-assist", + "slug": "cya-wp-0003-contextual-memory", + "title": "Contextual Memory Activation and Retrospection Loops for Continuous Optimization", + "status": "finished", + "owner": "grok", + "created_at": "2026-05-26T12:57:08.630201Z", + "updated_at": "2026-05-26T18:30:19.942432Z" + }, + { + "id": "7913b919-d76b-4374-bdc6-0330fe941666", + "repo_id": "32549b0d-b065-4294-b577-fad643fa38de", + "repo_slug": "can-you-assist", + "slug": "cya-wp-0004-dev-install-and-packaging", + "title": "Developer Installation from Git and Release Distribution Packaging", + "status": "finished", + "owner": "grok", + "created_at": "2026-05-26T18:45:55.679014Z", + "updated_at": "2026-05-26T22:19:29.759842Z" + }, + { + "id": "42ca48cb-f941-4b6a-9e8b-ad9fe534d1fd", + "repo_id": "32549b0d-b065-4294-b577-fad643fa38de", + "repo_slug": "can-you-assist", + "slug": "cya-wp-0005", + "title": "Agentic Memory Profiles (0\u20133) and phase-memory Interface Optimization", + "status": "finished", + "owner": "grok", + "created_at": "2026-05-27T10:51:08.709382Z", + "updated_at": "2026-05-28T01:28:25.531301Z" + }, + { + "id": "f62c6908-dec0-442c-83d2-e34f0e87c1e7", + "repo_id": "32549b0d-b065-4294-b577-fad643fa38de", + "repo_slug": "can-you-assist", + "slug": "cya-wp-0006", + "title": "Profile 1 Production Hardening: Reflection UX, Compaction, and Surfacing", + "status": "finished", + "owner": "grok", + "created_at": "2026-06-19T18:33:27.863616Z", + "updated_at": "2026-06-21T23:25:05.298800Z" + }, + { + "id": "449b820c-6a7d-4b2f-93d8-f742aba45eab", + "repo_id": "32549b0d-b065-4294-b577-fad643fa38de", + "repo_slug": "can-you-assist", + "slug": "cya-wp-0007", + "title": "Interactive Shell Session: REPL, History Context, and Hub-Aware Dev-Sec-Ops Helper", + "status": "finished", + "owner": "grok", + "created_at": "2026-06-21T23:39:27.620725Z", + "updated_at": "2026-06-23T12:26:16.069073Z" + }, + { + "id": "f713db12-5b90-4453-8fbb-a0e50f61699b", + "repo_id": "32549b0d-b065-4294-b577-fad643fa38de", + "repo_slug": "can-you-assist", + "slug": "cya-wp-0008", + "title": "llm-connect Adapter Integration for Production Assistance", + "status": "finished", + "owner": "grok", + "created_at": "2026-06-21T23:39:28.493598Z", + "updated_at": "2026-06-22T08:36:23.695721Z" + }, + { + "id": "0a1233fd-75ab-4726-8857-6c97de939069", + "repo_id": "32549b0d-b065-4294-b577-fad643fa38de", + "repo_slug": "can-you-assist", + "slug": "repo-integration-can-you-assist", + "title": "Repo Integration: can-you-assist", + "status": "finished", + "owner": "can-you-assist", + "created_at": "2026-05-25T21:40:38.228332Z", + "updated_at": "2026-05-26T00:27:29.498956Z" + }, + { + "id": "ccd217a2-572d-435d-9a29-e0a55b6a4311", + "repo_id": "b96c952c-9993-4941-b75a-fe76eb7b2a57", + "repo_slug": "citation-engine", + "slug": "ceng-wp-0001", + "title": "Extract engine from citation-evidence umbrella", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-21T23:14:48.910448Z", + "updated_at": "2026-06-22T18:27:33.167129Z" + }, + { + "id": "c1141068-d969-4367-bd6f-d159efb8332d", + "repo_id": "b96c952c-9993-4941-b75a-fe76eb7b2a57", + "repo_slug": "citation-engine", + "slug": "ceng-wp-0002", + "title": "Package distribution \u2014 ADR-0002, publish readiness, contract sync", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-22T18:27:33.986839Z", + "updated_at": "2026-06-22T18:31:48.428528Z" + }, + { + "id": "4e9b861b-15e2-4a47-9a20-33b4806872a0", + "repo_id": "a677c189-b4e2-4f2a-9e48-faa482c277e6", + "repo_slug": "citation-evidence", + "slug": "ce-wp-0012", + "title": "Attribute value types \u2014 time, datetime, amount, one-of, some-of", + "status": "finished", + "owner": "codex", + "created_at": "2026-07-30T19:06:18.261459Z", + "updated_at": "2026-07-30T19:06:18.261459Z" + }, + { + "id": "74c1f6bb-9b4d-4640-aa1f-1c7e2116883a", + "repo_id": "10f1c902-576d-4782-b1b2-643a6083ee36", + "repo_slug": "config-atlas", + "slug": "atlas-wp-0001", + "title": "Bootstrap State Hub integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-26T15:35:31.992774Z", + "updated_at": "2026-06-26T15:50:52.779515Z" + }, + { + "id": "27b42720-1bd7-4755-ab2f-59a6d095a2c3", + "repo_id": "10f1c902-576d-4782-b1b2-643a6083ee36", + "repo_slug": "config-atlas", + "slug": "atlas-wp-0002", + "title": "Configuration atlas registry foundation", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-26T15:51:05.760300Z", + "updated_at": "2026-06-26T21:49:11.436985Z" + }, + { + "id": "e4400d9c-021a-4e44-8e9b-719f94a9561a", + "repo_id": "10f1c902-576d-4782-b1b2-643a6083ee36", + "repo_slug": "config-atlas", + "slug": "atlas-wp-0003", + "title": "Discovery connectors", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-26T21:58:10.954423Z", + "updated_at": "2026-06-26T22:28:39.330267Z" + }, + { + "id": "fbfdbf2b-ca6b-450e-a654-a61c5939f068", + "repo_id": "10f1c902-576d-4782-b1b2-643a6083ee36", + "repo_slug": "config-atlas", + "slug": "atlas-wp-0004", + "title": "Effective-config explain and graph", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-26T21:58:11.906587Z", + "updated_at": "2026-06-26T22:17:40.862762Z" + }, + { + "id": "0df6df54-4313-4c2d-93f2-dc6844fe47ec", + "repo_id": "9d7b100b-1538-483e-a873-cf70980c59e3", + "repo_slug": "coulomb-loop", + "slug": "loop-wp-0000", + "title": "Engagement bootstrap (registration, assessment, governance)", + "status": "finished", + "owner": "coulomb-loop", + "created_at": "2026-06-18T02:38:04.237513Z", + "updated_at": "2026-06-18T09:02:30.912130Z" + }, + { + "id": "90a05147-7b95-4ce7-96bf-39cdb487b557", + "repo_id": "9d7b100b-1538-483e-a873-cf70980c59e3", + "repo_slug": "coulomb-loop", + "slug": "loop-wp-0001", + "title": "Kaizen Improvement Stack (coach + metrics + optimization)", + "status": "finished", + "owner": "coulomb-loop", + "created_at": "2026-06-18T02:36:30.402072Z", + "updated_at": "2026-06-18T10:09:53.671337Z" + }, + { + "id": "d4d3b624-dad3-4e1d-9db3-e84548d133de", + "repo_id": "9d7b100b-1538-483e-a873-cf70980c59e3", + "repo_slug": "coulomb-loop", + "slug": "loop-wp-0002", + "title": "Reactive Quality Escalation (signal-driven improvement)", + "status": "finished", + "owner": "coulomb-loop", + "created_at": "2026-06-18T02:36:32.097541Z", + "updated_at": "2026-06-18T12:06:21.693544Z" + }, + { + "id": "f3a4b60a-7bc2-400d-bf8a-e7209a9e45c4", + "repo_id": "9d7b100b-1538-483e-a873-cf70980c59e3", + "repo_slug": "coulomb-loop", + "slug": "loop-wp-0003", + "title": "Registry & Orientation Hygiene (fleet legibility)", + "status": "finished", + "owner": "coulomb-loop", + "created_at": "2026-06-18T02:36:31.026723Z", + "updated_at": "2026-06-18T11:23:07.560097Z" + }, + { + "id": "08970648-dbd8-48f6-9b3a-72f196013089", + "repo_id": "9d7b100b-1538-483e-a873-cf70980c59e3", + "repo_slug": "coulomb-loop", + "slug": "loop-wp-0004", + "title": "Loop Regulator (second-order improvement)", + "status": "finished", + "owner": "coulomb-loop", + "created_at": "2026-06-18T02:36:32.042367Z", + "updated_at": "2026-06-18T11:23:08.688537Z" + }, + { + "id": "620731c9-ed7b-478d-97a2-5e251c2c36ff", + "repo_id": "9d7b100b-1538-483e-a873-cf70980c59e3", + "repo_slug": "coulomb-loop", + "slug": "loop-wp-0005-operate-observation", + "title": "Operate phase observation and fleet expansion prep", + "status": "finished", + "owner": "coulomb-loop", + "created_at": "2026-06-18T13:16:21.567677Z", + "updated_at": "2026-06-18T23:39:39.135962Z" + }, + { + "id": "ad41d75a-5785-4416-96e8-8c0fd3b6d2e4", + "repo_id": "023d2c4b-e6bb-4fd4-9216-538bf59b4323", + "repo_slug": "disaster-control", + "slug": "disctl-wp-0003", + "title": "Railiance backup lane governance integration", + "status": "finished", + "owner": "grok", + "created_at": "2026-07-07T22:22:38.291072Z", + "updated_at": "2026-07-07T22:22:38.291072Z" + }, + { + "id": "a90a80db-39bb-440c-ac05-2ad6faab589b", + "repo_id": "146bcec9-59e8-481e-9996-f0b30ab28abb", + "repo_slug": "domain-tree", + "slug": "domain-wp-0001", + "title": "Bootstrap State Hub integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-22T19:41:11.415996Z", + "updated_at": "2026-06-22T21:33:24.921624Z" + }, + { + "id": "88a10886-137d-475b-a446-9c34deee9a08", + "repo_id": "146bcec9-59e8-481e-9996-f0b30ab28abb", + "repo_slug": "domain-tree", + "slug": "domain-wp-0002", + "title": "Domain tree index foundation", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-22T21:33:26.279490Z", + "updated_at": "2026-06-24T13:17:22.391692Z" + }, + { + "id": "e0f10f55-55f2-4fa5-abec-d3d175889e09", + "repo_id": "a4cac053-048b-453b-93aa-942260bd4e09", + "repo_slug": "evidence-anchor", + "slug": "eanch-wp-0004", + "title": "Wire HtmlViewerAdapter into the review workspace viewer shell", + "status": "finished", + "owner": "codex", + "created_at": "2026-07-09T07:58:53.758415Z", + "updated_at": "2026-07-09T07:58:53.758415Z" + }, + { + "id": "1aaa395e-0255-41f3-86a5-40faf9b45429", + "repo_id": "4fb4a5f3-08f9-49ba-958b-414adc565168", + "repo_slug": "feature-control", + "slug": "feature-wp-0001", + "title": "Bootstrap State Hub integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-14T18:41:29.777660Z", + "updated_at": "2026-06-14T19:17:16.061013Z" + }, + { + "id": "800089f9-ae09-40b3-85f9-7734cefb8f4a", + "repo_id": "4fb4a5f3-08f9-49ba-958b-414adc565168", + "repo_slug": "feature-control", + "slug": "feature-wp-0002", + "title": "Align PRD and UCC terminology with InfoTechCanon; deepen feature management model via canon research and OpenFeature grounding", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-14T18:54:06.775010Z", + "updated_at": "2026-06-14T19:42:14.888324Z" + }, + { + "id": "d261227d-9f2a-406e-88c3-80428ea33f23", + "repo_id": "4fb4a5f3-08f9-49ba-958b-414adc565168", + "repo_slug": "feature-control", + "slug": "feature-wp-0003", + "title": "First implementation MVP: core feature-control using scored UseCaseCatalog and helix-forge standard", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-14T19:42:15.634219Z", + "updated_at": "2026-06-14T20:07:33.338611Z" + }, + { + "id": "f6e97275-04f9-4f88-832a-7e96fbb523fe", + "repo_id": "4fb4a5f3-08f9-49ba-958b-414adc565168", + "repo_slug": "feature-control", + "slug": "feature-wp-0004", + "title": "Feature-control consumer adoption toolkit, guides, prompts, and agent/skill support", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-14T20:17:03.881442Z", + "updated_at": "2026-06-14T20:25:29.617938Z" + }, + { + "id": "5c0fac68-284d-4672-9824-8686a902d33f", + "repo_id": "fda8ad85-a7d7-4055-8f21-902a533e59df", + "repo_slug": "flex-auth", + "slug": "flex-wp-0016", + "title": "In-cluster ops-warden policy pin so policy.enabled can flip", + "status": "finished", + "owner": "grok", + "created_at": "2026-08-19T20:01:21.657870Z", + "updated_at": "2026-08-19T20:01:21.657870Z" + }, + { + "id": "1d812b7d-74f0-4d71-86a7-0f390b22daf7", + "repo_id": "90918b55-6347-4e57-8086-db7b0454f73d", + "repo_slug": "guide-board", + "slug": "guide-board-wp-0001", + "title": "Guide Board Bootstrapping", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-07T07:40:47.112554Z", + "updated_at": "2026-05-15T10:28:54.035877Z" + }, + { + "id": "fc5b1573-91b2-4a19-b6a9-dd4d17057d9b", + "repo_id": "90918b55-6347-4e57-8086-db7b0454f73d", + "repo_slug": "guide-board", + "slug": "guide-board-wp-0002", + "title": "Assessment Operations Baseline", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T10:28:54.562958Z", + "updated_at": "2026-05-15T12:55:48.998365Z" + }, + { + "id": "26aa9511-cd5c-4dd5-989c-d2838ba3b50d", + "repo_id": "90918b55-6347-4e57-8086-db7b0454f73d", + "repo_slug": "guide-board", + "slug": "guide-board-wp-0003", + "title": "Extension SDK Maturity", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T13:05:50.720575Z", + "updated_at": "2026-05-15T13:30:58.023788Z" + }, + { + "id": "6dd2832b-d1d9-43bc-ad5c-d16f399930dc", + "repo_id": "90918b55-6347-4e57-8086-db7b0454f73d", + "repo_slug": "guide-board", + "slug": "guide-board-wp-0004", + "title": "Source Lock And Submission Package Baseline", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T13:43:23.139508Z", + "updated_at": "2026-05-16T00:58:24.527371Z" + }, + { + "id": "fb11e1c7-6c0c-4ec7-a163-da98b2fe9f8f", + "repo_id": "90918b55-6347-4e57-8086-db7b0454f73d", + "repo_slug": "guide-board", + "slug": "guide-board-wp-0005", + "title": "Challenge And Exclusion Handling", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T13:43:24.931359Z", + "updated_at": "2026-05-16T00:58:25.069142Z" + }, + { + "id": "ba008283-1631-467b-868e-1052c3870ab9", + "repo_id": "90918b55-6347-4e57-8086-db7b0454f73d", + "repo_slug": "guide-board", + "slug": "guide-board-wp-0006", + "title": "Service Artifact Access And Durable Run Index", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T13:43:25.824335Z", + "updated_at": "2026-05-16T01:15:36.091489Z" + }, + { + "id": "ef9351d2-e99c-470e-aeec-f17aa51eae14", + "repo_id": "90918b55-6347-4e57-8086-db7b0454f73d", + "repo_slug": "guide-board", + "slug": "guide-board-wp-0007", + "title": "Report And Export Maturity", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T13:43:26.666380Z", + "updated_at": "2026-05-16T01:15:36.594636Z" + }, + { + "id": "b7346171-35f6-45bf-b82f-c3703b79b426", + "repo_id": "8c82baea-bb40-435d-ac42-ec7a7c20dbb8", + "repo_slug": "identity-canon", + "slug": "identity-wp-0001", + "title": "Bootstrap State Hub integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-04T22:46:02.754064Z", + "updated_at": "2026-06-05T07:47:24.942894Z" + }, + { + "id": "ddb6ca2b-2b35-4dd7-a1fb-f31a51de44f5", + "repo_id": "8c82baea-bb40-435d-ac42-ec7a7c20dbb8", + "repo_slug": "identity-canon", + "slug": "identity-wp-0002", + "title": "Research proposal follow-up: initial canon scaffold", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-04T23:10:47.257810Z", + "updated_at": "2026-06-04T23:10:47.257810Z" + }, + { + "id": "af85e0a3-ccb8-4cfd-8859-d0794769e3e2", + "repo_id": "8c82baea-bb40-435d-ac42-ec7a7c20dbb8", + "repo_slug": "identity-canon", + "slug": "identity-wp-0003", + "title": "Research corpus backfill and model refinement", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-19T18:44:38.387209Z", + "updated_at": "2026-06-21T18:13:51.568254Z" + }, + { + "id": "b5972baf-1fb4-4375-a8e3-6e6d6d6fb97c", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0002-infospace-lifecycle-baseline", + "title": "Infospace Lifecycle Baseline", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-03T18:01:18.495385Z", + "updated_at": "2026-05-14T09:17:28.069598Z" + }, + { + "id": "bc368ba0-9fd7-4821-a5d7-e5c301faa80a", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0003-evaluation-and-inspection", + "title": "Evaluation And Inspection Framework", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-03T18:01:19.125617Z", + "updated_at": "2026-05-14T09:20:06.646405Z" + }, + { + "id": "8940a180-646a-4b20-b41f-c56719adfb0e", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0004-reference-infospace-pilot", + "title": "Reference Infospace Pilot", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-03T18:01:19.633364Z", + "updated_at": "2026-05-14T09:22:25.962172Z" + }, + { + "id": "ce26304b-aef2-4e01-926c-0635fc7a0f9b", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0005-orthogonal-successor-architecture", + "title": "Orthogonal Successor Architecture", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T11:07:21.160089Z", + "updated_at": "2026-05-14T11:15:26.706167Z" + }, + { + "id": "713415b0-0c14-4367-8217-26c729648aec", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0006-markitect-tool-adapter", + "title": "Markitect Tool Adapter And Markdown Artifact Validation", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T11:07:21.347236Z", + "updated_at": "2026-05-14T11:52:07.430299Z" + }, + { + "id": "3f6f17c9-bf50-4297-9bd5-cbe1e33efa76", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0007-entity-relation-model-migration", + "title": "Entity And Relation Model Migration", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T11:07:21.479369Z", + "updated_at": "2026-05-14T13:02:48.331697Z" + }, + { + "id": "f00ba036-dc97-4370-a4a5-9ac2bce7ce6f", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0008-evaluation-history-metrics-parity", + "title": "Evaluation History And Metrics Parity", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T11:07:21.609579Z", + "updated_at": "2026-05-14T13:17:20.729852Z" + }, + { + "id": "e8c96f7b-f5c7-4fbb-b4dc-fcae7e9817f0", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0009-applied-workflow-generation-pipeline", + "title": "Applied Workflow And Generation Pipeline", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T11:07:21.735243Z", + "updated_at": "2026-05-14T13:47:17.625273Z" + }, + { + "id": "0f69d4dc-b301-436c-8ccb-858a00bd2847", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0010-kontextual-engine-integration-boundary", + "title": "Kontextual Engine Integration Boundary", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T11:07:21.859995Z", + "updated_at": "2026-05-14T14:09:40.678967Z" + }, + { + "id": "5bcc4fe2-a1d3-4edf-9e6e-0b2844b5b499", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0011-pruned-legacy-reference-pilot", + "title": "Pruned Legacy Reference Pilot", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T11:07:21.984770Z", + "updated_at": "2026-05-14T14:34:07.580394Z" + }, + { + "id": "72b6a923-cad5-450b-b658-b35a00cecd4d", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0012-replacement-readiness-cli-parity", + "title": "Replacement Readiness And CLI Parity Gate", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T11:07:22.105063Z", + "updated_at": "2026-05-14T14:58:58.076757Z" + }, + { + "id": "74dc579e-9b03-4a00-b739-84b1007cfb94", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0013-wealth-vsm-generation-pipeline-parity", + "title": "Wealth VSM Generation Pipeline Parity", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T15:40:50.883836Z", + "updated_at": "2026-05-14T16:01:50.617667Z" + }, + { + "id": "c2d23ee7-6b2b-4db0-b660-a9e295c94956", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0014-infospace-backend-abstraction", + "title": "Infospace Archive Integration With artifact-store", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T15:40:50.750955Z", + "updated_at": "2026-05-17T09:47:10.547244Z" + }, + { + "id": "1bf47fb9-fe55-428a-b8da-8e6cc76d4b03", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0015-generic-source-infospace-generator-cli", + "title": "Generic Source Infospace Generator CLI", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T16:25:26.320979Z", + "updated_at": "2026-05-14T16:51:22.875248Z" + }, + { + "id": "23be7d20-b01f-4b17-9851-4d540e4c0984", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0016-lefevre-ebook-infospace-readiness", + "title": "Lefevre EPUB3 Infospace Readiness Pilot", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T17:45:46.401253Z", + "updated_at": "2026-05-18T10:05:31.742187Z" + }, + { + "id": "b549b9fe-0ebe-4fa9-9d60-c317e44032f5", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0017", + "title": "Agentic Memory Profile Infospace Pilot", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-14T22:18:28.294000Z", + "updated_at": "2026-05-15T09:36:18.599449Z" + }, + { + "id": "3d38642e-9d6d-4c7f-869f-b185a00bd0e6", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0018", + "title": "Adaptive LLM Routing \u2014 infospace-bench Consumer Wiring", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-17T15:27:26.360043Z", + "updated_at": "2026-05-18T10:02:10.135732Z" + }, + { + "id": "063c6285-a56e-476b-8666-109d6fa35858", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0019", + "title": "Budget and Usage Registry for Infospaces", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-17T16:54:21.645177Z", + "updated_at": "2026-05-18T10:05:31.950500Z" + }, + { + "id": "172bb082-610a-477b-b5e0-26c9f4bdfd95", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0020-provider-routing-cli", + "title": "Provider Routing CLI Integration", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-18T11:40:18.115160Z", + "updated_at": "2026-06-04T22:57:36.628382Z" + }, + { + "id": "62ad79c9-43f6-43ef-847c-ef88e9ec9e3c", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "ib-wp-0021", + "title": "Scope and Intent Reconciliation", + "status": "finished", + "owner": "markitect", + "created_at": "2026-06-04T22:57:39.871149Z", + "updated_at": "2026-06-04T23:11:45.719420Z" + }, + { + "id": "35666029-168e-4d8c-b6ce-24cb5a290156", + "repo_id": "b7b3e7cc-cdde-4430-be43-e82343fdf1b0", + "repo_slug": "infospace-bench", + "slug": "repo-integration-infospace-bench", + "title": "State Hub And Repo Bootstrap", + "status": "finished", + "owner": "markitect", + "created_at": "2026-05-03T17:55:10.080225Z", + "updated_at": "2026-05-14T09:39:18.565020Z" + }, + { + "id": "c14d232c-cf80-443b-b5e0-76b51baf6676", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "KONT-WP-0011-cmis-compliance-assessment-test-foundation", + "title": "CMIS Compliance Assessment And Test Foundation", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-06T20:17:11.358721Z", + "updated_at": "2026-05-06T21:41:22.870384Z" + }, + { + "id": "d538d68f-17a8-401f-9cdc-d526dd734ddc", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "KONT-WP-0012-cmis-profiled-access-points", + "title": "CMIS Profiled Access Points Implementation", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-06T20:17:11.633184Z", + "updated_at": "2026-05-07T00:02:47.656578Z" + }, + { + "id": "21355091-1ebe-4662-983c-4795deea2adc", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "KONT-WP-0013-blob-storage-content-streaming", + "title": "Blob Storage Deduplication And Content Streaming", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-07T01:09:35.293314Z", + "updated_at": "2026-05-07T01:44:45.754912Z" + }, + { + "id": "52ff9c49-edcf-4150-8895-c6b31f5aa075", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0001", + "title": "Repository Foundation And State Hub Integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-03T18:02:38.255807Z", + "updated_at": "2026-05-04T22:52:06.402937Z" + }, + { + "id": "e46d0962-7451-4b6c-b39f-461e35ba6a76", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0002", + "title": "markitect-main System-Layer Extraction", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-03T18:02:40.436185Z", + "updated_at": "2026-05-04T23:13:08.127424Z" + }, + { + "id": "0fd08391-e8c9-4f1b-ace4-06439f958e88", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0003", + "title": "Headless Knowledge Engine Implementation", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-03T18:02:42.391108Z", + "updated_at": "2026-05-04T23:44:55.228126Z" + }, + { + "id": "e177f2dc-a2a0-41a4-b5cd-82e8f9f12f34", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0004", + "title": "Knowledge Operations Architecture Rebase", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-05T08:39:17.350823Z", + "updated_at": "2026-05-06T06:16:40.495831Z" + }, + { + "id": "231a7794-aa3b-4763-a556-80b4cea731c8", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0005", + "title": "Asset Registry Governance And Durable State", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-05T16:13:56.763860Z", + "updated_at": "2026-05-06T07:47:24.885189Z" + }, + { + "id": "270c83c0-eaed-4143-99d0-bb3fcfd23758", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0006", + "title": "Multi-Format Ingestion And Normalization", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-05T16:13:57.562740Z", + "updated_at": "2026-05-06T11:16:09.572350Z" + }, + { + "id": "64352515-9677-46bb-909a-9e2db4915dc7", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0007", + "title": "Governed Retrieval And Context Graph", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-05T16:13:58.141639Z", + "updated_at": "2026-05-06T12:30:14.000336Z" + }, + { + "id": "1b7a6b04-7879-4862-bb3e-817f7f20fc59", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0008", + "title": "Traceable Transformations And Workflow Jobs", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-05T16:13:58.689492Z", + "updated_at": "2026-05-06T16:43:10.639043Z" + }, + { + "id": "6e672b1a-2e57-489e-8516-cb75611d4354", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0009", + "title": "Service API And Agent-Safe Operation", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-05T16:13:59.468297Z", + "updated_at": "2026-05-06T19:21:51.459978Z" + }, + { + "id": "09d769a5-a3cf-4cdf-ae5e-b4ecf767f109", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0010", + "title": "Observability Export And Enterprise Readiness", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-05T16:14:00.121744Z", + "updated_at": "2026-05-06T19:36:46.769406Z" + }, + { + "id": "18710625-e573-45b1-9b0a-a8b43caaada1", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0013", + "title": "CMIS Browser Binding TCK Compatibility", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-08T07:12:07.584818Z", + "updated_at": "2026-05-08T09:29:10.892028Z" + }, + { + "id": "ccfa90ee-be23-499b-a727-451a0d289df7", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0014", + "title": "CMIS Object/Content Maturity Expansion", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-08T10:48:01.972057Z", + "updated_at": "2026-05-13T23:28:24.912491Z" + }, + { + "id": "cb525023-1139-4d6c-9226-d6fdd1f5fd8f", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0015", + "title": "First Release Readiness", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-13T22:46:31.829035Z", + "updated_at": "2026-05-14T01:11:33.653752Z" + }, + { + "id": "8783b411-3ad4-4f32-90eb-035b538c8156", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0016", + "title": "CMIS Read-Side Contract Maturity", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-13T23:28:26.045664Z", + "updated_at": "2026-05-14T00:09:58.323869Z" + }, + { + "id": "18b51fcd-6a32-49f7-8d02-549a2768d0eb", + "repo_id": "a7cea934-e38c-467c-b2ea-64fd3424a845", + "repo_slug": "kontextual-engine", + "slug": "kont-wp-0017", + "title": "Agentic Memory Graph Runtime And Operational State", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-14T22:17:43.171856Z", + "updated_at": "2026-05-15T09:21:37.313155Z" + }, + { + "id": "2ef47f11-d828-436d-8955-c58e13c50752", + "repo_id": "75d31180-acf5-4d47-aea8-2a5b1e71e6a9", + "repo_slug": "marki-docx", + "slug": "diagram-renderer-integration", + "title": "marki-docx \u2014 Diagram Renderer Integration", + "status": "finished", + "owner": "marki-docx", + "created_at": "2026-03-16T12:36:24.809153Z", + "updated_at": "2026-03-17T12:16:16.411388Z" + }, + { + "id": "61701224-0813-4258-9308-025bcec41780", + "repo_id": "75d31180-acf5-4d47-aea8-2a5b1e71e6a9", + "repo_slug": "marki-docx", + "slug": "interface-completeness-evidence", + "title": "marki-docx \u2014 Interface Completeness & Evidence", + "status": "finished", + "owner": "marki-docx", + "created_at": "2026-03-17T16:21:25.891872Z", + "updated_at": "2026-03-17T19:29:40.393352Z" + }, + { + "id": "b04fe706-6e4e-48a8-b6c1-194d9e308215", + "repo_id": "75d31180-acf5-4d47-aea8-2a5b1e71e6a9", + "repo_slug": "marki-docx", + "slug": "level3-advanced-features", + "title": "marki-docx \u2014 LEVEL3 Advanced Features & Error Hardening", + "status": "finished", + "owner": "marki-docx", + "created_at": "2026-03-16T07:55:13.403359Z", + "updated_at": "2026-03-16T08:38:44.330704Z" + }, + { + "id": "de855681-7ce0-4ace-b283-ec61f7557066", + "repo_id": "75d31180-acf5-4d47-aea8-2a5b1e71e6a9", + "repo_slug": "marki-docx", + "slug": "marki-docx-foundation-level1", + "title": "marki-docx \u2014 Foundation & LEVEL1 Core", + "status": "finished", + "owner": "marki-docx", + "created_at": "2026-03-14T16:49:27.473064Z", + "updated_at": "2026-03-16T07:51:42.521759Z" + }, + { + "id": "7e255145-8d18-4f22-b1ca-31f02944b890", + "repo_id": "75d31180-acf5-4d47-aea8-2a5b1e71e6a9", + "repo_slug": "marki-docx", + "slug": "packaging-distribution", + "title": "marki-docx \u2014 Packaging & Distribution", + "status": "finished", + "owner": "marki-docx", + "created_at": "2026-03-16T12:36:27.267979Z", + "updated_at": "2026-03-17T14:29:44.216719Z" + }, + { + "id": "6a7b5627-7593-4713-8e56-94c4ab3ff838", + "repo_id": "75d31180-acf5-4d47-aea8-2a5b1e71e6a9", + "repo_slug": "marki-docx", + "slug": "service-interfaces-workflow-orchestration", + "title": "marki-docx \u2014 Service Interfaces & Workflow Orchestration", + "status": "finished", + "owner": "marki-docx", + "created_at": "2026-03-16T01:35:23.562417Z", + "updated_at": "2026-03-16T07:51:43.401503Z" + }, + { + "id": "91d06c92-caa8-42fc-b6d4-82340f1bed4f", + "repo_id": "75d31180-acf5-4d47-aea8-2a5b1e71e6a9", + "repo_slug": "marki-docx", + "slug": "stable-corpus-architecture", + "title": "marki-docx \u2014 Stable Documentation Corpus & Architecture Records", + "status": "finished", + "owner": "marki-docx", + "created_at": "2026-03-16T12:36:22.590816Z", + "updated_at": "2026-03-17T09:22:04.943834Z" + }, + { + "id": "15595fa9-63f9-4ff5-8a9d-45f51893f085", + "repo_id": "87f43c8e-01bd-465a-96ce-c0eee2ae7bcf", + "repo_slug": "markitect-filter", + "slug": "mktf-wp-0001", + "title": "EPUB3 Read Adapter", + "status": "finished", + "owner": "markitect-filter", + "created_at": "2026-05-14T20:56:38.480485Z", + "updated_at": "2026-05-14T20:56:56.124250Z" + }, + { + "id": "7445fe6b-f1a9-4383-8053-4337337dc095", + "repo_id": "87f43c8e-01bd-465a-96ce-c0eee2ae7bcf", + "repo_slug": "markitect-filter", + "slug": "mktf-wp-0002", + "title": "PDF Read Adapter", + "status": "finished", + "owner": "markitect-filter", + "created_at": "2026-05-14T21:16:08.431789Z", + "updated_at": "2026-05-14T21:32:03.298257Z" + }, + { + "id": "16e5c830-31e3-4070-9e27-65d28ed06595", + "repo_id": "87f43c8e-01bd-465a-96ce-c0eee2ae7bcf", + "repo_slug": "markitect-filter", + "slug": "mktf-wp-0003", + "title": "Source Attachment Manifest Compatibility", + "status": "finished", + "owner": "markitect-filter", + "created_at": "2026-05-15T11:00:04.327722Z", + "updated_at": "2026-05-15T12:36:56.051919Z" + }, + { + "id": "830c888e-e1d4-43e6-8093-9b61e7578257", + "repo_id": "b388326c-dfce-4e30-a364-cedd285370e5", + "repo_slug": "markitect-project", + "slug": "infospace-s3-closeout", + "title": "Infospace Tooling \u2014 Stage 3 Close-out", + "status": "finished", + "owner": "markitect", + "created_at": "2026-02-25T23:42:59.029677Z", + "updated_at": "2026-05-22T09:04:29.029221Z" + }, + { + "id": "ac04c9ae-ca16-40d9-ae3b-cc3d8fde39a5", + "repo_id": "b388326c-dfce-4e30-a364-cedd285370e5", + "repo_slug": "markitect-project", + "slug": "llm-shared-library", + "title": "LLM Adapter Layer \u2014 Extract as Shared Library", + "status": "finished", + "owner": "markitect", + "created_at": "2026-02-24T20:50:49.190673Z", + "updated_at": "2026-02-27T07:53:31.783763Z" + }, + { + "id": "fb4ebcf9-21ba-455d-8982-63908663c130", + "repo_id": "2c72f2ad-d940-4a21-a71e-d490bd51cff2", + "repo_slug": "markitect-quarkdown", + "slug": "mqd-wp-0001", + "title": "Quarkdown Render Adapter Boundary", + "status": "finished", + "owner": "markitect-quarkdown", + "created_at": "2026-05-15T11:00:12.626477Z", + "updated_at": "2026-05-15T12:46:57.655995Z" + }, + { + "id": "4d405d74-faec-440e-873e-692ff9ca96e7", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0001", + "title": "markitect-tool Repository Foundation", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T18:05:09.425690Z", + "updated_at": "2026-05-04T09:26:04.349168Z" + }, + { + "id": "0fe54d2c-d579-4b03-a647-7a15bb835893", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0002", + "title": "markitect-main Scope Extraction", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T18:05:11.656672Z", + "updated_at": "2026-05-04T09:26:04.608623Z" + }, + { + "id": "9fefb57d-985e-4125-8daf-03554844f45e", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0003", + "title": "Core Markdown Toolkit Implementation", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T18:05:13.302013Z", + "updated_at": "2026-05-04T09:26:04.926076Z" + }, + { + "id": "558787e1-d287-46a5-9214-634e8b90a858", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0004", + "title": "Practical Document Contract Framework", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T20:14:41.951001Z", + "updated_at": "2026-05-04T09:26:05.161410Z" + }, + { + "id": "7918687e-2364-46b1-ab7e-65aa77cb8449", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0005", + "title": "Runtime Context, Form, and Assessment Engines", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T20:56:21.836322Z", + "updated_at": "2026-05-04T11:44:14.451608Z" + }, + { + "id": "0c585f8a-5c7e-4c89-b785-5b0089180256", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0006", + "title": "Optional Cache Backend Architecture Core", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T21:43:27.242749Z", + "updated_at": "2026-05-04T09:26:05.654845Z" + }, + { + "id": "d61a82e4-651a-4df2-944a-9ff996b2e1f6", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0007", + "title": "Advanced Query and Local Index Backend", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T21:43:29.737591Z", + "updated_at": "2026-05-04T09:26:05.980543Z" + }, + { + "id": "6269f338-4f5c-40ee-90e5-0371f5c3874c", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0008", + "title": "Agent Working Memory Context Cache", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T21:43:30.941079Z", + "updated_at": "2026-05-04T18:22:56.526699Z" + }, + { + "id": "f36acbc9-881d-46f2-9181-67de228df0c2", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0009", + "title": "Access-Controlled Knowledge Gateway", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T21:43:32.382516Z", + "updated_at": "2026-05-04T12:08:44.499132Z" + }, + { + "id": "7863fd01-0be0-4dbc-9941-0151365bb9e1", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0010", + "title": "Content References, Processors, and Literate Workflows", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T22:45:15.897463Z", + "updated_at": "2026-05-04T09:26:06.789595Z" + }, + { + "id": "ed4c491d-4f81-4df0-af51-5f4bd4d1ad91", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0011", + "title": "Markdown Dataflow Pipeline Workflows", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T23:16:33.143011Z", + "updated_at": "2026-05-04T10:30:56.385690Z" + }, + { + "id": "f82e74c4-d349-4e9e-80cd-10c0c6d9545d", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0012-document-function-layer", + "title": "Document Function Layer", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-04T02:07:39.210263Z", + "updated_at": "2026-05-04T17:23:10.003436Z" + }, + { + "id": "5eea103f-f584-4360-b7e3-c5b09a4814bd", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0013-internal-extension-framework", + "title": "Internal Extension Framework and Canonical Processing Model", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-04T08:44:00.257984Z", + "updated_at": "2026-05-04T09:26:07.775901Z" + }, + { + "id": "86c22ccc-5f5a-4650-8495-76fe6c08e411", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0014", + "title": "Enterprise IAM Access-Control Integration", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-04T13:23:58.810516Z", + "updated_at": "2026-05-04T15:29:31.753678Z" + }, + { + "id": "a38f676a-0d0b-493c-9792-2e34480c3681", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0015", + "title": "Document Function Value Contracts", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-04T17:43:22.966202Z", + "updated_at": "2026-05-15T11:00:38.048180Z" + }, + { + "id": "850cbc13-71cb-422c-86ec-1cc7679095cf", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0016", + "title": "Memory Graph Profile Contract And Context Package Compiler", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-04T18:44:49.732316Z", + "updated_at": "2026-05-15T09:55:07.703962Z" + }, + { + "id": "077bc50c-360b-425a-a1ad-fd961f819422", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0017", + "title": "CLI/API Polish And Practical Adoption", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-04T19:43:30.770687Z", + "updated_at": "2026-05-04T20:39:38.669145Z" + }, + { + "id": "c4e4511f-13ea-40b4-9083-6d9ab6d12dad", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0018-source-adapter-contract", + "title": "Source Adapter Interface And Markdown Normalization Contract", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-14T18:05:42.587447Z", + "updated_at": "2026-05-14T20:08:29.894276Z" + }, + { + "id": "10a85934-a4b2-4661-83f7-92ac8d322af4", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0019", + "title": "Source Adapter Contract Refinement", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-14T20:52:27.519301Z", + "updated_at": "2026-05-14T20:53:15.015577Z" + }, + { + "id": "19d1a377-848a-4156-b712-7b9febd836a6", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0020", + "title": "Render Export Adapter Contract", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-15T11:00:38.782155Z", + "updated_at": "2026-05-15T11:40:53.156767Z" + }, + { + "id": "c567c1a8-3029-4f9c-9587-e85fede64599", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "mktt-wp-0021", + "title": "Render Reference And Asset Manifest Contract", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-15T11:00:39.290199Z", + "updated_at": "2026-05-15T12:07:15.245896Z" + }, + { + "id": "746bccfc-0ea2-4745-96fc-3abc34acc64f", + "repo_id": "ba599cd4-e8aa-430b-bbbe-e49f88536d70", + "repo_slug": "markitect-tool", + "slug": "repo-integration-markitect-tool", + "title": "Repo Integration: markitect-tool", + "status": "finished", + "owner": "markitect-tool", + "created_at": "2026-05-03T17:50:00.501890Z", + "updated_at": "2026-05-03T20:42:13.024239Z" + }, + { + "id": "276483ee-1497-495b-8710-fd8bb7dace22", + "repo_id": "b6b8dacd-4100-475a-8390-c326e1cebdec", + "repo_slug": "open-cmis-tck", + "slug": "open-cmis-tck-wp-0001", + "title": "OpenCMIS TCK Harness Foundation", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-07T06:17:20.249428Z", + "updated_at": "2026-05-07T20:34:27.422093Z" + }, + { + "id": "da3f0d16-ba8e-4147-b0fc-ab3462e0b7b0", + "repo_id": "b6b8dacd-4100-475a-8390-c326e1cebdec", + "repo_slug": "open-cmis-tck", + "slug": "open-cmis-tck-wp-0002", + "title": "Live OpenCMIS TCK Execution And Capability Maturity", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-07T20:58:23.876247Z", + "updated_at": "2026-05-14T00:12:39.958398Z" + }, + { + "id": "5711ee2f-eaa9-428a-a4b2-e7383bfbf18a", + "repo_id": "b6b8dacd-4100-475a-8390-c326e1cebdec", + "repo_slug": "open-cmis-tck", + "slug": "open-cmis-tck-wp-0003", + "title": "Assessment Log Review And Hardening", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-14T00:09:53.420432Z", + "updated_at": "2026-05-14T00:33:17.461939Z" + }, + { + "id": "55a20356-3dd1-4414-9d40-ded1ec951ec2", + "repo_id": "d416fd6f-3c9d-4ba7-a5ca-f7543940ee6a", + "repo_slug": "open-reuse", + "slug": "open-wp-0001", + "title": "Bootstrap State Hub integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-22T19:41:18.916492Z", + "updated_at": "2026-06-22T21:33:51.615320Z" + }, + { + "id": "07cec732-6526-48e4-84d0-373e4abcb6d4", + "repo_id": "d416fd6f-3c9d-4ba7-a5ca-f7543940ee6a", + "repo_slug": "open-reuse", + "slug": "open-wp-0002", + "title": "Integration asset registry foundation", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-22T21:33:53.563591Z", + "updated_at": "2026-06-24T13:31:18.693577Z" + }, + { + "id": "16149ad7-be98-4ec1-807b-3d4b62db2bba", + "repo_id": "d416fd6f-3c9d-4ba7-a5ca-f7543940ee6a", + "repo_slug": "open-reuse", + "slug": "open-wp-0003", + "title": "Integration CLI validator", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-24T16:16:51.948184Z", + "updated_at": "2026-06-24T16:25:27.430471Z" + }, + { + "id": "6f4b82dc-a642-4104-98d2-12f7403152fa", + "repo_id": "d416fd6f-3c9d-4ba7-a5ca-f7543940ee6a", + "repo_slug": "open-reuse", + "slug": "open-wp-0004", + "title": "Integration portfolio registration", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-24T16:16:54.203224Z", + "updated_at": "2026-06-24T16:25:29.638986Z" + }, + { + "id": "fbc2ef7e-626f-4c6a-bdf8-c69bf29097ce", + "repo_id": "1bf99f56-6e94-4379-a9ea-295a4c181889", + "repo_slug": "ops-bridge", + "slug": "adhoc-2026-06-14", + "title": "Ad hoc ops-bridge fixes for 2026-06-14", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-14T12:18:32.842059Z", + "updated_at": "2026-06-14T12:18:32.842059Z" + }, + { + "id": "79112cff-9c0a-42ad-aa3d-916013001aee", + "repo_id": "1bf99f56-6e94-4379-a9ea-295a4c181889", + "repo_slug": "ops-bridge", + "slug": "bridge-wp-0001", + "title": "OpsBridge Initial Implementation", + "status": "finished", + "owner": "Bernd", + "created_at": "2026-03-11T20:45:54.781482Z", + "updated_at": "2026-03-12T02:36:35.638072Z" + }, + { + "id": "f38bfcdb-f115-4431-88b5-ce906a24199c", + "repo_id": "1bf99f56-6e94-4379-a9ea-295a4c181889", + "repo_slug": "ops-bridge", + "slug": "bridge-wp-0002", + "title": "OpsCatalog Extension", + "status": "finished", + "owner": "Bernd", + "created_at": "2026-03-11T20:56:41.269281Z", + "updated_at": "2026-03-12T02:36:35.890460Z" + }, + { + "id": "97009d3f-fd92-4fd9-a308-6c2445b4d623", + "repo_id": "1bf99f56-6e94-4379-a9ea-295a4c181889", + "repo_slug": "ops-bridge", + "slug": "bridge-wp-0003", + "title": "OpsBridge MCP Server, Skill, and Cross-Mode Test Coverage", + "status": "finished", + "owner": "Bernd", + "created_at": "2026-03-12T03:40:00.618424Z", + "updated_at": "2026-03-12T10:32:35.521290Z" + }, + { + "id": "e3451b70-688e-4e19-bff5-0c82c0f009a7", + "repo_id": "1bf99f56-6e94-4379-a9ea-295a4c181889", + "repo_slug": "ops-bridge", + "slug": "bridge-wp-0004", + "title": "AccessManagementDirective Alignment", + "status": "finished", + "owner": "Bernd", + "created_at": "2026-04-21T00:14:18.555549Z", + "updated_at": "2026-05-15T07:38:57.963746Z" + }, + { + "id": "9565491f-e664-4add-bea4-27c4fb015ee0", + "repo_id": "1bf99f56-6e94-4379-a9ea-295a4c181889", + "repo_slug": "ops-bridge", + "slug": "bridge-wp-0005", + "title": "Restart includes remote cleanup (blank-slate recovery)", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-21T18:02:07.146550Z", + "updated_at": "2026-06-21T18:12:34.660996Z" + }, + { + "id": "6726cea2-447a-40b2-b0a0-edf495f07942", + "repo_id": "1bf99f56-6e94-4379-a9ea-295a4c181889", + "repo_slug": "ops-bridge", + "slug": "ops-wp-0001", + "title": "ops-bridge diagnostics and flow improvements", + "status": "finished", + "owner": "claude", + "created_at": "2026-03-20T01:45:11.623330Z", + "updated_at": "2026-03-20T01:48:27.550091Z" + }, + { + "id": "c195cc40-8be7-462e-be26-a7d6bda34cd5", + "repo_id": "1bf99f56-6e94-4379-a9ea-295a4c181889", + "repo_slug": "ops-bridge", + "slug": "ops-wp-0002", + "title": "Agent Usability \u2014 MCP Registration, Skill, and Worker Orientation", + "status": "finished", + "owner": "custodian", + "created_at": "2026-03-21T14:15:47.503978Z", + "updated_at": "2026-03-26T21:46:05.802095Z" + }, + { + "id": "ff1d85f4-5def-4492-9c91-b142dde7ccf4", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0001", + "title": "Phase Memory Architecture And Foundation", + "status": "finished", + "owner": "phase-memory", + "created_at": "2026-05-17T23:28:27.635626Z", + "updated_at": "2026-05-17T23:55:57.441922Z" + }, + { + "id": "83dcb429-688d-473d-9973-63f6ac2acd5b", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0002", + "title": "Local Runtime Facade And CLI", + "status": "finished", + "owner": "phase-memory", + "created_at": "2026-05-18T10:48:58.098127Z", + "updated_at": "2026-05-18T16:22:37.799279Z" + }, + { + "id": "c15d2f61-449b-48fa-9e4d-ea22a9b419b2", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0003", + "title": "File-Backed Stores And Event Path Runtime", + "status": "finished", + "owner": "phase-memory", + "created_at": "2026-05-18T10:48:59.461800Z", + "updated_at": "2026-05-18T16:22:45.736673Z" + }, + { + "id": "e8d405a3-3ddd-4353-81a2-518850033b8e", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0004", + "title": "Policy, Audit, And Review Gates", + "status": "finished", + "owner": "phase-memory", + "created_at": "2026-05-18T10:49:05.640019Z", + "updated_at": "2026-05-18T16:22:53.673177Z" + }, + { + "id": "be683a3e-49d1-4e35-a227-c43233cc652e", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0005", + "title": "Markitect Package Bridge And Contract Interop", + "status": "finished", + "owner": "phase-memory", + "created_at": "2026-05-18T10:49:06.997358Z", + "updated_at": "2026-05-18T18:05:18.185467Z" + }, + { + "id": "68417e46-d0a4-4168-bdd6-9ba6ac7847c1", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0006", + "title": "Retrieval, Activation Quality, And Evaluation", + "status": "finished", + "owner": "phase-memory", + "created_at": "2026-05-18T10:49:08.029857Z", + "updated_at": "2026-05-18T18:05:19.762046Z" + }, + { + "id": "35512fad-8a37-406d-9074-6b6891a5a83a", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0007", + "title": "Service Readiness And External Adapters", + "status": "finished", + "owner": "phase-memory", + "created_at": "2026-05-18T10:49:09.158521Z", + "updated_at": "2026-05-18T18:34:21.914467Z" + }, + { + "id": "c41f1d67-c4da-4372-b943-b9ea32d9ff4c", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0008", + "title": "Profile-Driven Runtime Configuration", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-18T18:53:46.363838Z", + "updated_at": "2026-05-18T18:53:46.363838Z" + }, + { + "id": "1f7ec5d1-d468-4295-9512-8ee192d2afad", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0009", + "title": "Profile-Driven Lifecycle Rules", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-18T20:20:58.015812Z", + "updated_at": "2026-05-18T20:20:58.015812Z" + }, + { + "id": "59eb9132-f7f3-4d94-81ee-e0636a325a7c", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0010", + "title": "Fake External Adapter Packs", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-18T20:41:29.404114Z", + "updated_at": "2026-05-18T20:41:29.404114Z" + }, + { + "id": "a427c05f-0ff5-49d1-b719-7dfd4f1f8571", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0011", + "title": "Refinement Hardening And Operational Readiness", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-18T21:21:16.526825Z", + "updated_at": "2026-05-18T21:53:09.109329Z" + }, + { + "id": "427b91ad-9df1-4053-aeb0-54ee39b6bf62", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0012", + "title": "Live Adapter And Service Binding Readiness", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-18T21:53:12.659004Z", + "updated_at": "2026-05-18T23:03:05.594283Z" + }, + { + "id": "3343c4bf-40f4-42c9-9713-2a441349f723", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0013", + "title": "Credentialed Adapter Drills And Deployment Packaging", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-18T23:03:08.284024Z", + "updated_at": "2026-05-18T23:25:10.258516Z" + }, + { + "id": "312a04cb-124d-41b3-9fc0-292281f420ab", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0014", + "title": "Live Credential Execution And Managed Deployment Hardening", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-18T23:25:11.832415Z", + "updated_at": "2026-05-19T01:47:18.730501Z" + }, + { + "id": "10e406f3-a016-46f6-92c4-9e0f8fc7ecc3", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0015", + "title": "Credentialed Live Pilot And Deployment Evidence", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-19T01:47:19.982629Z", + "updated_at": "2026-07-02T21:25:05.156929Z" + }, + { + "id": "0f817f83-bb43-4e60-b3a7-b7cca0e9e6ed", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0016", + "title": "Ops-Warden Cross-Runtime Memory Profile And Contracts", + "status": "finished", + "owner": "codex", + "created_at": "2026-07-02T21:35:54.266702Z", + "updated_at": "2026-07-02T21:41:25.759348Z" + }, + { + "id": "4e3fa1d9-0e9f-446f-a677-6038e153a316", + "repo_id": "d56e0504-044d-4021-ae43-e9d706dbd087", + "repo_slug": "phase-memory", + "slug": "pmem-wp-0017", + "title": "Federated Store Management CLI And Activity Reports", + "status": "finished", + "owner": "codex", + "created_at": "2026-07-02T23:24:51.201015Z", + "updated_at": "2026-07-02T23:24:51.201015Z" + }, + { + "id": "b4df2f8e-8490-447e-af1a-a89b11ca5cb0", + "repo_id": "92a852d9-e4a2-46b9-8c78-633905075e58", + "repo_slug": "prj-forgejo-org-refactor", + "slug": "prj-wp-0001", + "title": "Bootstrap State Hub integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-08-11T11:41:01.893634Z", + "updated_at": "2026-08-19T18:36:59.778277Z" + }, + { + "id": "028b0456-3e54-4539-b563-0eec012c3ecb", + "repo_id": "1b7df69f-214d-41ba-8cc5-c1fd72eb910e", + "repo_slug": "rail-kubernetes", + "slug": "rail-k8s-wp-0002", + "title": "Version the common workload and derived-rail contract", + "status": "finished", + "owner": "codex", + "created_at": "2026-07-26T11:08:23.338062Z", + "updated_at": "2026-07-26T11:08:23.338062Z" + }, + { + "id": "852b7d44-3125-4d96-9d8c-7247382c4b60", + "repo_id": "2c0de614-e468-4eb6-8157-470649ac8c05", + "repo_slug": "railiance-fabric", + "slug": "rail-fab-wp-0027", + "title": "Project versioned rail composition and readiness", + "status": "finished", + "owner": "codex", + "created_at": "2026-07-26T11:09:08.926168Z", + "updated_at": "2026-07-26T11:09:08.926168Z" + }, + { + "id": "5f7ee0a7-8c6c-475c-b9d9-32d9c5ee86e5", + "repo_id": "5115e0c5-009f-4168-b155-9943fe2ab9a7", + "repo_slug": "railiance-platform", + "slug": "rpf-wp-0021", + "title": "Unblock rapp-core-hub publication and platform onboarding", + "status": "finished", + "owner": "codex", + "created_at": "2026-08-21T19:39:07.151624Z", + "updated_at": "2026-08-21T19:39:07.151624Z" + }, + { + "id": "ae1a965b-e564-4980-ba9a-2e6a9693315c", + "repo_id": "565b18e7-e9a2-4962-8221-9045df558793", + "repo_slug": "repo-manager", + "slug": "rmgr-wp-0001", + "title": "SPURIOUS bootstrap (statehub register collision) \u2014 archived", + "status": "finished", + "owner": "codex", + "created_at": "2026-08-09T19:54:23.490267Z", + "updated_at": "2026-08-09T19:57:32.006934Z" + }, + { + "id": "83a43ab6-d566-41e0-afd7-f2833812564f", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "repo-scoping-activity-core-context-api", + "title": "Activity-Core Scope Context API", + "status": "finished", + "owner": "Bernd", + "created_at": "2026-05-14T15:58:04.607165Z", + "updated_at": "2026-05-15T23:32:31.901575Z" + }, + { + "id": "acee5529-43c0-4519-94bc-e59e61719af1", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0001", + "title": "Repository Ability Registry \u2014 MVP Implementation", + "status": "finished", + "owner": "codex", + "created_at": "2026-04-26T11:04:55.405424Z", + "updated_at": "2026-04-26T11:06:20.297915Z" + }, + { + "id": "4218d2bb-33e8-4f98-94ba-38b4ac21502d", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0002", + "title": "Repository Ability Registry \u2014 Production Hardening", + "status": "finished", + "owner": "codex", + "created_at": "2026-04-26T11:04:56.536324Z", + "updated_at": "2026-04-26T15:44:03.206285Z" + }, + { + "id": "c121d462-f2e4-45d3-9d2d-9c04a3556953", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0003", + "title": "Repository Ability Registry \u2014 Automatic Repository Exploration", + "status": "finished", + "owner": "codex", + "created_at": "2026-04-26T16:13:33.409424Z", + "updated_at": "2026-04-29T16:53:44.845795Z" + }, + { + "id": "ad67787f-a89d-4cde-957c-18ef39b43912", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0004", + "title": "Repository Ability Registry - Characteristic Classification And Navigation", + "status": "finished", + "owner": "codex", + "created_at": "2026-04-29T21:40:52.154945Z", + "updated_at": "2026-04-29T23:41:50.490130Z" + }, + { + "id": "5da7ddd9-b192-4271-ba86-c5365405a685", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0005", + "title": "SCOPE.md Generation Feature", + "status": "finished", + "owner": "codex", + "created_at": "2026-04-30T13:02:32.663879Z", + "updated_at": "2026-04-30T16:51:37.041484Z" + }, + { + "id": "9daccfee-bcfc-49c5-bf68-36ea8c205a09", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0006", + "title": "Rename to repo-scoping and Full Custodian Integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-04-30T13:02:33.770657Z", + "updated_at": "2026-05-01T10:06:59.894866Z" + }, + { + "id": "aff1e797-db89-4ae5-b0c9-37035bf6bdd5", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0007", + "title": "Final Rename Polish and Knowledge Capture", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-01T11:23:50.268721Z", + "updated_at": "2026-05-01T12:54:10.797242Z" + }, + { + "id": "81ec50c4-fe73-41ea-ba5b-2e02be2bed42", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0008", + "title": "Dependency-Aware Scope Propagation", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-01T13:10:37.599756Z", + "updated_at": "2026-05-03T11:37:21.830481Z" + }, + { + "id": "d8f304b3-a30c-4172-99de-19ab84bf330e", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0009", + "title": "Provenance-Aware Characteristic Rebuild", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-01T21:54:11.350759Z", + "updated_at": "2026-05-02T15:48:30.694745Z" + }, + { + "id": "da974de8-8ef2-4df5-a357-c323f525bb2e", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0010", + "title": "Dependency Visualization And Exploration", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-03T11:15:51.137625Z", + "updated_at": "2026-05-04T09:23:02.446338Z" + }, + { + "id": "b36e365e-e09f-4910-8d92-7d0ee7909db4", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0011", + "title": "Dependency Graph Exploration Polish", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-04T09:44:04.391943Z", + "updated_at": "2026-05-04T10:03:23.789447Z" + }, + { + "id": "1c740db0-1999-478b-b3e3-c0fdfec1e9dd", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0013", + "title": "Self-Scoping Baseline Evaluation", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T10:11:01.421604Z", + "updated_at": "2026-05-15T12:57:48.154245Z" + }, + { + "id": "7feaa5b5-32d8-4b8e-b377-cbb3ddacf64a", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0014", + "title": "Agentic Characteristic Acceptance", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T10:11:02.633887Z", + "updated_at": "2026-05-15T14:57:19.594730Z" + }, + { + "id": "23164348-0133-4e0c-9557-f6077a835aee", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0015", + "title": "Self-Assessment Input Hygiene", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T15:08:23.117562Z", + "updated_at": "2026-05-15T15:16:29.178396Z" + }, + { + "id": "088c5674-8edb-447b-8fb5-2a7a34d85ba1", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0016", + "title": "Native Candidate Generation Recovery", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T15:16:29.627010Z", + "updated_at": "2026-05-15T16:34:50.020512Z" + }, + { + "id": "dbeae3c5-74fc-46c0-be61-1bd8d81e65df", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0017", + "title": "Finalize Repo-Scoping Rename", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T19:14:20.030956Z", + "updated_at": "2026-05-15T19:17:31.408191Z" + }, + { + "id": "83df7082-789f-440e-b7a8-d1f8ecd01cc6", + "repo_id": "de749ff1-a4a4-42f5-8ed4-6b8c05b18bd9", + "repo_slug": "repo-scoping", + "slug": "rreg-wp-0018", + "title": "Agentic Hierarchy And Intent/Scope Review", + "status": "finished", + "owner": "codex", + "created_at": "2026-05-15T19:59:31.959374Z", + "updated_at": "2026-05-15T23:41:01.795787Z" + }, + { + "id": "e8737366-d477-468f-bca8-7f900a9146d0", + "repo_id": "7007e599-6f2a-4fc6-b6c7-a86b6e9ccfaf", + "repo_slug": "reuse-surface", + "slug": "reuse-wp-0017", + "title": "Capability coverage campaign: seed or explicitly close all empty scaffolds", + "status": "finished", + "owner": "claude-code", + "created_at": "2026-07-07T22:28:24.023431Z", + "updated_at": "2026-07-07T22:28:24.023431Z" + }, + { + "id": "a5351af2-2de8-40d6-9f3c-027807e86ee1", + "repo_id": "7007e599-6f2a-4fc6-b6c7-a86b6e9ccfaf", + "repo_slug": "reuse-surface", + "slug": "reuse-wp-0018", + "title": "plan-check: close the consumption loop for capability reuse", + "status": "finished", + "owner": "claude-code", + "created_at": "2026-07-07T22:28:36.634544Z", + "updated_at": "2026-07-07T22:28:36.634544Z" + }, + { + "id": "34749ac3-ceec-4890-b001-e25ee41ea278", + "repo_id": "7007e599-6f2a-4fc6-b6c7-a86b6e9ccfaf", + "repo_slug": "reuse-surface", + "slug": "reuse-wp-0019", + "title": "Forgejo-native federation automation and reuse telemetry", + "status": "finished", + "owner": "claude-code", + "created_at": "2026-07-07T22:28:46.129516Z", + "updated_at": "2026-07-07T22:28:46.129516Z" + }, + { + "id": "f8a00337-b34e-40a1-a720-ce968d8a575e", + "repo_id": "60f2d8b6-f3fa-4bb0-b316-89de9b2a7d79", + "repo_slug": "tele-mcp", + "slug": "tele-wp-0001", + "title": "Bootstrap State Hub integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-22T21:34:12.109022Z", + "updated_at": "2026-06-22T21:34:12.109022Z" + }, + { + "id": "c617a044-bf57-4671-9afd-0112e7f462fd", + "repo_id": "60f2d8b6-f3fa-4bb0-b316-89de9b2a7d79", + "repo_slug": "tele-mcp", + "slug": "tele-wp-0002", + "title": "MCP bridge local verification loop", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-22T21:34:12.755544Z", + "updated_at": "2026-06-24T16:19:07.204502Z" + }, + { + "id": "142799db-891a-4049-90b9-e0fa4e461e91", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "vergabe_teilnahme-wp-0017-whynot-design-tokens", + "title": "WP-0017 \u2014 whynot-design Adoption Phase 1 (Tokens + CSS)", + "status": "finished", + "owner": "claude", + "created_at": "2026-05-23T17:09:33.628612Z", + "updated_at": "2026-05-23T19:52:39.402244Z" + }, + { + "id": "51b75051-1d99-4dc4-9a74-5d94dcf7ed0a", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0001-projektgeruest", + "title": "WP-0001 \u2014 Projektger\u00fcst", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:01:53.325829Z", + "updated_at": "2026-05-08T16:09:46.087806Z" + }, + { + "id": "3351c111-7852-47b8-890f-19461689d6e6", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0002-fachmodelle", + "title": "WP-0002 \u2014 Fachmodelle", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:01:54.951552Z", + "updated_at": "2026-05-08T16:09:46.802526Z" + }, + { + "id": "1f6324e2-4221-4665-915a-398f483e463f", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0003-basis-ui", + "title": "WP-0003 \u2014 Basis-UI", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:01:56.849639Z", + "updated_at": "2026-05-08T16:09:47.246657Z" + }, + { + "id": "d06a566b-bb79-4b72-835f-c287ef2b4a2b", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0004-dashboard-ausschreibungen", + "title": "WP-0004 \u2014 Dashboard und Ausschreibungen-CRUD", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:01:59.135083Z", + "updated_at": "2026-05-08T16:09:47.874358Z" + }, + { + "id": "a5c078ab-5d96-43bd-b214-ba19bac1d4ac", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0005-lose-anforderungen", + "title": "WP-0005 \u2014 Lose und Anforderungen", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:02:01.823248Z", + "updated_at": "2026-05-08T16:09:48.296103Z" + }, + { + "id": "c17cab16-7c16-418b-87c1-4680aa98950d", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0006-aufgaben-bieterfragen", + "title": "WP-0006 \u2014 Aufgaben und Bieterfragen", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:02:04.087309Z", + "updated_at": "2026-05-08T16:09:48.789237Z" + }, + { + "id": "7cff7ede-fd2a-4e5f-b68a-7e2cd8aff6a9", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0007-dokumente", + "title": "WP-0007 \u2014 Dokumentenmanagement", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:02:06.464997Z", + "updated_at": "2026-05-08T16:31:09.277073Z" + }, + { + "id": "c9e993b6-33d4-4682-ab02-31d1089aebc6", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0008-preise", + "title": "WP-0008 \u2014 Preise und Marktpreisauswertung", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:02:08.873040Z", + "updated_at": "2026-05-08T16:41:13.295675Z" + }, + { + "id": "dfe3424a-cdd9-4eaa-b5d9-03d3a588bdee", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0009-abgabe-nachbetrachtung", + "title": "WP-0009 \u2014 Abgabe und Nachbetrachtung", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:02:11.147659Z", + "updated_at": "2026-05-11T10:34:48.162162Z" + }, + { + "id": "0e38d4b0-b172-49a6-a37f-22aad3fd3f0f", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0010-partner-bibliothek", + "title": "WP-0010 \u2014 Subunternehmer, Partner und Bibliothek", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:02:13.374205Z", + "updated_at": "2026-05-11T13:34:58.638121Z" + }, + { + "id": "40dfb9a3-0a49-4800-9140-4367b9919b16", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0011-marktbegleiter", + "title": "WP-0011 \u2014 Marktbegleiter-Analyse", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:02:15.555453Z", + "updated_at": "2026-05-11T15:24:50.295106Z" + }, + { + "id": "06a300ae-fd32-4e4b-9a45-d2086beaf780", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0012-querschnitt", + "title": "WP-0012 \u2014 Querschnitt", + "status": "finished", + "owner": null, + "created_at": "2026-05-08T16:02:17.920050Z", + "updated_at": "2026-05-11T15:55:11.756847Z" + }, + { + "id": "1ce590e4-64ec-46a2-86fd-1932cd6f15d6", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0013-feedback-bugs", + "title": "WP-0013 \u2014 Feedback-Bugs: Fehlerbehebungen und Verbesserungen", + "status": "finished", + "owner": null, + "created_at": "2026-05-13T22:08:08.521595Z", + "updated_at": "2026-05-13T22:32:03.734863Z" + }, + { + "id": "51c371fb-a08c-46f3-a9b5-b0cfe5a14b96", + "repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993", + "repo_slug": "vergabe-teilnahme", + "slug": "wp-0014-aufgaben-lose-scores", + "title": "WP-0014 \u2014 Aufgaben-Phasenzuordnung und Fertigstellungs-Scores", + "status": "finished", + "owner": null, + "created_at": "2026-05-13T23:34:20.141963Z", + "updated_at": "2026-05-13T23:46:53.123922Z" + }, + { + "id": "4945ead3-d54b-438f-963a-2fd687c472d4", + "repo_id": "a53a75fb-e9fa-41d9-8a96-12a4b924dc63", + "repo_slug": "whynot-design", + "slug": "adhoc-2026-06-27", + "title": "Ad hoc fixes \u2014 2026-06-27", + "status": "finished", + "owner": "claude", + "created_at": "2026-06-27T11:43:19.812388Z", + "updated_at": "2026-06-27T17:26:36.304854Z" + }, + { + "id": "2a841f25-ee20-406d-9436-c2057545e05e", + "repo_id": "a53a75fb-e9fa-41d9-8a96-12a4b924dc63", + "repo_slug": "whynot-design", + "slug": "whynot-design-whynot-wp-0001", + "title": "Bootstrap State Hub integration", + "status": "finished", + "owner": "codex", + "created_at": "2026-06-26T20:29:59.336737Z", + "updated_at": "2026-06-26T20:29:59.336737Z" + }, + { + "id": "0a3511c1-1771-438b-9364-104d8f0de2f8", + "repo_id": "a53a75fb-e9fa-41d9-8a96-12a4b924dc63", + "repo_slug": "whynot-design", + "slug": "whynot-wp-0002", + "title": "Technology-neutral designbook with stack adapters (Lit reference)", + "status": "finished", + "owner": "claude", + "created_at": "2026-06-22T20:46:56.058753Z", + "updated_at": "2026-06-30T07:23:25.011452Z" + }, + { + "id": "41fed928-f44a-48f4-9870-120310fbf071", + "repo_id": "a53a75fb-e9fa-41d9-8a96-12a4b924dc63", + "repo_slug": "whynot-design", + "slug": "whynot-wp-0003", + "title": "Downstream consumption: versioned IR releases + consumer drift-check", + "status": "finished", + "owner": "claude", + "created_at": "2026-06-27T09:43:40.468257Z", + "updated_at": "2026-06-30T07:54:36.602835Z" + } + ] +} diff --git a/docs/evidence/RMGR-WP-0005-orphan-disposition-2026-08-21.md b/docs/evidence/RMGR-WP-0005-orphan-disposition-2026-08-21.md index e68c0bf..20959a0 100644 --- a/docs/evidence/RMGR-WP-0005-orphan-disposition-2026-08-21.md +++ b/docs/evidence/RMGR-WP-0005-orphan-disposition-2026-08-21.md @@ -48,6 +48,11 @@ used for the repair because it aborts while refreshing the brief for stale registered path `/home/worsch/inter-hub`; the targeted binding route avoided coupling this data repair to that unrelated registry defect. +The 217 closed rows were subsequently exported to +`docs/evidence/RMGR-WP-0005-closed-provenance-2026-08-21.json`. The minimized +export is 90,458 bytes and seals the canonical row payload with SHA-256 +`40f227ecb138880d41cebf30a1f0559e709ab2d753be892409ea8e00f96d37d7`. + ## Reproduction The counts came from `GET /workplans/`, selecting rows whose diff --git a/docs/hub-record-authority_v1.md b/docs/hub-record-authority_v1.md index 82a9df8..1d1ae35 100644 --- a/docs/hub-record-authority_v1.md +++ b/docs/hub-record-authority_v1.md @@ -62,3 +62,8 @@ records require both repository and domain context and resolve to types resolve to their one declared hub owner. Unknown types and writes whose claimed owner disagrees with the contract are rejected instead of falling back to whichever hub received the request. + +Local repository projections implement the cache side through `rmgr cache +status|rebuild`; every read carries observation age and fingerprint-based +staleness. The guarded legacy-cache procedure and closed provenance export are +defined in `docs/cache-rebuild_v1.md`. diff --git a/src/repo_manager/cache.py b/src/repo_manager/cache.py new file mode 100644 index 0000000..f6fe68e --- /dev/null +++ b/src/repo_manager/cache.py @@ -0,0 +1,156 @@ +"""Rebuildable local-cache status and legacy provenance export.""" + +from __future__ import annotations + +import hashlib +import json +from datetime import datetime +from pathlib import Path +from typing import Any +from urllib.request import urlopen + +from repo_manager.gitops import head_sha +from repo_manager.index_store import default_index_path, load_index +from repo_manager.parse.record import iter_record_files +from repo_manager.parse.register import iter_register_files +from repo_manager.parse.workplan import iter_workplan_files +from repo_manager.time import utc_now, utc_now_text + +CACHE_STATUS_SCHEMA = "repo-manager.cache-status.v1" +CLOSED_EXPORT_SCHEMA = "repo-manager.closed-workplan-provenance.v1" + + +def authoritative_source_files(repo_root: Path) -> list[Path]: + repo_root = repo_root.resolve() + paths = { + *iter_workplan_files(repo_root), + *iter_record_files(repo_root), + *iter_register_files(repo_root), + } + for name in (".repo-classification.yaml", "INTENT.md", "GOAL.md"): + path = repo_root / name + if path.is_file(): + paths.add(path) + return sorted(paths, key=lambda path: str(path.relative_to(repo_root))) + + +def source_fingerprint(repo_root: Path) -> tuple[str, list[str]]: + """Hash the paths and bytes that feed the local repository projection.""" + repo_root = repo_root.resolve() + digest = hashlib.sha256() + relative_paths: list[str] = [] + for path in authoritative_source_files(repo_root): + relative = str(path.relative_to(repo_root)) + relative_paths.append(relative) + digest.update(relative.encode("utf-8")) + digest.update(b"\0") + digest.update(path.read_bytes()) + digest.update(b"\0") + return digest.hexdigest(), relative_paths + + +def _parse_timestamp(value: str) -> datetime: + parsed = datetime.fromisoformat(value) + if parsed.tzinfo is None: + raise ValueError("cache observed_at must be timezone-aware") + return parsed + + +def cache_status(repo_root: Path) -> dict[str, Any]: + repo_root = repo_root.resolve() + path = default_index_path(repo_root) + checked_at = utc_now() + if not path.is_file(): + return { + "schema": CACHE_STATUS_SCHEMA, + "ok": True, + "advisory": True, + "cache_present": False, + "stale": True, + "stale_reasons": ["cache_missing"], + "checked_at": checked_at.isoformat().replace("+00:00", "Z"), + "repo_root": str(repo_root), + "index_path": str(path), + } + + index = load_index(path) + fingerprint, source_files = source_fingerprint(repo_root) + stale_reasons: list[str] = [] + if not index.source_fingerprint: + stale_reasons.append("legacy_index_missing_source_fingerprint") + elif index.source_fingerprint != fingerprint: + stale_reasons.append("authoritative_source_changed") + try: + observed_at = _parse_timestamp(index.observed_at) + age_seconds = max(0, int((checked_at - observed_at).total_seconds())) + except (TypeError, ValueError): + observed_at = None + age_seconds = None + stale_reasons.append("invalid_observed_at") + + return { + "schema": CACHE_STATUS_SCHEMA, + "ok": True, + "advisory": True, + "cache_present": True, + "stale": bool(stale_reasons), + "stale_reasons": stale_reasons, + "checked_at": checked_at.isoformat().replace("+00:00", "Z"), + "observed_at": index.observed_at, + "age_seconds": age_seconds, + "repo_root": str(repo_root), + "index_path": str(path), + "indexed_head_sha": index.head_sha, + "current_head_sha": head_sha(repo_root), + "source_fingerprint": index.source_fingerprint, + "current_source_fingerprint": fingerprint, + "source_file_count": len(source_files), + "record_count": len(index.work_records), + } + + +def build_closed_provenance_export( + workplans: list[dict[str, Any]], + repos: list[dict[str, Any]], + *, + source: str, +) -> dict[str, Any]: + repo_slugs = {str(repo["id"]): repo.get("slug") for repo in repos if repo.get("id")} + rows = [ + { + "id": row.get("id"), + "repo_id": row.get("repo_id"), + "repo_slug": repo_slugs.get(str(row.get("repo_id"))), + "slug": row.get("slug"), + "title": row.get("title"), + "status": row.get("status"), + "owner": row.get("owner"), + "created_at": row.get("created_at"), + "updated_at": row.get("updated_at"), + } + for row in workplans + if row.get("status") in {"finished", "archived"} and not row.get("backing_filename") + ] + rows.sort(key=lambda row: (str(row["status"]), str(row["repo_slug"]), str(row["slug"]))) + canonical_rows = json.dumps(rows, sort_keys=True, separators=(",", ":")).encode("utf-8") + return { + "schema": CLOSED_EXPORT_SCHEMA, + "ok": True, + "generated_at": utc_now_text(), + "source": source, + "filter": "backing_filename is null and status in [finished, archived]", + "count": len(rows), + "rows_sha256": hashlib.sha256(canonical_rows).hexdigest(), + "rows": rows, + } + + +def fetch_closed_provenance(api_base: str) -> dict[str, Any]: + base = api_base.rstrip("/") + with urlopen(f"{base}/workplans/", timeout=30) as response: + workplans = json.load(response) + with urlopen(f"{base}/repos/?limit=500", timeout=30) as response: + repos = json.load(response) + if not isinstance(workplans, list) or not isinstance(repos, list): + raise TypeError("State Hub returned a non-list workplan or repository payload") + return build_closed_provenance_export(workplans, repos, source=base) diff --git a/src/repo_manager/cli.py b/src/repo_manager/cli.py index 9afc052..d32acf5 100644 --- a/src/repo_manager/cli.py +++ b/src/repo_manager/cli.py @@ -314,6 +314,24 @@ def main(argv: list[str] | None = None) -> int: p_authority_route.add_argument("--domain-slug", default=None) p_authority_route.add_argument("--claimed-owner", default=None) + p_cache = sub.add_parser("cache", help="Inspect and rebuild advisory repository caches") + cache_sub = p_cache.add_subparsers(dest="cache_command") + p_cache_status = cache_sub.add_parser("status", help="Report cache age and source drift") + p_cache_status.add_argument("--path", default=".") + p_cache_rebuild = cache_sub.add_parser("rebuild", help="Rebuild the local index from files") + p_cache_rebuild.add_argument("--path", default=".") + p_cache_rebuild.add_argument("--slug", default=None) + p_cache_export = cache_sub.add_parser( + "export-closed", + help="Export unbound closed State Hub records before cache replacement", + ) + p_cache_export.add_argument( + "--api-base", + default=os.environ.get("STATE_HUB_API_BASE", "http://127.0.0.1:8000"), + ) + p_cache_export.add_argument("--output", required=True) + p_cache_export.add_argument("--force", action="store_true") + args = parser.parse_args(argv) if args.version or args.command in (None, "version"): @@ -687,6 +705,49 @@ def main(argv: list[str] | None = None) -> int: print(json.dumps({"ok": True, **result}, indent=2)) return 0 + if args.command == "cache": + if not args.cache_command: + p_cache.print_help() + return 2 + from repo_manager.cache import cache_status, fetch_closed_provenance + + if args.cache_command == "status": + result = cache_status(Path(args.path)) + elif args.cache_command == "rebuild": + from repo_manager.index_store import save_index + from repo_manager.observe import observe_repository + + snapshot, index = observe_repository(Path(args.path), slug=args.slug) + index_path = save_index(index) + result = { + "ok": True, + "rebuilt": True, + "index_path": str(index_path), + "record_count": snapshot["index"]["record_count"], + "cache": cache_status(Path(args.path)), + } + else: + output = Path(args.output) + if output.exists() and not args.force: + print( + json.dumps( + {"ok": False, "error": f"output exists: {output}; use --force to replace"}, + indent=2, + ) + ) + return 1 + try: + result = fetch_closed_provenance(args.api_base) + except (OSError, TypeError, ValueError) as exc: + print(json.dumps({"ok": False, "error": str(exc)}, indent=2)) + return 1 + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(result, indent=2) + "\n", encoding="utf-8") + result = {key: value for key, value in result.items() if key != "rows"} + result["output"] = str(output) + print(json.dumps(result, indent=2)) + return 0 if result.get("ok") else 1 + parser.print_help() return 0 diff --git a/src/repo_manager/index_store.py b/src/repo_manager/index_store.py index 3770bc8..9e4b660 100644 --- a/src/repo_manager/index_store.py +++ b/src/repo_manager/index_store.py @@ -3,6 +3,8 @@ from __future__ import annotations import json +import os +import tempfile from dataclasses import asdict, dataclass, field from pathlib import Path from typing import Any @@ -32,9 +34,11 @@ class RepoIndex: repo_root: str head_sha: str | None observed_at: str + source_fingerprint: str | None = None + source_files: list[str] = field(default_factory=list) work_records: list[WorkRecordEntry] = field(default_factory=list) events: list[dict[str, Any]] = field(default_factory=list) - schema: str = "repo_manager.index.v0" + schema: str = "repo_manager.index.v1" def to_dict(self) -> dict[str, Any]: return { @@ -43,6 +47,8 @@ class RepoIndex: "repo_root": self.repo_root, "head_sha": self.head_sha, "observed_at": self.observed_at, + "source_fingerprint": self.source_fingerprint, + "source_files": self.source_files, "work_records": [asdict(r) for r in self.work_records], "events": self.events, } @@ -58,6 +64,8 @@ class RepoIndex: repo_root=data["repo_root"], head_sha=data.get("head_sha"), observed_at=data.get("observed_at") or _now(), + source_fingerprint=data.get("source_fingerprint"), + source_files=list(data.get("source_files") or []), work_records=records, events=list(data.get("events") or []), schema=data.get("schema") or "repo_manager.index.v0", @@ -71,7 +79,24 @@ def default_index_path(repo_root: Path) -> Path: def save_index(index: RepoIndex, path: Path | None = None) -> Path: path = path or default_index_path(Path(index.repo_root)) path.parent.mkdir(parents=True, exist_ok=True) - path.write_text(json.dumps(index.to_dict(), indent=2) + "\n", encoding="utf-8") + temporary: Path | None = None + try: + with tempfile.NamedTemporaryFile( + mode="w", + encoding="utf-8", + dir=path.parent, + prefix=f".{path.name}.", + delete=False, + ) as handle: + temporary = Path(handle.name) + handle.write(json.dumps(index.to_dict(), indent=2) + "\n") + handle.flush() + os.fsync(handle.fileno()) + os.replace(temporary, path) + temporary = None + finally: + if temporary is not None: + temporary.unlink(missing_ok=True) return path diff --git a/src/repo_manager/observe.py b/src/repo_manager/observe.py index 90cee73..bf1d845 100644 --- a/src/repo_manager/observe.py +++ b/src/repo_manager/observe.py @@ -7,6 +7,7 @@ from pathlib import Path import yaml +from repo_manager.cache import source_fingerprint from repo_manager.classification import require_valid_classification from repo_manager.gitops import head_sha, is_git_repo from repo_manager.index_store import RepoIndex, WorkRecordEntry, _now @@ -117,11 +118,14 @@ def observe_repository(repo_root: Path, *, slug: str | None = None) -> tuple[dic ) sha = head_sha(repo_root) if is_git_repo(repo_root) else None + fingerprint, source_files = source_fingerprint(repo_root) index = RepoIndex( slug=slug, repo_root=str(repo_root), head_sha=sha, observed_at=_now(), + source_fingerprint=fingerprint, + source_files=source_files, work_records=records, ) diff --git a/tests/test_cache.py b/tests/test_cache.py new file mode 100644 index 0000000..f9ccc1f --- /dev/null +++ b/tests/test_cache.py @@ -0,0 +1,71 @@ +from __future__ import annotations + +import subprocess +from pathlib import Path + +from repo_manager.cache import build_closed_provenance_export, cache_status +from repo_manager.index_store import save_index +from repo_manager.observe import observe_repository + + +def _git(repo: Path, *args: str) -> None: + subprocess.run(["git", *args], cwd=repo, check=True, capture_output=True) + + +def _repo(tmp_path: Path) -> Path: + repo = tmp_path / "example" + (repo / "workplans").mkdir(parents=True) + _git(repo, "init") + _git(repo, "config", "user.email", "test@example.com") + _git(repo, "config", "user.name", "Test") + (repo / "workplans" / "EX-WP-0001.md").write_text( + "---\nid: EX-WP-0001\ntitle: Example\nstatus: active\n---\n", + encoding="utf-8", + ) + _git(repo, "add", ".") + _git(repo, "commit", "-m", "seed") + return repo + + +def test_cache_status_reports_age_and_detects_source_drift(tmp_path: Path) -> None: + repo = _repo(tmp_path) + missing = cache_status(repo) + assert missing["cache_present"] is False + assert missing["stale_reasons"] == ["cache_missing"] + + _snapshot, index = observe_repository(repo) + save_index(index) + fresh = cache_status(repo) + assert fresh["advisory"] is True + assert fresh["stale"] is False + assert fresh["age_seconds"] >= 0 + + path = repo / "workplans" / "EX-WP-0001.md" + path.write_text(path.read_text(encoding="utf-8") + "\nChanged.\n", encoding="utf-8") + stale = cache_status(repo) + assert stale["stale"] is True + assert stale["stale_reasons"] == ["authoritative_source_changed"] + + +def test_closed_export_excludes_live_and_bound_rows() -> None: + workplans = [ + {"id": "1", "repo_id": "r1", "slug": "closed", "status": "finished"}, + {"id": "2", "repo_id": "r1", "slug": "live", "status": "active"}, + { + "id": "3", + "repo_id": "r1", + "slug": "bound", + "status": "archived", + "backing_filename": "bound.md", + }, + ] + result = build_closed_provenance_export( + workplans, + [{"id": "r1", "slug": "example"}], + source="http://state-hub.test", + ) + + assert result["count"] == 1 + assert result["rows"][0]["slug"] == "closed" + assert result["rows"][0]["repo_slug"] == "example" + assert len(result["rows_sha256"]) == 64 diff --git a/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md b/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md index 00228fb..69e14db 100644 --- a/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md +++ b/workplans/RMGR-WP-0005-registrar-consolidation-deterministic-ids.md @@ -378,7 +378,7 @@ byte-identical writeback, and neither creates a duplicate record. ```task id: RMGR-WP-0005-T07 -status: wait +status: progress priority: high state_hub_task_id: "70f83359-0b61-4dc0-83b0-33f289b64e83" ``` @@ -396,6 +396,24 @@ Measured 2026-08-17: 955 workplans locally against 649 on the primary, 320 local-only, of which **288 are backed by files that all exist on disk**. That portion of the divergence is redundant and needs no merge — only a rebuild. +**Progress (2026-08-21):** `rmgr cache status|rebuild` now makes the local +repository projection explicitly advisory and reports canonical observation +time, age, source fingerprint, current/indexed Git revision, and concrete stale +reasons. The fingerprint covers the authoritative record/classification/intent +bytes, including uncommitted changes. A live drill correctly rejected the +legacy index as stale, rebuilt 73 records from repository files, and immediately +reported a fresh cache. + +The 217 closed unbound rows are preserved in a minimized, integrity-sealed +export at +`docs/evidence/RMGR-WP-0005-closed-provenance-2026-08-21.json`; live unbound +rows remain zero. `docs/cache-rebuild_v1.md` gates any database replacement on +an isolated projection rebuild and proof that hub-native records reached their +one central owner. Remaining before `done`: compare against an isolated rebuilt +State Hub database and verify hub-native centralization. The documented remote +tunnel at `127.0.0.1:18000` was not running during this pass, so no central +comparison was inferred. + ## Separate file-derived from hub-native data ```task