W14: pin K49 void-elements spec fix; discover sx_render.ml regen drift (test-only)

K49: area/base/embed/param/track were in VOID_ELEMENTS but missing from
HTML_TAGS — render fell through to "Undefined symbol: base". dc7aa709 fixed
spec/render.sx; add suite gate-K49-void-elements-renderable (3 tests): the
spec registry contains all five, and render-to-html renders each as a
self-closing void. 264 passed / 0 failed under OCaml run_tests.

DISCOVERY (recorded in the briefing's Blocked section): the generated
hosts/ocaml/lib/sx_render.ml was never regenerated after the spec fix — its
stale html_tags_list still lacks the five tags, so the runner's native
render-html path STILL errors. Fix is a bootstrap_render.py regen (hosts
lane, out of scope for this test-only loop). Live evidence for F13
(regen-diff CI gate). Pin covers the spec side only for now.

Also corrects the checklist label: K49 = void elements; the depth/cycle
guard is K16 (OPEN, W8).

Test-only: no semantics edits, no push.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 23:43:34 +00:00
parent dafd0de8f2
commit 88e03daf4b
2 changed files with 69 additions and 2 deletions

View File

@@ -119,3 +119,45 @@
(deftest
"do with a single IIFE form returns its value"
(assert= (do ((fn () 42))) 42)))
;; --------------------------------------------------------------------------
;; K49 [W8, med] Five void elements (area base embed param track) were in
;; VOID_ELEMENTS but missing from HTML_TAGS — render fell through to
;; function-call dispatch: (render-to-html '(base :href "x")) threw
;; "Undefined symbol: base". dc7aa709 fixed the SPEC registry
;; (spec/render.sx). NB: the generated OCaml render library
;; (hosts/ocaml/lib/sx_render.ml, bootstrap_render.py output) still carries
;; a STALE html_tags_list without these five — the runner's native
;; `render-html` convenience therefore still errors. That regen drift is
;; W14 item F13 (regen-diff gate); this suite pins the spec side only.
;; --------------------------------------------------------------------------
(defsuite
"gate-K49-void-elements-renderable"
(deftest
"spec HTML_TAGS registry contains all five void elements"
(for-each
(fn
(t)
(assert (contains? HTML_TAGS t) (str "HTML_TAGS missing " t)))
(list "area" "base" "embed" "param" "track")))
(deftest
"spec render-to-html renders base self-closing with attr"
(assert-equal
"<base href=\"x\" />"
(render-to-html (quote (base :href "x")) (make-env))))
(deftest
"spec render-to-html renders all five as self-closing voids"
(for-each
(fn
(form)
(let
((html (render-to-html form (make-env))))
(assert
(string-contains? html "/>")
(str (first form) " not self-closing: " html))))
(list
(quote (area))
(quote (base))
(quote (embed))
(quote (param))
(quote (track))))))