Repository navigation
chore: replace knip with fallow and gate site PRs on fallow audit - #31634
Draft
DanielleMaywood wants to merge 1 commit into
Draft
DanielleMaywood wants to merge 1 commit into
DanielleMaywood wants to merge 1 commit into
Conversation
This was referenced Nov 3, 2026
pnpm lint runs fallow dead-code with type-aware analysis instead of knip. make lint gains lint/ts/new-code, which runs fallow audit against TS_LINT_NEW_CODE_BASE and fails on complexity and dead code that the change introduces, or on functions over a complexity threshold that the change makes more complex.
DanielleMaywood
force-pushed
the
fallow-audit-experiment
branch
from
November 3, 2026 11:00
0b72a48 to
69a5cb8
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces knip with fallow for
site/and makesmake lintfail on the complexity and dead code a PR introduces.pnpm lintrunsfallow dead-codeinstead ofknip, andlint:fixrunsfallow fix.site/.knip.jsoncis replaced bysite/.fallowrc.jsonc. The entry points and ignores carry over, and vendored code insrc/vendor/is excluded.typeAware.enabled). It confirms symbol use through the TypeScript checker, so class members that are passed by reference are not reported as unused, and no suppressions are needed. Itsprivate-type-leaksrule is off: fixing it meant exporting 436 types, most of them with no consumer.make lint/ts/new-code, part ofmake lint, runsfallow auditagainstTS_LINT_NEW_CODE_BASE, the same waylint/go/new-codechecks Go. The base defaults toorigin/main. The CIlintjob sets it toHEAD^1on PRs andHEADotherwise. The audit fails on new complexity (fallow's default thresholds: cyclomatic 20, cognitive 15) and on new dead code. It also fails when a change makes a function that is already over a threshold more complex (audit.worsened: "error"). New duplication only warns. Findings that already exist on the base do not fail.dpdmstays as it is.Stacked on #31690, which fixes the findings fallow reports that knip did not, and on #31689.
Evaluation and decision log
How often the gate would have blocked recent PRs
The audit ran again on the last 60 PRs that touched
site/src, with the default thresholds:ComputerRendererat cyclomatic 21 and cognitive 34,SubagentToolat 23/31,ProjectSkillEditorViewat 21/28, and an arrow function inQueuedMessagesListat 25/20.AgentChatInput, at cyclomatic 169.main, 395 functions are over the thresholds. They are inherited, so they do not block PRs.Run time
fallow dead-codetakes about 1 s when there is nothing to verify, and about 9 s when the type checker has candidates to check.fallow audittakes about 15 to 22 s with type-aware analysis, and about 5 to 8 s without it.Decisions
lintjob, the way knip did, not in its own workflow.typeAware.require: "complete"is not used. It fails on any member that has a doc comment or is accessed dynamically. If the checker cannot run, the class-member false positives come back as errors, sopnpm lintfails anyway.lintjob log.