-
Timmy daily-2026-10-24 — auditable corpus manifest
Pre-ReleaseQuality gates / quality (push) Successful in 12m45sreleased this
2026-10-24 13:03:55 +00:00 | 29 commits to main since this releasePrerelease for review — tag
daily-2026-10-24on commit9f697307805903e3074cd44e7d9d4b9430278c5c.What changed
Auditable corpus pipeline (issue #25, PR #85). The training-ingest script is now a corpus pipeline backed by
scripts/corpus_manifest.py:- Every ingested sample records consent (version + recorded-at), source kind and the raw-input digest — the caller's file path is never stored — both the raw and derived hashes, the derivation block (
timmy-ingest/2, jpeg, ≤1200 px, metadata stripped), the human review status, the split, and its lifecycle state, appended to an immutablemanifest.jsonl. --revoke <contribution-id> --reason …deletes the derived image and any raw pre-derivation copy (matched by digest, never by a path), keeps the original record as its own history, and appends a tombstone naming every removed artifact by contribution id + digest while droppinglabels,subjectKey, andrelativePath.active_records()filters anything tombstoned, so a trainer reading through the manifest cannot train on withdrawn data. Deletion is path-guarded against escaping the dataset root.- Illegal lifecycle moves are refused before any byte is written: a duplicate contribution id, a second label set for the same derived image, revoking twice, revoking an unknown contribution, reviving a revoked one, and revocation without a reason.
Scope note, stated plainly: this is a command-line / data-pipeline feature. There is no corpus screen in the app and this release does not imply one. The recorded demo runs the real
--inputand--revokecommands against the committed synthetic fixture and shows their actual output.Gates — all 22 passed
npm test217/217,tests/corpus-manifest.test.py8/8, mobile green path, photo-first acceptance, sleek Hermes chat, manual fallback + draft recovery, provisional suggestion state, hard-stool follow-up, vision corpus refusal, worker container receipts, worker post-load readiness, longitudinal pattern summary, grounded chat citations, training contribution consent, corpus manifest provenance, portable backup restore, dependency audit (0 high), syntax (node/bash/python), secret scan, forbidden artifacts, demo H.264 720×1280 probe, complete MP4 decode, release delta verified painted on camera.The corpus suite is now a release gate, not just CI:
scripts/build_release.pyruns it before anything is built.Artifacts
- source archive
timmy-talking-turd-2026-10-24-9f6973078059.tar.gz— 276,132 bytes — SHA-256e0f289e0e271b1639151d0984a5b5e026d011bedd2495194e65f833b6dc22390 - demo video
timmy-talking-turd-2026-10-24-9f6973078059-demo.mp4— 20,828,543 bytes — 333 s (332.72 s measured) — 720×1280 H.264 yuv420p — SHA-2565e0cd5010ffd6a3d7191e371d490e28bc86c6454b3d3aec51bec3cc6ebf5d5ff
Model / profile
Self-hosted profile
selfhost, model SmolVLM2-2.2B-Instruct. The recording runs withTIMMY_VISION_ENABLED=false: vision suggestions and refusals are exercised through the app's real client rendering, and the refusal cases replay the committed CC0 synthetic corpus through the real analysis module with the server response stubbed deterministically. No live model inference appears in the video, and no real photo is used anywhere.Demonstrated on camera
The whole existing user path (photo log with provisional suggestion, hard-stool follow-up and red-flag escalation, vision-offline fallback, corpus refusals and abstentions, explainable pattern summary with citations, grounded chat with source refs, private photo lifecycle, opt-in training contribution with withdrawal, versioned backup/restore/refusal) plus this release's new card:
ingestwrites one active sample record: consent version, source digest, both hashes, derivation, review, lifecycle — path never stored;--revokedeletesimages/<digest>.jpgfrom disk, keeps the original record, appends a tombstone that drops labels and the subject key, and leaves a trainer with 0 active samples;- a second
--revokeof the same contribution is refused — "contribution demo-contrib-0001-abcd is already revoked" — and the manifest stays at 2 lines.
Known accuracy limitation
Form, broad colour, and image-quality suggestions are observable-field assistance, never diagnosis: user confirmation stays mandatory, symptom answers and urgency are never inferred from the photo, and a red flag escalates in the app's own fixed words. Open-weight VLM acceptance is proven; Bristol accuracy is not clinically validated on this corpus.
The source package excludes model weights, medical-image corpora, raw research pages, generated screenshots, and video production assets.
Downloads
- Every ingested sample records consent (version + recorded-at), source kind and the raw-input digest — the caller's file path is never stored — both the raw and derived hashes, the derivation block (