oficina / sheets Public

Shared primitives go to oficina/estilo, not rastrillo/ui

Paul's ruling, confirmed directly rather than on either of the two
relays that reported it: the design system stays rastrillo's, and the
CARLOS suite gets its own variant. An inspector panel shared by a
document editor and a spreadsheet is the suite's component, not the
framework's. Repo created the same day.

The distinction that produced the correction is worth more than the
outcome: two callers at design time is the bar for extraction, and says
nothing about destination. Both consuming sessions were told to propose
to the library and applied the right bar to the wrong question, because
the first answer looked like it settled the second. It will recur for
every piece either app hands upward, so it is recorded rather than left
in a message thread.

Creating estilo now rather than building app-local first, because two
consumers already exist at design time — the extraction bar is met, not
pending, and building locally would guarantee merging two
implementations later, which is the outcome the bar exists to prevent. I
had recommended the opposite to ui-guidelines-52 an hour ago, applying
one-consumer logic to a two-consumer situation; docs-e6 caught it.

The colour engine is unaffected and stays in ui: Pair and allocation are
contrast arithmetic against floors the framework already gates, so they
are a function rather than a component, and both apps call the same one
wherever their components live.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01APtNStXDZ5H2fAc1ZuGqtS
Paul Campbell 8f093dba0368b1fb44b4a40cfdee86e1094cb6f0 parent 811f51c
1 file changed, +28 −5
  • docs/superpowers/specs/2026-08-30-sheets-design.md +28 −5

No CI script — run details

diff --git a/docs/superpowers/specs/2026-08-30-sheets-design.md b/docs/superpowers/specs/2026-08-30-sheets-design.md
index 825a28f..6f5f234 100644
--- a/docs/superpowers/specs/2026-08-30-sheets-design.md
+++ b/docs/superpowers/specs/2026-08-30-sheets-design.md
@@ -765,11 +765,34 @@ three as unavailable and keep the §10.3 shim.**
- **Menus go shallow:** File, Edit, Insert, Format, Data, Help.
- **Home is your sheets by recency and a New button.** No template carousel.
-The app shell is **app-local**, handed upstream when a second app wants it.
-Primitives split with Docs: we own **toolbar groups**; Docs owns inspector
-panel, presence stack and **comment thread** (their anchoring case is
-harder, so it owns the design; we consume it — a cross-repo dependency
-inside slice one, noted in §13's risk).
+The app shell is **app-local**. Shared primitives are not.
+
+**Destination: `oficina/estilo`** — a CARLOS suite design-system variant,
+**not** rastrillo's `ui` (Paul, 2026-08-30; repo created same day). A
+variant depends on `ui`, keeps its bones — tokens, the partial vocabulary,
+the accessibility floors — and adds components, themes and its own gallery.
+Not a fork, and more than a theme, since a theme cannot add a component.
+`cmd/dsgen` went public 2026-08-30 and generates a gallery for any module's
+own vocabulary; **read it before anyone writes a second one.**
+
+**The distinction that produced this, worth keeping** (ui-guidelines-52,
+2026-08-30): *two callers at design time is the bar for **extraction**, and
+it says nothing about **destination**.* Both consuming sessions were told
+"propose it to the library" and applied the right bar to the wrong question,
+because the first answer looked like it settled the second. It will recur
+for every piece either app hands upward.
+
+**Primitives split with Docs:** we own **toolbar groups**; Docs owns
+inspector panel, presence stack and **comment thread** (their anchoring case
+is harder, so it owns the design and we consume it — a cross-repo dependency
+inside slice one, noted in §13's risk). Same standards either way: twelve
+locales, the script-required line stated per primitive, 24×24 targets, 320px
+reflow, colour never carrying meaning alone.
+
+**The colour engine is unaffected and stays in `ui`.** `Pair` and allocation
+are contrast arithmetic against floors the framework already gates — a
+function, not a component — so our cell fills and Docs' highlights are
+callers of the same thing regardless of where their components live.
### 10.3 Cell fill colour