27 Commits
Author SHA1 Message Date
rockachopa 48979bf744 Merge pull request '92: privacy-safe operator health report (#19)
Quality gates / quality (push) Waiting to run
Adds /api/metrics token-gated snapshot, pure operator formatter, CLI report, privacy-screen disclosure, and the demo/gate coverage for it. Closes #19.
2026-11-02 12:06:58 +00:00
rockachopa c31d0a510f Merge pull request 'Harden image ingress: sniff the container, refuse polyglots and metadata, and bound the request (#16)' (#82) from timmy/16-image-ingress-hardening into main
Quality gates / quality (push) Canceled after 0s
2026-10-31 12:06:26 +00:00
rockachopa d7026c0ed3 Merge pull request 'Publish the dataset card and labeling guide from the manifest (#27)' (#89) from timmy/27-dataset-card into main
Quality gates / quality (push) Canceled after 0s
Publish the dataset card and labeling guide from the manifest (#27)

Regression tests: npm test 229 pass; dataset-card 14, corpus-manifest 8, corpus-review 21, calibration-harness 19 OK.
2026-10-28 12:02:27 +00:00
rockachopa 2533f83af3 Merge pull request #87: Gate visual prefill on a versioned abstention policy (#32)
Quality gates / quality (push) Failing after 5m13s
2026-10-26 12:03:47 +00:00
rockachopa a2293c6e34 Merge pull request #86: Build contributor-held-out evaluation harness and calibration report (#29)
Quality gates / quality (push) Successful in 12m54s
Closes #29
2026-10-25 12:02:11 +00:00
rockachopa 9f69730780 fix(release): say "any raw copy" so the caption matches what a withdrawal can delete
Quality gates / quality (push) Successful in 12m45s
On the CLI ingest path there is no raw pre-derivation copy at all, so the
caption asserted a deletion the recording never showed. The code deletes a raw
copy only when one exists under the dataset's raw/ directory, matched by digest.
2026-10-24 12:51:37 +00:00
rockachopa fa5f4232dd fix(release): draw the corpus audit card opaque and gate on it
Quality gates / quality (push) Successful in 12m37s
The first recording of the card was legible but translucent, so the bottom nav
and the journal's body copy ghosted through its empty lower rows. The card is
now fully opaque and the on-screen proof rejects a background with any alpha, so
a future edit cannot reintroduce the bleed unnoticed.
2026-10-24 12:38:01 +00:00
rockachopa 1d338ed35b test(release): record the corpus manifest on camera with the real ingest and revoke commands
Quality gates / quality (push) Successful in 12m46s
Issue #25's corpus pipeline is a CLI with no app screen, so the demo runs the
real ingest and revoke commands against the committed synthetic fixture in a
throwaway dataset and draws the on-camera audit card from their actual output:
the provenance record, the deleted derived image, the kept original record, the
tombstone that drops labels and the subject key, zero active samples, and a
second revocation refused without appending anything.

The card is asserted on screen (fixed, topmost, unclipped) and the values on it
are read back from the run, so a build that stops recording provenance or stops
deleting bytes fails instead of recording a claim. build_release.py now runs
tests/corpus-manifest.test.py as a release gate and requires the four new
captions to have painted on camera.
2026-10-24 12:20:25 +00:00
rockachopa 6aacefca65 Merge pull request #85: feat(corpus): auditable manifest provenance, tombstones, and lifecycle guards (#25)
Quality gates / quality (push) Successful in 12m47s
2026-10-24 12:02:52 +00:00
rockachopa 5a15fa660e Merge pull request #84: feat(portability): versioned backups, v1 migration, and AI provenance (#35)
Quality gates / quality (push) Successful in 21m49s
2026-10-22 12:02:21 +00:00
rockachopa d0b3c10aea Merge pull request 'fix(release): paint demo captions and touch rings on camera and verify the pixels' (#81) from fix/demo-caption-pixels into main 2026-10-19 12:35:29 +00:00
rockachopa c2e9553be5 chore: update tests/release-demo.test.js for the caption pixel gate
Quality gates / quality (pull_request) Successful in 3m14s
2026-10-19 12:35:14 +00:00
rockachopa d1c858b940 chore: update scripts/build_release.py for the caption pixel gate 2026-10-19 12:35:12 +00:00
rockachopa fd09282d8d fix(release): paint demo captions and touch rings on camera and verify the pixels
The demo injected its caption CSS with page.addStyleTag(), which writes into the current document
only. The first page.reload() in the recording stripped that stylesheet, so every later caption
rendered as unstyled body text clipped at the bottom of the frame and every touch indicator was
invisible, while the caption receipt still listed each string and the release gate accepted it.

- caption and touch nodes now carry inline styles, which no reload can remove
- caption() proves each caption is a fixed bar at the top of the viewport, on top of what is
  beneath it, fully inside the frame, and that the caption band pixels change; the recording fails
  rather than shipping a caption nobody can read
- the receipt records per-caption evidence and build_release.py requires every required caption,
  including the release delta, to be pixel-verified
- the demo photo is a legible synthetic test card instead of a 1x1 white pixel that rendered on
  camera as an empty box
- tests assert the inline styling and the pixel gate
2026-10-19 12:35:11 +00:00
rockachopa 0e4dde5f81 Merge pull request 'feat: separate saved-photo lifecycle from the confirmed log (#36)' (#80) from timmy/36-photo-lifecycle-controls into main 2026-10-19 12:02:37 +00:00
rockachopa fe5c3d40c0 Merge pull request #78: feat: ground Timmy chat answers in cited ledger records (#37)
Closes #37
2026-10-18 12:02:02 +00:00
rockachopa 3b267c0fff Merge pull request #77: fix: escalate the symptom phrasing people actually use, and never clear a reported symptom (#21) 2026-10-15 12:03:03 +00:00
rockachopa a033cb3ae9 Merge pull request 'feat: explainable longitudinal pattern summaries with cited records (#34)' (#76) from timmy/34-explainable-pattern-summaries into main 2026-10-14 12:03:35 +00:00
rockachopa 5744969faf Merge pull request 'feat: pin the worker container and gate readiness on the loaded model (#15)' (#75) from timmy/15-container-worker-receipts into main 2026-10-13 12:05:19 +00:00
rockachopa 9cf23df448 Merge pull request #74: fix: fail closed when a filled-in visual field is out of range (#73)
Closes #73
2026-10-12 12:02:29 +00:00
rockachopa a1777a72e8 Merge pull request #72: test: prove schema conformance and refusal with a committed vision corpus (#18) 2026-10-11 12:02:42 +00:00
rockachopa 503efaf959 Merge pull request 'docs: end-to-end photo data-flow threat model (#20)' (#71) from timmy/20-photo-dataflow-threat-model into main 2026-10-10 12:01:57 +00:00
rockachopa 5505f3c3ef Merge pull request 'Hard-stool follow-up: user-reported symptoms with deterministic red-flag handoff' (#70) from timmy/67-hard-stool-followup into main 2026-10-09 12:01:54 +00:00
rockachopa 7c5c466b83 Merge pull request '#69' from timmy/13-provisional-suggestion-state
Make AI suggestions visibly provisional and correction-first (#13)

Closes #13
2026-10-08 12:02:33 +00:00
rockachopa 3e87f881c5 Merge pull request '#68' from timmy/12-manual-fallback-draft-recovery 2026-10-07 12:02:30 +00:00
rockachopa 8e3c2f8889 Merge pull request #52 from timmy/10-reproducible-smolvlm-bootstrap
Quality gates / quality (push) Has been cancelled
Merge pull request #52: Package pinned self-hosted SmolVLM2 bootstrap
2026-08-21 12:55:18 +00:00
rockachopa 930f156590 Merge pull request 'Document product boundary and release authority' (#46) from timmy/9-product-boundary-decisions into main
Quality gates / quality (push) Successful in 1m26s
2026-08-20 13:15:22 +00:00