SOURCE / PINNED RELEASE
Made of little things.
Body Journal
- Release
- e8049f8da4e2…
- Author-recorded commit
- 61c04bf0e8aa…
- License
- LICENSE
- Author’s source reference
- nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-6c4554844c7
Archive hash verified: 4369d778da046a8b…. The source-to-build association is the author’s claim; it has not been independently rebuilt.
# Photos, richer reports and example cases
## Feature brief
Purpose: complete an adult symptom record with reviewed photo evidence, explicit
timing, detailed AI assessment and a plain-language explanation.
Preserve the app-owned white, off-black and reddish-orange visual direction.
Remove the bottom bar; keep steps, session status, case count, prototype label and
next action in a responsive header. Examples live outside the 3D viewport.
Photos use the published SDK's optional `fs.pickFile`, chunked `fs.read` and
`fs.remove`. SDK 0.30.0 supplies the previously missing wrappers. Only user-selected
JPEG/PNG/WebP files are decoded. A bounded, metadata-free JPEG copy is saved in the
same atomic session record through `storage.setItem`; no public upload, direct
network, browser database or new protocol domain. The host has no encryption
guarantee. Originals are untouched. Missing fs disables import; missing storage
means session-only copies. Quota failures must remain visible and preserve edits.
Maximum four optimized photos, 65,000 data-URL characters each, with actual total
session size checked before import. Display resulting dimensions and allow review,
caption/date edits, case/concern assignment, replacement, removal and AI inclusion.
AI evidence carries a trusted application category distinguishing patient photos
from schematic body maps. The review shows exactly which images will be sent;
text-only requests explicitly omit pixels. Bridge protocol 3 prevents an older
bridge from labeling photos as drawings. No new automatic provider calls.
The detailed report schema adds history, evidence/missing information, separate
concern assessments, differential support/conflicting evidence, suggested clinical
evaluation with rationale, safety-net advice and a simple-language summary.
It never impersonates a clinician, claims an examination, invents results or
turns a model's suspicion into a confirmed diagnosis. Older saved reports remain
readable. Rendering escapes all model text.
Timing preserves exact date, approximate start, free text and an explicit
patient-reported chronic/long-term choice independently. Blank means unknown.
Synthetic example templates preview full intake and grouped observations before
loading; replacing a populated case requires an explicit in-app confirmation.
Examples are clearly labeled and never start inference automatically.
Hard requirements: unchanged (none). Optional domains: storage, config, cvm, fs.
Relay escape hatches: none. CVM remains the existing encrypted AI bridge route.
Test actual hosted desktop/touch frames, both themes, missing optional domains,
photo reload/removal/failure, reviewed transmission, schema migration and timing.
## Verification, 2026-10-26
- `pnpm verify`: 83 tests passed (6 guidance, 5 case, 18 AI, 6 evidence,
7 skin, 5 gestures and 36 anatomy/layer tests), plus type-check and build.
- `pnpm test:conformance`: 5 passed, 0 failed, 5 skipped. Manifest event,
wire-envelope and teardown evidence were not supplied to the conformance run;
those checks are not claimed as passed.
- Hosted `test:evidence:ui`: actual SDK picker cancellation, invalid-file recovery,
chunked PNG and WebP reads, JPEG optimization, caption/date/observation editing,
opt-in sharing, replacement, removal and reload persistence. Required frames
200×160, 320×560, 900×600 and 1600×1000 in both host themes; touch emulation
390×844, 360×640 and 844×390; missing fs/storage/theme fallback. Example preview,
replacement cancellation and starting a blank case were exercised.
- `test:ai:ui`: reviewed patient photos and body-map categories, opt-out, text-only
pixel omission, report/simple-language rendering, escaped model text, stale
reports, saved-report migration and reload without another request. Synthetic
vendor only; zero real vendor requests and no browser page errors.
- `test:ai:transport`: real encrypted ContextVM handshake, chunk staging,
asynchronous jobs, actor isolation and idempotency through a loopback relay
with synthetic vendor responses.
- `soyli check`: passed `space-playback-6` with Chromium 153.0.8010.12.
Final self-contained HTML: 19,045,286 bytes, no external script tags, SHA-256
`211440fff5e5d24b53b082ecdeb8d48b3f7ee74dfd8a3ba134aa2a74ec2f3ab5`.
The Vite size advisory reflects the embedded 3D anatomy assets.
Report and narrow photo-editor screenshots were visually inspected. All records,
images and credentials used in checks were synthetic. These checks establish
software behavior, not clinical accuracy, live vendor compatibility or behavior
on physical phones. PDF import/export and original-resolution photo storage are
not implemented. The existing user-owned soyLI preview was reused and left
running; test browser sessions were closed. No publication or remote push.
