Releases: KernAIO/module-template
Release list
v0.3.3
v0.3.2
0.3.2
Patch Changes
- chore: check the packed tarball can resolve its own imports
v0.3.1
0.3.1
Patch Changes
-
be1ffc9: Scope the example seeder's guard to the workspace, and import
eq.The guard left
workspace_idto row-level security, which is exactly the mistake the template
should not be teaching: the transaction is bound to the workspace, so RLS scopes it on a
correctly-configured instance and silently does not on one whose owner can bypass a policy. Every
first-party seeder had the same defect and every workspace after the first was created empty.
v0.3.0
0.3.0
Minor Changes
-
2832ea0: Show how a module fills a workspace created with example content.
demo: { seed }is the extension point; the kernel subscribes it for you. The example is deliberately
two rows and a guard, because the guard is the part a module author has to get right: delivery is
at-least-once, so a seeder can be asked twice for one workspace, and the check is "is this workspace
empty?" rather than a marker somebody has to maintain.
v0.2.17
0.2.17
Patch Changes
- build: force one @kernhq/kernel copy with pnpm.overrides
v0.2.16
0.2.16
Patch Changes
-
89feda5: Resolve a single
@kernhq/kernelcopyThe template pulled two kernels into a consumer's tree:
@kernhq/testing@0.1.12declared a
@kernhq/kernel: ^0.9.0it never imported, and@kernhq/ui@0.14.0depends on^0.9.0too. With
the module's own kernel at^0.10.3, both floors are raised so everything resolves one copy —
@kernhq/testingto^0.1.14, which dropped the phantom dependency, and@kernhq/uito^0.14.4,
which depends on^0.10.2.Two structurally identical declarations of
ServerModuleare not assignable to each other, so a
duplicate kernel is a type error in whatever hosts the module — and it is invisible in the umbrella
workspace, which pins one copy regardless.
v0.2.15
0.2.15
Patch Changes
-
b15e900: Require
@kernhq/kernel^0.10.3, whoserlsPolicySqlemits the policy droprlsPolicySqlomitted thedrop policy if existsbefore itscreate policyuntil
@kernhq/kernel@0.10.3, so an author following the documented path got a policy that could not be
applied twice. The kernel is fixed; this raises the floor so a fresh checkout of the template
resolves a kernel where the helper andmigrations/0001_rls.sqlactually agree.The floor is what makes it true rather than the range alone:
degitcopiespnpm-lock.yaml, and
pnpm does not re-resolve a version that still satisfies its range — so^0.10.0kept installing
0.10.0. The migration comment and README step 5 now say the helper emits all four statements, dated
to the kernel version that made it so.
v0.2.14
0.2.14
Patch Changes
-
af8faeb: Make
0001_rls.sqlreplayable, and ship the migration test that proves itcreate policyhas noif not exists, so applying the migration folder a second time answered
policy "notes_ws_isolation" for table "notes" already exists. A module's migrations are the first
thing the kernel runs, so that is a host service that never binds its port — not a broken feature.
The policy is now preceded bydrop policy if exists, as it is in every first-party module.src/server/migrations.test.tsis new and ships in the tarball. It applies the folder to a database
created from nothing, applies it again, and asks the Postgres catalogue which tables carrying
workspace_idare actually secured — so a tenant table added without a policy fails by name rather
than being silently readable. It needs aDATABASE_URLit can create databases from; CI already
starts one.
v0.2.13
0.2.13
Patch Changes
-
fe17fa3: The client module documents
overlays, the contribution a navigation does not destroy.Everything else the template declares — the route, the sidebar, the widget — lives inside a page,
so opening something else unmounts it.@kernhq/kernel@0.10.2addsoverlaysfor the cases where
that is wrong: something in progress, an upload, a countdown. The example is commented out, because
a module with nothing to keep should ship no overlay rather than an empty one, and it names the two
rules that are easy to get wrong — an overlay is mounted on every page of the workspace, so it must
draw nothing until it has something to say, and it is handed no location, because the route it was
mounted on is not the route the person is on now.
v0.2.12
0.2.12
Patch Changes
- 1e80aaa: Peer
@kernhq/contracts@^0.8.0, which addsarchivedAttoWorkspaceSummary. A caret on 0.x does
not cross a minor, so the previous^0.7.0could not reach it. The template is what a third party
starts a module from, so a stale peer here is the first thing they would hit.