Commit Graph

188 Commits

Author SHA1 Message Date
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 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 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 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 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 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 5ab5846b01 feat(examples): add saas settings page fallback
Make the SaaS tutorial's settings route render a distinct full-page fallback while the enhanced handler still swaps the generated page panel and pushes history. This proves page-swap shape without relying only on the enhanced interaction path.

req: examples/001

req: page_swap/002
2026-06-05 10:19:30 +02:00
slhx agent a428097e0e docs(examples): close saas tutorial boundary
Promote examples/saas from skeleton wording to the canonical tutorial app and record the v1 release decision that local persistence plus provider-explicit recipes is the supported production boundary for CI-friendly docs.

req: examples/001

req: auth/001

req: laws/004

req: public_api/005
2026-06-05 10:06:46 +02:00
slhx agent 78aff362ff docs(recipes): add pwa offline boundary
Document optional PWA/offline support as an adapter boundary: cached shell, domain-command queues, server-canonical replay, conflict/fingerprint behavior, and sync-crate shape without adding a client state graph or service worker to core.

req: canonical_authoring/008

req: runtime/003

req: runtime/004

req: auth/002

req: auth/004

req: failure/004

req: failure/005

req: sync/001

req: sync/007
2026-06-05 10:03:39 +02:00
slhx agent 84b52c75ae docs(examples): add saas tutorial walkthrough
Add the canonical SaaS tutorial walkthrough for the compile-tested examples/saas path, tying templates, typed domain forms, generated effects, error mapping, page/push shape, CSS/islands, tests, and provider recipes into one onboarding flow.

req: examples/001

req: canonical_authoring/001

req: canonical_authoring/002

req: canonical_authoring/003

req: auth/001

req: failure/004

req: page_swap/002

req: push/003

req: public_api/005
2026-06-05 09:56:22 +02:00
slhx agent 107111052d docs(recipes): add observability flags boundary
Document provider-explicit observability, feature flag, A/B, and killswitch boundaries for hemx apps. The recipe keeps metrics providers and rollout controls in app/platform code while handlers return generated effects and the tiny runtime stays provider-free.

req: laws/002

req: laws/004

req: runtime/003

req: runtime/004

req: failure/004

req: examples/001

req: test/001
2026-06-05 09:52:59 +02:00
slhx agent bf6add03ef docs(recipes): add deploy versioning boundary
Document deployment and version compatibility for hemx apps: release unit, runtime asset caching, rolling deploy policy, fingerprint mismatch behavior, semver buckets, upgrade notes, and deployment checks without adding platform code to core.

req: abi/001

req: abi/002

req: abi/003

req: abi/004

req: abi/005

req: runtime/004

req: failure/005
2026-06-05 09:32:25 +02:00
slhx agent a7012b94c2 docs(recipes): add auth csrf boundary
Document the provider-explicit auth/session and CSRF boundary for the SaaS tutorial. The recipe keeps cookies, sessions, CSRF policy, and rejection behavior in Axum/Tower/app code while hemx handlers continue to receive typed context/forms and return generated effects.

req: laws/002

req: auth/001

req: auth/002

req: auth/003

req: auth/004

req: auth/005

req: failure/004

req: examples/001
2026-06-05 09:30:13 +02:00
slhx agent 2c043d2f96 docs(recipes): add sqlx persistence boundary
Document a provider-explicit SQLx persistence adapter for the SaaS tutorial without adding SQLx to hemx core or the workspace. The recipe keeps auth/session, CSRF, generated helpers, and Result handler mapping as the app boundary.

req: laws/002

req: laws/004

req: auth/001

req: auth/002

req: auth/004

req: examples/001

req: canonical_authoring/002

req: failure/004
2026-06-05 09:27:08 +02:00
slhx agent d37480fb72 feat(examples): derive saas dashboard template
Replace the SaaS tutorial dashboard's hand-written Hemplate implementation with the real hemplate-derived dashboard template. This closes the tutorial skeleton shortcut and keeps the provider-light production app path on generated/derived rendering.

req: examples/001

req: canonical_authoring/001

req: view/001
2026-06-05 09:22:52 +02:00
slhx agent 38cfb263aa feat(examples): add saas tutorial skeleton
Add a compile-tested v1 tutorial skeleton that proves the production-shaped app boundary without provider-heavy scope: auth/session context, CSRF-checked mutation, local persistence adapter, generated form/slot/keyed row/page/push effects, plain CSS, SSE shape, and one explicit metrics island.

req: examples/001

req: auth/001

req: auth/002

req: auth/004

req: form/001

req: failure/004

req: page_swap/002

req: push/003
2026-06-05 09:15:57 +02:00
slhx agent 3dfb3b684f feat(hemx): reuse todo row partials
Make the canonical v0 todo flow use one TodoRow partial shape for initial list rendering and generated keyed append/replace/remove helpers. Teach hemx-build to treat collection hosts with keyed h-for children as keyed targets, so beginner templates can keep the DRY outer slot + child partial composition.

req: canonical_authoring/002

req: canonical_authoring/003

req: examples/004

req: list/001
2026-06-05 08:56:36 +02:00
slhx agent 53480dba5a feat(hemx): clarify generated authoring path
Close the fallible handler and example coherence slice: v0 uses typed todo newtypes, Result handler failure mapping, generated form/partial helpers, and page composition; kanban is explicitly marked as an advanced north-star milestone; raw render is isolated behind hemx::advanced::render.

req: canonical_authoring/003

req: failure/004

req: public_api/005

req: examples/004
2026-06-05 08:36:39 +02:00
slhx agent c33500440e refactor!: rename slhx to hemx
Rename the tracked product identity, crate/package names, Rust paths/macros, generated artifacts, runtime files, public attributes, examples, docs, requirements, and tests from slhx to hemx without compatibility shims.

Verified with cargo run -p hemx-xtask -- test, cargo test -p hemx-derive --test compile_fail, cargo test -p hemx-js, cargo test -p hemx-axum, cargo test -p hemx-v0-examples, cargo check --workspace, redgate list, redgate refs, redgate health --strict, git diff --check, and git grep/ls-files legacy-name audits.

req: misc/001

req: codegen/001

req: component/004

req: runtime/001
2026-06-05 06:52:37 +02:00
slhx agent d4e865ef92 feat(api): streamline generated app authoring
Move the canonical examples toward generated component-root helpers, typed form decoding, async/state handler registration, and derive-driven app/component registry wiring. Tighten requirements and diagnostics for the server-first, selectorless authoring path.

Verified with cargo run -p slhx-xtask -- test, cargo check --workspace, redgate list, redgate refs, redgate health --strict, and git diff --check.

req: canonical/001

req: canonical/003

req: canonical/004

req: dx/002

req: derive_app/001

req: component/003

req: form/004

req: axum_integration/003
2026-06-05 06:33:41 +02:00
slhx agent eb6086616c refactor(examples): use targets across v0 handlers
Move remaining v0 example updates from raw slot constants/free functions to generated target objects for the partial/swap happy path.

req: dx/006

req: examples/003
2026-06-02 07:44:41 +02:00
slhx agent 339ca769fb feat(build): accept domain ids on keyed targets
Let generated string-keyed targets accept displayable domain ids directly, removing caller-side to_string noise from keyed partial append/replace flows.

req: codegen/002

req: dx/006
2026-06-02 07:34:00 +02:00
slhx agent dfd8020617 docs(examples): keep inspector copy target-oriented
Replace remaining beginner-facing wire contract wording in the inspector partial with generated target/effect vocabulary and guard against regressions.

req: dx/006

req: examples/003
2026-06-02 07:30:30 +02:00
slhx agent 795abdbc81 test(examples): guard low-level docs wording
Keep beginner example docs on target objects and tuple IntoEffect responses instead of runtime lowering/application wire vocabulary.

req: dx/006

req: examples/003
2026-06-02 07:27:23 +02:00
slhx agent 3ab89adf2d feat(style): compose generated class states
Add CssClass/CssClasses with/with_if helpers so nested partial view data can compose generated CSS constants without ad hoc class strings.

req: style/003

req: component/003
2026-06-02 07:24:10 +02:00
slhx agent a138f92b33 feat(build): generate slot target objects
Add generated targets::<slot> wrapper objects so partial swaps read as target.put/append/replace while preserving existing lower-aware commands and IntoEffect wiring.

req: dx/006

req: codegen/001

req: codegen/002

req: component/003
2026-06-02 07:21:23 +02:00
slhx agent 998e15758a docs(examples): hide batch internals from UI copy
Replace beginner-facing EffectBatch/slot-effect wording with generated update language while keeping wire-batch types in tests and low-level APIs.

req: dx/006

req: examples/003
2026-06-02 03:40:12 +02:00
slhx agent 417bc45d1f docs(examples): describe generated command path
Keep example READMEs aligned with the generated-resource, tuple-composed IntoEffect authoring path instead of lower-level handle/EffectBatch wording.

req: dx/006

req: examples/003
2026-06-02 03:28:53 +02:00
slhx agent 03b5f0f29b docs(kanban): use generated keyed commands
Keep the north-star kanban sketches aligned with the generated lower-aware append/replace helpers instead of teaching keyed slot extension methods.

req: dx/006

req: codegen/002
2026-06-02 03:07:26 +02:00
slhx agent ee6045aec5 feat(build): generate keyed view commands
Add lower-aware generated append/prepend/replace helpers for keyed slots, move the v0 keyed todo example off the facade extension trait, and keep beginner examples from importing lower-level render shortcuts.

req: dx/006

req: codegen/002

req: public_api/003

req: examples/003
2026-06-02 03:05:37 +02:00