Skip to content

feat(dom): prove INT-08 reconciler runs end-to-end; ship the e2e harness - #680

Merged
hyperpolymath merged 1 commit into
mainfrom
worktree-dom-e2e-verified
Jul 7, 2026
Merged

feat(dom): prove INT-08 reconciler runs end-to-end; ship the e2e harness#680
hyperpolymath merged 1 commit into
mainfrom
worktree-dom-e2e-verified

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

What

dom.affine's header said "RUNTIME blocked by #255; no runtime e2e harness is shipped until then (a harness that cannot pass would be dishonest)." #255 was fixed in PR #257 — and the harness now can pass, so per the header's own bar, it ships. Refs #183 (INT-08).

The proof

affinescript-dom/e2e/run.sh concatenates src/dom.affine + a driver main, compiles to core-WASM, runs under Node against an Int-handle host DOM, and asserts the mutation log + final tree:

Observed (node 26, dune 3.24 build):

setAttr(#2,title=t2)  removeAttr(#2,class)  setText(#3,"world")  remove(#2,#4)
<#root> └ <div id="app" title="t2"> └ "world"
ALL ASSERTIONS PASS — reconciler ran end-to-end (loops executed)

A nice detail: the affine discipline is load-bearing in the driver itself — mount consumes its tree, so the reconcile call takes a freshly built copy; reuse would be a use-after-move type error.

Docs reconciled to VERIFIED

dom.affine header; ECOSYSTEM.adoc (satellite + INT-08/INT-11 rows); TECH-DEBT.adoc (INT-08); bindings-roadmap.adoc (DOM row). INT-11's remaining leg is browser-host parity (this run is Node).

Gates

dune build exit 0 · doc-truthing OK · soundness ledger all-5 OK · e2e harness exit 0 from this branch's own build. Harness skips loudly (exit 0) without the compiler or node; AFFINESCRIPT_BIN overrides the binary path for CI.

🤖 Generated with Claude Code

…ess (Refs #183)

The dom.affine header said "RUNTIME blocked by #255; no runtime e2e harness
is shipped until then (a harness that cannot pass would be dishonest)".
#255 was fixed in PR #257 — and the harness now CAN pass, so per the
header's own bar, it ships:

- affinescript-dom/e2e/run.sh ��� concatenates src/dom.affine + a driver
  `main`, compiles to core-WASM, runs under Node against an Int-handle
  host DOM, asserts the mutation log + final tree. Skips loudly (exit 0)
  when the compiler or node is absent; AFFINESCRIPT_BIN overrides the
  binary path for CI.
- affinescript-dom/e2e/driver_main.affine — mounts
  <div id=app class=old>["hello", <span>["x"]]</div>, then reconciles to
  <div id=app title=t2>["world"]</div>. Exercises every loop-bearing path
  (the #255 class): render attr+children loops, patch_attrs add+remove
  (attr_has), and the `while` child-reconcile loop (in-place text patch +
  surplus-child removal). The affine discipline is load-bearing in the
  driver itself: `mount` consumes its tree, so reconcile takes a fresh
  copy — reuse would be a use-after-move type error.
- affinescript-dom/e2e/dom_host.mjs — the host: Int-handle node map,
  mutation log, hard assertions (title added, class removed, text patched
  in place, span removed, reconcile returned the in-place handle).

Observed run (2026-07-07, node 26, dune 3.24 build):
  query(#root) … setAttr(#2,title=t2) removeAttr(#2,class)
  setText(#3,"world") remove(#2,#4)
  <#root> └ <div id="app" title="t2"> └ "world"
  ALL ASSERTIONS PASS

Docs reconciled to VERIFIED (dom.affine header; ECOSYSTEM satellite +
INT-08/INT-11 rows; TECH-DEBT INT-08; bindings-roadmap DOM row). INT-11's
remaining leg is browser-host parity (this run is Node).

Gates: dune build exit 0; doc-truthing OK; soundness ledger all-5 OK;
e2e harness exit 0 from the branch's own build.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hyperpolymath
hyperpolymath enabled auto-merge (squash) July 7, 2026 10:16
@sonarqubecloud

sonarqubecloud Bot commented Jul 7, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
C Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@hyperpolymath
hyperpolymath merged commit f992650 into main Jul 7, 2026
17 of 18 checks passed
@hyperpolymath
hyperpolymath deleted the worktree-dom-e2e-verified branch July 7, 2026 10:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant