2026-05-20 23:38:36 +02:00
---
id: RAIL-FAB-WP-0013
type: workplan
title: "Path Scoped Duplicate Identity"
2026-06-22 23:16:28 +02:00
domain: financials
2026-05-20 23:38:36 +02:00
repo: railiance-fabric
2026-05-20 23:45:51 +02:00
status: finished
2026-05-20 23:38:36 +02:00
owner: codex
topic_slug: railiance
planning_priority: high
planning_order: 13
created: "2026-05-20"
updated: "2026-05-20"
state_hub_workstream_id: "bf80900b-606c-442c-aa15-d6272d73a8d6"
---
2026-07-08 20:26:24 +02:00
> **Terminology note:** Historical text in this archived workplan may use the legacy term "workstream". The fleet term is **workplan** (`canon/standards/workplan-terminology-fleet_v0.1.md`).
2026-05-20 23:38:36 +02:00
# RAIL-FAB-WP-0013 - Path Scoped Duplicate Identity
## Goal
Refine discovery reconciliation so path-scoped nodes, starting with `Lockfile`
candidates, are not marked as duplicate entities solely because they share the
same display label.
This unblocks broad local-repo rollout by making rescan review output point to
real identity concerns instead of expected repeated files such as `uv.lock` and
`package-lock.json` across different checkouts.
## Background
`RAIL-FAB-WP-0012` ingested a controlled three-repo baseline into the local
Fabric registry. The only review-required repo was `repo-scoping` ; all seven
conflicted candidates were `Lockfile` nodes with labels `uv.lock` or
`package-lock.json` under distinct `var/checkouts/...` paths.
The current duplicate detector compares node kind plus normalized label/alias.
That is useful for semantic declaration nodes, but too broad for file-backed
path-scoped evidence.
## Design Principles
- Keep semantic duplicate detection intact for declaration-like nodes.
- For path-scoped node kinds, require matching source path identity before
treating same-label nodes as possible duplicates.
- Preserve conservative behavior when source path evidence is missing.
- Add a regression test that mirrors the `repo-scoping` false-positive shape.
- Rerun the controlled baseline before recommending broad rollout.
## Tasks
### T01 - Add Path-Scoped Reconciliation Coverage
```task
id: RAIL-FAB-WP-0013-T01
2026-05-20 23:42:21 +02:00
status: done
2026-05-20 23:38:36 +02:00
priority: high
state_hub_task_id: "8d9cb1c2-77f7-45da-b942-a8d68454477a"
```
Add tests proving that same-label `Lockfile` nodes at different source paths do
not raise `possible_duplicate_node` , while same-label semantic nodes still do.
### T02 - Implement Path-Aware Duplicate Detection
```task
id: RAIL-FAB-WP-0013-T02
2026-05-20 23:42:21 +02:00
status: done
2026-05-20 23:38:36 +02:00
priority: high
state_hub_task_id: "7d4d439d-4f7f-4bdd-bc5f-b02524a10684"
```
Update reconciliation duplicate detection so path-scoped node kinds compare
source anchors before emitting duplicate conflicts.
### T03 - Verify Controlled Rescan
```task
id: RAIL-FAB-WP-0013-T03
2026-05-20 23:45:51 +02:00
status: done
2026-05-20 23:38:36 +02:00
priority: high
state_hub_task_id: "0d6cad1d-16f8-4ac7-b8d3-b62a2f8e4549"
```
Rerun the three-repo controlled rescan against the local registry and confirm
that `repo-scoping` no longer reports the seven lockfile duplicate conflicts.
2026-05-20 23:45:51 +02:00
Verification result:
- Command: `registry scan-manifest registry/local-repos.yaml --repo-slug
repo-scoping --repo-slug llm-connect --repo-slug railiance-fabric
--previous-from-registry --ingest --no-lock`.
- Report:
`registry/.fabric-discovery/reports/2026-05-20t214250z-deterministic.rescan-report.json` .
- Result: 3 scanned, 1 unchanged, 2 changed, 0 retired, 0 conflicted, 0 review
required.
- `repo-scoping` snapshot `5` still reports 7 changed lockfile candidates, but
none are conflicted; the previous false `possible_duplicate_node` warnings
are gone.
- `registry rescan-status --review-only --json` shows 0 review-required repos.
2026-05-20 23:38:36 +02:00
### T04 - Rollout Recommendation
```task
id: RAIL-FAB-WP-0013-T04
2026-05-20 23:45:51 +02:00
status: done
2026-05-20 23:38:36 +02:00
priority: medium
state_hub_task_id: "4be31147-b060-4b47-9589-8d3d8024879d"
```
Record whether broad all-local-repo baseline ingestion is ready after the
identity refinement, or whether another targeted blocker remains.
2026-05-20 23:45:51 +02:00
Recommendation:
- Broad all-local-repo baseline ingestion is ready to attempt as an ingest-only
operational run.
- Keep `--previous-from-registry` , `--ingest` , and no `--accept` for the broad
pass; review `registry rescan-status --review-only` before any projection.
- Use safe projection only for clean repos with accepted repo-declaration
candidates. Do not project candidate-only repositories until their discoveries
are reviewed or explicitly accepted.
2026-05-20 23:38:36 +02:00
## Close Criteria
- Unit tests cover path-scoped duplicate identity.
- Reconciliation keeps semantic duplicate warnings intact.
- Controlled rescan no longer flags distinct lockfiles as duplicates.
- State Hub and this workplan capture the updated rollout recommendation.