docs(requirements): tighten surface rows
Add explicit northstar ring fields to surface requirements and shorten parser/key wording without changing behavior. req: surface/001 req: surface/002 req: surface/003 req: surface/004 req: surface/005 req: surface/006 req: surface/007 req: surface/008 req: surface/009 req: surface/010
This commit is contained in:
@@ -62,7 +62,7 @@ Keep it stable. Prefer pointers to canonical sources over copied structure, file
|
||||
- `examples/html_examples` is the copy-paste HTML pattern gallery for htmx-style examples; keep exact htmx URL slugs visible while translating behavior to boring `.heml`, generated resources, and server-owned Rust state, not HTMX syntax or selector targeting. Boost containers enhance same-origin descendants only and preserve native external/download/new-tab behavior. req: htmx_equivalents/001 req: htmx_equivalents/003 req: htmx_equivalents/005 req: examples/007 req: page_swap/007 req: page_swap/008
|
||||
- Use `cargo run -p hemx-xtask -- app new PATH` for the generic page/form/keyed-row/notice starter, and `cargo run -p hemx-xtask -- app new --mobile PATH` for the phone-first starter with host capabilities, recovery truth, and release-kit commands; do not treat it as a mobile framework or store-submission bot. req: ceremony/005 req: ceremony/006 req: ceremony/007
|
||||
- The public component-reuse explanation lives in `docs/recipes/reusable-partials.md`; do not grow a client component framework to explain partial composition.
|
||||
- The stable public `.heml` authoring surface lives in `docs/hemplate-syntax.md`; Hemlate examples must use that real hemplate syntax, not Vue/Handlebars sketches.
|
||||
- The stable public `.heml` authoring surface lives in `docs/hemplate-syntax.md`; Hemlate examples must use that real hemplate syntax, not Vue/Handlebars sketches. hemx-build consumes hemplate Surface facts and must not grow an independent `.heml` parser or CSS-path identity model. req: surface/001 req: surface/002 req: surface/003 req: surface/004 req: surface/005 req: surface/006 req: surface/007 req: surface/008 req: surface/009 req: surface/010
|
||||
- Optional `.heml` editor overlays must share authority with `hemx-build` diagnostics and `docs/hemplate-syntax.md`; `hemx-lsp` owns editor protocol glue for diagnostics/completion/hover and derive-known template facts, while VS Code/Cursor/Neovim keep normal HTML/tree-sitter tooling. Do not create a second template language, selector model, formatter, Rust type system, or custom editor framework. req: diagnostics/004 req: diagnostics/005 req: diagnostics/006
|
||||
- JS runtime changes must preserve root-scoped lookup, fail-closed request handling, root-scoped error outlets, and tiny pending/failure/trigger-timing conventions without selectors, VDOM, expressions, or per-node listeners. req: runtime/005 req: convention/001 req: convention/003 req: convention/005 req: convention/007
|
||||
- Opaque island JavaScript is a leaf adapter for high-frequency local behavior only; it must not introduce a component runtime, client state graph, VDOM, or second UI model. req: canonical_authoring/017
|
||||
|
||||
+12
-12
@@ -279,40 +279,40 @@ Category modules such as `targets`, `handles`, and `forms` remain available for
|
||||
## surface
|
||||
|
||||
### req: surface/001
|
||||
001 `hemplate_build` may scan `.heml` files and emit `$OUT_DIR/hemplate.surface.postcard` (postcard-encoded, deterministic, versioned). `hemx_build` may also be called in-process with precomputed hemplate Surface facts or, for simple build scripts, ask hemplate to parse/extract the Surface before hemx interprets it. hemx owns no independent `.heml` parser.
|
||||
0 001 `hemplate_build` scans `.heml` and emits versioned postcard Surface facts at `$OUT_DIR/hemplate.surface.postcard`. `hemx_build` may take precomputed facts or ask hemplate to extract them, but hemx owns no independent `.heml` parser. [north_star]
|
||||
|
||||
### req: surface/002
|
||||
002 The Surface contains: nodes (NodeId, parent, scope, element, attrs, source span), scopes (ScopeKind: Root | If | Match | Case | For { binding, key_expr }), forms (form controls with raw HTML types), and component uses.
|
||||
0 002 The Surface contains: nodes (NodeId, parent, scope, element, attrs, source span), scopes (ScopeKind: Root | If | Match | Case | For { binding, key_expr }), forms (controls with raw HTML types), and component uses. [north_star]
|
||||
|
||||
### req: surface/003
|
||||
003 Node identity is `NodeId` in a parent/scope graph. No `css_path` is used as a primary identifier. An optional `debug_path` string may exist for diagnostics only.
|
||||
0 003 Node identity is `NodeId` in a parent/scope graph. No `css_path` is used as a primary identifier. An optional `debug_path` string may exist for diagnostics only. [north_star]
|
||||
|
||||
### req: surface/004
|
||||
004 Form controls in the Surface carry raw HTML facts: `ControlKind::Text`, `ControlKind::Number { min, max, step }`, `ControlKind::Checkbox`, `ControlKind::Select { multiple, options }`, etc. No Rust type mapping lives in hemplate.
|
||||
0 004 Form controls in the Surface carry raw HTML facts: `ControlKind::Text`, `ControlKind::Number { min, max, step }`, `ControlKind::Checkbox`, `ControlKind::Select { multiple, options }`, etc. No Rust type mapping lives in hemplate. [north_star]
|
||||
|
||||
### req: surface/005
|
||||
005 Loop scopes expose the binding name and an optional `key_expr` (e.g. `todo.id`). hemplate does not enforce key usage; it only records it for consumers. hemx_build enforces key presence only when a hemx-addressable node appears inside the loop.
|
||||
0 005 Loop scopes expose the binding name and optional `key_expr` such as `todo.id`. hemplate only records key usage; hemx_build enforces key presence when a hemx-addressable node appears inside the loop. [north_star]
|
||||
|
||||
### req: surface/006
|
||||
006 Surface schema is versioned (`schema_version: u32`). Postcard encoding, no JSON. `no_std`-compatible schema definition so any tool can read it without heavy dependencies.
|
||||
0 006 Surface schema is versioned (`schema_version: u32`). Postcard encoding, no JSON. `no_std`-compatible schema definition so any tool can read it without heavy dependencies. [north_star]
|
||||
|
||||
### req: surface/007
|
||||
007 `hemplate-derive` does not write Surface files. Surface generation is a `build.rs` / `hemplate_build` concern, proc-macro side-effect free.
|
||||
0 007 `hemplate-derive` does not write Surface files. Surface generation is a `build.rs` / `hemplate_build` concern, proc-macro side-effect free. [north_star]
|
||||
|
||||
### req: surface/008
|
||||
008 The Surface records hemplate structural directives as first-class facts:
|
||||
0 008 The Surface records hemplate structural directives as first-class facts: [north_star]
|
||||
`h-for`, `h-key`, `h-if`, `h-else-if`, `h-else`, `h-match`, `h-case`,
|
||||
dynamic `+attr` bindings, and interpolated attr/text expressions. hemx consumes
|
||||
these facts; if a build script points hemx_build at `.heml` files, hemplate still performs parsing and Surface extraction.
|
||||
|
||||
### req: surface/009
|
||||
009 Raw/pre-rendered HTML insertions are opaque Surface holes. The parent
|
||||
element is present; hemx_build emits the appropriate rendering call.
|
||||
0 009 Raw/pre-rendered HTML insertions are opaque Surface holes. The parent
|
||||
element is present; hemx_build emits the appropriate rendering call. [north_star]
|
||||
|
||||
### req: surface/010
|
||||
010 Attribute values preserve their origin: static literal, dynamic `+attr`
|
||||
0 010 Attribute values preserve their origin: static literal, dynamic `+attr`
|
||||
binding, or interpolated expression. hemx-build uses this to determine whether
|
||||
a `data-*` handle param is statically known or runtime-extracted.
|
||||
a `data-*` handle param is statically known or runtime-extracted. [north_star]
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user