Files
rose-ash/plans/hs-conformance-scoreboard.md
giles abbb1fe5c6
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 48s
HS: asyncError — rejected promise triggers catch block (+1 test)
Three-part fix for hs-upstream-core/asyncError test 2/2:

1. runtime.sx hs-win-call: when an async call returns a rejected promise,
   store the error value in window.__hs_async_error (side-channel) and
   raise the sentinel "__hs_async_error__" so the value survives the
   raise boundary intact.

2. compiler.sx catch clause: inject `(let ((var (host-hs-normalize-exc var))) ...)`
   around the catch body so the sentinel gets swapped for the real error
   object before user code runs. Uses let (not set!) so shadowing works
   correctly for guard catch variables.

3. tests/hs-run-filtered.js:
   - host-promise-state wraps JS Error objects as plain {message:...} dicts
     before they cross the WASM boundary (Error.toString() was producing
     "Error: boom" strings instead of accessible objects)
   - host-hs-normalize-exc native retrieves the side-channel value when
     the sentinel arrives in a catch variable
   - host-get coercion restricted to El instances — plain JS objects with
     a "value" key were being stringified to "[object Object]"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 02:07:52 +00:00

5.0 KiB
Raw Blame History

HS Conformance Scoreboard

Live tally for plans/hs-conformance-to-100.md. Update after every cluster commit.

Baseline:   1213/1496 (81.1%)
Merged:     1376/1496 (92.0%)   delta +163
Worktree:   all landed
Target:     1496/1496 (100.0%)
Remaining:  ~120 tests (clusters 17/29(partial)/33/34 partial)

Cluster ledger

Bucket A — runtime fixes

# Cluster Status Δ Commit
1 fetch JSON unwrap done +4 39a597e9
2 element → HTML via outerHTML done +1 e195b5bd
3 Values dict insertion order done +2 e59c0b8e
4 not precedence over or done +3 4fe0b649
5 some selector for nonempty match done +1 e7b86264
6 string template ${x} done +2 108e25d4
7 put hyperscript reprocessing done +5 247bd85c
8 select returns selected text done +1 d862efe8
9 wait on event basics done +4 f79f96c1
10 swap variable ↔ property done +1 30f33341
11 hide strategy partial +3 beb120ba
12 show multi-element + display retention done +2 98c957b3
13 toggle multi-class + timed + until-event partial +2 bd821c04
14 unless modifier done +1 c4da0698
15 transition query-ref + multi-prop + initial partial +3 3d352055
16 send can reference sender done +1 ed8d71c9
17 tell semantics blocked
18 throw respond async/sync done +2 dda3becb

Bucket B — parser/compiler additions

# Cluster Status Δ Commit
19 pick regex + indices done +13 4be90bf2
20 repeat property for-loops + where done +3 c932ad59
21 possessiveExpression property access via its done +1 f0c41278
22 window global fn fallback done +1 d31565d5
23 me symbol works in from expressions done +1 0d38a75b
24 properly interpolates values 2 done +1 cb37259d
25 parenthesized commands and features done +1 d7a88d85

Bucket C — feature stubs (observer mocks)

# Cluster Status Δ Commit
26 resize observer mock + on resize done +3 304a52d2
27 intersection observer mock + on intersection done +3 0c31dd27
28 ask/answer + prompt/confirm mock done +4 6c1da921
29 hyperscript:before:init / :after:init / :parse-error partial +2 e01a3baa
30 logAll config done +1 64bcefff

Bucket D — medium features

# Cluster Status Δ
31 runtime null-safety error reporting done +13
32 MutationObserver mock + on mutation done +7
33 cookie API partial +4
34 event modifier DSL partial +7
35 namespaced def done +3
36b call result binds to it done +1

Bucket E — subsystems (design docs landed, pending review + implementation)

# Cluster Status Design doc
36 WebSocket + socket + RPC proxy design-done plans/designs/e36-websocket.md
37 Tokenizer-as-API done +17
38 SourceInfo API design-done plans/designs/e38-sourceinfo.md
39 WebWorker plugin design-done plans/designs/e39-webworker.md
40 Fetch non-2xx / before-fetch / real response done +7

Bucket F — generator translation gaps

Defer until AD drain. Estimated ~25 recoverable tests.

# Cluster Status Δ Commit
F1 add CSS template interpolation done +1 5a76a040
F2 empty multi-element (query→for-each) done +1 875e9ba3
F3 hs-make-object _order + assert= for dicts done +1 daea2808
F4 array literal arg to JS fn (sxToJs + reduce→SX) done +1 da2e6b1b
F5 bind feature parser stub done +32 846650da
F6 asyncError rejected promise catch done +1

Buckets roll-up

Bucket Done Partial In-prog Pending Blocked Design-done Total
A 12 4 0 0 1 17
B 7 0 0 0 0 7
C 4 1 0 0 0 5
D 2 2 0 0 1 5
E 2 0 0 0 0 3 5
F ~10 ~10

Maintenance

After each cluster commit, update:

  • Merged: pass count + delta line at top
  • The row's Status / Δ / Commit in the relevant bucket
  • The buckets roll-up table counts

Use mcp__hs-test__hs_test_run(start=0, end=195) + targeted-suite runs to get the real number; don't run the full suite every iteration (hangs on 196/199/200/615/1197/1198).