Skip to content

bug: no command can compare a tic past the first refused one #541

Description

@MarcusKainth

Where

Driver loop (driver)

Commit

bb31393, and every commit before it.

OS, architecture and ClickHouse version

macOS 15 arm64, ClickHouse 26.8.2.7.

What happened

No command compares a tic past the first refused one, and none can be asked to.
native diff, native demo and native play all stop there, so on a branch
whose first refusal is tic R, every tic after R is invisible to every
instrument the project has. Not hidden behind a flag; there is no flag.

The span is therefore inspected exactly once, by whoever moves the refusal past
it, as a side effect of unrelated work. #517 moved demo3's first refused tic
from 181 to 210 while adding two attack routines, and that is what first
exposed tics 181 to 209 to comparison at all. A real divergence was sitting in
them, at tic 206, already filed as #502.

So the span grows quietly while nobody can look at it, and whether anyone does
depends on which change happens to move the refusal. That is not a review
process.

#534 is the neighbouring defect and is narrower: a refusal suppressed the
comparison of the tics before it, which #539 fixes. This is the tics after
it, which #539 does not address and which no amount of reporting can, because
the rows do not exist: the run stops.

What you expected instead

Something that can compare a span behind a refusal, so that the tics after R
are reachable deliberately rather than by accident.

A run that continued past the refused tic would need its rows treated as
untrustworthy from R on, since the state feeding them is one the statement could
not produce, so the simplest form is probably not "keep going" but "start from
the probe's own row at tic N and run forwards", which is how #502 was
reproduced by hand. That gives a comparable span behind any refusal without
asking the simulation to carry a state it got wrong. Whether that belongs in
native diff as a flag, or as a separate command, is a design question rather
than a preference of mine.

Reproduction

# On any tree whose first refused tic is R, no invocation compares R+1.
clickdoom native diff 2134 --probe <trace>   # stops at R, exit 3
clickdoom native demo demo3 --from sim       # stops at R
clickdoom native play                        # stops at R

Output

$ clickdoom native diff 215 --probe refemu/reference_traces/demo3/probe.9a6a47d01119.tsv
# native diff elapsed=55.4s tics=213 tics/s=3.8
clickdoom: error: tic 210 unresolved: PL_ACTION_NEEDED
exit=3

The run produced rows for 213 tics. Tics 211 to 213 exist in native_state and
are not compared by this or any other command, and nothing reports that they
were skipped.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: nativeNative mode: the tic simulation and renderer as SQL, and the WAD loaderbugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions