synthesisui 0.16.297 → 0.16.298

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.
@@ -49,6 +49,7 @@ import { phase, startProgress } from "../progress.js";
49
49
  import { repoStateOf } from "../repo-state.js";
50
50
  import { runtimeDeclaredVars, runtimeDeclaredVarsIn } from "../runtime-vars.js";
51
51
  import { detectStack, resolveDeps, stackVersions } from "../stack.js";
52
+ import { wiredSlugs, wiringWarning } from "../wired-slugs.js";
52
53
  import { placeInWorkspace } from "../workspace-place.js";
53
54
  import { add } from "./add.js";
54
55
  import { walk, walkAll } from "./doctor.js";
@@ -2113,6 +2114,17 @@ export async function takeCensus(root, opts) {
2113
2114
  : {}),
2114
2115
  ...(animations.size > 0 ? { animations: [...animations].sort() } : {}),
2115
2116
  ...(brokenRefs.length > 0 ? { brokenRefs } : {}),
2117
+ /**
2118
+ * OS SISTEMAS QUE O CSS DELE JÁ CHAMA PELO NOME - ver `wiredSlugs`.
2119
+ *
2120
+ * Existe porque um import de 24/08 deixou o repositório do dono SEM COMPILAR: o CSS dele
2121
+ * carrega `_synthesisui/ds/codelevel/`, o sistema nasceu como `codelevel-ds`, e o `next build`
2122
+ * dele terminou em exit code 1 com `Can't resolve`. Não é cor errada - é o app parado.
2123
+ *
2124
+ * O campo é a metade medida da resposta; a outra é a pergunta do nome saber usá-lo. Aditivo e
2125
+ * omitido quando não há nada cabeado, que é o caso de todo primeiro import limpo.
2126
+ */
2127
+ ...(wiredSlugs(css).length > 0 ? { wiredSlugs: wiredSlugs(css) } : {}),
2116
2128
  /**
2117
2129
  * OS NOMES DISPUTADOS - ver `name-claim.ts`.
2118
2130
  *
@@ -3995,6 +4007,26 @@ export async function runImport(opts) {
3995
4007
  * mais longa do produto ficar mais longa no lugar onde ela já é mais difícil de ler.
3996
4008
  */
3997
4009
  if (payload?.slug) {
4010
+ /**
4011
+ * A FIAÇÃO DELE CONTRA O SLUG QUE NASCEU - e este aviso sai do CLI, não da skill.
4012
+ *
4013
+ * MEDIDO em 24/08: o `globals.css` dele importa `_synthesisui/ds/codelevel/`, o nome escolhido
4014
+ * derivou `codelevel-ds`, ninguém mencionou, e o `next build` dele terminou em exit code 1 com
4015
+ * `Can't resolve`. O aplicativo do cliente parou de compilar por causa de um comando que a
4016
+ * plataforma conduziu do começo ao fim.
4017
+ *
4018
+ * AQUI e não só no playbook porque o playbook é conselho e isto é fato: o slug chegou do
4019
+ * servidor, a pasta vai ser escrita com ele, e a divergência é aritmética. Um aviso que depende
4020
+ * de um agente ter lido o capítulo certo é um aviso que falta exatamente quando ele não leu -
4021
+ * foi assim que este defeito passou.
4022
+ */
4023
+ const warning = wiringWarning(census.wiredSlugs ?? [], payload.slug);
4024
+ if (warning) {
4025
+ console.log("");
4026
+ console.log(section("Your CSS points somewhere else"));
4027
+ for (const line of warning.split("\n"))
4028
+ console.log(body(line));
4029
+ }
3998
4030
  try {
3999
4031
  await add(payload.slug, {
4000
4032
  registry: opts.registry,
@@ -0,0 +1,86 @@
1
+ /**
2
+ * OS SISTEMAS QUE O CSS DELE JÁ CHAMA PELO NOME - e o build que quebra quando o nome não bate.
3
+ *
4
+ * O QUE ACONTECEU, medido no repositório do dono em 24/08: o `globals.css` dele carrega
5
+ *
6
+ * @import "../../../../_synthesisui/ds/codelevel/tokens.css";
7
+ * @import "../../../../_synthesisui/ds/codelevel/theme.css";
8
+ *
9
+ * O import daquela corrida nasceu com o slug `codelevel-ds`, então o `add` escreveu
10
+ * `_synthesisui/ds/codelevel-ds/` e os dois `@import` passaram a apontar para uma pasta que não
11
+ * existe. O `next build` dele terminou em **exit code 1**:
12
+ *
13
+ * Can't resolve '../../../../_synthesisui/ds/codelevel/tokens.css'
14
+ *
15
+ * Não é uma cor errada nem um token faltando: o aplicativo dele **não compila**. É o pior desfecho
16
+ * possível de uma esteira que existe para devolver o código dele funcionando, e ele sai de um
17
+ * comando que a plataforma conduziu do começo ao fim.
18
+ *
19
+ * POR QUE O SLUG PODE DIVERGIR: o nome é decisão dele, feita numa pergunta, e o slug deriva do
20
+ * nome. "CodeLevel" dá `codelevel`; "CodeLevel DS" dá `codelevel-ds`. As duas respostas são
21
+ * legítimas - o que não é legítimo é ninguém dizer que a segunda quebra o CSS que já está lá.
22
+ *
23
+ * ENTÃO A MEDIÇÃO VEM ANTES DA PERGUNTA. Este leitor responde "quais slugs o CSS deste repositório
24
+ * já espera encontrar", e o censo carrega a resposta. Com ela na mão, a pergunta do nome deixa de
25
+ * ser um campo em branco: existe um slug que faz a fiação resolver, e ele é dito em voz alta.
26
+ *
27
+ * DIZER, E NÃO DECIDIR. A plataforma não escolhe o nome do sistema dele nem reescreve o CSS dele -
28
+ * é o mesmo padrão do `add`, que imprime o `@import` e não o cola. O que ela deve é nunca deixá-lo
29
+ * escolher às cegas uma resposta que apaga o build.
30
+ */
31
+ /**
32
+ * O caminho que a nossa própria instalação usa. Qualquer profundidade de `../`, porque a folha dele
33
+ * pode estar em qualquer nível - a do dono está quatro acima.
34
+ */
35
+ const WIRED = /_synthesisui\/ds\/([a-z0-9][a-z0-9-]*)\//gi;
36
+ /**
37
+ * Os slugs que o CSS dele já referencia, em ordem de aparição e sem repetir.
38
+ *
39
+ * Recebe o CSS já concatenado porque é isso que o censo tem em mão - uma segunda varredura de
40
+ * arquivos seria uma segunda medição, livre para discordar da primeira.
41
+ */
42
+ export function wiredSlugs(css) {
43
+ const out = [];
44
+ for (const m of css.matchAll(WIRED))
45
+ if (!out.includes(m[1].toLowerCase()))
46
+ out.push(m[1].toLowerCase());
47
+ return out;
48
+ }
49
+ /**
50
+ * O QUE DIZER A ELE QUANDO O SISTEMA JÁ NASCEU COM OUTRO NOME.
51
+ *
52
+ * Roda DEPOIS do envio, com o slug que o servidor devolveu - então não é previsão, é fato: a pasta
53
+ * vai ser escrita com este nome e os `@import` dele apontam para outro.
54
+ *
55
+ * `null` quando o CSS não cabeia nada (todo primeiro import limpo) e quando o slug que nasceu já é
56
+ * um dos cabeados. Um aviso que aparece sempre é um aviso que ninguém lê.
57
+ *
58
+ * A frase carrega as três coisas que a decisão precisa: o que o CSS espera, o que existe agora, e o
59
+ * que acontece se ele não fizer nada. Sem a terceira isto é trivia - e foi a terceira que faltou na
60
+ * corrida que parou o build dele.
61
+ *
62
+ * DIZER, E NÃO CONSERTAR. O CSS é dele; reescrevê-lo por conta própria seria a plataforma editando
63
+ * o repositório de alguém sem pedir. É o mesmo padrão do `add`, que imprime o `@import` e não o
64
+ * cola.
65
+ */
66
+ export function wiringWarning(
67
+ /**
68
+ * A LISTA, e não o CSS - porque o censo já a carrega (`census.wiredSlugs`) e o CSS bruto não
69
+ * viaja nele. Recontar aqui seria uma segunda medição, livre para discordar da primeira.
70
+ */
71
+ wired, slugThatWasBorn) {
72
+ if (wired.length === 0)
73
+ return null;
74
+ if (wired.includes(slugThatWasBorn.toLowerCase()))
75
+ return null;
76
+ return [
77
+ `Your CSS imports _synthesisui/ds/${wired[0]}/, and this system is "${slugThatWasBorn}".`,
78
+ `Those @import lines point at a folder that does not exist, and the build fails on them -`,
79
+ `not a missing colour, a build that stops. Point them at ${slugThatWasBorn} to fix it:`,
80
+ "",
81
+ ` @import ".../_synthesisui/ds/${slugThatWasBorn}/tokens.css";`,
82
+ ` @import ".../_synthesisui/ds/${slugThatWasBorn}/theme.css";`,
83
+ "",
84
+ "Yours to change - we do not edit your CSS.",
85
+ ].join("\n");
86
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synthesisui",
3
- "version": "0.16.297",
3
+ "version": "0.16.298",
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": {