Files
hemx/PLAN.md
T
slhx agent e9ced4e0c1 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
2026-07-16 22:27:28 +02:00

5.9 KiB
Raw Blame History

Active frontier — v1 production readiness

Parent outcome

  • User value: Rust teams can adopt hemx v1 knowing its public contracts, failure recovery, compatibility, dependency policy, and release proof are explicit and reproducible.
  • State: In progress — the product and representative runtime/browser/performance/security paths are implemented, but v1 production readiness is not yet closed.
  • Blocked by: the repository owner must approve a distribution license policy before the legal release gate can close; this does not block mutation hardening or local release verification.
  • Non-goals: no new framework surface, second wire format, WASM runtime decoder, deployment, publication, signing, store submission, or feature expansion.
  • Proof: every child below is done; docs/v1-readiness.md reports GO without contradicting REQUIREMENTS.md; the tree is committed and clean.

1. Checkpoint the current robustness slice

  • State: Done — committed as the current robustness slice after full workspace, focused compile-fail, requirements-reference, formatting, and check proof.
  • User value: users receive one explicit typed EffectBatch codec and stronger fail-closed form, sync, host, WASM, macro, test-harness, and generated-contract boundaries without parallel magic.
  • Build: review the current diff as one coherent behavior/requirements slice; retain the canonical non-WASM EffectBatch codec and remove the duplicate postcard batch API; keep only mutation-driven tests and simplifications that prove public behavior; run the full local test authority; commit the slice.
  • Blocked by: none.
  • Proof: cargo run -p hemx-xtask -- test, cargo fmt --check, cargo check --workspace, redgate list, and redgate refs pass; git diff --check is clean; the focused mutest receipts for the effect codec, hemx, hemx-host, hemx-js, hemx-wasm, hemx-sync, hemx-sync-macros, hemx-test public helpers, and hemx-axum form/SSE codecs contain no missed mutants; one Conventional Commit records the requirement IDs.

2. Make mutation testing a reproducible release gate

  • State: Ready
  • User value: maintainers can run one bounded repository command and trust that meaningful Rust logic across every mutation-applicable library is either killed or explicitly justified.
  • Build: add a capped hemx-xtask mutation command that invokes /opt/repositories/mutest/mutest through package-native test targets rather than the broken workspace-wide example path; enumerate only current mutation-applicable library/proc-macro packages; finish adversarial tests or simplify code until every survivor is classified; keep equivalent, invariant-only, and infrastructure-inapplicable classifications inspectable and minimal; document the exact local release command in the existing readiness surface.
  • Blocked by: none; broad survivors currently remain in hemx-axum, hemx-build, hemx-core, hemx-derive, hemx-lsp, and hemx-test outside already-clean focused contracts.
  • Proof: the new xtask mutation command exits zero within its documented bound, covers each applicable package, emits no unexplained missed mutant, and a deliberate adjacent mutation makes it fail. cargo run -p hemx-xtask -- test remains green. req: test/020 req: test/021

3. Elect and enforce the release license policy

  • State: Needs decision
  • User value: adopters can legally evaluate and redistribute hemx with a machine-checked dependency license boundary.
  • Build: owner chooses the repository distribution license and accepted dependency licenses; add the corresponding root license file(s) and minimal deny.toml; classify workspace crates and the current dependency set; run strict license, advisory, and source checks; reject unknown/unlicensed dependencies rather than silently broadening policy.
  • Blocked by: owner legal decision: choose the repository license and whether weak-copyleft dependencies are acceptable. Current dependency licenses observed by cargo deny list include Apache-2.0, Apache-2.0 WITH LLVM-exception, BSD-3-Clause, BSL-1.0, MIT, Unicode-3.0, Unlicense, plus unlicensed workspace packages because the repository has no elected license.
  • Proof: cargo deny check licenses advisories sources exits zero from repository configuration; every allowed license is explicit; the repository license is visible at the root; adding a disallowed/unlicensed fixture fails the gate. req: security/007 req: v1_release/006

4. Issue the final v1 GO/NO-GO decision

  • State: Blocked by slices 13
  • User value: users get an honest release candidate whose documented support, recovery, accessibility, performance, examples, and operational behavior match what was actually proven.
  • Build: rerun the complete local release matrix from docs/v1-readiness.md, including mutation and license gates; verify the pinned Rust/browser/WASM/Axum compatibility matrix and migration fixture; run browser, offline/reconnect, mixed-deploy recovery, accessibility, security, performance, docs, and canonical-example proofs; independently audit requirement-to-proof coverage and README/readiness contradictions; fix only release-blocking defects; mark GO only when no P0/P1 or unexplained gate failure remains.
  • Blocked by: slices 13; publishing/deployment authority remains separate and is not required for a local GO decision.
  • Proof: all commands in docs/v1-readiness.md pass from a clean checkout within documented bounds; redgate list and redgate refs pass; known installed redgate health/lint corpus-format warnings are either resolved or accurately documented rather than hidden; docs/v1-readiness.md says GO and names zero open release blockers; independent contradiction review agrees. req: v1_release/001 req: v1_release/002 req: v1_release/003 req: v1_release/004 req: v1_release/005 req: v1_release/006 req: v1_release/007 req: v1_release/008 req: v1_release/009 req: v1_release/010