• Timmy review release 2026-11-01 (verified rebuild; no source change)
    Quality gates / quality (push) Canceled after 0s
    Pre-Release

    rockachopa released this 2026-11-01 12:52:42 +00:00 | 5 commits to main since this release

    Prerelease for review — tag daily-2026-11-01 on commit 9067ce53067473467d7cc6a0cc681e8ff2054af6 (America/New_York release date 2026-11-01, built 2026-11-01T12:34Z).

    This is a verified rebuild; no source change. main is at the same commit daily-2026-10-31 shipped, 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 main with git merge-tree; all 7 conflict. Gitea's own mergeable field agreed (false on 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 a scope row 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.js reported "/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 1 as 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 test 277/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 3e2253a on branch timmy/19-privacy-safe-metrics, plus a patch/tarball copy under /root/timmy-releases/_preserved-local-wip/) and main was built clean.

    Gates — 29/29 passed

    npm test 277/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.mjs held 127.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 (the timmy-staging.service unit has been inactive since August) that host Caddy routes timmy.alexanderwhitestone.com to. It was stopped for the build and restarted afterwards; the public preview answers 200 again.

    Artifacts

    • source archive timmy-talking-turd-2026-11-01-9067ce530674.tar.gz — 371,253 bytes — sha256 cb5c868359b80e8a462f1fac5c31b7b96225251714a47f8c6cbbffe2144fc4ca
    • 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 — sha256 691deae333c3511766f98d710d089b7b84014b51d13ca8d0914649dfaac9dfb9

    Both hashes were re-verified with sha256sum -c SHA256SUMS after the build, and the demo was probed for codec, pixel format, dimensions, and duration.

    Model / profile

    Built and recorded by Hermes (profile default, model deepseek-flash). The demo runs the real app from the built commit with TIMMY_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-hosted SmolVLM2-2.2B-Instruct (pinned GGUF) with the hosted profile as fallback. The IMAGE INGRESS, REFUSED BY THE SERVER card 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 scope row — 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 BLOCKED because 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