Repository navigation
1.0.0 release prep: docs, sidecar 0.10.0, CHANGELOG - #28
Merged
Merged
Conversation
Harrys76
force-pushed
the
wp33/release-1.0
branch
from
October 23, 2026 15:40
317b728 to
b53a333
Compare
Harrys76
force-pushed
the
wp32/public-api-1.0
branch
2 times, most recently
from
October 23, 2026 18:11
50da476 to
e01541f
Compare
Harrys76
force-pushed
the
wp33/release-1.0
branch
from
October 23, 2026 18:11
b53a333 to
d63eb3f
Compare
Harrys76
force-pushed
the
wp32/public-api-1.0
branch
from
October 23, 2026 18:23
e01541f to
af406dc
Compare
Harrys76
force-pushed
the
wp33/release-1.0
branch
2 times, most recently
from
October 23, 2026 19:22
51ac71a to
d0f3a0f
Compare
Harrys76
force-pushed
the
wp32/public-api-1.0
branch
2 times, most recently
from
October 24, 2026 05:19
71e6f3f to
9f87886
Compare
Harrys76
force-pushed
the
wp33/release-1.0
branch
2 times, most recently
from
October 26, 2026 16:44
892a3bf to
95f077d
Compare
Harrys76
force-pushed
the
wp32/public-api-1.0
branch
from
October 26, 2026 16:45
9f87886 to
de462d5
Compare
sleuth's version moves to 1.0.0, and the sidecar pins it. From 1.0.0 a lineage is the major version, since sleuth 1.x follows semver: any 1.x app connects, with version_skew_minor off the pin. The sidecar accepts 0.38 apps with version_skew_prior_lineage and refuses 0.37. Compact issues keep the measurement object, and get_issues passes the app's notUsefulMarks through. The tool schema, README compatibility section, CHANGELOG and release notes describe 0.10.0; test fakes report 1.0.0 and use 0.38 for the accepted prior lineage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The guide's quick start names --no-dds, and its run label, markers, text size and Escape tips match the new overlay. README, overlay, accessibility, configuration and internals docs drop the footer, the Export button, the Seen X/Y badge, the header theme toggle, the source accent and the shimmer, and describe the More menu, the meta line, the highlight bar with list-card stepping and the status lines. The validation matrix and capture procedure check the "· VM" run label instead of the VM+ and FRAME badges, and the example's capture screens say the same. ext.sleuthDemo.overlay gains menu and notUseful actions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The CHANGELOG's 1.0.0 section summarises the release and links doc/release_notes/1.0.0.md, which holds every change grouped by area: public API, issue data and exports, and the overlay. CLAUDE.md describes the 1.0 API and overlay, and its test counts match the suites. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With the menu open, the More menu panel carries the same "More" label as the header button and comes after it in the tree, so overlay action=menu tapped the panel's centre and could press a menu row. The menu and notUseful actions now look up a Semantics button by exact label (findSemanticsButton in harness_targeting.dart). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Guide's Back tip said back closes the open page, then the card. It also closes the More menu and the highlight bar first, as the Escape tip already says; a test now scrolls to the tip and checks it. The 1.0.0 release notes and CLAUDE.md describe the fixes from the iPhone walk: source locations per element, the chip that stays on, the frame rate and status label nodes, Rebuild stats "Off", the Evidence wording, the Measured row in Copy details and Ask AI, and the outline's colour and off-screen behaviour. The CHANGELOG lists the source-location fix under Fixed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Guide, doc/overlay.md and doc/accessibility.md say an app dialog or sheet keeps its Escape, and an app text field does too unless the highlight bar is up. The 1.0.0 release notes say an issue reported for an element is outlined only there, and that a debug-rate card critical on its latest second says so. The CHANGELOG notes that an app's own AnimatedBuilder, TweenAnimationBuilder, Checkbox and ShaderMask rebuilds count again, and that the API diff fails only on a breaking change without a major bump. CLAUDE.md follows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From 1.0.0 one lineage spans every 1.x release, so compare_snapshots diffs a 1.0.0 snapshot against a 1.2.0 one. The result now carries versionWarning (sleuth_version_differs) naming both versions, because a release can add detectors, move thresholds or fix false positives. Build metadata does not count as a different release. The tool schema documents versionWarning and describes arg_lineage_mismatch with lineages by major from 1.0.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The release notes and CHANGELOG say that cards hidden under 0.38 stay hidden (the stored overlay state moves to schemaVersion 2, which 0.38 reads as empty and leaves as it is) and that a new issue list rebuilds only the cards it changes. doc/internals.md documents the version 1 key migration. CLAUDE.md describes the card slot, the card epoch, the version 2 store, the sidecar's versionWarning and the test counts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
FileSleuthStateStore kept its file in Directory.systemTemp. On Android that is the app's code_cache, which every install of a new build empties, so hidden cards, the card's place and the filters reset after each flutter run (seen on a Galaxy A07). On iOS it is the container's tmp, which the OS may empty. overlayStateDirectory puts the file beside the temp directory in the app's own files (Android) or Library/Application Support (iOS), and keeps the temp directory for any other layout or platform. A write creates the directory first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Release notes and CHANGELOG: - Why it rebuilds shows in every debug run; with the debug callbacks off it asks to turn them on. - The public-name test and the api-diff job are described, including that removing an @experimental member of Sleuth counts as breaking. - Only a version 1 hide key that names no widget becomes an any-widget key. - cardDivider, the severity graphic parameters, Escape over an app dialog, the collapsed title's line count and the light-theme marks are described as the code draws them; a repeated banner bullet goes. README and docs: - The API stability section and doc/api_1_0_0.md say a removed @experimental member of a sleuth.dart class waits for a major release, as the CI diff enforces. - Rebuild stats is a page in the More menu, the trend example reads "seen 19 of 20 scans, persistent", the test badge shows 5,099. - Reduced motion, the back order, the crosshair before its first scan, fromColorScheme's kept colours and the example store's directory match the code; doc/internals.md names who writes the store. - The Guide's 1.3x tip names the status row and the trigger, and the markers tip says a second tap hides them. Sidecar docs: - diagnose reports the stream and stall counters on every accepted app; compact issues have 13 fields; the prior lineage is 0.38; connect's warning fires for any accepted version other than the pin; notes and the explain_issue description drop 0.36 and 0.37 apps, which are refused at connect; notUsefulMarks is a data key. - The capture procedure names the "Profile · no VM" label. CLAUDE.md names the 1.0 replacements of the 0.37 card internals and counts the API fixture in names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both screenshots still showed the 0.38 overlay: the VM+ badge, the summary bar, confidence badges and the footer. Re-taken on an iPhone 12 in profile mode with --no-dds on the Chat App demo, card maximized. Dark: the issue list with the run label, severity chips and meta lines. Light: Heavy Computation expanded to its measured value, route, evidence, its two causes and the fix. The pubspec captions describe the new shots and stay under pub.dev's 160 characters. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Harrys76
force-pushed
the
wp33/release-1.0
branch
from
October 26, 2026 17:59
95f077d to
bd270af
Compare
Harrys76
force-pushed
the
wp32/public-api-1.0
branch
from
October 26, 2026 17:59
de462d5 to
2ac8a68
Compare
This was referenced Oct 26, 2026
The six snapshots under mcp_snapshots/ come from sleuth 0.34, so no device payload exercised the 1.0.0 keys. snapshot_measurement.json is a new iPhone 12 capture (iOS 17.5, Flutter 3.47.6, profile, --no-dds, capture mode): the Always-Repaint and CSV Import routes, two CSV imports and one card marked Not useful. It carries a measurement on each of its four issues and one notUsefulMarks entry, and the snapshot schema audit checks the mark and its measurement against the documented shapes (a planted unknown key fails it). It is a new file rather than a re-recorded snapshot_heavy_compute.json, because frame_stats_real_frames_test reads the 0.34 files' frames as real-device jank data. The derivation note counts seven captures and records where the new one differs. A Galaxy A07 snapshot taken the same way passed the same audit; it is not committed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The triage, memory audit and release check prompts predated sleuth 1.0.0, so a model following them ignored each issue's measurement and the issues the developer marked Not useful, although the overlay says MCP output includes the mark. Each prompt now says what an issue's measurement holds and asks for the value against its warning or critical line, and explains that a notUsefulMarks key is the issue's stableId plus "|widgetName" when it names a widget. The triage lists marked issues last, the memory audit sets them aside and names them, and the release gate names the mark but keeps the issue in its verdict. A test checks that every prompt reading get_issues covers both, and that the gate keeps marked issues. 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.
Steps 18 to 20 of the 1.0.0 overlay plan (
doc/plan_overlay_1_0_0.md): docs, the sidecar and release prep. Stacked on #27.The device checks (steps 10 and 21, with the README screenshots and the
snapshot_heavy_compute.jsonre-record) and the final adversarial review (step 22) come after this PR is reviewed, once both test phones are connected.Sidecar 0.10.0 (step 19)
versionLineage('1.4.2')returns1, and below 1.0.0 it staysmajor.minor. Any 1.x app connects, withversion_skew_minorwhen it is not the pinned version.sleuthPackageVersionPin = '1.0.0'andacceptedPriorLineages = {'0.38'}, so 0.37 apps are refused.compactIssueKeysgainsmeasurement.get_issuespasses the app'snotUsefulMarksthrough, and the snapshot projection already kept it.doc/release_notes/0.10.0.mddescribe 0.10.0. The test fakes report 1.0.0 and use 0.38 for the accepted prior lineage.Guide, docs and example (step 18)
--no-dds. The run label, Mark flagged widgets, text size and Escape tips match the new overlay.doc/overlay.md,doc/accessibility.md,doc/configuration.mdanddoc/internals.mddrop the footer, the Export button, theSeen X/Ybadge, the header theme toggle, the source accent and the Ask AI shimmer. They describe the More menu, the meta line and the back and Escape order with the menu and the bar.doc/overlay.mdgains sections on the highlight bar (with list-card stepping) and the empty-list status lines.doc/validation_matrix.mdanddoc/capture_procedure.mdcheck the "· VM" run label instead of the VM+ and FRAME badges, and so do the example's capture screens.ext.sleuthDemo.overlaygainsmenu(taps More, reportsmenuOpen) andnotUseful(taps Not useful on the expanded card, reports the mark). Both look up a semantics button by exact label (findSemanticsButton).Release prep (step 20)
pubspec.yamlandkSleuthPackageVersionread 1.0.0.doc/release_notes/1.0.0.md. The release notes hold every change grouped by area: public API, issue data and exports, and the overlay. They include each item the plan lists (the measurement and Not useful types, the moved and hidden names with the import to use, the removed theme fields, and the behaviour changes).Review
The doc changes started from an audit of stale overlay text across the guide, docs and example. Every prose edit went through unslop.
Codex reviewed in two rounds; round 2 found nothing. Round 1 found that
overlay action=menucould tap the open menu panel, which carries the same "More" label, instead of the button. 317b728 fixes it, and a test fails without the fix.Gates:
fvm flutter analyze, format anddart doc --dry-runclean; publish dry runs of sleuth and sleuth_mcp report 0 warnings; 5,049 tests on 3.47.6 and on the 3.32.8 floor; 655 sidecar tests on both; 349 example tests.compare_snapshots across 1.x (3bf85e6)
From 1.0.0 one lineage spans every 1.x release, so
compare_snapshotsdiffs a 1.0.0 snapshot against a 1.2.0 one without a word. The result now carriesversionWarning(sleuth_version_differs:, both versions) when the two releases differ, since a release can add detectors, move thresholds or fix false positives. Build metadata does not count. The tool schema documents the key and describesarg_lineage_mismatchwith lineages by major from 1.0.0. Sidecar tests: 658.Docs (892a3bf)
The release notes and CHANGELOG say that cards hidden under 0.38 stay hidden (#24) and that a new issue list rebuilds only the cards it changes (#26).
doc/internals.mddocuments the version 1 key migration.Fixes from the iPhone walk
Fixes from the final review
doc/overlay.mdanddoc/accessibility.mdsay an app dialog or sheet keeps its Escape, and an app text field does too unless the highlight bar is up.Example store and docs (Galaxy follow-up)
FileSleuthStateStorekept its file inDirectory.systemTemp. On Android that is the app'scode_cache, which every install of a new build empties, so the example lost hidden cards and the card's place after eachflutter run.overlayStateDirectoryputs the file in the app's ownfiles(Android) orLibrary/Application Support(iOS), beside the temp directory, and keeps the temp directory for any other layout. On the Galaxy A07 a hidden card stayed hidden afteradb install -rand after aflutter runof a new build. On the iPhone 12 (iOS 17.5) the file lands inLibrary/Application Supportbesidetmp, and a hidden card stayed hidden afterdevicectl device install appand a newflutter run.compare_snapshotson a Galaxy snapshot: 1.0.0 against 1.1.0 returnsversionWarning, against1.0.0+build.7returns none, and 2.0.0 or 0.38.0 is refused witharg_lineage_mismatch.Doc audit
Three read-only passes checked every 1.0.0 doc against the code, and each finding was confirmed in the code before it was fixed here (doc comments in #23 and the Guide's Jank text in #24 went to the PRs that made them stale).
enableDebugCallbackswhen it is off; the public-name test and theapi-diffjob are described; only a version 1 hide key without a widget becomes an any-widget key;cardDivider, the severity graphic parameters, Escape over an app dialog, the collapsed title's three lines at large text and the light-theme marks match the code; a repeated banner bullet is gone.@experimentalmember of a class that is not experimental (such as a capture static onSleuth) as breaking. The README anddoc/api_1_0_0.mdnow say that removal waits for a major release instead of promising it in a minor one.fromColorSchemekeeps and the example store's directory match the code. The Guide's 1.3x tip names the status row and the trigger, and the markers tip says a second tap hides them.diagnosereports the stream and stall counters on every accepted app, compact issues have 13 fields, the prior lineage is 0.38,connect's warning fires for any accepted version other than the pin, notes and theexplain_issuedescription no longer describe 0.36 and 0.37 apps (refused at connect), andnotUsefulMarksis adatakey. The capture procedure names the "Profile · no VM" label.--no-dds, Chat App demo, card maximized): dark shows the issue list with the run label, severity chips and meta lines; light shows Heavy Computation expanded to its gauge, route, evidence, two linked causes and fix. The pubspec captions match and stay under pub.dev's 160 characters.CLAUDE.mdnames the 1.0 replacements of the 0.37 card internals and counts the API fixture in names.doc/internals.mdandmcp_tool_schema.mdlose three passive sentences.Device snapshot for the 1.0.0 shapes (step 21)
The six snapshots under
test/validation/captures/mcp_snapshots/come from sleuth 0.34, so no device payload exercisedmeasurementornotUsefulMarks.snapshot_measurement.jsonis a new iPhone 12 capture (iOS 17.5, Flutter 3.47.6, profile,--no-dds, capture mode): the Always-Repaint and CSV Import routes, two CSV imports and one card marked Not useful. It holds four issues with ameasurementeach and one mark, andcheckSnapshotCapturesMatchSchemachecks the mark and its measurement againstdoc/mcp_schema.json; a planted unknown key fails it. The plan said to re-recordsnapshot_heavy_compute.json, butframe_stats_real_frames_testreads the 0.34 files' frames as real-device jank data, so this is a seventh file instead. A Galaxy A07 snapshot taken the same way passed the same audit and is not committed.doc/mcp_schema_derivation.mdcounts seven captures and notes where the new one differs. 5,099 tests pass.Prompts use the 1.0.0 data
The
triage_performance,audit_memoryandrelease_checkprompts predated 1.0.0, so a model following them ignored each issue'smeasurementand the issues marked Not useful, although the overlay's toast says MCP output includes the mark. Each prompt now explains both: quote the measured value against its warning or critical line, and match anotUsefulMarkskey (the issue'sstableId, plus|widgetNamewhen it names a widget). The triage lists marked issues last, the memory audit sets them aside and names them, and the release gate names the mark but keeps the issue in its verdict. A new test checks that every prompt readingget_issuescovers both and that the gate keeps marked issues; it fails on the old prompts. 659 sidecar tests pass and the publish dry run reports 0 warnings.🤖 Generated with Claude Code