Repository navigation
v3.28.0: baselines carry a kind, request outcomes on every surface, Module Federation and Nuxt reads
·
638 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Features
- Every saved baseline now says which command wrote it.
--save-baselinewrites a top-levelkindfield withdead-code,dupesorhealth. Older baselines without it still load, and an older fallow still loads a baseline saved by this release. - Pointing
--baselineat the wrong command's file is no longer silent. The run prints a warning with both command names and the path, and the file suppresses nothing. In the JSON output,baseline_staleness.unrecognised_formatistrue. The same warning appears in the pull-request comment, the merge-request note and the Check Run. The GitHub job summary shows the file path through the newbaseline-pathoutput, andfallow auditprints one warning per baseline it cannot use. - The JSON output says what narrowed a run.
baseline_staleness.scope_reasonslists the reasons, for examplechanged-sinceorproduction. A narrowed run with a baseline also gets arecheck-baselineentry innext_steps, and the barefallowcommand gets it too. request_outcomesis now in the output offallow flags,fallow suppressionsandfallow security. The first two report theirchanged-sinceentry, andfallow security --sarif-filegets asarif-fileentry.- An empty diff no longer looks like a clean project. When a diff filter applies, its
request_outcomesentry has ascope_sizewith the number of added lines. A diff with zero added lines reportsscope_size: 0. The Action, the GitLab template, the MCP tools and the pull-request comment then all say that the clean result covers nothing. hotspots-skippednow has acause:not-a-repository,invalid-sinceorchurn-file-unreadable.- A config that a plugin cannot read shows up in
workspace_diagnostics. When a Module Federationexposesorremotesis not a static object literal, the run recordsplugin-config-unreadablewith the plugin, the key and the reason. It setsdegrades_analysis, so the Action and the GitLab template print it in their degraded-inputs warning. Nuxt has a related case: acomponents:orimports:shape that fallow cannot model. Such a project recordsplugin-effect-not-modeled, and that entry is silent. - The JSON output and both CI integrations report a run that widened to the whole project. They also report a
--sarif-filethat could not be written, and a format that cannot group results with--group-by. - fallow reads Module Federation
exposesandremotes. It readsmodule-federation.config.*and inline plugin options in webpack, rspack, rsbuild, vite and Next.js configs. The plugin call can sit anywhere in the config: in a nested plugin array, in a variable, undertools.rspack.pluginsor in awebpack(config)hook. Options held in aconstin the same file are read, and so is the array form ofexposes. Eachexposestarget becomes a runtime entry point, and eachremotesalias counts as a provided dependency for the code under that config's directory. - Nuxt
autoImportscredits aglobal/orislands/component under the name Nuxt gives it. Each workspace root now gets its own verdict from its own config.components: true,imports: {}andimports: { dirs: [] }count as the Nuxt default. A name imported or re-exported from#componentsor#importsmarks its file as used, and#layers/<name>/works as a path alias.
Changed
fallow dead-codeno longer exits 2 when the baseline belongs to another command. It warns and continues.--fail-on-stale-baselinefails the run on such a file. Saving over a baseline of anotherkindis refused with exit 2.- The GitHub Action and the GitLab template log why a JSON read failed. The cause goes to the debug log, and a green run gets no extra line.
fallow security --basewarns when it cannot map the analysis root into the base worktree.
Bug fixes
- A package name in a bundler
entryis credited as a dependency. A value likereact-hot-loader/patchorwebpack-hot-middleware/client?reload=truein a webpack, rspack or rsbuildentryused to become an entry pattern that matched no file. The package then showed up as unused. - The MCP
auditanddecision_surfacetools detect the base ref again. This regressed in 3.1.0. Thanks @codingthat for the report and the reproduction (#2699). autoImports: trueworks in a Nuxt project that turns the scan off.components: false,imports: { scan: false }and the other scan-off shapes no longer count as a custom layout, so unused convention files are reported. Thanks @Tsuyoshi84 for the report (#2695).
Upgrade notes
- A CI job that points
--baselineat another command's file now fails when--fail-on-stale-baselineis set. Give each command its own baseline file. - A Nuxt project with
autoImports: trueand one of the scan-off shapes will see newunused-filefindings. Add a file toentrywhen it is used in a way fallow cannot see. - If you switch on
workspace_diagnostics[].kind, handle the two new kinds. Every new JSON field is optional.
Full Changelog: v3.27.0...v3.28.0