0.9.4
Changelog:
Added:
-
suite_summaryMCP tool. One call for the run as a whole: state counts, run window and duration, duration buckets, slowest methods, failure ids, counts by tag and package, participants. Reads onlyindices.json(#221). -
#/issue/<key>and#/epic/<id>report links. Open the first test carrying the key with the matching method expanded and the filter applied, across every source. Filter links such as#/overview?q=issue:KEYstill land on the Overview (#222). -
SetupStep.setup(scope). One step can now act, wait for state, read a value out and act again: overridesetup(scope: SetupScope)and usegiven,action,collect,verifyandverifyEventuallyon the scope, each executing immediately. The existinggivens()/actions()/verify()triple is unchanged and remains the default body ofsetup, so current steps behave exactly as before.SetupScope.verifyEventuallypolls on the calling thread until the check stops throwing and needs no assertion-flavour dependency. Documented on the new Setup Steps page (#210). -
SetupSteps(list). AList<SetupStep>constructor for steps assembled conditionally, instead ofSetupSteps(*list.toTypedArray())(#213). -
One-line setup steps.
setupActions(a, b)andsetupStep { }build aSetupStepwithout an anonymous object;kotestSetupStep { },hamkrestSetupStep { }andhamcrestSetupStep { }put the flavour's assertion helpers in scope (#212). -
?theme=dark|lighton report URLs. Sets the initial theme for that load so a page embedding the report can match its own colour mode; not written back to the stored preference.
Changed:
- Compact MCP listings.
list_testsreturns one row per class with method counts and elapsed time;children: truerestores the method rows.get_testwith a<class>:<method>id returns that method only.captured_interactionscaps each captured value atmax_value_chars(default 4000) and marks the cut (#221). - Report scrolling stays inside the report. Deep links and the sidebar reveal now scroll the report's own content pane rather than calling
scrollIntoView, which in Firefox also scrolled any page embedding the report in an iframe. Standalone behaviour is unchanged. - Polling block rendering.
thenEventually { then(a); and(b) }no longer reads "Then eventually then a and b". The wrapper line is unchanged, the first inner step drops itsthen, and each later step rendersAndas a keyword.