Extract a shared Product
Use this guide when two teams need the same Product data. Give the data one shared owner. Check both teams before you change an install.
Before you start
Record the current owner, exact release and proposed consumers. Preserve source and install evidence. Name the records, references and access rules that must survive. Product composition distinguishes code reuse from shared installed ownership.
Record the boundary
Keep the shared Product boundary in a small table in the repository design notes. Name the capability, owner, consumers and evidence for sharing. Revise the table as work changes. A guessed future need does not require a foundation today.
Wrap the Block
Reuse the existing Block through defineProduct({ root: block, ... }). Supply a real publishing identity and a fresh release coordinate before publication. Keep the exact source origin. Carry required configuration, dependencies, framework mappings and measures with the Block.
Keep consumer-specific links with each consumer. Meeting and participation can move into Shared Context. Meeting-to-Project stays with Projects. Meeting-to-sales context stays with Sales. The foundation needs no dependency back to either consumer.
Update consumers
Replace the former owning contribution with an exact Product dependency. Update both consumers to use that owner. Remove duplicate definitions. Preserve stable entity and relationship identities unless an explicit data migration requires a change.
Keep inference outside the foundation when it reads a consumer's records. Check the full input set before moving a Pipeline. A path that reads sales records must not create a dependency cycle through Projects.
Readdress app artifacts
Hosted app claim-check keys name the containing Product and release. Moving an app Block can change those addresses while its source and bundle hashes stay the same. Stage the exact bytes under the final owner's addresses through the normal publisher. Old-owner keys can fail the installer's scope check.
Qualify the transfer
Compile the shared owner and both consumers. Check one definition owner, exact dependency digests and an acyclic closure. Check Actions, links, mappings, measures and required configuration against the moved definitions.
Source compilation does not transfer installed ownership. Use the supported install and upgrade path to check existing records, references, permissions and updates. Keep the reviewed predecessor and changed plan distinct. Publish and apply only with the required access and approval.
When it fails
workspace.closure.conflict
The consumers disagree on an exact dependency. Pin a coherent shared release and compile again.
plan_hash_changed
A recorded local plan differs from source. Regenerate the plan and review the change. Do not silently promote a held extension onto another baseline.
Next steps
For a shared Product, Build, install, and recover covers the install lifecycle. Workspace repositories covers source placement.