Skip to content

feat(packages): PATCH /packages/:id to edit a package manifest#2646

Merged
os-zhuang merged 2 commits into
mainfrom
claude/package-manifest-edit
Jul 5, 2026
Merged

feat(packages): PATCH /packages/:id to edit a package manifest#2646
os-zhuang merged 2 commits into
mainfrom
claude/package-manifest-edit

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Problem

Packages can be created (POST /packages) and acted on via lifecycle sub-routes (enable/disable/publish/revert/duplicate/delete/…), but a runtime/base package's manifestname, description, version — could never be edited after creation. The ObjectUI Studio "Package info & settings" sheet has no edit affordance because there was no endpoint behind it.

Change — the edit path, end to end

  • SchemaRegistry.updatePackageManifest(id, patch) (objectql) — merges name / description / version into the in-memory manifest, preserving lifecycle state (enabled / status / installedAt). It's a metadata edit, not a reinstall, so a disabled package stays disabled. Only fields present in the patch are overwritten.
  • protocol.updatePackage({ packageId, patch }) (metadata-protocol) — merges via the registry, then re-persists the merged manifest to sys_packages (best-effort, non-fatal — same contract as installPackage) so the edit survives a restart.
  • PATCH /packages/:id in handlePackages (runtime) — a partial patch: accepts the fields flat or under a { manifest } wrapper, validates a non-empty name and a semantic version, 404s an unknown package, and falls back to the registry when no protocol service is present.

id / scope / type remain identity/structure and are not editable here.

Tests

  • registry.test.ts — merge preserves lifecycle (disabled stays disabled), partial-patch only overwrites sent fields, unknown id → undefined.
  • http-dispatcher.test.ts — PATCH via protocol.updatePackage (trims name, forwards only sent fields), { manifest } wrapper, empty patch → 400, non-semantic version → 400, registry fallback → 404 for an unknown package.
  • @objectstack/objectql, @objectstack/metadata-protocol, @objectstack/runtime build clean (tsup DTS = full typecheck).

Note: one unrelated pre-existing test (POST /packages/:id/publish-drafts applies published seed rows) fails in this sandbox with or without this change — it needs a real DB for seed application. All other dispatcher + registry tests pass.

Companion

Consumed by ObjectUI Studio (objectstack-ai/objectui#2297 merged the surrounding package management; the edit form wiring is a follow-up there).

🤖 Generated with Claude Code

https://claude.ai/code/session_01DxVTSDSXrdnfqHNBkHB6yi


Generated by Claude Code

Packages could be created (POST /packages) and acted on via lifecycle
sub-routes, but a runtime/base package's manifest — name, description,
version — could never be edited after creation. The Studio "Package
info & settings" sheet had no edit affordance because there was no
endpoint behind it.

Add the edit path end to end:

- `SchemaRegistry.updatePackageManifest(id, patch)` — merges name /
  description / version into the in-memory manifest, preserving lifecycle
  state (enabled / status / installedAt). It is a metadata edit, not a
  reinstall, so a disabled package stays disabled.
- `protocol.updatePackage({ packageId, patch })` — merges via the
  registry then re-persists the manifest to `sys_packages` (best-effort,
  non-fatal, matching installPackage) so the edit survives a restart.
- `PATCH /packages/:id` in `handlePackages` — partial patch (only the
  sent fields change), accepts flat or `{ manifest }`-wrapped bodies,
  validates a non-empty name and semantic version, 404s an unknown
  package, and falls back to the registry when no protocol service.

`id` / `scope` / `type` remain identity/structure and are not editable
here.

Tests: registry merge (preserve lifecycle, partial patch, unknown id);
dispatcher PATCH (protocol path, manifest wrapper, empty-patch 400,
bad-version 400, registry-fallback 404).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DxVTSDSXrdnfqHNBkHB6yi
@vercel

vercel Bot commented Jul 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 5, 2026 4:41pm

Request Review

@github-actions

github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 3 package(s): @objectstack/metadata-protocol, @objectstack/objectql, @objectstack/runtime.

25 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/chatbot-integration.mdx (via @objectstack/runtime)
  • content/docs/api/index.mdx (via @objectstack/runtime)
  • content/docs/api/wire-format.mdx (via @objectstack/runtime)
  • content/docs/automation/hook-bodies.mdx (via @objectstack/runtime)
  • content/docs/concepts/metadata-lifecycle.mdx (via @objectstack/metadata-protocol, @objectstack/objectql)
  • content/docs/concepts/north-star.mdx (via packages/runtime)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/runtime)
  • content/docs/data-modeling/formulas.mdx (via packages/objectql)
  • content/docs/deployment/cloud-artifact-api.mdx (via packages/runtime)
  • content/docs/deployment/index.mdx (via @objectstack/runtime)
  • content/docs/deployment/migration-from-objectql.mdx (via @objectstack/objectql)
  • content/docs/deployment/production-readiness.mdx (via @objectstack/runtime)
  • content/docs/deployment/single-project-mode.mdx (via @objectstack/runtime)
  • content/docs/deployment/vercel.mdx (via @objectstack/objectql, @objectstack/runtime)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/objectql)
  • content/docs/kernel/services.mdx (via @objectstack/objectql)
  • content/docs/permissions/authentication.mdx (via @objectstack/objectql, @objectstack/runtime)
  • content/docs/plugins/index.mdx (via @objectstack/objectql)
  • content/docs/plugins/packages.mdx (via @objectstack/objectql, @objectstack/runtime)
  • content/docs/protocol/objectos/http-protocol.mdx (via @objectstack/runtime)
  • content/docs/protocol/objectos/index.mdx (via @objectstack/objectql, @objectstack/runtime)
  • content/docs/protocol/objectos/lifecycle.mdx (via @objectstack/runtime)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/objectql)
  • content/docs/releases/implementation-status.mdx (via @objectstack/objectql, @objectstack/runtime)
  • content/docs/releases/v9.mdx (via @objectstack/objectql)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling labels Jul 5, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review July 5, 2026 23:19
@os-zhuang
os-zhuang merged commit 1dd5dfd into main Jul 5, 2026
16 checks passed
@os-zhuang
os-zhuang deleted the claude/package-manifest-edit branch July 5, 2026 23:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants