Extracts citation-evidence/src/binder/ into this repo as the standalone @citation-evidence/evidence-binder package: headless binding service + in-memory link repo, active-state machine, the SharedContracts §7 rect-registry contract (registry, change pumps, hooks, SVG overlay), and the target-neutral reference FormRenderer. - toolchain mirrors sibling extracted repos (pnpm/tsc/vitest/eslint); imports rewritten from @shared/@engine aliases to the engine's @citation-evidence/engine package specifiers - dependency boundary (engine + anchor only; no source/work/umbrella) enforced via eslint no-restricted-imports - docs: extraction inventory + contract deltas, ADR-0001 (reference UI kept as supported exports), refreshed README/SCOPE/INTENT, populated capabilities index - typecheck + lint green, 37 tests passing Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.2 KiB
evidence-binder
@citation-evidence/evidence-binder — connect evidence items to structured
targets (form fields, claims, requirements, …) and render the visual guide that
ties a target, its evidence card, and the source highlight together.
This is the canonical home of the binder implementation, extracted from
citation-evidence/src/binder/ (EBIND-WP-0001).
What this package owns
- Evidence links —
EvidenceLinkrepository + binding service (services/bindings.ts,repos/in-memory-links.ts). Two query directions: all evidence for a target and all targets for an evidence item. Emits the canonical engine bus events (EvidenceLinkCreated/Updated/Removed,EvidenceItemActivated). - Active state — the
(activeTarget, activeEvidenceItemId, activeAnnotationId)machine and React provider (state/active.ts) that the form UI, evidence sidebar, and viewer adapter coordinate through. - Rect registry contract (SharedContracts §7) — a single registry into which
independent renderers publish
field/evidence-card/highlightrects, plus the change pumps, React hooks, and the SVGOverlaythat draws the guide (visual-guide/). - Reference form UI —
FormRendererandFieldDefinitionForm, kept as supported, target-neutral exports (seedocs/adr/ADR-0001-reference-ui-surface.md).
BinderProvider composes all four concerns behind one mount.
Dependency boundary
Per citation-evidence/wiki/DependencyMap.md §2, this package may depend on
citation-engine and evidence-anchor, and must not depend on
evidence-source, citation-work, or the umbrella citation-evidence. The MVP
slice imports only citation-engine (shared types + event bus). The boundary is
enforced by eslint.config.js. Shared-contract authority stays in the umbrella
wiki.
Develop
pnpm install # links @citation-evidence/engine from ../citation-engine
pnpm test # vitest (node + happy-dom suites)
pnpm typecheck # tsc -b --noEmit
pnpm lint # eslint (enforces the dependency boundary)
Requires a sibling checkout of citation-engine (see .nvmrc for the Node
version). See docs/extraction-inventory.md for the extraction boundary and
resolved contract deltas.