-
Timmy review release 2026-11-01 (verified rebuild; no source change)
Pre-ReleaseQuality gates / quality (push) Canceled after 0sreleased this
2026-11-01 12:52:42 +00:00 | 5 commits to main since this releasePrerelease for review — tag
daily-2026-11-01on commit9067ce53067473467d7cc6a0cc681e8ff2054af6(America/New_York release date 2026-11-01, built 2026-11-01T12:34Z).This is a verified rebuild; no source change.
mainis at the same commitdaily-2026-10-31shipped, and this run re-proved it rather than asserting it: the full gate list re-ran from a fresh clone of that commit, a new recording was captured from the app running out of that clone, and both new artifacts carry new hashes. Nothing in the app changed, so nothing is claimed to have changed.Why there is no new feature today
The nightly job looked for shippable work and found none it could honestly merge:
- 7 open PRs were inspected (#79, #65, #64, #63, #62, #61, #60). Each was merge-tested against
mainwithgit merge-tree; all 7 conflict. Gitea's ownmergeablefield agreed (falseon all 7). None can be merged without a rebase and re-review, so none was merged and none was force-merged. - No branch carried a clean, reviewed, non-conflicting diff against this commit.
So the release ships the same tree as yesterday and says so on camera, in the recording's own caption bar.
What the recording proves about the current feature path
The demo replays the boundary the current tree actually ships — the image-ingress refusal from issue #16 — and shows it at both layers:
- a file that only claims to be a photo is refused on the device, nothing uploaded;
- the same bytes are then posted straight to the running server, bypassing the device guard, and the server refuses them too.
The card on screen is not a fixture. It is one real HTTP request to the app running in this recording, and it prints what that response returned:
status 400 refused,code not_an_image,copy That file is not a JPEG, PNG, or WebP photo.,provider never called,budget counted by the per-device limiter,after the journal, the draft, and manual logging are untouched, plus ascoperow naming which cases this single probe does not cover (polyglot tails, embedded metadata, dimensions, body size, rate limit — all asserted in the suite instead of implied by the card).The rest of the path is unchanged and still on camera: provisional AI suggestions with user confirmation, non-diagnostic hard-stool follow-up, abstention and fail-closed vision replies, explainable pattern summaries that cite the logs they counted, grounded chat, opt-in training contribution, versioned backup/restore, the corpus audit card, and the blind review ledger.
What the release job had to correct before it could ship
Stated plainly, because it was a real gate failure and not a formality:
The unit gate failed once, and the failure was host contention — proven, not assumed. The first full build stopped at
npm test(276/277):tests/staging-health.test.jsreported"/timmy/./nested" was accepted. That test spawns 19 servers and gives each 800 ms to exit with a refusal, on a 4-core box that was at load average 6–7 from unrelated agent workloads.- Proven to be contention, not a regression: running the server directly with that value exits 1 immediately with
TIMMY_BASE_PATH must not contain traversal segments— the value is rejected. - Proven to be load-sensitive: the file passes alone repeatedly at lower load and fails at the same assertion when load climbs (
# pass 6 / # fail 0, twice, then# fail 1as load hit 5.5). - The gate was re-run whole, not loosened, skipped, or edited. No deadline was raised, no test was excluded, no source was changed. The entire 12-minute build was re-run from the top and came back green:
npm test277/277.
Completed ticket / PR
- None. No PR was merged in this run, by design. All 7 open PRs conflict with
main(see above) and nothing was force-merged to manufacture a delta. - Local work in progress toward #19 (privacy-safe model metrics) was found uncommitted in the canonical checkout. It was not shipped — it is unreviewed, has no PR, and merging it would have bypassed review. It was preserved intact (snapshot commit
3e2253aon branchtimmy/19-privacy-safe-metrics, plus a patch/tarball copy under/root/timmy-releases/_preserved-local-wip/) andmainwas built clean.
Gates — 29/29 passed
npm test277/277; image ingress refusal; mobile green path; photo-first acceptance; sleek Hermes chat; manual fallback + draft recovery; provisional suggestion state; hard-stool follow-up; vision corpus refusal; abstention quality gate; worker container receipts; worker post-load readiness; longitudinal pattern summary; grounded chat citations; training contribution consent; corpus manifest provenance; reviewer adjudication blind; dataset card; calibration harness; operator backup restore; production runbook commands; 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 (99/99 captions, delta caption 1 line, top 14 px, 42 px band, padBottom 14 px).The build refused to start while a leftover
node server.mjsheld127.0.0.1:4173— the port check that stops a demo from being recorded against a different tree. That listener was an orphaned ad-hoc run (thetimmy-staging.serviceunit has been inactive since August) that host Caddy routestimmy.alexanderwhitestone.comto. It was stopped for the build and restarted afterwards; the public preview answers200again.Artifacts
- source archive
timmy-talking-turd-2026-11-01-9067ce530674.tar.gz— 371,253 bytes — sha256cb5c868359b80e8a462f1fac5c31b7b96225251714a47f8c6cbbffe2144fc4ca - demo video
timmy-talking-turd-2026-11-01-9067ce530674-demo.mp4— 29,482,868 bytes — H.264 720×1280 yuv420p, 25 fps, 477.60 s, no audio track — sha256691deae333c3511766f98d710d089b7b84014b51d13ca8d0914649dfaac9dfb9
Both hashes were re-verified with
sha256sum -c SHA256SUMSafter the build, and the demo was probed for codec, pixel format, dimensions, and duration.Model / profile
Built and recorded by Hermes (profile
default, modeldeepseek-flash). The demo runs the real app from the built commit withTIMMY_VISION_ENABLED=false; vision replies replay the committed CC0 synthetic corpus through the app's real analysis path, and the configured vision profile remains self-hostedSmolVLM2-2.2B-Instruct(pinned GGUF) with the hosted profile as fallback. TheIMAGE INGRESS, REFUSED BY THE SERVERcard is a real HTTP response, not a fixture — but it measures the refusal boundary, not model quality. No live inference appears in the video and no real photo or medical image is used anywhere; every log, note, and photo placeholder on screen is synthetic.Review focus
Watch the first minute: the delta caption, then the device guard, then the server card. The specific thing to check is the honesty of the
scoperow — it should say the probe covers a non-image container while the other ingress controls are asserted in the suite. If that reads as over-claiming, it needs rewording before this path goes public.Known accuracy limitation
Unchanged by this release, and not made better by it. Bristol accuracy is not clinically validated; the calibration receipt still reports
BLOCKEDbecause no candidate model clears every gate. User confirmation remains mandatory everywhere: photo analysis may suggest visible Bristol form, broad color, and image quality only, and never symptoms or a diagnosis. Visible color is not blood. The release packages no model weights and no medical imagery.Downloads
- 7 open PRs were inspected (#79, #65, #64, #63, #62, #61, #60). Each was merge-tested against