feat(artifact): vendor wireframe-kit, make artifact HTML reproducible + drift-gated #35

Merged
peterswimm merged 1 commit from feat/artifact-html-gate into main 2026-07-14 00:24:39 +00:00
Owner

artifact.py loaded its wireframe-kit chrome (wireframe-kit.css + the
flutter/swift/cli/wordpress/wf-helpers JS) from a hardcoded external path
(/Users/peterswimm/code/archives/...) that no longer exists — so a rebuild
silently embedded '// not found' placeholders. The 6 assets are recovered from
committed boards (byte-identical across products) and vendored in
udg/generators/archive/; _load_archive now reads in-repo and RAISES on a miss
instead of the silent fallback. docs.py shares this dependency, so its 13
block-catalog.svg (already broken with placeholders on main) are regenerated too.

Reproducibility: render_artifact gains an injected-intents param. Single
'just artifact ' still hydrates core.intents LIVE; the new
'build --all' and 'check --all' read a committed snapshot fixture
(udg/generators/fixtures/artifact_intents.json) — no DB, deterministic in CI.
Refresh the snapshot deliberately with 'just artifact-snapshot'.

Fixture is empty by design, not by connectivity: core.intents only carries a
'udg' server_ref (15 generator CLI intents); no product board maps to it (none
set meta.mcp_server), so every product queries its own name and matches nothing
— the committed boards already rendered 'No rituals yet'. Verified against the
live DB via the toilville-forge SSH hop.

Wired into all three gate points: just build/check, the udg-artifact-drift
pre-commit hook, and the CI udg-dist-check workflow. Regenerated 13 boards now
carry the border/text/success tokens that landed on main (were stale). baseline/
is a pre-existing dist orphan (not in sync-manifest) — left untouched.

artifact.py loaded its wireframe-kit chrome (wireframe-kit.css + the flutter/swift/cli/wordpress/wf-helpers JS) from a hardcoded external path (/Users/peterswimm/code/archives/...) that no longer exists — so a rebuild silently embedded '// not found' placeholders. The 6 assets are recovered from committed boards (byte-identical across products) and vendored in udg/generators/archive/; _load_archive now reads in-repo and RAISES on a miss instead of the silent fallback. docs.py shares this dependency, so its 13 block-catalog.svg (already broken with placeholders on main) are regenerated too. Reproducibility: render_artifact gains an injected-intents param. Single 'just artifact <product>' still hydrates core.intents LIVE; the new 'build --all' and 'check --all' read a committed snapshot fixture (udg/generators/fixtures/artifact_intents.json) — no DB, deterministic in CI. Refresh the snapshot deliberately with 'just artifact-snapshot'. Fixture is empty by design, not by connectivity: core.intents only carries a 'udg' server_ref (15 generator CLI intents); no product board maps to it (none set meta.mcp_server), so every product queries its own name and matches nothing — the committed boards already rendered 'No rituals yet'. Verified against the live DB via the toilville-forge SSH hop. Wired into all three gate points: just build/check, the udg-artifact-drift pre-commit hook, and the CI udg-dist-check workflow. Regenerated 13 boards now carry the border/text/success tokens that landed on main (were stale). baseline/ is a pre-existing dist orphan (not in sync-manifest) — left untouched.
feat(artifact): vendor wireframe-kit, make artifact HTML reproducible + drift-gated
Some checks failed
Security Scans / Gitleaks secret scan (pull_request) Successful in 26s
Security Scans / Trivy filesystem scan (pull_request) Successful in 30s
Test Generator / lint-workflows (pull_request) Successful in 13s
Test Generator / lint-prose (pull_request) Successful in 17s
UDG dist drift gate / dist/ matches dtcg + udg sources (pull_request) Failing after 12s
Test Generator / test (pull_request) Successful in 3m17s
b408bc254e
artifact.py loaded its wireframe-kit chrome (wireframe-kit.css + the
flutter/swift/cli/wordpress/wf-helpers JS) from a hardcoded external path
(/Users/peterswimm/code/archives/...) that no longer exists — so a rebuild
silently embedded '// not found' placeholders. The 6 assets are recovered from
committed boards (byte-identical across products) and vendored in
udg/generators/archive/; _load_archive now reads in-repo and RAISES on a miss
instead of the silent fallback. docs.py shares this dependency, so its 13
block-catalog.svg (already broken with placeholders on main) are regenerated too.

Reproducibility: render_artifact gains an injected-intents param. Single
'just artifact <product>' still hydrates core.intents LIVE; the new
'build --all' and 'check --all' read a committed snapshot fixture
(udg/generators/fixtures/artifact_intents.json) — no DB, deterministic in CI.
Refresh the snapshot deliberately with 'just artifact-snapshot'.

Fixture is empty by design, not by connectivity: core.intents only carries a
'udg' server_ref (15 generator CLI intents); no product board maps to it (none
set meta.mcp_server), so every product queries its own name and matches nothing
— the committed boards already rendered 'No rituals yet'. Verified against the
live DB via the toilville-forge SSH hop.

Wired into all three gate points: just build/check, the udg-artifact-drift
pre-commit hook, and the CI udg-dist-check workflow. Regenerated 13 boards now
carry the border/text/success tokens that landed on main (were stale). baseline/
is a pre-existing dist orphan (not in sync-manifest) — left untouched.
peterswimm deleted branch feat/artifact-html-gate 2026-07-14 00:24:39 +00:00
Sign in to join this conversation.
No description provided.