@mutmutco/pi-plugin 4.6.3 → 4.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,301 @@
1
+ # Design and MM Artifacts
2
+
3
+ Read this before any UI, design, document or MM Artifact work. It was split out of the work-and-releases topic (#9460); the rulings below keep their original dates and wording.
4
+
5
+ Owner ruling 2026-10-25 (#8814, #8816, MM-Work#7629; `docs/decisions/2026-10-06-browser-checks-nightly.md`):
6
+ the required `gate` holds fast deterministic checks only; UI/design uses `@mutmutco/mmwork-ds`
7
+ (`mmwork-check-ui`) and the mandatory Impeccable skill/toolkit. Inspect all applicable toolkit
8
+ capabilities for every design task. Work on the live app; use our own MM Artifacts A/B canvas only
9
+ for owner design choices, with live kit pieces and recorded choice ID / owner-decision reference.
10
+ A canvas is for how something looks or works on screen only (#8986, relay wording): approvals for
11
+ keys, releases, deletions, data access or tooling never go on a canvas; send them to the
12
+ orchestrator, who asks the owner in plain words.
13
+ Functional browser journeys remain opt-in `workflow_dispatch`-only, never design checks or gates.
14
+
15
+ ## The MM Open Design System Bible (#8837, #8839)
16
+
17
+ Every agent doing UI, design, document or MM Artifact work reads this first: Part 1 builds the
18
+ system, Part 2 improves it, Part 3 governs A/B choosing, Part 4 gates kit changes on visual A/B.
19
+ Handoff and workaround notes cite this section by path and add only the task's own deviation,
20
+ failure and action, never a restatement; new owner rulings are still recorded verbatim.
21
+
22
+ ### Part 1 — The five pillars of the MM Open Design System
23
+
24
+ Owner ruling 2026-10-25 (#8837, MM-Work#7668): the stage skill is retired completely. UI and
25
+ design work follows one harmonized **Front-Loaded Impeccable v4.7.0 + MM Artifacts + Live Docs
26
+ (`Canlı belgeler`) + Atomic Design Kit (`@mutmutco/mmwork-ds`)** workflow:
27
+
28
+ - **Front-load Impeccable** before any UI or MM Artifact authoring: `impeccable context --target <path>`,
29
+ `DESIGN.md` plus its `design.json` sidecar in `.impeccable`, shared `.impeccable/config.json`
30
+ (`hook.enabled: true`), `reference/craft-floor.md` + `reference/operate.md`, and
31
+ `impeccable detect --json <target>`.
32
+ - **MM Artifacts** (local/canvas packs in the `mm-artifact` v3 format) use one command,
33
+ `node artifacts/review/review.mjs <folder>`. It runs `check.mjs`, `check-ui.mjs` and
34
+ `geometry.mjs`, pre-renders the board in `node:vm` via `ReactDOMServer.renderToStaticMarkup` into
35
+ `#root` and runs `impeccable detect --json` on that SSR-rendered HTML. Interactive owner A/B
36
+ reviews use the live loopback HTTP review server (`http://127.0.0.1:<port>/`), where the owner's
37
+ `Send answers` posts back to `POST /answers`; a seat must not open the owner's browser. An A/B is
38
+ shown as the live canvas link, never as prose (#8987, relay wording). Once the canvas passes review,
39
+ send the orchestrator only the review URL and issue number, and keep the server running until the
40
+ owner answers. A kept-alive canvas review server must stay light (no dev/watch build pinning
41
+ gigabytes); a seat whose canvas needs a heavy local server flags that to the orchestrator instead
42
+ of holding the RAM silently, and stops it as soon as the owner has answered. The orchestrator opens
43
+ it on the owner's screen. `--standalone [<out.html>]` is only
44
+ for offline HTML previews/exports and SSR pre-render verification, never for an interactive owner
45
+ decision.
46
+ **Headless seat rule:** `--open` is review.mjs-only; never pass `--open` to `vite`, and never use it from a seat to open the owner's browser for an A/B review.
47
+ Vite parses its value as a URL path, so `vite --open false` opens the owner's real browser at `/false`;
48
+ run dev/preview servers with `BROWSER=none` and no `--open` flag.
49
+ - **Live Docs** (`Canlı belgeler` viewer) carry the living references, including the live
50
+ design-system artifact `3a5c79df-5274-40ad-a1b5-a75e67a74dac`.
51
+ - **Atomic Design Kit** (`@mutmutco/mmwork-ds`): kit pieces and tokens only, checked with `mmwork-check-ui`.
52
+
53
+ How the five pillars fit together (owner, 2026-10-25):
54
+
55
+ | Pillar | What it is | Claude / industry analogy | Where it lives |
56
+ |---|---|---|---|
57
+ | **1. MM Artifacts (`mm-artifact`)** | The HTML artifact file format (`type: 'document' \| 'canvas' \| 'design-system'`). By default a single self-contained HTML artifact; a multi-board Canvas only when comparing A/B options or viewport sizes side by side. | Claude Artifacts (the HTML artifact itself) | Local `.html` / `artifact.json` during agent dev (opened straight in the browser); stored in Live Docs when shared or created by Junior. |
58
+ | **2. Design System Artifacts (`type: 'design-system'`)** | MM Artifacts stored in Live Docs that define a complete visual system (tokens, CSS, components, `DESIGN.md`). Every MM Artifact binds to one (`kit: { id, version }`). Includes (a) the MM-Work Atomic Design System (`3a5c79df`, MM-Work app and modules), (b) the Document/Editorial Design System (reports, checklists, decks, client documents), and future brand/client systems. | Claude Design Systems / theme packs an artifact pulls from on creation | Hosted in Live Docs (`Canlı belgeler`). Only the MM-Work app design system is also exported to npm (`@mutmutco/mmwork-ds`). |
59
+ | **3. Live Docs (`Canlı belgeler`)** | The viewer, library, commenter and A/B picker inside the MM-Work app (`/documents/:id`), where people, Junior and agents view, comment on, version and share MM Artifacts. | Claude's Artifact viewer / workspace panel | Built into MM-Work (`web/src/documents/`, `src/documents.ts`). |
60
+ | **4. Open Design Kit (`@mutmutco/mmwork-ds`)** | The npm package generated from `packages/mmwork-ds/source/` (the source of the MM-Work Atomic Design System), so MM-Work, the 10 suite modules and local app-UI MM Artifacts render real Atoms, Molecules, Organisms, Templates and Pages. | Published React/CSS component kit | `packages/mmwork-ds/source/` → `@mutmutco/mmwork-ds`, synced to Live Docs (`3a5c79df`) and all 10 module roots. |
61
+ | **5. Impeccable (`v4.7.0`)** | The front-loaded design craft and quality engine (`impeccable context`, `craft-floor`, 15 playbooks such as `distill`, `typeset`, `layout`, `colorize`, `clarify`, `polish`, plus `impeccable detect --json` and `DESIGN.md`). Runs in front of every UI or MM Artifact creation so output is readable, well typeset, purposefully coloured and never AI slop. | Design director + mechanical UI linter | `.agents/skills/impeccable` + root `DESIGN.md` and the `design.json` sidecar in `.impeccable`. |
62
+
63
+ Four owner decisions (2026-10-25T15:35:52Z):
64
+
65
+ 1. **Doc vs. app kit — add a Document Design System too.** Keep the MM-Work Atomic Design System (`3a5c79df-5274-40ad-a1b5-a75e67a74dac`) for MM-Work and module app UI (and as the fallback for now), and add a dedicated Document/Editorial Design System Artifact in Live Docs for reports, checklists, decks and client documents made by Junior or agents.
66
+ 2. **Where to save — local HTML for dev, Live Docs for shared.** Coding agents build local `.html` MM Artifacts for fast iteration. For interactive owner A/B reviews, serve the canvas on the live loopback HTTP review server (`http://127.0.0.1:<port>/` with `Send answers`) without opening the owner's browser; relay the URL and issue number to the orchestrator and keep the server running until the owner answers (#8987, relay wording). A kept-alive canvas review server must stay light (no dev/watch build pinning gigabytes); a seat whose canvas needs a heavy local server flags that to the orchestrator instead of holding the RAM silently, and stops it as soon as the owner has answered. Use `node artifacts/review/review.mjs <folder> --standalone [<out.html>]` for offline HTML previews/exports or SSR pre-render verification. Publish to Live Docs only for a shared deliverable, an A/B decision canvas or a Design System. Junior inside MM-Work saves directly to Live Docs.
67
+ 3. **Artifact shape — single HTML by default, Canvas for A/B.** A single self-contained HTML view for documents, checklists and single-screen work; a multi-board spatial Canvas only for A/B choices or `1440`/`1024`/`390` side-by-side comparisons.
68
+ 4. **Kit binding — Live Docs hosts kits; npm only for MM-Work.** Every Design System Artifact in Live Docs stores its tokens/CSS/components and `DESIGN.md` so any HTML artifact can bind to it (`kit: { id, version }`); only the MM-Work app design system is also exported as `@mutmutco/mmwork-ds`, because the MM-Work app and the 10 suite modules compile against it.
69
+
70
+ Impeccable **v4.7.0 / engine v0.1.16** details:
71
+
72
+ - Impeccable is invoked as the installed script at `~/.agents/skills/impeccable/scripts/impeccable` or
73
+ bare `impeccable` on `PATH` — no Impeccable CLI is published on npm, so never run
74
+ `npx @impeccable-style/cli ...` (it 404s) or chain `npx` guesses into git/bootstrap commands (#8885).
75
+ Refresh the local kit cache through MMI-Hub `scripts/kit-adopt.mjs`'s `refreshKitCache({ mmWorkRoot, cacheRoot })`
76
+ (#9271, #9279). It runs `node "<absolute-MM-Work-root>/scripts/sync-design-system.mjs" "<absolute-MM-Work-root>/packages/mmwork-ds/source" --out "<staging-dir>"`
77
+ (the source argument is required, #8887) into a staging dir inside the cache root, then publishes that output to
78
+ `<cache-dir>/<version>/`, `<cache-dir>/latest/` and `version.json`, which is what `scripts/kit-adopt.mjs --local-dir`
79
+ reads. Run the sync yourself only into such a staging dir: `--out` alone writes the generated files flat and writes no
80
+ `package.json`, so a bare `--out "<cache-dir>"` fills a cache `--local-dir` cannot resolve. The cache dir is the machine
81
+ cache `~/.jerv/cache/mmwork-ds`. Never run the two-argument form: without `--out`
82
+ the sync writes the nine generated kit files and `sync.json` into the MM-Work working tree, where they are
83
+ post-merge bot output, MM-Work's lane guard refuses a commit touching them, and a lane that already ran it cleans
84
+ up with `git checkout -- packages/mmwork-ds`. Never commit those files (#9271). Resolve and verify the checkout as described under
85
+ [shared support-script invocation](#shared-support-script-invocation). A local `npm ci` against `npm.pkg.github.com` that returns
86
+ `E401` needs the GitHub Packages credential, never the npm one: the Jerv vault key `GH_PACKAGES_READ_TOKEN`, used keyless
87
+ (`jerv-cli vault use GH_PACKAGES_READ_TOKEN -- sh -c 'NODE_AUTH_TOKEN="$GH_PACKAGES_READ_TOKEN" npm ci --prefix module'`),
88
+ or your own `gh` login when it carries `read:packages` (`NODE_AUTH_TOKEN=$(gh auth token) npm ci --prefix module`); the
89
+ org `npm/NPM_TOKEN` belongs to `registry.npmjs.org` and returns `E401` here. Or adopt credential-free
90
+ with `mmi-cli devops packages adopt-export` (`docs/Guides/package-adopt-export.md`, #8886). To probe a kit
91
+ version, read the pin from the consumer's module/`package.json` (or `node_modules/@mutmutco/mmwork-ds`); a bare
92
+ `npm view @mutmutco/...` asks the public registry only and 404s, because the scope lives on GitHub Packages (#9238).
93
+ A registry read needs the registry flag and a token: in a consumer whose `.npmrc` maps the scope,
94
+ `NODE_AUTH_TOKEN=$(gh auth token) npm view @mutmutco/mmwork-ds@<v> version --registry https://npm.pkg.github.com`;
95
+ from a root without that line, pass the token directly —
96
+ `npm view @mutmutco/mmwork-ds@<v> version --registry https://npm.pkg.github.com --//npm.pkg.github.com/:_authToken=$(gh auth token)`.
97
+ To see **which** kit versions are actually published, run MMI-Hub's
98
+ `node scripts/kit-adopt.mjs --list-versions [--limit 5] [--json]` (#9426) instead of deriving it: it reads GitHub
99
+ Packages `/orgs/mutmutco/packages/npm/mmwork-ds/versions` (newest first, falling back to `npm view` against
100
+ `https://npm.pkg.github.com` with `GH_PACKAGES_READ_TOKEN`/`NODE_AUTH_TOKEN`), reports the local cache's latest
101
+ version, and never hits the `registry.npmjs.org` 404 of a bare `npm view @mutmutco/mmwork-ds` (#9264). That is the supported listing read:
102
+ `mmi-cli devops packages` covers consumer adoption (`adopt-export`) only, so it never names a published
103
+ version — never carry the packages API as a stopgap.
104
+ - Boot once: `impeccable context --target <path>`; `init` captures PRODUCT.md, `document` maintains
105
+ `DESIGN.md` and its `design.json` sidecar, `impeccable doctor --json` reports drift, and `extract`
106
+ identifies reusable candidates (kit additions still need the Design Lead). Read
107
+ `reference/craft-floor.md` before UI edits and `reference/operate.md` for app UI.
108
+ - `impeccable hooks on` enables shared `.impeccable/config.json`; local overrides/consent belong in
109
+ ignored `.impeccable/config.local.json`. Tier 1 scans mechanical problems per edit; Tier 2 deep-scans
110
+ at turn-end `Stop` on supported hosts. Verify `hooks status` and host support, not config alone.
111
+ If automatic hooks are unavailable, run `impeccable detect --json <target>` manually on markup
112
+ files/directories (not CSS-only): **0 clean / 2 findings**. Unavailable or broken scans are not passes.
113
+ - Dual-subagent `critique` keeps design assessment independent from detector evidence and persists via
114
+ `critique-storage`; disclose degraded runs. `audit` scores accessibility, performance, theming,
115
+ responsive design and implementation integrity 0–4 each (**20 points**). These evaluations are
116
+ agent playbooks, not standalone engine CLI verbs; still inspect the live result.
117
+ - Pick relevant playbooks: `polish`, `bolder`, `quieter`, `distill`, `harden`, `onboard`, `layout`,
118
+ `typeset`, `colorize`, `animate`, `delight`, `overdrive`, `clarify`, `adapt`, `optimize` (15 names in
119
+ v4.7.0, despite the requested “14”). Do not apply conflicting playbooks blindly.
120
+ - Iterate with `live` / `generate` (`live-generate`, `live-poll`, `live-server`); `serve-question`
121
+ supports choices, while owner A/B decisions use the MM Artifacts canvas.
122
+ Stop temporary servers. Check installed versions and approved upstream updates via the owning
123
+ installer; do not modify shared skills from a module task. Record command + exit + findings,
124
+ kit version and available checks separately from contract identity; reports are not conformance.
125
+
126
+ Craft essentials every agent applies (owner, 2026-10-25, #8839):
127
+
128
+ - **Sleek translucent glass cards and zero GPU usage — never color-washed
129
+ (`2026-10-25T16:21:19.344Z`).** Cards use sleek, modern translucent glass material (neutral
130
+ translucent surface with a crisp glass rim, `--card-tint-dark: 0%`, `--card-tint-light: 0%`)
131
+ rather than color-washed card fills in any theme, and zero GPU-compositing blur or shadow
132
+ (`--card-blur: none`, `--card-blur-frost: none`, `--frost-see-blur: 0px`, `--glass-blur: none`,
133
+ `--card-shadow-dark: none`; never `backdrop-filter: blur(...)`). Module tones (`blue`, `coral`,
134
+ `teal`, `purple`, `terracotta`, `green`, `pink`, `lime`, `cyan`, `magenta`, `fuchsia`)
135
+ belong on `Badge`, `Mark`, `Checkbox` (`lead`), and card `icon`/`mark` accents (`edge="bite"`).
136
+ - **Front-loaded Impeccable v4.7.0, in front of creation.** Run `impeccable context --target <path>`,
137
+ read `DESIGN.md` and `reference/craft-floor.md`, choose the surface mode (`Operate`, `Read`,
138
+ `Persuade` or `Experience`) and load the matching playbooks (`shape`, `distill`, `typeset`,
139
+ `layout`, `colorize`, `clarify`, `polish`, `harden`, `adapt`) before writing markup.
140
+ - **Restraint and hierarchy.** Group related items into clean section `Card`s (`heading: 2` under
141
+ the page `<h1>`), keep main-column rows concise (`Cluster` with `fill` = `Checkbox` plus one
142
+ trailing action), and put multi-line inspector detail in the right-hand `HelperCard` as `Stack` +
143
+ `Text` — never `DataList`, which clips multi-line prose. No walls of text.
144
+ - **Verify the SSR pre-rendered HTML.** `impeccable detect --json` is blind on an unrendered
145
+ `<div id="root"></div>` file, so verify the output of `review.mjs <folder> --standalone --open`,
146
+ which pre-renders the board into `#root` first. An empty `#root`, missing fonts or an unrendered
147
+ detector run is a failed check, not a pass. For one page-spec module, run
148
+ `node scripts/design-pack-render.mjs --page-spec <spec.mjs>` (it SSR-renders `renderPage(ctx)` per
149
+ theme mode and runs `impeccable detect --json` on the HTML), or `node artifacts/review/review.mjs
150
+ <folder> --standalone` for a pack; never hand-roll an inline `node -e` SSR script, which evaluates
151
+ as CommonJS and fails on the spec's ESM `import` lines (#8876).
152
+
153
+ ### Shared support-script invocation
154
+
155
+ Resolve shared support tools from their **known canonical checkout**, not the caller's module/worktree
156
+ layout (#8890). Never guess `../../MMI-Hub/scripts/kit-adopt.mjs`: that can resolve to the
157
+ `mmi-worktrees/MMI-Hub` container, not a checkout, or to a sibling branch without the script.
158
+
159
+ 1. Start with a known absolute MMI-Hub checkout/worktree path supplied by repository or host metadata.
160
+ If only a Hub task worktree is known, use `git -C "<known-Hub-worktree>" rev-parse --path-format=absolute --git-common-dir`
161
+ and `git -C "<known-Hub-worktree>" worktree list --porcelain` to identify its canonical/main checkout.
162
+ Git metadata is repository-specific: a module's common directory cannot locate MMI-Hub. If no Hub
163
+ checkout is known, ask for it; do not scan drive roots or traverse arbitrary parents.
164
+ 2. Verify the selected checkout's identity with `git -C "<absolute-Hub-root>" remote get-url origin`
165
+ (must identify `mutmutco/MMI-Hub`) and verify `"<absolute-Hub-root>/scripts/kit-adopt.mjs"` exists as
166
+ a file before invocation. If missing, stop and resolve the correct checkout/version; do not retry
167
+ sibling guesses or create a replacement script.
168
+ 3. Resolve each target/source independently to its intended absolute path. Invoke Node with separate,
169
+ quoted arguments, for example:
170
+ `node "<absolute-Hub-root>/scripts/kit-adopt.mjs" --local-dir "<absolute-module-root>" --version <kit-version>`.
171
+ For cache refresh, verify `<absolute-MM-Work-root>/scripts/sync-design-system.mjs`, then
172
+ pass the absolute script path, the absolute `packages/mmwork-ds/source` path and `--out "<absolute-cache-dir>"`
173
+ as shown above: the generated kit files and `sync.json` land in the cache, never in the MM-Work checkout (#9271).
174
+ These are path patterns, not literal host paths; keep machine-specific roots out of bundled docs.
175
+
176
+ Verify paths before chaining unrelated operations such as a board claim. Path resolution grants no
177
+ new authority: use only the tool mode and target already authorized; never replay a successful claim
178
+ just because a later script failed to load.
179
+
180
+ ### Part 2 — The System-First Autolearn Doctrine (never work around a broken tool in `tmp/`)
181
+
182
+ Owner ruling 2026-10-25T15:41:41.360Z (#8839): agents learn from their work, mistakes and
183
+ discoveries with the MM open design system and improve the system wherever they can, instead of only
184
+ fixing the current situation. Never patch the moment in `tmp/` and leave the shared system broken.
185
+ If creating, bundling, rendering, checking or opening an MM Artifact or a design-kit change needs a
186
+ custom script in `tmp/`, a patch around a bundler regex, manually inlined fonts, or locally overridden
187
+ broken tokens, that is a **system defect, not a local task**.
188
+
189
+ The immediate three-step system upgrade reflex:
190
+
191
+ 1. **Step A — fix the shared system at its source.** File or claim an issue, or message the owning
192
+ suite seat (Design Lead, MM-Work, Jerv-JervCode, MMI-Hub, Jerv-Hub), so the shipped CLI, bundler,
193
+ token, component or skill is fixed in its repository and no agent ever needs the workaround again.
194
+ A temporary workaround may unblock the task only when it is named as such and linked to that issue.
195
+ 2. **Step B — record it in the autolearn queue** (`jerv_learning_note` in JervCode, or
196
+ `mmi-cli learning skill-lesson --skill <name> --title <summary> --body-file <path>`): the exact
197
+ friction and its root cause, so autolearn turns it into a durable doctrine, code or skill fix.
198
+ 3. **Step C — record it in Hindsight memory** (`hindsight_ingest_document`): the root cause and the
199
+ permanent system fix, so every later session recalls it automatically.
200
+
201
+ Autolearn watches design and artifact work for these signals and escalates each into a shared
202
+ toolchain, kit or skill improvement: ad-hoc build/render/verify scripts under `tmp/`, empty `#root`
203
+ renders, missing fonts, unrendered `impeccable detect` runs, geometry or layout regressions,
204
+ graywashed or untinted surfaces, verbose walls of text, and skipped front-loaded `impeccable context`
205
+ or playbook passes. Reflect after each design task: what would have made this easier for the next
206
+ agent, and is that improvement filed?
207
+
208
+ ### Part 3 — A/B Choosing Architecture & Viewer Rules (owner ruling 2026-10-25T15:57:26.199Z, #8841)
209
+
210
+ Settled owner ruling: present clear, distinct choices in the existing MM Artifact viewer, not a
211
+ "shell over a shell". These are authoring and viewer requirements, not proof of installed capabilities.
212
+
213
+ **Canvases carry design choices only (#8986, relay wording).** An A/B canvas asks how something
214
+ looks or works on screen. Approvals for keys, releases, deletions, data access or tooling never go on
215
+ a canvas: send them to the orchestrator, who asks the owner in plain words.
216
+
217
+ 1. **No "shell over a shell" — designer agents build only the alternatives, never their own A/B switcher.**
218
+ The outer MM Artifact viewer (the local review shell and `CanvasStage` / `CompareView` in Live Docs)
219
+ already IS the A/B selector shell: it renders the question prompt, Option A / Option B / Neither
220
+ buttons, notes and board switcher. A `designer` subagent must **NEVER** draw an A/B picker,
221
+ question header, option cards or a gallery of tiny `ThemePreview` thumbnails inside a board.
222
+ **One A/B decision = one page with two full-resolution live HTML boards:**
223
+ - `board-a`: the actual full-size (`1440x900`) live MM-Work screen rendered in **Option A**
224
+ (for example, Linear Dark).
225
+ - `board-b`: the exact same full-size (`1440x900`) live MM-Work screen rendered in **Option B**
226
+ (for example, Apple Black).
227
+ Never pack multiple themes or multiple options onto a single board.
228
+ 2. **Compare the live HTML artifacts directly — never screenshots or low-res thumbnails.**
229
+ Both options are live, vector-sharp HTML/CSS/React artifacts rendered from `@mutmutco/mmwork-ds`,
230
+ never raster PNG screenshots or shrunken preview cards. The A/B viewer must let the owner inspect
231
+ Option A and Option B side-by-side or toggle 1:1 at full crisp resolution, so subtle palette,
232
+ contrast and typography differences (such as Linear Dark vs. Apple Black) are immediately clear.
233
+ 3. **Content-only zoom — zoom the artifact content, never the outer A/B shell.**
234
+ In the local review viewer and Live Docs (`CanvasStage` / `BoardBridge`), `wheel` events
235
+ (including `ctrlKey` / `metaKey` pinch-zoom) and keyboard zoom (`Ctrl/Cmd + +/-/0`) on both the
236
+ outer review shell and inside board iframes (forwarded via `postMessage`) must call
237
+ `preventDefault()` and zoom **only the artifact canvas/board viewport**. `Ctrl + Mousewheel` and
238
+ viewer zoom controls must keep the outer A/B selector shell, question bar and controls at a fixed
239
+ 1:1 UI size.
240
+
241
+ 4. **A recorded owner answer is decided state — read it back, never re-ask (owner ruling, #9259).**
242
+ An answer the owner already gave on an A/B canvas is durable decided state, not a pending question.
243
+ Before re-presenting or re-asking any A/B choice, read the recorded answer — `answers.json` in the
244
+ canvas folder plus the canvas choice ID Part 4 Stage 2 says to record — and when a canvas is reopened,
245
+ rebuilt or replaced, carry that pick forward and show the board as already answered. Never tell the
246
+ owner he has not picked while a recorded pick exists: a decided board reads as decided, naming where
247
+ and when it was chosen, and the work proceeds instead of stalling behind a closed question.
248
+
249
+ ### Part 4 — Visual A/B Choice via Designer Subagent Before Kit Implementation — Never Prose Specs (owner ruling 2026-10-25T16:29:46.339Z, #8844, #8846, #8848)
250
+
251
+ Settled owner ruling (verbatim): "You should use a designer to create a couple card designs with my
252
+ specifications and then let me choose then build the complete spec into the design system, replacing
253
+ any other card available atomically. That's the proper way to do it. Learn from this mistake of yours,
254
+ requests like this should follow this structure, not prose guide."
255
+
256
+ 1. **Never reply with a prose specification in chat or jump straight to kit implementation.**
257
+ When the owner asks to "design the spec for X and add it to the design system" (for example, The One
258
+ Card), writing a markdown or prose spec in chat violates Principle 7 ("Choices for Jervaise go only
259
+ on the A/B canvas"). Building one guessed design straight into the kit skips the owner's choice.
260
+ 2. **Always follow the visual spec pipeline:**
261
+ - **Phase 0 — Inspiration via front-loaded Impeccable v4.7.0 and 21st.dev MCP (`https://21st.dev/api/mcp`) only (owner ruling 2026-10-25T21:37:00+03:00, #8854; superseding #8848).**
262
+ Before building visual A/B boards, use front-loaded **Impeccable v4.7.0** alongside **21st.dev MCP**
263
+ (`https://21st.dev/api/mcp`; verbatim owner ruling: `"we don't need the mcp better design yet,
264
+ impeccable and 21st is enough"`, dropping Better Design MCP) to study high-craft reference patterns,
265
+ layout proportions, and interaction details. Always translate inspired patterns into zero-GPU
266
+ `@mutmutco/mmwork-ds` tokens (`--card-blur: none`, `--card-tint-dark: 0%`, `--card-tint-light: 0%`,
267
+ sleek translucent glass cards) and Atomic Design layers; never copy raw third-party CSS/HTML or
268
+ GPU-heavy effects. `MM-Inspo` is strictly a customer/tenant module inside the MM-Work suite, never
269
+ an internal tool for designing the MM-Work app or its design system.
270
+ - **Stage 1 — a designer subagent builds visual A/B alternatives on an MM Artifact canvas.**
271
+ Dispatch a `designer` subagent with front-loaded Impeccable (`impeccable context`, `craft-floor`,
272
+ `distill`, `typeset`, `layout`, `colorize`, `polish`) to create 2–3 genuinely distinct visual
273
+ designs that honor every constraint in the owner's brief: Option A, Option B and optionally
274
+ Option C, each its own full-resolution `1440x900` live HTML board in one MM Artifact A/B canvas
275
+ (Part 3 rules: content-only `Ctrl + Mousewheel` zoom, 1:1 or side-by-side live comparison). Serve
276
+ the verified canvas on the live loopback HTTP review server without opening a browser from the
277
+ seat, so the owner's `Send answers` posts straight back to `POST /answers`. Once review passes,
278
+ send the orchestrator only the review URL and issue number, and keep the server running through
279
+ Stage 2; the orchestrator opens it on the owner's screen (#8987, relay wording). Never open a
280
+ `--standalone` `file://` export (`Download answers.json`) for an
281
+ interactive owner A/B decision: `--standalone [<out.html>]` is only for offline previews/exports
282
+ and SSR detector checks. Spawn a dedicated, fresh
283
+ `designer` subagent for each distinct design task (item 3); never reuse a busy designer seat.
284
+ - **Stage 2 — the owner chooses visually on the A/B canvas.** Wait while the owner inspects the
285
+ live HTML alternatives, zooms into details and picks the preferred design or asks for
286
+ adjustments, then presses `Send answers` on the live review server page; `review.mjs` writes
287
+ `answers.json` into the canvas folder and exits. Record the canvas choice ID and the
288
+ owner-decision reference.
289
+ - **Stage 3 — atomic replacement in the kit source.** Only AFTER the owner picks on the A/B canvas,
290
+ build the chosen design into the source folder of packages/mmwork-ds in mutmutco/MM-Work,
291
+ **atomically replacing** every other legacy or competing variant of that piece across the design
292
+ system, publish it to `Canlı belgeler` / MM-Work, and propagate it to all 10 suite modules.
293
+ 3. **One dedicated `designer` subagent per distinct design task — never overload a designer seat
294
+ (owner ruling 2026-10-25T16:33:00Z, #8846).**
295
+ Settled owner ruling (verbatim): "The lead designer sent the card building to the same designer
296
+ agent, overloading it. I don't think it was a wise idea. Please learn from this."
297
+ Spawn a separate, fresh `designer` subagent in its own isolated lane for each distinct design task
298
+ or visual A/B canvas (for example, a theme A/B exploration vs. a unified Card spec A/B). Never steer
299
+ or queue a second unrelated design task onto an active `designer` seat: overloading one
300
+ `designer` subagent serializes work that should run in parallel, bloats its context window, and
301
+ degrades craft quality.
@@ -3,14 +3,7 @@
3
3
  GitHub repository admins are project-admins on that repository without duplicate registry
4
4
  enrollment. Registry-listed admins with repository write access remain supported.
5
5
 
6
- The two tiers describe authority and blast radius, not separate storage products:
7
-
8
- - **Your project:** a project-admin can manage their own product's full vault tree, including
9
- shared values and dev, rc, and main overrides. Production-stage names do not by themselves
10
- require an organization master-admin.
11
- - **Organization infrastructure:** shared infrastructure secrets are master-admin managed.
12
- Project access requires an explicit grant for the relevant names. A read grant permits
13
- consumption, not rotation or deletion; do not assume a grant authorizes every operation.
6
+ The two tiers (your own project's vault tree, and organization infrastructure that needs a master grant) and who may use each are defined once in the [secrets skill](../../secrets/SKILL.md); this topic does not restate them.
14
7
 
15
8
  Read `mmi-cli oracle org access role <owner/repo> --json` and
16
9
  `mmi-cli oracle org access capabilities` for your actual authority.
@@ -20,7 +13,7 @@ it does not require installing or querying a personal vault product.
20
13
 
21
14
  The registry catalog declares secret names before values are set. A shared, stageless value is
22
15
  the canonical default; a declared stage override wins for that stage. Avoid accidental duplicate
23
- copies that hide a rotation. Use `mmi-cli vault secrets catalog` and `mmi-cli vault secrets list`
16
+ copies that hide a rotation. Use `mmi-cli vault secrets list` and `mmi-cli oracle org access capabilities`
24
17
  to inspect names and reach, never values.
25
18
 
26
19
  Consume through `mmi-cli vault secrets use <KEY> -- <command>`: the authorized child receives the