iron-edge 2.3.0 → 2.3.1

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.
Files changed (148) hide show
  1. package/README.md +6 -4
  2. package/agents/iron-3d.md +7 -1
  3. package/agents/iron-animations.md +14 -7
  4. package/agents/iron-auditor.md +1 -1
  5. package/agents/iron-brand.md +16 -7
  6. package/agents/iron-ceo.md +2 -1
  7. package/agents/iron-claude.md +16 -9
  8. package/agents/iron-clone.md +5 -2
  9. package/agents/iron-cloning.md +14 -7
  10. package/agents/iron-commercial.md +16 -7
  11. package/agents/iron-community.md +7 -1
  12. package/agents/iron-content.md +14 -7
  13. package/agents/iron-copy.md +16 -7
  14. package/agents/iron-council.md +16 -7
  15. package/agents/iron-courses.md +14 -7
  16. package/agents/iron-cyber.md +14 -7
  17. package/agents/iron-design.md +16 -7
  18. package/agents/iron-eng.md +1 -1
  19. package/agents/iron-finance.md +14 -7
  20. package/agents/iron-forge.md +1 -1
  21. package/agents/iron-growth.md +16 -7
  22. package/agents/iron-install.md +1 -1
  23. package/agents/iron-paidmedia.md +16 -7
  24. package/agents/iron-premium.md +1 -1
  25. package/agents/iron-product.md +16 -7
  26. package/agents/iron-research.md +14 -7
  27. package/agents/iron-search.md +1 -1
  28. package/agents/iron-shopify.md +2 -2
  29. package/agents/iron-spy.md +21 -9
  30. package/agents/iron-storytelling.md +16 -7
  31. package/agents/iron-video.md +7 -1
  32. package/agents/lp-cinematico.md +1 -1
  33. package/agents/xq-advisory.md +20 -3
  34. package/agents/xq-brand.md +19 -2
  35. package/agents/xq-clevel.md +14 -2
  36. package/agents/xq-codecore.md +25 -11
  37. package/agents/xq-copy.md +18 -2
  38. package/agents/xq-copymaster.md +108 -91
  39. package/agents/xq-cyber.md +26 -12
  40. package/agents/xq-data.md +16 -2
  41. package/agents/xq-design.md +24 -8
  42. package/agents/xq-hormozi.md +16 -2
  43. package/agents/xq-movement.md +14 -2
  44. package/agents/xq-storytelling.md +18 -2
  45. package/agents/xq-traffic.md +25 -8
  46. package/bin/iron-edge.js +75 -8
  47. package/installer/gerados.js +38 -2
  48. package/installer/install.js +21 -3
  49. package/installer/update.js +201 -20
  50. package/iron-routing-map.md +19 -2
  51. package/package.json +3 -2
  52. package/skills/salvar/SKILL.md +21 -1
  53. package/squads/squad-brand/agents/al-ries.md +1 -2
  54. package/squads/squad-brand/agents/alina-wheeler.md +1 -2
  55. package/squads/squad-brand/agents/brand-orqx.md +2 -0
  56. package/squads/squad-brand/agents/byron-sharp.md +1 -2
  57. package/squads/squad-brand/agents/david-aaker.md +1 -2
  58. package/squads/squad-brand/agents/denise-yohn.md +1 -2
  59. package/squads/squad-brand/agents/donald-miller.md +1 -2
  60. package/squads/squad-brand/agents/emily-heyward.md +1 -2
  61. package/squads/squad-brand/agents/jean-noel-kapferer.md +1 -2
  62. package/squads/squad-brand/agents/kevin-keller.md +1 -2
  63. package/squads/squad-brand/agents/marty-neumeier.md +1 -2
  64. package/squads/squad-cloning/agents/mind-synthesizer.md +1 -0
  65. package/squads/squad-cloning/agents/source-hunter.md +1 -0
  66. package/squads/squad-commercial/agents/commercial-orqx.md +2 -0
  67. package/squads/squad-content/agents/signal-intelligence.md +1 -0
  68. package/squads/squad-copy/agents/ad-copywriter.md +1 -0
  69. package/squads/squad-copy/agents/andre-chaperon.md +1 -2
  70. package/squads/squad-copy/agents/ben-settle.md +1 -2
  71. package/squads/squad-copy/agents/claude-hopkins.md +1 -2
  72. package/squads/squad-copy/agents/clayton-makepeace.md +1 -2
  73. package/squads/squad-copy/agents/copy-orqx.md +2 -0
  74. package/squads/squad-copy/agents/dan-kennedy.md +1 -2
  75. package/squads/squad-copy/agents/dan-koe.md +1 -2
  76. package/squads/squad-copy/agents/david-deutsch.md +1 -2
  77. package/squads/squad-copy/agents/david-ogilvy.md +1 -2
  78. package/squads/squad-copy/agents/eugene-schwartz.md +1 -2
  79. package/squads/squad-copy/agents/frank-kern.md +1 -2
  80. package/squads/squad-copy/agents/funnel-copywriter.md +1 -0
  81. package/squads/squad-copy/agents/gary-bencivenga.md +1 -2
  82. package/squads/squad-copy/agents/gary-halbert.md +1 -2
  83. package/squads/squad-copy/agents/jim-rutz.md +1 -2
  84. package/squads/squad-copy/agents/joe-sugarman.md +1 -2
  85. package/squads/squad-copy/agents/john-carlton.md +1 -2
  86. package/squads/squad-copy/agents/jon-benson.md +1 -2
  87. package/squads/squad-copy/agents/parris-lampropoulos.md +1 -2
  88. package/squads/squad-copy/agents/persuasion-psychologist.md +1 -0
  89. package/squads/squad-copy/agents/robert-collier.md +1 -2
  90. package/squads/squad-copy/agents/russell-brunson.md +1 -2
  91. package/squads/squad-copy/agents/ry-schwartz.md +1 -2
  92. package/squads/squad-copy/agents/stefan-georgi.md +1 -2
  93. package/squads/squad-copy/agents/todd-brown.md +1 -2
  94. package/squads/squad-council/agents/brene-brown.md +1 -2
  95. package/squads/squad-council/agents/charlie-munger.md +1 -2
  96. package/squads/squad-council/agents/council-orqx.md +3 -1
  97. package/squads/squad-council/agents/derek-sivers.md +1 -2
  98. package/squads/squad-council/agents/naval-ravikant.md +1 -2
  99. package/squads/squad-council/agents/patrick-lencioni.md +1 -2
  100. package/squads/squad-council/agents/peter-thiel.md +1 -2
  101. package/squads/squad-council/agents/ray-dalio.md +1 -2
  102. package/squads/squad-council/agents/reid-hoffman.md +1 -2
  103. package/squads/squad-council/agents/simon-sinek.md +1 -2
  104. package/squads/squad-council/agents/yvon-chouinard.md +1 -2
  105. package/squads/squad-courses/agents/assessment-creator.md +1 -0
  106. package/squads/squad-cybersecurity/agents/cloud-security-engineer.md +1 -0
  107. package/squads/squad-cybersecurity/agents/compliance-officer.md +1 -0
  108. package/squads/squad-cybersecurity/agents/cyber-orqx.md +1 -0
  109. package/squads/squad-cybersecurity/agents/incident-responder.md +1 -0
  110. package/squads/squad-cybersecurity/agents/network-security-engineer.md +1 -0
  111. package/squads/squad-cybersecurity/agents/penetration-tester.md +1 -0
  112. package/squads/squad-cybersecurity/agents/soc-analyst.md +1 -0
  113. package/squads/squad-cybersecurity/agents/threat-analyst.md +1 -0
  114. package/squads/squad-design/agents/brad-frost.md +4 -3
  115. package/squads/squad-design/agents/dan-mall.md +4 -3
  116. package/squads/squad-design/agents/dave-malouf.md +4 -3
  117. package/squads/squad-design/agents/design-chief.md +2 -0
  118. package/squads/squad-design/agents/design-orqx.md +2 -0
  119. package/squads/squad-design/agents/nano-banana-generator.md +1 -0
  120. package/squads/squad-engineering/agents/eng-devops.md +1 -0
  121. package/squads/squad-engineering/agents/eng-product.md +1 -0
  122. package/squads/squad-engineering/agents/eng-sprint.md +1 -0
  123. package/squads/squad-finance/agents/budget-controller.md +1 -0
  124. package/squads/squad-growth/agents/growth-orqx.md +2 -0
  125. package/squads/squad-paidmedia/agents/depesh-mandalia.md +1 -2
  126. package/squads/squad-paidmedia/agents/kasim-aslam.md +1 -2
  127. package/squads/squad-paidmedia/agents/molly-pittman.md +1 -2
  128. package/squads/squad-paidmedia/agents/nicholas-kusmich.md +1 -2
  129. package/squads/squad-paidmedia/agents/paidmedia-orqx.md +2 -0
  130. package/squads/squad-paidmedia/agents/pedro-sobral.md +1 -2
  131. package/squads/squad-paidmedia/agents/ralph-burns.md +1 -2
  132. package/squads/squad-paidmedia/agents/tom-breeze.md +1 -2
  133. package/squads/squad-product/agents/product-orqx.md +2 -0
  134. package/squads/squad-research/agents/audience-intelligence.md +1 -0
  135. package/squads/squad-research/agents/competitive-intelligence.md +1 -0
  136. package/squads/squad-research/agents/trend-forecaster.md +1 -0
  137. package/squads/squad-storytelling/agents/blake-snyder.md +1 -2
  138. package/squads/squad-storytelling/agents/dan-harmon.md +1 -2
  139. package/squads/squad-storytelling/agents/joseph-campbell.md +1 -2
  140. package/squads/squad-storytelling/agents/keith-johnstone.md +1 -2
  141. package/squads/squad-storytelling/agents/kindra-hall.md +1 -2
  142. package/squads/squad-storytelling/agents/marshall-ganz.md +1 -2
  143. package/squads/squad-storytelling/agents/matthew-dicks.md +1 -2
  144. package/squads/squad-storytelling/agents/nancy-duarte.md +1 -2
  145. package/squads/squad-storytelling/agents/oren-klaff.md +1 -2
  146. package/squads/squad-storytelling/agents/park-howell.md +1 -2
  147. package/squads/squad-storytelling/agents/shawn-coyne.md +1 -2
  148. package/squads/squad-storytelling/agents/storytelling-orqx.md +2 -0
@@ -31,7 +31,12 @@ const DRY = args.includes('--dry-run');
31
31
  const srcIdx = args.indexOf('--source');
32
32
  const SOURCE = srcIdx >= 0 && args[srcIdx + 1] ? path.resolve(args[srcIdx + 1]) : path.join(__dirname, '..');
33
33
 
34
- const log = (m) => console.log(m);
34
+ // Escrita SINCRONA de proposito. Com `console.log` em Windows, quando a saida vai pra um cano
35
+ // (CI, `| tee`, terminal do Claude Code), o Node enfileira e o `process.exit()` do fim descarta o
36
+ // que ainda nao saiu: na CI de 22/09/2026 o log chegou comecando pelo MEIO, sem o cabecalho e sem
37
+ // o "Instalacao encontrada". Um aluno que cola o log pra pedir ajuda mandaria metade dele — e eu
38
+ // perdi duas rodadas de CI deduzindo em cima de um log truncado.
39
+ const log = (m) => { try { fs.writeSync(1, m + '\n'); } catch (_) { console.log(m); } };
35
40
  function abort(msg) {
36
41
  console.error('\n[ABORTADO] ' + msg);
37
42
  process.exit(1);
@@ -50,7 +55,12 @@ function norm(p) {
50
55
  let alvo = path.resolve(p);
51
56
  let resto = '';
52
57
  for (;;) {
53
- try { return path.join(fs.realpathSync(alvo), resto); }
58
+ // `realpathSync.native` (e nao o `realpathSync` puro) porque em Windows so' a versao nativa
59
+ // expande o nome curto 8.3: a mesma pasta aparece como C:\\Users\\RUNNER~1\\... e como
60
+ // C:\\Users\\runneradmin\\..., e comparar as duas como texto faz o update concluir que os 2129
61
+ // arquivos "nao existiam" — e sobrescrever o que a pessoa editou. Medido na CI de 22/09/2026:
62
+ // o manifesto guardava a forma longa e o calculo do momento devolvia a curta.
63
+ try { return path.join(fs.realpathSync.native(alvo), resto); }
54
64
  catch (e) {
55
65
  const pai = path.dirname(alvo);
56
66
  if (pai === alvo) return path.resolve(p);
@@ -111,6 +121,17 @@ for (const f of man.files || []) {
111
121
  if (dest) antigos.set(norm(dest), f);
112
122
  }
113
123
  log(`Instalacao encontrada: ${antigos.size} arquivos no manifesto`);
124
+
125
+ // Chave de diagnostico, ligada por variavel de ambiente. Existe porque em 22/09/2026 o update
126
+ // concluiu, numa maquina Windows, que 2129 arquivos "nao existiam" — com o manifesto certo, o
127
+ // hash certo e o caminho gravado igualzinho ao real. O que diverge e' a forma do caminho DEPOIS
128
+ // do `norm()`, e isso nao da pra ver de fora. Fica no produto de proposito: e' o que permite
129
+ // diagnosticar a maquina de um aluno sem chutar.
130
+ let dbgMostrado = false;
131
+ if (process.env.IRON_EDGE_DEBUG) {
132
+ const amostra = (m) => [...m.keys()].slice(0, 2).join('\n ');
133
+ log(' [debug] chaves do manifesto (antigos):\n ' + amostra(antigos));
134
+ }
114
135
  if (man.label) log(` edicao: ${man.label}`);
115
136
  if (man.installed_at) log(` instalada em: ${man.installed_at}`);
116
137
 
@@ -136,6 +157,7 @@ for (const dir of ['agents', 'skills', 'squads', 'docs']) {
136
157
  const plano = { trocar: [], adicionar: [], restaurar: [], preservar: [], remover: [], manter: [], gerar: [] };
137
158
 
138
159
  for (const [dest, origem] of novos) {
160
+ if (process.env.IRON_EDGE_DEBUG && !dbgMostrado) { dbgMostrado = true; log(' [debug] chave calculada agora (novos):\n ' + dest); }
139
161
  const ent = antigos.get(dest);
140
162
  if (!ent) { plano.adicionar.push({ dest, origem }); continue; }
141
163
  if (ent.generated) { plano.manter.push({ dest, motivo: 'gerado na instalacao (config, manifesto)' }); continue; }
@@ -185,6 +207,59 @@ for (const g of GERADOS) {
185
207
  }
186
208
  }
187
209
 
210
+ // ---------------------------------------------------------------- config: so' relatorio
211
+ // O config NUNCA e' sobrescrito pelo update — e' da pessoa. Mas o que este bloco IMPRIME
212
+ // precisa sair sempre, e por isso ele e' funcao chamada antes do early-exit e nao codigo
213
+ // solto na FASE 3: la' embaixo ele so' rodava quando havia algo pra atualizar. Quem ja' esta'
214
+ // na versao do pacote — que e' justamente quem roda `update` so' pra conferir o cofre —
215
+ // batia no `process.exit(0)` 125 linhas antes e nunca via aviso nenhum. Um alerta contra
216
+ // falha silenciosa que falhava em silencio. Vale para os DOIS avisos daqui: o de campo
217
+ // faltando ja' nascia inalcancavel assim, e ninguem tinha percebido.
218
+ function relatarConfig() {
219
+ const cfg = path.join(IRON_DIR, 'config.yaml');
220
+ if (!fs.existsSync(cfg)) return;
221
+ // .replace de CRLF: o config.yaml e' editado pela PESSOA, e o Bloco de Notas do Windows grava
222
+ // com \r\n. Sem isto, o valor lido da linha vem com um \r invisivel grudado no fim — e o aviso
223
+ // de barra invertida passaria a julgar um caminho que ninguem digitou. Mesma classe do defeito
224
+ // que reprovou a CI de Windows em 22/09/2026.
225
+ const seu = fs.readFileSync(cfg, 'utf8').replace(/\r\n/g, '\n');
226
+ const campos = ['owner', 'businesses', 'vault_path'];
227
+ const faltando = campos.filter((c) => !new RegExp(`^\\s*${c}\\s*:`, 'm').test(seu));
228
+ log(' config.yaml: preservado como estava (nao foi tocado).');
229
+ if (faltando.length) {
230
+ log('');
231
+ log(' ATENCAO: a versao nova usa campos que o seu config nao tem:');
232
+ for (const f of faltando) log(` - ${f}`);
233
+ log(' Acrescente a mao, ou peca ao Iron: "atualiza meu config".');
234
+ if (faltando.includes('vault_path') && /obsidian_vault_path/.test(seu))
235
+ log(' (Voce tem "obsidian_vault_path": e o mesmo cofre. O Iron entende os dois nomes.)');
236
+ }
237
+
238
+ // Barra invertida SOLTA dentro de aspas duplas. O par `\\` e' escape valido e correto — e'
239
+ // o formato que instalacoes antigas gravavam —, entao ele e' consumido ANTES da checagem:
240
+ // avisar nele mandaria a pessoa "consertar" um arquivo que esta' certo. O que sobra e'
241
+ // barra solta, e ela tem dois destinos, os dois ruins: `\U` de C:\Users\<voce> nao e escape
242
+ // valido e derruba o arquivo INTEIRO (o owner morre junto), enquanto `\b` de C:\backup e'
243
+ // escape valido, parseia sem erro nenhum e entrega um caminho CORROMPIDO em silencio.
244
+ // Isola o valor ENTRE ASPAS. Usar a linha inteira fazia comentario a direita entrar na conta:
245
+ // `vault_path: "C:/Users/<voce>/Cofre" # nota com contra\barra` disparava o aviso com o
246
+ // caminho intacto. Aspas duplas nao podem existir dentro de nome de arquivo no Windows, entao
247
+ // [^"]* fecha no lugar certo.
248
+ const linha = (seu.match(/^\s*(?:obsidian_)?vault_path\s*:\s*(.+)$/m) || [])[1];
249
+ const aspas = linha ? linha.trim().match(/^"([^"]*)"/) : null;
250
+ const valor = aspas ? aspas[1] : '';
251
+ if (valor && valor.split('\\\\').join('').includes('\\')) {
252
+ log('');
253
+ log(' ATENCAO: seu vault_path tem barra invertida dentro de aspas duplas:');
254
+ log(' ' + aspas[0]);
255
+ log(' Em YAML isso ou invalida o arquivo INTEIRO (e o owner morre junto), ou entrega um');
256
+ log(' caminho corrompido sem dar erro nenhum. Nos dois casos o sintoma e o mesmo: o Iron');
257
+ log(' passa a responder generico e a oferecer criar um cofre que voce ja tem.');
258
+ log(' Troque as barras invertidas por barras normais (C:/Users/<voce>/...) e salve.');
259
+ log(' Ou peca ao Iron: "conserta meu vault_path".');
260
+ }
261
+ }
262
+
188
263
  // ---------------------------------------------------------------- mostrar
189
264
  log('');
190
265
  log('--- PLANO ---');
@@ -213,8 +288,102 @@ log('');
213
288
  log(' Seu config.yaml, seus agentes e skills proprios, e seu cofre NAO entram neste plano.');
214
289
  log(' Config e manifesto sao regravados no fim; o resto nem e olhado.');
215
290
 
291
+ log('');
292
+ relatarConfig();
293
+
294
+
216
295
  if (DRY) { log(''); log('--dry-run: nada foi escrito.'); process.exit(0); }
217
- if (!plano.trocar.length && !plano.adicionar.length && !plano.restaurar.length && !plano.remover.length && !plano.gerar.length) {
296
+
297
+ // Permissao da pasta de segredos, TAMBEM no update. O chmod entrou no install no ciclo 2 e o
298
+ // gate mediu a lacuna: quem ja tinha o Iron instalado seguia com `secrets/` em 755, porque o
299
+ // caminho de manutencao e' o update, nao reinstalar. Roda DUAS vezes de proposito: aqui, antes
300
+ // do early-exit (senao nao alcanca quem nao tem nada a atualizar) e de novo no fim, porque a
301
+ // FASE 2 pode RECRIAR a pasta com o umask padrao — medido no gate, rodada 4.
302
+ // Idempotente e falha aberto fora de POSIX.
303
+ function fecharPermissoes() {
304
+ for (const [alvo, modo] of [[path.join(IRON_DIR, 'secrets'), 0o700], [path.join(IRON_DIR, 'integrations', 'shopify.yaml'), 0o600]]) {
305
+ try {
306
+ if (!fs.existsSync(alvo)) continue;
307
+ const atual = fs.statSync(alvo).mode & 0o777;
308
+ if (atual === modo) continue;
309
+ fs.chmodSync(alvo, modo);
310
+ log(` permissao de ${path.basename(alvo)} fechada (${atual.toString(8)} -> ${modo.toString(8)})`);
311
+ } catch (_) { /* Windows e sistemas sem POSIX: a ACL do perfil ja cobre */ }
312
+ }
313
+ }
314
+ fecharPermissoes();
315
+
316
+ // metadata.json ilegivel tambem se conserta ANTES do early-exit: o aluno que ja esta na versao do
317
+ // pacote e roda update justamente pra consertar caia em "Nada a fazer" e ficava travado, com o
318
+ // verify reprovando para sempre. Mesmo padrao do chmod, mesmo erro, medido na rodada 4.
319
+ // `somenteSeQuebrado` existe porque a chamada de antes do early-exit nao pode reescrever um
320
+ // metadata SADIO: mudar o arquivo sem regravar o manifesto (que so acontece na FASE 3) deixaria
321
+ // disco e registro divergentes, e o verify reprovaria — o mesmo defeito da rodada 2, por outra porta.
322
+ // Devolve true quando ESCREVEU, e quem chamou usa isso pra nao sair pelo early-exit.
323
+ function repararMetadata(versao, somenteSeQuebrado) {
324
+ const META = path.join(IRON_DIR, 'metadata.json');
325
+ // Arquivo AUSENTE nao e' arquivo quebrado: instalacao antiga simplesmente nao tinha metadata, e
326
+ // inventar um na chamada de ANTES do early-exit transformaria um update no-op em escrita (isso
327
+ // quebrou 8 casos do proprio test-update). Mas na FASE 3, com versao pra gravar, ausente TEM que
328
+ // ser recriado — a rodada 5 mediu que a guarda simples apagava a entrada do manifesto em silencio.
329
+ if (!fs.existsSync(META)) {
330
+ // Sumido MAS registrado no manifesto = o produto sabe que ele deveria existir; entao recriar
331
+ // e' conserto, nao invencao, e vale tambem antes do early-exit: sem isso o verify reprovava
332
+ // com "ausentes: 1" e o update respondia "nada a fazer" — remedio que o proprio produto
333
+ // receita e nao cura, o mesmo padrao do shopify.yaml na rodada 1.
334
+ const registrado = [...antigos.keys()].some((d) => d.endsWith('metadata.json'));
335
+ if (somenteSeQuebrado && !registrado) return false;
336
+ if (!versao) {
337
+ const doMan = (man.version || '').replace(/^iron-edge-/, '');
338
+ if (!doMan) return false;
339
+ versao = doMan; // recria com a versao que o manifesto registra
340
+ }
341
+ try {
342
+ fs.writeFileSync(META, JSON.stringify({ version: 'iron-edge-' + versao, label: 'Iron Edge v' + versao, updated_at: new Date().toISOString(), recriado_por_estar_ausente: true }, null, 2));
343
+ log(' metadata.json estava ausente: recriado');
344
+ return true;
345
+ } catch (e) { log(` aviso: nao consegui criar metadata.json (${e.message})`); return false; }
346
+ }
347
+ let meta = null, precisaReescrever = false, ilegivel = false;
348
+ try { meta = JSON.parse(fs.readFileSync(META, 'utf8')); }
349
+ catch (_) { precisaReescrever = true; ilegivel = true; }
350
+ // JSON valido que NAO e' objeto plano (array, numero, texto, null) engole a atribuicao sem
351
+ // erro e o arquivo fica com lixo enquanto o log diz "atualizado" — medido na rodada 4.
352
+ if (!precisaReescrever && (meta === null || typeof meta !== 'object' || Array.isArray(meta))) { precisaReescrever = true; ilegivel = true; }
353
+ // Conteudo que NAO bate com o hash registrado tambem e' reparo: o metadata.json e' derivado,
354
+ // ninguem deveria edita-lo, e quando alguem edita o verify reprova para sempre sem caminho de
355
+ // volta (medido na matriz de estados: "metadata com campo extra do aluno").
356
+ if (!precisaReescrever) {
357
+ const ent = [...antigos.values()].find((e) => String(e.dest).endsWith('metadata.json'));
358
+ if (ent && ent.sha256 && ent.sha256 !== sha256(META)) precisaReescrever = true;
359
+ }
360
+
361
+ if (!precisaReescrever && (somenteSeQuebrado || !versao)) return false;
362
+ // Reparo por DIVERGENCIA (o arquivo esta legivel, so' nao bate com o registro) preserva o que
363
+ // estiver la: quem escreveu algo dentro nao pode perder isso porque o hash saiu de sincronia.
364
+ // Reescrita do zero fica so' para o arquivo ilegivel, onde nao ha o que preservar.
365
+ const base = ilegivel ? { recuperado_de_arquivo_ilegivel: true } : (meta || {});
366
+ if (versao) { base.version = 'iron-edge-' + versao; base.label = 'Iron Edge v' + versao; }
367
+ base.updated_at = new Date().toISOString();
368
+ try {
369
+ fs.writeFileSync(META, JSON.stringify(base, null, 2));
370
+ log(ilegivel ? ' metadata.json estava ilegivel: reescrito do zero'
371
+ : precisaReescrever ? ` metadata.json estava fora de sincronia: reconciliado (${base.version})`
372
+ : ` metadata.json atualizado para ${base.version}`);
373
+ return true;
374
+ } catch (e) { log(` aviso: nao consegui gravar metadata.json (${e.message})`); return false; }
375
+ }
376
+ // so conserta o que esta quebrado; se consertou, o update NAO pode sair pelo early-exit, porque
377
+ // o manifesto precisa da FASE 3 pra registrar o hash novo.
378
+ const metadataReparado = repararMetadata(process.env.IRON_EDGE_VERSION || '', true);
379
+
380
+ // "Nada a fazer" so' vale se a VERSAO tambem ja for a deste pacote. Release que nao mexe em
381
+ // nenhum arquivo rastreado (so' installer/, scripts/, README) caia aqui e a versao registrada
382
+ // ficava velha para sempre — e a mensagem dizia justamente que ja estava na versao do pacote.
383
+ const versaoRegistrada = man.version || '';
384
+ const versaoDoPacote = process.env.IRON_EDGE_VERSION ? 'iron-edge-' + process.env.IRON_EDGE_VERSION : '';
385
+ const versaoDesatualizada = Boolean(versaoDoPacote) && versaoRegistrada !== versaoDoPacote;
386
+ if (!plano.trocar.length && !plano.adicionar.length && !plano.restaurar.length && !plano.remover.length && !plano.gerar.length && !plano.preservar.length && !versaoDesatualizada && !metadataReparado) {
218
387
  log(''); log('Nada a fazer: sua instalacao ja esta na versao deste pacote.');
219
388
  process.exit(0);
220
389
  }
@@ -274,6 +443,26 @@ let geradosOk = 0;
274
443
  for (const g of plano.gerar) {
275
444
  try {
276
445
  fs.mkdirSync(path.dirname(g.dest), { recursive: true });
446
+ // Achado tardio da rodada 4: `~/.claude/commands/` e' pasta generica do Claude Code, e um
447
+ // arquivo com o mesmo nome que NAO esteja no manifesto era sobrescrito sem aviso e sem
448
+ // backup — perda de dado silenciosa do que era do usuario. Agora vira .iron-old antes.
449
+ if (fs.existsSync(g.dest)) {
450
+ const registrado = antigos.has(norm(g.dest));
451
+ if (!registrado) {
452
+ // .iron-old ja existente pode ser backup ANTERIOR do usuario, ou sobra de execucao
453
+ // interrompida: sobrescrever aqui seria repetir, dentro do mecanismo de backup, a perda
454
+ // de dado que ele foi criado pra evitar (medido na rodada 5). Entao abre um nome novo.
455
+ let backup = g.dest + '.iron-old';
456
+ if (fs.existsSync(backup)) {
457
+ const carimbo = new Date().toISOString().replace(/[:.]/g, '-');
458
+ backup = `${g.dest}.iron-old-${carimbo}`;
459
+ }
460
+ try {
461
+ fs.copyFileSync(g.dest, backup);
462
+ log(` ${path.basename(g.dest)} existia e nao era do pacote: copia guardada em ${path.basename(backup)}`);
463
+ } catch (e2) { log(` aviso: nao consegui guardar copia de ${g.dest} (${e2.message}) — nao sobrescrevi`); continue; }
464
+ }
465
+ }
277
466
  fs.writeFileSync(g.dest, g.conteudo);
278
467
  geradosOk++;
279
468
  } catch (e) { log(` aviso: nao consegui gravar ${g.dest} (${e.code || e.message})`); }
@@ -284,6 +473,14 @@ if (geradosOk) log(` ${geradosOk} arquivo(s) gerado(s) desta versao criados (ex
284
473
  log('');
285
474
  log('--- FASE 3: manifesto e config ---');
286
475
 
476
+
477
+ // A VERSAO PRIMEIRO, o manifesto DEPOIS. Na rodada 2 do gate o metadata.json era reescrito no
478
+ // fim, depois de o manifesto ja ter guardado o hash do conteudo ANTIGO: disco e registro
479
+ // discordavam e o verify passava a reprovar uma instalacao sadia para sempre.
480
+ const versaoNova = process.env.IRON_EDGE_VERSION || '';
481
+ repararMetadata(versaoNova);
482
+ fecharPermissoes(); // a FASE 2 pode ter recriado secrets/ com o umask padrao
483
+
287
484
  const arquivos = [];
288
485
  const editados = new Set(plano.preservar.map((x) => norm(x.dest)));
289
486
  for (const [dest, origem] of novos) {
@@ -310,6 +507,7 @@ for (const g of GERADOS) {
310
507
 
311
508
  const novoMan = {
312
509
  ...man,
510
+ ...(versaoNova ? { version: 'iron-edge-' + versaoNova, label: 'Iron Edge v' + versaoNova } : {}),
313
511
  updated_at: new Date().toISOString(),
314
512
  previous_installed_at: man.installed_at,
315
513
  files: arquivos,
@@ -317,23 +515,6 @@ const novoMan = {
317
515
  fs.writeFileSync(MANIFEST, JSON.stringify(novoMan, null, 2));
318
516
  log(` manifesto regravado: ${arquivos.length} arquivos`);
319
517
 
320
- // config: NUNCA sobrescrito. Mas se a versao nova tem campo que o seu nao tem, avisa.
321
- const cfg = path.join(IRON_DIR, 'config.yaml');
322
- if (fs.existsSync(cfg)) {
323
- const seu = fs.readFileSync(cfg, 'utf8');
324
- const campos = ['owner', 'businesses', 'vault_path'];
325
- const faltando = campos.filter((c) => !new RegExp(`^\\s*${c}\\s*:`, 'm').test(seu));
326
- log(' config.yaml: preservado como estava (nao foi tocado).');
327
- if (faltando.length) {
328
- log('');
329
- log(' ATENCAO: a versao nova usa campos que o seu config nao tem:');
330
- for (const f of faltando) log(` - ${f}`);
331
- log(' Acrescente a mao, ou peca ao Iron: "atualiza meu config".');
332
- if (faltando.includes('vault_path') && /obsidian_vault_path/.test(seu))
333
- log(' (Voce tem "obsidian_vault_path": e o mesmo cofre. O Iron entende os dois nomes.)');
334
- }
335
- }
336
-
337
518
  log('');
338
519
  log('================================');
339
520
  log(' Atualizado com sucesso');
@@ -63,10 +63,14 @@ o iron-ceo oferece: iron-X (rapido) ou xq-X (profundo)? [r/p]
63
63
  | iron-forge | Construtor de agentes | criar agente, criar skill, novo agente, construir ferramenta |
64
64
  | iron-install | Instalacao | instalar, setup do ecossistema, configurar ambiente |
65
65
  | iron-claude | Claude Code em si | hook, MCP, skill, subagente, settings.json, contexto, memoria, "o Claude esta estranho", auditoria da instalacao |
66
- | iron-clone | Clonar SITE + design system | clonar site, copiar pagina, espelhar site, "aquele site com a minha marca", DNA visual de referencia, extrair paleta/tipografia, transplante de marca, organizar HTML monolitico (NAO confundir com iron-cloning, que clona o MODO DE PENSAR de uma pessoa real). ATENCAO: a skill clone-site nao roda nativamente em Windows — avisar antes |
66
+ | iron-clone | Clonar SITE + design system | clonar site, copiar pagina, espelhar site, DNA visual de referencia, extrair paleta, transplante de marca, organizar HTML |
67
67
  | iron-eng | Engenharia de software | app, plataforma, sistema, API, backend, banco, login, painel, dashboard, CRM, integracao, automacao de negocio, script, job, bug, erro, quebrou, deploy, migration |
68
68
  | lp-cinematico | Landing pages scroll | landing page, LP cinematografica, scroll-scrub, pagina de captura |
69
69
 
70
+ > **iron-clone x iron-cloning:** o `iron-clone` copia SITE e identidade visual; o `iron-cloning` copia o MODO DE PENSAR
71
+ > de uma pessoa real (e exige consentimento e base legal). A skill `clone-site` nao roda nativamente em Windows, e o
72
+ > proprio `iron-clone` avisa isso antes de comecar.
73
+
70
74
  ## 3. Routing Table — Camada de Aprofundamento (XQ — 13)
71
75
 
72
76
  | Agente | Sobe da camada | Quando usar |
@@ -77,7 +81,7 @@ o iron-ceo oferece: iron-X (rapido) ou xq-X (profundo)? [r/p]
77
81
  | xq-codecore | squad-claude | maestria em Claude Code |
78
82
  | xq-copy | iron-copy | copy com mestres (Halbert, Schwartz, Ogilvy) |
79
83
  | xq-copymaster | iron-copy | copy expandida — 33 copywriters |
80
- | xq-cyber | iron-cyber | seguranca com 15 especialistas |
84
+ | xq-cyber | iron-cyber | seguranca em profundidade (7 especialistas instalados) |
81
85
  | xq-data | iron-growth | analytics e metricas em profundidade |
82
86
  | xq-design | iron-design | UX/UI com experts |
83
87
  | xq-hormozi | iron-commercial | ofertas estilo Grand Slam Offers |
@@ -274,3 +278,16 @@ pacote e nao entram na Routing Table.
274
278
  Regra: o iron-ceo NAO aciona agente que nao esteja na Routing Table num
275
279
  fluxo normal — so quando voce pedir pelo nome. Isso evita que um agente de
276
280
  projeto especifico seja escolhido para uma demanda generica.
281
+
282
+ ## 8. Especialistas com nome de pessoa real
283
+
284
+ Arquivos de especialista marcados com `real_person: true` levam o nome de uma pessoa que existe. A regra, sem exceção, para qualquer agente que assuma um deles:
285
+
286
+ 1. O agente aplica o MÉTODO público da pessoa (frameworks, princípios, obras publicadas). Ele não é a pessoa e não diz que é. Forma correta: "no método de Gary Halbert". Forma errada: "eu sou Gary Halbert".
287
+ 2. Nunca atribuir à pessoa frase, opinião, endosso ou fato que não esteja em obra publicada dela. O que for dedução do modelo se declara como dedução: "pelo método dele, eu diria que...".
288
+ 3. O entregável nunca sai assinado com o nome da pessoa, nem sugere que ela revisou, aprovou ou participou.
289
+ 4. Se o pedido for conteúdo que finja ser da pessoa (post "escrito por", depoimento, citação inventada), o agente recusa essa parte e entrega a versão "no método de".
290
+
291
+ 5. **Pessoa falecida** (o arquivo registra a morte, seja num campo `died:` seja dentro do `born:`, como "1926 (died 2022)") exige o cuidado maior, não o menor: ela não pode desmentir nada, e o espólio costuma manter direito de imagem. Nesses casos, cite a obra publicada de forma literal e atribuída, e nunca produza frase nova no nome dela.
292
+
293
+ Esta seção é a fonte única desta regra. Quem dá entrada nesses especialistas aponta pra cá; não existe cópia da regra nos arquivos de especialista.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iron-edge",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "Ecossistema de agentes para Claude Code: 44 agentes de topo, 18 squads e 14 skills, com quality gate, memoria e instalador que nunca sobrescreve.",
5
5
  "keywords": [
6
6
  "claude",
@@ -31,7 +31,8 @@
31
31
  "node": ">=18.0.0"
32
32
  },
33
33
  "scripts": {
34
- "test": "node scripts/lint.js"
34
+ "test": "node scripts/lint.js && node scripts/test-verify.js && node scripts/test-update.js",
35
+ "test:matriz": "node scripts/test-matriz-update.js"
35
36
  },
36
37
  "devDependencies": {
37
38
  "js-yaml": "^5.3.0"
@@ -43,7 +43,27 @@ No `CLAUDE.md` do cofre, escreva estas 6 regras:
43
43
  5. Nunca invente número, nome, versão ou caminho. O que faltar entra como "(a preencher)".
44
44
  6. Nada confidencial de terceiros neste cofre: nem material de empregador ou cliente do usuário, nem credencial, nem nome de pessoa de fora. Se aparecer na conversa, não registre e avise que não registrou.
45
45
 
46
- Criado o cofre, grave o caminho no `vault_path` do `~/.iron/config.yaml`.
46
+ Criado o cofre, grave o caminho no `vault_path` do `~/.iron/config.yaml` seguindo os três
47
+ passos abaixo, nesta ordem. Eles são a **fonte única** desta regra no pacote — qualquer outro
48
+ arquivo que fale disso aponta para cá.
49
+
50
+ 1. **Escreva o caminho com barra normal**, inclusive no Windows: `C:/Users/<voce>/Documents/Cofre`.
51
+ O Windows aceita as duas barras; o YAML não. Barra invertida dentro de aspas é escape, então
52
+ `\U` de `C:\Users\<voce>` pede um código Unicode que não existe e **o arquivo inteiro fica inválido**,
53
+ levando o `owner` junto.
54
+ 2. **Leia o arquivo de volta e compare a linha inteira, caractere a caractere** — aspas e barras
55
+ incluídas — com o que você quis gravar. Não basta imprimir, e não vale "está parecido": uma
56
+ barra a menos no meio do caminho passa despercebida numa conferência visual. As camadas entre o terminal, o shell e o comando comem barra de forma que
57
+ não se calcula — na mesma máquina Windows isso aconteceu duas vezes em 24h, por dois mecanismos
58
+ diferentes (um `sed` e um heredoc). **Escrever certo não é gravar certo.**
59
+ 3. **Se não bater, reescreva por outro mecanismo** — edição direta no arquivo, nunca `sed`, `echo`
60
+ nem heredoc para este campo — e volte ao passo 2. Se na segunda tentativa ainda não bater,
61
+ **pare, mostre ao usuário o que está gravado e diga que o cofre não ficou configurado.** Não
62
+ declare sucesso sem a comparação ter batido.
63
+
64
+ O sintoma de errar aqui é o pior possível: **não aparece erro nenhum.** O Iron volta a responder
65
+ genérico e oferece criar um cofre — com o cofre do usuário cheio, ali do lado. Se isso acontecer,
66
+ o `vault_path` é o primeiro lugar a olhar.
47
67
 
48
68
  Cada projeto novo ganha `Projetos/<Nome>/PROJETO.md` com este frontmatter e estas seções — preenchidas SÓ com o que o usuário contar, o resto "(a preencher)":
49
69
 
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # Al Ries
11
11
 
12
- > ACTIVATION-NOTICE: You are now Al Ries — the Father of Positioning, co-author (with Jack Trout) of "Positioning: The Battle for Your Mind" (4M+ copies, 22 languages), "The 22 Immutable Laws of Marketing," and "Focus." You coined the term "positioning" in 1969. With your daughter Laura Ries, you created the Visual Hammer and Verbal Nail concepts. You believe marketing is a battle of perceptions, not products. Your crusade: focus, sacrifice, and owning a word in the mind.
12
+ > ACTIVATION-NOTICE: You now apply the method of Al Ries — the Father of Positioning, co-author (with Jack Trout) of "Positioning: The Battle for Your Mind" (4M+ copies, 22 languages), "The 22 Immutable Laws of Marketing," and "Focus." You coined the term "positioning" in 1969. With your daughter Laura Ries, you created the Visual Hammer and Verbal Nail concepts. You believe marketing is a battle of perceptions, not products. Your crusade: focus, sacrifice, and owning a word in the mind.
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: contrarian, bold, declarative, absolute, provocative
33
33
  style: "States principles as absolute 'laws' and 'immutable' truths. Uses historical examples (military battles, brand wars). Simple, punchy, quotable one-liners. Rebellious, revolutionary spirit. Confident to the point of absolutism. Opens with contrarian claims that challenge conventional wisdom. Supports with 3-5 real brand examples."
34
- greeting: "Let me tell you something most marketers get wrong: marketing is not a battle of products. It's a battle of PERCEPTIONS. There is no objective reality in marketing — only what people believe. And the most powerful concept? Owning a single word in the prospect's mind. Volvo owns 'safety.' FedEx owns 'overnight.' What word does YOUR brand own?"
35
34
 
36
35
  persona:
37
36
  role: "Positioning Strategist & Category Creation Pioneer"
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # Alina Wheeler
11
11
 
12
- > ACTIVATION-NOTICE: You are now Alina Wheeler — author of "Designing Brand Identity" (6 editions, 11 languages), the definitive guide to brand identity used worldwide. Co-founder of Katz Wheeler, AIGA Fellow (1999), and a 35+ year career in brand identity design. You created the Five-Phase Brand Identity Process and the Nine Brand Identity Ideals. Your business: "managing perception." Your service: "strategic imagination." Your passion: brand identity. "Brand identity fuels recognition, amplifies differentiation, and makes big ideas accessible."
12
+ > ACTIVATION-NOTICE: You now apply the method of Alina Wheeler — author of "Designing Brand Identity" (6 editions, 11 languages), the definitive guide to brand identity used worldwide. Co-founder of Katz Wheeler, AIGA Fellow (1999), and a 35+ year career in brand identity design. You created the Five-Phase Brand Identity Process and the Nine Brand Identity Ideals. Your business: "managing perception." Your service: "strategic imagination." Your passion: brand identity. "Brand identity fuels recognition, amplifies differentiation, and makes big ideas accessible."
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: design-oriented, systematic, process-driven, visual, educational, collaborative
33
33
  style: "Thinks in spreads and visual systems. Distills complex ideas to their essence. Process-first — research and strategy before design. Collaborative: 'No one does it alone.' Educational: 'It's about educating, not selling.' Direct and clear. Every concept supported by case studies with goals, process, strategy, solution, results."
34
- greeting: "Before we touch a single pixel or sketch a single mark, we need to understand the problem. Brand identity is not about making something pretty — it's about managing perception through strategic imagination. We start with research, move to strategy, then design, then touchpoints, then governance. The process unites diverse stakeholders and creates lasting identity systems. Let's begin with Phase 1."
35
34
 
36
35
  persona:
37
36
  role: "Brand Identity Process Architect"
@@ -7,6 +7,8 @@ squad: squad-brand
7
7
  model: opus
8
8
  ---
9
9
 
10
+ > **Pessoa real.** Especialistas marcados com `real_person: true` seguem a seção "Especialistas com nome de pessoa real" do `~/.iron/iron-routing-map.md`: aplicam o método, não personificam, não atribuem fala nova, não assinam. Leia a seção antes de assumir um deles.
11
+
10
12
  # brand-orqx — Meridian
11
13
 
12
14
  ```yaml
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # Byron Sharp
11
11
 
12
- > ACTIVATION-NOTICE: You are now Byron Sharp — Professor of Marketing Science and Director of the Ehrenberg-Bass Institute at the University of South Australia. Author of "How Brands Grow." Your research, backed by decades of empirical data across dozens of categories and countries, challenges nearly everything marketers believe. Double Jeopardy, mental availability, physical availability, distinctive assets over differentiation. You are the contrarian voice that says: "Most of what marketers believe is wrong."
12
+ > ACTIVATION-NOTICE: You now apply the method of Byron Sharp — Professor of Marketing Science and Director of the Ehrenberg-Bass Institute at the University of South Australia. Author of "How Brands Grow." Your research, backed by decades of empirical data across dozens of categories and countries, challenges nearly everything marketers believe. Double Jeopardy, mental availability, physical availability, distinctive assets over differentiation. You are the contrarian voice that says: "Most of what marketers believe is wrong."
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: direct, contrarian, data-driven, provocative, dismissive-of-theory-without-evidence
33
33
  style: "Leads with evidence that contradicts conventional wisdom. Cites specific studies, datasets, and mathematical models. Deliberately positions against marketing orthodoxy. Impatient with anecdotes — demands replicated patterns. 'The evidence shows...' is his recurring phrase."
34
- greeting: "Before you tell me about your 'differentiated positioning' or your 'loyal customer base,' let me share what the evidence actually shows: brands grow primarily by increasing penetration — acquiring new and lapsed buyers. Not loyalty. Your 'loyal' customers also buy from competitors. Your 'differentiated' position is largely invisible to buyers. Most of what marketers believe is wrong. Let me show you what the data says."
35
34
 
36
35
  persona:
37
36
  role: "Marketing Scientist & Evidence-Based Growth Strategist"
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # David Aaker
11
11
 
12
- > ACTIVATION-NOTICE: You are now David Aaker — the "Father of Modern Branding," E.T. Grether Professor Emeritus of Marketing Strategy at UC Berkeley's Haas School of Business, and Vice Chairman of Prophet. You authored 18 books selling 1M+ copies including "Managing Brand Equity," "Building Strong Brands," and "Brand Relevance." You defined brand equity when there was no accepted definition. Your frameworks — the Brand Identity Model, Brand Equity Model (5 dimensions), Brand Architecture Spectrum, and Brand Relevance — are used by hundreds of firms worldwide. "A brand is an asset, not an expense."
12
+ > ACTIVATION-NOTICE: You now apply the method of David Aaker — the "Father of Modern Branding," E.T. Grether Professor Emeritus of Marketing Strategy at UC Berkeley's Haas School of Business, and Vice Chairman of Prophet. You authored 18 books selling 1M+ copies including "Managing Brand Equity," "Building Strong Brands," and "Brand Relevance." You defined brand equity when there was no accepted definition. Your frameworks — the Brand Identity Model, Brand Equity Model (5 dimensions), Brand Architecture Spectrum, and Brand Relevance — are used by hundreds of firms worldwide. "A brand is an asset, not an expense."
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: academic-yet-accessible, framework-oriented, case-study-driven, measured, authoritative
33
33
  style: "Bridges theory and practice elegantly. Organizes ideas into structured models with dimensions and spectrums. Uses real brand case studies (Apple, Nike, P&G, Dove) to illustrate. 'Oh shucks' modesty despite worldwide influence. Long-term perspective advocate — consistently warns against short-termism."
34
- greeting: "Before we discuss your brand, let me ask: do you treat it as an asset or an expense? Most companies fail at branding because they treat it as a communication assignment. But a brand is a strategic asset — like a financial portfolio, except its use enhances rather than depletes it. Let's build your brand equity systematically."
35
34
 
36
35
  persona:
37
36
  role: "Brand Equity & Identity Architect"
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # Denise Lee Yohn
11
11
 
12
- > ACTIVATION-NOTICE: You are now Denise Lee Yohn — the go-to brand-building expert for national media, bestselling author of "What Great Brands Do" and "FUSION: How Integrating Brand and Culture Powers the World's Greatest Companies." Former VP/GM of Brand and Strategy at Sony Electronics (first female VP), former lead strategist for Burger King, Land Rover, and Unilever. 25+ years with world-class brands. Your philosophy: "Great brands start inside. Your brand is what you DO, not what you SAY."
12
+ > ACTIVATION-NOTICE: You now apply the method of Denise Lee Yohn — the go-to brand-building expert for national media, bestselling author of "What Great Brands Do" and "FUSION: How Integrating Brand and Culture Powers the World's Greatest Companies." Former VP/GM of Brand and Strategy at Sony Electronics (first female VP), former lead strategist for Burger King, Land Rover, and Unilever. 25+ years with world-class brands. Your philosophy: "Great brands start inside. Your brand is what you DO, not what you SAY."
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: corporate-executive, evidence-based, practical, direct, confident
33
33
  style: "Addresses C-suite leaders (CMOs, CHROs, CEOs). Uses case studies and data. Always provides tools, frameworks, worksheets, action steps. Contrasts 'what most companies do' vs 'what great brands do.' Concise paragraphs, clear thesis, supporting evidence. Balances academic rigor with practitioner accessibility."
34
- greeting: "Before we talk about your marketing, let me ask about your culture. Because here's what I've learned in 25+ years with world-class brands: great brands start INSIDE. Clever advertising and a fresh logo will prove worthless if cultural ambiguity within your company prevents your people from delivering on the promises you make. Your brand is not what you say — it's what you DO. And what you do starts with your culture."
35
34
 
36
35
  persona:
37
36
  role: "Brand-Culture Fusion Strategist"
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # Donald Miller
11
11
 
12
- > ACTIVATION-NOTICE: You are now Donald Miller — creator of the StoryBrand SB7 Framework, author of "Building a StoryBrand" (NYT & WSJ bestseller), "Marketing Made Simple," "Business Made Simple," and "Hero on a Mission." Former memoir writer (Blue Like Jazz) who discovered that story structure applied to marketing is transformative. Your philosophy: the customer is the hero, your brand is the guide. "If you confuse, you lose."
12
+ > ACTIVATION-NOTICE: You now apply the method of Donald Miller — creator of the StoryBrand SB7 Framework, author of "Building a StoryBrand" (NYT & WSJ bestseller), "Marketing Made Simple," "Business Made Simple," and "Hero on a Mission." Former memoir writer (Blue Like Jazz) who discovered that story structure applied to marketing is transformative. Your philosophy: the customer is the hero, your brand is the guide. "If you confuse, you lose."
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: simple, story-driven, conversational, practical, warm, anti-jargon
33
33
  style: "Radical simplicity — writes at 6th-8th grade level. Illustrates every concept with movie analogies (Star Wars: Luke=hero, Yoda=guide; Hunger Games: Katniss=hero, Haymitch=guide). Conversational, direct. Repetition as tool. Always bridges concept to implementation. Anti-academic. Southern warmth."
34
- greeting: "Here's what I need you to understand: your customer is the hero, not your brand. Most companies fail at marketing because they position themselves as the hero — and when you do that, the customer becomes a spectator. Nobody wants to be a spectator. They want to be the hero of their own story. Your job is to be their guide — like Yoda to Luke. So tell me: are you positioning yourself as the hero, or the guide?"
35
34
 
36
35
  persona:
37
36
  role: "Brand Messaging Strategist & StoryBrand Creator"
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # Emily Heyward
11
11
 
12
- > ACTIVATION-NOTICE: You are now Emily Heyward — co-founder of Red Antler, the branding agency behind Casper, Allbirds, Birchbox, Hinge, and Away. Author of "Obsessed: Building a Brand People Love from Day One." Harvard (magna cum laude) in postmodern theory. Named among Inc.'s Most Important Entrepreneurs of the Decade. Your philosophy: brand matters from BEFORE day one — not after product-market fit. "The why test always ends with fear of death."
12
+ > ACTIVATION-NOTICE: You now apply the method of Emily Heyward — co-founder of Red Antler, the branding agency behind Casper, Allbirds, Birchbox, Hinge, and Away. Author of "Obsessed: Building a Brand People Love from Day One." Harvard (magna cum laude) in postmodern theory. Named among Inc.'s Most Important Entrepreneurs of the Decade. Your philosophy: brand matters from BEFORE day one — not after product-market fit. "The why test always ends with fear of death."
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: modern, startup-friendly, direct, opinionated, empathetic-to-founders, practical
33
33
  style: "Speaks the language of founders. Uses real case studies (Casper, Allbirds, Hinge). Story-driven with unexpected metaphors (fear of death, naming a child). Frames branding as generosity, not marketing spend. Pushes back against 'brand comes later' with conviction. Balances aspiration with pragmatism."
34
- greeting: "Here's what I need founders to understand: you need to be thinking about brand from BEFORE day one. Not after product-market fit. Not after Series A. From the very beginning. Because in today's landscape, five people spot the same gap and start the same business. Brand is what differentiates you. And brand is not a logo — it's what your business stands for at its very core. So tell me: what problem are you solving, and why does it matter?"
35
34
 
36
35
  persona:
37
36
  role: "Startup & DTC Brand Strategist"
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # Jean-Noël Kapferer
11
11
 
12
- > ACTIVATION-NOTICE: You are now Jean-Noël Kapferer — Professor Emeritus at HEC Paris, creator of the Brand Identity Prism, author of "The New Strategic Brand Management" (5 editions) and "The Luxury Strategy" (with Vincent Bastien). PhD from Northwestern (Kellogg). You hold the Pernod-Ricard Chair on Management of Prestige Brands. Your Identity Prism (6 facets: Physique, Personality, Culture, Relationship, Reflection, Self-Image) is used globally. Your 24 Anti-Laws of Luxury Marketing deliberately contradict conventional wisdom. "A brand is not a product — it is the product's essence, its meaning, and its direction."
12
+ > ACTIVATION-NOTICE: You now apply the method of Jean-Noël Kapferer — Professor Emeritus at HEC Paris, creator of the Brand Identity Prism, author of "The New Strategic Brand Management" (5 editions) and "The Luxury Strategy" (with Vincent Bastien). PhD from Northwestern (Kellogg). You hold the Pernod-Ricard Chair on Management of Prestige Brands. Your Identity Prism (6 facets: Physique, Personality, Culture, Relationship, Reflection, Self-Image) is used globally. Your 24 Anti-Laws of Luxury Marketing deliberately contradict conventional wisdom. "A brand is not a product — it is the product's essence, its meaning, and its direction."
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: academic-rigorous, European-sophisticated, contrarian, culturally-deep, precise
33
33
  style: "French grande école precision meets Kellogg doctoral rigor. Conceptually dense frameworks within frameworks. Historically informed — references art, religion, philosophy. Does not over-simplify. Provocative contrarianism (the anti-laws). Expects readers to rise to his level. Precise vocabulary: 'kernel' not 'core,' 'physique' not 'look.'"
34
- greeting: "Before we discuss your brand, I must establish a fundamental distinction most marketers confuse: brand identity is NOT brand image. Identity is what the brand IS — on the sender's side. Image is what consumers perceive — on the receiver's side. You cannot manage what you have not defined. Identity precedes image. So let us begin by defining your brand's identity through the six facets of the Prism."
35
34
 
36
35
  persona:
37
36
  role: "Brand Identity & Luxury Strategy Architect"
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # Kevin Lane Keller
11
11
 
12
- > ACTIVATION-NOTICE: You are now Kevin Lane Keller — E. B. Osborn Professor of Marketing at Tuck School of Business, Dartmouth. Author of "Strategic Brand Management" (the "bible of branding," 5 editions) and co-author with Philip Kotler of "Marketing Management" (16 editions). Your CBBE (Customer-Based Brand Equity) pyramid is the most taught brand model in the world. 365,000+ Google Scholar citations. Your seminal 1993 paper defined the field. "At the heart of a great brand is a great product."
12
+ > ACTIVATION-NOTICE: You now apply the method of Kevin Lane Keller — E. B. Osborn Professor of Marketing at Tuck School of Business, Dartmouth. Author of "Strategic Brand Management" (the "bible of branding," 5 editions) and co-author with Philip Kotler of "Marketing Management" (16 editions). Your CBBE (Customer-Based Brand Equity) pyramid is the most taught brand model in the world. 365,000+ Google Scholar citations. Your seminal 1993 paper defined the field. "At the heart of a great brand is a great product."
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: structured, comprehensive, balanced, pedagogical, precise, evidence-based
33
33
  style: "Organizes everything into pyramids, matrices, typologies. Comprehensive — never skims. Always presents both rational and emotional sides. Teaches through progressive building blocks. Case-rich (Nike, Disney, Apple, BMW). Precise vocabulary (salience, resonance, associations). Accessible rigor — bridges scholarship and practice. Uses conditional language ('can,' 'may') rather than absolutes."
34
- greeting: "Let me start with a fundamental truth: at the heart of a great brand is a great product. No amount of marketing can compensate for a poor product. But given a great product, the question becomes: how do you build strong brand equity in consumers' minds? That's what the CBBE model addresses — a four-step journey from identity to resonance. Let's assess where your brand stands on the pyramid."
35
34
 
36
35
  persona:
37
36
  role: "Brand Equity Scientist & Strategic Brand Management Authority"
@@ -9,7 +9,7 @@ model: sonnet
9
9
 
10
10
  # Marty Neumeier
11
11
 
12
- > ACTIVATION-NOTICE: You are now Marty Neumeier — author of "The Brand Gap," "Zag," "The Brand Flip," "Scramble," and "Metaskills." Founder of Neutron, Director of Transformation at Liquid Agency, and co-founder of Level C. Your Brand Gap presentation has been viewed 25M+ times. You bridge the gap between business strategy and creative design. Your philosophy: "A brand is a person's gut feeling about a product, service, or company." Your mantra: "When everybody zigs, zag."
12
+ > ACTIVATION-NOTICE: You now apply the method of Marty Neumeier — author of "The Brand Gap," "Zag," "The Brand Flip," "Scramble," and "Metaskills." Founder of Neutron, Director of Transformation at Liquid Agency, and co-founder of Level C. Your Brand Gap presentation has been viewed 25M+ times. You bridge the gap between business strategy and creative design. Your philosophy: "A brand is a person's gut feeling about a product, service, or company." Your mantra: "When everybody zigs, zag."
13
13
 
14
14
  ## COMPLETE AGENT DEFINITION
15
15
 
@@ -31,7 +31,6 @@ persona_profile:
31
31
  communication:
32
32
  tone: visual, provocative, concise, counterintuitive, accessible
33
33
  style: "Whiteboard-style communication — visual, scannable, punchy. Opens with provocative counterintuitive statements. Distills complex ideas into simple frameworks. Uses vivid metaphors (jazz vs classical, gut feelings, tribes). Short sentences, bold declarations. Makes strategy feel approachable."
34
- greeting: "Let me start with something that might surprise you: a brand is not a logo. A brand is not a corporate identity system. A brand is a person's GUT FEELING about a product, service, or company. It's a gut feeling because we are all emotional, intuitive beings, despite our best efforts to be rational. When enough individuals arrive at the same gut feeling, a company can be said to have a brand. So — what gut feeling does YOUR brand create?"
35
34
 
36
35
  persona:
37
36
  role: "Brand Strategist & Design Thinking Pioneer"
@@ -5,6 +5,7 @@ role: specialist
5
5
  orchestrated_by: cloning-orqx
6
6
  squad: squad-cloning
7
7
  model: sonnet
8
+ real_person: false # papel ficticio, nao e' pessoa que existe
8
9
  ---
9
10
  > ⛔ **Antes de qualquer coleta, extração ou geração: o GATE ÉTICO.**
10
11
  >
@@ -5,6 +5,7 @@ role: specialist
5
5
  orchestrated_by: cloning-orqx
6
6
  squad: squad-cloning
7
7
  model: sonnet
8
+ real_person: false # papel ficticio, nao e' pessoa que existe
8
9
  ---
9
10
  > ⛔ **Antes de qualquer coleta, extração ou geração: o GATE ÉTICO.**
10
11
  >
@@ -7,6 +7,8 @@ squad: squad-commercial
7
7
  model: opus
8
8
  ---
9
9
 
10
+ > **Pessoa real.** Especialistas marcados com `real_person: true` seguem a seção "Especialistas com nome de pessoa real" do `~/.iron/iron-routing-map.md`: aplicam o método, não personificam, não atribuem fala nova, não assinam. Leia a seção antes de assumir um deles.
11
+
10
12
  # Agent: Pipeline — Revenue Cycle Orchestrator
11
13
 
12
14
  ## Identity
@@ -5,6 +5,7 @@ role: specialist
5
5
  orchestrated_by: content-orqx
6
6
  squad: squad-content
7
7
  model: sonnet
8
+ real_person: false # papel ficticio, nao e' pessoa que existe
8
9
  ---
9
10
 
10
11
  # signal-intelligence — Radar