test(datagrid): assert the contracts the app actually has, not the ones it used to - #2378
Conversation
…es it used to Claude-Session: https://claude.ai/code/session_013MEaba8K1HQcyDNeq5wEFk
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…d completions Claude-Session: https://claude.ai/code/session_013MEaba8K1HQcyDNeq5wEFk
|
Pushed two more commits. The quarantine is now 14, down from 42 when this started, and every remaining entry has been read and carries a verified reason. What the last batch cleared
Two invariants the tests had backwards
In both, "fix the code to match the test" would have introduced data loss. The 14 left, by cause
The four headings this file started with were mostly wrong. "Bundled One defect in the suite itself, reported not fixed: |
|
เมื่อ เสาร์ 22 ส.ค. 2026 เวลา 1:20 PM Ngô Quốc Đạt ***@***.***>
เขียนว่า:
… Merged #2378 <#2378> into
main.
—
Reply to this email directly, view it on GitHub
<#2378?email_source=notifications&email_token=B64CZPHFVLTH3NOEGI2A2SD5LE3T5A5CNFSNUABQM5UWIORPF5TWS5BNNB2WEL2JONZXKZKFOZSW45CON52GSZTJMNQXI2LPNYXTEOJYGQYDGNBRHE2DPJTSMVQXG33OVJZXKYTTMNZGSYTFMSSWK5TFNZ2KYZTPN52GK4S7MNWGSY3L#event-29840341947>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/B64CZPFA2KOG4XBBCS6ZHVL5LE3T5AVCNFSNUABGKJSXA33TNF2G64TZHMYTCMJXHA4TCMBUGQ5US43TOVSTWNJSGIYDIMRUGEYTHILWAI>
.
Triage notifications, keep track of coding agent tasks and review pull
requests on the go with GitHub Mobile for iOS
<https://github.com/notifications/mobile/ios/B64CZPDXM5IUNQ3CWWQOCAT5LE3T5A5CNFSNUABQM5UWIORPF5TWS5BNNB2WEL2JONZXKZKFOZSW45CON52GSZTJMNQXI2LPNYXTEOJYGQYDGNBRHE2DPJTSMVQXG33OVJZXKYTTMNZGSYTFMSSWK5TFNZ2KUZTPN52GK4S7NFXXG>
and Android
<https://github.com/notifications/mobile/android/B64CZPAIUKPNAYQEX7TRDST5LE3T5A5CNFSNUABQM5UWIORPF5TWS5BNNB2WEL2JONZXKZKFOZSW45CON52GSZTJMNQXI2LPNYXTEOJYGQYDGNBRHE2DPJTSMVQXG33OVJZXKYTTMNZGSYTFMSSWK5TFNZ2K4ZTPN52GK4S7MFXGI4TPNFSA>.
Download it today!
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
Ten more entries out of the quarantine file, 32 to 22, after #2377 took the first ten.
Half of them share one shape: the test holds a handle that used to steer the code and no longer does.
conn.sshConfig.enabled = true, whenresolvedSSHConfigreadssshTunnelMode. The formatter produced a plainmysql://URL and the test asserted it containedssh://reloadVersionafter an edit, when the manager only bumps it on a reloadDatabaseType.scylladb.iconName == "cassandra-icon", when ScyllaDB has its own registry entry and its own assetsaveChanges, when the block lives in the execution gatereloadVersion is a reload signal, not a change counter
reloadVersiontells the grid to throw away what it is showing and fetch again. It increments in exactly three places:clearChanges,discardChangesandconfigureForTable. It deliberately does not increment when an edit is recorded, because a reload there would discard the edit the user just made.Four cases asserted the opposite. Each now pins the contract from both sides: recording does not bump it, and the reload path does.
Read-only is enforced, in one place
saveChangescarries no read-only guard, and that is correct.DefaultExecutionGatedenies a write with "Safe Mode is set to read-only for this connection", andMainWindowToolbar+Validationdisables Save.ExecutionGateTests.readOnlyBlocksWritesasserts exactly that, is not quarantined, and passes.The two
SaveCompletionTestscases were asserting the same rule at a layer that does not implement it, so they are gone rather than duplicated.What is still quarantined, and why
The three remaining
SaveCompletionTestscases fail earlier than the behaviour they assert:saveChangesreturns atguard let scope = parent.selectedTabScopelong before it clears the inout parameters, so they need a connected scope the harness does not build.The three
StructureChangeManagerUndoTestscases are an undo-grouping artifact, not drift.applyColumnDeleteUndotouches exactly one key, so a single undo clearing two pending changes can only beNSUndoManagergrouping them:groupsByEventis on, and operations called without a run loop turn between them land in one group. The app gets a turn between user actions and the test does not.I could not close the group from the test.
RunLoop.current.run(until: Date())does not do it, and neither does a 20ms interval. Both dead ends are written into the quarantine file so the next attempt starts from a seam on the manager rather than repeating them. I removed these three from the file before proving the fix worked, which would have sent them to CI marked as passing; they are back in.Verification
The quarantine file records where every removed case went and why each remaining one stays.