- docs/PHOTO-DATAFLOW-THREAT-MODEL.md: browser, API ingress, model worker,
transient buffers, training opt-in store, logs, exports, and deletion,
with trust boundaries and a numbered threat register
- every named abuse case (replay, oversized input, metadata leakage,
poisoning, unauthorized training, operator access) carries a mitigation,
an owner, a tracked follow-up ticket, and the artifact that will prove it
- tests/threat-model.test.js enforces diagram coverage, owner/follow-up
presence against ROADMAP ticket numbers, and the non-diagnostic boundary
with synthetic-only fixtures
- link the model from the accepted product decision record
Logging must never depend on AI availability, and an unsaved entry must not
disappear when the user navigates away mid-log.
- add src/vision-readiness.js so the photo flow consumes one readiness contract
- when the worker is offline/disabled/unknown, offer no AI action and no
analysis-consent prompt, and keep manual Bristol entry one action away
- add src/draft.js and make the draft own the photo so a chosen photo and
entered context survive a recoverable close or navigation, with a visible
kept-draft summary and an explicit start over
- drafts stay in session memory only: a photo awaiting consent is never
persisted, and reload starts clean
- service worker now refuses to cache image bodies in addition to analysis
requests and no-store responses
- tests: 2 new unit files, 3 service-worker privacy assertions (1 hold-out),
1 browser acceptance file, release-demo and CI/package assertions
- release demo now visibly replays the vision-offline pass and the retained
draft with synthetic data and an in-script assertion