@polymorphism-tech/morph-spec 8.19.0 → 8.21.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.
Files changed (40) hide show
  1. package/README.md +2 -2
  2. package/bin/morph-spec.js +2 -1
  3. package/claude-plugin.json +1 -1
  4. package/docs/CHEATSHEET.md +1 -1
  5. package/docs/QUICKSTART.md +1 -1
  6. package/framework/CLAUDE.md +3 -11
  7. package/framework/MORPH.md +53 -55
  8. package/framework/agents.json +1 -1
  9. package/framework/docs/CLI.md +3 -3
  10. package/framework/hooks/claude-code/core/enforce-phase-writes.js +23 -2
  11. package/framework/hooks/claude-code/core/state-sync.js +5 -0
  12. package/framework/hooks/claude-code/core/telemetry-log.js +34 -3
  13. package/framework/hooks/claude-code/core/validate-completion.js +116 -4
  14. package/framework/hooks/claude-code/core/worktree-context.js +9 -4
  15. package/framework/hooks/shared/telemetry-logger.js +64 -1
  16. package/framework/phases.json +1 -1
  17. package/framework/schemas/tasks.schema.json +1 -1
  18. package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
  19. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
  20. package/framework/skills/core/morph-apply/SKILL.md +6 -15
  21. package/framework/skills/core/morph-brainstorming/SKILL.md +3 -3
  22. package/framework/skills/core/morph-eval/SKILL.md +1 -1
  23. package/framework/skills/core/morph-hotfix/SKILL.md +1 -1
  24. package/framework/skills/core/morph-implement/SKILL.md +1 -1
  25. package/framework/skills/core/morph-plan/SKILL.md +6 -4
  26. package/framework/skills/core/morph-proposal/SKILL.md +10 -1
  27. package/framework/skills/core/morph-review/SKILL.md +4 -3
  28. package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
  29. package/framework/skills/core/morph-standards/SKILL.md +29 -15
  30. package/framework/skills/core/morph-uiux/SKILL.md +135 -0
  31. package/package.json +1 -1
  32. package/src/commands/observability/cost.js +93 -5
  33. package/src/commands/project/update.js +2 -63
  34. package/src/commands/state/gate-check.js +10 -3
  35. package/src/core/templates/template-registry.js +2 -30
  36. package/src/lib/git/default-branch.js +44 -8
  37. package/src/lib/installers/templates-reconcile.js +81 -0
  38. package/src/lib/risk-detector.js +20 -1
  39. package/src/lib/telemetry/telemetry-reader.js +80 -4
  40. package/src/scripts/setup-infra.js +23 -5
@@ -27,11 +27,12 @@ import {
27
27
  } from '../utils/file-copier.js';
28
28
  import { parseStacks, getProjectTags, shouldInstall } from '../lib/stack-filter.js';
29
29
  import { injectMorphImport } from '../utils/claude-md-injector.js';
30
- import { saveProjectMorphVersion, getInstalledCLIVersion } from '../utils/version-checker.js';
30
+ import { saveProjectMorphVersion, getInstalledCLIVersion, getProjectMorphVersion } from '../utils/version-checker.js';
31
31
  import { installClaudeHooks, installGlobalStatusline } from '../utils/claude-settings-manager.js';
32
32
  import { installSkills } from '../utils/skills-installer.js';
33
33
  import { installAgents, installDomainAgents } from '../utils/agents-installer.js';
34
34
  import { resolvePrimaryRoot } from '../commands/project/worktree.js';
35
+ import { reconcileLegacyTemplatesCopy } from '../lib/installers/templates-reconcile.js';
35
36
 
36
37
  const FRAMEWORK_DIR = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'framework');
37
38
 
@@ -275,12 +276,29 @@ export async function setupInfra(targetPath, { _exec = execSync, reinstall = fal
275
276
  // byte-for-byte redundant 348KB copy on every install/update.
276
277
  log('Step 5: Skipping framework templates copy (resolved from package; local override still supported)...');
277
278
  // Cópia legada de instalação pré-R3: se existir, ela SOMBREIA os templates
278
- // do pacote (override-first). O `morph-spec update` reconcilia (remove cópia
279
- // stale por fronteira de versão); aqui só avisamos — init não conhece a
280
- // versão anterior do projeto para decidir com segurança.
279
+ // do pacote (override-first). `update` sempre reconcilia porque
280
+ // checkProjectOutdated() já leu a versão anterior do projeto antes de
281
+ // chamar update. Aqui (init/setup-infra) fazemos o mesmo QUANDO a mesma
282
+ // fonte está disponível: getProjectMorphVersion() lê .morph/.morphversion
283
+ // — o MESMO arquivo/campo que checkProjectOutdated().current usa — e essa
284
+ // leitura acontece ANTES do Passo 17 (saveProjectMorphVersion) sobrescrever
285
+ // esse arquivo com a versão atual, então "versão anterior" aqui é real, não
286
+ // a que este próprio run está prestes a gravar. Sem esse registro (projeto
287
+ // nunca rastreado antes, ou greenfield), não há fonte segura — mantém o
288
+ // aviso como fallback, igual ao comportamento anterior.
281
289
  const legacyTemplatesDir = join(frameworkDestDir, 'templates');
282
290
  if (await pathExists(legacyTemplatesDir)) {
283
- log(' ⚠ .morph/framework/templates/ existe (instalação antiga) e tem precedência sobre os templates do pacote — rode `morph-spec update` para reconciliar, ou apague se não for customização sua.');
291
+ const priorVersionInfo = await getProjectMorphVersion(targetPath);
292
+ if (priorVersionInfo) {
293
+ const result = reconcileLegacyTemplatesCopy(legacyTemplatesDir, priorVersionInfo.morphVersion);
294
+ if (result === 'removed-legacy') {
295
+ log(' ✓ .morph/framework/templates/ (cópia legada de instalação antiga removida — resolvida do pacote)');
296
+ } else {
297
+ log(' ⚠ .morph/framework/templates/ (override local presente, versão anterior pós-R3 — preservado, não reconciliado)');
298
+ }
299
+ } else {
300
+ log(' ⚠ .morph/framework/templates/ existe (instalação antiga) e tem precedência sobre os templates do pacote — sem versão anterior registrada em .morph/.morphversion para decidir com segurança; rode `morph-spec update` para reconciliar, ou apague se não for customização sua.');
301
+ }
284
302
  }
285
303
 
286
304
  // --- 6. Copy framework/standards → .morph/framework/standards ---