HS: scoreboard 1511/1511 (3 architectural skips remaining)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 50s

This session cleared 15 of the 18 documented skips:
  - Toggle parser ambiguity      (1) — 2-token lookahead in parse-toggle
  - Throttled-at modifier        (1) — parser + emit-on wrap + runtime hs-throttle!/hs-debounce!
  - Tokenizer-stream API        (13) — hs-stream wrapper + 15 stream primitives

Plus a perf fix in compiler.sx (hoisted throttle/debounce helpers to
module level so they don't get JIT-recompiled per emit-on call). Wall
time for full batched suite: 28m45s, was 26m17s before sync (so net
+18 tests cost only +2m even though 3x more work).

Remaining skips (3):
  - Template-component scope tests (2) — needs <script type="text/
    hyperscript-template"> custom-element bootstrap registrar.
  - Async event dispatch (1) — repeat until event needs the OCaml
    kernel to release the JS event loop between iterations.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-08 09:31:06 +00:00
parent f4c155c9c5
commit b3c9d9eb3a

View File

@@ -4,22 +4,24 @@ Live tally for `plans/hs-conformance-to-100.md`. Update after every cluster comm
```
Baseline: 1213/1496 (81.1%) initial scrape
Snapshot: 1496/1514 upstream sync 2026-05-08 (+18 new upstream tests)
Conformance: 1496/1496 (100.0%) on counted tests; 18 documented architectural skips
Wall: 26m17s sequential (8 batches × 200) via tests/hs-run-batched.js
Target: 1514/1514 — clear the 18 skip list (in progress)
Snapshot: 1511/1514 upstream sync 2026-05-08 (+18 new upstream tests)
Conformance: 1511/1511 (100.0%) on counted tests; 3 documented architectural skips
Wall: 28m45s sequential (8 batches × 200) via tests/hs-run-batched.js
Target: 1514/1514 — clear the 3 remaining skips
Note: full-suite single-process is unreliable due to JIT cache saturation;
use hs-run-batched.js (fresh kernel per batch) for deterministic numbers.
Cleared this session:
- Toggle parser ambiguity → 2-token lookahead in parse-toggle
- Throttled-at modifier → parser + emit-on wrap + hs-throttle!/hs-debounce!
- Tokenizer-stream API (13) → hs-stream wrapper + 15 stream primitives
```
## Skip list (18 — work to do)
## Skip list (3 — work remaining)
| Skip | Reason | Estimated work |
|------|--------|----------------|
| **Tokenizer-stream API (13)**`matchToken`, `matchTokenType`, `matchOpToken`, `matchAnyToken*`, `peekToken`, `consumeUntil`, `consumeUntilWhitespace`, `pushFollow`/`popFollow`, `pushFollows`/`popFollows`, `clearFollows`/`restoreFollows`, `lastMatch`, `lastWhitespace` | Upstream exposes a streaming token API on `_hyperscript.internals.tokenizer`. Our `hs-tokenize` returns a flat list; parser holds stream state internally as closures. | Wrap `hs-tokenize` output in a token-stream object exposed as a primitive. ~1-2 days, mostly mechanical. |
| **Template-component scope (2)**`component reads a feature-level set from an enclosing div on first load`, `component reads enclosing scope set by a sibling init on first load` | Upstream supports `<script type="text/hyperscript-template" component="...">` — HTML-template-based custom elements. Our `defcomp` is SX-only; no template-component bootstrap. | Add a `<script type="text/hyperscript-template">` registrar alongside the existing script-tag scanner. ~1 day. |
| **Toggle parser ambiguity (1)**`toggle does not consume a following for-in loop` | Parser greedily consumes `for x in [...]` as `toggle .foo for <duration>`. Need lookahead to distinguish `for <num>ms/s` (duration) from `for <ident> in <expr>` (iteration). | Targeted parser fix in `parse-toggle`. ~2-4 hours. |
| **Throttled-at modifier (1)**`throttled at <time> drops events within the window` | Parser doesn't recognize `throttled at <duration>` as a handler modifier. Currently emits malformed SX (handler body is the literal `throttled` symbol; time expression dangles outside closure). | Parser support + runtime `hs-throttle!` wrapper. ~4 hours. |
| **Async event dispatch (1)**`until event keyword works` | `repeat until event click from #x` suspends the OCaml kernel waiting for a click that the sync test runner can't dispatch (kernel busy, JS event loop blocked). | Architectural — requires either yielding to the JS event loop between iterations, or a different test-runner shape that can interleave event injection. ~2-3 days. |
## Cluster ledger