Commit Graph

255 Commits

Author SHA1 Message Date
slhx agent d0dc9729fd docs: explain reusable partials
Add the public 'Where are my components?' answer: hemx maps framework component jobs to hemplate partials, generated helpers, app-owned state, IntoEffect composition, and explicit leaf islands. The pre-commit guard now only blocks commits that change REQUIREMENTS.md without an AGENTS.md review, so unrelated follow-up commits are not trapped by old history.

req: canonical_authoring/002

req: canonical_authoring/003
2026-06-12 14:40:25 +02:00
slhx agent 8f96169b03 feat(core): compose effect collections
Support Vec<T: IntoEffect> and [T; N] batches so dynamic reusable partial updates compose inside the existing effect model without a broad IntoIterator blanket impl.

req: canonical_authoring/003
2026-06-12 14:36:58 +02:00
slhx agent f343e8aaee fix(workout): verify created app mobile blockers
Make the standalone hemx-workout command generated by workout new carry external blocker acknowledgements in release-manifest.json and fail mobile-verify when the manifest or BLOCKERS.md omits current Android/iOS signing/toolchain blockers.

req: examples/006
2026-06-12 13:57:14 +02:00
slhx agent 4bbf417531 feat(workout): make created apps self-service
Write a standalone hemx-workout command into created apps and verify it carries dev, test, build, mobile-release, mobile-verify, runtime integrity, and store blocker checks outside the monorepo.

req: examples/006
2026-06-12 13:32:12 +02:00
slhx agent 3f0cf0a7cb feat(workout): give created apps their release command
Write a standalone hemx-workout command into created Workout apps so new app owners keep the same dev, test, build, mobile-release, mobile-verify, and doctor surface outside the monorepo.

req: examples/006
2026-06-12 13:23:57 +02:00
slhx agent a4a4dcf74f feat(workout): hide registry conversion from golden path
Let the Workout generated interaction builder satisfy DispatchRegistry directly and guard canonical sources/docs against .into_registry() so the beginner path does not teach manual registry conversion.

req: examples/001

req: examples/006

req: public_api/002
2026-06-12 13:08:46 +02:00
slhx agent f13e21868c feat(workout): surface store submission blockers
Record Google Play and App Store Connect submission targets as external mobile blockers, and make verification require those blockers to be acknowledged in the release kit.

req: examples/006
2026-06-12 12:57:13 +02:00
slhx agent 815392b232 feat(workout): record runtime asset integrity
Write and verify asset-integrity.tsv for the Workout mobile release kit using the actual hemx runtime path and SHA-256 digest, so mobile shell review has inspectable runtime integrity evidence.

req: examples/006
2026-06-12 12:52:26 +02:00
slhx agent f8f1a9aee5 feat(workout): create standalone app path
Add a workout new PATH command that copies the Workout exemplar into a standalone app with local hemx path dependencies, verifies its manifest in xtask tests, and documents the create/check path.

req: examples/001

req: examples/006
2026-06-12 12:46:06 +02:00
slhx agent d4e99b6e73 feat(workout): gate mobile verification on product tests
Make workout mobile-verify rerun the Workout product tests before release-kit checks so app value, recovery, local state, and host capability boundaries fail closed with mobile artifacts.

req: examples/001

req: examples/006

req: host/002

req: local/001
2026-06-12 12:35:41 +02:00
slhx agent 2b9979e339 fix(workout): make mobile verification fail closed
Make workout mobile-verify reject non-HTTPS origins and release kits that omit detected external signing/toolchain blockers, so verification checks objective release preconditions instead of pretending to predict store approval.

req: examples/006
2026-06-12 12:31:19 +02:00
slhx agent 32fa1a4952 feat(workout): include host result contract in mobile kit
Record share/haptics and the denied/timeout/unavailable/error host result kinds in Android and iOS release metadata, and make mobile verification require them.

req: examples/006

req: host/002
2026-06-12 11:26:34 +02:00
slhx agent 860a4edf61 feat(workout): unify release command surface
Route local dev, tests, production build, mobile release, mobile verification, and doctor through one Workout xtask surface, and update the canonical docs around that surface.

req: examples/001

req: examples/006

req: test/004
2026-06-12 11:20:22 +02:00
slhx agent 5a42f2664a feat(workout): verify mobile release kit
Add a workout-mobile verify command that checks the generated release kit and server artifact, then document it beside release/doctor so the mobile path has a recurring gate.

req: examples/006
2026-06-12 11:12:18 +02:00
slhx agent f2b6aa1aef feat(workout): add mobile release kit command
Add one canonical Workout mobile release command that builds the production server and writes Android/iOS shell metadata, explicit production policy, and honest external signing/toolchain blockers.

req: examples/001

req: examples/006

req: host/002

req: local/001
2026-06-12 11:02:31 +02:00
slhx agent a28eb78ded docs(local): describe projections before generated effects
Keep local/offline and host capability recipes on app-owned command/event/projection flow without teaching raw EffectBatch as the authoring boundary.

req: local/001

req: local/002

req: host/002
2026-06-12 08:00:49 +02:00
slhx agent 21100aafdf feat(host): unify typed failure results
Represent denied, timeout, unavailable, and error host outcomes with one HostFailure result shape, update the browser adapter, and keep Workout host recovery flowing through app code before UI effects.

req: host/002

req: host/005

req: local/003
2026-06-12 07:58:44 +02:00
slhx agent cc97330bd1 feat(api): keep page helper out of prelude
Keep the beginner prelude focused on generated authoring primitives by leaving page-boundary rendering as an explicit helper instead of a glob-import default.

req: dx/006

req: public_api/005
2026-06-12 07:41:27 +02:00
slhx agent f32ae15c29 feat(api): keep raw tokens out of prelude
Move generated metadata tokens behind a hidden compatibility export and tighten the public contract test so the beginner prelude stays focused on generated authoring, Html, forms, navigation, and IntoEffect.

req: dx/006

req: public_api/005
2026-06-12 07:39:36 +02:00
slhx agent 7be1c9c649 feat(build): make generated page helper canonical
Move canonical examples and docs snippets from raw render/page calls to generated ui::page helpers, hide generated render behind doc(hidden), and let form resources participate in generated target inspection for tests.

req: canonical_authoring/005

req: dx/006

req: codegen/002

req: public_api/002

req: test/001
2026-06-12 07:31:39 +02:00
slhx agent 4a8442c5f9 feat(build): generate page-boundary helper
Expose generated ui::page as the canonical page-boundary rendering helper and move the Workout golden path and docs off beginner-visible ui::render calls.

req: public_api/002

req: codegen/002

req: canonical_authoring/006
2026-06-12 07:18:38 +02:00
slhx agent 176259afd6 test(workout): prove double-action focus recovery
Extend the browser gate to cover double primary action recovery, post-update phone hierarchy, visible focus rings, and no-motion behavior; keep a unit proof for undoing accidental double advance.

req: examples/001

req: local/001

req: local/004
2026-06-11 23:56:20 +02:00
slhx agent 7a44c3ee9e test(workout): gate phone-first browser flow
Add a real browser smoke for the workout exemplar that checks phone and wide viewport hierarchy, thumb-sized primary action, hidden host proof panel, and recovery interactions through hemx runtime.

req: examples/001

req: local/001

req: host/002
2026-06-11 23:47:55 +02:00
slhx agent 58b0c70709 test(workout): prove skipped exercise recovery
Cover skip-and-undo as a recoverable workout mistake so the product recovery surface is guarded alongside invalid input, edit-last-set, host failures, and replay failures.

req: examples/001

req: local/001

req: local/004
2026-06-11 23:39:34 +02:00
slhx agent 1289106ed4 feat(workout): correct last set from local events
Add a recovery path for mistyped completed-set weight: append a typed correction event, replay it through the local projection, and make undo restore the previous session state.

req: examples/001

req: local/001

req: local/003

req: local/004
2026-06-11 23:34:17 +02:00
slhx agent 900ae9f51f feat(workout): make finish export a product state
Promote the finish/export card from static copy into session-aware product state and extend the HTTP exemplar through full finish, export, and replay.

req: examples/001

req: local/001

req: local/003

req: local/004
2026-06-11 23:29:09 +02:00
slhx agent c146e9b932 feat(workout): recover common session failures
Make the workout exemplar recover cleanly from invalid edits, accidental double-advance, replay parse failures, and denied or timed-out host export results while keeping local events as truth.

req: examples/001

req: local/001

req: local/003

req: local/004

req: host/002

req: host/005
2026-06-11 23:25:21 +02:00
slhx agent a514237b09 feat(workout): complete mobile session flow
Make Workout Copilot behave like a finished phone-first session: rest/next state, progress, undo recovery, finish/export, replayable local log, and host proof controls tucked behind product states.

req: examples/001

req: local/001

req: local/003

req: local/004

req: host/002
2026-06-11 23:15:55 +02:00
slhx agent bf7560b7a8 docs(runtime): align docs with hashed runtime asset
Replace fixed /hemx.js wording with helper-provided runtime asset language so docs match hemx-axum runtime_js_path deployment boundaries.

req: axum_integration/005

req: examples/001
2026-06-11 22:38:37 +02:00
slhx agent 4254327cc7 refactor(examples): hide workout dispatch details
Keep the workout binary to page/runtime/interaction plumbing by moving generated handle dispatch behind an app-owned interactions function, while preserving typed form adapters and full verification.

req: codegen/002

req: examples/001
2026-06-11 22:19:17 +02:00
slhx agent 189bdf5eea feat(examples): polish workout phone UI
Give the workout exemplar a durable gym-floor command-slate direction, serve focused CSS, keep the first viewport centered on one action, and extend the HTTP E2E to verify stylesheet delivery.

req: examples/001

req: local/001

req: local/003

req: host/002
2026-06-11 22:03:18 +02:00
slhx agent 0f8d07d36f feat(axum): start stateful interactions tersely
Add state_interactions as a small helper for app-owned stateful registries, and use it in the workout exemplar to remove one layer of repetitive route wiring without hiding generated handles or app handlers.

req: axum_integration/003

req: ceremony/001

req: dx/003

req: codegen/002

req: examples/001
2026-06-11 21:55:29 +02:00
slhx agent d991addbb5 refactor(examples): shrink workout route wiring
Move workout interaction wiring behind an app-owned registry function and use typed form adapters so the runnable binary no longer carries repetitive per-handler closure boilerplate.

req: codegen/002

req: examples/001
2026-06-11 21:44:11 +02:00
slhx agent 5e4f02f419 docs(examples): avoid low-level workout wording
Keep the workout exemplar docs aligned with canonical example guidance by describing persisted truth without teaching low-level update payload terminology.

req: examples/003

req: examples/005

req: local/001
2026-06-11 21:09:59 +02:00
slhx agent d38b66bf27 docs(examples): document workout run and deploy path
Add the workout exemplar README with run, browser, test, deploy, and boundary notes so the product example is usable without guessing commands or hidden runtime assumptions.

req: examples/001

req: examples/005

req: local/001

req: local/003

req: host/005
2026-06-11 21:05:28 +02:00
slhx agent d5b74496ab feat(examples): add workout replay e2e
Wrap the workout page with the shared runtime, add export replay over command/event truth, and cover the running HTTP app with an end-to-end test that exercises runtime asset loading and product interactions.

req: examples/001

req: local/001

req: local/003

req: local/004

req: host/001
2026-06-11 21:02:50 +02:00
slhx agent 18095ea742 fix(examples): satisfy canonical workout contracts
Keep the workout example inside canonical example wording rules while preserving the native-shell host path and full xtask verification.

req: examples/003

req: examples/005

req: host/001

req: host/005
2026-06-11 20:50:40 +02:00
slhx agent e76a564add feat(examples): add native-shell workout host path
Extend the workout exemplar with a native-shell haptic request and acknowledgment path that validates the host manifest and returns through app code without owning workout state.

req: host/001

req: host/002

req: host/004

req: host/005

req: examples/001
2026-06-11 20:43:14 +02:00
slhx agent 19bf47ec72 feat(examples): add workout copilot exemplar
Add a runnable phone-first workout example that keeps local workout truth as commands, domain events, and projections, routes export through the host capability boundary, and documents how to open it in the browser.

req: examples/001

req: local/001

req: local/003

req: local/004

req: host/001

req: host/005
2026-06-11 20:38:06 +02:00
slhx agent 40b9bcb5fd fix(test): match hashed runtime asset selector
Update the shared test selector to accept hemx-axum's content-hashed runtime script path instead of the old fixed /hemx.js path.

req: axum/005

req: test/001
2026-06-11 19:58:54 +02:00
slhx agent c730a868e5 fix(examples): keep host demo inside example contracts
Remove direct browser host script loading from the canonical app shell and avoid forbidden low-level terms in runtime example code while preserving the typed host and local flows.

req: examples/005

req: examples/003

req: host/001

req: local/004
2026-06-11 19:55:45 +02:00
slhx agent 1ec68d400c feat(local): decide local stays app territory
Define local/offline truth as commands, domain events, and projections rather than stored DOM patches or EffectBatch payloads; wire the techdemo through a local command-to-projection-to-effect flow; document that hemx-local is not a crate until reusable semantics are proven.

req: local/001

req: local/002

req: local/003

req: local/004

req: examples/001
2026-06-11 19:52:21 +02:00
slhx agent 64a736ffcb feat(local): model local command log boundary
Define local/offline truth as commands, domain events, and projections rather than stored DOM patches or EffectBatch payloads, and wire the techdemo through a local command-to-projection-to-effect flow.

req: local/001

req: local/002

req: local/003

req: local/004

req: examples/001
2026-06-11 19:49:34 +02:00
slhx agent 3807306158 feat(host): wire techdemo host capability flow
Route browser/PWA share and native-shell haptic host results through techdemo app code before returning normal hemx effects; serve the tiny browser host adapter as an app asset.

req: host/001

req: host/002

req: host/004

req: host/005

req: examples/001
2026-06-11 19:43:50 +02:00
slhx agent 2cc6c85e37 feat(host): add typed host capability boundary
Introduce hemx-host with typed capability manifests, calls, events, host-check failures, reusable browser/PWA and native-shell profiles, and a tiny optional browser adapter for haptics/share that returns host events without DOM mutation.

req: host/001

req: host/002

req: host/003

req: host/004

req: host/005
2026-06-11 19:35:20 +02:00
slhx agent 736f9f3c7e fix(js): isolate startup binding failures
Keep the public runtime API available and report state, binding, and SSE startup errors independently so one startup failure cannot hide the runtime object or other roots.

req: runtime/002
2026-06-05 20:34:08 +02:00
slhx agent 4b83169207 fix(js): expose runtime API before startup
Assign window.hemx before startup side effects so constrained browser contexts can still inspect the runtime and root state even if bootstrap work reports errors.

req: runtime/002
2026-06-05 20:25:58 +02:00
slhx agent ce4c2e086d feat(axum): expose hashed runtime asset path
Generate a SHA-256 content hash for the embedded hemx runtime, expose the hashed path from hemx-axum, serve immutable runtime headers, and update examples to load the hemx-owned path instead of fixed /hemx.js URLs.

req: axum_integration/005
2026-06-05 18:27:38 +02:00
slhx agent c56ec39813 fix(js): tolerate missing File constructor
Guard URL-encoded form serialization so constrained browser contexts without File still submit generated hemx forms instead of throwing before fetch.

req: runtime/002
2026-06-05 17:33:09 +02:00
slhx agent 90dd689ba0 docs(hemx): record final v1 readiness audit
Record the current v1 readiness closure matrix after the final gates and normal-path review, including the release decision for provider recipes and the remaining verification checklist for GOAL_DONE.

req: examples/001

req: diagnostics/001

req: public_api/001

req: runtime/003

req: runtime/004
2026-06-05 10:26:05 +02:00