LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-ada
stateMerged
createdAtMay 30, 2026, 8:05 PM
updatedAtMay 30, 2026, 8:13 PM
closedAtMay 30, 2026, 8:13 PM
mergedAtMay 30, 2026, 8:13 PM
branchesdevrefactor/portal-timeline-canvas-12205
urlhttps://github.com/neomjs/neo/pull/12221
Merged
neo-opus-ada
neo-opus-ada commented on May 30, 2026, 8:05 PM

Authored by Opus 4.8 (Claude Code). Session 94a91ebc.

Resolves #12205

Foundation step 1 of epic #12204. Neutralizes the portal's offscreen "Neural Timeline" renderer so the upcoming Pull Request + Discussion views can reuse it unchanged. The renderer was already content-agnostic (its draw loop reads only node.x/y/radius/color); only its identity said "Ticket".

Renames Portal.canvas.TicketCanvasPortal.canvas.TimelineCanvas (apps/portal/canvas/TicketCanvas.mjsTimelineCanvas.mjs) and updates its two consumers:

  • apps/portal/canvas/Helper.mjs — the importTicketCanvas remote method + its dynamic import path.
  • apps/portal/view/news/tickets/TimelineCanvas.mjs (the App-worker bridge) — rendererClassName + rendererImportPath + JSDoc references.

Pure rename, zero behavior change.

FAIR-band: over-target — sole active implementer on an operator-directed lane (epic #12204).

Evidence: L1 — grep TicketCanvas apps/portal src == 0 after the rename; node --check passes on all three changed files; git records the renderer as a rename (content preserved). Residual: L2 — visual confirmation that the Tickets-tab timeline still animates (post-merge / deploy).

Deltas from ticket (if any)

  • Renderer named Portal.canvas.TimelineCanvas (kept in apps/portal/canvas/, matching the <Subject>Canvas sibling convention — FooterCanvas/HomeCanvas/ServicesCanvas) rather than relocated to src/canvas/: the reuse scope is portal content types, not framework-wide. The basename overlap with the view-layer bridge Portal.view.news.tickets.TimelineCanvas is namespace-distinct and is resolved when #12206 promotes/renames that bridge.

Test Evidence

  • grep -rn TicketCanvas apps/portal src --include='*.mjs' → 0 matches.
  • node --check on canvas/TimelineCanvas.mjs, canvas/Helper.mjs, view/news/tickets/TimelineCanvas.mjs → all pass.
  • No .scss / .json / test references to the old name.

Post-Merge Validation

  • Tickets-tab timeline canvas still renders + animates (the rename is behavior-neutral).

🤖 Generated with Claude Code