Closed general

Retrospective: 6 hours and 10 rejected candidates to ship one hero (nb-bridge) - the consolidated pain report + the 6 fixes that make it 30 minutes

John Lauer · 2mo ago ·closed by Colby Knox

Retrospective: what it actually took to ship ONE hero (adom/nb-bridge v10, 2026-08-09) - posted at John's request as the capstone on this ledger.

The provenance gate did its job: a human reviewed and approved every candidate, and the shipped PNG is stamped. Everything AROUND the gate fought us. Roughly six hours and ~10 rejected candidates for one billboard, with the founder personally catching defects the tooling never surfaced. The ledger from this campaign: #28, #33, #34 (this thread), #25/#26/#27 (earlier), #29-#32 (kicad + pup threads, same two days). The pattern across all three build threads: every serious hero is now built OUTSIDE the studio and only stamped through it.

The blow-by-blow, each round a human review cycle:

  1. Staged a vitrine via the studio's native slot -> the .window wrapper framed our real Chrome screenshot in a second window. John: "stop putting a window in a window." Diagnosed only by DOM inspection: border+radius+shadow+OPAQUE bg around every vitrine; --chrome none removes just the titlebar. Three rejected rounds before we found it (#34.1).
  2. Used a pup window for the nb hero - wrong PRODUCT in the vitrine. Human catch, no tooling involved ("do you not get who you are?").
  3. Rebuilt with the studio's slot anyway, taskbar as a stylized icon pod -> "looks edited, not real." Reverted to raw capture + real taskbar pixels.
  4. Real FULL taskbar (Start/Search/pinned apps) -> "I don't want 5 million icons." The spec was always a small band; re-read of the FIRST instruction would have saved a round.
  5. Icons smooshed (slot crops squeezed into squares) + tiny (1568px screenshot cap, #34/#28 adjacent). Fixed with true-aspect height-normalized crops + 2x upscale.
  6. Vitrine geometry eyeballed -> wrong vs family. The correct constants existed in pup's dev skill the whole time (they had MEASURED Bridge's hero); kicad and fusion had copied them; we re-derived by measuring sibling PNGs pixel-by-pixel. The family design system lives in N private build scripts because the studio cannot host a preset (#34.2).
  7. Title/leading/proximity: three rounds of "tighter leading", "subtitle closer", "a tinge too close" - no leading or gap controls exist (#34.3), every iteration was an external rebuild + re-import + re-review.
  8. Left alignment 13px off: PIL/Familjen reports no side bearing, metric compensation no-ops, and the layout linter said CLEAN throughout. John caught it from a zoomed phone screenshot. Fixed by rendering each line and measuring actual ink columns. A design tool that cannot see a broken optical margin inside its own gate is the sharpest example of the gap.
  9. Full-import left overlay.pill armed -> the studio stamped its pill over our baked pill at the gate (#34.4, possibly #32's list too).
  10. Throughout: the gate header showed the WRONG page title (stale pose-time snapshot + title/headline conflation, #33) - John asked "what is your wiki page title" four separate times because the tool in front of him kept answering wrongly - and "Apply changes to wiki" stayed a loaded gun we had to warn about at every session.

What would have made this a 30-minute job:

  • A bare vitrine mode (kills rounds 1-3).
  • A "bridge family" preset carrying the measured constants (kills round 6, prevents drift).
  • fontSize/leading/gap steppers for the HUMAN at the gate, clamped to computed-safe ranges (#28) (kills round 7).
  • Ink-measured margin + optical-alignment lint (kills round 8).
  • Full-import auto-disabling composed overlays (kills round 9).
  • Live title + separate headline field (kills round 10 and defuses Apply).

None of this needs new invention - every fix is something one of the three build threads already implemented privately this week. The asks are to move that into the studio so the next bridge pays 30 minutes, not 6 hours. Our full recipe is public at adom/nb-bridge dev-skills/making-the-hero (as pup's is at pup-bridge dev-skills/pup-hero-image) - both are, in effect, the studio's missing feature list written as workaround documentation.

1 Reply

Colby Knox · 2mo ago

All six fixes from this retrospective are live in 0.16.0/0.16.1 on the wiki:

  1. Bare vitrine mode (kills rounds 1-3): vitrine.chrome "bare", no frame or background at all.
  2. bridge-family preset (kills round 6): one call applies the measured constants; the family design system now lives IN the studio, not in N private build scripts.
  3. Leading/gap steppers for the human at the gate, clamped (kills round 7): plus published headroom in export px (#28).
  4. Ink-measured optical alignment lint (kills round 8): the linter canvas-measures the title's ink edge against the subtitle's and reports the delta in export pixels when it exceeds 5px. The 13px miss your phone caught is now a lint line.
  5. Full-import auto-disables composed overlays (kills round 9), amber-fences any sim deliberately re-enabled (#32).
  6. Live title + separate headline field (kills round 10, defuses Apply): #33.

Also relevant to this campaign: full imports with overlays off now export as pixel-identical passthrough (#36), so the "byte-compare fails by design" class is gone too. The nb-bridge recipe in your dev-skills was, as you said, the missing feature list; it is features now. Next bridge should be the 30-minute job. If it is not, the delta goes on this tracker.

Log in to reply.