feat: canonicalize duplicate repo identities

This commit is contained in:
2026-05-24 14:08:40 +02:00
parent 5c9c2f281e
commit d9f1f3f71a
8 changed files with 309 additions and 241 deletions

View File

@@ -81,3 +81,10 @@ repo responsible for the whole external fabric relation model.
from active State Hub repo records whose local path exists on the current WSL from active State Hub repo records whose local path exists on the current WSL
host. It registers cross-domain local repos into the Fabric registry while only host. It registers cross-domain local repos into the Fabric registry while only
syncing graph snapshots for repos that already have Fabric declarations. syncing graph snapshots for repos that already have Fabric declarations.
When two active repo records point at the same checkout path, accountability
root discovery treats them as aliases of one repository identity. The canonical
identity can be declared with `canonical_slug`; otherwise discovery prefers the
slug matching the checkout directory name and then the entry with a remote URL.
Use `split_identity: true` only when shared paths are intentional and should
remain separate review candidates.

View File

@@ -794,22 +794,13 @@
"review_state": "candidate", "review_state": "candidate",
"subfabric_id": "" "subfabric_id": ""
}, },
{
"fabric_id": "fabric.railiance.primary",
"id": "identity:repository:railiance-hosts",
"kind": "Repository",
"label": "railiance-hosts",
"owner_actor_id": "actor.railiance.primary-lord",
"review_state": "needs_review",
"subfabric_id": ""
},
{ {
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"id": "identity:repository:railiance-infra", "id": "identity:repository:railiance-infra",
"kind": "Repository", "kind": "Repository",
"label": "railiance-infra", "label": "railiance-infra",
"owner_actor_id": "actor.railiance.primary-lord", "owner_actor_id": "actor.railiance.primary-lord",
"review_state": "needs_review", "review_state": "candidate",
"subfabric_id": "" "subfabric_id": ""
}, },
{ {
@@ -854,16 +845,7 @@
"kind": "Repository", "kind": "Repository",
"label": "vergabe-teilnahme", "label": "vergabe-teilnahme",
"owner_actor_id": "actor.railiance.primary-lord", "owner_actor_id": "actor.railiance.primary-lord",
"review_state": "needs_review", "review_state": "candidate",
"subfabric_id": ""
},
{
"fabric_id": "fabric.railiance.primary",
"id": "identity:repository:vergabe_teilnahme",
"kind": "Repository",
"label": "vergabe_teilnahme",
"owner_actor_id": "actor.railiance.primary-lord",
"review_state": "needs_review",
"subfabric_id": "" "subfabric_id": ""
}, },
{ {
@@ -878,11 +860,11 @@
] ]
}, },
"evidence_run": { "evidence_run": {
"generated_at": "2026-05-24T08:24:26Z", "generated_at": "2026-05-24T12:02:38Z",
"manifest_fingerprint": "dd279b655d68222a99671c1c875afdaa70ae2f907fd526e6673ddf756bc90dae", "manifest_fingerprint": "dd279b655d68222a99671c1c875afdaa70ae2f907fd526e6673ddf756bc90dae",
"manifest_id": "railiance.accountability-roots" "manifest_id": "railiance.accountability-roots"
}, },
"generated_at": "2026-05-24T08:24:56Z", "generated_at": "2026-05-24T12:03:24Z",
"identity_candidates": [ "identity_candidates": [
{ {
"aliases": [ "aliases": [
@@ -925,13 +907,13 @@
"attributes": { "attributes": {
"exists": true, "exists": true,
"path_type": "file", "path_type": "file",
"sha256": "c77fe4edf370a1f17cacecae25b3075af45d19714dc016046c27e69fe2a45f49", "sha256": "3177ab34c6e6c95d1b3a44cdd31a820a2b6e1097b6dfe0c6cf907a4debd98817",
"size_bytes": 5751, "size_bytes": 8827,
"source_evidence_type": "backup_recovery" "source_evidence_type": "backup_recovery"
}, },
"confidence": 0.65, "confidence": 0.65,
"evidence_ids": [ "evidence_ids": [
"evidence:root.backup-recovery.metadata:99d0713b16e64003" "evidence:root.backup-recovery.metadata:409952d6b266c8f5"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "docs/financial-fabric-operator-guide.md", "graph_id": "docs/financial-fabric-operator-guide.md",
@@ -969,13 +951,13 @@
"attributes": { "attributes": {
"exists": true, "exists": true,
"path_type": "file", "path_type": "file",
"sha256": "4699908886d6867115631e16f1deef8fed605cf8a6aa3648c4e8e32f5530d67f", "sha256": "b8dd44d083c05f3806148fe5fd78f4937d17fe2acc158268afc8104800236283",
"size_bytes": 8217, "size_bytes": 8291,
"source_evidence_type": "registry_manifest" "source_evidence_type": "registry_manifest"
}, },
"confidence": 0.6, "confidence": 0.6,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:42f1d77e4f940f08" "evidence:root.registry.local-repos:8823b8ff493ed5d3"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "registry_manifest", "graph_id": "registry_manifest",
@@ -2163,6 +2145,7 @@
"/home/worsch/activity-core" "/home/worsch/activity-core"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "activity-core",
"default_branch": "main", "default_branch": "main",
"domain": "custodian", "domain": "custodian",
"has_local_path": true, "has_local_path": true,
@@ -2173,7 +2156,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:8cee6f6ee4eb63a1" "evidence:root.registry.local-repos:22237205182108df"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "activity-core", "graph_id": "activity-core",
@@ -2190,6 +2173,7 @@
"gitea-remote:coulomb/artifact-store.git" "gitea-remote:coulomb/artifact-store.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "artifact-store",
"default_branch": "main", "default_branch": "main",
"domain": "stack", "domain": "stack",
"has_local_path": true, "has_local_path": true,
@@ -2200,7 +2184,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:8cd7cecfc6d233d5" "evidence:root.registry.local-repos:81956b1f27ab7ba7"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "artifact-store", "graph_id": "artifact-store",
@@ -2216,6 +2200,7 @@
"/home/worsch/domain-tree" "/home/worsch/domain-tree"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "domain-tree",
"default_branch": "main", "default_branch": "main",
"domain": "netkingdom", "domain": "netkingdom",
"has_local_path": true, "has_local_path": true,
@@ -2226,7 +2211,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:9bb313ace63f7355" "evidence:root.registry.local-repos:834b7cba9ec4a38b"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "domain-tree", "graph_id": "domain-tree",
@@ -2242,6 +2227,7 @@
"/home/worsch/flex-auth" "/home/worsch/flex-auth"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "flex-auth",
"default_branch": "main", "default_branch": "main",
"domain": "netkingdom", "domain": "netkingdom",
"has_local_path": true, "has_local_path": true,
@@ -2252,7 +2238,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:6f4d5102aa3d4f73" "evidence:root.registry.local-repos:4a54bd51cf87e3dc"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "flex-auth", "graph_id": "flex-auth",
@@ -2269,6 +2255,7 @@
"gitea-remote:coulomb/guide-board.git" "gitea-remote:coulomb/guide-board.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "guide-board",
"default_branch": "main", "default_branch": "main",
"domain": "markitect", "domain": "markitect",
"has_local_path": true, "has_local_path": true,
@@ -2279,7 +2266,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:e0181f99c192f303" "evidence:root.registry.local-repos:c15451d5df0dcff5"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "guide-board", "graph_id": "guide-board",
@@ -2296,6 +2283,7 @@
"gitea-remote:coulomb/helix-forge.git" "gitea-remote:coulomb/helix-forge.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "helix-forge",
"default_branch": "main", "default_branch": "main",
"domain": "helix_forge", "domain": "helix_forge",
"has_local_path": true, "has_local_path": true,
@@ -2306,7 +2294,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:4decf44c598b4a57" "evidence:root.registry.local-repos:80c9877733858532"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "helix-forge", "graph_id": "helix-forge",
@@ -2322,6 +2310,7 @@
"/home/worsch/ihp-railiance-probe" "/home/worsch/ihp-railiance-probe"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "ihp-railiance-probe",
"default_branch": "main", "default_branch": "main",
"domain": "stack", "domain": "stack",
"has_local_path": true, "has_local_path": true,
@@ -2332,7 +2321,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:bb23149605740e9a" "evidence:root.registry.local-repos:1eb8d1b6ad1614b6"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "ihp-railiance-probe", "graph_id": "ihp-railiance-probe",
@@ -2349,6 +2338,7 @@
"http://92.205.130.254:32166/coulomb/infospace-bench.git" "http://92.205.130.254:32166/coulomb/infospace-bench.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "infospace-bench",
"default_branch": "main", "default_branch": "main",
"domain": "markitect", "domain": "markitect",
"has_local_path": true, "has_local_path": true,
@@ -2359,7 +2349,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:27d6f12c7f495b31" "evidence:root.registry.local-repos:0080e417339c8125"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "infospace-bench", "graph_id": "infospace-bench",
@@ -2376,6 +2366,7 @@
"ssh://git@92.205.130.254:30022/coulomb/inter-hub.git" "ssh://git@92.205.130.254:30022/coulomb/inter-hub.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "inter-hub",
"default_branch": "main", "default_branch": "main",
"domain": "custodian", "domain": "custodian",
"has_local_path": true, "has_local_path": true,
@@ -2386,7 +2377,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:efeeaf25f0ab8aeb" "evidence:root.registry.local-repos:56bf796ca4cf9dc9"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "inter-hub", "graph_id": "inter-hub",
@@ -2402,6 +2393,7 @@
"/home/worsch/issue-core" "/home/worsch/issue-core"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "issue-core",
"default_branch": "main", "default_branch": "main",
"domain": "custodian", "domain": "custodian",
"has_local_path": true, "has_local_path": true,
@@ -2412,7 +2404,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:d09d1c836c4e36bf" "evidence:root.registry.local-repos:f75ad974f570b054"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "issue-core", "graph_id": "issue-core",
@@ -2428,6 +2420,7 @@
"/home/worsch/key-cape" "/home/worsch/key-cape"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "key-cape",
"default_branch": "main", "default_branch": "main",
"domain": "netkingdom", "domain": "netkingdom",
"has_local_path": true, "has_local_path": true,
@@ -2438,7 +2431,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:43caac3f3cfa4ad7" "evidence:root.registry.local-repos:325240be91c8f467"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "key-cape", "graph_id": "key-cape",
@@ -2455,6 +2448,7 @@
"http://92.205.130.254:32166/coulomb/kontextual-engine.git" "http://92.205.130.254:32166/coulomb/kontextual-engine.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "kontextual-engine",
"default_branch": "main", "default_branch": "main",
"domain": "markitect", "domain": "markitect",
"has_local_path": true, "has_local_path": true,
@@ -2465,7 +2459,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:ead9ecf1b49cf3cc" "evidence:root.registry.local-repos:bb569c6a5861ae35"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "kontextual-engine", "graph_id": "kontextual-engine",
@@ -2482,6 +2476,7 @@
"http://92.205.130.254:32166/coulomb/llm-connect.git" "http://92.205.130.254:32166/coulomb/llm-connect.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "llm-connect",
"default_branch": "main", "default_branch": "main",
"domain": "custodian", "domain": "custodian",
"has_local_path": true, "has_local_path": true,
@@ -2492,7 +2487,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:106e66cb38d653c2" "evidence:root.registry.local-repos:454b64bf8f305715"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "llm-connect", "graph_id": "llm-connect",
@@ -2508,6 +2503,7 @@
"/home/worsch/markitect-filter" "/home/worsch/markitect-filter"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "markitect-filter",
"default_branch": "main", "default_branch": "main",
"domain": "markitect", "domain": "markitect",
"has_local_path": true, "has_local_path": true,
@@ -2518,7 +2514,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:61b9d69ccca5dc40" "evidence:root.registry.local-repos:b5beebf1b581ab3d"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "markitect-filter", "graph_id": "markitect-filter",
@@ -2534,6 +2530,7 @@
"/home/worsch/markitect-main" "/home/worsch/markitect-main"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "markitect-project",
"default_branch": "main", "default_branch": "main",
"domain": "markitect", "domain": "markitect",
"has_local_path": true, "has_local_path": true,
@@ -2544,7 +2541,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:01ac8b9b2057660b" "evidence:root.registry.local-repos:a1c3588865f46885"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "markitect-project", "graph_id": "markitect-project",
@@ -2560,6 +2557,7 @@
"/home/worsch/markitect-quarkdown" "/home/worsch/markitect-quarkdown"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "markitect-quarkdown",
"default_branch": "main", "default_branch": "main",
"domain": "markitect", "domain": "markitect",
"has_local_path": true, "has_local_path": true,
@@ -2570,7 +2568,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:49b6aaf12dfa6b08" "evidence:root.registry.local-repos:984290ee72d834a6"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "markitect-quarkdown", "graph_id": "markitect-quarkdown",
@@ -2586,6 +2584,7 @@
"/home/worsch/markitect-tool" "/home/worsch/markitect-tool"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "markitect-tool",
"default_branch": "main", "default_branch": "main",
"domain": "markitect", "domain": "markitect",
"has_local_path": true, "has_local_path": true,
@@ -2596,7 +2595,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:de4f013ef9bb3778" "evidence:root.registry.local-repos:ca424cfd48266d16"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "markitect-tool", "graph_id": "markitect-tool",
@@ -2613,6 +2612,7 @@
"http://92.205.130.254:32166/coulomb/net-kingdom.git" "http://92.205.130.254:32166/coulomb/net-kingdom.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "net-kingdom",
"default_branch": "main", "default_branch": "main",
"domain": "netkingdom", "domain": "netkingdom",
"has_local_path": true, "has_local_path": true,
@@ -2623,7 +2623,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:909804aaf07ec7e6" "evidence:root.registry.local-repos:03758b81b89c7629"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "net-kingdom", "graph_id": "net-kingdom",
@@ -2640,6 +2640,7 @@
"gitea-remote:coulomb/open-cmis-tck.git" "gitea-remote:coulomb/open-cmis-tck.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "open-cmis-tck",
"default_branch": "main", "default_branch": "main",
"domain": "markitect", "domain": "markitect",
"has_local_path": true, "has_local_path": true,
@@ -2650,7 +2651,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:fdf5bfa0d976ccaf" "evidence:root.registry.local-repos:3bf7fb8f32253dd0"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "open-cmis-tck", "graph_id": "open-cmis-tck",
@@ -2666,6 +2667,7 @@
"/home/worsch/open-reuse" "/home/worsch/open-reuse"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "open-reuse",
"default_branch": "main", "default_branch": "main",
"domain": "stack", "domain": "stack",
"has_local_path": true, "has_local_path": true,
@@ -2676,7 +2678,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:79a1e537db736d46" "evidence:root.registry.local-repos:31b9f4afdb3530bf"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "open-reuse", "graph_id": "open-reuse",
@@ -2692,6 +2694,7 @@
"/home/worsch/ops-bridge" "/home/worsch/ops-bridge"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "ops-bridge",
"default_branch": "main", "default_branch": "main",
"domain": "custodian", "domain": "custodian",
"has_local_path": true, "has_local_path": true,
@@ -2702,7 +2705,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:20c8f1ccfa973270" "evidence:root.registry.local-repos:e470d6f2649b79b0"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "ops-bridge", "graph_id": "ops-bridge",
@@ -2719,6 +2722,7 @@
"gitea-remote:coulomb/ops-warden.git" "gitea-remote:coulomb/ops-warden.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "ops-warden",
"default_branch": "main", "default_branch": "main",
"domain": "custodian", "domain": "custodian",
"has_local_path": true, "has_local_path": true,
@@ -2729,7 +2733,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:b26cfafde568e482" "evidence:root.registry.local-repos:35e344dd95996ddc"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "ops-warden", "graph_id": "ops-warden",
@@ -2745,6 +2749,7 @@
"/home/worsch/phase-memory" "/home/worsch/phase-memory"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "phase-memory",
"default_branch": "main", "default_branch": "main",
"domain": "markitect", "domain": "markitect",
"has_local_path": true, "has_local_path": true,
@@ -2755,7 +2760,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:f630bbd62ffec78b" "evidence:root.registry.local-repos:ea9d5a0e78e8e4a6"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "phase-memory", "graph_id": "phase-memory",
@@ -2772,6 +2777,7 @@
"http://92.205.130.254:32166/coulomb/railiance-apps.git" "http://92.205.130.254:32166/coulomb/railiance-apps.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "railiance-apps",
"default_branch": "main", "default_branch": "main",
"domain": "railiance", "domain": "railiance",
"has_local_path": true, "has_local_path": true,
@@ -2782,7 +2788,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:40beb96ec0c2498c" "evidence:root.registry.local-repos:36c141e579a5ce37"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "railiance-apps", "graph_id": "railiance-apps",
@@ -2799,6 +2805,7 @@
"http://92.205.130.254:32166/coulomb/railiance-cluster.git" "http://92.205.130.254:32166/coulomb/railiance-cluster.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "railiance-cluster",
"default_branch": "main", "default_branch": "main",
"domain": "railiance", "domain": "railiance",
"has_local_path": true, "has_local_path": true,
@@ -2809,7 +2816,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:981e44cb11973e44" "evidence:root.registry.local-repos:5f18d3c61d94023c"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "railiance-cluster", "graph_id": "railiance-cluster",
@@ -2826,6 +2833,7 @@
"http://92.205.130.254:32166/coulomb/railiance-enablement.git" "http://92.205.130.254:32166/coulomb/railiance-enablement.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "railiance-enablement",
"default_branch": "main", "default_branch": "main",
"domain": "railiance", "domain": "railiance",
"has_local_path": true, "has_local_path": true,
@@ -2836,7 +2844,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:eacbd7a28e121081" "evidence:root.registry.local-repos:754c6a30f9ff3671"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "railiance-enablement", "graph_id": "railiance-enablement",
@@ -2854,13 +2862,14 @@
], ],
"attributes": { "attributes": {
"branch": "main", "branch": "main",
"declared_repo_slug": "railiance-fabric",
"default_branch": "main", "default_branch": "main",
"domain": "railiance", "domain": "railiance",
"has_fabric_dir": true, "has_fabric_dir": true,
"has_git_dir": true, "has_git_dir": true,
"has_local_path": true, "has_local_path": true,
"has_remote_url": false, "has_remote_url": false,
"head": "355b7be66aad8a766716395585c937e3be5ce2b0", "head": "ea2fa1203b856269855ea92fa3fa477d8bef27a3",
"name": "railiance-fabric", "name": "railiance-fabric",
"path_exists": true, "path_exists": true,
"remote_origin": "gitea-remote:coulomb/railiance-fabric.git", "remote_origin": "gitea-remote:coulomb/railiance-fabric.git",
@@ -2870,8 +2879,8 @@
}, },
"confidence": 0.9, "confidence": 0.9,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:f09103b02c4ae9fc", "evidence:root.registry.local-repos:deace4d5a96fc0d6",
"evidence:root.railiance-fabric.checkout:964745ce3b6dd491" "evidence:root.railiance-fabric.checkout:c9cb1d35bb99f2e0"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "railiance-fabric", "graph_id": "railiance-fabric",
@@ -2881,63 +2890,36 @@
"review_state": "candidate", "review_state": "candidate",
"stable_key": "identity:repository:railiance-fabric" "stable_key": "identity:repository:railiance-fabric"
}, },
{
"aliases": [
"railiance-hosts",
"/home/worsch/railiance-infra"
],
"attributes": {
"ambiguous_aliases": [
"home-worsch-railiance-infra"
],
"default_branch": "main",
"domain": "railiance",
"has_local_path": true,
"has_remote_url": false,
"name": "railiance-hosts",
"source_evidence_type": "registered_repository",
"state_hub_repo_id": "2db668cf-6c52-4965-951f-0d5e617de9e3"
},
"confidence": 0.85,
"evidence_ids": [
"evidence:root.registry.local-repos:f54177132294798c"
],
"fabric_id": "fabric.railiance.primary",
"graph_id": "railiance-hosts",
"identity_type": "Repository",
"label": "railiance-hosts",
"owner_actor_id": "actor.railiance.primary-lord",
"review_state": "needs_review",
"stable_key": "identity:repository:railiance-hosts"
},
{ {
"aliases": [ "aliases": [
"railiance-infra", "railiance-infra",
"railiance-hosts",
"/home/worsch/railiance-infra", "/home/worsch/railiance-infra",
"http://92.205.130.254:32166/coulomb/railiance-infra.git" "http://92.205.130.254:32166/coulomb/railiance-infra.git"
], ],
"attributes": { "attributes": {
"ambiguous_aliases": [ "canonical_slug": "railiance-infra",
"home-worsch-railiance-infra" "declared_repo_slug": "railiance-infra",
],
"default_branch": "main", "default_branch": "main",
"domain": "railiance", "domain": "railiance",
"has_local_path": true, "has_local_path": true,
"has_remote_url": true, "has_remote_url": true,
"identity_resolution": "duplicate_path_alias",
"name": "railiance-infra", "name": "railiance-infra",
"source_evidence_type": "registered_repository", "source_evidence_type": "registered_repository",
"state_hub_repo_id": "485187c0-4fad-42f7-984c-5e317a66c5de" "state_hub_repo_id": "485187c0-4fad-42f7-984c-5e317a66c5de"
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:c960c3a821576795" "evidence:root.registry.local-repos:fbff10063021cf4b",
"evidence:root.registry.local-repos:495887a2047c9f53"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "railiance-infra", "graph_id": "railiance-infra",
"identity_type": "Repository", "identity_type": "Repository",
"label": "railiance-infra", "label": "railiance-infra",
"owner_actor_id": "actor.railiance.primary-lord", "owner_actor_id": "actor.railiance.primary-lord",
"review_state": "needs_review", "review_state": "candidate",
"stable_key": "identity:repository:railiance-infra" "stable_key": "identity:repository:railiance-infra"
}, },
{ {
@@ -2947,6 +2929,7 @@
"http://92.205.130.254:32166/coulomb/railiance-platform.git" "http://92.205.130.254:32166/coulomb/railiance-platform.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "railiance-platform",
"default_branch": "main", "default_branch": "main",
"domain": "railiance", "domain": "railiance",
"has_local_path": true, "has_local_path": true,
@@ -2957,7 +2940,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:a12e96e6d9418b3d" "evidence:root.registry.local-repos:d8765e0f7c1e10f8"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "railiance-platform", "graph_id": "railiance-platform",
@@ -2974,6 +2957,7 @@
"gitea-remote:coulomb/repo-scoping.git" "gitea-remote:coulomb/repo-scoping.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "repo-scoping",
"default_branch": "main", "default_branch": "main",
"domain": "capabilities", "domain": "capabilities",
"has_local_path": true, "has_local_path": true,
@@ -2984,7 +2968,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:6addadec236dd62f" "evidence:root.registry.local-repos:c12e989814b1c70c"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "repo-scoping", "graph_id": "repo-scoping",
@@ -3001,6 +2985,7 @@
"gitea-remote:coulomb/state-hub.git" "gitea-remote:coulomb/state-hub.git"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "state-hub",
"default_branch": "main", "default_branch": "main",
"domain": "custodian", "domain": "custodian",
"has_local_path": true, "has_local_path": true,
@@ -3011,7 +2996,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:720808c98666e541" "evidence:root.registry.local-repos:89431ff6a8ef2996"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "state-hub", "graph_id": "state-hub",
@@ -3028,6 +3013,7 @@
"http://gitea.local/worsch/the-custodian" "http://gitea.local/worsch/the-custodian"
], ],
"attributes": { "attributes": {
"declared_repo_slug": "the-custodian",
"default_branch": "main", "default_branch": "main",
"domain": "custodian", "domain": "custodian",
"has_local_path": true, "has_local_path": true,
@@ -3038,7 +3024,7 @@
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:100a6d70bb2f298a" "evidence:root.registry.local-repos:8feba7a45d2d751d"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "the-custodian", "graph_id": "the-custodian",
@@ -3052,60 +3038,33 @@
"aliases": [ "aliases": [
"vergabe-teilnahme", "vergabe-teilnahme",
"/home/worsch/vergabe-teilnahme", "/home/worsch/vergabe-teilnahme",
"gitea-remote:coulomb/vergabe-teilnahme.git" "gitea-remote:coulomb/vergabe-teilnahme.git",
"vergabe_teilnahme"
], ],
"attributes": { "attributes": {
"ambiguous_aliases": [ "canonical_slug": "vergabe-teilnahme",
"home-worsch-vergabe-teilnahme" "declared_repo_slug": "vergabe_teilnahme",
],
"default_branch": "main",
"domain": "coulomb_social",
"has_local_path": true,
"has_remote_url": true,
"name": "vergabe-teilnahme",
"source_evidence_type": "registered_repository",
"state_hub_repo_id": "ff7b0754-9d54-4abf-a752-d342870f5993"
},
"confidence": 0.85,
"evidence_ids": [
"evidence:root.registry.local-repos:e3fae7fb0c8a6867"
],
"fabric_id": "fabric.railiance.primary",
"graph_id": "vergabe-teilnahme",
"identity_type": "Repository",
"label": "vergabe-teilnahme",
"owner_actor_id": "actor.railiance.primary-lord",
"review_state": "needs_review",
"stable_key": "identity:repository:vergabe-teilnahme"
},
{
"aliases": [
"vergabe_teilnahme",
"/home/worsch/vergabe-teilnahme"
],
"attributes": {
"ambiguous_aliases": [
"home-worsch-vergabe-teilnahme"
],
"default_branch": "main", "default_branch": "main",
"domain": "vergabe_teilnahme", "domain": "vergabe_teilnahme",
"has_local_path": true, "has_local_path": true,
"has_remote_url": false, "has_remote_url": false,
"identity_resolution": "duplicate_path_alias",
"name": "vergabe-teilnahme", "name": "vergabe-teilnahme",
"source_evidence_type": "registered_repository", "source_evidence_type": "registered_repository",
"state_hub_repo_id": "46d9338e-d079-4953-b174-0ea64761be5c" "state_hub_repo_id": "46d9338e-d079-4953-b174-0ea64761be5c"
}, },
"confidence": 0.85, "confidence": 0.85,
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:0703300ec1742fe1" "evidence:root.registry.local-repos:a0331bbcdaf39a23",
"evidence:root.registry.local-repos:ff7fa8110f6c7097"
], ],
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"graph_id": "vergabe_teilnahme", "graph_id": "vergabe-teilnahme",
"identity_type": "Repository", "identity_type": "Repository",
"label": "vergabe_teilnahme", "label": "vergabe-teilnahme",
"owner_actor_id": "actor.railiance.primary-lord", "owner_actor_id": "actor.railiance.primary-lord",
"review_state": "needs_review", "review_state": "candidate",
"stable_key": "identity:repository:vergabe_teilnahme" "stable_key": "identity:repository:vergabe-teilnahme"
}, },
{ {
"aliases": [ "aliases": [

View File

@@ -1,11 +1,11 @@
{ {
"apiVersion": "railiance.fabric/v1alpha2", "apiVersion": "railiance.fabric/v1alpha2",
"evidence_run": { "evidence_run": {
"generated_at": "2026-05-24T08:25:15Z", "generated_at": "2026-05-24T12:03:30Z",
"manifest_fingerprint": "dd279b655d68222a99671c1c875afdaa70ae2f907fd526e6673ddf756bc90dae", "manifest_fingerprint": "dd279b655d68222a99671c1c875afdaa70ae2f907fd526e6673ddf756bc90dae",
"manifest_id": "railiance.accountability-roots" "manifest_id": "railiance.accountability-roots"
}, },
"generated_at": "2026-05-24T08:25:48Z", "generated_at": "2026-05-24T12:04:18Z",
"items": [ "items": [
{ {
"blockers": [], "blockers": [],
@@ -51,7 +51,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.backup-recovery.metadata:99d0713b16e64003" "evidence:root.backup-recovery.metadata:409952d6b266c8f5"
], ],
"identity_type": "BackupRecoveryRoot", "identity_type": "BackupRecoveryRoot",
"label": "financial-fabric-operator-guide.md", "label": "financial-fabric-operator-guide.md",
@@ -91,7 +91,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:42f1d77e4f940f08" "evidence:root.registry.local-repos:8823b8ff493ed5d3"
], ],
"identity_type": "CatalogRoot", "identity_type": "CatalogRoot",
"label": "None", "label": "None",
@@ -1207,7 +1207,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:8cee6f6ee4eb63a1" "evidence:root.registry.local-repos:22237205182108df"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "activity-core", "label": "activity-core",
@@ -1227,7 +1227,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:8cd7cecfc6d233d5" "evidence:root.registry.local-repos:81956b1f27ab7ba7"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "artifact-store", "label": "artifact-store",
@@ -1247,7 +1247,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:9bb313ace63f7355" "evidence:root.registry.local-repos:834b7cba9ec4a38b"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "domain-tree", "label": "domain-tree",
@@ -1267,7 +1267,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:6f4d5102aa3d4f73" "evidence:root.registry.local-repos:4a54bd51cf87e3dc"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "flex-auth", "label": "flex-auth",
@@ -1287,7 +1287,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:e0181f99c192f303" "evidence:root.registry.local-repos:c15451d5df0dcff5"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "guide-board", "label": "guide-board",
@@ -1307,7 +1307,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:4decf44c598b4a57" "evidence:root.registry.local-repos:80c9877733858532"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "helix-forge", "label": "helix-forge",
@@ -1327,7 +1327,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:bb23149605740e9a" "evidence:root.registry.local-repos:1eb8d1b6ad1614b6"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "ihp-railiance-probe", "label": "ihp-railiance-probe",
@@ -1347,7 +1347,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:27d6f12c7f495b31" "evidence:root.registry.local-repos:0080e417339c8125"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "infospace-bench", "label": "infospace-bench",
@@ -1367,7 +1367,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:efeeaf25f0ab8aeb" "evidence:root.registry.local-repos:56bf796ca4cf9dc9"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "inter-hub", "label": "inter-hub",
@@ -1387,7 +1387,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:d09d1c836c4e36bf" "evidence:root.registry.local-repos:f75ad974f570b054"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "issue-core", "label": "issue-core",
@@ -1407,7 +1407,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:43caac3f3cfa4ad7" "evidence:root.registry.local-repos:325240be91c8f467"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "key-cape", "label": "key-cape",
@@ -1427,7 +1427,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:ead9ecf1b49cf3cc" "evidence:root.registry.local-repos:bb569c6a5861ae35"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "kontextual-engine", "label": "kontextual-engine",
@@ -1447,7 +1447,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:106e66cb38d653c2" "evidence:root.registry.local-repos:454b64bf8f305715"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "llm-connect", "label": "llm-connect",
@@ -1467,7 +1467,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:61b9d69ccca5dc40" "evidence:root.registry.local-repos:b5beebf1b581ab3d"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "markitect-filter", "label": "markitect-filter",
@@ -1487,7 +1487,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:01ac8b9b2057660b" "evidence:root.registry.local-repos:a1c3588865f46885"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "markitect-project", "label": "markitect-project",
@@ -1507,7 +1507,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:49b6aaf12dfa6b08" "evidence:root.registry.local-repos:984290ee72d834a6"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "markitect-quarkdown", "label": "markitect-quarkdown",
@@ -1527,7 +1527,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:de4f013ef9bb3778" "evidence:root.registry.local-repos:ca424cfd48266d16"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "markitect-tool", "label": "markitect-tool",
@@ -1547,7 +1547,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:909804aaf07ec7e6" "evidence:root.registry.local-repos:03758b81b89c7629"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "net-kingdom", "label": "net-kingdom",
@@ -1567,7 +1567,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:fdf5bfa0d976ccaf" "evidence:root.registry.local-repos:3bf7fb8f32253dd0"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "open-cmis-tck", "label": "open-cmis-tck",
@@ -1587,7 +1587,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:79a1e537db736d46" "evidence:root.registry.local-repos:31b9f4afdb3530bf"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "open-reuse", "label": "open-reuse",
@@ -1607,7 +1607,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:20c8f1ccfa973270" "evidence:root.registry.local-repos:e470d6f2649b79b0"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "ops-bridge", "label": "ops-bridge",
@@ -1627,7 +1627,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:b26cfafde568e482" "evidence:root.registry.local-repos:35e344dd95996ddc"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "ops-warden", "label": "ops-warden",
@@ -1647,7 +1647,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:f630bbd62ffec78b" "evidence:root.registry.local-repos:ea9d5a0e78e8e4a6"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "phase-memory", "label": "phase-memory",
@@ -1667,7 +1667,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:40beb96ec0c2498c" "evidence:root.registry.local-repos:36c141e579a5ce37"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "railiance-apps", "label": "railiance-apps",
@@ -1687,7 +1687,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:981e44cb11973e44" "evidence:root.registry.local-repos:5f18d3c61d94023c"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "railiance-cluster", "label": "railiance-cluster",
@@ -1707,7 +1707,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:eacbd7a28e121081" "evidence:root.registry.local-repos:754c6a30f9ff3671"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "railiance-enablement", "label": "railiance-enablement",
@@ -1727,8 +1727,8 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:f09103b02c4ae9fc", "evidence:root.registry.local-repos:deace4d5a96fc0d6",
"evidence:root.railiance-fabric.checkout:964745ce3b6dd491" "evidence:root.railiance-fabric.checkout:c9cb1d35bb99f2e0"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "railiance-fabric", "label": "railiance-fabric",
@@ -1741,38 +1741,15 @@
"stable_key": "identity:repository:railiance-fabric" "stable_key": "identity:repository:railiance-fabric"
}, },
{ {
"blockers": [ "blockers": [],
"ambiguous_identity"
],
"containment": { "containment": {
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"status": "resolved", "status": "resolved",
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:f54177132294798c" "evidence:root.registry.local-repos:fbff10063021cf4b",
], "evidence:root.registry.local-repos:495887a2047c9f53"
"identity_type": "Repository",
"label": "railiance-hosts",
"ownership": {
"owner_actor_id": "actor.railiance.primary-lord",
"owner_role": "lord",
"resolution": "explicit"
},
"review_state": "needs_review",
"stable_key": "identity:repository:railiance-hosts"
},
{
"blockers": [
"ambiguous_identity"
],
"containment": {
"fabric_id": "fabric.railiance.primary",
"status": "resolved",
"subfabric_id": ""
},
"evidence_ids": [
"evidence:root.registry.local-repos:c960c3a821576795"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "railiance-infra", "label": "railiance-infra",
@@ -1781,7 +1758,7 @@
"owner_role": "lord", "owner_role": "lord",
"resolution": "explicit" "resolution": "explicit"
}, },
"review_state": "needs_review", "review_state": "candidate",
"stable_key": "identity:repository:railiance-infra" "stable_key": "identity:repository:railiance-infra"
}, },
{ {
@@ -1792,7 +1769,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:a12e96e6d9418b3d" "evidence:root.registry.local-repos:d8765e0f7c1e10f8"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "railiance-platform", "label": "railiance-platform",
@@ -1812,7 +1789,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:6addadec236dd62f" "evidence:root.registry.local-repos:c12e989814b1c70c"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "repo-scoping", "label": "repo-scoping",
@@ -1832,7 +1809,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:720808c98666e541" "evidence:root.registry.local-repos:89431ff6a8ef2996"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "state-hub", "label": "state-hub",
@@ -1852,7 +1829,7 @@
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:100a6d70bb2f298a" "evidence:root.registry.local-repos:8feba7a45d2d751d"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "the-custodian", "label": "the-custodian",
@@ -1865,16 +1842,15 @@
"stable_key": "identity:repository:the-custodian" "stable_key": "identity:repository:the-custodian"
}, },
{ {
"blockers": [ "blockers": [],
"ambiguous_identity"
],
"containment": { "containment": {
"fabric_id": "fabric.railiance.primary", "fabric_id": "fabric.railiance.primary",
"status": "resolved", "status": "resolved",
"subfabric_id": "" "subfabric_id": ""
}, },
"evidence_ids": [ "evidence_ids": [
"evidence:root.registry.local-repos:e3fae7fb0c8a6867" "evidence:root.registry.local-repos:a0331bbcdaf39a23",
"evidence:root.registry.local-repos:ff7fa8110f6c7097"
], ],
"identity_type": "Repository", "identity_type": "Repository",
"label": "vergabe-teilnahme", "label": "vergabe-teilnahme",
@@ -1883,31 +1859,9 @@
"owner_role": "lord", "owner_role": "lord",
"resolution": "explicit" "resolution": "explicit"
}, },
"review_state": "needs_review", "review_state": "candidate",
"stable_key": "identity:repository:vergabe-teilnahme" "stable_key": "identity:repository:vergabe-teilnahme"
}, },
{
"blockers": [
"ambiguous_identity"
],
"containment": {
"fabric_id": "fabric.railiance.primary",
"status": "resolved",
"subfabric_id": ""
},
"evidence_ids": [
"evidence:root.registry.local-repos:0703300ec1742fe1"
],
"identity_type": "Repository",
"label": "vergabe_teilnahme",
"ownership": {
"owner_actor_id": "actor.railiance.primary-lord",
"owner_role": "lord",
"resolution": "explicit"
},
"review_state": "needs_review",
"stable_key": "identity:repository:vergabe_teilnahme"
},
{ {
"blockers": [], "blockers": [],
"containment": { "containment": {
@@ -1933,8 +1887,8 @@
"summary": { "summary": {
"accepted": 0, "accepted": 0,
"ambiguous_containment": 0, "ambiguous_containment": 0,
"needs_review": 4, "needs_review": 0,
"total": 96, "total": 94,
"unresolved_ownership": 0 "unresolved_ownership": 0
} }
} }

View File

@@ -7,7 +7,7 @@
"review_state": [] "review_state": []
}, },
"current": { "current": {
"generated_at": "2026-05-24T08:26:01Z", "generated_at": "2026-05-24T12:04:20Z",
"manifest_fingerprint": "dd279b655d68222a99671c1c875afdaa70ae2f907fd526e6673ddf756bc90dae", "manifest_fingerprint": "dd279b655d68222a99671c1c875afdaa70ae2f907fd526e6673ddf756bc90dae",
"manifest_id": "railiance.accountability-roots" "manifest_id": "railiance.accountability-roots"
}, },
@@ -19,7 +19,7 @@
"removed": [], "removed": [],
"unchanged": [] "unchanged": []
}, },
"generated_at": "2026-05-24T08:26:31Z", "generated_at": "2026-05-24T12:04:59Z",
"kind": "AccountabilityUpdateDelta", "kind": "AccountabilityUpdateDelta",
"node_delta": { "node_delta": {
"added": [ "added": [
@@ -110,14 +110,12 @@
"identity:repository:railiance-cluster", "identity:repository:railiance-cluster",
"identity:repository:railiance-enablement", "identity:repository:railiance-enablement",
"identity:repository:railiance-fabric", "identity:repository:railiance-fabric",
"identity:repository:railiance-hosts",
"identity:repository:railiance-infra", "identity:repository:railiance-infra",
"identity:repository:railiance-platform", "identity:repository:railiance-platform",
"identity:repository:repo-scoping", "identity:repository:repo-scoping",
"identity:repository:state-hub", "identity:repository:state-hub",
"identity:repository:the-custodian", "identity:repository:the-custodian",
"identity:repository:vergabe-teilnahme", "identity:repository:vergabe-teilnahme",
"identity:repository:vergabe_teilnahme",
"identity:secret-root:fabric-services-railiance-platform-openbao.yaml" "identity:secret-root:fabric-services-railiance-platform-openbao.yaml"
], ],
"changed": [], "changed": [],
@@ -130,8 +128,8 @@
"edges_changed": 0, "edges_changed": 0,
"edges_removed": 0, "edges_removed": 0,
"edges_unchanged": 0, "edges_unchanged": 0,
"meaningful_change_count": 97, "meaningful_change_count": 95,
"nodes_added": 96, "nodes_added": 94,
"nodes_changed": 0, "nodes_changed": 0,
"nodes_removed": 0, "nodes_removed": 0,
"nodes_unchanged": 0, "nodes_unchanged": 0,

View File

@@ -611,17 +611,28 @@ def _identity_from_evidence(root: dict[str, Any], item: dict[str, Any]) -> dict[
owner_actor_id = str(root.get("owner_actor_id") or "") owner_actor_id = str(root.get("owner_actor_id") or "")
if evidence_type in {"registered_repository", "repository_checkout"}: if evidence_type in {"registered_repository", "repository_checkout"}:
label = str(source.get("repo_slug") or attributes.get("repo_slug") or Path(str(source.get("path") or "")).name) declared_slug = str(source.get("repo_slug") or attributes.get("repo_slug") or "")
identity_slug = str(
source.get("identity_slug")
or attributes.get("canonical_slug")
or attributes.get("canonical_repo_slug")
or declared_slug
or Path(str(source.get("path") or "")).name
)
return { return {
"identity_type": "Repository", "identity_type": "Repository",
"label": label, "label": identity_slug,
"graph_id": label, "graph_id": identity_slug,
"fabric_id": fabric_id, "fabric_id": fabric_id,
"subfabric_id": subfabric_id, "subfabric_id": subfabric_id,
"owner_actor_id": owner_actor_id, "owner_actor_id": owner_actor_id,
"evidence_ids": evidence_ids, "evidence_ids": evidence_ids,
"aliases": [label, str(source.get("path") or ""), str(source.get("remote_url") or "")], "aliases": [identity_slug, declared_slug, str(source.get("path") or ""), str(source.get("remote_url") or "")],
"attributes": {**attributes, "source_evidence_type": evidence_type}, "attributes": {
**attributes,
"declared_repo_slug": declared_slug,
"source_evidence_type": evidence_type,
},
"confidence": 0.9 if evidence_type == "repository_checkout" else 0.85, "confidence": 0.9 if evidence_type == "repository_checkout" else 0.85,
} }
if evidence_type in {"deployment_automation", "infrastructure_manifest"}: if evidence_type in {"deployment_automation", "infrastructure_manifest"}:
@@ -1029,13 +1040,17 @@ def _registry_manifest_evidence(root: dict[str, Any], *, max_items: int) -> list
evidence: list[dict[str, Any]] = [ evidence: list[dict[str, Any]] = [
_file_evidence(root, manifest_path, "registry_manifest", summary=f"Registry manifest with {len(repositories)} repositories.") _file_evidence(root, manifest_path, "registry_manifest", summary=f"Registry manifest with {len(repositories)} repositories.")
] ]
canonical_slug_by_index = _registry_canonical_slugs_by_index(repositories)
for index, repo in enumerate(repositories[:max_items]): for index, repo in enumerate(repositories[:max_items]):
if not isinstance(repo, dict): if not isinstance(repo, dict):
continue continue
repo_slug = str(repo.get("slug") or "")
identity_slug = canonical_slug_by_index.get(index) or _repository_identity_slug(repo) or repo_slug
repo_source = { repo_source = {
"manifest_path": _display_path(manifest_path), "manifest_path": _display_path(manifest_path),
"json_pointer": f"/repositories/{index}", "json_pointer": f"/repositories/{index}",
"repo_slug": repo.get("slug", ""), "repo_slug": repo_slug,
"identity_slug": identity_slug,
"path": repo.get("path", ""), "path": repo.get("path", ""),
"remote_url": repo.get("remote_url", ""), "remote_url": repo.get("remote_url", ""),
} }
@@ -1046,6 +1061,8 @@ def _registry_manifest_evidence(root: dict[str, Any], *, max_items: int) -> list
"state_hub_repo_id": repo.get("state_hub_repo_id", ""), "state_hub_repo_id": repo.get("state_hub_repo_id", ""),
"has_local_path": bool(repo.get("path")), "has_local_path": bool(repo.get("path")),
"has_remote_url": bool(repo.get("remote_url")), "has_remote_url": bool(repo.get("remote_url")),
"canonical_slug": identity_slug if identity_slug != repo_slug else "",
"identity_resolution": "duplicate_path_alias" if identity_slug != repo_slug else "",
} }
evidence.append( evidence.append(
_evidence_item( _evidence_item(
@@ -1062,6 +1079,69 @@ def _registry_manifest_evidence(root: dict[str, Any], *, max_items: int) -> list
return evidence return evidence
def _registry_canonical_slugs_by_index(repositories: list[object]) -> dict[int, str]:
explicit: dict[int, str] = {}
path_groups: dict[str, list[tuple[int, dict[str, Any]]]] = {}
for index, repo in enumerate(repositories):
if not isinstance(repo, dict):
continue
explicit_slug = _repository_identity_slug(repo)
if explicit_slug:
explicit[index] = explicit_slug
if _boolish(repo.get("split_identity")):
continue
path = str(repo.get("path") or "").strip()
slug = str(repo.get("slug") or "").strip()
if path and slug:
path_groups.setdefault(path, []).append((index, repo))
canonical_by_index = dict(explicit)
for path, group in path_groups.items():
if len(group) < 2:
continue
explicit_group_slugs = [
explicit_slug
for index, _repo in group
if (explicit_slug := explicit.get(index))
]
canonical_slug = explicit_group_slugs[0] if explicit_group_slugs else _select_canonical_repo_slug(path, group)
for index, _repo in group:
canonical_by_index.setdefault(index, canonical_slug)
return canonical_by_index
def _repository_identity_slug(repo: dict[str, Any]) -> str:
return str(
repo.get("canonical_slug")
or repo.get("canonical_repo_slug")
or repo.get("identity_slug")
or repo.get("identity_repo_slug")
or ""
).strip()
def _select_canonical_repo_slug(path: str, group: list[tuple[int, dict[str, Any]]]) -> str:
path_name = normalize_identity_part(Path(path).name)
def sort_key(item: tuple[int, dict[str, Any]]) -> tuple[int, int, str]:
_index, repo = item
slug = str(repo.get("slug") or "")
return (
0 if normalize_identity_part(slug) == path_name else 1,
0 if repo.get("remote_url") else 1,
normalize_identity_part(slug),
)
_index, canonical = sorted(group, key=sort_key)[0]
return str(canonical.get("slug") or "").strip()
def _boolish(value: object) -> bool:
if isinstance(value, bool):
return value
return str(value or "").strip().lower() in {"1", "true", "yes", "on"}
def _repository_checkout_evidence(root: dict[str, Any]) -> list[dict[str, Any]]: def _repository_checkout_evidence(root: dict[str, Any]) -> list[dict[str, Any]]:
source = _source(root) source = _source(root)
checkout = _resolve_path(source.get("path")) checkout = _resolve_path(source.get("path"))

View File

@@ -220,6 +220,7 @@ repositories:
name: railiance-hosts name: railiance-hosts
domain: railiance domain: railiance
path: /home/worsch/railiance-infra path: /home/worsch/railiance-infra
canonical_slug: railiance-infra
default_branch: main default_branch: main
state_hub_repo_id: 2db668cf-6c52-4965-951f-0d5e617de9e3 state_hub_repo_id: 2db668cf-6c52-4965-951f-0d5e617de9e3
@@ -265,5 +266,6 @@ repositories:
name: vergabe-teilnahme name: vergabe-teilnahme
domain: vergabe_teilnahme domain: vergabe_teilnahme
path: /home/worsch/vergabe-teilnahme path: /home/worsch/vergabe-teilnahme
canonical_slug: vergabe-teilnahme
default_branch: main default_branch: main
state_hub_repo_id: 46d9338e-d079-4953-b174-0ea64761be5c state_hub_repo_id: 46d9338e-d079-4953-b174-0ea64761be5c

View File

@@ -99,6 +99,59 @@ def test_deployable_identity_ignores_generic_filename_alias_ambiguity(tmp_path:
assert all("ambiguous_aliases" not in candidate.get("attributes", {}) for candidate in deployables) assert all("ambiguous_aliases" not in candidate.get("attributes", {}) for candidate in deployables)
def test_repository_identity_canonicalizes_duplicate_manifest_paths(tmp_path: Path) -> None:
repo = tmp_path / "canonical-repo"
repo.mkdir()
registry_manifest = tmp_path / "local-repos.yaml"
registry_manifest.write_text(
"""
apiVersion: railiance.fabric/v1alpha1
kind: RegistryOnboardingManifest
repositories:
- slug: stale-repo
name: stale-repo
path: {repo}
default_branch: main
- slug: canonical-repo
name: canonical-repo
path: {repo}
default_branch: main
remote_url: gitea-remote:coulomb/canonical-repo.git
""".format(repo=repo),
encoding="utf-8",
)
manifest_path = _minimal_manifest(
tmp_path,
"""
- id: root.fixture.registry
type: registry_manifest
status: active
fabric_id: fabric.fixture.primary
owner_actor_id: actor.fixture.lord
source:
manifest_path: {registry_manifest}
safe_discovery: local_files
evidence_scope:
- repo_inventory
- repository_identity
""".format(registry_manifest=registry_manifest),
)
manifest = load_accountability_root_manifest(manifest_path)
projection = build_identity_projection(collect_accountability_root_evidence(manifest_path), manifest)
repository_candidates = [
candidate
for candidate in projection["identity_candidates"]
if candidate["identity_type"] == "Repository"
]
assert [candidate["stable_key"] for candidate in repository_candidates] == [
"identity:repository:canonical-repo"
]
assert "stale-repo" in repository_candidates[0]["aliases"]
assert "ambiguous_aliases" not in repository_candidates[0].get("attributes", {})
def test_deployment_evidence_skips_dependency_cache_noise(tmp_path: Path) -> None: def test_deployment_evidence_skips_dependency_cache_noise(tmp_path: Path) -> None:
workspace = tmp_path / "workspace" workspace = tmp_path / "workspace"
(workspace / "service").mkdir(parents=True) (workspace / "service").mkdir(parents=True)

View File

@@ -4,7 +4,7 @@ type: workplan
title: "Duplicate Repository Identity Review" title: "Duplicate Repository Identity Review"
domain: railiance domain: railiance
repo: railiance-fabric repo: railiance-fabric
status: ready status: finished
owner: codex owner: codex
topic_slug: railiance topic_slug: railiance
created: "2026-05-24" created: "2026-05-24"
@@ -28,7 +28,7 @@ local checkout path.
```task ```task
id: RAIL-FAB-WP-0019-T01 id: RAIL-FAB-WP-0019-T01
status: todo status: done
priority: high priority: high
state_hub_task_id: "63c5ee1e-6c9f-4d63-b0b4-61308e833ac2" state_hub_task_id: "63c5ee1e-6c9f-4d63-b0b4-61308e833ac2"
``` ```
@@ -43,11 +43,17 @@ Review the duplicate path evidence for:
Done when the intended canonical repo identity, alias, or split-identity rule is Done when the intended canonical repo identity, alias, or split-identity rule is
known for `/home/worsch/railiance-infra` and `/home/worsch/vergabe-teilnahme`. known for `/home/worsch/railiance-infra` and `/home/worsch/vergabe-teilnahme`.
Result: `/home/worsch/railiance-infra` is canonicalized as
`railiance-infra`; `railiance-hosts` remains an alias while its State Hub record
still carries older goal context. `/home/worsch/vergabe-teilnahme` is
canonicalized as `vergabe-teilnahme`; `vergabe_teilnahme` is an alias/stale
registration.
## T02 - Encode Canonical Identity Decisions ## T02 - Encode Canonical Identity Decisions
```task ```task
id: RAIL-FAB-WP-0019-T02 id: RAIL-FAB-WP-0019-T02
status: todo status: done
priority: high priority: high
state_hub_task_id: "bd0496f2-9a95-4487-9620-eabbf0e78c6b" state_hub_task_id: "bd0496f2-9a95-4487-9620-eabbf0e78c6b"
``` ```
@@ -64,11 +70,16 @@ Candidate options include:
Done when duplicate repo path evidence no longer produces ambiguous repository Done when duplicate repo path evidence no longer produces ambiguous repository
identity blockers. identity blockers.
Result: accountability-root discovery now supports `canonical_slug` and
automatic duplicate-path canonicalization for registered repositories. Current
aliases are annotated in `registry/local-repos.yaml`, and the live ownership
review reports no `ambiguous_identity` blockers.
## T03 - Refresh Bootstrap Review Artifacts ## T03 - Refresh Bootstrap Review Artifacts
```task ```task
id: RAIL-FAB-WP-0019-T03 id: RAIL-FAB-WP-0019-T03
status: todo status: done
priority: medium priority: medium
state_hub_task_id: "2c90c5c1-46be-41b7-8854-602eea0e3aaf" state_hub_task_id: "2c90c5c1-46be-41b7-8854-602eea0e3aaf"
``` ```
@@ -79,3 +90,7 @@ snapshot artifacts.
Done when `fabric/discovery/snapshots/*bootstrap-ownership-review.json` shows Done when `fabric/discovery/snapshots/*bootstrap-ownership-review.json` shows
zero ambiguous repository identity blockers, or documents any remaining blocker zero ambiguous repository identity blockers, or documents any remaining blocker
as intentionally unresolved. as intentionally unresolved.
Result: bootstrap identity, ownership-review, and update-delta snapshots were
refreshed on 2026-05-24. The saved ownership review reports `needs_review: 0`
and no blockers.