process_hs_val stripped `//…` line comments with a naïve regex,
which devoured `https://yyy.xxxxxx.com/…` inside a backtick template
— the 'properly interpolates values 2' fixture was landing with
the HS source truncated at `https:`.
New helper _strip_hs_line_comments walks char-by-char and only
strips `//` / leading-whitespace `--` when not inside `'…'`, `"…"`,
or backticks; respects `\\`-escapes inside strings.
Suite hs-upstream-core/regressions: 11/16 → 12/16.
Smoke 0-195: 163/195 → 164/195.
parse-trav recognises `parent` as an ident modifier after the
`closest` keyword — consumes it and re-invokes with kind
`closest-parent`, producing AST `(closest-parent "div" (me))` instead
of the generic trailing-ident-as-unit shape
`(string-postfix (closest "*" (me)) "parent")`.
Compiler translates `(closest-parent sel target)` to
`(dom-closest (host-get target "parentElement") sel)` so `me` is
skipped and only strict ancestors match. `closest-parent` also
joined the `put X into <trav>` inner-html shortcut alongside
next/previous/closest.
Suite hs-upstream-core/regressions: 10/16 → 11/16.
Smoke 0-195: 162/195 → 163/195.
Runtime gains hs-get-selection: prefers window.__test_selection stash,
falls back to real getSelection().toString(). Compiler rewrites
`(ref "selection")` to `(hs-get-selection)`. Generator detects the
createRange + setStart/setEnd + addRange block and emits a single
host-set! on __test_selection with the text slice; sidesteps the need
for a fully propagating DOM range/text-node mock.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
All five subsystems now have design docs pending review on per-subsystem
worktree branches. Correcting E36: upstream uses `socket NAME URL ... end`
with implicit `.rpc` Proxy, not `with proxy { send, receive }`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
plans/hs-conformance-scoreboard.md is the at-a-glance ledger
(baseline 1213, merged 1240, +2 pending on worktree). Added rule 11
to hs-conformance-to-100.md so the loop agent bumps it per commit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Parser: jp-array-loop and jp-call-args-loop detect punct "..."
and emit (js-spread inner).
Transpile: when any element is spread, build array/args via
js-array-spread-build with (list "js-value" v) and (list
"js-spread" xs) tags.
Runtime: js-array-spread-build walks items, appending values or
splicing spreads via js-iterable-to-list (handles list/string/dict).
Works in arrays, call args, variadic fns (Math.max(...arr)),
and string spread ([...'abc']).
414/416 unit (+5), 148/148 slice unchanged.