Skip to content
codefastlabs

Command Palette

Search for a command to run...

v0.8.0· Changelog

@codefast/cli

0.8.0

Minor Changes

  • #750 c868dfd Thanks @thevuong! - New audit react subcommand enforcing the repo's React import policy: flags import * as React and default React imports (type-only included), plus implicit React.* UMD-global type references — the variant both tsc and the linter accept silently through export as namespace React in @types/react. Configurable via audit.react.allowlist in codefast.config; exits non-zero on violations so it can gate CI. The shared workspace walk also skips .tanstack and .nitro, keeping TanStack/Nitro build caches out of every scan.

  • #748 bde6d1b Thanks @thevuong! - audit comments gains a since-impossible rule: an @since tag 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 wrong package.json version dies in CI instead of fossilizing. The tag subcommand's version lookup moves into core/workspace so both subcommands share one implementation.

0.7.0

0.6.2

0.6.1

0.6.0

Minor Changes

  • #698 9b24461 Thanks @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 #fragment fails 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.allowlist as a bare target or repo/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 c37da6f Thanks @thevuong! - Teach codefast audit comments three TSDoc checks: a {@link} whose target has no mention outside links (a rename that orphaned it), a @param/@typeParam missing the hyphen before its description, and a @since that is not the block's last tag. The link check resolves against the scanned tree, so it runs on full-tree scans only.

  • #727 5118ee2 Thanks @thevuong! - Enforce all-or-none @param coverage in codefast 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 like useCallback.

  • #727 de713ad Thanks @thevuong! - Add codefast 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 --fix from green.

  • #727 5118ee2 Thanks @thevuong! - Run the official @microsoft/tsdoc parser over every doc block in codefast 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. @since is registered as the repo's one custom tag.

  • #727 fba2a39 Thanks @thevuong! - Teach codefast audit comments two 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 --fix covers.

  • #727 5118ee2 Thanks @thevuong! - Teach codefast audit comments to 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 0bbb11c Thanks @thevuong! - Add mirror.<pkg>.exclude — a list of specifiers to leave out of the generated package.json#exports, so a package's public surface is a decision rather than a consequence of its dist/ layout. Patterns are matched against the specifier as it would appear in exports (after strip), a trailing /* drops a whole subtree, and the root export is never excluded.

    Until now the only levers were strip, extra exports, and preserve: true — and preserve skips the dist scan entirely, so curating a surface meant hand-editing the map that the tool exists to generate. exclude closes that gap.

  • #529 ca90f1c Thanks @thevuong! - codefast tag now matches tag.skipPackages entries as glob patterns (picomatch), so a single @apps/* entry skips every private app instead of listing each by name. This fixes the release Publish packages step 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 single createAnyGlobMatcher helper, also used by workspace-package discovery.

  • #676 641e233 Thanks @thevuong! - Collapse the types and default lanes of package.json#imports from 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_FOUND rather than trying the second. ./dist/*/index.js and ./dist/*/index.d.ts could therefore never be reached, so they read as a safety net that does not exist. The source lane keeps its extension candidates, which only tsc and Vite read and both probe.

0.5.0-canary.9

Patch Changes

  • #676 641e233 Thanks @thevuong! - Collapse the types and default lanes of package.json#imports from 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_FOUND rather than trying the second. ./dist/*/index.js and ./dist/*/index.d.ts could therefore never be reached, so they read as a safety net that does not exist. The source lane keeps its extension candidates, which only tsc and Vite read and both probe.

0.5.0-canary.8

Patch Changes

  • #646 0bbb11c Thanks @thevuong! - Add mirror.<pkg>.exclude — a list of specifiers to leave out of the generated package.json#exports, so a package's public surface is a decision rather than a consequence of its dist/ layout. Patterns are matched against the specifier as it would appear in exports (after strip), a trailing /* drops a whole subtree, and the root export is never excluded.

    Until now the only levers were strip, extra exports, and preserve: true — and preserve skips the dist scan entirely, so curating a surface meant hand-editing the map that the tool exists to generate. exclude closes that gap.

0.5.0-canary.7

0.5.0-canary.6

Patch Changes

  • #529 ca90f1c Thanks @thevuong! - codefast tag now matches tag.skipPackages entries as glob patterns (picomatch), so a single @apps/* entry skips every private app instead of listing each by name. This fixes the release Publish packages step 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 single createAnyGlobMatcher helper, 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 ca90f1c Thanks @thevuong! - codefast tag now matches tag.skipPackages entries as glob patterns (picomatch), so a single @apps/* entry skips every private app instead of listing each by name. This fixes the release Publish packages step 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 single createAnyGlobMatcher helper, also used by workspace-package discovery.

0.4.0

Patch Changes

  • ecc22c6 Thanks @thevuong! - fix(tag): prevent trailing spaces on blank JSDoc continuation lines

  • 2397801 Thanks @thevuong! - chore: align package config globs

  • c6fdc41 Thanks @thevuong! - Modernize internals: prefer String.startsWith over anchored regexes in the Tailwind token classifier, use immutable toSorted when ordering export specifiers and tag targets, and tighten workspace/mirror types without behavior changes.

  • 1945360 Thanks @thevuong! - refactor(cli): reorganize imports for better modularity and clarity

  • e0e4aae Thanks @thevuong! - fix: support Node 26 mirror export verification

  • f79b333 Thanks @thevuong! - feat(dev): enable source condition for zero-rebuild HMR in apps/docs

  • 6c3ac44 Thanks @thevuong! - Normalize import statement order and package.json key order repo-wide via the new oxfmt sortImports/sortPackageJson settings — purely mechanical, no runtime behavior change.

  • 5c069f5 Thanks @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.