From 5875c973913da1e6ccfb530a8c58c2d6c5ebd59d Mon Sep 17 00:00:00 2001 From: giles Date: Fri, 24 Apr 2026 11:03:35 +0000 Subject: [PATCH] HS-plan: log cluster 20 landed (c932ad59, worktree re-apply) --- plans/hs-conformance-scoreboard.md | 10 +++++----- plans/hs-conformance-to-100.md | 5 ++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/plans/hs-conformance-scoreboard.md b/plans/hs-conformance-scoreboard.md index 0fc366a3..c366111c 100644 --- a/plans/hs-conformance-scoreboard.md +++ b/plans/hs-conformance-scoreboard.md @@ -4,10 +4,10 @@ Live tally for `plans/hs-conformance-to-100.md`. Update after every cluster comm ``` Baseline: 1213/1496 (81.1%) -Merged: 1256/1496 (84.0%) delta +43 -Worktree: 1 in flight (cluster 20) +Merged: 1259/1496 (84.2%) delta +46 +Worktree: all landed Target: 1496/1496 (100.0%) -Remaining: ~240 tests +Remaining: ~237 tests ``` ## Cluster ledger @@ -40,7 +40,7 @@ Remaining: ~240 tests | # | Cluster | Status | Δ | Commit | |---|---------|--------|---|--------| | 19 | `pick` regex + indices | pending | (+10–13 est) | — | -| 20 | `repeat` property for-loops + where | pending | (+3 est) | — | +| 20 | `repeat` property for-loops + where | done | +3 | c932ad59 | | 21 | `possessiveExpression` property access via its | done | +1 | f0c41278 | | 22 | window global fn fallback | blocked | — | — | | 23 | `me symbol works in from expressions` | done | +1 | 0d38a75b | @@ -86,7 +86,7 @@ Defer until A–D drain. Estimated ~25 recoverable tests. | Bucket | Done | Partial | In-prog | Pending | Blocked | Design-done | Total | |--------|-----:|--------:|--------:|--------:|--------:|------------:|------:| | A | 12 | 4 | 0 | 0 | 1 | — | 17 | -| B | 3 | 0 | 0 | 3 | 1 | — | 7 | +| B | 4 | 0 | 0 | 2 | 1 | — | 7 | | C | 3 | 0 | 0 | 2 | 0 | — | 5 | | D | 0 | 0 | 0 | 5 | 0 | — | 5 | | E | 0 | 0 | 0 | 0 | 0 | 5 | 5 | diff --git a/plans/hs-conformance-to-100.md b/plans/hs-conformance-to-100.md index 0c10c074..5303a567 100644 --- a/plans/hs-conformance-to-100.md +++ b/plans/hs-conformance-to-100.md @@ -87,7 +87,7 @@ Orchestrator cherry-picks worktree commits onto `architecture` one at a time; re 19. **[pending] `pick` regex + indices** — `pick` 13 tests. Regex match, flags, `of` syntax, start/end, negative indices. Big enough that a single commit might fail — break into pick-regex and pick-indices if needed. Expected: +10-13. -20. **[pending] `repeat` property for-loops + where** — `repeat / basic property for loop`, `can nest loops`, `where clause can use the for loop variable name` (3 tests). Expected: +3. +20. **[done (+3)] `repeat` property for-loops + where** — `repeat / basic property for loop`, `can nest loops`, `where clause can use the for loop variable name` (3 tests). Expected: +3. 21. **[done (+1)] `possessiveExpression` property access via its** — `possessive / can access its properties` (1 test, Expected `foo` got ``). Expected: +1. @@ -175,6 +175,9 @@ Many tests are `SKIP (untranslated)` because `tests/playwright/generate-sx-tests (Reverse chronological — newest at top.) +### 2026-04-24 — cluster 20 repeat property for-loops + where (worktree re-apply) +- **c932ad59** — `HS: repeat property for-loops + where (+3 tests)`. Worktree agent `a7c6dca2…` produced `c4241d57`; straight cherry-pick conflicted on runtime.sx with cluster 30's log-all block and cluster 27's intersection-attach helper, so logical diff was replayed surgically via sx-tree. Parser: `obj-collect` now `append`s pairs (not `cons`), preserving source order. Compiler: `emit-for` detects `coll-where` wrapping, binds the filter lambda to the for-loop variable name (not default `it`), and wraps symbol collections with `cek-try` instead of the broken `hs-safe-call` (uninitialised CEK call-ref in WASM). `array-index` emits `(hs-index …)` not `(nth …)`. Runtime: new polymorphic `hs-index` (dict/list/string/host dispatch); `hs-put-at!` default branch delegates to `hs-put!` when target is a DOM element; `hs-make-object` tracks insertion order in a hidden `_order` list; `hs-for-each` and `hs-coerce` (Keys/Entries/Map branches) prefer `_order` when present. Suite hs-upstream-repeat: 25/30 → 28/30 (remaining 2 are the `repeat forever` hangs we knowingly skip). Smoke 0-195 unchanged at 165. + ### 2026-04-24 — cluster 27 intersection observer (worktree re-apply) - **0c31dd27** — `HS: intersection observer mock + on intersection (+3 tests)`. Worktree agent `ad6e17cb…` produced the logical change but its commit's reformatted compiler/runtime bodies conflicted with cluster 26's landing of resize-observer state in `tests/hs-run-filtered.js` and `runtime.sx`; straight cherry-pick hit markers on `.sx` files that can't be Edit'd. Reapplied surgically via sx-tree: (a) parser `parse-on-feat` now collects `having margin X threshold Y` clauses between `from` and body, packaging them in `:having {"margin" M "threshold" T}`; (b) compiler `scan-on` threads a new `having-info` param and, when event-name is `"intersection"`, wraps `(hs-on target "intersection" fn)` with `(do on-call (hs-on-intersection-attach! target margin threshold))`; (c) runtime adds `hs-on-intersection-attach!` which constructs an `IntersectionObserver` with `{rootMargin, threshold}` opts and a callback that dispatches an `intersection` DOM event carrying `{intersecting, entry}` detail; (d) runner adds `HsIntersectionObserver` stub that fires the callback synchronously on `observe()` with `isIntersecting=true`. Suite hs-upstream-on: 33/70 → 36/70. Smoke 0-195 unchanged at 165.