Chart: an unread span between the fetched band and the live tail draws as a line
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 86/100
Research direction
Start with EnvelopeLine.ReplaceColumns and AppendColumn in SemiPlot/SemiPlot.UI/Chart/EnvelopeLine.cs, then follow TrendPenState.AppendRealtime and EnvelopePath.Build to see how appended samples are joined. Add the regression cases to EnvelopeLineTests: one should confirm a break across the unread span, and one should confirm follow mode inserts no gap. Done when both cases pass and the demo drag no longer draws lines across unread history.
Written by the indexing model from the issue text.
Description
Symptom
A pen draws one straight segment across a span the chart never read. Seen on the demo stand (2026-10-08
recording): with follow off and the window hours in the past, each drag forward past the right edge of the
fetched band shows the plot full of horizontal lines for a frame or two, at the last values of the band, until
the next history read lands and replaces them. Near the live edge the same shape is a short diagonal for an
interpolated pen and a held step for a stepped one, which matches the ~40 s segment reported on 2026-09-30.
Cause
EnvelopeLine holds two pieces for a pen: the band the last history read returned and the live samples the
realtime poll keeps appending at the live edge. ReplaceColumns(columns, requestedEndX)
(SemiPlot/SemiPlot.UI/Chart/EnvelopeLine.cs:127) drops the live columns past the requested edge, but every
sample that arrives after that apply goes through AppendColumn (:149), which accepts any X past the last
column (TrendPenState.AppendRealtime, SemiPlot/SemiPlot.UI/Chart/TrendPenState.cs:77). Nothing marks the span
between the band's requested end and the first live column as unread, and EnvelopePath.Build joins the two
consecutive non-gap columns into one segment. In a 40 s window that segment, hours long, draws as a horizontal
line for both line styles.
The span is drawn only until a gesture leaves the band and the next read covers it, so it flickers on a stepwise
drag and can stay on screen when nothing re-reads the window.
Proposed fix
EnvelopeLine remembers the requested right edge of the last replace. The first column AppendColumn adds past
that edge, when the last column lies at or before it, is preceded by a gap column (NaN) at the edge, so the
unread span draws as a break until a read fills it. In follow mode the requested edge lies one window in the
future, so no live append crosses it and nothing changes there.
Acceptance
- Unit test in
EnvelopeLineTests: replace with a band whose requested end lies before the live samples, append
a live column past it;EnvelopePath.Buildstarts a new segment at the live column and draws nothing across the
span. Red on master. - Unit test: a follow-mode replace (requested end past the live edge) followed by appends inserts no gap.
- Demo stand: follow off, window an hour back, drag forward in steps past the band edge; no horizontal lines
appear before the read lands.
- Dominant language
- C#
- Stars
- 0
- Forks
- 0
- Avg merge
- 3h 46m
- Merged PRs (30d)
- 28
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Semiteq/SemiPlot
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 69/100
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Live data: show a value within 1 s of its changePossibly taken @mrcsin claimed this 5 days ago. Openbug enhancement
Semiteq/SemiPlot#116 · 1 comment · 1 assignee ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
Maintainers usually reply within 1 day
-
Navigation: jump to a date, with a calendar marking days that hold dataMay be free again @mrcsin claimed this 33 days ago, and no pull request is open. Openenhancement
Semiteq/SemiPlot#79 · 1 assignee ·
Maintainers usually reply within 1 day
All issues in Semiteq/SemiPlot
Similar issues
-
bug misleading tooling trivial
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
Docs example projects pinned to a literal library version instead of 3.*Possibly taken @DaveSkender claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
facioquo/stock-indicators-dotnet#2372 ·
Maintainers usually reply within 1 day
-
[辞書] 「ショタ」の追加Open辞書
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
yksr-melt/Meltype#653 · 1 comment ·
Maintainers usually reply within 1 day
-
needs-area
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Azure/typespec-azure#5695 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
svenhb/GRBL-Plotter#483 ·