Feat v0.5.4 package updates #34

Merged
xcaliber merged 7 commits from feat/v0.5.4-package-updates into main 2026-03-30 19:31:46 +00:00

7 Commits

Author SHA1 Message Date
3626104abc Bump version to v0.5.4, update changelog and roadmap
All checks were successful
CI/CD / detect-changes (pull_request) Successful in 4s
CI/CD / test-frontend (pull_request) Successful in 5s
CI/CD / test-go-pg (pull_request) Successful in 2m43s
CI/CD / test-sqlite (pull_request) Successful in 2m52s
CI/CD / build-and-deploy (pull_request) Successful in 1m6s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 19:10:04 +00:00
91fb07b7e5 Add package update/export tests and mark v0.5.4 done in roadmap
14 new tests: version bump, rejection cases (same/older/core/type/id
mismatch), schema add column/table with data preservation, settings
merge, export with valid zip, default allowlist, wildcard allowlist.
Existing bundled tests updated for curated default behavior.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 18:39:24 +00:00
f1f59fde57 Wire update/export routes, SDK methods, and admin UI button
Routes: POST /packages/:id/update, GET /packages/:id/export
SDK: update (file upload), exportPkg (URL for window.open)
Admin UI: Update button on non-core package cards with confirm dialog

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 18:33:43 +00:00
b8cd8832ff Add UpdatePackage and ExportPackage handlers
UpdatePackage (POST /packages/:id/update) validates semver bump, applies
additive schema migration, merges settings (new keys with defaults,
existing preserved), replaces assets, and re-syncs permissions/triggers.

ExportPackage (GET /packages/:id/export) streams the installed package
as a .pkg ZIP archive containing manifest.json and all assets. Completes
the manual rollback story: export before update, re-install old .pkg if
needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 18:32:50 +00:00
ecaeb8bec4 Add additive schema migration for package updates
ListExtColumns introspects existing columns via PRAGMA (SQLite) or
information_schema (Postgres). MigrateExtTables diffs manifest db_tables
against existing schema: creates new tables, adds new columns via ALTER
TABLE, applies indexes idempotently. No destructive changes — columns
present in DB but absent from manifest are preserved.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 18:31:14 +00:00
5678cef42d Add semver parsing and comparison for package version validation
ParseSemver handles major.minor.patch with optional prerelease suffix.
Compare follows semver spec: prerelease < release at same version.
13 test cases covering parse, compare, and string formatting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 18:30:30 +00:00
0a6879b6ae Curate default bundled packages to core set of 8
Previously all 23 bundled .pkg archives auto-installed on first boot.
Now only the curated default set installs: notes, chat-core, workflow-chat,
dashboard, and 4 demo workflows. Other packages still ship in the image
and can be enabled via BUNDLED_PACKAGES env var (or "*" for all).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 18:29:28 +00:00