fix(poort): een laadfout wijst niet meer naar een onschuldige test — en de cache was het niet #815
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!815
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/testcache-signatuur-798"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Sluit het bruikbare deel van #798, en draait de aanleiding om: de kernelcache is de verkeerde verdachte.
De storing viel tijdens dit werk zelf, mét stack
In de dekkingsfase, op
test/import/snappy_test.dart, test 5507 van 6528 — de gemelde signatuur letterlijk. De stack is beslissend:Dat is
Stream.cast<T>(). De enige plek in deze keten die zo cast isstream_channel/lib/src/multi_channel.dart:143:MultiChannelmultiplext meerdere logische kanalen over één verbinding, dus elk frame hoort een[id, inhoud]-lijst te zijn. Een kaleListin een cast is voor de VMList<dynamic>— vandaar exact die tekst, en vandaar een stack met niets dandart:asyncerboven. Er kwam dus een JSON-object op een lijn die alleen frames vervoert. Influtter testis dat de lijn tussen het gereedschap en het testproces (_pipeHarnessToRemote,flutter_platform.dart), JSON over een WebSocket.Wat weerlegd is
Drie manieren om die cache te bederven, tegen een echte draai van deze suite:
De frontend server valt in alle drie de gevallen terug op een volledige compilatie. "Het bestand is stuk" houdt geen stand. De tabel staat in
docs/CHECKS.mdzodat niemand die proeven overdoet.Wat de drie bekende voorvallen gemeen hebben is belasting, niet de cache: alle drie in de dekkingsfase, en de reproductie viel terwijl er een tweede
flutter testop dezelfde machine liep. Drie is geen steekproef; de gooiende regel staat vast, de aanleiding niet, en zo staat het opgeschreven.Wat er nu gebeurt
Elke
flutter testin de Makefile schrijft náást het scherm een machineleesbaar rapport (--file-reporter json:build/test-report.json), en bij een rode suite leesttool/explain_suite_failure.dartdat. Het noemt de bestanden die niet geladen konden worden — mét de zin die er anders bij inschiet, dat de tests erin niet gedraaid hebben en niet meetellen — en zegt of dat de bekende kanaalstoring is of een echte laadfout.Een zijkanaal, dus het kán niets wegpoetsen: de uitvoer stroomt onveranderd door en de afloop blijft die van de suite. Filteren over de uitvoer is bewust niet gedaan — een pipe kost
flutter testzijn voortgangsregel en maakt van een draai duizenden regels.De belangrijkste eigenschap is niet de geruststelling maar het omgekeerde. Een bestand dat niet compileert is óók een laadfout. Die wordt hier juist als échte fout benoemd, niet als "bekend" weggezet — dat is de eerste toets in
test/explain_suite_failure_test.dart, met een ontbrekendemain, een mislukte compilatie en een ongerelateerde type-cast. Stond die verkeerd, dan was dit hulpmiddel erger dan geen hulpmiddel.Verder:
make clean-test-cacheals grover middel. Alleenbuild/test_cache, bewust nietflutter clean— daaronder staan de platformbuilds waarDARTCV_LIBde native OpenCV-bibliotheek vindt, en die weggooien laat de gezichtsdetectietests zichzelf weer overslaan. Dat is groen om de verkeerde reden.Bovenstrooms
Twee reports, geen van beide dit:
.dill.track.dill. In 2020 gesloten: het bleek een pakketversieverschil. De cache was daar óók de rode haring.flutter testonderbuild/wordt niet ongeldig als Flutter het formaat wijzigt, en de conclusie van de melder is letterlijk dat opruimen de enige remedie is en dat dat niet vanzelf duidelijk is.Wat er niet in zit
Een preventieve vervaldatum op de cache. Overwogen omdat de bestandsnaam alleen de dart-defines en de frontend-opties hasht (
getDefaultCachedKernelPath) en dus een SDK- of pakketwijziging overleeft — geschrapt zodra bleek dat de cache de oorzaak niet is. Dan koop je een hercompilatie voor een theorie.En de aanleiding zelf. Die blijft open in #798.
Poort
make checkgroen op deze tak in een verse worktree: 6.539 tests, dekking 86,5%, per-bestandsvloer 0. Twee overgeslagen tests zijn de gezichtsdetectie, die in een worktree zonder platformbuild altijd zichzelf overslaat.Elk van de zes toetsen is één keer rood gezien tegen een gemuteerde tool, Makefile en docs.
🤖 Generated with Claude Code