A document review workspace
Find a file
codex c387590465
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
docs(agents): repoint remote State Hub URL to the in-cluster address
The remote row pointed at 127.0.0.1:18000, a reverse tunnel back to the
workstation. On railiance01 the State Hub runs in the cluster on that same
machine, so the request left the box and came back to reach a local service.

Refs CUST-WP-0067-T07

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-25 00:20:46 +02:00
.claude/rules feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
.forgejo/workflows Add Forgejo CI smoke workflow (enablement template) 2026-07-08 12:30:20 +02:00
registry Add registry/NO_CAPABILITIES.md (reuse-surface REUSE-WP-0017-T03) 2026-07-06 18:50:37 +02:00
src/work Hydrate session PDF byte stores on engine mount. 2026-07-30 20:05:25 +02:00
workplans feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
.custodian-brief.md chore(consistency): sync task status from DB [auto] 2026-07-09 01:44:39 +02:00
.gitignore feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
.repo-classification.yaml Add .repo-classification.yaml (CUST-WP-0050 T11 agent first-pass) 2026-06-22 17:47:35 +02:00
AGENTS.md docs(agents): repoint remote State Hub URL to the in-cluster address 2026-08-25 00:20:46 +02:00
CLAUDE.md Normalize agent instructions and workplan frontmatter (STATE-WP-0067) 2026-06-22 23:16:24 +02:00
eslint.config.js feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
INTENT.md Add MVP Coordination section: code lives in citation-evidence umbrella during MVP 2026-05-24 16:51:09 +02:00
LICENSE Adopt Target Revenue Source License V1C1 (org-wide preliminary rollout) 2026-07-29 23:59:58 +02:00
package.json feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
pnpm-lock.yaml feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
README.md feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
SCOPE.md feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
tsconfig.json feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
vite.config.ts feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00
vitest.config.ts feat: extract review-workspace slice into @citation-evidence/work (CWORK-WP-0001) 2026-07-09 01:49:28 +02:00

citation-work

A document review workspace — the React surfaces for the review workflow: collection list, viewer shell, evidence sidebar, annotation create flow, and review-oriented upload/navigation shell.

Published as the @citation-evidence/work package and consumed by the citation-evidence umbrella app's review mode.

Current state

This repo is now the code of record for the review workspace. The slice was extracted from the umbrella app under CWORK-WP-0001; citation-evidence no longer carries a local src/work/ implementation and instead depends on this package (its @work alias resolves here).

Package surface (src/work/index.ts):

  • Shell: ReviewShell — the three-pane review layout (collection · viewer · sidebar)
  • Panes: CollectionList, ViewerShell, EvidenceSidebar
  • Capture/edit: InlineCaptureForm, EvidenceFormBody
  • Upload: UploadDropzone (also the default ReviewShell upload slot)
  • Providers/hooks: EngineProvider, SessionProvider, and the associated use* hooks; useExportEvidence; useDebugFlag

Upload seam decision (T03)

UploadDropzone is owned by this package — it depends only on @source and the local engine/session hooks, so the shell renders a complete review surface with no umbrella-local imports. ReviewShell still exposes an upload slot so a consumer can substitute its own affordance; when omitted, the package default is used.

Boundary

citation-work depends on:

It may not import from binder-owned or umbrella-app-owned review-to-form code. The dependency edges are enforced by eslint-plugin-boundaries in eslint.config.js.

Alias / extraction notes

citation-engine and evidence-anchor are extracted sibling packages and are consumed by their package names. @source/* still resolves into the umbrella's src/source façade because that façade owns the local viewer-url policy that is not part of the extracted evidence-source package. This is the one remaining transitional edge; see the deferred list below.

Deferred after this extraction

The following were intentionally not part of CWORK-WP-0001 and remain for a subsequent workplan slice (see the workplan's "Deferred After This Workplan" section for the authoritative list):

  • collection search / filter UX,
  • document review-status interactions,
  • evidence-item status / tagging / filtering UX,
  • binder-integrated review-to-form workflows,
  • new viewer/document-format features beyond the current PDF slice,
  • retiring the @source façade edge once a viewer-url home is decided (either a small local module here or an evidence-source addition).

Verification

pnpm install
pnpm typecheck
pnpm lint
pnpm test

Workplan