feat(v1): harden typed runtime boundaries
Elect one canonical EffectBatch codec, remove the parallel postcard API, and strengthen fail-closed host, form, sync, WASM, macro, generated-contract, and test-harness proofs with mutation-driven coverage. req: wire/008 req: wire/009 req: wire/010 req: push/008 req: client_local/015 req: client_local/016 req: client_local/017 req: client_local/018 req: client_local/019 req: sync/024 req: sync/025 req: sync/026 req: sync/027 req: sync/028 req: sync/029 req: test/020 req: test/021
This commit is contained in:
+39
-5
@@ -372,12 +372,18 @@ what a valid business email is. [north_star]
|
||||
|
||||
003 HTTP interaction responses may be `text/html` fragments containing `<template data-hemx>...`. Push streams use `application/hemx` or transport-specific event frames carrying serialized `EffectBatch`. [north_star]
|
||||
|
||||
004 Server push is orthogonal: integration crates stream postcard `EffectBatch` over SSE or WebSocket connections. hemx core owns the effect bytes; transport and connection management are integration concerns. [north_star]
|
||||
004 Server push is orthogonal: integration crates stream canonical `EffectBatch` bytes over SSE or WebSocket connections. hemx core owns the effect codec; transport and connection management are integration concerns. [north_star]
|
||||
|
||||
005 No JSON anywhere in hemx-internal artifacts. Public request/response envelopes use `application/x-www-form-urlencoded`; effects and symbols use postcard. `application/json` is acceptable only at integration boundaries. [north_star]
|
||||
005 No JSON anywhere in hemx-internal artifacts. Public request/response envelopes use `application/x-www-form-urlencoded`; `EffectBatch` uses the versioned hemx codec; generated symbols and surface facts may use postcard. `application/json` is acceptable only at integration boundaries. [north_star]
|
||||
|
||||
007 `EffectBatch::encoded_len` reports the exact canonical wire size, and `to_wire` uses it to pre-size encoding to one output allocation while preserving canonical bytes. [north_star]
|
||||
|
||||
008 The canonical `EffectBatch` codec must use `HEMX` magic, fixed-width little-endian numbers, length-prefixed UTF-8, and one-byte closed-variant tags. [north_star]
|
||||
|
||||
009 `EffectBatch::from_wire` must reject bad magic, truncation at every byte boundary, invalid UTF-8, unknown tags, and trailing bytes without panicking. [north_star]
|
||||
|
||||
010 `EffectBatch` must expose only `encoded_len`, `to_wire`, and `from_wire` as its wire contract; postcard conversion is not a parallel effect-batch format. [north_star]
|
||||
|
||||
---
|
||||
|
||||
## abi
|
||||
@@ -402,7 +408,7 @@ what a valid business email is. [north_star]
|
||||
|
||||
003 The core JS runtime target is under 5KB minified+gzipped. It remains a tiny op interpreter: no selectors, VDOM, scheduler, or expressions. [north_star]
|
||||
|
||||
006 The core JS runtime reads postcard `EffectBatch` bytes and applies them as DOM operations. Optional sync/transition/WASM helpers are separate files. [north_star]
|
||||
006 The core JS runtime reads canonical versioned hemx `EffectBatch` bytes and applies them as DOM operations. Optional sync/transition/WASM helpers are separate files. [north_star]
|
||||
|
||||
004 Core runtime exposes a minimal version/fingerprint handshake only. Capability negotiation belongs to integration crates such as `hemx-wasm`, `hemx-sync`, and `hemx-transition`. [north_star]
|
||||
|
||||
@@ -472,7 +478,7 @@ what a valid business email is. [north_star]
|
||||
|
||||
## push
|
||||
|
||||
001 Server push streams canonical postcard EffectBatch over SSE or WebSocket. hemx core owns the EffectBatch schema, not the transport.
|
||||
001 Server push streams canonical versioned hemx `EffectBatch` bytes over SSE or WebSocket. hemx core owns the effect codec, not the transport.
|
||||
|
||||
002 SSE/WebSocket connections are authenticated by the server framework before stream creation. hemx does not define auth semantics for streams.
|
||||
|
||||
@@ -486,6 +492,8 @@ what a valid business email is. [north_star]
|
||||
|
||||
007 Cross-origin push streams belong to explicit integration code rather than the standard runtime convention.
|
||||
|
||||
008 SSE must transport canonical `EffectBatch` bytes as one unpadded base64url value in the `hemx` event data field. [north_star]
|
||||
|
||||
---
|
||||
|
||||
## sync
|
||||
@@ -536,6 +544,18 @@ what a valid business email is. [north_star]
|
||||
|
||||
023 A durable browser test proves offline mutation, reload, reconnect replay, duplicate delivery, rejection, conflict, schema mismatch, and final convergence through public hemx APIs. [north_star]
|
||||
|
||||
024 Sync channel names must contain 1..=128 ASCII alphanumeric, colon, underscore, hyphen, or period bytes. [north_star]
|
||||
|
||||
025 Flat patch identifiers must contain 1..=128 bytes from the sync-channel character set. [north_star]
|
||||
|
||||
026 Flat patch keys must contain 1..=64 bytes, begin with an ASCII letter, continue with ASCII alphanumeric, underscore, or hyphen bytes, and exclude reserved keys. [north_star]
|
||||
|
||||
027 Flat patch string values must not exceed 4,096 bytes, and integer values must remain within JavaScript's safe integer range. [north_star]
|
||||
|
||||
028 Flat patch serialization must produce valid JSON with escaped string values. [north_star]
|
||||
|
||||
029 Flat patch deserialization must reject unknown fields, unsupported schemas, and invalid identifiers, keys, or values. [north_star]
|
||||
|
||||
---
|
||||
|
||||
## local
|
||||
@@ -680,6 +700,10 @@ what a valid business email is. [north_star]
|
||||
|
||||
019 Repo-owned process-backed tests use one RAII harness that waits for TCP readiness, reports early exit or timeout with the process label and address, and always reaps the child. [north_star]
|
||||
|
||||
020 Full local release verification must mutation-test each mutation-applicable Rust library through its package-native test targets. [north_star]
|
||||
|
||||
021 Unexplained missed mutants must block release; equivalent, invariant-only, and infrastructure-inapplicable mutants must be explicitly classified. [north_star]
|
||||
|
||||
---
|
||||
|
||||
## check
|
||||
@@ -742,6 +766,16 @@ what a valid business email is. [north_star]
|
||||
|
||||
014 Client-local behavior has a browser-level proof using generated resources, a real WASM artifact, zero app-authored JavaScript, and network instrumentation that distinguishes local from server execution. [north_star]
|
||||
|
||||
015 The client-local boundary must reject an empty event kind or an event kind over 256 UTF-8 bytes before application code runs. [north_star]
|
||||
|
||||
016 The client-local boundary must reject an optional value over 65,536 UTF-8 bytes before application code runs. [north_star]
|
||||
|
||||
017 The client-local boundary must reject an optional key over 1,024 UTF-8 bytes before application code runs. [north_star]
|
||||
|
||||
018 The client-local boundary must reject encoded state over 1,048,576 UTF-8 bytes before application code runs. [north_star]
|
||||
|
||||
019 The client-local boundary must accept only event ABI version 1 and state ABI version 1 before application code runs. [north_star]
|
||||
|
||||
---
|
||||
|
||||
## async_data
|
||||
@@ -826,7 +860,7 @@ what a valid business email is. [north_star]
|
||||
|
||||
## ts
|
||||
|
||||
001 TypeScript definitions for `hemx-js` runtime are shipped as a single `.d.ts` file. Types mirror the postcard `EffectBatch` schema for advanced consumers. Tooling must not depend on these types for core functionality; they are developer convenience only.
|
||||
001 TypeScript definitions for `hemx-js` runtime are shipped as a single `.d.ts` file. Types mirror the canonical `EffectBatch` schema for advanced consumers. Tooling must not depend on these types for core functionality; they are developer convenience only.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user