SmartTest

Delivery log: 0.3.0 to 1.2.0

What was actually delivered against the roadmap, sprint by sprint. The foundation sprints S0 to S10 (0.1.0 and 0.2.0) are in the foundation backlog. Planning is in story points; one sprint is about 40 points. There are no dates: a sprint is a unit of work, and a version ships when its gate is met or the gap is written down.

Status words: done (shipped and tested), partial (shipped with a stated gap), moved (re-planned in a later version), not done (dropped from the version, reason given).

Summary #

The table covers 0.3.0 to 1.0.0. From 1.1.0 on, each sprint's status block in the 1.x roadmap records what was delivered and what moved; the sections below summarise each version.

VersionSprintsPlannedDeliveredMoved / not doneGateTag
0.3.0 Precise graphS11–S12968313 moved to 0.8.0metv0.3.0 (f85c053)
0.4.0 Complete graphS13–S1492848 moved to 0.7.0metv0.4.0 (ee220dc)
0.5.0 Runtime evidenceS15–S167158 done, 13 partial—partly metv0.5.0 (03ee658)
0.6.0 AdoptionS17–S186635 done, 31 partialNext.js fixture moved to 0.7.0partly metv0.6.0 (328b330)
0.7.0 Adaptation and E2ES19–S2084768 not done (TypeScript 7)metv0.7.0 (ec5d3a9)
0.8.0 SpeedS21–S2310579 done, 13 partial13 not done (type-checker resolution)not metv0.8.0 (a5d958f)
0.9.0 Hooks and interfacesS24–S2611636 done, 80 partial—partly metv0.9.0
1.0.0 StableS275252—metv1.0.0
Total17 sprints682503 done, 137 partial42

Tests grew from 124 (0.2.0) to 434 repository tests plus 114 extension tests (0.9.0); the regression harness grew from 4 to 9 fixtures, all at 0 missed failures in BALANCED and SAFE mode.

S11–S12 · 0.3.0 Precise graph #

Goal: select by method, not by class.

StoryPtsStatus
Member-level resolution through local inference (new X(), annotations, constructor parameter properties, this.p)21done
Method-level propagation13done
Inheritance, overrides, super.m()8done
CommonJS at symbol level13done
Re-export hardening8done
Graph diff between revisions8done
graph why, graph cycles, graph orphans8done
Per-test decision confidence4done
Persistent graph with incremental patches13moved to 0.8.0

Result: a change to TokenManager.verify no longer selects the tests that only use issue. LeadsIt measured with 0.5.0.

S13–S14 · 0.4.0 Complete graph #

Goal: edges for what is not TypeScript code.

StoryPtsStatus
Environment keys (.env* key-level diffs)13done
Assets read through fs8done
Wasp operations (wasp/client/operations → main.wasp.ts)13done
Prisma models and enums13done
Translation keys8done
Test infrastructure: snapshots, __mocks__, import.meta.glob8done
Mock awareness (factory mocks)13done
Generated code (generated[].from)8done
Next.js route conventions8moved to 0.7.0

Result: edges-vitest fixture with one targeted test per edge type and seven seeded regressions.

S15–S16 · 0.5.0 Runtime evidence #

Goal: combine static analysis with what tests actually run.

StoryPtsStatus
smarttest trace: per-test-file V8 coverage for Vitest, Jest, node:test21done
Trace invalidation by file hashes and runtime fingerprint8done
Hybrid selection (traces rule out in FAST/BALANCED, only add in SAFE)8done
Unprotected changes in impact13partial: unit level, no line-level coverage
Shadow Mode (smarttest shadow, --report)13done
benchmark --since/--sample/--resume/--traces8done

Gate: 0 missed failures over 12 + 40 LeadsIt commits; observed execution removed 1 of 11 test files on LeadsIt, short of the 20% target. Translation-namespace false positives found on LeadsIt were fixed (one commit went from 37 selected files to 4).

S17–S18 · 0.6.0 Adoption #

Goal: set up in any repository and any CI without editing configuration.

StoryPtsStatus
npm publish with SBOM and npm audit5partial: SBOM and audit in release:pack; publishing waits for the name decision (ADR-0007)
smarttest hook install/uninstall/status8done
smarttest ci8done
Per-project conventions (projects)8done
Cold start under one second at 2,000 modules13partial: worker threads, parallel discovery, default-pattern discovery; LeadsIt cold scan 5.5 s → 3.6 s; target not met
Adaptive policy5done
Fixtures React, Next.js, Yarn, TS library, Wasp; three operating systems13partial: React, TS library, Yarn added; Next.js moved to 0.7.0; macOS and Windows not validated
Documentation snippets executed by tests6done

Gate: commander.js, path-to-regexp, ufo, defu and LeadsIt set up with init --yes, 0 missed failures (results). Bugs found on the way: fluent methods returning this, node --test directory globs, a local t mistaken for a translation function.

S19–S20 · 0.7.0 Adaptation and E2E #

Goal: stay correct when the project changes shape; select end-to-end specs.

StoryPtsStatus
smarttest sync [--check], doctor --fix13done
smarttest migrate --to vitest8done
smarttest watch13done
Playwright adapter13done
E2E mapping (visited URLs → routes)13done
Next.js app/ and pages/ conventions8done
Cypress adapter8done, not validated against a real Cypress install
TypeScript 7 native API8not done: TypeScript 7 has no parser API usable from Node; watch item for 1.0.0

Gate: met (integration-tests/adaptation.test.ts; next-playwright fixture; Playwright benchmark with 0 missed failures).

S21–S23 · 0.8.0 Speed #

Goal: run what remains faster.

StoryPtsStatus
Validated result cache21done
Fail-fast ordering, --bail8done
Parallel runner groups13done (CPU budget; memory not budgeted separately)
Sharding8done
Flaky analytics13done
Subversion and Mercurial adapters16done
Persistent graph with incremental patches13partial: in-memory patches in watch (under 1 ms); not persisted to disk
Type-checker resolution13not done; moved after 1.0.0

Gate: not met. LeadsIt's 12-commit replay went from 47.2 s to 43.4 s (8% less, target 30%), 0 cache-integrity violations. A repeated run of an unchanged state on LeadsIt takes 1.2 s instead of 4.1 s (93 of 100 test files from the cache).

S24–S26 · 0.9.0 Hooks and interfaces #

Goal: make staged and pushed checks reliable and expose selection evidence in local interfaces.

StoryPtsStatus
Exact staged-content runs8done: temporary checkout, alternate indexes, binary/symlink/rename and file/directory transition fixtures
Pre-push installation and actual destination comparison5done: new/unknown destinations select conservatively; unsupported non-HEAD pushes are rejected
Hook defaults, affected-project checks, estimates, budget and status23done: checks and tests run concurrently; explicit bypass records and unchecked-commit findings
Real-project hook measurements4done: LeadsIt adopted and replayed; OpenPro front end measured before/after, 0 missed failures
Studio overview and test explorer21partial: local server, filtering, source and test actions shipped; complete accessibility/design gate open
Impact map13partial: selection paths, reasons and confidence shipped; graph filtering/export remain open
Live runner and coverage viewer21partial: affected/all/file execution, group events, cancellation, aggregate coverage and unit trace annotations; browser coverage collection and line/branch heatmap remain open
VS Code extension21partial: CodeLens, hover, impact/run commands, results and trust gates; current-file command runs the affected change set; actual editor-host validation unavailable

Validation: pnpm verify passes 434 repository tests and 114 extension tests, TypeScript, Biome, package boundaries and generated-planning checks. Nine regression fixtures remain at zero missed failures. The packaged CLI was installed outside this checkout and served Studio assets and authenticated APIs. Its runtime audit reports zero advisories; the VSIX passes archive validation.

LeadsIt: all 714 assertions across 101 test files pass with 0.9.0 (4.78 s in this run). The staged hook reports 314 passed and 400 cached, zero failures, in 3.67 s including isolation. Its 12-commit benchmark reports 53.59 s full, 7.18 s project-gated, 34.38 s SmartTest, zero missed failures and zero cache violations. That is 36% faster than full runs and 379% slower than the project-gated baseline. These are local observations with a changing history/cache; they do not establish a release-to-release speed improvement.

The OpenPro-style fixture preserves typecheck, build and PID/wait semantics through hook install --replace. Hook duration was 1.88 s before and 2.70 s after; the two-commit benchmark found zero misses and zero cache violations. With no remote base, the new hook checks the complete committed tree conservatively. This small fixture does not represent OpenPro's full workload.

The LeadsIt dry run exposed replacement-string interpretation of shell $' sequences during an existing-hook upgrade. The installer now inserts the modified text through a callback; a regression test preserves all shell dollar sequences. The applied upgrade changes only the SmartTest invocation. A real adoption commit then exposed lost executable permissions during atomic replacement; atomic writes now preserve existing permissions, with an upgrade/uninstall regression test. The hook was restored before the final adoption commit.

Studio security checks cover token, Host, Origin, request methods, content type, source traversal and symlink boundaries, CSP and SSE shutdown. Missing benchmark values stay unavailable; incomplete runs cannot be labelled passed. Retained browser evidence covers five screens, both themes and 1440/768/390 widths without document overflow. The overview inspector has zero failures and three warnings; seven keyboard checks pass. These checks are not a complete WCAG 2.2 AA or all-screen design signoff. See the Studio critique.

Post-release audit (same tag, 2026-10-30): a performance and UX review before publication fixed N+1 work and repeated computation in hooks, Studio and the VS Code extension, and fixed Studio defects found only in a real browser.

Feature review (same tag, 2026-10-30): a correctness review of every 0.9.0 feature, each defect reproduced before it was fixed and covered by a test that fails without the fix.

Validation round (same tag, 2026-10-31): the limits listed after the feature review, measured or tested instead of stated.

Gate: partly met. Features and limitations above are shipped explicitly as alpha; accessibility, complete keyboard/visual review, extension-host validation and remaining interface capabilities carry into 1.0.0. Source highlights indicate observed unit execution, not measured line coverage. Per-file results stream as each runner group finishes; cached results arrive with the summary.

S27 · 1.0.0 Stable #

Goal: freeze the public contracts, publish benchmarks, review security, and close the gates carried from 0.6.0 to 0.9.0.

StoryPtsStatus
Plugin SDK 1.013done: apiVersion: 1 runner, VCS, language and edge-provider contracts; conformance kit run against every built-in adapter; edge-provider plugins (plugins config) with a fixture in the regression harness (ADR-0010). Only edge providers can be loaded as plugins; third-party runner/VCS/language registration is a later, non-breaking addition
Freeze public contracts5done: config JSON Schema with a drift test against the type and the validator, v1 schemas for 11 frozen --json commands plus the error document, pinned exit codes, semver policy and migration notes (contracts)
Published benchmarks on five real repositories13done: six repositories, 0 missed failures (benchmarks). The 0.5.0 target (traces cut selection by 20%) and the 0.8.0 target (30% less than 0.7.0) were re-measured and are not met: traces added tests instead of removing them, and replay time is within noise of 0.7.0
Performance8done: warm end-to-end analysis at 10,000 modules 734 ms (was 1.35 s), cold start at 2,000 modules 656 ms; graph persisted and validated between runs. LeadsIt cold scan 1.73 s (was 3.6 s), warm impact 0.48 s. The §31.3 in-process analyze target (< 500 ms) is still missed at 10,000 modules (654 ms)
Security review8done: 21 findings (4 high), all fixed with regression tests; accepted risks recorded (review)
Documentation complete5done: contracts, plugins, security review, benchmarks, CI guidance for the state key; install docs moved to npm

Carried gates closed in this version:

Gate: met. No open defect is known that can make a failing test be skipped. The regression harness and all six real-repository replays are at 0 missed failures.

Pre-publication audit (same tag, before npm). A code audit of the release diff, a first-user audit in fresh installs, and Galdia found defects; each is fixed with a regression test (changelog). Three could make a failing test look fine:

Galdia's replay: 12 commits, 0 missed, 96% less test time (benchmarks).

1.0.1 · patch (1 November 2026) #

Checked on the six projects that installed 1.0.0 from npm (Galdia, LeadsIt, OpenPro's front, admin, MCP service and desktop monitor): doctor, scan, impact, explain, trace and real runs.

1.0.2 · patch (1 November 2026) #

An audit of 1.0.1 before more projects adopt it, so the fixes ship in one release. Two soundness oracles ran on the five adopting projects (every file a test loaded at run time must be reachable in the graph; every import must resolve as the TypeScript compiler resolves it), and four reviews reproduced each finding in a throwaway project.

1.2.0 · minor (7 November 2026) #

Sprints S32–S35 of the 1.x roadmap (119 points). Per-sprint status: the status blocks there.

RepositoryImports agreeInjectedCaughtSurvivedMissed
openpro-front13,232 / 13,2325410
openpro-admin712 / 71210730
openpro-mcp-service55 / 5510370
OpenProMonitor461 / 46110280
openpro-backend116 / 116 (JS/TS)5320
LeadsIt4,907 / 4,90810190
Galdia5,067 / 5,06710280

1.1.1 · patch (3 November 2026) #

1.1.0 · minor (3 November 2026) #

Sprints S28–S31 of the 1.x roadmap. Per-sprint status and what was not done: the status blocks there.

After 1.0.0 #

ItemFromStatus
20% observed-execution reduction, 30% speed target0.5.0, 0.8.0re-measured at 1.0.0, not met; kept as goals, not gates
In-process analyze under 500 ms at 10,000 modules (§31.3)0.8.0missed: 547–564 ms on the released main (466 ms when the lazy index merged)
Browser coverage through source maps (bundled or transpiled scripts), pages beyond the page fixture1.0.0Chromium, unbundled files only
Studio: full-screen design sign-off in both themes, forced colours, text spacing, VoiceOver live regions0.9.0needs a human review; automated checks pass
Third-party runner, VCS and language adapters as plugins1.0.0contracts frozen and conformance-tested; registration not exposed
TypeScript 70.7.07.0.2 ships an unstable/* parser API; not adopted while it is unstable
Type-checker resolution0.3.0, 0.8.0after 1.0.0

Carried into 1.0.0 (closed in S27) #

ItemFromNow in
Studio screen-reader pass (NVDA, VoiceOver), real Safari, and remaining interface capabilities0.9.01.0.0
True current-file run scope in the extension0.9.01.0.0
Hook-only runner scope (browser specs in CI, unit tests in the hook)0.9.01.0.0
Publish on npm0.6.01.0.0 (blocked on ADR-0007)
Validate on macOS and Windows0.6.01.0.0
Cold start under one second at 2,000 modules; persist the graph to disk0.6.0, 0.8.01.0.0 performance story
Validate the Cypress adapter on a real install0.7.01.0.0
30% speed target and 20% observed-execution target, re-measured on the published benchmark repositories0.5.0, 0.8.01.0.0 benchmarks
TypeScript 70.7.0watch item, 1.0.0
Type-checker resolution0.3.0, 0.8.0after 1.0.0

Edit this page on GitHub