Version Packages - #52
Merged
Merged
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 6, 2026 03:17
4b592d7 to
d1ff7fc
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 6, 2026 11:43
d1ff7fc to
1e203b7
Compare
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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@ingram-tech/nk-dev@0.16.0
Minor Changes
314d5c5: New oxlint rule
nextkit/base-ui-native-button(error): a Base UI button-likecomponent rendered as something other than a
<button>needsnativeButton={false}.useButtondefaults the prop to true, sorender={<Link />}on aButtonor a*Triggermakes Base UI skip thekeyboard, role and form-participation shims the non-native element needs, and
log an error at runtime. The types cannot see it. The rule only inspects a JSX
element literal in
render, so a variable or call falls out for free, and itis inert on projects that do not depend on
@base-ui/react.b8b2dae:
nk checkresolves the tailwind@sourcepaths in the site's stylesheets andfails on one that matches nothing. Tailwind v4 resolves
@sourceagainst theCSS file that carries it and treats a path matching no files as an empty scan,
so a path one directory short silently drops every utility class only those
files use: in a monorepo that means the shared component package's buttons,
badges, tabs and sheets render unstyled in production. Nothing else catches it,
because nothing else in the toolchain reads CSS: oxlint and tsc do not parse
it, knip walks the import graph, and
next buildexits 0 with a smallerstylesheet. Globbed sources are checked at their literal prefix
(
../packages/*/srcis checked as../packages),@source inline(...)isignored, and a site with no
@sourceis a no-op.The gate also checks the other half of the same failure: a workspace
dependency whose components write class names and that no
@sourcescans atall. Automatic source detection starts at the site and never reaches a sibling
package, so a stylesheet that simply never names the shared component library
drops its classes exactly as a misspelled path does, with even less to notice.
Linked workspace members are found through the
node_modulessymlink, so itworks under bun, npm and pnpm workspaces; published dependencies, packages that
write no class names, and sites with no tailwind entry stylesheet are skipped.
c291cfe: New oxlint rule
nextkit/no-server-env-in-client(error): a"use client"file may read only
NEXT_PUBLIC_*andNODE_ENV. Next inlines nothing elseinto client bundles, so any other
process.env.Xread from a client componentis
undefinedin the browser while working in dev, in tests, and in everyserver render of the same module — the feature silently never happens. An
allowlist rather than a list of secret names, because such a list goes stale
the moment someone adds an integration and the miss is invisible. The fix is
to read the value on the server and pass it down, not to rename it
NEXT_PUBLIC_, which publishes it to every visitor.c8b0901: New oxlint rule
nextkit/no-sql-array-cast(error): no${value}::type[]in adrizzle
sqltemplate. A template interpolation is one bound parameter anddrizzle expands a JS array into several, so the cast lands on a record and
Postgres fails at run time with "cannot cast type record to uuid[]". Types,
lint and build are all happy until the query reaches the server. Build the
array with
array[...]andsql.joininstead. Casting a column to an arraytype is legitimate and syntactically identical, so that case takes a justified
disable comment.
da249da: New oxlint rule
nextkit/no-unvalidated-request-body(error), enforcing theguide's hard rule in the place it binds hardest: a route handler
(
app/**/route.ts) may not assert a type on the body it just parsed.Request.json()is typedPromise<any>, so both(await req.json()) as Bodyand
const body: Body = await req.json()type-check while claiming somethingabout a payload the caller controls, and the first symptom is a 500 or a row
written from a body nobody checked. Parse it with a schema instead;
as unknownon the way into the parser is still fine. Casting a response youfetched is a different claim and the rule says nothing about it.
Patch Changes
nk doctorno longer flags a hoisted-workspace member whose.oxlintrc.jsonextends
../node_modules/@ingram-tech/nk-dev/oxlintrc.json. oxlint resolvesextendsrelative to the config file, so that is the only path that works whennode_moduleslives at the workspace root; the check matched the literal./node_modules/…string and--fixrewrote the config to a path that doesnot exist, breaking
nk lint. Both now accept any prefix that reaches thefile, and
--fixwrites the one that resolves from the site folder.nk type-checkrather thanbare
tsc, and explains that atscerror inside.next/(a deleted route ora killed
next devleaving.next/dev/types/validator.tsstale) is generatedoutput that
nk type-checkrecovers from on its own. The README describesthat recovery and
nk cleaninstead of summarising the command asnext typegen && tsc --noEmit.