# Extraction inventory & contract deltas (EBIND-WP-0001-T01) Locks the extraction boundary for pulling `citation-evidence/src/binder/` into this repository. Authority for the shared contracts remains the umbrella wiki (`../citation-evidence/wiki/SharedContracts.md`, `../citation-evidence/wiki/DependencyMap.md`) until the cutover is complete. ## 1. Files that extract into this repo All of `citation-evidence/src/binder/` moves to `evidence-binder/src/`: | Concern | Files | | --- | --- | | Headless link repo | `repos/in-memory-links.ts`, `repos/index.ts` | | Binding service | `services/bindings.ts` (+ `.test.ts`), `services/index.ts` | | Active-state machine | `state/active.ts` (+ `.test.ts`), `state/index.ts` | | Provider composition | `BinderProvider.tsx` | | Visual guide (rect registry) | `visual-guide/rect-registry.ts` (+ `.test.ts`), `visual-guide/events.ts`, `visual-guide/react-hooks.ts` (+ `.dom.test.tsx`), `visual-guide/Overlay.tsx` (+ `.dom.test.tsx`), `visual-guide/index.ts` | | Reference UI | `FormRenderer.tsx` (+ `FormRenderer.dom.test.tsx`), `FieldDefinitionForm.tsx` | | Barrel | `index.ts` | The upstream `src/binder/README.md` is **not** carried over — this repo's top-level `README.md` supersedes it. ## 2. Files that remain umbrella-only Everything that composes binder with the rest of the app stays in the umbrella (`citation-evidence/src/app/**`): `FormsApp.tsx`, `HighlightRectBridge.tsx`, `ActiveEvidenceChips.tsx`, `CaptureLinkPersister.tsx`, `capture-persistence.ts`, `App.tsx`. These are consumers of the binder, not part of it. ## 3. Import-alias rewrite Upstream binder files used the umbrella's internal path aliases. On extraction they are rewritten to the engine's published package specifiers (the same convention `evidence-anchor` uses): | Upstream alias | Extracted specifier | | --- | --- | | `@shared/evidence-link`, `@shared/ids` | `@citation-evidence/engine/shared` | | `@engine/events` | `@citation-evidence/engine` | No source imported `@binder/*`, `@work/*`, `@source/*`, or `@app/*`, so no forbidden edge existed in the slice. The binder MVP slice imports **only** from `citation-engine` (shared types + event bus). It does not currently import `evidence-anchor`, which is an *allowed but unused* edge (DependencyMap §2). ## 4. Contract deltas resolved - **`EvidenceTarget` naming / target vocabulary.** No drift. The engine's `EvidenceTarget` (`{ targetType, targetId }`) and the closed `EvidenceTargetType` catalogue (`form-field`, `claim`, `requirement`, `decision`, `document-section`) are canonical and consumed as-is. The MVP only exercises `form-field`. `INTENT.md` previously listed extra target kinds ("tasks, or other information objects"); that is aspirational prose, not a competing enum, and is left as narrative. - **Dropped relation values `derived-from` / `needs-check`.** These are **not** members of the canonical `EvidenceRelation` enum (`supports`, `contradicts`, `explains`, `qualifies`, `source-for`, `context-for`). The extracted package does **not** reintroduce them; any earlier INTENT mention of them is dropped from the implemented surface. - **Event vocabulary / removal semantics.** The binding service emits only canonical bus events: `EvidenceLinkCreated`, `EvidenceLinkUpdated`, `EvidenceLinkRemoved` (hard-delete; rejected-status path deferred), and `EvidenceItemActivated` / `FormFieldActivated`. All are members of the engine's `EngineEvent` union — no local event vocabulary is introduced. ## 5. Forbidden dependency edges (called out before copy) Per DependencyMap §2, `evidence-binder` may depend on `citation-engine` and `evidence-anchor`, and must **not** depend on `evidence-source`, `citation-work`, or the umbrella `citation-evidence`. This boundary is enforced mechanically by `eslint.config.js` (`no-restricted-imports`).