mishkan-harness 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +205 -0
- package/bin/mishkan.js +221 -0
- package/docs/design/MISHKAN_agent_aliases.md +140 -0
- package/docs/design/MISHKAN_decisions.md +172 -0
- package/docs/design/MISHKAN_harness_design.md +820 -0
- package/docs/design/MISHKAN_ontology.md +87 -0
- package/docs/design/MISHKAN_token_optimisation.md +181 -0
- package/docs/engineer/README.md +37 -0
- package/docs/engineer/profile.example.md +79 -0
- package/docs/usage/01-installation.md +178 -0
- package/docs/usage/02-project-init.md +151 -0
- package/docs/usage/03-orchestration.md +218 -0
- package/docs/usage/04-memory-layer.md +201 -0
- package/docs/usage/05-selective-ingest.md +177 -0
- package/docs/usage/06-llm-providers.md +195 -0
- package/docs/usage/07-troubleshooting.md +316 -0
- package/docs/usage/08-glossary.md +154 -0
- package/docs/usage/09-workflows.md +123 -0
- package/docs/usage/README.md +77 -0
- package/package.json +43 -0
- package/payload/install/settings.hooks.json +47 -0
- package/payload/mishkan/AGENT_SPEC.md +154 -0
- package/payload/mishkan/agents/ahikam.md +58 -0
- package/payload/mishkan/agents/aholiab.md +68 -0
- package/payload/mishkan/agents/asaph.md +73 -0
- package/payload/mishkan/agents/baruch.md +88 -0
- package/payload/mishkan/agents/benaiah.md +76 -0
- package/payload/mishkan/agents/bezalel.md +83 -0
- package/payload/mishkan/agents/caleb.md +74 -0
- package/payload/mishkan/agents/deborah.md +63 -0
- package/payload/mishkan/agents/elasah.md +58 -0
- package/payload/mishkan/agents/eliashib.md +68 -0
- package/payload/mishkan/agents/ezra.md +69 -0
- package/payload/mishkan/agents/hanun.md +64 -0
- package/payload/mishkan/agents/hiram.md +68 -0
- package/payload/mishkan/agents/hizkiah.md +76 -0
- package/payload/mishkan/agents/huldah.md +59 -0
- package/payload/mishkan/agents/huram.md +66 -0
- package/payload/mishkan/agents/hushai.md +59 -0
- package/payload/mishkan/agents/igal.md +58 -0
- package/payload/mishkan/agents/ira.md +86 -0
- package/payload/mishkan/agents/jahaziel.md +71 -0
- package/payload/mishkan/agents/jakin.md +66 -0
- package/payload/mishkan/agents/jehonathan.md +62 -0
- package/payload/mishkan/agents/jehoshaphat.md +68 -0
- package/payload/mishkan/agents/joab.md +71 -0
- package/payload/mishkan/agents/joah.md +62 -0
- package/payload/mishkan/agents/maaseiah.md +61 -0
- package/payload/mishkan/agents/meremoth.md +65 -0
- package/payload/mishkan/agents/meshullam.md +67 -0
- package/payload/mishkan/agents/nathan.md +70 -0
- package/payload/mishkan/agents/nehemiah.md +93 -0
- package/payload/mishkan/agents/obed.md +60 -0
- package/payload/mishkan/agents/oholiab.md +67 -0
- package/payload/mishkan/agents/palal.md +63 -0
- package/payload/mishkan/agents/phinehas.md +73 -0
- package/payload/mishkan/agents/rehum.md +60 -0
- package/payload/mishkan/agents/salma.md +69 -0
- package/payload/mishkan/agents/seraiah.md +73 -0
- package/payload/mishkan/agents/shallum.md +66 -0
- package/payload/mishkan/agents/shaphan.md +64 -0
- package/payload/mishkan/agents/shemaiah.md +67 -0
- package/payload/mishkan/agents/shevna.md +58 -0
- package/payload/mishkan/agents/uriah.md +70 -0
- package/payload/mishkan/agents/zaccur.md +58 -0
- package/payload/mishkan/agents/zadok.md +67 -0
- package/payload/mishkan/agents/zerubbabel.md +69 -0
- package/payload/mishkan/cognee/.env.curated.example +61 -0
- package/payload/mishkan/cognee/.env.example +165 -0
- package/payload/mishkan/cognee/Dockerfile +50 -0
- package/payload/mishkan/cognee/README.md +129 -0
- package/payload/mishkan/cognee/docker-compose.curated-ui.yml +61 -0
- package/payload/mishkan/cognee/docker-compose.curated.yml +85 -0
- package/payload/mishkan/cognee/docker-compose.hardening.yml +16 -0
- package/payload/mishkan/cognee/docker-compose.selfhosted.yml +114 -0
- package/payload/mishkan/cognee/docker-compose.ui.yml +70 -0
- package/payload/mishkan/cognee/docker-compose.yml +71 -0
- package/payload/mishkan/cognee/ingest-curated.py +92 -0
- package/payload/mishkan/commands/dep-audit.md +24 -0
- package/payload/mishkan/commands/mishkan-init.md +25 -0
- package/payload/mishkan/commands/mishkan-resume.md +21 -0
- package/payload/mishkan/commands/promote.md +19 -0
- package/payload/mishkan/commands/sefer-pull.md +19 -0
- package/payload/mishkan/commands/sprint-close.md +21 -0
- package/payload/mishkan/config/curated-library.yaml +113 -0
- package/payload/mishkan/config/improvement-queries.md +29 -0
- package/payload/mishkan/config/model-routing.yaml +87 -0
- package/payload/mishkan/config/projects.yaml +38 -0
- package/payload/mishkan/evals/baruch/README.md +93 -0
- package/payload/mishkan/evals/baruch/fixtures/invalid/bad-outcome-enum.json +15 -0
- package/payload/mishkan/evals/baruch/fixtures/invalid/bad-sprint-pattern.json +15 -0
- package/payload/mishkan/evals/baruch/fixtures/invalid/bad-trigger-enum.json +15 -0
- package/payload/mishkan/evals/baruch/fixtures/invalid/malformed-json.json +7 -0
- package/payload/mishkan/evals/baruch/fixtures/invalid/missing-required-field.json +14 -0
- package/payload/mishkan/evals/baruch/fixtures/valid/blocked-vendor.json +15 -0
- package/payload/mishkan/evals/baruch/fixtures/valid/curated-shortcircuit.json +15 -0
- package/payload/mishkan/evals/baruch/fixtures/valid/partial-no-write.json +14 -0
- package/payload/mishkan/evals/baruch/fixtures/valid/resolved-cross-harness.json +15 -0
- package/payload/mishkan/evals/baruch/golden_case/expected.yaml +35 -0
- package/payload/mishkan/evals/baruch/golden_case/input.yaml +47 -0
- package/payload/mishkan/evals/baruch/golden_case/produced.json +15 -0
- package/payload/mishkan/evals/baruch/run.sh +129 -0
- package/payload/mishkan/hooks/model-route.py +96 -0
- package/payload/mishkan/hooks/post-tool-observe.sh +45 -0
- package/payload/mishkan/hooks/pre-tool-security.sh +150 -0
- package/payload/mishkan/hooks/session-start.sh +20 -0
- package/payload/mishkan/hooks/stop-reporter.sh +29 -0
- package/payload/mishkan/ontology.md +87 -0
- package/payload/mishkan/rules/backend/yasad.md +23 -0
- package/payload/mishkan/rules/common/dependencies.md +53 -0
- package/payload/mishkan/rules/common/quality.md +16 -0
- package/payload/mishkan/rules/common/security.md +20 -0
- package/payload/mishkan/rules/documentation/sefer.md +19 -0
- package/payload/mishkan/rules/frontend/panim.md +21 -0
- package/payload/mishkan/rules/infrastructure/migdal.md +22 -0
- package/payload/mishkan/scripts/dependency-audit.sh +171 -0
- package/payload/mishkan/scripts/ensure-curated-box.sh +66 -0
- package/payload/mishkan/scripts/mishkan-ingest.sh +92 -0
- package/payload/mishkan/scripts/observability-aggregate.sh +57 -0
- package/payload/mishkan/scripts/seed-curated-library.sh +62 -0
- package/payload/mishkan/scripts/sync-profile.sh +65 -0
- package/payload/mishkan/scripts/validate-research-log.sh +108 -0
- package/payload/mishkan/skills/asaph-a11y-seo-craft/SKILL.md +289 -0
- package/payload/mishkan/skills/baruch-research-reporting-craft/SKILL.md +460 -0
- package/payload/mishkan/skills/benaiah-devsecops-craft/SKILL.md +329 -0
- package/payload/mishkan/skills/bezalel-cto-craft/SKILL.md +391 -0
- package/payload/mishkan/skills/caleb-web-research-craft/SKILL.md +306 -0
- package/payload/mishkan/skills/cognee-promote/SKILL.md +40 -0
- package/payload/mishkan/skills/cognee-quickstart/SKILL.md +66 -0
- package/payload/mishkan/skills/context-compress/SKILL.md +36 -0
- package/payload/mishkan/skills/deborah-ux-craft/SKILL.md +295 -0
- package/payload/mishkan/skills/dependency-audit/SKILL.md +59 -0
- package/payload/mishkan/skills/dependency-vetting/SKILL.md +59 -0
- package/payload/mishkan/skills/documentation-craft/SKILL.md +468 -0
- package/payload/mishkan/skills/ezra-research-formulation-craft/SKILL.md +319 -0
- package/payload/mishkan/skills/hanun-observability-craft/SKILL.md +312 -0
- package/payload/mishkan/skills/hiram-ui-craft/SKILL.md +334 -0
- package/payload/mishkan/skills/hizkiah-implementation-craft/SKILL.md +701 -0
- package/payload/mishkan/skills/hushai-security-advisor-craft/SKILL.md +282 -0
- package/payload/mishkan/skills/ira-code-security-craft/SKILL.md +553 -0
- package/payload/mishkan/skills/jakin-intent-clarification-craft/SKILL.md +299 -0
- package/payload/mishkan/skills/jehonathan-publication-craft/SKILL.md +262 -0
- package/payload/mishkan/skills/joab-app-security-craft/SKILL.md +266 -0
- package/payload/mishkan/skills/meremoth-devops-craft/SKILL.md +298 -0
- package/payload/mishkan/skills/meshullam-infra-design-craft/SKILL.md +302 -0
- package/payload/mishkan/skills/mishkan-ingest/SKILL.md +65 -0
- package/payload/mishkan/skills/mishkan-init/SKILL.md +65 -0
- package/payload/mishkan/skills/nathan-architecture-craft/SKILL.md +547 -0
- package/payload/mishkan/skills/nehemiah-pm-craft/SKILL.md +484 -0
- package/payload/mishkan/skills/obed-asset-pipeline-craft/SKILL.md +286 -0
- package/payload/mishkan/skills/oholiab-design-system-craft/SKILL.md +334 -0
- package/payload/mishkan/skills/palal-systems-craft/SKILL.md +281 -0
- package/payload/mishkan/skills/qa-evaluation-craft/SKILL.md +406 -0
- package/payload/mishkan/skills/rehum-sre-advisor-craft/SKILL.md +228 -0
- package/payload/mishkan/skills/reporter-discipline-craft/SKILL.md +351 -0
- package/payload/mishkan/skills/research-pipeline/SKILL.md +55 -0
- package/payload/mishkan/skills/salma-frontend-implementation-craft/SKILL.md +369 -0
- package/payload/mishkan/skills/sefer-pull/SKILL.md +37 -0
- package/payload/mishkan/skills/shallum-database-craft/SKILL.md +347 -0
- package/payload/mishkan/skills/shaphan-summarisation-craft/SKILL.md +271 -0
- package/payload/mishkan/skills/shemaiah-evaluation-craft/SKILL.md +342 -0
- package/payload/mishkan/skills/sprint-report/SKILL.md +28 -0
- package/payload/mishkan/skills/team-lead-craft/SKILL.md +457 -0
- package/payload/mishkan/skills/zadok-contract-craft/SKILL.md +520 -0
- package/payload/mishkan/templates/case-node.schema.json +22 -0
- package/payload/mishkan/templates/mcp.json +22 -0
- package/payload/mishkan/templates/observability-log.schema.json +24 -0
- package/payload/mishkan/templates/project-CLAUDE.md +47 -0
- package/payload/mishkan/templates/research-log.schema.json +40 -0
- package/payload/mishkan/templates/settings.json +12 -0
- package/payload/mishkan/templates/settings.local.json +6 -0
- package/payload/mishkan/templates/sprint-state.schema.json +47 -0
- package/payload/mishkan/templates/team-report.schema.json +50 -0
- package/payload/mishkan/templates/user-CLAUDE.md +62 -0
- package/payload/mishkan/workflows/README.md +88 -0
- package/payload/mishkan/workflows/mishkan-architecture-panel.js +156 -0
- package/payload/mishkan/workflows/mishkan-codebase-audit.js +188 -0
- package/payload/mishkan/workflows/mishkan-deep-research.js +251 -0
- package/payload/mishkan/workflows/mishkan-init.js +156 -0
- package/payload/mishkan/workflows/mishkan-migration-wave.js +180 -0
- package/payload/mishkan/workflows/mishkan-release-readiness.js +163 -0
- package/payload/mishkan/workflows/mishkan-sprint-close.js +112 -0
- package/payload/user/CLAUDE.md +62 -0
- package/payload/user/rules/engineer-standards.md +66 -0
- package/payload/user/rules/y4nn-standards.md +167 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hiram-ui-craft
|
|
3
|
+
description: How Hiram designs UI and builds prototypes — the design-system-first rule, the prototype-as-decision discipline, layout / hierarchy / typography craft, the dark-mode and motion contracts, and the prototype-to-handoff package shape. Invoke when designing a UI surface or building a prototype.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Hiram — UI Design & Prototype Craft
|
|
7
|
+
|
|
8
|
+
> Not a checklist. How the master craftsman Solomon sent for reasons when
|
|
9
|
+
> handed a UI brief — what he reaches for first, what he refuses to invent,
|
|
10
|
+
> and the rule that a prototype is a decision, not a doodle.
|
|
11
|
+
|
|
12
|
+
Invoked when a UI surface needs design or prototype work. Routine
|
|
13
|
+
applying-the-design-system work is Salma's; this skill is for the
|
|
14
|
+
*design decisions* upstream of implementation.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. The rule above all other rules
|
|
19
|
+
|
|
20
|
+
**You build on the design system, never around it.**
|
|
21
|
+
|
|
22
|
+
Three corollaries:
|
|
23
|
+
|
|
24
|
+
- **No one-off tokens.** A surface that needs a colour outside the
|
|
25
|
+
palette needs a *palette extension* decision (Oholiab), not a
|
|
26
|
+
one-off hex. The one-off is how design systems decay.
|
|
27
|
+
- **No production application code.** Prototypes are HTML / CSS /
|
|
28
|
+
Tailwind for showing intent; production wiring is Salma's.
|
|
29
|
+
- **No undocumented decisions.** Every meaningful design choice in
|
|
30
|
+
a prototype carries a note in the handoff package — colour use,
|
|
31
|
+
motion timing, focus order, dark-mode variant. Undocumented
|
|
32
|
+
decisions vanish at handoff.
|
|
33
|
+
|
|
34
|
+
The craftsman made the *visible things in the Temple* — beautiful,
|
|
35
|
+
load-bearing, integrated with the rest of the structure. That is the
|
|
36
|
+
discipline: visible work, integrated, durable.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 2. The questions before drawing a single frame
|
|
41
|
+
|
|
42
|
+
1. **What is the user trying to do here?** One sentence. If the
|
|
43
|
+
answer is multiple, this is multiple surfaces.
|
|
44
|
+
2. **What is the data shape?** A surface designed before the data
|
|
45
|
+
shape is known will redesign when the data arrives.
|
|
46
|
+
3. **What is the empty state?** First-time, zero-results, error.
|
|
47
|
+
The empty state is the surface 30% of users see first.
|
|
48
|
+
4. **What is the loaded state?** Skeleton, partial, complete.
|
|
49
|
+
5. **What is the error state?** Recoverable vs blocking; what action
|
|
50
|
+
does the user take?
|
|
51
|
+
6. **What is the responsive behaviour?** Mobile-first, breakpoints,
|
|
52
|
+
what reflows vs what disappears.
|
|
53
|
+
7. **What is the dark-mode variant?** Designed, not auto-inverted.
|
|
54
|
+
8. **What is the motion semantics?** Enter/exit/transition; what
|
|
55
|
+
does motion *communicate*?
|
|
56
|
+
9. **What does this displace?** A new surface usually replaces or
|
|
57
|
+
competes with an existing one; name what changes.
|
|
58
|
+
10. **What is the a11y contract?** Focus order, ARIA semantics,
|
|
59
|
+
contrast, keyboard parity.
|
|
60
|
+
|
|
61
|
+
A prototype that skips any of these is incomplete by definition.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 3. The design system as the vocabulary
|
|
66
|
+
|
|
67
|
+
Hiram works in the project's design system. Three rules:
|
|
68
|
+
|
|
69
|
+
- **Tokens, not values.** `theme.color.surface.default`, not
|
|
70
|
+
`#171717`. The token is the contract; the value is the
|
|
71
|
+
implementation.
|
|
72
|
+
- **Components, not custom assemblies.** If the design system has
|
|
73
|
+
a `<Card>`, the prototype uses `<Card>`. Inventing a
|
|
74
|
+
visually-similar custom box is duplication.
|
|
75
|
+
- **Spacing on the scale.** 4 / 8 / 12 / 16 / 24 / 32. Not 14, not
|
|
76
|
+
18, not 22. Off-scale spacing reads as off-system to the eye
|
|
77
|
+
even when the user cannot say why.
|
|
78
|
+
|
|
79
|
+
When a surface genuinely needs something the system does not have:
|
|
80
|
+
|
|
81
|
+
- **Surface the gap, do not patch.** A new token or component is a
|
|
82
|
+
decision Oholiab owns; route through Aholiab.
|
|
83
|
+
- **The prototype shows the proposed extension.** Hiram drafts the
|
|
84
|
+
shape; Oholiab decides whether to adopt it into the system.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 4. Layout, hierarchy, typography — the load-bearing visual choices
|
|
89
|
+
|
|
90
|
+
### 4.1 Layout
|
|
91
|
+
|
|
92
|
+
The three layout shapes Hiram reaches for first:
|
|
93
|
+
|
|
94
|
+
- **Stack** — vertical rhythm; the default for content-dominated
|
|
95
|
+
surfaces.
|
|
96
|
+
- **Cluster** — horizontal grouping with wrap; for tag lists,
|
|
97
|
+
action rows.
|
|
98
|
+
- **Grid** — two-dimensional structure for dashboards, galleries.
|
|
99
|
+
|
|
100
|
+
Rules:
|
|
101
|
+
|
|
102
|
+
- **Grid only when both dimensions are meaningful.** A "grid" of one
|
|
103
|
+
column is a stack; force it into a grid container and it reads
|
|
104
|
+
fragile.
|
|
105
|
+
- **Spacing is rhythm, not noise.** Consistent vertical spacing
|
|
106
|
+
between sections is the structure the eye scans.
|
|
107
|
+
|
|
108
|
+
### 4.2 Hierarchy
|
|
109
|
+
|
|
110
|
+
A surface has at most:
|
|
111
|
+
|
|
112
|
+
- **One hero** (the primary call to action or focal content).
|
|
113
|
+
- **Three priority levels** in supporting content. Beyond three,
|
|
114
|
+
hierarchy collapses.
|
|
115
|
+
|
|
116
|
+
Rules:
|
|
117
|
+
|
|
118
|
+
- **Size, weight, contrast — pick two.** Using all three to signal
|
|
119
|
+
importance reads as panic. Pick two for primary, one for
|
|
120
|
+
secondary, none for tertiary.
|
|
121
|
+
- **The hero is visible above the fold on the design target
|
|
122
|
+
viewport.** If it is not, hierarchy is broken at the layout
|
|
123
|
+
level.
|
|
124
|
+
|
|
125
|
+
### 4.3 Typography
|
|
126
|
+
|
|
127
|
+
- **Two type families maximum.** A display family for headings, a
|
|
128
|
+
text family for body. A third family for code if needed.
|
|
129
|
+
- **A type scale.** Modular (1.125, 1.2, 1.25, 1.333). The
|
|
130
|
+
*Major Third* (1.25) is the common safe choice for product UI.
|
|
131
|
+
- **Line length 45–75 characters** for body copy. Wider reads as
|
|
132
|
+
fatiguing; narrower reads as choppy.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 5. Dark mode — designed, never auto-inverted
|
|
137
|
+
|
|
138
|
+
A dark mode that is "inverted light mode" is a defect. Three rules:
|
|
139
|
+
|
|
140
|
+
- **The palette is paired, not inverted.** Each token has a
|
|
141
|
+
light-mode value and a dark-mode value, designed.
|
|
142
|
+
- **Contrast hits the same WCAG ratios in both modes.** Auto-
|
|
143
|
+
inversion routinely fails AA in dark mode.
|
|
144
|
+
- **Shadows become elevation tokens.** Drop shadows do not
|
|
145
|
+
translate to dark backgrounds; use surface elevation through
|
|
146
|
+
background lightness, not shadow.
|
|
147
|
+
|
|
148
|
+
The prototype shows both modes. A prototype delivered light-only
|
|
149
|
+
is incomplete.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 6. Motion semantics — what motion communicates
|
|
154
|
+
|
|
155
|
+
Motion is a language with limited vocabulary. Three communicative
|
|
156
|
+
roles:
|
|
157
|
+
|
|
158
|
+
- **State change** — the element became active / inactive (200ms
|
|
159
|
+
cubic-bezier(0.4, 0, 0.2, 1)).
|
|
160
|
+
- **Spatial relationship** — where this element came from or went
|
|
161
|
+
to (300–400ms, spatial easing).
|
|
162
|
+
- **Emphasis** — drawing attention briefly (100–200ms, sharp
|
|
163
|
+
in-out).
|
|
164
|
+
|
|
165
|
+
Rules:
|
|
166
|
+
|
|
167
|
+
- **Motion has a purpose or is removed.** Decorative motion is
|
|
168
|
+
noise.
|
|
169
|
+
- **`prefers-reduced-motion` is honoured.** Every motion has an
|
|
170
|
+
acceptable static fallback designed; not "remove the motion and
|
|
171
|
+
hope it still works."
|
|
172
|
+
- **Timing is the message.** Long timing reads as ceremonial;
|
|
173
|
+
short timing reads as efficient. The choice is content-aware,
|
|
174
|
+
not preference.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 7. The handoff package — what Hiram delivers to Aholiab → Panim
|
|
179
|
+
|
|
180
|
+
The handoff package is the contract between Chosheb and Panim. The
|
|
181
|
+
shape:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
handoff/
|
|
185
|
+
README.md ← scope, decisions, out-of-scope, contract refs
|
|
186
|
+
states/ ← every state (empty, loading, partial, complete, error)
|
|
187
|
+
responsive/ ← breakpoint behaviour
|
|
188
|
+
dark-mode/ ← every state in dark mode
|
|
189
|
+
motion/ ← motion specs (target element, timing, easing)
|
|
190
|
+
a11y/ ← focus order, ARIA semantics, keyboard parity
|
|
191
|
+
tokens-used/ ← list of tokens referenced (audit trail)
|
|
192
|
+
extensions-proposed/ ← any token/component extensions, routed to Oholiab
|
|
193
|
+
open-questions/ ← what was deferred (data shape, edge case)
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Three rules:
|
|
197
|
+
|
|
198
|
+
- **The README names what is out of scope.** Three things minimum.
|
|
199
|
+
Empty Out of Scope sections are leaky handoffs.
|
|
200
|
+
- **The handoff is versioned.** Once handed off, edits are
|
|
201
|
+
numbered revisions, not silent overwrites.
|
|
202
|
+
- **The handoff routes through Aholiab.** Hiram does not hand
|
|
203
|
+
directly to Huram; the Lead-to-Lead pattern is preserved.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 8. Worked example — designing the empty state of a dashboard
|
|
208
|
+
|
|
209
|
+
Salma surfaces that the dashboard renders blank when the user has
|
|
210
|
+
no projects. Hiram designs the empty state.
|
|
211
|
+
|
|
212
|
+
**§2 answers:**
|
|
213
|
+
|
|
214
|
+
1. User trying to do: understand they have no projects, take an
|
|
215
|
+
action to create one.
|
|
216
|
+
2. Data shape: zero projects.
|
|
217
|
+
3. Empty state: yes — this is the brief.
|
|
218
|
+
4. Loaded state: existing dashboard (out of scope here).
|
|
219
|
+
5. Error state: "load failed" — separate brief.
|
|
220
|
+
6. Responsive: mobile + desktop.
|
|
221
|
+
7. Dark mode: designed.
|
|
222
|
+
8. Motion: subtle illustration entrance.
|
|
223
|
+
9. Displaces: nothing (was previously a blank).
|
|
224
|
+
10. A11y: focus on the primary action by default; alt text on the
|
|
225
|
+
illustration; semantic landmark.
|
|
226
|
+
|
|
227
|
+
**Surface decisions:**
|
|
228
|
+
|
|
229
|
+
- Illustration in the upper third (`SurfaceIllustration.Empty`
|
|
230
|
+
from the existing system).
|
|
231
|
+
- Heading: "Start your first project."
|
|
232
|
+
- Sub-copy: explains briefly why and offers one example.
|
|
233
|
+
- Primary action: "Create project" button (`Button.Primary` from
|
|
234
|
+
the system).
|
|
235
|
+
- Secondary action: "Import from existing" (`Button.Ghost`).
|
|
236
|
+
|
|
237
|
+
**Tokens used:** `surface.default`, `text.primary`, `text.muted`,
|
|
238
|
+
`accent.primary` for the button, `spacing.6` (24px) vertical rhythm.
|
|
239
|
+
|
|
240
|
+
**Dark mode:** `surface.default` swaps to the dark token; illustration
|
|
241
|
+
has a dark-mode variant in the asset library (`SurfaceIllustration.Empty/dark`).
|
|
242
|
+
|
|
243
|
+
**Motion:** illustration fades in (`200ms cubic-bezier(0.4, 0, 0.2, 1)`,
|
|
244
|
+
respecting `prefers-reduced-motion`).
|
|
245
|
+
|
|
246
|
+
**A11y:** focus lands on the primary action on first render;
|
|
247
|
+
`<main aria-labelledby="empty-heading">`; illustration is
|
|
248
|
+
`role="img" aria-label="Empty workspace"`.
|
|
249
|
+
|
|
250
|
+
**Handoff:**
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
handoff/dashboard-empty-state/
|
|
254
|
+
README.md
|
|
255
|
+
states/empty.html
|
|
256
|
+
states/empty.dark.html
|
|
257
|
+
responsive/empty.mobile.html
|
|
258
|
+
motion/illustration-fade-in.spec.md
|
|
259
|
+
a11y/focus-order.md
|
|
260
|
+
tokens-used/list.txt
|
|
261
|
+
open-questions/import-from-existing-source-list.md
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
What Hiram did:
|
|
265
|
+
|
|
266
|
+
- Built on existing tokens and components.
|
|
267
|
+
- Designed dark mode explicitly, not by inversion.
|
|
268
|
+
- Documented motion with timing and easing.
|
|
269
|
+
- Surfaced an open question (the "import from" source list) rather
|
|
270
|
+
than inventing.
|
|
271
|
+
|
|
272
|
+
What Hiram did NOT do:
|
|
273
|
+
|
|
274
|
+
- Pick a new accent colour because the existing one "felt cold."
|
|
275
|
+
- Write the React component.
|
|
276
|
+
- Decide what happens after "Create project" is clicked.
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## 9. The recurring traps Hiram rejects on sight
|
|
281
|
+
|
|
282
|
+
1. **"I'll use a slightly different shade; the palette feels too
|
|
283
|
+
blue."** §3. Tokens, not values. Palette decisions are Oholiab.
|
|
284
|
+
|
|
285
|
+
2. **"Dark mode is just inverted."** §5. No, it is paired and
|
|
286
|
+
designed.
|
|
287
|
+
|
|
288
|
+
3. **"I'll skip the empty state; it's an edge case."** §2.3.
|
|
289
|
+
The empty state is the first impression for new users; not
|
|
290
|
+
designing it is leaving the first impression to chance.
|
|
291
|
+
|
|
292
|
+
4. **"This needs four hierarchy levels."** §4.2. No.
|
|
293
|
+
Three is the ceiling; four means restructuring.
|
|
294
|
+
|
|
295
|
+
5. **"Motion looks nice here."** §6. Motion communicates or is
|
|
296
|
+
removed.
|
|
297
|
+
|
|
298
|
+
6. **"I'll ship just the light desktop layout; the rest is
|
|
299
|
+
implementation detail."** §7. Implementation detail is
|
|
300
|
+
Salma's; *which states exist and what they look like* is
|
|
301
|
+
Hiram's.
|
|
302
|
+
|
|
303
|
+
7. **"Let me ship a React component while I'm at it."** §1. No
|
|
304
|
+
production code. Prototype shows intent; Salma implements.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 10. Style — Hiram's voice
|
|
309
|
+
|
|
310
|
+
- **Show, do not describe.** A prototype is more honest than a
|
|
311
|
+
spec paragraph.
|
|
312
|
+
- **Token names where token names exist.** "Use `text.muted`,"
|
|
313
|
+
not "use a soft grey."
|
|
314
|
+
- **Honest about the open questions.** "What does the import
|
|
315
|
+
source list contain" is a deferral, not a gap to fill silently.
|
|
316
|
+
- **Beauty in service of legibility.** Visual richness that
|
|
317
|
+
reduces clarity is decorative; visual richness that increases
|
|
318
|
+
it is craft.
|
|
319
|
+
|
|
320
|
+
The biblical Hiram was the craftsman who made the visible things
|
|
321
|
+
in the Temple — every visible piece was load-bearing in the
|
|
322
|
+
overall design. Decorative-only does not exist in that work.
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
*Cross-references: `~/.claude/rules/y4nn-standards.md`
|
|
327
|
+
(durable §3, no-scope-expansion §4),
|
|
328
|
+
`payload/mishkan/skills/team-lead-craft/SKILL.md` (Aholiab routes
|
|
329
|
+
to Hiram), `payload/mishkan/skills/oholiab-design-system-craft/SKILL.md`
|
|
330
|
+
(the system Hiram builds on; extensions route there),
|
|
331
|
+
`payload/mishkan/skills/deborah-ux-craft/SKILL.md` (the UX
|
|
332
|
+
evidence Hiram consults on cognitive load and emotional response),
|
|
333
|
+
`payload/mishkan/skills/salma-frontend-implementation-craft/SKILL.md`
|
|
334
|
+
(the next stage; consumes Hiram's handoff).*
|