Commit Graph

65 Commits

Author SHA1 Message Date
slhx agent 1ec8a1368d feat(kanban): authorize canonical sync reads
req: sync/007

req: auth/005

req: security/004
2026-07-13 19:22:13 +02:00
slhx agent 3ef84e7331 feat(kanban): partition local queues by account
req: sync/020

req: auth/005

req: security/004

req: operations/002
2026-07-13 19:00:04 +02:00
slhx agent 6de4dcb73b feat(kanban): reauthorize queued replay
req: sync/019

req: security/004

req: auth/005

req: operations/002
2026-07-13 18:18:52 +02:00
slhx agent a17de85b4f feat(kanban): migrate queued commands transactionally
req: sync/014
2026-07-13 18:06:47 +02:00
slhx agent 3ace17f9f1 feat(kanban): stop mixed queue on rejection
req: sync/009

req: sync/010
2026-07-13 17:53:53 +02:00
slhx agent 80f1ae155e feat(kanban): bound sync upload runs
req: sync/017
2026-07-13 17:48:47 +02:00
slhx agent 0d475e81c8 feat(kanban): coordinate uploader tabs
req: sync/018
2026-07-13 17:40:16 +02:00
slhx agent e4688bb6df test(kanban): prove divergent rebase conflict
req: sync/011
2026-07-13 17:04:10 +02:00
slhx agent d6aaca8127 feat(kanban): deterministically rebase snapshot
req: sync/011
2026-07-13 16:58:51 +02:00
slhx agent db57b0c474 feat(kanban): recover from missing sync history
req: sync/007\nreq: sync/020
2026-07-13 16:53:49 +02:00
slhx agent 5ea747d968 feat(kanban): recover after retry exhaustion
req: sync/004\nreq: sync/010\nreq: sync/011\nreq: sync/014\nreq: sync/016
2026-07-13 16:47:52 +02:00
slhx agent 0a7c380187 feat(kanban): persist canonical acknowledgements
req: sync/001\nreq: sync/005\nreq: sync/007\nreq: sync/008\nreq: sync/013
2026-07-13 16:41:18 +02:00
slhx agent 599d1b838d feat(kanban): upload pending command with retry
req: sync/004\nreq: sync/009\nreq: sync/010\nreq: sync/016\nreq: sync/017
2026-07-13 16:32:44 +02:00
slhx agent 687c64d078 feat(kanban): acknowledge idempotent server command
req: sync/001\nreq: sync/005\nreq: sync/006\nreq: sync/007\nreq: sync/008\nreq: sync/012\nreq: sync/013
2026-07-13 16:02:19 +02:00
slhx agent 1d194e0f23 test(kanban): prove server-first asset isolation
req: performance/006
2026-07-13 15:50:35 +02:00
slhx agent 978bf67a2c feat(kanban): expose queued persistence state
req: accessibility/004\nreq: client_local/013\nreq: performance/003
2026-07-13 15:40:34 +02:00
slhx agent 9b80444484 fix(kanban): recover from quota exhaustion
req: sync/015
2026-07-13 15:31:07 +02:00
slhx agent bf10d1e3ce feat(kanban): bound durable replay
req: sync/014\nreq: performance/005
2026-07-13 15:20:00 +02:00
slhx agent 54b706b706 fix(kanban): recover malformed commands
req: sync/015
2026-07-13 15:15:40 +02:00
slhx agent 47715e3ba3 fix(kanban): fail closed on persistence errors
req: sync/015
2026-07-13 15:11:08 +02:00
slhx agent d946975f2d feat(kanban): add local recovery controls
req: local/003\nreq: security/007
2026-07-13 14:59:05 +02:00
slhx agent 9a3c0335eb feat(kanban): restore commands offline
req: local/001\nreq: local/002\nreq: local/003\nreq: local/004
2026-07-13 14:52:51 +02:00
slhx agent 7298405e27 feat(kanban): persist local reorder commands
req: local/001\nreq: local/002\nreq: local/003\nreq: local/004\nreq: sync/009
2026-07-13 14:45:22 +02:00
slhx agent 7eb65d77c8 feat(kanban): prove accessible local reorder
req: client_local/013\nreq: accessibility/002\nreq: accessibility/003\nreq: accessibility/004\nreq: accessibility/006\nreq: milestone/001
2026-07-13 14:29:21 +02:00
slhx agent ecbdea5cd0 feat(axum): support axum 0.8 applications
Upgrade the integration crate and examples to Axum 0.8 and use the native async extractor traits while preserving hemx routing, request, runtime, and effect behavior.

req: axum/002
2026-07-13 09:26:32 +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 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 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 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 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 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 15809c86a6 feat(build): add lower-aware put helper
Generate ui::put(slot, view) for lower-aware slot HTML updates and move examples/docs/contracts to that ergonomic path instead of hand-composing slot.html(render(...)).

req: dx/006

req: component/003

req: runtime/001

req: examples/003
2026-06-02 02:59:29 +02:00
slhx agent fa00128c9b fix(examples): keep test updates lower-aware
Move canonical example test helpers and docs off direct slot render shortcuts so even test-only slot updates use generated lower-aware HTML paths.

req: component/003

req: runtime/001

req: examples/003
2026-06-02 01:59:25 +02:00
slhx agent 732e65008e fix(examples): use lower-aware slot html updates
Move canonical examples and docs off direct RenderSlotExt render shortcuts so slot updates use generated render/lowering before HTML replacement, preserving runtime metadata for follow-up interactions.

req: component/003

req: runtime/001

req: dx/006

req: examples/003
2026-06-02 01:48:10 +02:00
slhx agent 743f79c6d6 fix(examples): lower slot render updates
Use generated lower-aware render paths before slot HTML updates so example fragments carry runtime ids for follow-up interactions such as browser drag/drop.

req: component/003

req: runtime/001

req: examples/003
2026-06-02 01:41:42 +02:00
slhx agent 1e53a6f7df feat(axum): parse typed interaction values
Add InteractionForm::parse for common typed field extraction and use it in example interaction handlers to avoid repeated string parsing plumbing.

req: form/004

req: dx/003

req: examples/003
2026-06-02 00:31:32 +02:00
slhx agent df4b4cc649 feat(axum): add interaction registry alias
Add an interactions()/on() registration path and move canonical examples off explicit register_handle naming while keeping low-level registry types available underneath.

req: axum_integration/003

req: ceremony/001

req: dx/003

req: examples/003
2026-06-02 00:24:32 +02:00
slhx agent f388fa7d91 docs(kanban): describe generated handles
Keep the canonical Kanban README on generated handles/slots instead of implying authors work with generated numeric ids.

req: dx/003

req: examples/003
2026-06-02 00:21:31 +02:00
slhx agent 42ede63361 feat(axum): add concise interaction request dispatch
Wrap extracted interaction forms in an InteractionRequest with a concise dispatch path, add a handlers() helper, and move canonical examples off direct HandlerRegistry/InteractionForm plumbing.

req: axum_integration/003

req: ceremony/001

req: dx/003

req: examples/003
2026-06-02 00:19:38 +02:00
slhx agent bff769b52a refactor(kanban): render shell from hemplate
Move the kanban full-page shell into a checked .heml unit so page assembly uses slhx render/SafeHtml composition instead of hand-built trusted HTML strings.

req: html_safety/001

req: html_safety/002

req: component/003
2026-06-02 00:08:48 +02:00
slhx agent fd5d48d59a refactor(examples): use slot render helpers
Use the slhx RenderSlotExt path for board updates so examples no longer manually compose SafeHtml before slot replacement.

req: dx/006

req: component/003
2026-06-01 23:46:59 +02:00
slhx agent 4e47b470a7 feat(axum): add safe html page composition
Add a SafeHtml PageRequest path for shell/partial composition and migrate examples so rendered hemplate fragments stay typed through the transport boundary instead of round-tripping through unchecked strings.

req: axum_integration/001

req: html_safety/001

req: html_safety/002
2026-06-01 23:45:52 +02:00
slhx agent a287d87e38 refactor(examples): inline simple board rendering
Remove one-line render_board wrappers now that generated render(view) is the concise composition helper, keeping board updates explicit without extra local bridge functions.

req: component/003

req: dx/006
2026-06-01 23:38:48 +02:00
slhx agent 0d4a643759 feat(build): add concise render helper
Generate render(view) as the short page/fragment composition helper while keeping render_html(view) as an explicit compatibility alias, then move examples to the leaner happy path.

req: component/003

req: dx/006

req: view/001
2026-06-01 23:09:34 +02:00
slhx agent ef3323831f refactor(kanban): shorten generated resource paths
Import scoped generated board modules at the kanban boundary so tests and page helpers read as local board resources without fully qualified generated-resource ceremony.

req: component/003

req: dx/006
2026-06-01 22:59:00 +02:00
slhx agent 54dd401e8b refactor(kanban): scope card handles to partials
Move kanban card actions onto the reusable card partial, use generated render helpers for board/page composition, and remove manual handle fields plus hidden shell-level action anchors from the composed path.

req: component/003

req: view/001

req: examples/001
2026-06-01 22:25:23 +02:00
slhx agent e20d356c1d docs(examples): mark page shell html boundaries
Document that remaining SafeHtml use in examples is limited to full-page shell composition of already-rendered hemplate fragments, while effect payloads use render helpers.

req: html_safety/002

req: view/001
2026-05-26 01:34:05 +02:00
slhx agent 5972785c3c feat(slhx): prefer render methods for views
Move view rendering onto Slot::render and KeyedSlot append/prepend/replace extension methods, leaving explicit text/html methods for non-view escape hatches.

req: codegen/002

req: view/001
2026-05-26 01:31:58 +02:00