• Timmy daily-2026-10-24 — auditable corpus manifest
    Quality gates / quality (push) Successful in 12m45s
    Pre-Release

    rockachopa released this 2026-10-24 13:03:55 +00:00 | 29 commits to main since this release

    Prerelease for review — tag daily-2026-10-24 on commit 9f697307805903e3074cd44e7d9d4b9430278c5c.

    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 immutable manifest.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 dropping labels, subjectKey, and relativePath. 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 --input and --revoke commands against the committed synthetic fixture and shows their actual output.

    Gates — all 22 passed

    npm test 217/217, tests/corpus-manifest.test.py 8/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.py runs it before anything is built.

    Artifacts

    • source archive timmy-talking-turd-2026-10-24-9f6973078059.tar.gz — 276,132 bytes — SHA-256 e0f289e0e271b1639151d0984a5b5e026d011bedd2495194e65f833b6dc22390
    • 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-256 5e0cd5010ffd6a3d7191e371d490e28bc86c6454b3d3aec51bec3cc6ebf5d5ff

    Model / profile

    Self-hosted profile selfhost, model SmolVLM2-2.2B-Instruct. The recording runs with TIMMY_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:

    • ingest writes one active sample record: consent version, source digest, both hashes, derivation, review, lifecycle — path never stored;
    • --revoke deletes images/<digest>.jpg from 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 --revoke of 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