Skip to content

Report leftovers: golden snapshot file, one dependents question per name, honest refusal of a heavy selection - #31

Merged
donislawdev merged 3 commits into
mainfrom
perf/report-leftovers
Sep 29, 2026
Merged

donislawdev merged 3 commits into
mainfrom
perf/report-leftovers

Conversation

@donislawdev

Copy link
Copy Markdown
Owner

The last items left from the performance report, plus one fault on the plan sheet.

What changes

  • The snapshot file is pinned byte for byte. SnapshotGoldenTests renders the specimen catalogue with fixed metadata and compares it with tests/Bws.Core.Tests/Golden/snapshot-schema-4.json, reads the kept copy back and writes it again unchanged, and ties the file name to the schema version. .gitattributes marks the folder -text so a checkout cannot rewrite its line endings. With that in place, the redundant leaf copy at the end of SnapshotJson.Sorted goes: same bytes, about 0.8 MB less allocated per render of a 797 entry snapshot, no change in time.
  • A bulk plan asks who depends on each name once. DependentsAskedOnce keeps one answer per name for the length of one BulkPlanBuilder.Build. Over 800 entries asked to stop: 800 questions instead of 1430, and the preview built in 103-171 ms instead of 184-276 ms.
  • A selection holding a critical entry is refused out loud. The footer used to ask for the first entry's name while the confirmation refused every plan about more than one entry, so the name could be typed and the button stayed off. A selection now gets a sentence saying to deselect those entries or deal with each on its own, and the grey button says the same. One entry still asks for its name. The section moves to PlanConfirmation.xaml, a view of its own, shown in both states in the component catalogue.

Checked

  • Narrow runs of the touched classes: Core 133/133, GUI 239/239, architecture 182/182.
  • 23 mutation entries (new, re-anchored, and the neighbours of the confirmation box): 23 of 23 caught, after a baseline run of the 15 named tests on the unmutated tree.
  • The whole-scope stop sheet photographed on real data: refusal under the danger line, no box, the button off.

Not run: the full test suite, the full gate, the full mutation registry, the integration performance budget.

🤖 Generated with Claude Code

donislawdev and others added 3 commits September 29, 2026 18:05
The snapshot format had tests for key order, the dropped measurement and the
trailing newline, and none for the file as a whole. A renamed field, a null that
stops being written or a character that starts coming out escaped would pass all
of them. A trial NativeAOT build showed the cost: it wrote an empty object for
every entry with exit code 0, while its text output stayed identical.

SnapshotGoldenTests renders the specimen catalogue with fixed metadata and
compares it with tests/Bws.Core.Tests/Golden/snapshot-schema-4.json, reads the
kept copy back and writes it again unchanged, and ties the file name to the
schema version. The kept copy is embedded and marked -text in .gitattributes so
a checkout cannot rewrite its line endings.

With that in place, the leaf copy at the end of SnapshotJson.Sorted goes: both
branches already detach a child before recursing. Same bytes, about 0.8 MB less
allocated per render of a 797 entry snapshot, no change in time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A bulk plan asked the manager the same question many times over: the ordering
asks about every selected name, each plan asks again about its own target, and
the cascades of neighbouring entries overlap. Over the whole listing of 800
entries asked to stop that was 1430 questions, each opening the manager and then
the service.

DependentsAskedOnce keeps one answer per name for the length of one
BulkPlanBuilder.Build and is handed to both the ordering and the plan builder.
A refusal is kept as a refusal, names are compared as written, and nothing
outlives the build. Measured with the plan probe, interleaved: 800 questions
instead of 1430, and the preview of the whole listing built in 103-171 ms
instead of 184-276 ms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A plan over a selection that included an entry the machine does not work
without asked for the first entry's name to be typed, while the confirmation
refused every plan about more than one entry. The name could be typed and the
button stayed off - a dead end that looked like a door.

The footer now separates the heavy ask from the way it is answered. One entry
still asks for its name. A selection is refused with a sentence under the
danger line saying to deselect those entries or deal with each on its own, and
the grey button says the same. No single name agrees to a selection.

The confirmation section moves out of PlanFooter.xaml into PlanConfirmation,
a view of its own with its own state, which the component catalogue shows in
both states. The changelog also records the faster bulk plan preview.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 29, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Advanced

Run ID: cdf64e33-e84c-4689-8ad0-6c13f3de3ae3


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@donislawdev
donislawdev merged commit cdd083e into main Sep 29, 2026
8 checks passed
@donislawdev
donislawdev deleted the perf/report-leftovers branch September 29, 2026 16:47
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