Establishes citation-work as the standalone home of the review workspace, migrated out of the citation-evidence umbrella app. - Package/tooling scaffold: package.json, tsconfig, vite/vitest/eslint configs with eslint-plugin-boundaries enforcing engine/anchor/source-only imports - Providers/hooks: EngineProvider, SessionProvider + use* hooks (T02) - Panes: CollectionList, ViewerShell, EvidenceSidebar (T03/T04/T05) - Capture/edit: InlineCaptureForm, EvidenceFormBody; UploadDropzone owned here - ReviewShell: repo-owned three-pane layout with an upload slot seam - Tests: CollectionList, InlineCaptureForm capture flow, EvidenceSidebar export/edit/activation (11 tests, all green) - Anchor consumed as @citation-evidence/evidence-anchor package; @source kept on the umbrella facade for its local viewer-url policy - Docs (README/SCOPE) refreshed; deferred gaps recorded Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
11 KiB
| id | type | title | domain | repo | status | owner | topic_slug | created | updated | state_hub_workstream_id |
|---|---|---|---|---|---|---|---|---|---|---|
| CWORK-WP-0001 | workplan | Extract the existing review workspace slice into citation-work | infotech | citation-work | finished | codex | citation_evidence_mvp | 2026-06-21 | 2026-07-09 | 5978b563-16b7-41c2-8add-3f122dc3a61a |
CWORK-WP-0001 — Extract the Existing Review Workspace Slice
Goal
Turn citation-work from an INTENT-only repo into the standalone home of the
already-existing review workspace slice from citation-evidence, without
expanding scope beyond that current slice.
The implementation source of truth on 2026-07-08 is:
../citation-evidence/src/work/../citation-evidence/src/app/ReviewLayout.tsx../citation-evidence/src/app/sessions/UploadDropzone.tsx
This workplan is intentionally Ralph-friendly: bounded, file-driven, and self-closing once the extraction, cutover, docs, verification, and sync are complete.
Scope Locks
- In scope: repo scaffold, package/tooling setup, extraction of the current review workspace React surface, umbrella-app cutover, test porting, repo doc refresh, and closeout sync.
- Out of scope for this workplan: new product features not already present in the upstream slice, including collection search/filter, document review status UX, evidence status/tagging/filtering, and any binder-owned workflows.
- Boundary rule:
citation-workmay depend oncitation-engine,evidence-anchor, andevidence-source, but notevidence-binder. - If extraction reveals missing engine contracts: fix only the minimum import/integration issue needed to complete extraction, or register sibling follow-on work. Do not broaden this workplan into cross-repo feature design.
Ralph Execution
Recommended invocation after review:
/ralph-workplan workplans/CWORK-WP-0001-extract-review-workspace.md --max-iterations 12
Expected done condition:
- all tasks below are
done, - frontmatter status is updated to
finished, - State Hub task/workplan statuses and progress note are synced.
Dependency Order
T01 (repo scaffold + boundaries)
└─ T02 (providers/hooks/barrel)
├─ T03 (collection pane + workspace shell)
├─ T04 (viewer + capture flow)
└─ T05 (evidence sidebar + export flow)
└─ T06 (umbrella cutover + test port)
└─ T07 (repo docs + deferred-gap registration)
└─ T08 (verification + sync + closeout)
T01 — Bootstrap the repo scaffold and dependency boundaries
id: CWORK-WP-0001-T01
status: done
priority: high
state_hub_task_id: "a4fc2589-c922-4740-8817-8098698facbc"
Description: Create the minimal standalone package/tooling baseline so this repo can host extracted code instead of only intent docs.
Implement:
- Add repo-local package/tooling files adapted from
../citation-evidence/:package.json,tsconfig.json,vite.config.ts,vitest.config.ts,eslint.config.js, and initialsrc/layout. - Configure aliases and lint boundaries so
citation-workmay import only fromengine,anchor, andsource. - Remove stale repo wording that still implies binder-owned form-binding layout belongs here.
Acceptance criteria:
pnpm lint,pnpm typecheck, andpnpm testcan run in this repo once the extracted files land.- No local config permits imports from
binder. - README/AGENTS/SCOPE wording no longer contradicts the repo boundary.
Deliverables: runnable scaffolded repo with enforced dependency edges.
T02 — Extract providers, hooks, and the public barrel
id: CWORK-WP-0001-T02
status: done
priority: high
depends_on: [T01]
state_hub_task_id: "d2e4c9da-915c-49ea-af7d-d927d935b13a"
Description: Move the stateful review-workspace foundation out of the umbrella repo first so the UI components have a stable local API.
Source files:
../citation-evidence/src/work/index.ts../citation-evidence/src/work/EngineContext.tsx../citation-evidence/src/work/SessionContext.tsx../citation-evidence/src/work/SessionContextInternal.ts../citation-evidence/src/work/useDebugFlags.ts
Acceptance criteria:
citation-workexports the same provider/hook surface currently consumed bycitation-evidence/src/app/.- Session-scoped storage keys, pending-selection state, scroll-to-annotation behavior, and byte-store registry semantics remain unchanged.
- No extracted provider imports from umbrella-app files.
Deliverables: working local provider layer plus barrel exports.
T03 — Extract the collection pane and workspace shell
id: CWORK-WP-0001-T03
status: done
priority: high
depends_on: [T02]
state_hub_task_id: "58e5be13-08e2-4cd9-a348-26abe0f717d9"
Description: Move the left-pane and review-shell composition into
citation-work, including the upload seam decision.
Source files:
../citation-evidence/src/work/CollectionList.tsx../citation-evidence/src/app/ReviewLayout.tsx../citation-evidence/src/app/sessions/UploadDropzone.tsxif kept as part of the review workspace surface
Implement:
- Make the three-pane review layout repo-owned.
- Decide whether
UploadDropzonebelongs in this repo or stays in the umbrella app as a narrow slot-based integration seam; document the decision in-code. - Port
CollectionList.dom.test.tsx.
Acceptance criteria:
- The extracted package can render the review shell with collection list and upload affordance without umbrella-local imports.
- The upload seam is explicit and stable.
- Collection list tests pass from this repo.
Deliverables: local review-shell component and collection-pane coverage.
T04 — Extract the viewer shell and selection-capture flow
id: CWORK-WP-0001-T04
status: done
priority: high
depends_on: [T02]
state_hub_task_id: "048efc6c-b744-4b68-8073-7bcfcfc0fc91"
Description: Move the center-pane review flow without changing the viewer-adapter boundary.
Source files:
../citation-evidence/src/work/ViewerShell.tsx../citation-evidence/src/work/InlineCaptureForm.tsx../citation-evidence/src/work/EvidenceFormBody.tsx
Acceptance criteria:
citation-worktalks to the viewer only throughanchor/sourcecontracts, not PDF.js internals.- Pending selection, save/discard behavior, and active-evidence scroll behavior match the umbrella implementation.
- DOM coverage exists for capture create/save/discard flow and document-switch pending-selection reset.
Deliverables: extracted viewer/capture components plus local tests.
T05 — Extract the evidence sidebar and export flow
id: CWORK-WP-0001-T05
status: done
priority: high
depends_on: [T04]
state_hub_task_id: "10bff27a-5c84-46e5-8e5b-dc5bea6d24ae"
Description: Move the right-pane evidence management UI and preserve the current export/edit behaviors.
Source files:
../citation-evidence/src/work/EvidenceSidebar.tsx../citation-evidence/src/work/useExportEvidence.ts
Acceptance criteria:
- Document-order sorting, inline edit, pending-capture insertion, and Markdown/HTML clipboard export all behave as before.
Cmd/Ctrl+Shift+Cexport still works for the active evidence item.EvidenceSidebar.dom.test.tsxis ported and extended to cover at least edit and activation behavior in addition to export.
Deliverables: extracted evidence sidebar flow plus local regression tests.
T06 — Cut the umbrella app over to the extracted package
id: CWORK-WP-0001-T06
status: done
priority: high
depends_on: [T03, T05]
state_hub_task_id: "da66f601-0467-41dd-9a64-943b54f0a232"
Description: Rewire citation-evidence so review mode consumes
citation-work as an extracted subsystem rather than a local src/work/
folder.
Implement:
- Update app-side imports in
../citation-evidence/src/app/App.tsx,../citation-evidence/src/app/ReviewLayout.tsx,../citation-evidence/src/app/forms/, and../citation-evidence/src/app/sessions/as needed. - Keep top-bar routing, empty-state session creation, and binder/forms composition in the umbrella repo.
- Port or update app-side tests affected by the import change.
Acceptance criteria:
- Review mode still supports session switching, PDF upload, collection list, viewer, evidence capture, and evidence export after the cutover.
- The umbrella repo no longer depends on a local
src/work/implementation for review mode.
Deliverables: externalized package consumption from the umbrella app.
T07 — Refresh repo docs and register deferred follow-on gaps
id: CWORK-WP-0001-T07
status: done
priority: medium
depends_on: [T06]
state_hub_task_id: "87211f5e-2e72-46ad-9f02-9e13ecbe9aa2"
Description: Finish the repo transition from placeholder to extracted package and record what remains intentionally out of scope for this slice.
Implement:
- Update
README.md,SCOPE.md, and any local orientation docs to describe the extracted implementation instead of a future placeholder. - Record deferred workspace gaps explicitly: collection search/filter, document review status UX, evidence status/tagging/filtering, and any other notable INTENT-vs-implementation gap.
- If helpful, name the next follow-on workplan slice, but do not expand this workplan to include it.
Acceptance criteria:
- A new contributor can tell from repo docs what code now lives here and what still remains for later work.
- Deferred items are written down clearly enough to seed a subsequent workplan without rediscovery.
Deliverables: accurate repo docs plus explicit deferred-gap list.
T08 — Verify, sync, and close the extraction slice
id: CWORK-WP-0001-T08
status: done
priority: high
depends_on: [T07]
state_hub_task_id: "c094f3ad-1793-4a61-b32f-2d8108f07e4b"
Description: Close the workplan cleanly so Ralph can retire with HEUREKA and the State Hub read model matches the file.
Acceptance criteria:
- Local verification passes:
pnpm lint,pnpm typecheck, andpnpm test. - Workplan tasks marked
donein the file are also markeddonein State Hub. fix-consistencyruns cleanly and updates.custodian-brief.mdas needed.- A progress note is posted summarizing what was extracted and what was deferred.
- Frontmatter status is updated from
ready/activetofinished.
Deliverables: passing extracted repo, synced hub state, and clean closeout.
Deferred After This Workplan
These are intentionally not part of the Ralph loop for CWORK-WP-0001:
- collection search/filter UX,
- document review-status interactions,
- evidence-item status/tagging/filtering UX,
- any binder-integrated review-to-form workflows,
- any new viewer/document-format features not already in the current upstream
src/work/slice.