Commit Graph

30 Commits

Author SHA1 Message Date
643f774c78 ci: load deployment smoke module correctly
Some checks failed
Quality gates / quality (pull_request) Failing after 3m9s
2026-08-23 00:00:00 +00:00
f7a018de7e ci: provision pinned image runtime
Some checks failed
Quality gates / quality (pull_request) Failing after 2m49s
2026-08-22 23:43:31 +00:00
517c8dbac3 Harden image ingress: pinned runtime, header-bomb rejection, concurrency ceiling, bounded rate limiter, canonical data-URL/polyglot contract, 503-on-unavailable, body-read timeout
Some checks failed
Quality gates / quality (pull_request) Failing after 2m39s
Closes the PR 63 hostile-review blockers:
1. Immutable pinned Python/Pillow runtime (TIMMY_PYTHON absolute, --verify-pin),
   deployment/runtime re-encode smoke gate in build_release + deploy_staging.
2. Header-only width/height/total-pixel/bomb rejection before full decode; proves
   6000x6000 and 12000x12000 stay resource bounded (RSS + address-space caps).
3. Fail-fast decoder concurrency ceiling; tests count actual spawned children.
4. Rate-limiter key cardinality hard-bounded under 20k+ unexpired identities,
   trusted-loopback-proxy identity, no spoofable forwarded headers, fixed-window
   boundary burst smoothed by two-window sliding count.
5. build_release explicitly syntax/gates every new JS module + Python re-encoder +
   production-runtime smoke; CI runs reencode-image test and the runtime pin smoke.
6. Robust polyglot contract via canonical container parsing; rejects uppercase/mixed
   script, appended HTML, ZIP local/EOCD and archive tails, data after canonical
   JPEG/PNG/WebP end; no naive compressed-byte scans (false-positive controls pass).
7. Canonical base64 data-URL grammar with byte-exact round trip; rejects missing/excess
   padding, whitespace/CRLF, malformed and noncanonical encodings; exact MIME policy.
8. Missing Pillow / runtime-unavailable maps to sanitized 503 + manual fallback.
9. Inbound body-read timeout and stop-on-oversize; preserves sanitized 413, base path,
   provider suppression, and temp cleanup; socket torn down on rejection.

Audited prior partial edits: reused the sound source modules, re-wired new tests into
the unit/syntax gates, fixed a non-canonical readJson that destroyed the socket before
delivering 413/408, and hardened test flakiness (port reuse, EPIPE, startup races).
2026-08-22 23:22:42 +00:00
timmy
ccb227921e feat: harden image ingress with magic-byte validation, safe re-encode, limits, and rate control
Some checks failed
Quality gates / quality (pull_request) Failing after 1m38s
- src/image-ingress.js: sniff magic bytes independent of declared MIME,
  reject polyglots (embedded ZIP/script payloads), enforce 4 MB body cap
  and 4096 px dimension cap before decode, re-encode via fixed-argv
  Pillow subprocess with 15s timeout, strip EXIF/GPS/XMP/tEXt metadata,
  fail closed with sanitized short errors and manual fallback.
- scripts/reencode_image.py: defensive decoder; decompression-bomb
  guarded; prints one JSON verdict line, never image bytes.
- src/rate-limiter.js + server.mjs /api/analyze: bounded fixed-window
  per-client limiter, 429 with retry-after, no payload retention.
- tests/image-ingress.test.js: hostile synthetic fixtures only
  (spoofed MIME, GIF/ZIP polyglots, truncated/garbage/empty images,
  12000x12000 bomb, 6000x6000 oversized, EXIF+GPS, SVG-with-script);
  asserts provider is never reached on rejection and error messages
  contain no bytes/base64/stacks.

Closes #16
2026-08-22 21:43:36 +00:00
47294a98aa Merge pull request 'Make staging runtime configuration compatible with strict CSP' (#59) from timmy/58-strict-csp-runtime-config into main
All checks were successful
Quality gates / quality (push) Successful in 1m56s
2026-08-21 15:04:43 +00:00
877b8a01f3 fix: make staging compatible with strict CSP
All checks were successful
Quality gates / quality (pull_request) Successful in 1m37s
2026-08-21 15:01:05 +00:00
067afaed4c Merge pull request 'Hardened atomic private-staging deployment tooling' (#56) from timmy/55-staging-deployment-tooling into main
All checks were successful
Quality gates / quality (push) Successful in 1m41s
2026-08-21 14:54:11 +00:00
f8f01c4b2e feat: add hardened atomic staging deployment
All checks were successful
Quality gates / quality (pull_request) Successful in 1m28s
2026-08-21 14:49:28 +00:00
fc763fb758 Merge pull request 'Private subpage staging foundation' (#54) from timmy/53-private-subpage-staging into main
All checks were successful
Quality gates / quality (push) Successful in 2m7s
2026-08-21 14:16:15 +00:00
7e11154302 feat: add private subpage staging slice
All checks were successful
Quality gates / quality (pull_request) Successful in 1m43s
2026-08-21 14:12:17 +00:00
11d1b364ab fix: gate bootstrap syntax in release build
All checks were successful
Quality gates / quality (push) Successful in 1m45s
2026-08-21 12:56:48 +00:00
8e3c2f8889 Merge pull request #52 from timmy/10-reproducible-smolvlm-bootstrap
Some checks failed
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
982fab273c feat: package pinned self-host vision bootstrap
All checks were successful
Quality gates / quality (pull_request) Successful in 1m30s
2026-08-21 08:15:32 +00:00
ca31e6d38b Merge pull request 'Hotfix: recognize past-tense vomiting in deterministic chat safety' (#51) from timmy/48-vomiting-phrase-hotfix into main
All checks were successful
Quality gates / quality (push) Successful in 1m26s
2026-08-20 17:17:33 +00:00
0f3104ebde fix: recognize past-tense vomiting in chat safety
All checks were successful
Quality gates / quality (pull_request) Successful in 1m21s
2026-08-20 17:14:20 +00:00
cc1fc6ee36 Merge pull request 'Hotfix: enforce deterministic urgent-symptom override at the server boundary' (#50) from timmy/48-server-safety-override into main
All checks were successful
Quality gates / quality (push) Successful in 1m24s
2026-08-20 16:48:02 +00:00
05b4bafd96 fix: enforce urgent chat override server-side
All checks were successful
Quality gates / quality (pull_request) Successful in 1m25s
2026-08-20 16:41:35 +00:00
09f9528434 Merge pull request 'Sleek Timmy mobile shell and secure Hermes Agent chat' (#49) from timmy/47-sleek-hermes-agent into main
All checks were successful
Quality gates / quality (push) Successful in 1m32s
2026-08-20 16:25:47 +00:00
a50afa6722 feat: simplify Timmy and add secure Hermes chat
All checks were successful
Quality gates / quality (pull_request) Successful in 1m24s
2026-08-20 16:21:00 +00:00
930f156590 Merge pull request 'Document product boundary and release authority' (#46) from timmy/9-product-boundary-decisions into main
All checks were successful
Quality gates / quality (push) Successful in 1m26s
2026-08-20 13:15:22 +00:00
3c51308a9e docs: fix product boundary and release authority
All checks were successful
Quality gates / quality (pull_request) Successful in 1m14s
2026-08-20 08:32:16 +00:00
8ab1e85bd1 Merge pull request #45: enforce reproducible quality gates
All checks were successful
Quality gates / quality (push) Successful in 1m18s
2026-08-19 12:06:38 +00:00
47eec47a31 ci: install pinned image test dependency
All checks were successful
Quality gates / quality (pull_request) Successful in 1m12s
2026-08-19 08:14:43 +00:00
29ba8594b8 ci: enforce reproducible quality gates
Some checks failed
Quality gates / quality (pull_request) Failing after 1m56s
2026-08-19 08:09:38 +00:00
535834c060 feat: require verified feature demo video in every release 2026-08-19 03:36:04 +00:00
ce84ea577c test: isolate photo acceptance from service workers 2026-08-19 03:02:33 +00:00
3899eac34f fix: start isolated server for release acceptance gates 2026-08-19 03:01:28 +00:00
074f52fddc build: add gated reproducible review releases 2026-08-19 03:00:54 +00:00
0ecf1d1205 docs: add Gitea roadmap and epic map 2026-08-19 02:00:40 +00:00
58906f11d0 feat: ship photo-first Timmy prototype and sovereign vision spike 2026-08-19 01:54:29 +00:00