"Extend the canonical layer or extract one; coupled copies are not reuse."
Separate need from ownership
Navigation, theming, search affordances, share surfaces, and family chrome should feel related across apps. The way to get that coherence is a canonical shared package, not copied components that begin identical and drift separately.
Shape the crossing
Import stable primitives and extend them through documented props or extracted canonical layers. Inkwell supplies its passage, actions, and product-specific state. Shared chrome remains owned and updated in one place.
The duplication temptation
Copy-pasting a header buys local speed and fleet-wide inconsistency. Editing the shared package mid-product work without syncing siblings creates stale bundles. Boundaries require both reuse and a deliberate rollout discipline.
Let requests and references cross
Audit “SiblingKit Owns the Chrome” beyond code imports. Trace which request reaches which owner, whether the result is a value or managed reference, and who explains failure and retry. Credentials, canonical history, or a voice catalog copied into Inkwell are a second system, not a convenient integration.
Write the boundary table
Take one product-specific header change and decide whether it is a prop, a canonical extraction, or not shared. Include timeout, stale output, sibling unavailability, and schema mismatch. Any blank where both sides assume the other will act is the owner of the next incident.
Owning less makes the product more itself
Inkwell's identity is not another brain or voice engine. It composes original-first flow, penless review, handwriting UX, and late-result landing into one experience. Boundaries are features that make that composition possible.