Repository navigation
Conversation
…lock, one seed for random colours and the randomizers The drag, double-click, hold and tap timers read anim::now instead of Instant::now, and the random colours, the piano roll's randomizer and the clip colours take their seed from clip_colors::clock; a project made new in a test that runs the motions' clock starts at a fixed date. Nothing changes outside tests: anim::now is the time unless a test sets the clock. For the equivalence harness (specs roadmap/control-plane.md part 2, step 0), which needs every run alike. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drives the app without a window the way a user does, on FL's bundled projects, and records each step's fingerprint (the project, the project state the interface holds, what .lemon stores, the undo history, whether the engine holds the project, whether there is something to save); a trace recorded on one build replays on another and names the first input that behaves differently. At the end of each trace: undo to the start, redo to the end, the engine in step, a saved copy opened as the project the save wrote, a second save the same, ids. What these report on purpose is listed with its reason in equiv_accepted.txt. Tools: equiv_record, equiv_replay, equiv_twice, equiv_shrink, equiv_show, equiv_coverage (all ignored tests; the module's doc has the commands). Test code only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… not the accepted list of the day Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…so moving that state into the project changes no fingerprint Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…part, as the fingerprint does Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… after undo, until step 15 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Step 0 of
roadmap/control-plane.mdpart 2 in the specs: a harness that shows whether a build behaves as anotherone does, so each later step (the session crate, the interface crate, project data into the project) can be held to
"no change at all". Test code only; nothing changes in what Lemon Studio does.
What it does
It drives the app without a window the way a user does: clicks, double clicks, right clicks, drags, the wheel, keys and
modifiers, aimed at what the frame shows (only controls a click there reaches; a kind of control it has used less is
picked more, one never used yet much more). After every step it writes a fingerprint of the project, the project state
the interface still holds (tempo, pattern shown, rack groups and loops), what
.lemonwould store, the undo history,whether the engine holds the project, and whether there is something to save. A trace recorded on one build replays on
another: the first step whose fingerprint differs names the input that behaves differently.
At the end of each trace it checks what needs no other build:
What these report on purpose is listed with the reason in
equiv_accepted.txt(each FL claim with its measurement).The comparisons look through representation alone (list order, a clip's record bytes a save rewrites from its fields,
an empty pattern, a send at unity, bookkeeping).
Tools
All
#[ignore]tests incrates/os-app/src/equiv.rs, run on a hidden display (the module's doc has the commands):equiv_recordandequiv_replay(each trace in a process of its own with its own home folder, where nothing the appstarts can reach the desktop: Open folder, help links and the like run stand-ins that only note the call);
equiv_twice(record and replay on one build: what is not deterministic);equiv_shrink(cuts a trace to the few steps that still break a check);equiv_show(what each step lands on and changes; withOS_EQUIV_SHOW=checksthe end checks, with=saveasaved copy against the project);
equiv_coverage(which kinds of control the recordings showed, aimed at and changed something with).Changes outside the harness
Clock and randomness reads go through the app's own clock (
anim::now) and one seed (clip_colors::clock), so areplay sees the same times and random colours; a project made new in a test gets a fixed start date. Test-only
accessors on the transport (what was last sent, how often).
The harness tested too
The plan's planted faults, each on a scratch build and replayed against a clean recording of 38 of the projects:
unsaved()is the comparison with the project as last saved, so the plan's check that it is true exactly then holdsby construction; each step's value is in the fingerprint. Ids are checked after every step: every channel, pattern,
mixer track, slot plugin, arrangement and clip has one, and no two share one.
Measured
On FL's 151 bundled projects (one 300-step trace each, about an hour on a hidden display): with the fixes of #397,
no finding off the accepted list, and a replay on the same build gives the same fingerprints for all 151; 132 kinds of
control changed something. On main as it is, 139 of the 151 traces report something (the fixes PR lists what).
🤖 Generated with Claude Code