0.9.0
Immutable
release. Only release title and notes can be modified.
Added
- Assertion-graded test references. A reached entry point that a test references but whose referencing tests contain no behavioural assertion the scan recognises is now tagged
[test-referenced — no behavioural assertion found](text),🟡 test-referenced, no behavioural assertion found(markdown), and carries"referenced-no-behavioural-assertion"in the newentryPointTestReferencesJSON/MCP map. The grade is per file and certainty-gated: a file counts as assertion-weak only when every assert-ish call in it is a provable smoke form (assertOk,assertSuccessful,assertStatus(200),assertTrue(true)) or it has none — any behavioural or unrecognised assertion, or a status check that carries meaning (assertStatus(403),assertForbidden, an authorization test's own claim), leaves it plain[test-referenced]. Uncertainty always collapses to the weaker claim, never to the sub-tag: a false "proves nothing" would wrongly discredit a real test. It is advisory annotation only — never an input torisk, a--fail-ongate, orrichter:affected-testsselection. entryPointTestReferencesin--jsonand MCP structured content. Per reached entry point,"referenced"/"referenced-no-behavioural-assertion"/"unreferenced"; an entry point whose reference state cannot be determined is omitted from the map.richter:detect-changes --profile. Forces a fresh build and prints a phase-by-phase timing split (Brain analysis, canonicalisation, the consolidated tracer pass, entry-point tracing, Blade tracers, rewrites) to stderr, so--jsonand--markdownstdout stay a single clean document. It answers where a build's wall-clock actually goes on a given codebase.
Internal
- Suite grows from 562 to 580 tests: per-file assertion grading (smoke-form vs behavioural, authorization-status and Pest
expectedge cases), the profile phase-event sequence, and the--profileoutput-contract coexistence with--json. - Build phase timings ride the existing
onProgresscallback (richter:phaseevents), zero-cost when no listener is attached.
Full Changelog: v0.8.0...v0.9.0