Skip to content

fix(chart): draw a live-edge break as a gap - #141

Merged
mrcsin merged 1 commit into
masterfrom
live-edge-break
Oct 19, 2026
Merged

mrcsin merged 1 commit into
masterfrom
live-edge-break

Conversation

@mrcsin

@mrcsin mrcsin commented Oct 19, 2026

Copy link
Copy Markdown
Member

Problem

A break that opened at the live edge drew as a held line until the next history read covered the span.
RealtimePoll counted a q = 32 row for its debug line only and emitted it as an ordinary sample.

What changed

  • Sample.Value and PenRealtimeValues.Values are nullable. A null value is a break for that pen at that
    moment, and TrendCoordinator keeps it in the batch.
  • ChartRealtimeApplier appends a NaN column for a null at every layer, ahead of the coarse fold.
  • RealtimePoll turns a q = 32 row into its value followed by a break 1 ms later. 1 ms is the smallest
    step that lands on a distinct OA-date axis position.
  • Docs: charting.md, trend-interaction.md, data-integration.md, testing-strategy.md,
    trend-feature-spec.md, bench.md. The backlog item "A break that opens at the live edge draws as a
    held line" is removed.

This is the first slice of opc-live-edge (#116). Later slices write breaks on OPC UA session loss, on a
Bad status and ahead of a pen's first live sample through the same null sample. #116 is closed by the
opc-live-source slice, not by this one.

How it was verified

  • dotnet build SemiPlot.slnx: 0 errors.
  • dotnet format SemiPlot.slnx --verify-no-changes: exit 0.
  • dotnet test SemiPlot.slnx: Unit 2285/2285, Integration 195/195, 0 skipped.
  • With master's RealtimePoll.cs restored on the branch, 4 of 11 poll and journey tests fail.
  • No manual run on the demo stand: the automated suites stand in for the manual test in this unattended
    roadmap run.
Per-task commits before collapse
700efe0 docs(plans): record the live-edge-break run
255d01d refactor(realtime): address comment audit
247b0da test(realtime): address review findings
4b305b3 fix(data): address review findings
74cc303 docs(architecture): reflow the bad-quality note
07a9431 docs(architecture): fix the bad-quality as-built note
9265840 docs(architecture): document the live edge break
1684a79 test(chart): tolerate the history anchor in the journey
43c5868 feat(data): emit a live break after a q = 32 row
a95ba7d test(chart): pin the break column through the chart
c045114 feat(chart): carry a live break through the batch

A break that opened at the live edge drew as a held line until the next
history read covered the span: the poll counted a q = 32 row for its
debug line only and emitted it as an ordinary sample.

The realtime seam now carries an absence. A Sample with a null Value is
a break for that pen at that moment; TrendCoordinator keeps it in the
batch, and ChartRealtimeApplier appends a NaN column there at every
layer instead of folding it into the last column. RealtimePoll turns a
q = 32 row into its value followed by a break 1 ms later, the smallest
step that lands on a distinct axis position.

The later OPC UA slices write breaks on session loss, on a Bad status and
ahead of a pen's first live sample through the same null sample. Closes
the backlog item "A break that opens at the live edge draws as a held
line".
@mrcsin
mrcsin marked this pull request as ready for review October 19, 2026 16:45
@mrcsin
mrcsin merged commit cf21d86 into master Oct 19, 2026
2 checks passed
@mrcsin
mrcsin deleted the live-edge-break branch October 19, 2026 16:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant