Skip to content

0.9.6

Latest

Choose a tag to compare

@github-actions github-actions released this 21 Sep 11:11
· 15 commits to master since this release

Changelog:

Added:

  • Log source manifest and richer log tab entries. run.json gains logSources, one entry per registered LogQueryService source with its id, file and whether that file was present when the run finished. A log tab's entry in customTabContents now carries sourceId, identifier and entries, plus a .jsonl records sidecar beside its .txt file, one {"identifier","text"} record per line. A source that produced no records is recorded with entries: 0 and no file, and a tab @KensaTab.visibility skips on a pass is recorded with visibility and no file; both additive to older bundles (#228).
  • Three MCP log tools. list_log_sources lists the sources a run registered and whether each file was present. invocation_logs lists one invocation's log tabs with entry and error counts, plus skipped tabs and registered sources with no tab. read_log reads one tab's records filtered by pattern or level, capped and truncated (#228).
  • The report shows file-less log tabs instead of hiding them. A tab recorded with entries: 0 and no file now renders "No entries for this invocation" rather than vanishing from the invocation. A tab an @KensaTab(visibility = OnlyOnFailure) skips on a pass still carries no file and stays hidden, unchanged from before (#228).

Fixes:

  • @ExpandableRenderedValue names render as prose. The sentence showed the raw method name, theObservedLifecycle, where @ExpandableSentence showed the Observed Lifecycle. The name is now scanned like any other identifier, for the default and tabular styles (#229).
  • A chained call after an argument-less expandable stays in the sentence. In Kotlin, withTheExpectedFields().and(aFirstName of "John") put and aFirstName of John in the expandable's parameter box, because the argument check looked at the whole call chain instead of the expandable's own parentheses. this.withTheExpectedFields("Mr") had the opposite problem, and its arguments were not shown. Both @ExpandableSentence and @ExpandableRenderedValue are fixed (#242).
  • Parameter values are typed in the report. A string parameter whose value was literally null, true or 42 was styled as null, boolean or number in the parameter table and matrix, because the kind was inferred from the rendered text. Each invocation now carries parameterKinds beside parameters, written from the real type, and the views use it. Reports without the field keep the old inference. A parameter whose Kotlin type is a Number now renders as a number even when a registered ValueRenderer formats it, for example £1,234.00. (#147).
  • An empty @Highlight value no longer hangs the report. A field or parameter annotated @Highlight whose value was "" built a highlight pattern that matched at every position of every text node, so expanding an interaction never returned and the browser tab hung. Empty highlights are now ignored (#186, thanks to Michael Orr).
  • Badge filters and tag clicks stay where you are. Choosing Filter by this issue from a badge, or clicking a tag, applied the query at whichever page the report was first opened on, usually the Overview, instead of on the test in view. The handlers held the first render's setSearchParams, which navigates relative to the location it was created in (#227).
  • Embed frames shrink as well as grow. The embed posted document.documentElement.scrollHeight, which inside an iframe never drops below the frame's own height, so a frame sized by kensa-embed.js grew to fit the sequence diagram and stayed there when a shorter tab was chosen. The embed now measures its own content root, so the posted height follows the content both ways (#226).

Breaking:

  • TableRenderer removed. The interface was public and documented but nothing could register one, so the default table shapes always applied. Removed rather than frozen at 1.0; the docs now describe the supported row shapes (#231).

Changed:

  • Kotlin 2.4.20. Toolchain bump from Kotlin 2.4.10; no API changes. The compiler plugin loads only in the Kotlin version it was built against, so consumers must now compile with Kotlin 2.4.20. Build-plugin users get the matching compiler plugin in the next build-plugins release.
  • Kotest 6.2.4, Gradle 9.7.1. Dependency bumps; no API changes. Also PlantUML 1.2026.6, Jackson 2.22.2, Byte Buddy 1.18.12, Selenium 4.47.0.
  • Amber accent. The report, its mark and kensa.dev now use the Kensa family colour, amber, wherever an accent appears: the logo, focus rings, the selected tag, the active package crumb, the environment picker. Pass, fail and disabled keep green, rose and orange. The report looks the same in every host, including Kensa Hub.
  • Dark mode follows the OS until you choose. A report with no stored preference matches the system appearance and tracks changes to it. Pressing the switch stores a choice, which then wins. ?theme= and embeds are unchanged and never write the preference.