Commit Graph

488 Commits

Author SHA1 Message Date
slhx agent edf632a11e docs(requirements): split codegen helper surface
Split the oversized codegen/002 row into helper surface, string-key id, generated-command, and form-target requirements.

req: codegen/002

req: codegen/007

req: codegen/008

req: codegen/009
2026-06-25 13:49:31 +02:00
slhx agent 867c730ce9 docs(requirements): split generated helper escape hatches
Split the oversized dx/006 row into preferred helper, hidden render/lower, and escape-hatch surface requirements.

req: dx/006

req: dx/009

req: dx/010
2026-06-25 13:46:35 +02:00
slhx agent 42e2669a98 docs(requirements): split pitch runtime claim
Split the pitch overview into checked-hypermedia and no-app-JavaScript rows so redgate no longer reports pitch/001 as oversized.

req: pitch/001

req: pitch/005
2026-06-25 13:42:58 +02:00
slhx agent 7331676012 docs(requirements): split generated helper intent rule
Split the long canonical helper requirement into separate intent and forbidden-composition rows so redgate no longer reports that row as oversized.

req: canonical_authoring/005

req: canonical_authoring/009
2026-06-25 13:40:24 +02:00
slhx agent cbb9d68733 test(xtask): add html examples browser smoke
Add a repo-owned xtask command that starts html_examples, drives a CDP browser through click/save/input/search/load paths, and cleans up the server process.

req: test/006

req: examples/001

req: htmx_equivalents/002
2026-06-25 13:32:31 +02:00
slhx agent acddea21ee fix(examples): repair html dynamic partial interactions
Preserve data-hemx-revealed through hemx-build and make html_examples lazy/load-more/infinite/search interactions return server-driven partial updates with regression coverage.

req: convention/005

req: htmx_equivalents/002

req: examples/001
2026-06-25 12:56:43 +02:00
slhx agent 3b14bb57ca chore(examples): make html-examples port configurable via env
req: examples/001
2026-06-23 15:55:52 +02:00
slhx agent 15231f932e fix(runtime): clear form error displays on form reset
req: runtime/005
2026-06-23 15:55:52 +02:00
slhx agent 3fdcc6e3ff fix(examples): trigger inline validation on input events
req: runtime/005

req: examples/001
2026-06-23 15:30:58 +02:00
slhx agent 329f16aebf fix(build): dispatch slot targets to matching component render/put
req: runtime/005

req: examples/001

req: htmx_equivalents/001
2026-06-23 15:06:08 +02:00
slhx agent cfa4502748 style(html_examples): clean htmx-like shell with no low-level plumbing
- Move CSS out of app_shell.heml into app.css served by the app.
- Remove direct hemx::advanced::Effect import from example code; rely on IntoEffect.
- Update README to not mention raw Effect:: APIs.
- Keep generated resources and tiny runtime behavior only.

req: examples/001
req: htmx_equivalents/001
req: htmx_equivalents/002
2026-06-23 11:25:59 +02:00
slhx agent cd7f64e5a3 feat(runtime): add tiny trigger timing conventions
Add boring runtime-level trigger timing primitives for delay, revealed, and interval while keeping them as attribute conventions rather than core effects or plugin surfaces. Promote lazy-load, infinite-scroll, progress-bar, value-select, and reset-user-input in examples/html_examples to runnable hemx patterns with exact htmx slugs and generated resources.

req: convention/001

req: convention/003

req: convention/005

req: htmx_equivalents/001

req: htmx_equivalents/002

req: examples/001
2026-06-23 07:51:43 +02:00
slhx agent 0922a46e21 docs(examples): classify full htmx pattern catalog
Extend the html_examples gallery README to cover every htmx UI example slug exactly, marking each as implemented, deferred, integration-owned, or refused. Add a test that guards the full slug matrix while keeping the implemented gallery focused on the first CRUD/form/search/load slice.

req: htmx_equivalents/001

req: htmx_equivalents/002

req: examples/001
2026-06-23 07:24:28 +02:00
slhx agent b3d72e8d82 feat(examples): add hemx html pattern gallery
Add examples/html_examples as a copy-pasteable gallery for the first htmx-style HTML UX patterns using exact htmx URL slugs in the page and README. The slice covers click-to-edit, edit-row, delete-row, inline-validation, click-to-load, and active-search with .heml templates, generated resources, server-owned Rust state, and runtime-free selector targeting.

req: htmx_equivalents/001

req: htmx_equivalents/002

req: examples/001
2026-06-23 07:22:40 +02:00
slhx agent f1d84e4837 refactor(v0): render todos through heml template
Remove the hand-written push_str renderer for the v0 todos view so the canonical beginner example uses its .heml template for the whole page path, including form validation targets, notices, and keyed rows.

req: examples/001

req: canonical_authoring/003
2026-06-22 22:39:47 +02:00
slhx agent de6ecd469f fix(runtime): show transport failures in app error outlets
Make failed hemx requests visibly recoverable by updating root-scoped data-hemx-error outlets while preserving fail-closed non-2xx handling and inspectable hemx:error events. The v0 generated-app exemplar now includes a transport error outlet alongside generated field-error targets.

req: runtime/005

req: examples/001

req: canonical_authoring/003
2026-06-22 22:26:33 +02:00
slhx agent f1aa232c94 fix(runtime): fail closed on hemx request errors
Preserve pending recovery while making failed HTTP responses non-applicable as effects. The runtime now restores aria-busy with pending state and emits inspectable hemx:error details with HTTP status for failed requests.

req: runtime/005

req: convention/007
2026-06-22 22:22:26 +02:00
slhx agent 1aa92d8d9d feat(examples): expose v0 todo field error targets
Add generated field-error targets to the v0 add and rename forms so the canonical todo example shows recoverable typed form feedback end to end instead of emitting errors with no visible target.

req: examples/001

req: canonical_authoring/003
2026-06-22 22:17:21 +02:00
slhx agent 430603ec00 feat(examples): make v0 todo rename form editable
Turn the v0 todo row rename action into an editable generated form instead of a fixed submit value, and preserve validation/recovery behavior for blank titles. This keeps the beginner exemplar on generated form handles and user-visible recovery instead of hidden demo shortcuts.

req: examples/001

req: canonical_authoring/003
2026-06-22 22:12:27 +02:00
slhx agent 797132647f feat(diagnostics): add compiler-backed heml language service
Add hemx-lsp for stdio LSP diagnostics, completion, and hover while preserving HTML editor tooling for .heml files. Teach hemx-build to expose generated target and derive-known template context facts, including simple h-for locals, so editor help comes from build-owned facts instead of editor-only parsers. Wire VS Code/Cursor and Neovim documentation and extend the Workout exemplar with a real h-for plan loop for end-to-end proof.

req: diag/004

req: diag/005

req: diag/006
2026-06-22 22:06:42 +02:00
slhx agent 4bca046ed1 docs: bound optional heml editor overlays
Make hemx-build diagnostics and the documented .heml syntax surface the authority for any editor overlay, while rejecting a second template language, selector model, formatter, or custom editor framework.

req: diagnostics/004
2026-06-12 18:15:30 +02:00
slhx agent b8c83fee25 feat(build): surface structured template diagnostics
Add public .heml syntax authority and refactor the unkeyed generated-target error into structured diagnostic data while preserving the human compiler error.

req: diagnostics/001

req: diagnostics/002
2026-06-12 18:11:39 +02:00
slhx agent e7ff4541a7 refactor(v0): name generated interaction handlers
Expose and use InteractionHandlers in the beginner example so the normal path reads as app handlers instead of registry plumbing while preserving the integration registry API.

req: ceremony/005
2026-06-12 17:40:41 +02:00
slhx agent 0f1673834b fix(xtask): polish generated app next steps
Give app new users app-local next steps and generated README/CREATED docs, rename visible v0 text, and fail early when the required hemplate checkout is missing instead of producing a broken path dependency.

req: ceremony/005
2026-06-12 17:26:23 +02:00
slhx agent c71aa63cec fix(xtask): make mobile starter docs app-owned
Overwrite the generated mobile starter README and CREATED receipt so app new --mobile users see hemx-app commands and app-owned next steps instead of repository Workout commands or example internals.

req: ceremony/006
2026-06-12 16:18:59 +02:00
slhx agent 79b4d1e167 fix(xtask): give mobile starters app-owned commands
Make app new --mobile write hemx-app with HEMX_APP_* release settings, app-scoped release output, and docs that name Workout only as the concrete starter flow instead of leaking Workout command identity.

req: ceremony/006
2026-06-12 16:15:09 +02:00
slhx agent 3f824a83f8 fix(workout): make reduced motion explicit
Add an explicit prefers-reduced-motion contract to the phone-first Workout starter and assert the served CSS carries the no-motion policy.

req: examples/001
2026-06-12 15:51:39 +02:00
slhx agent be3ba4877a docs: bound hemx mobile fit
Name when the mobile starter is the right suckless path and when to use an explicit native shell or island instead of pretending hemx is a general native UI framework.

req: ceremony/006

req: host/002
2026-06-12 15:37:54 +02:00
slhx agent d4916b1a1e feat(xtask): add mobile app starter
Add app new --mobile as the public phone-first starter path. It reuses the Workout starter so created apps carry a real page/form/keyed partial/notice flow, typed host capability handling, app-owned recovery truth, and inspectable mobile release/verify commands without adding a mobile framework.

req: ceremony/006

req: examples/006
2026-06-12 15:34:32 +02:00
slhx agent 274f44f91d feat(xtask): scaffold generic hemx apps
Add cargo run -p hemx-xtask -- app new PATH for the generic checked-hypermedia starter: v0 page/form/keyed-row/notice handlers and tests with generated helpers instead of raw ids, opcodes, selector UI JavaScript, or manual registry plumbing.

req: ceremony/005

req: canonical_authoring/003
2026-06-12 15:13:33 +02:00
slhx agent cac23578e2 feat(v0): show reusable partial feedback
Add a generated todo notice slot to the v0 normal path so initial render, append, replace, remove, and dynamic Vec<IntoEffect> refreshes visibly compose one reusable TodoRow partial with adjacent generated UI feedback.

req: canonical_authoring/003
2026-06-12 15:01:20 +02:00
slhx agent d2049c559a fix(build): explain missing keyed loop facts
Improve the unkeyed h-for diagnostic so authors see the exact loop, stable h-key shape, generated helper consequence, and why dynamic child data-key is not enough.

req: scope/001

req: diagnostics/002
2026-06-12 14:47:22 +02:00
slhx agent 3b5de85319 test(v0): prove dynamic reusable row updates
Use one TodoRow projection for initial render and generated dynamic Vec<IntoEffect> row replacement batches, keeping the normal path on generated helpers instead of raw effects or registry plumbing.

req: canonical_authoring/003
2026-06-12 14:43:47 +02:00
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