Bootstrap evidence-source from the citation-evidence src/source PDF slice. - Headless core (src/pdf): ingest/extract/fingerprint, importing domain contracts from @citation-evidence/engine/shared (no local copies) - Browser upload helpers isolated under src/browser behind a ./browser entry point, with an eslint boundary keeping the core browser-free - pnpm/TS/vitest/eslint scaffold; 52 tests (contract + determinism) - Fixtures resolved from the sibling citation-evidence checkout, not duplicated (real PII) — see docs/ADR-0002; suites skip when absent - Boundary + fixture decisions recorded as docs/ADR-0001 / ADR-0002 - README/SCOPE rewritten; capability.infotech.pdf-evidence-ingest registered, NO_CAPABILITIES removed - Follow-on workplans ESRC-WP-0002..0004 queued; ESRC-WP-0001 finished Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8 KiB
| id | type | title | domain | repo | status | owner | topic_slug | created | updated | spec_refs | state_hub_workstream_id | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ESRC-WP-0001 | workplan | Bootstrap standalone source repo from citation-evidence PDF slice | infotech | evidence-source | finished | codex | citation_evidence_mvp | 2026-06-21 | 2026-07-08 |
|
64771b5d-4b83-4848-a562-4b00aad017b2 |
ESRC-WP-0001 — Bootstrap Standalone Source Repo
This repo is no longer blocked on pure intent. The upstream umbrella repo
already contains a small but real src/source/ slice: PDF ingest,
fingerprinting, canonical-text extraction, browser upload helpers, and a
source-to-anchor round-trip integration test.
What is missing here is the standalone package/tooling, a clean extraction
boundary, and the downstream wire-up so citation-evidence consumes
evidence-source instead of its local src/source/ copy.
This workplan extracts the current PDF slice first. It does not try to ship Markdown/HTML representations, richer metadata extraction, or citation recovery in the same pass; those become follow-on workplans once the PDF boundary is stable.
Reviewed Repo State
evidence-sourcecurrently contains intent/docs/workplans only. There is no package manifest, source tree, test harness, or fixture corpus here yet.../citation-evidence/src/source/already implements:ingestPdf,extractPdf,fingerprintBytes,createPdfByteStore,ingestPdfFromFile, andresolvePdfViewerUrl.../citation-evidence/tests/integration/anchor-source-roundtrip.test.tsalready covers the source-to-anchor contract and should remain an umbrella integration test rather than becoming a private test in this repo.../citation-enginealready exposes the shared contracts this repo should consume via@citation-evidence/engineand@citation-evidence/engine/shared.
Dependency Order
T01 extraction boundary and import plan
-> T02 standalone package/tooling scaffold
-> T03 headless PDF ingest extraction
-> T04 browser/session helper placement
-> T05 subsystem test coverage and fixture ownership
-> T06 downstream citation-evidence wire-up
-> T07 repo docs, registry, and follow-on workplans
T01 — Lock the Extraction Boundary
id: ESRC-WP-0001-T01
status: done
priority: high
Turn the current umbrella src/source/ slice into an explicit extraction map.
Decide and document:
- which files move into
evidence-sourceimmediately, - which files stay in
citation-evidencebecause they are app/session/viewer concerns, - which contracts must come from
@citation-evidence/engine/shared, - which cross-subsystem tests stay upstream in the umbrella repo.
Minimum outcome:
pdf/ingest.ts,pdf/extract.ts, andpdf/fingerprint.tsare confirmed as in-scope for this repo,pdf/byte-store.ts,pdf/upload.ts, andpdf/viewer-url.tsare explicitly classified instead of carried over by default,- the extraction note points at the exact upstream files being replaced.
Acceptance: there is a short boundary note or ADR in this repo and no part of
the extraction relies on copying citation-engine shared types locally.
T02 — Add Standalone Package and Tooling
id: ESRC-WP-0001-T02
status: done
priority: high
Create the minimal standalone development surface for this repo.
Add:
package.jsonwith sibling-checkout dependency on@citation-evidence/enginevialink:../citation-engine,- TypeScript, Vitest, and ESLint configuration,
- a
src/tree for extracted code, - a
tests/tree and fixture location strategy, - documented repo-local commands for
test,typecheck, andlint.
Keep the first extraction small: one package is enough until multiple formats or distribution constraints justify a more granular package layout.
Acceptance: this repo can install dependencies and run meaningful test,
typecheck, and lint commands without depending on citation-evidence as its
runtime host.
T03 — Extract the Headless PDF Ingest Core
id: ESRC-WP-0001-T03
status: done
priority: high
Port the current headless PDF ingest pipeline from
../citation-evidence/src/source/pdf/ into this repo.
Scope:
ingestPdfextractPdffingerprintBytes
Requirements:
- preserve the current PDF behavior from
CE-WP-0002-T03, - import
Document,DocumentRepresentation,newId, andnormalizefrom@citation-evidence/engine/shared, - keep ingest pure over bytes and extraction results,
- do not mix persistence, viewer state, or React concerns into the core.
Acceptance: a consumer can pass PDF bytes to this repo and receive a valid
{ document, representation } pair using only engine-owned contracts.
T04 — Place the Browser and Session Helpers Deliberately
id: ESRC-WP-0001-T04
status: done
priority: high
The upstream source slice currently includes browser-facing helpers for local
uploads and blob: URL management. Those are useful, but they are not the same
thing as headless ingest.
Decide one of two outcomes:
- Keep these helpers in
evidence-source, but isolate them clearly under a browser-focused surface with documentation that distinguishes them from the headless core. - Leave them in
citation-evidence/citation-workbecause they are viewer or session infrastructure, and remove them from this repo's initial scope.
Modules to classify:
pdf/byte-store.tspdf/upload.tspdf/viewer-url.ts
Acceptance: there is no ambiguous mix of headless ingest code and browser/session-only behavior after extraction.
T05 — Rebuild Subsystem Test Coverage Here
id: ESRC-WP-0001-T05
status: done
priority: high
Re-establish the source repo's own verification surface.
Port or recreate:
- fixture-driven ingest contract tests,
- fingerprint determinism tests,
- PDF extraction invariants around
canonicalText,pageMap, andoffsetMap, - tests for whichever browser/session helpers remain in-scope after T04,
- PDF.js worker/test setup for Node-based runs.
Also decide fixture ownership:
- copy the PDF fixture corpus into this repo,
- or define a stable shared-fixture path that does not make this repo's tests implicitly depend on the umbrella app layout.
Acceptance: evidence-source has its own subsystem test suite, while the
source-to-anchor round-trip remains an umbrella integration test.
T06 — Switch citation-evidence to the Extracted Repo
id: ESRC-WP-0001-T06
status: done
priority: high
Finish the extraction by making the umbrella consume this repo instead of its
local src/source/ implementation.
Required steps:
- add
@citation-evidence/evidence-sourceor equivalent local-link dependency strategy for sibling development, - replace local source imports in
citation-evidencewith imports from this repo, - keep the existing source-to-anchor integration test upstream and make it run across the repo boundary,
- remove or tombstone the extracted local source files once downstream is green.
Acceptance: the umbrella app and its integration tests use the extracted source
package rather than the local src/source/ copy for the PDF slice.
T07 — Finish Repo Docs and Queue the Next Workplans
id: ESRC-WP-0001-T07
status: done
priority: medium
Once the PDF extraction lands, make the repo describe its actual state.
Update:
README.mdto reflect real install/dev usage,SCOPE.mdto replace placeholders with the actual current boundary,- registry metadata so this repo no longer advertises "intent only" if it now provides reusable ingest functionality.
Then split the deferred work into separate workplans rather than growing this file indefinitely:
- Markdown/HTML representations,
- metadata enrichment beyond current pass-through options,
- local citation recovery and external source discovery hooks.
Acceptance: this repo no longer presents itself as an empty placeholder, and the next feature phases have their own workplan files.