Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 48s
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>
113 lines
5.0 KiB
Markdown
113 lines
5.0 KiB
Markdown
# 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 | 35f498ec |
|
||
|
||
### 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 | 54b54f4e |
|
||
| 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 | d7244d1d |
|
||
|
||
### Bucket F — generator translation gaps
|
||
|
||
Defer until A–D 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).
|