Commit Graph

29 Commits

Author SHA1 Message Date
693e023758 fix: replace urgent regex patches with auditable expression grammar
All checks were successful
Quality gates / quality (pull_request) Successful in 3m31s
Second hostile review of 1aadca91 found nine ordinary urgent phrasings
bypassing the deterministic gate at detector and service layers, plus
punctuation-fragile contextual exclusions. Replace the accumulated
narrow regex table with a structured, versioned, frozen urgent-expression
grammar and one shared surface normalizer:

- normalizeUrgentText: case folding, apostrophe unification, contraction
  expansion (can't/cant/can not -> cannot, haven't -> have not, ...),
  hyphen splitting, punctuation stripping, whitespace collapse
- URGENT_EXPRESSION_GRAMMAR v2.0: per-flag ordered match expressions with
  bounded nonclinical anchor exclusions; anchors veto only the occurrence
  they sit beside (36-char window), so arbitrary future symptom language
  keeps escalating with no continuation-word allowlist
- new RED->GREEN coverage at every layer: 9 review phrases + 5 prior
  phrases with tense/plural/pronoun/word-order/case/contraction/
  punctuation variants, normalization-equivalence groups, anti-allowlist
  continuation sweep (147 combos), grammar structure audit, service
  zero-Hermes-call interception, and live-HTTP wiring proof with the
  bounded fake adapter (tests/escalation-http.test.js)

Gates: npm test 99/99, check:syntax, check:diff, audit 0 vulns,
staging-deploy 20/20, test:ui/test:photo/test:sleek against this
checkout. No merge, no deploy.
2026-08-22 23:24:51 +00:00
1aadca91c6 fix: escalate ordinary fever and pain phrasing without allowlist narrowing
All checks were successful
Quality gates / quality (pull_request) Successful in 1m59s
Hostile verification of the fever continuation-word allowlist found ordinary
symptom false negatives at the authoritative zero-Hermes-call boundary:
'I have a fever right now', 'my fever is 103', 'fever started this morning',
plus 'severe pain in/around the abdomen' against the hard-coded 'my' in the
pain pattern.

- fever: drop the continuation-word allowlist entirely; the bare clinical
  word escalates with any continuation. Nonclinical controls become
  structured exclusions (malaria/yellow/dengue/cabin compounds, fever tree,
  figurative 'feverish about'/'feverish with excitement'), so future natural
  symptom wording can never be narrowed again.
- severePain: accept any determiner or none plus location qualifiers
  (lower/upper/left/right) between preposition and organ.
- blood: differential audit against origin/main caught the same regression
  class in the PR's rewrite: 'poop/stool with blood' (escalated on main)
  was lost while 'my stool has been normal' / 'the poop contains seeds'
  became false positives. Restored explicit blood shapes with bounded verbs.

RED regressions first: matrix grows 56 -> 82 pinned positives (fever +20,
severePain +6 with case/punctuation/contraction variants), a pinned
preserved-behavior list for main's blood shapes, and two boundary suites
proving every review phrase and variant escalates at the detector AND
intercepts chat at the service layer with exactly zero Hermes calls.

Gates: npm test 90/90, staging-deploy 20/20 OK, test:ui/test:photo/
test:sleek pass, check:syntax clean, check:diff clean, npm audit 0
vulnerabilities, diff secret scan clean.
2026-08-22 21:46:11 +00:00
e05d7d1e1a test: expand deterministic symptom escalation regression suite
All checks were successful
Quality gates / quality (pull_request) Successful in 1m28s
Issue #21 (epic #5). Prove model behavior can never suppress or soften
urgent symptom handling.

- Pin the six authoritative red flags, their canonical order, and the
  exact urgent copy as read-only exports; hostile provider output
  cannot reassemble it.
- Grow the positive text matrix from 24 to 56 pinned clinical phrases
  across all flags (bloody stool, dark-red/black descriptions, severe
  abdominal pain variants, vomiting tenses/slang, fever phrasings,
  inability to pass gas) and pin 27 idiomatic negatives that must not
  escalate (threw up my hands, yellow fever history class, black tea).
- Authoritative boundary suite: every red-flag phrase and confirmed
  ledger symptom/note intercepts chat with zero Hermes calls;
  malicious/missing provider replies cannot weaken the deterministic
  response; truthy junk symptoms can neither fabricate nor suppress
  escalation.
- Wiring suite: the single chat gate screens urgency before any agent
  turn in both service and browser code; detection stays centralized
  in the frozen domain pattern table.

RED evidence: URGENT_MESSAGE unexported, 9 matrix misses (bleeding from
my rectum, bloody stool/poop, severe pain in my abdomen), 8 false
positives (I threw up my hands, feverish about the election).

GREEN: 87/87 npm test, syntax/diff gates clean, 0 vulnerabilities,
browser suites pass with zero /api/agent/chat calls on urgent input.

Closes #21
2026-08-22 20:57:04 +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