Public: anyone can read this; the crew can change it.
Link previews that tell the story: dynamic OG images rendered from live data for every forge page #451
Done on main already, waiting for you to close it: b9ac83543e5aecccc36bdaf567553dd4b54d1748 1aecf6071a9d5df6a892afe2c7cb0c4b0bbfc766 d00e4a593d79ed5f76412cf68d128bbafd3ca772 b27e2a43b9a3cea409617df3066802477ec78b33 35d1fc6e413ae1828446987d79d037b4f611440b
replaced by #2349. Every part this waited on (#452, #454, #1803, #1806, #2045–#2049) has landed. What is left is one test that proves every page unfurls and no private page leaks, plus fixes for whatever that test finds.
My token cannot close this issue, so it now waits for the pieces named above and no builder will pick it up next to them. A person can close it as split into #2349.
Done on main already, waiting for you to close it: b9ac83543e5aecccc36bdaf567553dd4b54d1748 1aecf6071a9d5df6a892afe2c7cb0c4b0bbfc766 d00e4a593d79ed5f76412cf68d128bbafd3ca772 b27e2a43b9a3cea409617df3066802477ec78b33 35d1fc6e413ae1828446987d79d037b4f611440b
State: replaced by #2483. Every part of this direction is on main: tags on every page, /og designs for map, audit, app, pull, run, repo and issue, PNG twins, and private cards that say only the title and 'private'. What #2483 does differently: it measures the one unproven promise, '≤ 300 ms cold', per design, and makes any slow design faster.
The forge refused my close (403). So this issue now waits for #2483, and no builder is handed it again. When #2483 lands, nothing is left here, and a person can close it as replaced by #2483.
Done on main already, waiting for you to close it: b9ac83543e5aecccc36bdaf567553dd4b54d1748 1aecf6071a9d5df6a892afe2c7cb0c4b0bbfc766 d00e4a593d79ed5f76412cf68d128bbafd3ca772 b27e2a43b9a3cea409617df3066802477ec78b33 bb9dd472d24f6f03f4b7d482575f54d0d415dba2
Every child of this umbrella is closed as done (#452, #454, #1803, #1806, #2045–#2049, #2447, #2448, #2483): cards for map, audit, app, pull, run, repo and issue in src/web/og/, rasterized and cached by input hash, private pages say only the title and 'private', and cold renders stay within 300 ms in the gate. The direction it gives is built; nothing smaller is left to split off. My token cannot close issues (403, scope), so a person needs to close this one. Reason: done.
Done on main already, waiting for you to close it: b9ac83543e5aecccc36bdaf567553dd4b54d1748 1aecf6071a9d5df6a892afe2c7cb0c4b0bbfc766 d00e4a593d79ed5f76412cf68d128bbafd3ca772 b27e2a43b9a3cea409617df3066802477ec78b33 bb9dd472d24f6f03f4b7d482575f54d0d415dba2
State: deferred, waiting on #2502. It is done on main, and my token still cannot close it (403 again today). It keeps coming back as 'stalled' because stalled() in src/crew/held.ts skips the crew's done-on-main note. #2502 adds a done_on_main hold so a done issue is never handed back to a builder or the planner, and #2503 lets the planner close it itself. A person can close it now as done. Every design this direction names is on main in src/web/og/ (map, audit, app, pull, run, repo, issue), and private cards say only the title and 'private'.
Owner's direction (2026-10-02): forge links are shared over iMessage between friends' forges. A preview should say enough that you need not click, and prepare you for what you will see if you do — like Vercel's OG image generation (Satori: JSX/HTML+CSS → SVG → PNG), responding to the data.
Shape:
og:title,og:description,og:image(1200×630 PNG),twitter:card=summary_large_imageon every page, with the description written from the page's state (e.g. 'cs-engine · 3 changes waiting, 2 crew working, $41 today')./og/<path>.pngrenders the image server-side from the same data the page reads: SVG composed in-process (Satori-style or hand-built SVG) rasterized with resvg; cached by a content hash of the inputs; ≤ 300 ms cold.Split into the child issues below; each is one run.