sheleg-design-skill 1.3.4 → 1.6.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/CHANGELOG.md CHANGED
@@ -4,6 +4,263 @@ All notable changes to this project are documented in this file. The format
4
4
  follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions
5
5
  follow [SemVer](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.6.0] - 2026-08-05
8
+
9
+ The harvest of a 41-skill audit of the design skills installed on this machine.
10
+ The finding was narrow and repeated everywhere: the skill specified *what a
11
+ thing looks like* with real rigour and left *how much, how fast, and whether at
12
+ all* to whoever happened to be typing. Three of those four are now numeric, and
13
+ two of them are checked by a script.
14
+
15
+ Landed on top of 1.5.0, which shipped the `field-notes` pack from a concurrent
16
+ run in the same working copy. That pack was already written against the widened
17
+ contract below, so the two runs converged rather than collided — it is the first
18
+ and so far only pack on the thirteen-heading contract.
19
+
20
+ ### Added
21
+
22
+ - **`MOTION_DOCTRINE.md`** — the missing half of the motion story.
23
+ `SHELEG_DESIGN.md` says how motion is built; this says whether to build it.
24
+ Frequency decides first, and it overrules taste: anything a user meets a
25
+ hundred times a day does not animate, ever. Then the easing tree with
26
+ `ease-in` banned in UI and the reason stated, three named curves, a duration
27
+ table with a 300 ms ceiling, springs in Apple's notation, and interruptibility
28
+ as the actual argument for reaching for one. Then the forms that are defects
29
+ rather than preferences — scroll listeners, continuous input held in component
30
+ state, blur and grain on scrolling containers, easing under `scrub`,
31
+ `useEffect` where `useGSAP` belongs, and layout transforms silently erased by
32
+ animated ones. Closes on anti-drift: the tokens are right and the built page is
33
+ generic anyway, which happens at application time and so is named there.
34
+
35
+ - **Three calibration dials** — `DESIGN_VARIANCE`, `MOTION_INTENSITY`,
36
+ `VISUAL_DENSITY`, baseline `7 / 5 / 4`, read off the brief from a table. A
37
+ pack answers *which register*; it never answered *how far*, which is how a
38
+ regulated insurer and a design studio came out of one pack looking alike. The
39
+ dials are deliberately weak where the pack is strong: no dial invents a
40
+ colour, a face or a radius, and `MOTION_INTENSITY` sits **under** the
41
+ frequency table rather than over it.
42
+
43
+ - **A widened pack contract — nine headings to thirteen.** `Components`,
44
+ `Hero`, `Responsive` and `Signature element`. The packs were precise about
45
+ colour and motion and then went quiet exactly where implementations drift:
46
+ per-component states, the opening viewport, collapse behaviour, and the one
47
+ element a page is remembered by. The skeleton also now teaches concentric
48
+ radius arithmetic, a `Not for` line in `Register`, and that an origin nobody
49
+ can re-read is decorative.
50
+
51
+ - **`test/validate_palette.py`** — the colour part is computable, so it is
52
+ computed. Claimed contrast ratios are re-derived from the hex and compared,
53
+ WCAG floors are enforced, and semantic colours are checked for separation in
54
+ OKLab under protanopia, deuteranopia and tritanopia. A pack may sit under the
55
+ floor only if it states out loud that colour is never the only carrier.
56
+
57
+ - **`test/sloplint.py`** — the skill is held to its own bans. The token layers
58
+ and every fenced example are read for `100vh`, scroll listeners, bare
59
+ `ease-in`, transitions on layout properties and pure black fields; and the
60
+ tables the docs promise are asserted by string, so a rule cannot be deleted
61
+ without failing the build. Both scripts ship a `--self-test` that watches every
62
+ check fail against a planted defect — a green from a check nobody has seen say
63
+ no is not evidence.
64
+
65
+ - **A six-layer scene depth model**, a **parameter handoff to the built-in
66
+ `dataviz` skill** instead of duplicating it, and a **`?variant=` procedure**
67
+ for choosing between packs by mounting them on a populated page rather than
68
+ arguing about them.
69
+
70
+ - **The three generated looks that are defaults rather than decisions** —
71
+ recorded so a page that lands on one has to say whether that was a measurement
72
+ or the default talking.
73
+
74
+ ### Changed
75
+
76
+ - **The pack section gate is all-or-nothing.** The nine original headings stay
77
+ required; adopt one of the widened four and all four are owed. The six packs
78
+ that shipped before the widening stay valid on nine — backfilling them
79
+ honestly needs re-reading each live reference, and three record a product name
80
+ where an address belongs, so they cannot be re-read at all. Filling those
81
+ sections from the token layer instead would be inventing values with a
82
+ citation attached, which is the failure the pack layer exists to prevent. The
83
+ rule closes the gap either way: no pack can be half-widened, so a new pack
84
+ cannot copy the thirteen-heading skeleton, keep the cheap nine and pass.
85
+ - `npm test` now runs three gates, not one. `npm run selftest` runs the planted
86
+ defects.
87
+ - `package.json` described "three locked style packs" while six shipped.
88
+
89
+ ### Not shipped, deliberately
90
+
91
+ - **An eighth `industrial-brutalist` pack.** The register is real and the set
92
+ lacks it, but the only description available carries a synthesised palette,
93
+ not one measured off a production site. Held rather than authored.
94
+ - **A backfill of the six existing packs onto the widened contract.** Same
95
+ reason, from the other direction: three of them cannot be re-read.
96
+
97
+ ## [1.5.0] - 2026-08-04
98
+
99
+ The register the skill was missing for its own audience: a developer tool that
100
+ does not live on a dark console. Six packs could dress a landing page, a
101
+ dashboard, a deck and two kinds of consumer health, and none of them had an
102
+ answer for open-source software sold on *being checkable* — which is most of
103
+ the software the people using this skill actually build.
104
+
105
+ ### Added
106
+
107
+ - **Seventh style pack: `field-notes`** — extracted from **graphify.com**
108
+ (2026) by reading its live computed styles: 92 declared custom properties,
109
+ the served `@font-face` set, every authored rule pulled out of the CSSOM, and
110
+ a contrast pass over all 38 colour pairs in the system. Warm off-white paper
111
+ with a green cast (`#F8F7F0`), near-black green-cast ink (`#16211B`, 15.4:1),
112
+ one rust accent (`#9A3F28`), and a complete dark twin.
113
+
114
+ Its defining composition is what separates it from every warm pack already
115
+ here: **the page is one continuous sheet ruled by a `1px` hairline.** Ten of
116
+ the reference's sixteen sections are divided by nothing but that line; three
117
+ add a 40% wash. Where `orchard` stacks discrete slabs and `atrium` runs a
118
+ continuous field that changes layout, this one draws a rule and keeps going.
119
+
120
+ The hero is the other half of the idea: not a dark band but a **dawn** —
121
+ eight stops from `#062A22` to the exact paper colour, so the dark has no
122
+ edge. Over it, an inline `feTurbulence` grain at `baseFrequency 0.82`, a
123
+ radial vignette, and an ambient layer that is **notation rather than
124
+ particles**: mathematical glyphs at 14% opacity, one at a time flipping to
125
+ the verified hue.
126
+
127
+ It also carries the two devices most worth stealing. **The numbered eyebrow**
128
+ — `〉 HOW IT WORKS [03/09]`, built from `::before`/`::after` on a `data-n`
129
+ attribute — makes a marketing page into a document with a table of contents.
130
+ And **printer's crop marks** at the four corners: eight 1px gradient arms,
131
+ `inset: 14px`, ink at 30%, desktop only. Both cost nothing and both state the
132
+ thesis that the page is a printed record.
133
+
134
+ Elevation is a **ring** (`0 0 0 1px var(--line)`), not a shadow; radii are a
135
+ proportional ramp off one `--radius`, so a hardcoded `12px` is banned; and
136
+ motion is two eases doing two jobs — `.15s` `cubic-bezier(.4,0,.2,1)` for
137
+ control state, `.5s` `cubic-bezier(.22,1,.36,1)` for scroll entry — with one
138
+ rule on top: **only the verified hue ever animates colour.** The rust never
139
+ moves, because a brand that animates stops reading as an identity and starts
140
+ reading as a status.
141
+
142
+ Four corrections to the reference ship with it, each measured. Its hero
143
+ accent phrase — the single most prominent piece of text on the site — runs
144
+ the light brand over the gradient at **2.29:1** at the top and **1.41:1** in
145
+ the middle; the pack adds `--brand-on-dark` `#CF7A52` (**4.82:1**) and bans
146
+ the other. Its `--verify` green is 3.2:1 on paper and its own
147
+ `--verify-foreground: #fff` is 3.4:1 on the green, so both are fills and the
148
+ labels take `-ink`. It sets `color-scheme` nowhere despite a complete dark
149
+ theme — the same trap that bit `workbench`. And it paints three unrelated
150
+ dark palettes (warm-brown theme, forest bands, navy terminal) plus an app
151
+ layer whose neutrals drift browner than its page layer and whose ring is a
152
+ violet used nowhere else; the pack reconciles all of it to the forest family
153
+ and the page's own neutrals.
154
+
155
+ The pack ships that app layer deliberately, with a routing rule rather than a
156
+ turf war: `workbench` stays the default for neutral product UI, which should
157
+ disappear; `field-notes` is for a product whose console must read as the same
158
+ paper as its site.
159
+
160
+ - **`AI_PRODUCT_PATTERNS.md` gains the provenance pattern** (§4), promoted out
161
+ of the pack because it is the reference's one genuinely transferable
162
+ invention and a direct extension of the file's existing *honest state* rule:
163
+ **label the part, not the whole.** A single confidence number on a mixed
164
+ answer hides exactly the clause the reader needed to check, so the pattern
165
+ attaches a small set of named states — `[EXTRACTED]` · `[INFERRED]` ·
166
+ `[AMBIGUOUS]` — inline to the span each one qualifies, with three tests for
167
+ whether it is honest: every state must be reachable, every label must derive
168
+ from something real, and if you cannot say which words a state covers you do
169
+ not know it well enough to show it. Any pack can implement it on three hues.
170
+
171
+ - **Test scenario T13** — the developer register **and** the fork against
172
+ `instrument-console`, run as two prompts in separate contexts. The pack is
173
+ only worth its row if an agent can tell "this product has a source" from
174
+ "this product has a dial", so a pass requires both branches: one that must
175
+ select `field-notes`, one that must stay on the dark console.
176
+
177
+ ### Changed
178
+
179
+ - `SKILL.md`, `README.md`, `bin/cli.js`, `install.sh` and the Cursor rule all
180
+ learn the seventh pack; the CLI's help and the README's file table stop
181
+ saying "six".
182
+
183
+ ## [1.4.0] - 2026-08-03
184
+
185
+ Two packs for the warm consumer register, extracted from two production sites
186
+ that solve the same brief in opposite ways — one premium and editorial, one
187
+ friendly and modular. Between them they replace the reflex a generated wellness
188
+ page falls into (a gradient, three cards, a stock photo of someone stretching).
189
+
190
+ ### Added
191
+
192
+ - **Fifth style pack: `atrium`** — the warm consumer register, extracted from
193
+ **functionhealth.com** (2026) by reading its live token layer and computed
194
+ styles. The skill could already do dark-technical, editorial, product UI and
195
+ decks; it had no answer for *premium consumer health* — the page that has to
196
+ land a serious clinical claim without a sterile surface anywhere on it.
197
+
198
+ What it encodes: **one continuous cream field with no dark bands** (sections
199
+ are separated by a 48→99px rhythm and a change of layout, never by flipping
200
+ the background — the reflex that makes generated pages read as a stack of
201
+ slabs); a single terracotta accent `#B05A36`; a serif that ships **one
202
+ weight, 300**, set at `line-height: 0.9`, whose entire emphasis vocabulary is
203
+ *one italic accent phrase* per heading; a sans with only 300 and 600 in it;
204
+ mono reserved for exactly one component; a fully fluid `clamp()` scale keyed
205
+ to a single 23.5rem→90rem band, so the page resizes as one object; hairline
206
+ and cream-on-cream steps instead of shadows, with three shadows that each
207
+ have one job; and `999px` on everything clickable.
208
+
209
+ Its signature motif is the **fluted-glass hero**: a WebGL shader refracting
210
+ photography through reeded-glass ribs, shipped with the real numbers (82.8
211
+ ribs at `0.36rad`, amplitude `0.0255`, feather `0.63`, a 7.2s reveal cycle,
212
+ the ink scrim at 70%) over a still-image fallback. Its lifecycle is the pack's
213
+ most useful lesson: context-lost, tab-hidden, reduced-motion and no-WebGL are
214
+ four branches that ship in the same commit as the effect.
215
+
216
+ It also promotes something the reference does that most sites do not: **every
217
+ autonomous motion carries a visible `PAUSE MOTION` control**, and the pack
218
+ bans shipping one without it — `prefers-reduced-motion` alone does not
219
+ discharge the obligation.
220
+
221
+ Three measured contrast traps are carried as Gotchas rather than left for an
222
+ audit: the accent is AA on the field (4.6:1) but **fails on the cream surface**
223
+ (4.2:1); `--good`/`--info` are fills at 2.1:1 and 3.4:1 and may never be text;
224
+ and the hairline is 1.6:1 — decorative strength, not affordance strength, so
225
+ controls need `--line-strong`, `--line-ink` or `--accent` instead.
226
+ - **Sixth style pack: `orchard`** — the same buyer, the opposite voice,
227
+ extracted from **gutgutgoose.com** (2026). Where `atrium` is one continuous
228
+ field, `orchard` is **a stack of rounded slabs**: every section is a card with
229
+ its own fill (oat, sage, cacao), no two adjacent slabs repeat, and the field
230
+ shows around all of them. Its whole layout rhythm is four numbers — `64px 24px`
231
+ slab padding, `44px` between blocks, `55px` between slabs, `36px` card padding.
232
+
233
+ Three colours with fixed jobs — oat is the paper, sage is the brand, candy
234
+ orange is the verb — and the pack's most useful rule is that **two of them are
235
+ not text colours**. A rounded geometric display at Medium carries all
236
+ hierarchy, so body weight never goes above 500; the price is deliberately set
237
+ in the body face, because a rounded display numeral reads as branding and a
238
+ price has to read as a fact.
239
+
240
+ Its signature material is **light, not shadow**: the "candy pill" is a flat
241
+ fill wearing two inset white hairlines (`.8` top, `.35` bottom) plus an
242
+ ambient glow **in the button's own hue** — the only real drop shadow in the
243
+ system. Its one cinematic move is a **word-by-word scrubbed headline** (opacity
244
+ only, ~12% of hero scroll per word) beside a sticky visual column, and that is
245
+ the entire motion budget.
246
+
247
+ The reference is strong on composition and weak on contrast, so the pack
248
+ carries the three measured failures with fixes from inside its own palette:
249
+ the CTA label is **2.8:1** (white on orange) and must use the cacao ink for
250
+ **5.6:1**; body copy on the sage slab is **3.4:1** — and oat on sage is
251
+ **2.96:1**, under even the large-text floor — so small text moves to
252
+ `--primary-deep` at **4.9:1**; and the 60% ink is **4.1:1** on oat, a caption
253
+ colour only. It also ships the `prefers-reduced-motion` branch the reference
254
+ has nowhere on the site.
255
+ - `scenarios.md` gains T11 and T12 for the two consumer registers.
256
+
257
+ ### Changed
258
+
259
+ - README, `SKILL.md`, `bin/cli.js`, `install.sh` and the standalone Cursor rule
260
+ route and ship both new packs; the stale "three style packs" counts in the
261
+ README are corrected to six, and the Cursor rule — which had listed only three
262
+ packs and never gained `briefing-room` — now names all six.
263
+
7
264
  ## [1.3.4] - 2026-07-30
8
265
 
9
266
  ### Added
package/README.md CHANGED
@@ -10,7 +10,7 @@ nothing. Ask it for a dashboard and you get a different flavor of the same
10
10
  problem — invented colors, six accent hues, dark mode retrofitted later.
11
11
 
12
12
  This skill is the taste layer. It gives a coding agent **one motion
13
- methodology** for cinematic, scroll-driven pages and **three locked style
13
+ methodology** for cinematic, scroll-driven pages and **six locked style
14
14
  packs** with ready-made design tokens, so what it builds reads as one system
15
15
  instead of a pile of effects.
16
16
 
@@ -46,6 +46,9 @@ voice is the timeline and slides therefore never animate).
46
46
  | `editorial-luxury` | warm cream + espresso ink, sage accent, Fraunces/Newsreader, dossier motifs | editorial / research / premium B2B |
47
47
  | `workbench` | neutral grays, borders as elevation, one blue accent, mono data, light + dark twins | dashboards, admin, internal & dev tools |
48
48
  | `briefing-room` | dark 16:9 deck: one blue hue top to bottom (OKLCH), mono slide furniture, 1-bit dithered art, claims as titles | investor & board decks, technical briefings, talks published as a page |
49
+ | `atrium` | warm cream daylight field with no dark bands, one terracotta accent, light serif with italic asides, fluted-glass hero over photography | consumer health, longevity & diagnostics, wellness, premium care, high-trust DTC |
50
+ | `orchard` | warm oat field of rounded slabs, sage brand + one candy-orange action, rounded geometric display, soft-3D pills built from inset light | friendly consumer biotech, DTC wellness, testing kits & supplements |
51
+ | `field-notes` | warm green-cast paper ruled by hairlines, one rust accent, a hero that dissolves into the page instead of ending, numbered mono eyebrows, crop marks, colour that encodes how a claim is known | open-source & developer tools sold on auditability — code intelligence, provenance, evals, agent memory |
49
52
 
50
53
  Each pack locks palette, type, texture, motion tokens, signature motifs and
51
54
  bans — and ships a `tokens/<pack>.css` to copy verbatim, so the agent never
@@ -114,7 +117,7 @@ skills.
114
117
  | `SHELEG_DESIGN.md` | The full reference: architecture, layer-by-layer mechanics with code, the exact morph math, the DOM↔WebGL projection bridge, a build-from-scratch recipe, and why each piece works |
115
118
  | `FIGMA_BRIDGE.md` | The design↔code contract: how a pack's tokens map onto Figma variable collections and modes, how to implement a design without importing raw values, and what cannot cross the border |
116
119
  | `AI_PRODUCT_PATTERNS.md` | The surfaces a model drives: the five states of a call, streaming instead of spinners, latency, provenance and uncertainty, agent confirmations, and the bans that keep it honest |
117
- | `styles/*.md` | The three style packs — palette, type, texture, motion tokens, motifs, bans, and the traps each one carries |
120
+ | `styles/*.md` | The seven style packs — palette, type, texture, motion tokens, motifs, bans, and the traps each one carries |
118
121
  | `styles/tokens/*.css` | The ready-made token layer per pack, copied verbatim instead of transcribed (workbench ships a light `:root` plus a `data-theme="dark"` twin) |
119
122
  | `styles/STYLE_PACK_TEMPLATE.md` | The pack contract as a skeleton, so a new style is authored against the same headings rather than improvised |
120
123
 
@@ -211,7 +214,7 @@ and the [Code of Conduct](./CODE_OF_CONDUCT.md). To report a vulnerability, see
211
214
 
212
215
  Built by ssheleg — [sshlg.me](https://sshlg.me)
213
216
 
214
- - X / Twitter — [@fuck_this_year](https://x.com/fuck_this_year)
217
+ - X / Twitter — [@sshlg93](https://x.com/sshlg93)
215
218
  - Telegram — [@sshlg](https://t.me/sshlg)
216
219
 
217
220
  Part of the [ssheleg skill family](https://github.com/ssheleg/sshlg-skills):
package/bin/cli.js CHANGED
@@ -115,10 +115,12 @@ ${c("bold", "What it installs")}
115
115
  SHELEG_DESIGN.md the full reference (architecture, recipes, why it works)
116
116
  FIGMA_BRIDGE.md the design↔code contract (tokens ⇄ Figma variables)
117
117
  AI_PRODUCT_PATTERNS.md chat / agent / streaming surfaces (honest state)
118
- styles/ four style packs — instrument-console (dark console),
118
+ styles/ seven style packs — instrument-console (dark console),
119
119
  editorial-luxury (warm editorial), workbench (light/dark
120
- product UI), briefing-room (dark 16:9 presentation deck)
121
- plus a ready-made token CSS per pack and
120
+ product UI), briefing-room (dark 16:9 presentation deck),
121
+ atrium (warm cream consumer health), orchard (friendly
122
+ consumer biotech), field-notes (warm paper dev tools) —
123
+ plus a ready-made token CSS per pack and
122
124
  STYLE_PACK_TEMPLATE.md for authoring more
123
125
  `);
124
126
  }
@@ -192,7 +194,7 @@ function main() {
192
194
  `\n${c("green", "✓")} ${c("bold", "SHELEG Design")} installed to ${c("blue", rel + "/")}\n` +
193
195
  ` ${c("dim", "SKILL.md")} the agent skill\n` +
194
196
  ` ${c("dim", "SHELEG_DESIGN.md")} the full reference\n` +
195
- ` ${c("dim", "styles/")} style packs + token CSS (instrument-console / editorial-luxury / workbench / briefing-room)\n\n` +
197
+ ` ${c("dim", "styles/")} style packs + token CSS (instrument-console / editorial-luxury / workbench / briefing-room / atrium / orchard / field-notes)\n\n` +
196
198
  `Your Cursor / Claude agent can now discover the skill and build\n` +
197
199
  `cinematic, scroll-driven pages — or style product UI (dashboards,\n` +
198
200
  `admin, internal tools) from the workbench pack — on its principles.\n\n` +
@@ -12,8 +12,13 @@ not from many animations. If the project has the full skill installed
12
12
  and the chosen style pack in `styles/` first (instrument-console — dark
13
13
  console; editorial-luxury — warm editorial; workbench — quiet light/dark
14
14
  product UI for dashboards and tools, used standalone without the cinematic
15
- motion layer); otherwise follow the contract below (self-contained on
16
- purpose).
15
+ motion layer; briefing-room dark 16:9 presentation deck, standalone, slides
16
+ never animate; atrium — warm cream consumer-health field, one terracotta
17
+ accent, fluted-glass hero; orchard — friendly consumer biotech, oat slabs,
18
+ sage brand and one candy-orange action; field-notes — open-source developer
19
+ tools on warm green-cast paper ruled by hairlines, one rust accent, a hero
20
+ that dissolves into the page, and colour that encodes how a claim is known);
21
+ otherwise follow the contract below (self-contained on purpose).
17
22
 
18
23
  ## Five principles, in order
19
24
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sheleg-design-skill",
3
- "version": "1.3.4",
4
- "description": "Design taste as an installable agent skill. Cinematic scroll-driven landing pages built on one scroll clock and layered degrade-to-calm motion, plus three locked style packs with ready-made design tokens — instrument-console (dark), editorial-luxury (warm), workbench (light/dark product UI for dashboards, admin and dev tools). Works with Cursor, Claude Code and any agent that reads a SKILL.md.",
3
+ "version": "1.6.0",
4
+ "description": "Design taste as an installable agent skill. Cinematic scroll-driven landing pages built on one scroll clock and layered degrade-to-calm motion, a motion doctrine that decides whether to animate before it decides how, three calibration dials, and seven locked style packs with ready-made design tokens — instrument-console, editorial-luxury, workbench, briefing-room, atrium, orchard and field-notes. Colour and slop gates run as scripts, not opinions. Works with Cursor, Claude Code and any agent that reads a SKILL.md.",
5
5
  "bin": {
6
6
  "sheleg-design-skill": "bin/cli.js"
7
7
  },
@@ -18,9 +18,12 @@
18
18
  "node": ">=16"
19
19
  },
20
20
  "scripts": {
21
- "test": "python3 test/validate.py && node --check bin/cli.js",
22
- "validate": "python3 test/validate.py",
23
- "smoke": "node bin/cli.js --help"
21
+ "test": "python3 test/validate.py && python3 test/validate_palette.py && python3 test/sloplint.py && node --check bin/cli.js",
22
+ "validate": "python3 test/validate.py && python3 test/validate_palette.py && python3 test/sloplint.py",
23
+ "smoke": "node bin/cli.js --help",
24
+ "palette": "python3 test/validate_palette.py",
25
+ "sloplint": "python3 test/sloplint.py",
26
+ "selftest": "python3 test/validate_palette.py --self-test && python3 test/sloplint.py --self-test"
24
27
  },
25
28
  "keywords": [
26
29
  "skill",
@@ -39,7 +42,10 @@
39
42
  "landing-page",
40
43
  "sheleg"
41
44
  ],
42
- "author": "ssheleg",
45
+ "author": {
46
+ "name": "ssheleg",
47
+ "url": "https://x.com/sshlg93"
48
+ },
43
49
  "license": "MIT",
44
50
  "repository": {
45
51
  "type": "git",
@@ -2,9 +2,10 @@
2
2
  "name": "sheleg-design",
3
3
  "displayName": "SHELEG Design",
4
4
  "description": "SHELEG Design methodology: cinematic scroll-driven landing pages (single scroll clock, layered degrade-to-calm motion, WebGL particle formations) plus pluggable visual style packs — instrument-console (dark console), editorial-luxury (warm editorial), workbench (light/dark product UI for dashboards and tools). Ships the sheleg-design skill, the architecture reference, style packs with ready-made token CSS, and the /sheleg-design command.",
5
- "version": "1.3.4",
5
+ "version": "1.6.0",
6
6
  "author": {
7
- "name": "ssheleg"
7
+ "name": "ssheleg",
8
+ "url": "https://x.com/sshlg93"
8
9
  },
9
10
  "homepage": "https://github.com/ssheleg/sheleg-design-skill",
10
11
  "repository": "https://github.com/ssheleg/sheleg-design-skill",
@@ -78,6 +78,44 @@ indeterminate indicator plus elapsed time beats an invented estimate.
78
78
  drafted reply, a synthesized summary of someone's words, a generated image of
79
79
  a real place. Not everywhere: labeling every pixel is noise.
80
80
 
81
+ ### The provenance tag — label the part, not the whole
82
+
83
+ A single confidence number on a whole answer is the wrong unit. Answers are
84
+ usually mixed: one clause was read straight out of a source, the next was
85
+ derived, a third is the model's guess. Scoring the assembly hides exactly the
86
+ part the reader needed to check.
87
+
88
+ The working pattern is a **small set of named states, attached inline to the
89
+ span each one qualifies**. Three is enough, and the names are verbs about
90
+ knowing rather than adjectives about certainty:
91
+
92
+ | State | Means | Colour role |
93
+ |---|---|---|
94
+ | `[EXTRACTED]` | lifted verbatim from a source the user can open | the *verified* hue |
95
+ | `[INFERRED]` | derived by a step the system can name | the *brand* hue — the system's own voice |
96
+ | `[AMBIGUOUS]` | the evidence supports more than one reading | the *unverified* hue |
97
+
98
+ Shape, so it annotates instead of shouting: monospace at ~10px, positive
99
+ tracking, a bracketed label, a transparent fill and a 1px border of the state's
100
+ own colour at ~25% alpha, on a small radius. It sits **beside the claim**, never
101
+ collected into a legend at the bottom — a legend makes the reader hold a mapping
102
+ in their head, which is the cost the tag exists to remove.
103
+
104
+ Three rules that decide whether it is honest:
105
+
106
+ - **Every state must be reachable.** If nothing is ever `[AMBIGUOUS]`, the
107
+ vocabulary is decoration and the reader learns to ignore all of it.
108
+ - **The label must be derivable from something real** — a retrieval hit, a
109
+ traversal path, a rule that fired. A tag assigned by a second model call
110
+ guessing at the first one is confidence theater with better typography.
111
+ - **Tag the span, not the message.** If you cannot say which words a state
112
+ applies to, you do not yet know it well enough to display it.
113
+
114
+ Any pack can implement this: it needs three hues, each with a text-safe ink and
115
+ a wash. `field-notes` ships that set (`--verify` / `--witness` / `--brand`, each
116
+ with `-ink` and `-soft`) because it was extracted from a product whose entire
117
+ argument is provenance; `workbench` can carry it on its own semantic colours.
118
+
81
119
  ## 5. Agent actions: the confirm is the design
82
120
 
83
121
  The moment a model stops answering and starts *acting*, the interface's job