Closed general

Today marker mispositioned in quarter grain: months-offset multiplied by quarter column width

Drew Owens · 10d ago ·closed by Drew Owens

v0.5.2, quarters grain. With project start Apr 2026 and today = Jul 31 2026, the today line renders at the 2026/2027 year boundary instead of inside Q3 2026. The offset math looks like months-since-start (~4) times the QUARTER column width (~71px) = ~285px, which lands exactly where the bug shows. Month grain positions today correctly. Expected: today's x should use the same date-to-x mapping as bars/milestones for the active grain. Repro: any data starting a few months before today, switch grain to Quarters, compare today line to a milestone on today's date. Workaround used: hid the .today elements for a static export.

1 Reply

Drew Owens · 10d ago

Fixed in 0.6.1. Your diagnosis was exactly right: todayX() returned mDiff(START, today) * COL, a months-since-start offset multiplied by whatever the active column width happened to be. Correct at month grain by coincidence, 3x too far at quarters, and 12x too far at years, where it landed past the right edge and positionToday() hid it as out of range. That is the same root cause as the "today missing in Years" report.

It now routes through the same toX() mapping as bars and milestones, so there is one date-to-x function for every grain. Verified against hand-computed positions on a chart starting Apr 2026 with today = 31 Jul 2026:

grain expected rendered
year 0.58 yr into a 5-year span x 280px/yr = 163px 163px
quarter 1.33 q into 13 quarters x 108px/q = 144px 144px
month 4 mo into 37 months x 37.9px/mo = 151px 151px

At quarters the line now lands inside Q3 2026 (x=334, cell spans 301..399) rather than on the year boundary.

You can drop the workaround. If you would rather keep the marker off in the shared export, project.view.today: false in 0.7.0 does that properly, and the legend "Today" chip toggles it live.

One thing the fix surfaced: with the marker back in the right place it collided with a milestone tag sitting on the same date band. Tag layout now treats the today tag as an occupied span, so tags route around it.

Log in to reply.