docs(requirements): split misc rows

Add explicit ring fields to misc requirements and split oversized primitive-design rows without changing behavior.

req: misc/001

req: misc/002

req: misc/003

req: misc/004

req: misc/005

req: misc/006

req: misc/007

req: misc/008

req: misc/009

req: misc/010
This commit is contained in:
slhx agent
2026-06-25 17:46:31 +02:00
parent bcadbd4594
commit d3a7cc12de
2 changed files with 15 additions and 12 deletions
+14 -11
View File
@@ -1060,31 +1060,34 @@ what a valid business email is. [north_star]
## misc
### req: misc/001
001 Workspace layout: `hemx-core` (types + postcard schema, no_std), `hemx-derive` (proc-macros), `hemx-build` (surface consumer + code generation), `hemx-axum` (integration), `hemx-js` (runtime single file), `hemx-transition` (optional), `hemx-sync` (optional), `hemx-wasm` (optional). No kitchen-sink crate.
0 001 Workspace layout separates `hemx-core`, `hemx-derive`, `hemx-build`, `hemx-axum`, `hemx-js`, and optional transition/sync/wasm crates; no kitchen-sink crate.
### req: misc/002
002 All crates compile on stable Rust. MSRV 1.80. `hemx-core` has zero proc-macro dependencies.
0 002 All crates compile on stable Rust. MSRV 1.80. `hemx-core` has zero proc-macro dependencies.
### req: misc/003
003 Three execution modes supported: server-first (request/response), client-local WASM (requestAnimationFrame, no round-trip), and hybrid sync (local + remote via `hemx-sync`). Modes are opt-in per handler, not global.
0 003 Three execution modes are supported: server-first, client-local WASM, and hybrid sync. Modes are opt-in per handler, not global.
### req: misc/004
004 The only required user-facing proc-macro in hemx core is `#[hemx::handler]`.
Optional ergonomic macros may exist: `#[hemx::surface]`, `#[hemx::component]`,
`#[hemx::app]`, and integration-crate macros such as `#[hemx::island]` or
`#[hemx_sync::presence]`. No `!` call-syntax macros.
0 004 The only required user-facing proc-macro in hemx core is `#[hemx::handler]`; optional ergonomic macros may exist, but no `!` call-syntax macros.
### req: misc/005
005 Source spans are present on every Surface node, attribute, and scope. Error messages cite file, line, and column. This is non-negotiable for DX.
0 005 Source spans are present on every Surface node, attribute, and scope. Error messages cite file, line, and column. This is non-negotiable for DX.
### req: misc/006
006 Authoring hemx attributes use the `data-hemx-*` prefix. Runtime lowering may emit compact `data-hid`, `data-sid`, `data-key`, atom ids, and control ids. No unprefixed custom attributes.
0 006 Authoring hemx attributes use the `data-hemx-*` prefix. Runtime lowering may emit compact ids. No unprefixed custom attributes.
### req: misc/007
007 Id allocation is deterministic from canonical symbol paths. Ids are stable across builds unless the symbol path changes. Deploy mismatch between server and client is caught by a build-schema version check, not silent failure.
0 007 Id allocation is deterministic from canonical symbol paths. Ids are stable across builds unless the symbol path changes. Deploy mismatch is caught by a build-schema version check.
### req: misc/008
008 Core design rule: add one primitive only if it deletes five special cases. `ScopeKey` deletes: loop keying, component scoping, modal instances, nested forms, portal boundaries. `ResourceId` deletes: special opcodes per kind, separate registries, separate wire formats, separate test APIs. `Effect::event` deletes: plugin API, custom JS bridges, chart adapters, map SDK wrappers.
0 008 Core design rule: add one primitive only if it deletes five special cases. `ScopeKey` deletes loop keying, component scoping, modal instances, nested forms, and portal boundaries.
### req: misc/009
0 009 `ResourceId` deletes special opcodes per kind, separate registries, separate wire formats, and separate test APIs.
### req: misc/010
0 010 `Effect::event` deletes plugin APIs, custom JS bridges, chart adapters, and map SDK wrappers.
---