text-wraps-inside-bars first build

Generative AI

Fixture for item-title wrapping (lolay/nowline#59). A title that is too wide for its bar on one line but fits on at most two whitespace-wrapped lines stays INSIDE the bar instead of spilling to the right. The old spill pushed the next chained item down a whole row. What to look for when rendering this: - Platform lane: "Technology Selection" (2w at scale:2w, a 148px bar) wraps to "Technology" / "Selection" inside its bar. The bar grows 16px to hold the second title line plus the meta line, and "API" stays on the same row instead of dropping to a fresh one. - Every other title in the issue's roadmap already fits on one line (short title, or a bar of 3w or more), so it renders as before. - Link icon lane: "Auth token refactor" wraps too, and its caption starts past the 14px link-icon tile (24px inset, not 12px), so the title never sits under the tile. - Dot clearance lane: the first title line also stops short of the status dot (and any footnote digits or `before:` glyph) in the bar's upper-right. "Authentication refactor" in a 2w bar with a link icon would put "Authentication" (about 106px) in a 103px first-line budget, running under the dot, so it spills to the right instead. This is the regression case for that overlap. A wrapped item WITHOUT a meta line (the 2-line, no-growth case: line 2 lands at baseline 36, so the bar stays 56px) cannot be written in the DSL. Every item needs a `duration:` or `size:`, and either one is rendered as the meta line, so every bar wide enough to wrap carries meta. That case is pinned by the layout unit tests instead. Titles that cannot wrap into two lines still spill to the right; see text-spills-right.nowline and item-bumps-up.nowline (single words).

theme: light now: 2026-05-11

bea64f3 Publish the review gallery to review.nowline.dev (#187)

First build in the history; nothing to compare against.

tests/text-wraps-inside-bars.nowline
nowline v1

// Fixture for item-title wrapping (lolay/nowline#59). A title that is too
// wide for its bar on one line but fits on at most two whitespace-wrapped
// lines stays INSIDE the bar instead of spilling to the right. The old
// spill pushed the next chained item down a whole row.
//
// What to look for when rendering this:
//   - Platform lane: "Technology Selection" (2w at scale:2w, a 148px bar)
//     wraps to "Technology" / "Selection" inside its bar. The bar grows
//     16px to hold the second title line plus the meta line, and "API"
//     stays on the same row instead of dropping to a fresh one.
//   - Every other title in the issue's roadmap already fits on one line
//     (short title, or a bar of 3w or more), so it renders as before.
//   - Link icon lane: "Auth token refactor" wraps too, and its caption
//     starts past the 14px link-icon tile (24px inset, not 12px), so the
//     title never sits under the tile.
//   - Dot clearance lane: the first title line also stops short of the
//     status dot (and any footnote digits or `before:` glyph) in the bar's
//     upper-right. "Authentication refactor" in a 2w bar with a link icon
//     would put "Authentication" (about 106px) in a 103px first-line
//     budget, running under the dot, so it spills to the right instead.
//     This is the regression case for that overlap.
//
// A wrapped item WITHOUT a meta line (the 2-line, no-growth case: line 2
// lands at baseline 36, so the bar stays 56px) cannot be written in the
// DSL. Every item needs a `duration:` or `size:`, and either one is
// rendered as the meta line, so every bar wide enough to wrap carries
// meta. That case is pinned by the layout unit tests instead.
//
// Titles that cannot wrap into two lines still spill to the right; see
// text-spills-right.nowline and item-bumps-up.nowline (single words).

roadmap text-wraps-inside-bars "Generative AI" start:2026-04-06 scale:2w calendar:business

swimlane platform "Platform"
  item "Technology Selection" duration:2w status:done
  item api "API" duration:3w status:done
  item "Agent Instructions" duration:3w status:in-progress
  item api-integration "Agent Integration" duration:4w status:planned
  item "Agent MCP" duration:2w status:planned
  item platform-e2e-test "E2E Test" duration:2w status:planned

swimlane web "Web"
  item "Web Prototype" duration:4w status:done
  item "Web SDK" duration:2w status:planned after:api
  item "Web Integration" duration:4w status:planned
  item web-e2e-test "E2E Test" duration:2w status:planned after:api-integration

swimlane mobile "Mobile"
  parallel
    group ios "iOS"
      item "iOS Prototype" duration:4w status:done
      item "iOS SDK" duration:2w status:planned after:api
      item "iOS Integration" duration:4w status:planned
      item ios-e2e-test "E2E Test" duration:2w status:planned after:api-integration
    group android "Android"
      item "Android Prototype" duration:4w status:done
      item "Android SDK" duration:2w status:planned after:api
      item "Android Integration" duration:4w status:planned
      item android-e2e-test "E2E Test" duration:2w status:planned after:api-integration

swimlane link-icon "Link icon"
  item auth-token-refactor "Auth token refactor" duration:2w status:in-progress link:https://github.com/lolay/nowline/issues/59
  item "Rollout" duration:3w status:planned

swimlane dot-clearance "Dot clearance"
  item auth-refactor "Authentication refactor" duration:2w status:in-progress link:https://github.com/lolay/nowline/issues/59

milestone ai-release "AI Release" after:[platform-e2e-test, web-e2e-test, ios-e2e-test, android-e2e-test]