fix(art): give both 2026-10-20 posts their artwork, and gate the build on it
Deploy / build (push) Successful in 34s

The YuE2 and subtitles posts shipped text-only: render_from_art.mjs only READS
ogImage/banner, and after the 2026-10-19 bulk migration no script had to write
them, so both pages advertised /og-default.jpg and rendered no hero banner.

- new metaphors (in build_captions.py, frozen here via sync_prompts_catalog.py),
  captions, art-meta evidence, banner plan and the five derived files per slug
- frontmatter: ogImage + banner in EN and ZH for both posts
- scripts/check-assets.mjs is now step 1 of npm run build, so CI fails when a
  published post lacks a language-correct og card, banner, banner .webp or
  400/800 list thumb. It reported 16 problems on the unfixed tree, all here.
This commit is contained in:
hoelee committed 2026-10-20 23:37:52 +08:00
1 parent 557f312bc7
commit 0dae8b0daa
26 files changed
+229 -2

No files matched your search

+14
View File
@@ -239,6 +239,13 @@
"prompt": "A crystalline art plaque sealed completely inside a transparent contract block, its imagery carved directly into the block's inner facets rather than mounted on any external frame",
"caption": "captions/fully-on-chain-svg-nfts.json"
},
{
"slug": "generating-subtitles-for-songs-without-timestamps",
"unique_elements": "A translucent glass rod of trapped sound resting on a dark machined spindle, a thin brass feeler tracing along its length and pressing evenly spaced notches into the glass, each notch filling with pale light just behind the moving feeler",
"prompt": "A translucent glass rod of trapped sound resting on a dark machined spindle, a thin brass feeler tracing along its length and pressing evenly spaced notches into the glass, each notch filling with pale light just behind the moving feeler",
"evidence_summary": "18 songs - 342 lines - 0.96 anchor coverage",
"caption": "captions/generating-subtitles-for-songs-without-timestamps.json"
},
{
"slug": "hardening-a-tor-onion-service",
"title": "Hardening a Tor Onion Service: What Actually Matters",
@@ -1083,5 +1090,12 @@
"evidence_summary": "3% free = 500 GB · alert fires wrong way",
"prompt": "A tall nearly empty barrel of enormous capacity with a tiny amber fill line at its base, while a thin illuminated arc above it strains against its stop",
"caption": "captions/your-disk-full-alert-is-lying.json"
},
{
"slug": "yue2-on-a-12gb-gpu-songs-that-lost-their-endings",
"unique_elements": "A row of slender dark glass tubes standing upright in a black rack on a machined rail, a single horizontal blade bar sweeping across them and cutting every one at the same height, the severed upper segments laid out in a shallow tray beside the rail",
"prompt": "A row of slender dark glass tubes standing upright in a black rack on a machined rail, a single horizontal blade bar sweeping across them and cutting every one at the same height, the severed upper segments laid out in a shallow tray beside the rail",
"evidence_summary": "12 takes - all 240.000 s - cap now 300 s",
"caption": "captions/yue2-on-a-12gb-gpu-songs-that-lost-their-endings.json"
}
]