Signal Unanswered [open] watermark-directory/the-watermark-directory#752
gap(extraction): extract the LACRPC CAC agenda .jpg — first use of the #703 image path
**Follow-up to #703** (the raw image-source extraction path), now on `main`.
#703 built the `.png/.jpg/.tif` read path but ran **no** live extraction — the path ships, nothing uses it yet. This is its first real use.
## Target
`data/documents/lacrpc/meetings/20260120 CAC Agenda and Meeting Notice.jpg` — the one image-only source in the corpus (a Lima–Allen County Regional Planning Commission Citizens Advisory Committee agenda / meeting notice). Currently reference-only; the #703 path can now read it straight into the vision extractor (single image, no OCR hint).
## Scope
- Run the live image extraction (`extract_document(doc, kind=…)` over the `.jpg`, via the new `_read_doc` image branch) → a reviewed artifact under `data/extracted/lacrpc/`.
- **Open question — which kind/model.** This is a meeting agenda, not one of the six current doc kinds (deed/npdes/sos/epa/wetland/engineering). Decide before extracting:
- map it to the LACRPC meetings/timeline layer (cf. `data/extracted/lacrpc/meetings/meeting-summaries.yaml`), or
- add a light generic agenda/notice kind+model, or
- capture it as a dated `TimelineEvent` source only.
Prefer the smallest change that keeps the figure/text honest.
- **Chain of custody:** the `.jpg` is immutable evidence — don't rename/alter the source byte. Record the canonical name + a content-verified date in the collection's alias manifest if one applies.
- Validate the new extraction against `watermark.models` (`test_extracted_yaml_valid.py` must stay green).
## Why it's separate
It runs the API (cost) and lands a **reviewed corpus artifact** — a deliberate, gated decision distinct from shipping the code path. Tag claims `[verified]` only against the extracted artifact once committed.
## Done when
The LACRPC CAC agenda is a committed, schema-valid extraction under `data/extracted/lacrpc/`, sourced through the #703 image path, and (if it carries a date/parties) wired into the timeline/meetings layer.