Skip to content

v0.2.0

Choose a tag to compare

@thejackshelton thejackshelton released this 17 Aug 23:19

compare changes

πŸš€ Enhancements

  • compiler: Add collectTsrxModuleDiagnostics result-wide aggregator (00c2a4d6)
  • bundler: Fail closed on compiler error diagnostics in transformTsrxModule (2a87cc13)
  • typescript-plugin: Surface TSRX parse failures as editor diagnostics (cc42f4d2)
  • bundler: Structured dev error protocol, self-contained overlay client, and HMR error transport (0a977cdb)
  • router: Dev navigation failures render the structured error document with a production terminal fallback (db1bfda8)
  • runtime: Key-phase gating spike for chained async computeds (b8f1c4b6)
  • web: Dedicated async-runner transport and pending-shell self-wake (96a2dc20)
  • compiler: Snapshot read paths, sync-hop chains, SSR dedup, cycle diagnostic (4ff1e49f)
  • web: Hardening matrix, state-graph spec semantics, runtime byte diet (0b7b2169)
  • demos: Measured data-fetching comparison - Markless vs TanStack Start (6e856388)
  • poc: Navigation-intent prefetch derived from the asyncRunners graph (2da3e62a)
  • compiler: AST-owned prop binding identity and typed capture slots (767f5c03)
  • compiler: Bound resolver rows and capture ABI for child symbols (61e46346)
  • compiler,bundler,web: Bound-ID composition and runtime capture invocation (b8844a6e)
  • bundler: Fail closed when imported children lack capture metadata (5466a583)
  • compiler: Named component-body locals classify as callback routes (8ac948a8)
  • compiler: Passthrough routes for own props forwarded to imported children (1c2ce1a6)
  • storage: W1a β€” storage() declaration, state-kind binding with storage metadata (storage:#), static key/fallback diagnostics (MARKLESS_STORAGE_KEY_STATIC, charset [a-z][a-z0-9-]*), module-scope collection, public-render lowering with no surviving call; test:compiler 488/488 + core 7/7 (fb3e399d)
  • storage: W1b transport + W1c import sources β€” usedStorageBindings reachability filter, storage[] payload records, protocol v2 (strict both decoders, v1 byte-identity tested), full-resume forcing (demand map + needsFullResume, storage full-handoff test), storage-slot constants, additionalFrameworkApiSources threading; compiler 491/491, serializer 32/32; KNOWN RED: 3 zero-slack gzip gates exceeded (vite-csr +144, vite-plus +131, music-player-ssr +1323 gz bytes) β€” repair follows, budgets NOT loosened (c9369b8b)
  • storage: W2a+W2b β€” render-time seed generation (storageAccess immediate ([deferred, nonce, storage-only payload gate, router head relocation + leading-fragment contract, storage-free byte-identity asserted) + runtime lazy cells (exactly-once readInitializer w/ Object.is suppression) + wake-time slot override w/ deferred marker + hardened storage plane (per-subscription try/catch write-back + attr) + host runtime.enableStorage(); web 289/289, runtime 44/44, compiler 491/491](deferred, nonce, storage-only payload gate, router head relocation + leading-fragment contract, storage-free byte-identity asserted) + runtime lazy cells (exactly-once readInitializer w/ Object.is suppression) + wake-time slot override w/ deferred marker + hardened storage plane (per-subscription try/catch write-back + attr) + host runtime.enableStorage(); web 289/289, runtime 44/44, compiler 491/491))
  • storage: W2c WIP β€” let/const storage declaration support (let=writable, const=read-only persisted cell, reassignment diagnosed), vitest-browser SSR harness storageAccess/nonce options + typings, storage.tsrx fixture + 4 browser contract tests; compiler 492/492, ssr-plugin 5/5. PENDING: browser lane (ba2vki10z) executing the 4 contract cases β€” NOT yet confirmed green; new session must verify before accepting W2c (b21d6fd5)
  • storage: Remove deferred consent β€” storage is always immediate (storageAccess + enableStorage + mode slot deleted) (f4240a1a)
  • storage: Optional identifier-derived keys β€” storage(fallback) derives markless: (5fa92987)
  • release: Publish from CI via npm trusted publishing, and cut 0.2.0 (803aeeb8)

πŸ”₯ Performance

  • web,compiler,bundler: Recover 69 gzip bytes of emitted runtime (020e1a21)
  • compiler,bundler: Compact serialized bound-row payload encoding (0e93ffc3)
  • storage: Byte-neutrality repair β€” production no longer ships the 4.6KB-gz dev protocol validator (MARKLESS_DEV_ENABLED define; dev/test validation unchanged); music-player-ssr budget PASS by 2,847 B; vite-csr/vite-plus remain red by 13/19 B = irreducible strict-v2-decoder bytes (OWNER DECISION pending: ~20B budget raise vs specialized v1/v2 entrypoints; validation NOT weakened) (acc7c8eb)

🩹 Fixes

  • router: Deliver scoped TSRX styles (2144f9cf)
  • router: Keep style maps server-only (359d494c)
  • router: Collect finalized route css (b28a339e)
  • router: Make scoped style fallback deterministic (52b34fc9)
  • router: Persist client assets for SSR (7a9dc8d2)
  • bundler: Invalidate ?direct virtual style modules on hot update (76d0e6a0)
  • compiler: Per-variant diagnostic severities so error means must-not-ship (b1330e15)
  • bundler: Gate on severity alone now that compiler owns per-variant calibration (aad14050)
  • typescript-plugin: Canonical parse-failure keys and clamped diagnostic coordinates (f4e3ee87)
  • bundler: Attribute child-scoped symbols in dev byte accounting and label estimates as est. source (b824b2c3)
  • bundler: Recheck invalid sources so byte-identical fixes clear the dev error overlay (2238b5b1)
  • bundler: Harden dev error surface β€” docsUrl scheme allowlist, recheck lifecycle, deduped preflight sends, positioned editor links (b7f834b8)
  • web: Close critique findings on runner transport and self-wake (1df52bc7)
  • compiler: Async-capable sync computeds are first-class in every context (957a1125)
  • web: Emit the self-wake suffix only for unsettled-boundary documents (93df5546)
  • compiler: Element-valued guard returns now emit a severity-error diagnostic (62fd769b)
  • compiler: Keyed object payloads in lazy symbols, callback arity fails closed (620bd8b5)
  • compiler,web: Authored prop keys and imported sole-root component mounting (f983fe7e)
  • compiler: Harden guard-return and callback emission after adversarial review (5e5a1002)
  • cli: Scaffolded apps now receive a .gitignore (c54966e8)
  • bundler: Production builds emit resolver routes for imported composed children (2ef87083)
  • compiler,web: Capture routing hardened through browser acceptance (bec46c9b)
  • compiler,web,bundler: Cross-module capture metadata and per-edge update records (cc6871db)
  • compiler,bundler: Pre-merge critique repairs β€” awaited cross-module callbacks, local shadowing, HMR parent invalidation (7cedc79e)
  • bundler: Resolve import specifiers before capture-metadata checks (2061f2ca)
  • bundler: Dev execution-log attribution receives imported children (05a5b79d)
  • compiler,web: Route parent-prop child updates through capture slots with namespace-safe bound IDs (77f6a2e2)
  • compiler: Classify imported-child projection like same-module projection (cbf08d9d)
  • compiler: Absent optional props on imported edges classify as constant undefined (19d099d5)
  • storage: Repair the 2 warm/write browser failures (component read fallback instead of seeded value) β€” two root causes: 1) slot-key mismatch: seed wrote slot under bundler-filename key, wake looked up under graphNodeId-derived key -> never matched. New createStorageSeedMetadataFromGraphNodeId anchors both to the same graphNodeId (transform.ts). 2) reconcile gap: immediate/warm adoption SET the cell's initial value (no notification; Object.is-suppressed vs SSR text), so the SSR-rendered fallback text never reconciled. Now routes the seeded value through readInitializer (dirty-on-first-read, the proven lazy path), cell stays at fallback, reads slot not driver (no extra driver read). Mirrors enableStorage's working write-based reconcile. Compiler 492 + web units 289 green. BROWSER 4/4 NOT yet executed-confirmed: the vitest-browser lane keeps getting SIGTERM'd by the harness background-job timeout before completion (needs a longer-lived run); a wedged port node proc (72056) was also compounding startup hangs and is now cleared. Next session/human: run the lane to completion and confirm 4/4 before accepting W2c. (4784d704)
  • storage: Complete the warm/write reconcile β€” storage plane reads each cell on immediate-mode mount to fire the slot-backed readInitializer (dirty->flush->dependents reconcile from fallback to seeded value). This closes the gap fix #2 alone left: the initializer only fires on a read, and an SSR-rendered binding never re-reads itself. NEW Node test 'immediate warm mount reconciles a dependent from fallback to the seeded value' asserts the exact browser-failure scenario (subscriber notified 'dark' exactly once, zero extra driver read) β€” EXECUTED-PROVEN in Node (runs where the browser lane cannot). web+runtime 334 green. (#2)
  • release: Do not mistake setup-node's placeholder for a stored npm token (96999ab3)

πŸ“– Documentation

  • storage: Document storage() β€” derived markless: key, pin explicit for durable data (rename caveat) (a517164d)

🏑 Chore

  • Read-only permission allowlist + drop completed preload goal charter (f0ab4f85)
  • Regenerate CI receipts at the shipping head; drop a scratch script (03b25278)
  • Ledger tail through the agent-integration close (de80205d)
  • Ledger through the vscode-extension goal close (aa4aecda)
  • Ledger through the agent-config goal close (9810e35e)
  • Ledger through the typed-markup goal close + merge (fdcb8336)
  • Ledger through the nav-soak-speedup goal close (d94b6c05)
  • bundler: Recalibrate three size walls to chained-async actuals (c7956526)
  • Ledger through the chained-async-gating goal close (851cf7bb)
  • ci: Calibrate size walls to CI actuals and accept ratified size growth (2a7ed8be)
  • Ledger entries for fail-closed-diagnostics and dev-error-surface closes (8c646067)
  • docs: Add app-level .gitignore matching the scaffold output (5ae565b9)

βœ… Tests

  • Derive expected version from the core manifest (c365d81e)
  • Repair main - metadata pins + consumer-posture shipped wall (ab092599)
  • vitest-browser: Cut navigation soak from 32s to 8s with dedicated 1ms fixtures (d94496e7)
  • Red proof suite for chained async computeds (claims C1-C5) (974fe8e8)
  • Stage-2 red suite for chained-async client productionization (17c98f56)
  • browser: Capture-slot Chromium suite and SSR Witness boxes (a619141d)
  • demos: Library-click interaction boxes red-proven against the broken build (9ff26f35)
  • web: Snapshot region before await in projected-branch fixture (92fbc068)
  • storage: Standalone playwright runner proves the 4 browser contract cases (4/4 green, 3x deterministic) (de7a5fde)

πŸ€– CI

  • Upload analyzer receipts from the hidden .witness directories (7c61da1f)
  • Resolve the Chrome binary explicitly for the JSFB benchmark shards (8dc952f0)

πŸ“‹ Other changes

Commits changelogen could not classify, oldest first. They are here because a
release note that hides most of the history is not a release note.

  • Merge pull request #14 from markless-dev/feat/tsrx-emission-fixes (cf1dcd36)
  • release: tags push reliably (annotated tag + explicit tag push) (99a88853)
  • app-stable v2: released 0.1.1 base (99a8885) + build shim + spec 13 + the window report (4762578b)
  • window report: owner ruling on PR #15 causality, the deeper cut to 0.1.1, final pair state, 5.6 rebuild base (b2868400)
  • Merge branch 'app-stable' (24ec9700)
  • AGENTS.md: four hard rules (app battery before landing, third-strike revert, git status before destructive ops, comments-are-constraints) (2eb6158f)
  • Revert "AGENTS.md: four hard rules (app battery before landing, third-strike revert, git status before destructive ops, comments-are-constraints)" (471298d0)
  • crew(u1-guidance-rebuild): rebuild AGENTS.md/CLAUDE.md into per-workflow guidance files (9d20bd74)
  • crew(u2-state-ledger-cli): append-only state ledger CLI + archive cutover (ba3b2b74)
  • merge crew U1: per-workflow guidance rebuild (a0d12db8)
  • merge crew U2: state ledger CLI (9130cab4)
  • apply .codex skill wrappers blocked by worker sandbox (completes U1) (c4168a41)
  • state ledger: record U1-U3 completion (7e74bfa3)
  • restore four rules lost in distillation (T005 spot-check adjudication) (83452ea3)
  • state ledger: workflow-context-optimization complete (033a961d)
  • adopt ruler: .ruler/ is the single source for agent rules, skills, MCP; generated AGENTS.md/CLAUDE.md stay tracked as the discovery entry (58b9f719)
  • state ledger: ruler adoption (6729294a)
  • commit ruler-generated agent files per ruler team guidance; add pre-commit + CI drift checks (d396371e)
  • state ledger: ruler distribution hardening (956d756f)
  • reusable re-measurement packet: agent-run stats vs 2026-07-09 baseline (dbadfd64)
  • state ledger: parallelism policy (fc83d5dd)
  • debug channel v1: window.MARKLESS_DEBUG for browser QA (compile-gated, additive) (16469cac)
  • restore 'Everything is test-driven.' framing line (aed3acd7)
  • router: debug instrumentation can no longer break SPA interception (6ccb16eb)
  • router: record link-bridge debug registrations without eval (f4b9abf6)
  • debug channel: router delegation survives container swaps and lazy SPA startup (998d178b)
  • @markless/analyzer: browser-app analysis engine extracted from the consumer harness (b8d34c16)
  • AGENTS: consuming-application rule (owner-approved wording) (4a85e4d5)
  • Merge remote-tracking branch 'origin/debug-channel-v1' into review/main-plus-analyzer (2cb8b551)
  • @markless/analyzer: unified MLA verdict contract (cb179ab2)
  • @markless/analyzer: MLA-S1 preload-integrity core + driver (5cffd42f)
  • @markless/analyzer: MLA-S1 navigation semantics (a84781b7)
  • @markless/analyzer: matrix actions may declare navigates (31741bb4)
  • @markless/analyzer: MLA-S2 payload-wiring core + driver (1204c5ff)
  • @markless/analyzer: MLA-S3 locator resolution + MLA-S4 strip guarantee (c856b251)
  • @markless/analyzer: witness verdict emitter β€” pipeline QA lands in the unified MLA report (ea7ca968)
  • Merge remote-tracking branch 'origin/debug-channel-v1' into review/main-plus-analyzer (97b5dd80)
  • @markless/analyzer: audit-2 fixes β€” S1 gates on declarations, S2 bidirectional, witness failure verdicts (937b606e)
  • AGENTS: protocol single-source rule (owner-approved wording) (fbbd8ad2)
  • @markless/runtime: truthful optional peekAsyncSnapshot contract (9f2fa907)
  • repo: branch hygiene for merge gate (5d109d7b)
  • runtime-management: instrument-truthful execution log (aef427a6)
  • @markless/analyzer: document the shipped surface (b3728461)
  • repo: drop last tracked ruler backup (.codex/config.toml.bak) (98b94d6d)
  • jsfb: benchmark fixture measures the instrument-free build (7a6c5e30)
  • runtime-management: qualified-symbol attribution via the sizes asset (9b35d35b)
  • router: deterministic navigation-chunk selection in the preload box (32c8e9c8)
  • bundler: production builds default executionLog to 'never' (owner-ratified) (da9990aa)
  • runtime-management: permanent budget walls for music-player-ssr (owner-ratified) (ba05ce12)
  • state ledger: runtime-management session records (4c61c420)
  • runtime-management: Next-track app-execution wall (conditional ratification met) (1cbc258d)
  • bench guard: corroboration rule for bimodal runner noise (b4451f97)
  • runtime-management: execution-log wiring for plain-render and lean-dispatch paths (3833b9c7)
  • runtime-management: T008D per-app walls + demo console restore (b0529f2a)
  • state ledger: runtime-management goal closed (863f93eb)
  • ruler: merges/pushes/goal-closure require explicit per-change-set owner directive (eedc3b3f)
  • @markless/analyzer: schema-owning receipt-set checker (F1 contract) (bf7e0db9)
  • analyzer-consumption T002: web debug-channel contract gate (A1) (1a99b489)
  • analyzer-consumption T003: bundler adoption (parity, fault-proven, I5 deferred) (6163317b)
  • @markless/web: arm re-commit event pre-install β€” lost-click fix with dedupe guard (dfdde994)
  • analyzer-consumption T004: router adoption β€” matrices, history-URL schema, S1/I2 gates (7e336aad)
  • analyzer-consumption T005: music demos adoption β€” consumer-owned matrices, S1/I2 gates, fault-proven (4c64dbc0)
  • analyzer-consumption T007: retrofit audit fixes β€” bundler preload gates merge-blocking, web negative contract proofs (e177188b)
  • ruler: owner-facing decision menus must be skimmable without goal context (3be698fb)
  • state ledger: analyzer-consumption goal closed (291f239a)
  • octane-bench: benchmark umbrella + ssr-throughput lane (T002) (13c28cbf)
  • octane-bench: streaming-ssr lane (T003) (1c6cff90)
  • octane-bench: news lane β€” resume_first_dispatch_ms with fail-closed preload evidence (T004) (cdfbde84)
  • octane-bench: signal-favoring lane β€” implemented, PARKED RED on a real framework ceiling (T005) (be16ae0f)
  • octane-bench: memo-wall lane β€” memoization gates green on the proven authoring shape (T006) (ca69df95)
  • octane-bench: bundle-size + codegen-size lanes (T007) (397c3ecb)
  • octane-bench: dbmon + todomvc + chat-stream CSR browser lanes (T008) (c7776795)
  • octane-bench: async-waterfall lane PARKED RED; effectful-list blocked, documented (T009/T010) (f6e7164e)
  • octane-bench: clean-tree baselines for all nine green lanes at f6e7164 (78376690)
  • @markless/web: omit inert payload scripts from static SSR output (T007, judge card 1) (b4eb46f6)
  • octane-bench: ssr-throughput pinned pair f6e7164--b4eb46f, improvement kept (f7a19aac)
  • compiler: per-field identical-value text suppression in keyed rows (T008, judge card 2) + memo-wall finding-10 repair (fb016297)
  • compiler: revert naive per-field text-write suppression (T008 verdict: rejected); keep the correctness hardening (4c10f936)
  • octane-bench: fresh memo-wall baseline at 4c10f93 (9955c7f0)
  • octane-bench: T999 audit discrepancy fixes - async-waterfall boundary wording, memo-wall stale shared() sentence, dbmon stale suppression comments (b2ee6eeb)
  • bundler: expand OXC-packed symbol URL arrays in the resolver rewrite (T009, judge card 3 - finding 8 fixed) (543e503f)
  • octane-bench: async-waterfall stanza - still parked red at the runtime gate (finding 11) despite the build fix (2eb341d3)
  • @markless/web: prefix composed child computed derive symbols (T010, judge card 4) + signal-favoring lane repairs (a9c95116)
  • @markless/web: compact composed-computed prefixing to the house spread idiom (d0f794f1)
  • compiler+web: same-module graph-prop mappings so prop-carried computeds re-propagate (T011) (65dfdf43)
  • compiler: canonical single-prefix write-path symbol routes at module boundaries (T012) (f24955f3)
  • octane-bench: signal-favoring stanza - mount fixed (4 of 5 walls down), parked at write-path prefixed-route delegation (8733562f)
  • web+octane-bench: write-path route delegation (T013) + signal-favoring parked on finding 14 (f6b4f18d)
  • bundler: fail-closed symbol-route termination check (T015 - finding 14a made loud and sharpened) (ceac63a7)
  • compiler: classify computed-body dependencies by AST, not raw text (T017, finding 15) (abfef1a3)
  • compiler+web: async chain settlement and arm projection (T014 - finding 11 fixed); async-waterfall lane GREEN (bc9b7c2e)
  • octane-bench: first async-waterfall baseline, clean at bc9b7c2 (4ddda680)
  • compiler+web: same-module dom-update locators + demand-side prop seeding (T018/T019); signal-favoring write path complete (87338165)
  • octane-bench: signal-favoring GREEN - octane-faithful root owners, batch() as one dispatch, truthful evaluation gates (e441f346)
  • octane-bench: first signal-favoring baseline, clean tree (de5d5e44)
  • bundler: integrity-check evidence model matches facade-cleanup reality (T020); audit-flagged doc fixes (75b06541)
  • octane-bench: re-record deterministic size baselines at 75b0654 (8a7c5e08)
  • compiler+web: per-row element handles and attach behaviors in keyed repeats - CSR lifecycle (T021a, finding 9 stage 1) (dacb1eb9)
  • demos: benchmarks are top-level packages; naming made framework-native (owner directive) (ddc87705)
  • crew(ai-c-dev-surfaces): framework dev surfaces: dev-server banner + build-error playbook pointers (zero shipped bytes) (9046d8c9)
  • cli: agent-discovery content + complete the docs eviction (84d5ce37)
  • cli+repo: recovered wave edits - scaffold plumbing, doctor/analyzer entries, docs-goals reference fixes (5899d6a7)
  • cli: fix the minimal starter's counter - reactive state needs let, not const (7c91d6ed)
  • Merge remote-tracking branch 'origin/main' into feat/agent-integration (c2ae4613)
  • typescript-plugin: red completion matrix M1-M7 (vscode-extension T003) (785b4c4a)
  • typescript-plugin+vscode-plugin: green completion matrix M1-M7 (vscode-extension T004) (32122149)
  • repo+cli: identity-independent editor wiring (vscode-extension T007) (b1fdede9)
  • cli+typescript-plugin: extension recommendations + publish shaping (vscode-extension T005) (96e2cef2)
  • vscode-plugin+plugins: self-contained vsix + M7c freshness (vscode-extension T009) (56f6ba6f)
  • Fix resumable runtime state and inline resumer (45708e3b)
  • typescript-plugin: red JSX-children @-construct cases M4b (vscode-extension T014) (7976990d)
  • typescript-plugin: @-construct completions inside JSX children (vscode-extension T015) (57cab1ec)
  • typescript-plugin: red @-catalog parity cases M4c (vscode-extension T017) (c85035fd)
  • typescript-plugin: @-catalog parity with context classes (vscode-extension T018) (5ce1f98e)
  • typescript-plugin: make module-scope scaffold visible in VS Code (vscode-extension T020) (cbd30407)
  • vscode-plugin: scrub ripple branding from shipped grammar assets (vscode-extension T021) (69eea813)
  • typescript-plugin: component scaffold at body statement positions (vscode-extension T023) (74c7df69)
  • typescript-plugin: dedupe catalog + snippet validity guard (vscode-extension T025) (23496ddd)
  • vscode-plugin: client-side auto-closing tags (vscode-extension T026) (959a44dd)
  • vscode-plugin+cli: extension identity markless.markless / 'Markless' (vscode-extension T028) (e1e0f9b1)
  • Merge branch 'feat/vscode-extension' into feat/markless-docs (c772c344)
  • typescript-plugin+vscode-plugin: tag-name completions + auto-close contract (vscode-extension T029) (048bbdd7)
  • cli+core: consent-gated agent setup β€” detect agents, write user-level markless skills, evict scaffold agent files (460c183d)
  • vscode-plugin: activate the built-in TypeScript extension on startup (vscode-extension T031) (74eeb7d2)
  • vscode-plugin+typescript-plugin+cli: Emmet enablement + snippet tag completions (vscode-extension T033) (65244742)
  • Merge branch 'feat/vscode-extension' into feat/markless-docs (59e3d041)
  • compiler+typescript-plugin: TSX-preserving type-service emit, W1 foundation (typed-markup T003) (7284663b)
  • Merge pull request #19 from markless-dev/feat/agent-config (bbc4d91f)
  • Merge main (agent-config: consent-gated agent setup) into feat/markless-docs (6578df41)
  • compiler+typescript-plugin: component prop typing complete, W2 (typed-markup T004) (e9c3c1e9)
  • Merge typed inline resumer into docs integration (952cbdc1)
  • compiler: constructs in TSX children type-check their branches, W3 (typed-markup T005) (772ae524)
  • Add docs consumer and completion matrix lifecycle (f04b7936)
  • Merge feat/markless-docs into main (36a1120f)
  • typescript-plugin: complete intrinsic contract + native tag protocols, W4 (typed-markup T006) (80614f70)
  • typescript-plugin+router+compiler: auto-import + router gate + import-edit mapping, W5 (typed-markup T007) (bf16f8e7)
  • Merge deterministic route CSS manifest (f87031e7)
  • Merge branch 'feat/typed-markup' into feat/markless-docs (744f5dc4)
  • Merge branch 'main' into feat/markless-docs (bf65405a)
  • Merge branch 'fix/frameless-compiler-pipeline-claims' into feat/markless-docs (ed28f48f)
  • Merge branch 'feat/f9-capture-slot-binding' into feat/markless-docs (11f4234d)
  • Merge branch 'feat/f9-capture-slot-binding' into feat/markless-docs (c0759379)
  • Merge branch 'feat/f9-capture-slot-binding' into feat/markless-docs (6b85d42a)
  • Merge branch 'feat/f9-capture-slot-binding' into feat/markless-docs (649dce3b)
  • Merge branch 'feat/f9-capture-slot-binding' into feat/markless-docs (2c8921fb)
  • Merge branch 'feat/f9-capture-slot-binding' into feat/markless-docs (bfc40f7c)
  • Merge branch 'feat/f9-capture-slot-binding' into feat/markless-docs (b2567396)
  • Merge branch 'feat/f9-capture-slot-binding' into feat/markless-docs (98fc906b)
  • Merge branch 'feat/f9-capture-slot-binding' into feat/markless-docs (c1c4599b)
  • feat(storage): W2a+W2b β€” render-time seed generation (storageAccess immediate|deferred, nonce, storage-only payload gate, router head relocation + leading-fragment contract, storage-free byte-identity asserted) + runtime lazy cells (exactly-once readInitializer w/ Object.is suppression) + wake-time slot override w/ deferred marker + hardened storage plane (per-subscription try/catch write-back + attr) + host runtime.enableStorage(); web 289/289, runtime 44/44, compiler 491/491 (07cf9736)
  • MARKER: W2c browser proof is 2/4 FAILING (not green). PASS: cold seed-attr, deferred consent. FAIL: warm 'adopts seed w/o extra driver read' (storage.test.ts:78) + write 'update every plane + survive SSR mount' (storage.test.ts:109) β€” both 'expected light to be dark': the component's reactive {theme} read resolves to FALLBACK, not the slot-seeded/written value. Seed script + attr + slot-write work (cold passes); the wake-time slot override -> component read adoption is the broken link. Prior exit-0 runs were port-conflict false positives. REPAIR NEEDED before W2c accepted. (a893f14f)
  • fix(storage): complete the warm/write reconcile β€” storage plane reads each cell on immediate-mode mount to fire the slot-backed readInitializer (dirty->flush->dependents reconcile from fallback to seeded value). This closes the gap fix #2 alone left: the initializer only fires on a read, and an SSR-rendered binding never re-reads itself. NEW Node test 'immediate warm mount reconciles a dependent from fallback to the seeded value' asserts the exact browser-failure scenario (subscriber notified 'dark' exactly once, zero extra driver read) β€” EXECUTED-PROVEN in Node (runs where the browser lane cannot). web+runtime 334 green. (259f89c9)

❀️ Contributors