0.8.0
Minor Changes
#750
c868dfdThanks @thevuong! - Newaudit reactsubcommand enforcing the repo's React import policy: flagsimport * as Reactand defaultReactimports (type-only included), plus implicitReact.*UMD-global type references — the variant bothtscand the linter accept silently throughexport as namespace Reactin@types/react. Configurable viaaudit.react.allowlistincodefast.config; exits non-zero on violations so it can gate CI. The shared workspace walk also skips.tanstackand.nitro, keeping TanStack/Nitro build caches out of every scan.#748
bde6d1bThanks @thevuong! -audit commentsgains asince-impossiblerule: an@sincetag naming a version above the owning package's current version (compared by SemVer precedence, prerelease-aware) now fails the audit, so a stamp minted from a wrongpackage.jsonversion dies in CI instead of fossilizing. The tag subcommand's version lookup moves intocore/workspaceso both subcommands share one implementation.
0.7.0
0.6.2
0.6.1
0.6.0
Minor Changes
#698
9b24461Thanks @thevuong! -codefast audit links— a read-only scan for markdown cross-references that resolve to nothing.It reports three things: a relative path that does not exist, an in-document anchor with no matching heading or
<a id>, and an anchor into another document that the target does not offer. The third is why the command exists — a wrong#fragmentfails silently in a browser by scrolling to the top, so unlike a broken path it leaves no trace to notice. Six such breakages had accumulated in this repo before anything looked.External URLs are skipped as somebody else's to verify, and so are links inside fenced code, which are examples rather than references. Exits non-zero when breakages remain, so it can gate CI; intentional exceptions go in
audit.links.allowlistas a bare target orrepo/relative/doc.md:target.The scan defaults to the repo root rather than a configured path. A link audit scoped to one package cannot see the cross-package references, which are the ones most likely to rot.
#727
c37da6fThanks @thevuong! - Teachcodefast audit commentsthree TSDoc checks: a{@link}whose target has no mention outside links (a rename that orphaned it), a@param/@typeParammissing the hyphen before its description, and a@sincethat is not the block's last tag. The link check resolves against the scanned tree, so it runs on full-tree scans only.#727
5118ee2Thanks @thevuong! - Enforce all-or-none@paramcoverage incodefast audit comments: a doc block naming any parameter must name every parameter of that signature — a partial list reads as complete. The check parses the declaration's own parameter list, skips destructured parameters it cannot match by name, and refuses to guess through wrapper calls likeuseCallback.#727
de713adThanks @thevuong! - Addcodefast audit comments, which reports section dividers that are not in the repo's one allowed form and rewrites them with--fix. A divider is a label and nothing else, so a rule-framed comment carrying prose is read as a doc block and left alone; everything the audit does report is mechanical, which makes a red run one--fixfrom green.#727
5118ee2Thanks @thevuong! - Run the official@microsoft/tsdocparser over every doc block incodefast audit comments, reporting each grammar diagnostic at its line — bare@words, unescaped braces, split code spans, indented fences — instead of approximating the grammar with regexes.@sinceis registered as the repo's one custom tag.#727
fba2a39Thanks @thevuong! - Teachcodefast audit commentstwo content checks alongside the divider form: a comment that points at a repo document (see …*.md) and JSDoc{type}payloads. Neither is--fix-able — the writer restates the invariant or lets the declaration carry the type — so the report says which defects--fixcovers.#727
5118ee2Thanks @thevuong! - Teachcodefast audit commentsto catch a doc block detached from its declaration by a//run — TSDoc binds to the nearest declaration, so the wedged comment silently orphans every tag above it.
0.5.0
Patch Changes
#646
0bbb11cThanks @thevuong! - Addmirror.<pkg>.exclude— a list of specifiers to leave out of the generatedpackage.json#exports, so a package's public surface is a decision rather than a consequence of itsdist/layout. Patterns are matched against the specifier as it would appear inexports(afterstrip), a trailing/*drops a whole subtree, and the root export is never excluded.Until now the only levers were
strip, extraexports, andpreserve: true— andpreserveskips the dist scan entirely, so curating a surface meant hand-editing the map that the tool exists to generate.excludecloses that gap.#529
ca90f1cThanks @thevuong! -codefast tagnow matchestag.skipPackagesentries as glob patterns (picomatch), so a single@apps/*entry skips every private app instead of listing each by name. This fixes the releasePublish packagesstep failing on@apps/start-demo(a private, version-less app the command tried to tag). The compile-patterns-then-match-any logic is now shared via a singlecreateAnyGlobMatcherhelper, also used by workspace-package discovery.#676
641e233Thanks @thevuong! - Collapse thetypesanddefaultlanes ofpackage.json#importsfrom fallback arrays to single strings.Node resolves an imports array by taking the first candidate it can parse, without checking that the file exists and without falling through — a specifier whose first candidate is missing throws
ERR_MODULE_NOT_FOUNDrather than trying the second../dist/*/index.jsand./dist/*/index.d.tscould therefore never be reached, so they read as a safety net that does not exist. Thesourcelane keeps its extension candidates, which onlytscand Vite read and both probe.
0.5.0-canary.9
Patch Changes
#676
641e233Thanks @thevuong! - Collapse thetypesanddefaultlanes ofpackage.json#importsfrom fallback arrays to single strings.Node resolves an imports array by taking the first candidate it can parse, without checking that the file exists and without falling through — a specifier whose first candidate is missing throws
ERR_MODULE_NOT_FOUNDrather than trying the second../dist/*/index.jsand./dist/*/index.d.tscould therefore never be reached, so they read as a safety net that does not exist. Thesourcelane keeps its extension candidates, which onlytscand Vite read and both probe.
0.5.0-canary.8
Patch Changes
#646
0bbb11cThanks @thevuong! - Addmirror.<pkg>.exclude— a list of specifiers to leave out of the generatedpackage.json#exports, so a package's public surface is a decision rather than a consequence of itsdist/layout. Patterns are matched against the specifier as it would appear inexports(afterstrip), a trailing/*drops a whole subtree, and the root export is never excluded.Until now the only levers were
strip, extraexports, andpreserve: true— andpreserveskips the dist scan entirely, so curating a surface meant hand-editing the map that the tool exists to generate.excludecloses that gap.
0.5.0-canary.7
0.5.0-canary.6
Patch Changes
- #529
ca90f1cThanks @thevuong! -codefast tagnow matchestag.skipPackagesentries as glob patterns (picomatch), so a single@apps/*entry skips every private app instead of listing each by name. This fixes the releasePublish packagesstep failing on@apps/start-demo(a private, version-less app the command tried to tag). The compile-patterns-then-match-any logic is now shared via a singlecreateAnyGlobMatcherhelper, also used by workspace-package discovery.
1.0.0-canary.7
1.0.0-canary.6
0.5.0-canary.5
0.5.0-canary.4
0.5.0-canary.3
0.5.0-canary.2
0.5.0-canary.1
0.5.0-canary.0
Patch Changes
- #529
ca90f1cThanks @thevuong! -codefast tagnow matchestag.skipPackagesentries as glob patterns (picomatch), so a single@apps/*entry skips every private app instead of listing each by name. This fixes the releasePublish packagesstep failing on@apps/start-demo(a private, version-less app the command tried to tag). The compile-patterns-then-match-any logic is now shared via a singlecreateAnyGlobMatcherhelper, also used by workspace-package discovery.
0.4.0
Patch Changes
ecc22c6Thanks @thevuong! - fix(tag): prevent trailing spaces on blank JSDoc continuation lines2397801Thanks @thevuong! - chore: align package config globsc6fdc41Thanks @thevuong! - Modernize internals: preferString.startsWithover anchored regexes in the Tailwind token classifier, use immutabletoSortedwhen ordering export specifiers and tag targets, and tighten workspace/mirror types without behavior changes.1945360Thanks @thevuong! - refactor(cli): reorganize imports for better modularity and claritye0e4aaeThanks @thevuong! - fix: support Node 26 mirror export verificationf79b333Thanks @thevuong! - feat(dev): enable source condition for zero-rebuild HMR in apps/docs6c3ac44Thanks @thevuong! - Normalize import statement order and package.json key order repo-wide via the new oxfmtsortImports/sortPackageJsonsettings — purely mechanical, no runtime behavior change.5c069f5Thanks @thevuong! - refactor(cli): clarify mirror export naming
0.4.0-canary.6
Showing the latest 20 releases; the full changelog on GitHub has 19 more releases.