diff --git a/.claude/rules/workplan-convention.md b/.claude/rules/workplan-convention.md index 3003e14..d891c22 100644 --- a/.claude/rules/workplan-convention.md +++ b/.claude/rules/workplan-convention.md @@ -46,7 +46,7 @@ fix-consistency. Do not edit or rename it. **Workplan** is the fleet term — see `the-custodian/canon/standards/workplan-terminology-fleet_v0.1.md`. -**Workstream** is legacy only: some API routes (`/workstreams/`), params +**Workplan** is legacy only: some API routes (`/workstreams/`), params (`workstream_id`), MCP aliases (`create_workstream`), and the frontmatter field above remain until `STATE-WP-0069` retires them via legacy-meter. Treat those identifiers as workplan IDs. Prefer `GET /workplans/` and `workplan_id` in new diff --git a/workplans/EBIND-WP-0001-intent-placeholder.md b/workplans/EBIND-WP-0001-intent-placeholder.md index d2e8055..26e37db 100644 --- a/workplans/EBIND-WP-0001-intent-placeholder.md +++ b/workplans/EBIND-WP-0001-intent-placeholder.md @@ -1,19 +1,149 @@ --- id: EBIND-WP-0001 type: workplan -title: "INTENT placeholder — await extraction from citation-evidence" +title: "Extract evidence-binder from citation-evidence" domain: infotech repo: evidence-binder -status: backlog +status: ready owner: codex topic_slug: citation_evidence_mvp created: "2026-06-21" -updated: "2026-06-21" +updated: "2026-07-08" state_hub_workstream_id: "405d789c-0e0b-4764-89ed-0f6140a143e7" --- -# EBIND-WP-0001 — INTENT Placeholder +# EBIND-WP-0001 — Extract evidence-binder from citation-evidence -Umbrella-first MVP: binder code will extract from `citation-evidence` when the -subsystem boundary stabilizes. This file satisfies ADR-001 workplan structure -until then. See `INTENT.md`. \ No newline at end of file +`evidence-binder` is still INTENT-only in this repo, but the current +implementation already exists upstream in `../citation-evidence/src/binder/`. +That slice includes a binding service, in-memory link repository, active-state +machine, rect registry and overlay, provider wiring, and a small form-oriented +reference UI. This workplan turns the placeholder into a concrete extraction +plan that preserves the canonical contracts in +`../citation-evidence/wiki/SharedContracts.md` and the allowed edges in +`../citation-evidence/wiki/DependencyMap.md`. + +## Lock Extraction Boundary And Contract Deltas + +```task +id: EBIND-WP-0001-T01 +status: todo +priority: high +state_hub_task_id: "f2abe7f8-089b-4719-a739-18dc3224e9eb" +``` + +Review the upstream binder slice (`services/`, `repos/`, `state/`, +`visual-guide/`, `BinderProvider.tsx`, `FormRenderer.tsx`) against +`SharedContracts.md` sections 2.4, 2.5, 4, and 7 plus `DependencyMap.md` +section 2. Capture and resolve remaining deltas before extraction, including +INTENT drift around `EvidenceTarget` naming, the dropped +`derived-from` / `needs-check` relation values, and any event vocabulary that +is not yet canonicalized. + +## Stand Up Standalone Package, Tests, And Repo Metadata + +```task +id: EBIND-WP-0001-T02 +status: todo +priority: high +state_hub_task_id: "122a254f-6490-4211-bde7-ce515c72c36a" +``` + +Create the standalone package and test harness that this repo currently lacks, +then refresh repo-local metadata so it stops looking like a placeholder. This +includes package entrypoints, test scripts, baseline CI/tooling, `README.md`, +`SCOPE.md`, and the stale capability metadata in +`registry/indexes/capabilities.yaml`. + +## Extract Headless Binding Model And Repository + +```task +id: EBIND-WP-0001-T03 +status: todo +priority: high +state_hub_task_id: "d58501a4-b2e5-45fa-b504-e2c37ca48e68" +``` + +Move the headless binding primitives from +`../citation-evidence/src/binder/repos/in-memory-links.ts` and +`../citation-evidence/src/binder/services/bindings.ts` with their tests. Keep +the current query directions, default relation/status behavior, and event-bus +emission semantics while staying independent of persistence, viewer internals, +`citation-work`, and `evidence-source`. + +## Extract Active State And Provider Composition + +```task +id: EBIND-WP-0001-T04 +status: todo +priority: high +state_hub_task_id: "b6f96550-c4a6-4ce1-bfde-4c91d33da687" +``` + +Extract `state/active.ts` and `BinderProvider.tsx` so the binder owns the +active target / active evidence / active annotation state triple plus the +composition root that wires link storage, binding services, rect registry, and +engine bus access. Preserve `initialLinks` restore behavior and bus injection +without introducing a dependency on umbrella app code. + +## Extract Rect Registry, Change Pumps, And Overlay + +```task +id: EBIND-WP-0001-T05 +status: todo +priority: high +state_hub_task_id: "58b55a71-eee4-4f3d-9bcd-7c3678320dd1" +``` + +Move the visual-guide contract from +`../citation-evidence/src/binder/visual-guide/`, including +`rect-registry.ts`, `events.ts`, `react-hooks.ts`, `Overlay.tsx`, and their +tests. Preserve the section 7 rect kinds, invalidate/version semantics, +requestAnimationFrame throttling, and the contract that independent renderers +publish rects into one registry. + +## Decide Binder-Owned Reference UI Surface + +```task +id: EBIND-WP-0001-T06 +status: todo +priority: medium +state_hub_task_id: "39164219-5f35-49cf-874a-00fd0c902007" +``` + +Decide whether `FormRenderer.tsx` and `FieldDefinitionForm.tsx` remain binder +exports, move into examples, or shift into an application layer. Whatever the +outcome, keep binder form-friendly but target-neutral, avoid a `citation-work` +dependency, and document which React surfaces are supported versus merely +illustrative. + +## Cut Over Umbrella Integration And Verify Boundaries + +```task +id: EBIND-WP-0001-T07 +status: todo +priority: high +state_hub_task_id: "efceaee5-43a8-4ecf-9025-a5843eecada0" +``` + +Update `citation-evidence` to consume the extracted binder package instead of +owning `src/binder/` directly, or otherwise enforce the same boundary through +package-level imports during a staged cutover. Verify there are no forbidden +edges to `citation-evidence` behavior, `citation-work`, or `evidence-source`, +and keep shared-contract changes flowing through the umbrella docs until the +cutover is complete. + +## Exit Criteria + +```task +id: EBIND-WP-0001-T08 +status: todo +priority: medium +state_hub_task_id: "2c89dfcb-1526-46d9-936d-8f97f4e48d76" +``` + +Exit when this repo exports the binder service, active-state flow, and +visual-guide rect-registry contract with passing tests; repo docs and metadata +match the canonical shared contracts; and the umbrella app can define a target, +link evidence, activate evidence, and draw the field-to-card-to-highlight +overlay without relying on the upstream `src/binder/` implementation.