Commit Graph

345 Commits

Author SHA1 Message Date
slhx agent 8c3a22d720 docs(requirements): split typed partial swap rule
Split oversized canonical_authoring/002 into handler partial-swap flow and primitive-shape requirements.

req: canonical_authoring/002

req: canonical_authoring/014
2026-06-25 14:07:32 +02:00
slhx agent 89dbc3f0f4 docs(requirements): split canonical API scaling rule
Split oversized canonical_authoring/006 into generated-shape, normal authoring surfaces, and escape-hatch boundary requirements.

req: canonical_authoring/006

req: canonical_authoring/012

req: canonical_authoring/013
2026-06-25 14:05:36 +02:00
slhx agent 89878b424a docs(requirements): split canonical app shape rule
Split oversized canonical_authoring/001 into canonical app shape, ordinary-code escape hatches, and CSS ownership rows.

req: canonical_authoring/001

req: canonical_authoring/010

req: canonical_authoring/011
2026-06-25 14:03:39 +02:00
slhx agent f49efc67b6 docs(requirements): split workout release scope
Split oversized examples/006 into command-surface, generated-helper, and mobile-boundary requirements.

req: examples/006

req: examples/010

req: examples/011
2026-06-25 14:01:04 +02:00
slhx agent ac6d957952 docs(requirements): split examples exemplar scope
Split the oversized examples/001 row into canonical v0, html_examples, workout, and north-star exemplar requirements.

req: examples/001

req: examples/007

req: examples/008

req: examples/009
2026-06-25 13:58:01 +02:00
slhx agent ebe3383b8a docs(requirements): split test inspector contract
Split the oversized test/001 row into test backend, inspector assertions, canonical assertion style, and browser selector adapter requirements.

req: test/001

req: test/007

req: test/008

req: test/009
2026-06-25 13:55:45 +02:00
slhx agent 120268acc1 docs(requirements): split htmx equivalent coverage
Split htmx_equivalents/002 into core interaction, navigation/live-update, gallery, and component-shape rows.

req: htmx_equivalents/002

req: htmx_equivalents/004

req: htmx_equivalents/005

req: htmx_equivalents/006
2026-06-25 13:53:15 +02:00
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