Skip to content

feat(objectql): duplicate a writable base — ADR-0070 D4 - #2299

Merged
os-zhuang merged 1 commit into
mainfrom
feat/adr-0070-d4-duplicate-package
Jun 24, 2026
Merged

feat(objectql): duplicate a writable base — ADR-0070 D4#2299
os-zhuang merged 1 commit into
mainfrom
feat/adr-0070-d4-duplicate-package

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

What

Adds the missing piece of ADR-0070 D4 (package = lifecycle unit). Delete-cascade (protocol.deletePackage + ?keepData) and export (GET /packages/:id/export) already shipped; this adds duplicate:

  • protocol.duplicatePackage — clones every ACTIVE item a base owns into a NEW package, re-namespacing object names (the blueprint prefixes object names with the base namespace, e.g. iojn_repair_ticket; sys_metadata keys on (type,name,org), so a same-name copy would collide with the source) and rewriting every intra-package reference (lookup reference, view object, expressions, …) to the new names via a longest-first, identifier-boundary replace (so iojn_task never corrupts iojn_task_log).
  • POST /packages/:id/duplicate (body { targetPackageId, targetName?, targetNamespace? }).

Tests

@objectstack/objectql: 708 green incl. new duplicatePackage tests — re-namespacing, lookup-reference + view-object rewrite, and boundary-safety; tsc clean. (The runtime endpoint mirrors the existing revert/rollback package routes.)

Follow-up

objectui PackageDetailSheet "Duplicate" button (wires to this endpoint) — small UI add. The keepData schema-vs-data delete choice could also be surfaced in the UI.

Completes ADR-0070 D4. (D5 migration / D6 framing remain.)

🤖 Generated with Claude Code

… reference rewrite (ADR-0070 D4)
protocol.duplicatePackage clones a base's ACTIVE items into a new package,
re-namespacing object names (avoids the (type,name) collision) and rewriting
intra-package references (lookup reference / view object / expressions) via a
longest-first identifier-boundary replace. + POST /packages/:id/duplicate. +tests
(re-namespacing + reference rewrite + boundary-safety). Completes D4 (delete +
export already shipped).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercelBot commented Jun 24, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
specBuildingBuildingPreview, CommentJun 24, 2026 3:55pm

Request Review

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests tooling size/m labels Jun 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/objectql, @objectstack/runtime.

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

  • content/docs/concepts/cloud-artifact-api.mdx(via packages/runtime)
  • content/docs/concepts/core/services.mdx(via @objectstack/objectql)
  • content/docs/concepts/implementation-status.mdx(via @objectstack/objectql, @objectstack/runtime)
  • content/docs/concepts/metadata-lifecycle.mdx(via @objectstack/objectql)
  • content/docs/concepts/north-star.mdx(via packages/runtime)
  • content/docs/concepts/packages.mdx(via @objectstack/objectql, @objectstack/runtime)
  • content/docs/guides/api-reference.mdx(via @objectstack/runtime)
  • content/docs/guides/authentication.mdx(via @objectstack/objectql, @objectstack/runtime)
  • content/docs/guides/cloud-deployment.mdx(via @objectstack/runtime)
  • content/docs/guides/deployment-vercel.mdx(via @objectstack/objectql, @objectstack/runtime)
  • content/docs/guides/driver-configuration.mdx(via @objectstack/runtime)
  • content/docs/guides/formula.mdx(via packages/objectql)
  • content/docs/guides/hook-bodies.mdx(via @objectstack/runtime)
  • content/docs/guides/kernel-services.mdx(via @objectstack/objectql)
  • content/docs/guides/objectql-migration.mdx(via @objectstack/objectql)
  • content/docs/guides/packages.mdx(via @objectstack/objectql, @objectstack/runtime)
  • content/docs/guides/plugin-chatbot-integration.mdx(via @objectstack/runtime)
  • content/docs/guides/plugins.mdx(via @objectstack/objectql)
  • content/docs/guides/production-readiness.mdx(via @objectstack/runtime)
  • content/docs/guides/single-project-mode.mdx(via @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/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.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/mteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@os-zhuang