Skip to content

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 12:35
· 20 commits to main since this release

One platform version — every image and every module inside it carries v0.5.0.

repository moved
core 4 commits
shell 4 commits
chat no change
mail no change
collab 1 commits

Modules

module was now
billing 0.5.16 0.5.19
chat 0.5.1 0.6.0
hr 0.23.7 0.24.2
inventory 0.5.3 0.6.1
mail 0.6.3 0.6.5
quire 0.17.1 0.18.1
tracker 0.12.1 0.13.1

billing 0.5.16 → 0.5.19

0.5.17 — release

Patch Changes

  • test: fail on a tenant table with no policy, not only an unforced one

0.5.18 — release

Patch Changes

  • build(deps): raise @kernhq/testing to ^0.1.14

0.5.19 — release

Patch Changes

  • build: force one @kernhq/kernel copy with pnpm.overrides

chat 0.5.1 → 0.6.0

0.5.2 — release

Patch Changes

  • build(deps): raise @kernhq/testing to ^0.1.14

0.5.3 — release

Patch Changes

  • build: force one @kernhq/kernel copy with pnpm.overrides

0.6.0 — release

Minor Changes

  • 33c85c8: Fill a workspace created with example content: five channels beside the two chat already makes, a
    conversation in each and a thread in #engineering.

    Two things this module has that the others do not, and both decide how the seeder is written.
    #general and #random exist before anybody has done anything — chat makes them on
    core.workspace.created — so a channel is found or made, never assumed either way: the two events
    arrive on different subjects with no ordering between them. And the "has anybody used this
    workspace?" guard counts messages somebody wrote, because creating a channel posts a system
    message announcing it, and a guard that counted those skipped every seed while reporting success.

hr 0.23.7 → 0.24.2

0.23.8 — release

Patch Changes

  • test: fail on a tenant table with no policy, not only an unforced one

0.23.9 — release

Patch Changes

  • build(deps): raise @kernhq/testing to ^0.1.14

0.23.10 — release

Patch Changes

  • build: force one @kernhq/kernel copy with pnpm.overrides

0.24.0 — release

Minor Changes

  • a3f4b5c: Fill a workspace created with example content: five departments, eight positions, twelve people with
    employments and managers, four leave types with a year's entitlement in the ledger, seven leave
    requests (four decided, three waiting) and a week of attendance for three of them.

    Nobody seeded here has a Kern account — a person is HR's noun and an account is core's, and inventing
    accounts would put strangers in the workspace's member list and mention picker. The one exception is
    a person for whoever asked for the demo, so the directory has a face they recognise.

    Written through the module's own services (changeEmployment, LedgerService.append,
    AttendanceService.record/recomputeDay) so the derived rows agree with the raw ones: a balance is
    the sum of the ledger and an attendance day is computed from punches, not written beside them.

0.24.1 — release

Patch Changes

  • 946bc52: Give the seeded leave types icons that exist.

    palmtree, thermometer, baby and circle-minus are all real lucide icons and none of them is
    in @kernhq/ui's registry, which is a hand-maintained subset — so each rendered as a blank square
    with nothing thrown. scripts/check-icons.mjs is the only thing that sees this, and it is the
    reason it exists.

0.24.2 — release

Patch Changes

  • a148c63: Scope the demo seeder's emptiness guard to the workspace.

    The guard left workspace_id to row-level security. The transaction is bound to the workspace, so
    on a correctly-configured instance RLS scopes it — and on any database whose owner can bypass a
    policy it does not, so the guard saw the previous workspace's rows and reported an empty workspace
    as used. Measured on a development database: the first workspace filled, and every one after it was
    created empty while the log said "workspace not empty". The predicate is written out now, and each
    seeder's test seeds a second workspace in the same database, which is what reproduces it.

inventory 0.5.3 → 0.6.1

0.5.4 — release

Patch Changes

  • test: fail on a tenant table with no policy, not only an unforced one

0.5.5 — release

Patch Changes

  • dff8780: Bind the '*' sentinel for the registry read the nightly sweeps start from

    mod_inventory.workspaces is the table both nightly sweeps enumerate, and it was readable by a
    transaction with no workspace bound — so any code path that reached it having forgotten to bind
    got rows back rather than a refusal, silently. module-chat and module-mail answer the same
    question with a sentinel the caller types on purpose, and 0010_workspace_registry_all_binding.sql
    brings this module into line: a for select policy admitting app.workspace_id = '*', and
    activeWorkspaces binds it.

    Append-only, and both policies stand for one release. The previous version enumerates this table
    unbound, and a rolling deploy runs two adjacent releases against one schema — so dropping the
    unbound policy now would hand the image being replaced zero rows and the silent do-nothing sweep it
    was written to fix. The migration header names the release that may drop it.

0.5.6 — release

Patch Changes

  • docs(rls): drop the version numbers from the 0010 comments

0.5.7 — release

Patch Changes

  • build(deps): raise @kernhq/testing to ^0.1.14

0.5.8 — release

Patch Changes

  • build: force one @kernhq/kernel copy with pnpm.overrides

0.6.0 — release

Minor Changes

  • 5bda66a: Fill a workspace created with example content: forty items across six categories, three workspace
    fields, three handovers and two repairs.

    The categories are found rather than created — onWorkspaceEnabled already puts five there, and
    CategoryService.create refuses a duplicate name with a conflict that would abort the whole seed on
    its first statement. Custody goes through CustodyService.assign, so a handed-over item has the
    period behind it that its own history screen reads, rather than a column somebody set.

0.6.1 — release

Patch Changes

  • 4c3e235: Scope the demo seeder's emptiness guard to the workspace.

    The guard left workspace_id to row-level security. The transaction is bound to the workspace, so
    on a correctly-configured instance RLS scopes it — and on any database whose owner can bypass a
    policy it does not, so the guard saw the previous workspace's rows and reported an empty workspace
    as used. Measured on a development database: the first workspace filled, and every one after it was
    created empty while the log said "workspace not empty". The predicate is written out now, and each
    seeder's test seeds a second workspace in the same database, which is what reproduces it.

mail 0.6.3 → 0.6.5

0.6.4 — release

Patch Changes

  • build(deps): raise @kernhq/testing to ^0.1.14

0.6.5 — release

Patch Changes

  • build: force one @kernhq/kernel copy with pnpm.overrides

quire 0.17.1 → 0.18.1

0.17.2 — release

Patch Changes

  • test: ask the RLS question in the shape the other modules ask it

0.17.3 — release

Patch Changes

  • build(deps): raise @kernhq/testing to ^0.1.14

0.17.4 — release

Patch Changes

  • build: force one @kernhq/kernel copy with pnpm.overrides

0.18.0 — release

Minor Changes

  • c0951f3: Fill a workspace created with example content: three spaces (handbook, engineering, product) with a
    nested page tree, real prose in every page, and a roadmap database with its own properties and rows.

    A page's body is a CRDT the collab service holds, not a column here, so each one is encoded as a Y
    update, handed to collab.document.replace and mirrored onto pages.text — the same three steps
    templates.ts performs, so a seeded page is findable before anybody opens it.

0.18.1 — release

Patch Changes

  • d230114: Scope the demo seeder's emptiness guard to the workspace.

    The guard left workspace_id to row-level security. The transaction is bound to the workspace, so
    on a correctly-configured instance RLS scopes it — and on any database whose owner can bypass a
    policy it does not, so the guard saw the previous workspace's rows and reported an empty workspace
    as used. Measured on a development database: the first workspace filled, and every one after it was
    created empty while the log said "workspace not empty". The predicate is written out now, and each
    seeder's test seeds a second workspace in the same database, which is what reproduces it.

tracker 0.12.1 → 0.13.1

0.12.2 — release

Patch Changes

  • test: fail on a tenant table with no policy, not only an unforced one

0.12.3 — release

Patch Changes

  • build(deps): raise @kernhq/testing to ^0.1.14

0.12.4 — release

Patch Changes

  • build: force one @kernhq/kernel copy with pnpm.overrides

0.13.0 — release

Minor Changes

  • bccf578: Fill a workspace created with example content: three projects, twenty-five issues across the board,
    labels, components, a version, a milestone and four cycles.

    Written through the module's own services rather than as inserts, so the issues have keys from the
    project counter, ranks, the template's workflow and the status history the cycle report reads. Two
    things it cost a run to learn, both recorded in the file: StatusCategory is
    backlog | todo | in_progress | done | cancelled | triage and an invented name moves nothing while
    reporting success, and the support project uses the simple template because the support one
    installs a workspace-level impact field marked required — which then refuses every issue in every
    other project in the workspace.

0.13.1 — release

Patch Changes

  • bea0aec: Scope the demo seeder's emptiness guard to the workspace.

    The guard left workspace_id to row-level security. The transaction is bound to the workspace, so
    on a correctly-configured instance RLS scopes it — and on any database whose owner can bypass a
    policy it does not, so the guard saw the previous workspace's rows and reported an empty workspace
    as used. Measured on a development database: the first workspace filled, and every one after it was
    created empty while the log said "workspace not empty". The predicate is written out now, and each
    seeder's test seeds a second workspace in the same database, which is what reproduces it.

Services

core

Feat

  • feat: ask every module to fill a workspace created with seedDemo

Fix

  • fix(workspaces): reserve the livekit slug the Caddyfiles route away

Docs

  • docs(updates): drop the menu path from the update notifications

Test

  • test(core): assert the schema's RLS exceptions against the catalogue

compare v0.4.0...v0.5.0

shell

Feat

  • feat(settings): move instance settings under Settings on self-host
  • feat: offer example content when a workspace is created

Fix

  • fix(shell): close the workspace switcher when you click outside it

Docs

  • docs: note why the workspace switcher stayed open

compare v0.4.0...v0.5.0

collab

Other

  • build: force one @kernhq/kernel copy with pnpm.overrides

compare v0.4.0...v0.5.0