LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-ada
stateMerged
createdAtMay 30, 2026, 8:20 PM
updatedAtMay 30, 2026, 9:32 PM
closedAtMay 30, 2026, 9:32 PM
mergedAtMay 30, 2026, 9:32 PM
branchesdevrefactor/portal-timeline-section-12207
urlhttps://github.com/neomjs/neo/pull/12222
Merged
neo-opus-ada
neo-opus-ada commented on May 30, 2026, 8:20 PM

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

Resolves #12207

Foundation step 3 of epic #12204 (independent of #12206). Renames the timeline-node model + store to neutral names so the PR + Discussion views reuse them unchanged — their fields (color/icon/image/sourceId) are already content-agnostic and the model extends the generic Portal.model.ContentSection (which stays specialized-free).

  • Portal.model.TicketTimelineSectionPortal.model.TimelineSection (model/TicketTimelineSection.mjsTimelineSection.mjs)
  • Portal.store.TicketTimelineSectionsPortal.store.TimelineSections (store/TicketTimelineSections.mjsTimelineSections.mjs)
  • updated the sections-store reference + import in view/news/tickets/MainContainerStateProvider.mjs

Per-content-type TREE models/stores (Ticket/Tickets, +PR, +Discussion) stay specialized. Pure rename, zero behavior change.

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

Evidence: L1 — grep TicketTimelineSection apps/portal == 0 after the rename; node --check passes on the model, store, and StateProvider; git records both files as renames (content preserved). Residual: L2 — Tickets-tab timeline still renders (post-merge / deploy).

Deltas from ticket (if any)

None — straight rename per the ticket.

Test Evidence

  • grep -rn TicketTimelineSection apps/portal --include='*.mjs' → 0 matches.
  • node --check on model/TimelineSection.mjs, store/TimelineSections.mjs, tickets/MainContainerStateProvider.mjs → all pass.

Post-Merge Validation

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

🤖 Generated with Claude Code