synthesisui 0.16.138 → 0.16.139

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.
@@ -74,6 +74,31 @@ and narrating it - *"registry is production, so no --registry flag needed"* - sp
74
74
  person's attention on a decision that was never theirs (dono, 01/08). Say something only when
75
75
  there is nothing to say to: no token, or the wrong host.
76
76
 
77
+ ### 0b. ASK THE REGISTRY WHAT EXISTS - never your notes
78
+
79
+ If your memory says this repo already produced a system, **verify it before you say it out loud**,
80
+ and verify it per SLUG:
81
+
82
+ \`\`\`
83
+ curl -s -o /dev/null -w "%{http_code}" <registry>/api/registry/ds/<slug>
84
+ \`\`\`
85
+
86
+ \`404\` means it does not exist. \`200\` means it does. That is the whole check, and it costs one call.
87
+
88
+ **\`synthesisui list\` does NOT answer this.** It returns the public gallery - 13 systems, none of
89
+ them private - so a private system of theirs is invisible to it and a \`list\` that does not mention
90
+ \`their-slug\` proves nothing.
91
+
92
+ This exists because of a real run (dono, 05/08). The owner had deleted every system on his account,
93
+ and the skill opened with *"my notes from the previous twelve runs say this repo has already
94
+ produced two published systems"* - then offered three options built on that: upgrade a slug the
95
+ registry answers \`404\` for, avoid a name collision that no longer existed, and warn that a \`--dry\`
96
+ would wipe files it does not touch. One \`curl\` would have replaced all of it.
97
+
98
+ **A memory may report the past; it may never assert the present.** *"The last run produced
99
+ \`signalui\`"* is a fine sentence. *"This repo has two published systems"* is a claim about the server,
100
+ and the server is the only thing that can make it.
101
+
77
102
  ## How to narrate
78
103
 
79
104
  The person cares about **what you found in their code** and **what you are about to create**.
@@ -880,6 +905,13 @@ Copying \`dark\` in at the top level of a recipe costs you that block, silently,
880
905
  component that has one - and \`import\` already converts it for the recipes IT writes, so the
881
906
  only place this can be lost is a recipe you hand-built (not-expressed.md, dono, 03/08).
882
907
 
908
+ **Which means: do NOT pre-convert the dark half inside \`looks[X]\`.** The conversion already
909
+ happens on the way in, so adding a \`scheme: "dark"\` layer to the census's own look while leaving
910
+ the \`dark\` key in place produces the SAME layer twice - measured at 28 components in one real
911
+ import, with the properties in a different key order so it did not even look like a duplicate
912
+ (dono, 05/08). \`validate_recipe\` telling you a top-level \`dark\` would be dropped is true about a
913
+ RECIPE and says nothing about the reading: you send a reading, and the reading's \`dark\` is read.
914
+
883
915
  **In ONE call.** Build every recipe in memory, then send the whole reading to
884
916
  \`validate_recipes\` - one round trip for 35 components instead of 35. \`validate_recipe\`
885
917
  (singular) is for the one recipe you rewrote after the batch named it; reaching for it in a
@@ -1162,10 +1194,20 @@ and pass on the ones that matter.
1162
1194
  The system is only worth something once it governs the code it came from:
1163
1195
 
1164
1196
  \`\`\`
1165
- npx synthesisui upgrade <slug> [--registry …] # brings the contract in
1197
+ npx synthesisui add <slug> [--registry …] # INSTALLS it: writes _synthesisui/ds/<slug>/
1166
1198
  npx synthesisui doctor [paths…] # the contract starts being enforced
1199
+ npx synthesisui upgrade <slug> [--registry …] # LATER, when a new version is published
1167
1200
  \`\`\`
1168
1201
 
1202
+ **The order is not a preference: \`upgrade\` reads the \`.lock\` of an installed DS and refuses
1203
+ without one** - \`"<slug>" is not installed here - run \\\`synthesisui add <slug>\\\` first.\` So
1204
+ offering \`upgrade\` to somebody who has never installed hands them a command that fails on contact
1205
+ (dono, 05/08). Check for \`_synthesisui/ds/<slug>/.lock\` before you recommend either one.
1206
+
1207
+ And say what each writes, because one of them rewrites code: \`add\` and \`upgrade\` write inside
1208
+ \`_synthesisui/\`, and \`upgrade\` ALSO regenerates components - but only files carrying the
1209
+ \`Generated by SynthesisUI\` header, so their own components are never touched.
1210
+
1169
1211
  \`doctor\` is where the promise pays off: every design value written by hand, the token their
1170
1212
  own system already has for it, and the components used outside the axes their contract
1171
1213
  declares. In a monorepo, scope it per app - one system, N consumers.
@@ -1186,8 +1228,16 @@ The user should end up with a system that reads like theirs and not like ours:
1186
1228
 
1187
1229
  ## What to resist
1188
1230
 
1231
+ - **Do not let memory speak for the server.** Notes report the past; a claim about what exists
1232
+ now needs the one \`curl\` in step 0b. Four statements in one real run were wrong this way, and
1233
+ every option offered on top of them was wrong too (dono, 05/08).
1189
1234
  - **Do not run \`import\` without \`--dry\` to explore.** It creates a real system on their
1190
1235
  account. Measure with \`--dry\`, read, then send once.
1236
+ - **\`--dry\` does not delete anything.** It writes \`census.json\` and creates the folder if needed -
1237
+ there is no \`rm\` in the import path. What it DOES do is overwrite that one file, so a reading
1238
+ injected into it is lost; everything else under \`_synthesisui/\` (the config, \`ds/<slug>/\`, the
1239
+ hook's marker, \`not-expressed.md\`) survives untouched. Telling somebody a measure will wipe their
1240
+ install talks them out of a safe command (dono, 05/08).
1191
1241
  - **Do not redo the arithmetic.** If you find yourself counting colours, you are in the wrong
1192
1242
  half of the pipeline.
1193
1243
  - **Do not fill \`roles\` with what looks nice.** It is a reading of what their code already
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synthesisui",
3
- "version": "0.16.138",
3
+ "version": "0.16.139",
4
4
  "description": "Bring SynthesisUI design systems into any project - tokens, typed components, whole pages and an agent-ready CLAUDE.md manifest.",
5
5
  "type": "module",
6
6
  "bin": {