diff --git a/docs/evidence/2026-10-04-freshness-coverage.json b/docs/evidence/2026-10-04-freshness-coverage.json new file mode 100644 index 0000000..fee8017 --- /dev/null +++ b/docs/evidence/2026-10-04-freshness-coverage.json @@ -0,0 +1,2120 @@ +{ + "schema": "repo-manager.freshness-coverage.v1", + "measured_at": "2026-10-04T10:39:55.971346Z", + "hub": { + "status": "ok", + "instance_role": "primary", + "instance_label": "railiance01", + "api_base": "http://127.0.0.1:8000", + "schema": { + "status": "ok", + "applied": "a0b1c2d3e4f5", + "expected": "a0b1c2d3e4f5" + } + }, + "runner": { + "repo_manager_source_head": "a8184d5e14fb111483dacd859cb89af67672192f", + "repo_manager_cluster_deployments": [], + "images": { + "state-hub/state-hub": "forgejo.coulomb.social/coulomb/state-hub:main-5dd3df9", + "activity-core/actcore-worker": "forgejo.coulomb.social/coulomb/activity-core@sha256:75e240ac23c1c6d7daae14691c2b4137d2d639a9af694aaf0d4c774a7e4d3886" + } + }, + "active_definition": { + "error": null, + "configmap": "activity-core/actcore-external-activity-definitions", + "c_rule_definitions": [ + { + "key": "state-hub-consistency-sweep.md", + "id": "7c4e9a12-8f3b-4d5e-9c6a-1b2d3e4f5a6b", + "version": "1.1", + "enabled": "false", + "status": "paused", + "cron": "*/15 * * * *" + } + ] + }, + "receipts": { + "edge_outbox": { + "path": "/home/worsch/.statehub/edge-outbox.sqlite3", + "by_status": {}, + "pending_count": 0, + "conflict_count": 0, + "oldest_pending_at": null + }, + "ops_runs_summary": { + "available": false, + "stale": false, + "source": "activity-core", + "generated_at": "2026-10-04T10:44:44.437906Z", + "open": 0, + "claimed": 0, + "failed_24h": 0, + "stuck_open_or_claimed": 0, + "items": [], + "error": "activity-core unavailable: ACTIVITY_CORE_URL is not configured" + } + }, + "summary": { + "repos_total": 146, + "repos_active": 141, + "active_with_projection_sync": 136, + "active_never_synced_or_no_workplans": 5, + "active_forge_head_resolved": 141, + "synced_within_24h": 35, + "synced_within_7d": 120, + "synced_within_30d": 124, + "age_hours": { + "min": 0.2, + "median": 109.2, + "p90": 292.1, + "max": 949.4 + } + }, + "repositories": [ + { + "slug": "access-engine", + "status": "active", + "remote_url": "https://forgejo.coulomb.social/coulomb/access-engine.git", + "forge_commit": "58e33d29c9fc17ff626ea6f2bca81253f3ddacf5", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:42:06.331645Z", + "last_backing_synced_at": null, + "projection_error": "timed out", + "workplans": null, + "tasks": null, + "dependencies": null, + "age_hours": null + }, + { + "slug": "activity-core", + "status": "active", + "remote_url": "forgejo-remote:coulomb/activity-core.git", + "forge_commit": "ab10835a0c7b680c454c51bafda85fc92a739558", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:15:39.221278Z", + "last_backing_synced_at": "2026-10-03T23:15:31.706820Z", + "projection_error": null, + "workplans": 51, + "tasks": 277, + "dependencies": 17, + "age_hours": 11.4 + }, + { + "slug": "adaptive-pricing", + "status": "active", + "remote_url": "forgejo-remote:coulomb/adaptive-pricing.git", + "forge_commit": "41ac3d227ac1051a0d5bbb9ae750b2312ca11f9f", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:10:44.238841Z", + "last_backing_synced_at": "2026-10-03T23:10:45.222033Z", + "projection_error": null, + "workplans": 14, + "tasks": 59, + "dependencies": 3, + "age_hours": 11.5 + }, + { + "slug": "agentic-resources", + "status": "active", + "remote_url": "forgejo-remote:coulomb/agentic-resources.git", + "forge_commit": "65b3a5cb6bf3eb214b492b95a38f2eb729f89709", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T15:44:30.028933Z", + "last_backing_synced_at": "2026-09-29T21:12:56.368193Z", + "projection_error": null, + "workplans": 12, + "tasks": 49, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "approval-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/approval-engine", + "forge_commit": "5733205de8c4c9da4fb78395787f905f402b8199", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:37:03.213601Z", + "last_backing_synced_at": "2026-10-04T09:36:57.793631Z", + "projection_error": null, + "workplans": 3, + "tasks": 16, + "dependencies": 0, + "age_hours": 1.0 + }, + { + "slug": "artifact-store", + "status": "active", + "remote_url": "forgejo-remote:coulomb/artifact-store.git", + "forge_commit": "94541a29e2758ea5da86a41f4d2016c6ef98d026", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-26T14:49:58.883650Z", + "last_backing_synced_at": "2026-09-29T21:13:36.827110Z", + "projection_error": null, + "workplans": 7, + "tasks": 44, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "audit-core", + "status": "active", + "remote_url": "forgejo-remote:coulomb/audit-core.git", + "forge_commit": "f1035a80fa1cacb269b69f42658ea4194f2d4345", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:37:29.683365Z", + "last_backing_synced_at": "2026-10-04T09:37:22.866812Z", + "projection_error": null, + "workplans": 17, + "tasks": 72, + "dependencies": 0, + "age_hours": 1.0 + }, + { + "slug": "binect-chrome", + "status": "active", + "remote_url": "forgejo-remote:coulomb/binect-chrome.git", + "forge_commit": "bf7395342997bf3b35432bbc38e18190a3e6ddc6", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-21T13:50:05.143740Z", + "last_backing_synced_at": "2026-09-29T21:08:15.639483Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 109.5 + }, + { + "slug": "binect-js", + "status": "active", + "remote_url": "forgejo-remote:coulomb/binect-js.git", + "forge_commit": "d128f03a700bd9a5f6e6a6e3b3f68fa07d597243", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-21T13:49:56.823189Z", + "last_backing_synced_at": "2026-09-29T21:08:07.472023Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 109.5 + }, + { + "slug": "binky-control", + "status": "active", + "remote_url": "ssh://forgejo-remote/coulomb/binky-control.git", + "forge_commit": "92dcba7088eaa14c97fddbf2320e0916765f94cd", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-28T21:59:44.677462Z", + "last_backing_synced_at": "2026-09-29T21:14:01.860269Z", + "projection_error": null, + "workplans": 8, + "tasks": 37, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "can-you-assist", + "status": "active", + "remote_url": "forgejo-remote:coulomb/can-you-assist.git", + "forge_commit": "0ada8d66ce67574ce5b9fd6880975a3a2def302e", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-26T16:05:06.324525Z", + "last_backing_synced_at": "2026-09-29T21:14:11.682701Z", + "projection_error": null, + "workplans": 9, + "tasks": 63, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "canned-prompts", + "status": "active", + "remote_url": "forgejo-remote:coulomb/canned-prompts", + "forge_commit": "d1631e4eb4ec3ed77e76c93575ad34dee9d65a09", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-08T09:38:37.188381Z", + "last_backing_synced_at": "2026-09-29T21:14:19.378922Z", + "projection_error": null, + "workplans": 7, + "tasks": 22, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "citation-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/citation-engine.git", + "forge_commit": "a2de792fb6e905ef6a9454798de0c143f72a2947", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-26T16:20:08.735190Z", + "last_backing_synced_at": "2026-09-29T21:14:32.497023Z", + "projection_error": null, + "workplans": 2, + "tasks": 8, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "citation-evidence", + "status": "active", + "remote_url": "forgejo-remote:coulomb/citation-evidence.git", + "forge_commit": "c58d096cbd6fbaeb2b43362b50bdbf8258de4309", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T18:08:28.725566Z", + "last_backing_synced_at": "2026-09-29T21:14:51.535720Z", + "projection_error": null, + "workplans": 12, + "tasks": 81, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "citation-work", + "status": "active", + "remote_url": "forgejo-remote:coulomb/citation-work.git", + "forge_commit": "c38759046570d2ac7809aa1ab020760583293653", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:34:45.003285Z", + "last_backing_synced_at": "2026-09-29T21:15:02.634689Z", + "projection_error": null, + "workplans": 1, + "tasks": 8, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "clay-borg", + "status": "active", + "remote_url": "forgejo-remote:coulomb/clay-borg.git", + "forge_commit": "90207cc0413590809a5d19326169695508afb9e3", + "forge_error": null, + "hub_last_state_synced_at": null, + "last_backing_synced_at": null, + "projection_error": null, + "workplans": 0, + "tasks": 0, + "dependencies": 0, + "age_hours": null + }, + { + "slug": "commerce-canon", + "status": "active", + "remote_url": "https://forgejo.coulomb.social/coulomb/commerce-canon.git", + "forge_commit": "2e230e7d3e163d925f040d49143426a7e622aca6", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-06T06:07:19.315815Z", + "last_backing_synced_at": "2026-09-29T21:15:27.837168Z", + "projection_error": null, + "workplans": 9, + "tasks": 31, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "config-atlas", + "status": "active", + "remote_url": "forgejo-remote:coulomb/config-atlas.git", + "forge_commit": "8c312714a98c694e6734ab40a8eab56e79800b80", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:35:15.083308Z", + "last_backing_synced_at": "2026-09-29T21:15:48.276419Z", + "projection_error": null, + "workplans": 4, + "tasks": 19, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "coordination-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/coordination-engine.git", + "forge_commit": "c401067842072b75717f76480dd6e7db1836059c", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:26:01.870336Z", + "last_backing_synced_at": "2026-10-03T01:25:59.466400Z", + "projection_error": null, + "workplans": 5, + "tasks": 14, + "dependencies": 1, + "age_hours": 33.2 + }, + { + "slug": "core-hub", + "status": "active", + "remote_url": "forgejo-remote:coulomb/core-hub.git", + "forge_commit": "a69ad325271485afe284a6db85673dfa30d9d4ad", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-28T22:36:22.804086Z", + "last_backing_synced_at": "2026-09-29T21:16:09.139247Z", + "projection_error": null, + "workplans": 13, + "tasks": 54, + "dependencies": 1, + "age_hours": 109.4 + }, + { + "slug": "coulomb-loop", + "status": "active", + "remote_url": "forgejo-remote:coulomb/coulomb-loop.git", + "forge_commit": "d07455fbacd3e125e1ba6d991041c811b5c353d2", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:36:51.123044Z", + "last_backing_synced_at": "2026-09-29T21:16:14.145774Z", + "projection_error": null, + "workplans": 6, + "tasks": 46, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "coulomb-research", + "status": "active", + "remote_url": "forgejo-remote:coulomb/coulomb-research", + "forge_commit": "b5892748d7caf251804d3ad476b8cbf401788d73", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-29T19:27:55.630446Z", + "last_backing_synced_at": "2026-09-29T21:16:18.984304Z", + "projection_error": null, + "workplans": 6, + "tasks": 20, + "dependencies": 1, + "age_hours": 109.4 + }, + { + "slug": "coulomb-social", + "status": "active", + "remote_url": "forgejo-remote:coulomb/coulomb-social.git", + "forge_commit": "aee6dfdc7651bf19f3459fa1685af997a70f1dd1", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-22T06:26:05.053480Z", + "last_backing_synced_at": "2026-09-29T21:16:25.020976Z", + "projection_error": null, + "workplans": 6, + "tasks": 32, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "direkt-vermittlung-de", + "status": "active", + "remote_url": "forgejo-remote:coulomb/direkt-vermittlung-de.git", + "forge_commit": "bba68d1948cbe6525c55b53f9311f092afa21e5d", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T12:27:42.951746Z", + "last_backing_synced_at": "2026-09-29T21:16:28.040070Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "disaster-control", + "status": "active", + "remote_url": "forgejo-remote:coulomb/disaster-control.git", + "forge_commit": "9f437a5a069279941ea8b982870725b36d0ca7ac", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T15:41:13.525679Z", + "last_backing_synced_at": "2026-09-29T21:16:39.265724Z", + "projection_error": null, + "workplans": 3, + "tasks": 32, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "domain-tree", + "status": "active", + "remote_url": "forgejo-remote:coulomb/domain-tree.git", + "forge_commit": "2f2dd5ed57c1d22322b7be5ae0de134ced9bbc60", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:37:01.504733Z", + "last_backing_synced_at": "2026-09-29T21:16:43.678450Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "email-connect", + "status": "active", + "remote_url": "forgejo-remote:coulomb/email-connect.git", + "forge_commit": "73702b7e1a1671948b0545ef32d6e0de9cca9c65", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T18:09:33.029185Z", + "last_backing_synced_at": "2026-09-29T21:16:55.283350Z", + "projection_error": null, + "workplans": 5, + "tasks": 33, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "emergent-security", + "status": "active", + "remote_url": "forgejo-remote:coulomb/emergent-security", + "forge_commit": "4c6fda38298fa50665ead41526b893adf069d335", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T01:06:48.072429Z", + "last_backing_synced_at": "2026-10-04T01:06:47.119715Z", + "projection_error": null, + "workplans": 2, + "tasks": 14, + "dependencies": 7, + "age_hours": 9.6 + }, + { + "slug": "evidence-anchor", + "status": "active", + "remote_url": "forgejo-remote:coulomb/evidence-anchor.git", + "forge_commit": "adbcae29e813e676afe0ad8149c440284e1729e7", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T18:09:49.086091Z", + "last_backing_synced_at": "2026-09-29T21:17:06.443028Z", + "projection_error": null, + "workplans": 4, + "tasks": 22, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "evidence-binder", + "status": "active", + "remote_url": "forgejo-remote:coulomb/evidence-binder.git", + "forge_commit": "4f115e38b84960038df92b5755cc33387fdec574", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T18:10:06.226764Z", + "last_backing_synced_at": "2026-09-29T21:17:23.393775Z", + "projection_error": null, + "workplans": 2, + "tasks": 10, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "evidence-source", + "status": "active", + "remote_url": "forgejo-remote:coulomb/evidence-source.git", + "forge_commit": "24aad6ec6a6b0b5ac28efd2638f0c66d52f459f3", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T18:10:26.770013Z", + "last_backing_synced_at": "2026-09-29T21:17:34.211596Z", + "projection_error": null, + "workplans": 4, + "tasks": 15, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "facetted-interfaces", + "status": "active", + "remote_url": "forgejo-remote:coulomb/facetted-interfaces", + "forge_commit": "a1f8d4d58d441d9eb4f870c575012a6c6305a8ca", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-22T06:35:29.741580Z", + "last_backing_synced_at": "2026-09-29T21:17:43.951526Z", + "projection_error": null, + "workplans": 2, + "tasks": 7, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "feature-control", + "status": "active", + "remote_url": "forgejo-remote:coulomb/feature-control.git", + "forge_commit": "a555aaaf35c4fbb7a67703ae05c8795bcbc449d9", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-05T23:33:36.884837Z", + "last_backing_synced_at": "2026-09-29T21:17:57.896905Z", + "projection_error": null, + "workplans": 5, + "tasks": 27, + "dependencies": 0, + "age_hours": 109.4 + }, + { + "slug": "fin-hub", + "status": "active", + "remote_url": "forgejo-remote:coulomb/fin-hub.git", + "forge_commit": "8f527c6705bbf5d7ffed43559411ca748bec8fe4", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:45:54.807977Z", + "last_backing_synced_at": "2026-10-03T01:45:52.996549Z", + "projection_error": null, + "workplans": 8, + "tasks": 41, + "dependencies": 3, + "age_hours": 32.9 + }, + { + "slug": "fluid-core", + "status": "active", + "remote_url": "forgejo-remote:coulomb/fluid-core.git", + "forge_commit": "4b798d26f1cfd1eb7054e269921c4f4e86e53991", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:46:19.885407Z", + "last_backing_synced_at": "2026-10-03T01:46:19.304586Z", + "projection_error": null, + "workplans": 9, + "tasks": 64, + "dependencies": 11, + "age_hours": 32.9 + }, + { + "slug": "fluid-telegram", + "status": "active", + "remote_url": "forgejo-remote:coulomb/fluid-telegram.git", + "forge_commit": "512a199a9af7cc66b2582d06a1ec2894a826400b", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:46:46.943872Z", + "last_backing_synced_at": "2026-10-03T01:46:43.938680Z", + "projection_error": null, + "workplans": 2, + "tasks": 21, + "dependencies": 1, + "age_hours": 32.9 + }, + { + "slug": "freedom-intelligence", + "status": "active", + "remote_url": "forgejo-remote:coulomb/freedom-intelligence.git", + "forge_commit": "0a2d38fa5420d5db580f1e09ab83b9c42bcc164c", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:10:58.527156Z", + "last_backing_synced_at": "2026-10-03T23:10:57.642347Z", + "projection_error": null, + "workplans": 5, + "tasks": 33, + "dependencies": 11, + "age_hours": 11.5 + }, + { + "slug": "frontend-patterns", + "status": "active", + "remote_url": "forgejo-remote:coulomb/frontend-patterns", + "forge_commit": "047a6a2d314ff5a9d2a87d5bc987d7d84835f682", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:30:20.858033Z", + "last_backing_synced_at": "2026-10-04T09:30:14.684655Z", + "projection_error": null, + "workplans": 10, + "tasks": 33, + "dependencies": 16, + "age_hours": 1.2 + }, + { + "slug": "gate-house", + "status": "active", + "remote_url": "forgejo-remote:coulomb/gate-house.git", + "forge_commit": "755c36ae19c3789365d8f6405158730365da3572", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T10:55:23.364014Z", + "last_backing_synced_at": "2026-10-03T10:55:23.036954Z", + "projection_error": null, + "workplans": 5, + "tasks": 35, + "dependencies": 3, + "age_hours": 23.7 + }, + { + "slug": "glas-harness", + "status": "active", + "remote_url": "forgejo-remote:coulomb/glas-harness.git", + "forge_commit": "5ce4f38aedfd27cc783131f18480df02e2951514", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T15:35:30.171608Z", + "last_backing_synced_at": "2026-10-03T15:35:23.497421Z", + "projection_error": null, + "workplans": 16, + "tasks": 56, + "dependencies": 5, + "age_hours": 19.1 + }, + { + "slug": "ground-game", + "status": "active", + "remote_url": "forgejo-remote:coulomb/ground-game.git", + "forge_commit": "4965a4edb00d20b8340c906786a261cb807cf98e", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-22T06:36:57.760197Z", + "last_backing_synced_at": "2026-09-29T21:20:10.751632Z", + "projection_error": null, + "workplans": 10, + "tasks": 39, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "guide-board", + "status": "active", + "remote_url": "forgejo-remote:coulomb/guide-board.git", + "forge_commit": "7e28f4ee557049a5d331098bc656e1aff83a70a0", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:39:22.492301Z", + "last_backing_synced_at": "2026-09-29T21:20:20.119664Z", + "projection_error": null, + "workplans": 7, + "tasks": 37, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "hall-of-helix", + "status": "active", + "remote_url": "forgejo-remote:coulomb/hall-of-helix.git", + "forge_commit": "8fa4ece1b4f1aa000005b4bf4671ae2a4225e0df", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:48:02.690769Z", + "last_backing_synced_at": "2026-10-03T21:20:45.468937Z", + "projection_error": null, + "workplans": 3, + "tasks": 13, + "dependencies": 2, + "age_hours": 13.3 + }, + { + "slug": "helix-forge", + "status": "active", + "remote_url": "forgejo-remote:coulomb/helix-forge.git", + "forge_commit": "fdf5af121ca906df6c657aac6b89c5b07b5818f2", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-08T09:39:21.243412Z", + "last_backing_synced_at": "2026-09-29T21:20:48.773022Z", + "projection_error": null, + "workplans": 5, + "tasks": 31, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "hub-core", + "status": "active", + "remote_url": "forgejo-remote:coulomb/hub-core.git", + "forge_commit": "e8fb648f25ada0c59baadd1afd3a82b9fffc5943", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T10:13:04.219569Z", + "last_backing_synced_at": "2026-10-04T10:13:01.855582Z", + "projection_error": null, + "workplans": 12, + "tasks": 57, + "dependencies": 13, + "age_hours": 0.4 + }, + { + "slug": "human-resources", + "status": "active", + "remote_url": "forgejo-remote:coulomb/human-resources.git", + "forge_commit": "1363719ff1bb50b47dc7f2f459a726aeb9505461", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-12T13:50:22.793188Z", + "last_backing_synced_at": "2026-09-29T21:08:25.127924Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 109.5 + }, + { + "slug": "ihp-railiance-probe", + "status": "active", + "remote_url": "forgejo-remote:coulomb/ihp-railiance-probe.git", + "forge_commit": "bafecfb4bed8d19aa625daa066beb3a0f1998772", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:41:23.832532Z", + "last_backing_synced_at": "2026-09-29T21:21:13.844619Z", + "projection_error": null, + "workplans": 1, + "tasks": 12, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "info-tech-canon", + "status": "active", + "remote_url": "forgejo-remote:coulomb/info-tech-canon.git", + "forge_commit": "3d206a56f4ece439f6ee87f9ee4d1800ab82166e", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:11:33.990903Z", + "last_backing_synced_at": "2026-10-03T23:11:31.328304Z", + "projection_error": null, + "workplans": 33, + "tasks": 127, + "dependencies": 31, + "age_hours": 11.5 + }, + { + "slug": "informed-decision", + "status": "active", + "remote_url": "forgejo-remote:coulomb/informed-decision", + "forge_commit": "f06b7e9c53d3477f1e690ed8259f2eaab3661f91", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:21:48.622060Z", + "last_backing_synced_at": "2026-10-04T09:21:47.798079Z", + "projection_error": null, + "workplans": 7, + "tasks": 34, + "dependencies": 3, + "age_hours": 1.3 + }, + { + "slug": "infospace-bench", + "status": "active", + "remote_url": "forgejo-remote:coulomb/infospace-bench.git", + "forge_commit": "be872bf4e0af3a54b24f90ac4971fa281227da63", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:42:41.320073Z", + "last_backing_synced_at": "2026-09-29T21:21:36.659988Z", + "projection_error": null, + "workplans": 21, + "tasks": 111, + "dependencies": 5, + "age_hours": 109.3 + }, + { + "slug": "intelligence-radar", + "status": "active", + "remote_url": "forgejo-remote:coulomb/intelligence-radar", + "forge_commit": "8590c506b4d95f795bf68410bf0787c9705e49e7", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:48:51.174788Z", + "last_backing_synced_at": "2026-10-03T01:48:48.466025Z", + "projection_error": null, + "workplans": 7, + "tasks": 21, + "dependencies": 4, + "age_hours": 32.9 + }, + { + "slug": "inter-hub", + "status": "archived", + "remote_url": "ssh://git@92.205.130.254:30022/coulomb/inter-hub.git", + "forge_commit": null, + "forge_error": null, + "hub_last_state_synced_at": "2026-07-11T04:49:10.076494Z", + "last_backing_synced_at": "2026-08-21T10:01:23.585395Z", + "projection_error": null, + "workplans": 25, + "tasks": 187, + "dependencies": 0 + }, + { + "slug": "interface-canon", + "status": "active", + "remote_url": "forgejo-remote:coulomb/interface-canon", + "forge_commit": "20d7bfc2c3687fd15f00de10916d9ef976bf90ec", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-09T20:06:57.412944Z", + "last_backing_synced_at": "2026-09-29T21:22:09.411963Z", + "projection_error": null, + "workplans": 5, + "tasks": 13, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "issue-core", + "status": "active", + "remote_url": "forgejo-remote:coulomb/issue-core.git", + "forge_commit": "de368271f6ffc06353ec409998a0d6d0ec0bf25e", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-14T02:55:19.387365Z", + "last_backing_synced_at": "2026-09-29T21:22:23.666251Z", + "projection_error": null, + "workplans": 7, + "tasks": 39, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "kaizen-agentic", + "status": "active", + "remote_url": "forgejo-remote:coulomb/kaizen-agentic.git", + "forge_commit": "894d34c466eb7f949e136fbeca4fcf201cdb1086", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-05T23:33:46.439719Z", + "last_backing_synced_at": "2026-09-29T21:22:30.688357Z", + "projection_error": null, + "workplans": 17, + "tasks": 176, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "key-cape", + "status": "active", + "remote_url": "forgejo-remote:coulomb/key-cape.git", + "forge_commit": "31ed8bb6868135a1f320e7f46687777c4e5edb1d", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:16:36.915296Z", + "last_backing_synced_at": "2026-10-04T09:16:35.331323Z", + "projection_error": null, + "workplans": 41, + "tasks": 180, + "dependencies": 2, + "age_hours": 1.4 + }, + { + "slug": "kings-guard", + "status": "active", + "remote_url": "forgejo-remote:coulomb/kings-guard.git", + "forge_commit": "24d1cd17dda589ce926e25e48b85da1de1878f47", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:12:06.842426Z", + "last_backing_synced_at": "2026-10-03T23:12:03.605914Z", + "projection_error": null, + "workplans": 7, + "tasks": 28, + "dependencies": 0, + "age_hours": 11.5 + }, + { + "slug": "kontextual-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/kontextual-engine.git", + "forge_commit": "90fc86e3efd87292c6688d7cab7a95107335daf5", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-26T06:04:40.005374Z", + "last_backing_synced_at": "2026-09-29T21:23:05.697400Z", + "projection_error": null, + "workplans": 21, + "tasks": 150, + "dependencies": 6, + "age_hours": 109.3 + }, + { + "slug": "llm-connect", + "status": "active", + "remote_url": "forgejo-remote:coulomb/llm-connect.git", + "forge_commit": "9dc6b39766cea2b9904d80c40bee0df89d444c8f", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-29T19:33:36.391212Z", + "last_backing_synced_at": "2026-09-29T21:23:13.064273Z", + "projection_error": null, + "workplans": 15, + "tasks": 158, + "dependencies": 9, + "age_hours": 109.3 + }, + { + "slug": "marki-docx", + "status": "active", + "remote_url": "forgejo-remote:coulomb/marki-docx.git", + "forge_commit": "b9cefe4e3daf88771abaf7ae2ce0698839becab6", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:47:56.110567Z", + "last_backing_synced_at": "2026-09-29T21:23:20.075824Z", + "projection_error": null, + "workplans": 7, + "tasks": 47, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "markitect-filter", + "status": "active", + "remote_url": "forgejo-remote:coulomb/markitect-filter.git", + "forge_commit": "ac0d9055d8aa5bb3f92ea95ef6a5cbf0753c8bda", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:48:18.733117Z", + "last_backing_synced_at": "2026-09-29T21:23:26.506282Z", + "projection_error": null, + "workplans": 3, + "tasks": 11, + "dependencies": 3, + "age_hours": 109.3 + }, + { + "slug": "markitect-main", + "status": "active", + "remote_url": "forgejo-remote:coulomb/markitect-main.git", + "forge_commit": "9fbfe76ebb43ff84358d2f2a36ca6b958431e22d", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:49:06.790560Z", + "last_backing_synced_at": "2026-10-03T01:49:07.035552Z", + "projection_error": null, + "workplans": 2, + "tasks": 13, + "dependencies": 7, + "age_hours": 32.8 + }, + { + "slug": "markitect-project", + "status": "archived", + "remote_url": null, + "forge_commit": null, + "forge_error": null, + "hub_last_state_synced_at": "2026-06-22T19:40:38.015169Z", + "last_backing_synced_at": null, + "projection_error": null, + "workplans": 2, + "tasks": 17, + "dependencies": 0 + }, + { + "slug": "markitect-quarkdown", + "status": "active", + "remote_url": "forgejo-remote:coulomb/markitect-quarkdown.git", + "forge_commit": "f3c5fdc048d145d2f07794f30cea6ba0c0133022", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:48:51.429920Z", + "last_backing_synced_at": "2026-09-29T21:23:30.890817Z", + "projection_error": null, + "workplans": 1, + "tasks": 6, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "markitect-tool", + "status": "active", + "remote_url": "forgejo-remote:coulomb/markitect-tool.git", + "forge_commit": "3c5cb657049d7f9f2bbae07560e6e27e964f59f2", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-30T16:54:02.043237Z", + "last_backing_synced_at": "2026-09-30T16:53:50.653410Z", + "projection_error": null, + "workplans": 22, + "tasks": 147, + "dependencies": 48, + "age_hours": 89.8 + }, + { + "slug": "maturity-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/maturity-engine.git", + "forge_commit": "2ef97c87a0f818a906aa42942c32d6c69f9ec899", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-21T05:37:20.314531Z", + "last_backing_synced_at": "2026-09-29T21:23:53.883831Z", + "projection_error": null, + "workplans": 1, + "tasks": 7, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "net-kingdom", + "status": "active", + "remote_url": "forgejo-remote:coulomb/net-kingdom.git", + "forge_commit": "45a189a39167eef62709df0e857309f7ddc59029", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T22:29:42.086269Z", + "last_backing_synced_at": "2026-10-03T22:29:37.821586Z", + "projection_error": null, + "workplans": 60, + "tasks": 310, + "dependencies": 59, + "age_hours": 12.2 + }, + { + "slug": "open-cmis-tck", + "status": "active", + "remote_url": "forgejo-remote:coulomb/open-cmis-tck.git", + "forge_commit": "d8d63f824456808c2d08f501a6e1f1535dbd54a6", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:51:15.813932Z", + "last_backing_synced_at": "2026-09-29T21:24:03.932000Z", + "projection_error": null, + "workplans": 3, + "tasks": 25, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "open-reuse", + "status": "active", + "remote_url": "forgejo-remote:coulomb/open-reuse.git", + "forge_commit": "f0456ac33131e8ebc5328169cb0244858288a3bc", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:51:58.479150Z", + "last_backing_synced_at": "2026-09-29T21:24:21.318366Z", + "projection_error": null, + "workplans": 4, + "tasks": 12, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "ops-bridge", + "status": "active", + "remote_url": "forgejo-remote:coulomb/ops-bridge.git", + "forge_commit": "190ef1e188e12c606f1359325fd9fdd1dbef29e2", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-03T16:52:41.973959Z", + "last_backing_synced_at": "2026-09-29T21:24:37.858693Z", + "projection_error": null, + "workplans": 11, + "tasks": 100, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "ops-hub", + "status": "active", + "remote_url": "forgejo-remote:coulomb/ops-hub.git", + "forge_commit": "75f4944144b000119a68d3ed6eb8d938b05f73a1", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-31T19:28:22.089238Z", + "last_backing_synced_at": "2026-09-29T21:24:52.695603Z", + "projection_error": null, + "workplans": 5, + "tasks": 19, + "dependencies": 0, + "age_hours": 109.3 + }, + { + "slug": "ops-mason", + "status": "active", + "remote_url": "forgejo-remote:coulomb/ops-mason.git", + "forge_commit": "2549d8636a298712885dca1b2e3536a510f34c1a", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:21:18.194505Z", + "last_backing_synced_at": "2026-10-03T06:38:33.693554Z", + "projection_error": null, + "workplans": 8, + "tasks": 40, + "dependencies": 11, + "age_hours": 28.0 + }, + { + "slug": "ops-warden", + "status": "active", + "remote_url": "forgejo-remote:coulomb/ops-warden.git", + "forge_commit": "a3555498ddf08c1758d74358c54937b9d758227d", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:14:39.189574Z", + "last_backing_synced_at": "2026-10-03T23:14:37.040959Z", + "projection_error": null, + "workplans": 53, + "tasks": 215, + "dependencies": 16, + "age_hours": 11.4 + }, + { + "slug": "phase-memory", + "status": "active", + "remote_url": "forgejo-remote:coulomb/phase-memory.git", + "forge_commit": "755fd2c3e2a5414cd89ee59df1814196d872b768", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-24T08:13:34.532603Z", + "last_backing_synced_at": "2026-09-29T21:25:43.811265Z", + "projection_error": null, + "workplans": 18, + "tasks": 105, + "dependencies": 0, + "age_hours": 109.2 + }, + { + "slug": "policy-nexus", + "status": "active", + "remote_url": "forgejo-remote:coulomb/policy-nexus.git", + "forge_commit": "bfef142d4cf8084b76084e4b0c7775999d72c2e7", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-30T18:43:48.664352Z", + "last_backing_synced_at": "2026-09-30T18:43:46.737319Z", + "projection_error": null, + "workplans": 6, + "tasks": 39, + "dependencies": 10, + "age_hours": 87.9 + }, + { + "slug": "polycode-sim", + "status": "active", + "remote_url": "forgejo-remote:coulomb/polycode-sim.git", + "forge_commit": "5c6d974f11daf3ba7bc82ac8183004e9ef5f39b3", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T12:27:19.831959Z", + "last_backing_synced_at": "2026-09-29T21:25:58.365176Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 109.2 + }, + { + "slug": "pqrst-practice", + "status": "active", + "remote_url": "forgejo-remote:coulomb/pqrst-practice", + "forge_commit": "25d2ce38c4ccd12d9cacaaa69769bdfe4bcc4639", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-05T20:34:39.931214Z", + "last_backing_synced_at": "2026-09-29T21:26:02.303496Z", + "projection_error": null, + "workplans": 2, + "tasks": 8, + "dependencies": 0, + "age_hours": 109.2 + }, + { + "slug": "pr-hall-of-helix", + "status": "active", + "remote_url": "forgejo-remote:coulomb/pr-hall-of-helix.git", + "forge_commit": "ac4c2babf2c9323715ce096e1b627c24bbbc6f1f", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-22T06:30:38.423473Z", + "last_backing_synced_at": null, + "projection_error": null, + "workplans": 0, + "tasks": 0, + "dependencies": 0, + "age_hours": null + }, + { + "slug": "prj-canon-federation", + "status": "active", + "remote_url": "forgejo-remote:coulomb/prj-canon-federation.git", + "forge_commit": "85abef3bc8eb38d1a641bfe4b6a9e8be6b6cd213", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-22T06:32:39.139291Z", + "last_backing_synced_at": "2026-09-29T21:26:13.990669Z", + "projection_error": null, + "workplans": 1, + "tasks": 13, + "dependencies": 0, + "age_hours": 109.2 + }, + { + "slug": "prj-forgejo-org-refactor", + "status": "active", + "remote_url": "forgejo-remote:coulomb/prj-forgejo-org-refactor.git", + "forge_commit": "ab89e65f173d4cf543a80a4338ae80da3d4b9bc2", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-29T19:37:25.290671Z", + "last_backing_synced_at": "2026-09-29T21:26:31.442377Z", + "projection_error": null, + "workplans": 1, + "tasks": 5, + "dependencies": 1, + "age_hours": 109.2 + }, + { + "slug": "prj-helixforge-factory", + "status": "active", + "remote_url": "forgejo-remote:coulomb/prj-helixforge-factory.git", + "forge_commit": "328ce7a141d1eebebd25727f1e78189f466d0295", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:51:11.371316Z", + "last_backing_synced_at": "2026-10-03T01:51:08.798109Z", + "projection_error": null, + "workplans": 1, + "tasks": 8, + "dependencies": 10, + "age_hours": 32.8 + }, + { + "slug": "prj-state-hub-retirement", + "status": "active", + "remote_url": "forgejo-remote:coulomb/prj-state-hub-retirement.git", + "forge_commit": "f8389a810ec61361f98bf73a45b5d48921845512", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T12:26:55.891083Z", + "last_backing_synced_at": "2026-09-29T21:26:57.206012Z", + "projection_error": null, + "workplans": 2, + "tasks": 13, + "dependencies": 0, + "age_hours": 109.2 + }, + { + "slug": "prj-unattended-progress-company", + "status": "active", + "remote_url": "forgejo-remote:coulomb/prj-unattended-progress-company.git", + "forge_commit": "90174b26b4aee84b5d84023ebb8c76f865a7f3e9", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:51:35.051402Z", + "last_backing_synced_at": "2026-10-03T01:51:31.117892Z", + "projection_error": null, + "workplans": 4, + "tasks": 15, + "dependencies": 2, + "age_hours": 32.8 + }, + { + "slug": "python-snake", + "status": "active", + "remote_url": "forgejo-remote:coulomb/python-snake.git", + "forge_commit": "704657e67ac536ee2bd3f88546a619895ec8e0f8", + "forge_error": null, + "hub_last_state_synced_at": null, + "last_backing_synced_at": null, + "projection_error": null, + "workplans": 0, + "tasks": 0, + "dependencies": 0, + "age_hours": null + }, + { + "slug": "qonto-assistant", + "status": "active", + "remote_url": "forgejo-remote:coulomb/qonto-assistant.git", + "forge_commit": "bf8a9ede6704523d4744d63bf481ca8b195d86f4", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:02:54.633740Z", + "last_backing_synced_at": "2026-10-03T23:02:51.743883Z", + "projection_error": null, + "workplans": 9, + "tasks": 37, + "dependencies": 2, + "age_hours": 11.6 + }, + { + "slug": "rail-knative", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rail-knative.git", + "forge_commit": "cd38dba3653e7fc85d3b2d3a074811b9a7216f25", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-27T16:01:16.641180Z", + "last_backing_synced_at": "2026-09-29T21:28:15.753336Z", + "projection_error": null, + "workplans": 2, + "tasks": 7, + "dependencies": 0, + "age_hours": 109.2 + }, + { + "slug": "rail-kubernetes", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rail-kubernetes.git", + "forge_commit": "35159e49c1340b7a0e30c49188975c8839d346f6", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T18:18:02.430219Z", + "last_backing_synced_at": "2026-09-29T21:28:21.633875Z", + "projection_error": null, + "workplans": 3, + "tasks": 10, + "dependencies": 0, + "age_hours": 109.2 + }, + { + "slug": "railiance-apps", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-apps.git", + "forge_commit": "23151de6a23499ec3a59f1d1be4add6f1995e6de", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:51:55.589924Z", + "last_backing_synced_at": "2026-10-03T01:51:55.581270Z", + "projection_error": null, + "workplans": 25, + "tasks": 129, + "dependencies": 0, + "age_hours": 32.8 + }, + { + "slug": "railiance-bootstrap", + "status": "archived", + "remote_url": null, + "forge_commit": null, + "forge_error": null, + "hub_last_state_synced_at": "2026-06-22T19:38:27.878127Z", + "last_backing_synced_at": null, + "projection_error": null, + "workplans": 0, + "tasks": 0, + "dependencies": 0 + }, + { + "slug": "railiance-clock", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-clock", + "forge_commit": "b90f6bc9605b55957ae77b4b5db5a58b459c2adb", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:52:13.183135Z", + "last_backing_synced_at": "2026-10-03T01:52:12.676906Z", + "projection_error": null, + "workplans": 5, + "tasks": 20, + "dependencies": 20, + "age_hours": 32.8 + }, + { + "slug": "railiance-cluster", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-cluster.git", + "forge_commit": "8657e43b16a0d4845d0ddccd81da8b6f2314c630", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-30T10:50:46.071216Z", + "last_backing_synced_at": "2026-09-30T10:50:42.687631Z", + "projection_error": null, + "workplans": 28, + "tasks": 114, + "dependencies": 0, + "age_hours": 95.8 + }, + { + "slug": "railiance-enablement", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-enablement.git", + "forge_commit": "28baf36ad6399543315288a9dd5038882899a3a5", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-24T07:58:02.292583Z", + "last_backing_synced_at": "2026-09-24T07:57:58.431091Z", + "projection_error": null, + "workplans": 2, + "tasks": 3, + "dependencies": 0, + "age_hours": 242.7 + }, + { + "slug": "railiance-fabric", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-fabric.git", + "forge_commit": "96d19127125e85bdab7ff0ff79fc3ecf7d19045e", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:12:00.057436Z", + "last_backing_synced_at": "2026-10-03T01:11:58.001445Z", + "projection_error": null, + "workplans": 39, + "tasks": 152, + "dependencies": 3, + "age_hours": 33.5 + }, + { + "slug": "railiance-forge", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-forge.git", + "forge_commit": "e395e5e9c196fe7cea9cd2be513554e493e675ee", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T18:20:10.806653Z", + "last_backing_synced_at": "2026-08-25T21:18:54.525121Z", + "projection_error": null, + "workplans": 7, + "tasks": 30, + "dependencies": 0, + "age_hours": 949.4 + }, + { + "slug": "railiance-hosts", + "status": "archived", + "remote_url": null, + "forge_commit": null, + "forge_error": null, + "hub_last_state_synced_at": "2026-09-24T08:10:49.466537Z", + "last_backing_synced_at": null, + "projection_error": null, + "workplans": 0, + "tasks": 0, + "dependencies": 0 + }, + { + "slug": "railiance-infra", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-infra.git", + "forge_commit": "1b9c1c3f5f028d600b943d18941097cb22c62017", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:52:33.853442Z", + "last_backing_synced_at": "2026-10-03T01:52:33.907268Z", + "projection_error": null, + "workplans": 15, + "tasks": 92, + "dependencies": 5, + "age_hours": 32.8 + }, + { + "slug": "railiance-master", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-master.git", + "forge_commit": "48569bb01268a066c4c6730841b858e3175062f8", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T15:52:24.781508Z", + "last_backing_synced_at": "2026-10-03T15:52:22.962098Z", + "projection_error": null, + "workplans": 14, + "tasks": 69, + "dependencies": 0, + "age_hours": 18.8 + }, + { + "slug": "railiance-platform", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-platform.git", + "forge_commit": "8c7c34e84b4bab327ef4f9bc77f35ce13bb56e3f", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:10:26.492155Z", + "last_backing_synced_at": "2026-10-03T23:10:26.033618Z", + "projection_error": null, + "workplans": 74, + "tasks": 349, + "dependencies": 45, + "age_hours": 11.5 + }, + { + "slug": "railiance-telemetry", + "status": "active", + "remote_url": "forgejo-remote:coulomb/railiance-telemetry.git", + "forge_commit": "81d905971c38de9aaf11088ba605e112152d8268", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-30T18:44:23.353378Z", + "last_backing_synced_at": "2026-09-30T18:44:21.580198Z", + "projection_error": null, + "workplans": 2, + "tasks": 7, + "dependencies": 0, + "age_hours": 87.9 + }, + { + "slug": "ralph-workplan", + "status": "active", + "remote_url": "forgejo-remote:coulomb/ralph-workplan.git", + "forge_commit": "abea4cc9bbc62b9bf443b57d9b28d4274f62c295", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T12:27:07.852342Z", + "last_backing_synced_at": "2026-08-25T21:18:56.938193Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 949.3 + }, + { + "slug": "rapp-canned-prompts", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-canned-prompts", + "forge_commit": "60e8c49e6d940606492414344aacb07625eb5cda", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-08T09:38:41.864370Z", + "last_backing_synced_at": "2026-09-08T09:38:43.261939Z", + "projection_error": null, + "workplans": 2, + "tasks": 10, + "dependencies": 0, + "age_hours": 625.0 + }, + { + "slug": "rapp-core-hub", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-core-hub.git", + "forge_commit": "ab00a3fb5b297cc0bb5b4d79a254603b0a5b8cf4", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T19:13:39.979517Z", + "last_backing_synced_at": "2026-10-03T19:13:36.698264Z", + "projection_error": null, + "workplans": 4, + "tasks": 18, + "dependencies": 0, + "age_hours": 15.4 + }, + { + "slug": "rapp-issue-core", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-issue-core.git", + "forge_commit": "171545d42a710491a55b28ba7499d23c5ba657d2", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T12:27:32.110326Z", + "last_backing_synced_at": "2026-08-25T21:18:57.355525Z", + "projection_error": null, + "workplans": 1, + "tasks": 6, + "dependencies": 0, + "age_hours": 949.3 + }, + { + "slug": "rapp-openbao", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-openbao.git", + "forge_commit": "13ab9144bbb1d88fe760362df91a83c8b34e4e66", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:53:39.837791Z", + "last_backing_synced_at": "2026-10-03T01:53:39.842876Z", + "projection_error": null, + "workplans": 2, + "tasks": 7, + "dependencies": 1, + "age_hours": 32.8 + }, + { + "slug": "rapp-policy-nexus", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-policy-nexus.git", + "forge_commit": "ebe83820b42245bd9ec46a1326459e9f7770bd0e", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:53:48.175810Z", + "last_backing_synced_at": "2026-10-03T01:53:48.335627Z", + "projection_error": null, + "workplans": 2, + "tasks": 18, + "dependencies": 6, + "age_hours": 32.8 + }, + { + "slug": "rapp-postgres", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-postgres.git", + "forge_commit": "03744030c9258e920f6403a9ce184a26d7b75268", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:38:07.062670Z", + "last_backing_synced_at": "2026-10-04T09:38:06.579296Z", + "projection_error": null, + "workplans": 7, + "tasks": 37, + "dependencies": 0, + "age_hours": 1.0 + }, + { + "slug": "rapp-qonto", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-qonto.git", + "forge_commit": "bed5cd4208a963c0aa67d059a1a2228c74d73db9", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:12:31.491851Z", + "last_backing_synced_at": "2026-10-03T23:12:32.786441Z", + "projection_error": null, + "workplans": 3, + "tasks": 16, + "dependencies": 0, + "age_hours": 11.5 + }, + { + "slug": "rapp-sbom-nexus", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-sbom-nexus.git", + "forge_commit": "1566bcf69fc0757db5efc67f78b14af10d944c1b", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T12:20:41.513733Z", + "last_backing_synced_at": "2026-08-25T21:18:58.229422Z", + "projection_error": null, + "workplans": 3, + "tasks": 10, + "dependencies": 0, + "age_hours": 949.3 + }, + { + "slug": "rapp-telemetry", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-telemetry.git", + "forge_commit": "17053dbc47f7c22efd67fd90d06d108d154835fa", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:12:54.484953Z", + "last_backing_synced_at": "2026-10-03T23:12:52.257891Z", + "projection_error": null, + "workplans": 1, + "tasks": 5, + "dependencies": 1, + "age_hours": 11.5 + }, + { + "slug": "rapp-tenant-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-tenant-engine.git", + "forge_commit": "c160be23577ab4d99ee2cd008deb455b07f0597d", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-02T22:17:35.858495Z", + "last_backing_synced_at": "2026-10-02T22:17:35.008420Z", + "projection_error": null, + "workplans": 1, + "tasks": 0, + "dependencies": 0, + "age_hours": 36.4 + }, + { + "slug": "rapp-user-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rapp-user-engine.git", + "forge_commit": "f108c65136cf42cd2960f10842a81481eef6362f", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T18:32:53.596991Z", + "last_backing_synced_at": "2026-10-03T18:32:51.902944Z", + "projection_error": null, + "workplans": 3, + "tasks": 7, + "dependencies": 0, + "age_hours": 16.1 + }, + { + "slug": "reef-railiance", + "status": "active", + "remote_url": "forgejo-remote:coulomb/reef-railiance.git", + "forge_commit": "d4b33eeec6b1d9ab4a81ece9ed080e1df25e9c33", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:53:56.859981Z", + "last_backing_synced_at": "2026-10-03T01:53:58.317309Z", + "projection_error": null, + "workplans": 6, + "tasks": 20, + "dependencies": 0, + "age_hours": 32.8 + }, + { + "slug": "reef-storage", + "status": "active", + "remote_url": "forgejo-remote:coulomb/reef-storage", + "forge_commit": "91b4c2e1453be8c5d99b5da4d893563401ff03b8", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-27T18:34:54.363366Z", + "last_backing_synced_at": "2026-09-27T18:34:53.972107Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 160.1 + }, + { + "slug": "rein-aharness", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rein-aharness.git", + "forge_commit": "4409b7e8a63c2cd0996b7009f509edd7fc80d5c9", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:13:27.101355Z", + "last_backing_synced_at": "2026-10-03T23:13:25.997002Z", + "projection_error": null, + "workplans": 8, + "tasks": 34, + "dependencies": 3, + "age_hours": 11.4 + }, + { + "slug": "rein-openweights", + "status": "active", + "remote_url": "forgejo-remote:coulomb/rein-openweights.git", + "forge_commit": "e1fccb39b738a5381a9de6e1d799f124797798ce", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-22T06:33:24.653811Z", + "last_backing_synced_at": "2026-09-22T06:33:23.258452Z", + "projection_error": null, + "workplans": 2, + "tasks": 8, + "dependencies": 0, + "age_hours": 292.1 + }, + { + "slug": "repo-manager", + "status": "active", + "remote_url": "forgejo-remote:coulomb/repo-manager.git", + "forge_commit": "a8184d5e14fb111483dacd859cb89af67672192f", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T12:57:56.318340Z", + "last_backing_synced_at": "2026-10-03T12:57:48.698817Z", + "projection_error": null, + "workplans": 23, + "tasks": 102, + "dependencies": 0, + "age_hours": 21.7 + }, + { + "slug": "repo-scoping", + "status": "active", + "remote_url": "forgejo-remote:coulomb/repo-scoping.git", + "forge_commit": "4a05eabc6d93d587e95709771e0c7a6746eb8977", + "forge_error": null, + "hub_last_state_synced_at": "2026-05-16T13:18:44.557864Z", + "last_backing_synced_at": "2026-08-25T21:19:00.859594Z", + "projection_error": null, + "workplans": 18, + "tasks": 113, + "dependencies": 0, + "age_hours": 949.3 + }, + { + "slug": "repo-seed", + "status": "active", + "remote_url": "forgejo-remote:coulomb/repo-seed.git", + "forge_commit": "33a741fa2999ff0298706233f69bdcf840f1b146", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-21T10:02:31.173887Z", + "last_backing_synced_at": null, + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": null + }, + { + "slug": "resource-control", + "status": "active", + "remote_url": "forgejo-remote:coulomb/resource-control.git", + "forge_commit": "3604d468f86ede7d320f4d22dd4aea775306b53f", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-22T06:33:14.665088Z", + "last_backing_synced_at": "2026-09-22T06:33:12.089700Z", + "projection_error": null, + "workplans": 7, + "tasks": 34, + "dependencies": 0, + "age_hours": 292.1 + }, + { + "slug": "reuse-surface", + "status": "active", + "remote_url": "forgejo-remote:coulomb/reuse-surface.git", + "forge_commit": "309432778b8470a5a65d413337f13e7a9434b953", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-30T18:36:10.474010Z", + "last_backing_synced_at": "2026-09-30T18:36:09.495131Z", + "projection_error": null, + "workplans": 23, + "tasks": 140, + "dependencies": 0, + "age_hours": 88.1 + }, + { + "slug": "risk-nexus", + "status": "active", + "remote_url": "forgejo-remote:coulomb/risk-nexus.git", + "forge_commit": "7095f328e6639fd0033c90296ebc73e8acb76c9c", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:32:21.939259Z", + "last_backing_synced_at": "2026-10-04T09:32:19.650384Z", + "projection_error": null, + "workplans": 7, + "tasks": 37, + "dependencies": 7, + "age_hours": 1.1 + }, + { + "slug": "runbook-tutorials", + "status": "active", + "remote_url": "forgejo-remote:coulomb/runbook-tutorials", + "forge_commit": "df97fadf5decfcdb5c3c6ab90211226335ffdf8e", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:54:47.813998Z", + "last_backing_synced_at": "2026-10-03T01:54:43.831729Z", + "projection_error": null, + "workplans": 9, + "tasks": 66, + "dependencies": 11, + "age_hours": 32.8 + }, + { + "slug": "sand-boxer", + "status": "active", + "remote_url": "forgejo-remote:coulomb/sand-boxer.git", + "forge_commit": "8bdedf4c6fcbf3791aa4fc7fb4f27eefb9196826", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T09:20:35.065004Z", + "last_backing_synced_at": "2026-10-04T09:20:31.982713Z", + "projection_error": null, + "workplans": 15, + "tasks": 101, + "dependencies": 1, + "age_hours": 1.3 + }, + { + "slug": "sbom-nexus", + "status": "active", + "remote_url": "forgejo-remote:coulomb/sbom-nexus.git", + "forge_commit": "07e998d9abfd4e4fcc74db9e292ed22c6f407522", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-30T18:45:39.594838Z", + "last_backing_synced_at": "2026-09-30T18:45:38.837731Z", + "projection_error": null, + "workplans": 4, + "tasks": 19, + "dependencies": 0, + "age_hours": 87.9 + }, + { + "slug": "secrets-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/secrets-engine.git", + "forge_commit": "3149654609d0c738d05002d2ca08e40e774bbb30", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:55:19.677928Z", + "last_backing_synced_at": "2026-10-03T01:55:16.411574Z", + "projection_error": null, + "workplans": 14, + "tasks": 75, + "dependencies": 4, + "age_hours": 32.7 + }, + { + "slug": "security-canon", + "status": "active", + "remote_url": "forgejo-remote:coulomb/security-canon.git", + "forge_commit": "e45d548551d99961f276bd269f75ab719474fc64", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T15:36:12.862673Z", + "last_backing_synced_at": "2026-10-03T15:36:03.244532Z", + "projection_error": null, + "workplans": 2, + "tasks": 8, + "dependencies": 0, + "age_hours": 19.1 + }, + { + "slug": "shard-wiki", + "status": "active", + "remote_url": "forgejo-remote:coulomb/shard-wiki.git", + "forge_commit": "d4cacd7a35a8eb4def06f6954bef576d21fb8ed5", + "forge_error": null, + "hub_last_state_synced_at": "2026-06-15T22:57:07.697215Z", + "last_backing_synced_at": "2026-08-25T21:19:05.102849Z", + "projection_error": null, + "workplans": 14, + "tasks": 96, + "dependencies": 0, + "age_hours": 949.3 + }, + { + "slug": "soul-frame", + "status": "active", + "remote_url": "forgejo-remote:coulomb/soul-frame.git", + "forge_commit": "255d281ad2d62885bccb3288749ea910bfa4062b", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-28T18:42:29.508121Z", + "last_backing_synced_at": "2026-09-28T18:42:18.820774Z", + "projection_error": null, + "workplans": 11, + "tasks": 47, + "dependencies": 9, + "age_hours": 136.0 + }, + { + "slug": "state-hub", + "status": "active", + "remote_url": "forgejo-remote:coulomb/state-hub.git", + "forge_commit": "b2af3c1c1d845e8a0ef2822aa6ffb6bc5e2549d0", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T10:19:56.804336Z", + "last_backing_synced_at": "2026-10-04T10:19:55.304658Z", + "projection_error": null, + "workplans": 67, + "tasks": 364, + "dependencies": 3, + "age_hours": 0.3 + }, + { + "slug": "target-revenue", + "status": "active", + "remote_url": "forgejo-remote:coulomb/target-revenue.git", + "forge_commit": "a3a8a27a8cda32ae3c7b55353ee16a131c50a0a0", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T12:22:44.270645Z", + "last_backing_synced_at": "2026-08-25T21:19:08.370178Z", + "projection_error": null, + "workplans": 15, + "tasks": 87, + "dependencies": 0, + "age_hours": 949.3 + }, + { + "slug": "tegwick-control", + "status": "active", + "remote_url": "forgejo-remote:coulomb/tegwick-control.git", + "forge_commit": "70dba933a7b6820433209d4ee9e146c218391753", + "forge_error": null, + "hub_last_state_synced_at": "2026-07-06T23:33:40.810587Z", + "last_backing_synced_at": "2026-09-29T21:10:39.872150Z", + "projection_error": null, + "workplans": 3, + "tasks": 9, + "dependencies": 0, + "age_hours": 109.5 + }, + { + "slug": "tele-mcp", + "status": "active", + "remote_url": "forgejo-remote:coulomb/tele-mcp.git", + "forge_commit": "da0da8b4e4d6db4477a6fa203e241cd9c399f312", + "forge_error": null, + "hub_last_state_synced_at": "2026-06-24T16:19:09.386288Z", + "last_backing_synced_at": "2026-08-25T21:19:09.193258Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 949.3 + }, + { + "slug": "tenant-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/tenant-engine.git", + "forge_commit": "b8ee47806dc23b2dec082257896e2074c65d626e", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T15:52:28.840081Z", + "last_backing_synced_at": "2026-10-03T15:52:25.498019Z", + "projection_error": null, + "workplans": 15, + "tasks": 57, + "dependencies": 10, + "age_hours": 18.8 + }, + { + "slug": "test-driver", + "status": "active", + "remote_url": "forgejo-remote:coulomb/test-driver.git", + "forge_commit": "c3ad06e598057862cf500cbd46c7c8b6f83885ed", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:56:44.322520Z", + "last_backing_synced_at": "2026-10-03T01:56:41.720032Z", + "projection_error": null, + "workplans": 4, + "tasks": 26, + "dependencies": 1, + "age_hours": 32.7 + }, + { + "slug": "testdrive-jsui", + "status": "active", + "remote_url": "forgejo-remote:coulomb/testdrive-jsui.git", + "forge_commit": "71a2a1e52c02d2fa6df2a4d5f5e808e17fe07221", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T12:19:43.882281Z", + "last_backing_synced_at": "2026-08-25T21:19:10.485457Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 949.3 + }, + { + "slug": "the-custodian", + "status": "active", + "remote_url": "forgejo-remote:coulomb/the-custodian.git", + "forge_commit": "ed20ca4b1128de487d7e4b8e3ab18450262af5d6", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T10:29:16.286848Z", + "last_backing_synced_at": "2026-10-04T10:29:06.621907Z", + "projection_error": null, + "workplans": 89, + "tasks": 592, + "dependencies": 15, + "age_hours": 0.2 + }, + { + "slug": "timeline-svg", + "status": "active", + "remote_url": "forgejo-remote:coulomb/timeline-svg.git", + "forge_commit": "9dfb14326455fccf2e3194ee194a11388cb1308b", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-25T12:20:19.613716Z", + "last_backing_synced_at": "2026-08-25T21:19:14.167105Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 949.3 + }, + { + "slug": "tmux-amq", + "status": "active", + "remote_url": "forgejo-remote:coulomb/tmux-amq.git", + "forge_commit": "04de219061c576ee77eb0d5f2178ad9f98fe9b12", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-26T06:11:56.268804Z", + "last_backing_synced_at": "2026-08-26T06:12:00.610971Z", + "projection_error": null, + "workplans": 18, + "tasks": 68, + "dependencies": 0, + "age_hours": 940.5 + }, + { + "slug": "user-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/user-engine.git", + "forge_commit": "a9360842f84fae89857c2b1a298efc64d079ee7b", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T23:09:25.936147Z", + "last_backing_synced_at": "2026-10-03T23:09:25.757270Z", + "projection_error": null, + "workplans": 38, + "tasks": 186, + "dependencies": 49, + "age_hours": 11.5 + }, + { + "slug": "vantage-point", + "status": "active", + "remote_url": "forgejo-remote:coulomb/vantage-point.git", + "forge_commit": "d760b74e6cb9dc94265fa94482136911bdfe6440", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-21T10:04:39.607843Z", + "last_backing_synced_at": "2026-09-29T21:11:37.552103Z", + "projection_error": null, + "workplans": 2, + "tasks": 4, + "dependencies": 0, + "age_hours": 109.5 + }, + { + "slug": "vergabe-teilnahme", + "status": "active", + "remote_url": "forgejo-remote:coulomb/vergabe-teilnahme.git", + "forge_commit": "906c114376354136536fdf4741c7b43b40408123", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-03T01:58:22.496856Z", + "last_backing_synced_at": "2026-10-03T01:58:22.576833Z", + "projection_error": null, + "workplans": 35, + "tasks": 167, + "dependencies": 6, + "age_hours": 32.7 + }, + { + "slug": "vergabe_teilnahme", + "status": "archived", + "remote_url": null, + "forge_commit": null, + "forge_error": null, + "hub_last_state_synced_at": "2026-05-16T04:10:39.112724Z", + "last_backing_synced_at": null, + "projection_error": null, + "workplans": 0, + "tasks": 0, + "dependencies": 0 + }, + { + "slug": "whitehat-security", + "status": "active", + "remote_url": "forgejo-remote:coulomb/whitehat-security.git", + "forge_commit": "4dc4151e3d7ecaed894bafe9f6c0ae14b6c80a1d", + "forge_error": null, + "hub_last_state_synced_at": "2026-10-04T10:10:44.737539Z", + "last_backing_synced_at": "2026-10-04T10:10:40.950024Z", + "projection_error": null, + "workplans": 12, + "tasks": 45, + "dependencies": 0, + "age_hours": 0.5 + }, + { + "slug": "whynot-control", + "status": "active", + "remote_url": "forgejo-remote:coulomb/whynot-control.git", + "forge_commit": "46fd95fde8821348d730fbf73ff1c7ff6ceccfc7", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-21T10:04:47.369557Z", + "last_backing_synced_at": "2026-09-29T21:11:41.436881Z", + "projection_error": null, + "workplans": 4, + "tasks": 8, + "dependencies": 0, + "age_hours": 109.5 + }, + { + "slug": "whynot-design", + "status": "active", + "remote_url": "forgejo-remote:coulomb/whynot-design.git", + "forge_commit": "a79a4d803e9aed13f66d072bf409b6f86000f01f", + "forge_error": null, + "hub_last_state_synced_at": "2026-08-29T12:49:08.147642Z", + "last_backing_synced_at": "2026-08-29T12:49:20.087755Z", + "projection_error": null, + "workplans": 7, + "tasks": 32, + "dependencies": 0, + "age_hours": 861.8 + }, + { + "slug": "zone-engine", + "status": "active", + "remote_url": "forgejo-remote:coulomb/zone-engine.git", + "forge_commit": "407fa86b97ea8f76f4af8967be33c7402bc56707", + "forge_error": null, + "hub_last_state_synced_at": "2026-09-30T16:57:55.169551Z", + "last_backing_synced_at": "2026-09-30T16:57:52.383263Z", + "projection_error": null, + "workplans": 3, + "tasks": 19, + "dependencies": 0, + "age_hours": 89.7 + } + ], + "gaps": [ + "State Hub does not persist per-repository projection receipts or the derived/expected source commit; `rmgr sync` returns the receipt to its caller only. last_backing_synced_at is the closest supported proxy for 'last successful receipt' and proves no commit equality with forge_commit.", + "Failed receipts are not persisted anywhere queryable (mutation meter has no sync/projection kinds; ops-runs summary depends on ACTIVITY_CORE_URL).", + "No supported scheduled C-rule runner exists; freshness is driven only by manual/agent-initiated syncs, so the window below is observed, not an SLA." + ] +} diff --git a/docs/evidence/2026-10-04-freshness-coverage.md b/docs/evidence/2026-10-04-freshness-coverage.md new file mode 100644 index 0000000..4242e66 --- /dev/null +++ b/docs/evidence/2026-10-04-freshness-coverage.md @@ -0,0 +1,60 @@ +# Freshness coverage measurement — 2026-10-04 + +For STATE-WP-0094-T05 (freshness-coverage half). Raw data: +`docs/evidence/2026-10-04-freshness-coverage.json`, produced read-only by +`uv run python -m repo_manager.freshness --out ` at 2026-10-04T10:40Z. + +Sources: State Hub REST (GET only) on the primary (`instance_role=primary`, +`railiance01`, schema `a0b1c2d3e4f5`); `git ls-remote` against Forge; +`kubectl get` (read-only); `statehub outbox status`. No workstation checkout +was read (ADR-002). There were no writes to the hub, cluster, Forge or any checkout. + +## Required fields and what the sources supply + +| T05 field | Result | Source / gap | +| --- | --- | --- | +| Exact runner revision | **No scheduled C-rule runner exists.** Engine source HEAD `a8184d5e14fb` (repo-manager, not deployed: no repo-manager Deployment in the cluster). Adapter image `state-hub:main-5dd3df9`; scheduler image `activity-core@sha256:75e240ac…` | kubectl, git | +| Active definition | **None active.** Only C-rule definition live in `activity-core/actcore-external-activity-definitions`: `state-hub-consistency-sweep.md` (id `7c4e9a12-…`, v1.1, `enabled: false`, `status: paused`, `*/15`), paused by RMGR-WP-0005-T11. It is also the legacy `--all --remote` sweep path, which ADR-002 excludes | kubectl | +| Per-repository source commit | 141/141 active repositories resolved a Forge HEAD | `git ls-remote` | +| Last successful receipt | **Gap.** The hub does not persist projection receipts or expected/derived commits; `rmgr sync` returns the receipt only to its caller. Proxy: newest `backing_synced_at` per repository snapshot. This proxy shows that a sync happened. It does not show that the projection equals Forge HEAD | hub snapshot | +| Failed / queued receipts | Queued: edge outbox 0 pending / 0 conflict. Failed: **gap.** No sync/projection kinds in the mutation meter (1305 entries). `/ops-runs/summary` is unavailable (`ACTIVITY_CORE_URL is not configured`) | statehub outbox, hub | +| Measured freshness window | See below. The window is observed, not an SLA, because no schedule drives it | hub snapshot | + +## Coverage numbers (active repositories = 141 of 146) + +- Projection sync timestamp present: 136; absent: 5 +- Synced within 24 h: 35 (25 %); within 7 d: 120 (85 %); within 30 d: 124 +- Age of last projection sync (hours): min 0.2, median 109.2, p90 292.1, max 949.4 (~39.5 d) +- Task dependency rows projected: 524. They were not reconciled by normal receiving; see the State Hub T05 note. + +## Explicit coverage holes + +Measured now: + +1. `access-engine`: snapshot request timed out, so its freshness is unknown. +2. `clay-borg`, `pr-hall-of-helix`, `python-snake`: 0 projected workplans and no sync stamp. +3. `repo-seed`: 2 workplans, no `backing_synced_at`. +4. Older than 7 days (16): `railiance-forge`, `ralph-workplan`, `rapp-issue-core`, + `rapp-sbom-nexus`, `repo-scoping`, `shard-wiki`, `target-revenue`, `tele-mcp`, + `testdrive-jsui`, `timeline-svg` (all ~949 h); `tmux-amq` (940 h); + `whynot-design` (862 h); `rapp-canned-prompts` (625 h); `rein-openweights`, + `resource-control` (292 h); `railiance-enablement` (243 h). +5. All 141: projected commit is unknown, so Forge HEAD equality cannot be proven for any repository. + +Historical registrar failures (kept as holes, not counted as covered): + +6. RMGR-WP-0005-T11: legacy sweep paused because railiance01 checkouts targeted + the stale `gitea-remote` lineage. Nothing since has proved coverage for the repositories that sweep touched. +7. RMGR-WP-0005 rail-kubernetes (2026-08-22): wrapper reported `failed` before + file writeback. It was fixed in `c90f701`, but there is no later scheduled receipt. +8. RMGR-WP-0019-T03 (wait): Activity receiving refused three empty duplicate + projections; disposition is pending under STATE-WP-0095-T04 (decision `91b7c633-…`). +9. RMGR-WP-0014/0015: unknown aliases, same-parent UUID collisions and active + unbound invalid records still refuse before writes. Any repository that hits these is unsynchronised by design. + +## Conclusion + +No supported freshness schedule exists. The T05 freshness requirement is not met. +Freshness depends on ad hoc syncs (25 % of repositories within 24 h), and +receipts are not durable. Proposal: RMGR-WP-0020 (bounded Activity Core → Repo +Manager runner). It is not enabled. diff --git a/src/repo_manager/freshness.py b/src/repo_manager/freshness.py new file mode 100644 index 0000000..d717a15 --- /dev/null +++ b/src/repo_manager/freshness.py @@ -0,0 +1,251 @@ +"""Read-only freshness-coverage measurement (STATE-WP-0094-T05 evidence). + +Gathers, from currently supported sources only: + +* State Hub REST (GET only): instance identity, ``/repos/``, per-repository + ``work-record-projection/snapshot`` (``backing_synced_at``). +* Forge (``git ls-remote``, read-only): per-repository source HEAD commit. +* Kubernetes (``kubectl get``, read-only): runner images and the live + Activity Core definition that would route C-rule runs to Repo Manager. +* Local State Hub edge outbox (``statehub outbox status``): queued receipts. + +It never writes to the hub, the cluster, Forge or any checkout, and it does not +read workstation checkouts (ADR-002). Fields that no supported source exposes are +reported under ``gaps`` instead of being inferred. + +Usage:: + + python -m repo_manager.freshness --out docs/evidence/-freshness-coverage.json +""" + +from __future__ import annotations + +import argparse +import json +import re +import statistics +import subprocess +import urllib.request +from concurrent.futures import ThreadPoolExecutor +from datetime import UTC, datetime +from pathlib import Path +from typing import Any + +DEFINITIONS_CONFIGMAP = ("activity-core", "actcore-external-activity-definitions") +C_RULE_QUERY = "consistency_sweep_remote_all" + + +def _get(api: str, path: str, timeout: float = 30) -> Any: + with urllib.request.urlopen(f"{api}{path}", timeout=timeout) as resp: + return json.loads(resp.read()) + + +def _run(cmd: list[str], timeout: float = 30) -> tuple[int, str]: + try: + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout, check=False) + except (OSError, subprocess.TimeoutExpired) as exc: + return 1, str(exc) + return proc.returncode, (proc.stdout if proc.returncode == 0 else proc.stderr).strip() + + +def _parse_ts(value: str | None) -> datetime | None: + if not value: + return None + return datetime.fromisoformat(value) + + +def forge_head(remote_url: str | None) -> dict[str, Any]: + if not remote_url: + return {"commit": None, "error": "no remote_url"} + code, out = _run(["git", "ls-remote", remote_url, "HEAD"], timeout=30) + if code != 0 or not out: + return {"commit": None, "error": (out or "empty ls-remote")[-200:]} + return {"commit": out.split()[0], "error": None} + + +def projection_sync(api: str, slug: str) -> dict[str, Any]: + try: + snap = _get(api, f"/repos/{slug}/work-record-projection/snapshot") + except Exception as exc: # noqa: BLE001 - evidence collector records any failure + return {"error": str(exc)[-200:]} + stamps = [w.get("backing_synced_at") for w in snap.get("workplans", [])] + stamps = [s for s in stamps if s] + return { + "error": None, + "workplans": len(snap.get("workplans", [])), + "tasks": len(snap.get("tasks", [])), + "dependencies": len(snap.get("dependencies", [])), + "last_backing_synced_at": max(stamps) if stamps else None, + } + + +def live_definitions() -> dict[str, Any]: + ns, name = DEFINITIONS_CONFIGMAP + code, out = _run(["kubectl", "-n", ns, "get", "configmap", name, "-o", "json"]) + if code != 0: + return {"error": out[-200:], "c_rule_definitions": []} + data = json.loads(out).get("data", {}) + found = [] + for key, body in sorted(data.items()): + if C_RULE_QUERY not in body and "repo-manager" not in body.lower(): + continue + field = { + f: (m.group(1).strip().strip('"') if m else None) + for f, m in ( + ("id", re.search(r"^\s*id:\s*(.+)$", body, re.MULTILINE)), + ("version", re.search(r"^\s*version:\s*(.+)$", body, re.MULTILINE)), + ("enabled", re.search(r"^\s*enabled:\s*(\S+)", body, re.MULTILINE)), + ("status", re.search(r"^\s*status:\s*(\S+)", body, re.MULTILINE)), + ("cron", re.search(r"cron_expression:\s*\"?([^\"\n]+)", body)), + ) + } + found.append({"key": key, **field}) + return {"error": None, "configmap": f"{ns}/{name}", "c_rule_definitions": found} + + +def runner_revisions(repo_root: Path) -> dict[str, Any]: + code, head = _run(["git", "-C", str(repo_root), "rev-parse", "HEAD"]) + images = {} + for ns, deploy in (("state-hub", "state-hub"), ("activity-core", "actcore-worker")): + c, img = _run( + [ + "kubectl", + "-n", + ns, + "get", + "deploy", + deploy, + "-o", + "jsonpath={.spec.template.spec.containers[0].image}", + ] + ) + images[f"{ns}/{deploy}"] = img if c == 0 else f"unavailable: {img[-120:]}" + c, rm = _run(["kubectl", "get", "deploy", "-A", "-o", "name"]) + rm_deployed = [d for d in rm.splitlines() if "repo-manager" in d] if c == 0 else None + return { + "repo_manager_source_head": head if code == 0 else None, + "repo_manager_cluster_deployments": rm_deployed, + "images": images, + } + + +def summarize(rows: list[dict[str, Any]], now: datetime) -> dict[str, Any]: + """Pure summary of per-repository rows (unit-tested).""" + active = [r for r in rows if r.get("status") == "active"] + ages = [] + for r in active: + ts = _parse_ts(r.get("last_backing_synced_at")) + r["age_hours"] = round((now - ts).total_seconds() / 3600, 1) if ts else None + if ts: + ages.append(r["age_hours"]) + ages.sort() + + def within(h: float) -> int: + return sum(1 for a in ages if a <= h) + + def pct(p: float) -> float | None: + if not ages: + return None + return ages[min(len(ages) - 1, round(p * (len(ages) - 1)))] + + return { + "repos_total": len(rows), + "repos_active": len(active), + "active_with_projection_sync": len(ages), + "active_never_synced_or_no_workplans": len(active) - len(ages), + "active_forge_head_resolved": sum(1 for r in active if r.get("forge_commit")), + "synced_within_24h": within(24), + "synced_within_7d": within(24 * 7), + "synced_within_30d": within(24 * 30), + "age_hours": { + "min": ages[0] if ages else None, + "median": statistics.median(ages) if ages else None, + "p90": pct(0.9), + "max": ages[-1] if ages else None, + }, + } + + +def measure(api: str, repo_root: Path, workers: int = 8) -> dict[str, Any]: + now = datetime.now(UTC) + health = _get(api, "/state/health") + repos = _get(api, "/repos/?limit=1000") + + def row(repo: dict[str, Any]) -> dict[str, Any]: + forge = forge_head(repo.get("remote_url")) if repo.get("status") == "active" else {} + proj = projection_sync(api, repo["slug"]) + return { + "slug": repo["slug"], + "status": repo.get("status"), + "remote_url": repo.get("remote_url"), + "forge_commit": forge.get("commit"), + "forge_error": forge.get("error"), + "hub_last_state_synced_at": repo.get("last_state_synced_at"), + "last_backing_synced_at": proj.get("last_backing_synced_at"), + "projection_error": proj.get("error"), + "workplans": proj.get("workplans"), + "tasks": proj.get("tasks"), + "dependencies": proj.get("dependencies"), + } + + with ThreadPoolExecutor(max_workers=workers) as pool: + rows = sorted(pool.map(row, repos), key=lambda r: r["slug"]) + + code, outbox = _run(["statehub", "outbox", "status"]) + try: + outbox_status = json.loads(outbox) if code == 0 else {"error": outbox[-200:]} + except json.JSONDecodeError: + outbox_status = {"error": outbox[-200:]} + try: + ops_runs = _get(api, "/ops-runs/summary") + except Exception as exc: # noqa: BLE001 + ops_runs = {"error": str(exc)[-200:]} + + return { + "schema": "repo-manager.freshness-coverage.v1", + "measured_at": now.isoformat().replace("+00:00", "Z"), + "hub": {k: health.get(k) for k in ("status", "instance_role", "instance_label")} + | {"api_base": api, "schema": health.get("schema")}, + "runner": runner_revisions(repo_root), + "active_definition": live_definitions(), + "receipts": { + "edge_outbox": outbox_status, + "ops_runs_summary": ops_runs, + }, + "summary": summarize(rows, now), + "repositories": rows, + "gaps": [ + ( + "State Hub does not persist per-repository projection receipts or the " + "derived/expected source commit; `rmgr sync` returns the receipt to its " + "caller only. last_backing_synced_at is the closest supported proxy for " + "'last successful receipt' and proves no commit equality with forge_commit." + ), + ( + "Failed receipts are not persisted anywhere queryable (mutation meter has " + "no sync/projection kinds; ops-runs summary depends on ACTIVITY_CORE_URL)." + ), + ( + "No supported scheduled C-rule runner exists; freshness is driven only by " + "manual/agent-initiated syncs, so the window below is observed, not an SLA." + ), + ], + } + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--api-base", default="http://127.0.0.1:8000") + parser.add_argument("--repo-root", default=str(Path(__file__).resolve().parents[2])) + parser.add_argument("--out", default=None) + args = parser.parse_args(argv) + result = measure(args.api_base.rstrip("/"), Path(args.repo_root)) + text = json.dumps(result, indent=2, sort_keys=False) + "\n" + if args.out: + Path(args.out).write_text(text) + print(json.dumps(result["summary"], indent=2)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/test_freshness.py b/tests/test_freshness.py new file mode 100644 index 0000000..505996b --- /dev/null +++ b/tests/test_freshness.py @@ -0,0 +1,24 @@ +from datetime import UTC, datetime + +from repo_manager.freshness import summarize + + +def test_summarize_counts_windows_and_holes(): + now = datetime(2026, 10, 4, 12, 0, tzinfo=UTC) + rows = [ + {"status": "active", "last_backing_synced_at": "2026-10-04T10:00:00Z", + "forge_commit": "a"}, + {"status": "active", "last_backing_synced_at": "2026-09-30T12:00:00Z", + "forge_commit": None}, + {"status": "active", "last_backing_synced_at": None, "forge_commit": "b"}, + {"status": "archived", "last_backing_synced_at": "2026-01-01T00:00:00Z"}, + ] + s = summarize(rows, now) + assert s["repos_total"] == 4 + assert s["repos_active"] == 3 + assert s["active_with_projection_sync"] == 2 + assert s["active_never_synced_or_no_workplans"] == 1 + assert s["active_forge_head_resolved"] == 2 + assert s["synced_within_24h"] == 1 + assert s["synced_within_7d"] == 2 + assert s["age_hours"]["max"] == 96.0