7.8 KiB
7.8 KiB
| 1 | ID | RULE | INTENTS |
|---|---|---|---|
| 2 | kernel/001 | The wire effect algebra must contain only Patch, Insert, Remove, Move, Focus, Scroll, Visit, and Dispatch. | protocol/001 scope/001 |
| 3 | kernel/002 | Patch must offer Morph and Replace; Insert and Move must use first, last, before, or after positions. | protocol/001 resource/001 |
| 4 | kernel/003 | Every DOM effect target must be a generated resource reference, never a CSS selector. | resource/001 protocol/001 |
| 5 | kernel/004 | A batch must validate its envelope before applying effects in order and stopping at the first failure. | protocol/001 |
| 6 | kernel/005 | A later effect must be able to address a resource created by an earlier effect in the same batch. | protocol/001 resource/001 |
| 7 | kernel/006 | Move must preserve the identity and browser-owned state of the moved node. | protocol/001 web/001 |
| 8 | kernel/007 | Rendered HTML must enter an effect only through the explicit SafeHtml type. | server/001 web/001 |
| 9 | kernel/008 | Identical semantic effect batches must produce identical canonical wire bytes. | protocol/001 |
| 10 | kernel/009 | Decoding must reject invalid magic, versions, tags, lengths, UTF-8, fingerprints, and trailing bytes. | protocol/001 |
| 11 | kernel/010 | Compatibility must never guess an opcode, resource, selector, fingerprint, or alternate wire meaning. | protocol/001 |
| 12 | kernel/011 | Canonical effect batches must round-trip between typed values and wire bytes without semantic loss. | protocol/001 |
| 13 | kernel/012 | A compatibility fixture must accept only its declared wire ABI version. | protocol/001 |
| 14 | kernel/013 | Focus must change focus without encoding form validation or other application policy. | protocol/001 web/001 |
| 15 | kernel/014 | Scroll must reveal its resource without changing focus. | protocol/001 web/001 |
| 16 | kernel/015 | Dispatch must carry a generated typed non-visual payload without mutating the DOM. | protocol/001 resource/001 |
| 17 | kernel/016 | Visit must update URL history through partial navigation with ordinary navigation fallback. | protocol/001 web/001 |
| 18 | resource/001 | Generated resource types must expose only operations valid for their capability. | resource/001 |
| 19 | resource/002 | Generated APIs must carry resource, action, fingerprint, opcode, and marker values for application code. | resource/001 |
| 20 | resource/003 | Repeated resources must use generated stable keys for typed Remove and Move operations. | resource/001 protocol/001 |
| 21 | resource/004 | Generated form helpers must address fields through typed resources, not copied selectors or IDs. | resource/001 server/001 |
| 22 | resource/005 | Generated artifacts must change only when their semantic template inputs change. | resource/001 protocol/001 |
| 23 | resource/006 | Missing or invalid generated resources must fail compilation with an actionable source diagnostic. | resource/001 |
| 24 | html/001 | Generated markup must use data-hemx-root, build, resource, key, action, and island markers. | resource/001 protocol/001 |
| 25 | html/002 | Native event defaults must need no attribute; data-hemx-on must only override the native event. | web/001 scope/001 |
| 26 | html/003 | Navigation must use anchors or GET forms and retain ordinary browser fallback without enhancement. | web/001 server/001 |
| 27 | html/004 | On validation failure, rendered forms must identify invalid fields and associate accessible messages. | web/001 server/001 |
| 28 | html/005 | Hemx must preserve native keyboard, IME, autofill, file selection, and constraint-validation behavior. | web/001 scope/001 |
| 29 | html/006 | Request policy must cover only concurrency, debounce, throttle, confirmation, navigation, and history. | web/001 scope/001 |
| 30 | html/007 | Concurrency policy must be one of latest, queue, drop, or parallel. | web/001 scope/001 |
| 31 | runtime/001 | The browser runtime must apply an effect only within the root owning its generated resource. | protocol/001 resource/001 |
| 32 | runtime/002 | Loading the runtime must expose diagnostics without performing startup side effects. | protocol/001 |
| 33 | runtime/003 | Ordinary forms must submit URL-encoded data unless native semantics select another encoding. | web/001 server/001 |
| 34 | runtime/004 | GET forms must produce URL-state navigation while retaining ordinary navigation fallback. | web/001 server/001 |
| 35 | runtime/005 | HTTP, decode, or effect failure must stop the batch and emit one root-scoped diagnostic. | protocol/001 |
| 36 | runtime/006 | SSE and WebSocket adapters must carry unchanged canonical effect-batch bytes. | protocol/001 scope/001 |
| 37 | runtime/007 | Each optional adapter must bind once, scan inserted fragments, clean removals, and enforce root ownership. | scope/001 protocol/001 |
| 38 | runtime/008 | An explicit island must own its subtree; Hemx must not morph through island-owned nodes. | scope/001 web/001 |
| 39 | axum/001 | Axum effect responses must carry canonical batch bytes and the generated build fingerprint. | protocol/001 resource/001 |
| 40 | axum/002 | Axum must serve the generic browser runtime without owning application behavior. | server/001 scope/001 |
| 41 | axum/003 | Partial navigation must preserve status and title metadata and support full-navigation recovery. | web/001 server/001 |
| 42 | axum/004 | Interaction requests must enforce media type and configured body limits before handler dispatch. | server/001 |
| 43 | axum/005 | Typed dispatch responses must preserve status, canonical bytes, and actionable diagnostics. | protocol/001 server/001 |
| 44 | build/001 | A template read failure must report the source path and I/O cause. | resource/001 |
| 45 | build/002 | Identical inspected template inputs must produce identical generated contract fingerprints. | resource/001 protocol/001 |
| 46 | build/003 | A no-op build must not rewrite an unchanged generated contract artifact. | resource/001 |
| 47 | derive/001 | The surface macro must preserve user-authored inline module items while adding generated resources. | resource/001 |
| 48 | derive/002 | The handler macro must reject unknown handles and invalid handler signatures at compilation. | resource/001 server/001 |
| 49 | derive/003 | The component macro must reject a component missing its required handler implementation. | resource/001 server/001 |
| 50 | derive/004 | A reference to an absent generated resource must fail compilation. | resource/001 |
| 51 | wasm/001 | Normal server-side Hemx APIs must compile for wasm32 without host parser dependencies. | portable/001 |
| 52 | boundary/001 | Framework transport behavior must stay in hemx-axum and generic browser behavior in hemx-js. | scope/001 |
| 53 | boundary/002 | Optional transport, timer, and reveal behavior must be direct lifecycle adapters, not a plugin registry. | scope/001 protocol/001 |
| 54 | boundary/003 | The core must have no effects for classes, styles, attributes, scripts, validation, dialogs, or transport. | scope/001 web/001 |
| 55 | boundary/004 | Hemx must not maintain a client application store that mirrors authoritative server state. | server/001 scope/001 |
| 56 | test/001 | Public test utilities must inspect synchronous and asynchronous handlers through one effect model. | server/001 protocol/001 |
| 57 | test/002 | A failed HTML update assertion must report both expected and actual effects. | protocol/001 |
| 58 | test/003 | Public test utilities must inspect complete documents with owned HTML structure. | web/001 |
| 59 | test/004 | With Axum support enabled, public test utilities must inspect effect responses through a real router. | protocol/001 server/001 |
| 60 | test/005 | The public process helper must wait for delayed TCP readiness and capture child output on failure. | server/001 |
| 61 | architecture/001 | hemx-build template authoring validation must live in a private module separate from artifact emission. | maintainability/001 |
| 62 | architecture/002 | hemx-build Rust source fact extraction must live in a private module separate from validation and emission. | maintainability/001 |
| 63 | architecture/003 | hemx-build artifact emission and contract diagnostics must live behind the public builder in a private module. | maintainability/001 |
| 64 | architecture/004 | hemx-axum interaction-form extraction and decoding must live in one private module behind public adapter types. | maintainability/001 |
| 65 | assurance/001 | Generated-contract checks must compare resource capabilities, stable fingerprints, and source diagnostics. | assurance/001 resource/001 |
| 66 | assurance/002 | Handler compile checks must cover each documented Form<T> spelling and custom multipart extraction. | assurance/001 server/001 |