8.3.12 Decision — where Motir's BRAND chrome lives for cross-repo reuse, given `@motir/design-system` is installed by every scaffolded product
Type: decision · Executor: coding_agent · Filed by motir run MOTIR-1456 at guard #4 (a prerequisite the card assumes that does not exist).
Decide, and record as an ADR, how a second Motir-owned repository (motir-marketing, and any future one) obtains Motir's own brand chrome — the lockup component, the wave-band glyph geometry, and the .brand-* presentation CSS.
The question, and why it is not already answered
docs/decisions/design-system-package.md (Accepted 2026-07-02, written by MOTIR-1525) fixed the @motir/design-system boundary and says nothing about brand — grep -i 'brand\|marketing\|logo\|lockup\|wordmark' over it returns 0 hits. It could not have: the brand mark landed five weeks later (MOTIR-1150, done 2026-08-07). The two halves of that ADR now disagree about the brand lockup:
- Its §1 boundary rule ADMITS it. A file moves in iff its only imports are other package files, framework peers, or
cn.components/brand/BrandMark.tsximports its siblingcomponents/brand/waveBand.tsand React — no Motir domain module. It passes. - Its §Context consumer frame FORBIDS it. The declared consumers are motir-core, "
nextjs-prisma-vercel-starter— a planner input, not a user product; the planner forks it and plans on top", and "the coding/scaffold agent". Shipping Motir's logomark inside a GPL-3.0 package on public npm distributes Motir's wave band to every product a Motir user scaffolds.
And the mark is not cleared: design/brand/design-notes.md states "Neither prior-art check nor trademark clearance covers this mark" — MOTIR-2267 searches it in classes 9 + 42 and is still todo. GPL-3.0 grants copying and redistribution over the code, and the glyph IS the trademark, expressed as an SVG path constant.
What is in scope
The three artifacts that make up the brand chrome today, all in motir-core:
components/brand/BrandMark.tsx— the lockup (lockup/mark/stackedvariants,default/quiet/invertedtones)components/brand/waveBand.ts—WAVE_BAND_PATH+WAVE_BAND_VIEW_BOX, the approved geometry (MOTIR-3181 / MOTIR-3182)- the
.brand-*block inapp/globals.css(lines 174–221) — the presentation, including the type-axis pin (.brand-wordreadsvar(--font-sans-source), the raw FACE variable, never thevar(--font-sans)ROLE token that three[data-type]blocks re-point). A distribution that loses that pin re-letters the wordmark whenever a reader changes their Appearance pairing — a defect that already shipped once inExploreTopBar.
Options to weigh (at least these three; recommend the best, do not survey)
- A second published package, e.g.
@motir/brand— motir-core and motir-marketing depend on it; scaffolded products never install it. Costs a secondexportssurface, a second release lane (copyrelease-design-system.yml, per its own "Extending to another package" note), and a second npm name. - A subpath export off the existing package (
@motir/design-system/brand) — one release lane, but the trademark still ships in every scaffolded product'snode_modules, and the semver surface grows. - motir-marketing carries its own copy — no new package, but this is the two-sources-of-truth drift the ADR §3.1 exists to kill (it retired
nextjs-prisma-vercel-starter-with-designfor exactly this).
Weigh at minimum: trademark exposure under GPL-3.0 redistribution; whether a scaffolded third-party product should be able to import { BrandMark } at all; the release-lane cost; how the .brand-* CSS travels (it is app-tail CSS today, not part of theme.css); and whether the decision should wait on MOTIR-2267's clearance or is independent of it.
Acceptance criteria
- An ADR exists at
motir-core/docs/decisions/recording the chosen mechanism, the options weighed, and the rejection reason for each — in the shape ofdesign-system-package.md, and cross-referenced from it so the two boundaries are read together. - The ADR states explicitly whether Motir's brand chrome MAY appear in a package that scaffolded third-party products install, and says why.
- The ADR names the concrete home for each of the three artifacts above (component, geometry constant,
.brand-*CSS), and how the type-axis pin (--font-sans-source) survives the move. - The ADR names its relationship to MOTIR-2267 (trademark clearance): either a stated dependency, or a recorded reason the decision does not wait on it.
- The ADR ships as a docs-only diff on a
docs/MOTIR-<id>-<slug>branch; no runtime moves in this card (the implementation is MOTIR-1456, which this blocks).
Context refs
motir-core/docs/decisions/design-system-package.md— the boundary this amends (§1 boundary rule, §Context consumer frame, §3 distribution, §3.1)motir-core/components/brand/BrandMark.tsx,components/brand/waveBand.ts,app/globals.csslines 174–221motir-core/design/brand/design-notes.md— §3 the reference CSS, §7 the variants, §8 accessible names, and the trademark-clearance notemotir-core/packages/design-system/package.json— theexportsmap andfilesallowlist a second package would mirror.github/workflows/release-design-system.yml— the release lane, and its own note on extending to another package- MOTIR-2267 (trademark clearance, classes 9 + 42,
todo) · MOTIR-1525 (the ADR this amends) · MOTIR-1150 (the brand mark's application)