@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.
- package/README.md +2 -2
- package/bin/morph-spec.js +2 -1
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +3 -11
- package/framework/MORPH.md +53 -55
- package/framework/agents.json +1 -1
- package/framework/docs/CLI.md +3 -3
- package/framework/hooks/claude-code/core/enforce-phase-writes.js +23 -2
- package/framework/hooks/claude-code/core/state-sync.js +5 -0
- package/framework/hooks/claude-code/core/telemetry-log.js +34 -3
- package/framework/hooks/claude-code/core/validate-completion.js +116 -4
- package/framework/hooks/claude-code/core/worktree-context.js +9 -4
- package/framework/hooks/shared/telemetry-logger.js +64 -1
- package/framework/phases.json +1 -1
- package/framework/schemas/tasks.schema.json +1 -1
- package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
- package/framework/skills/core/morph-apply/SKILL.md +6 -15
- package/framework/skills/core/morph-brainstorming/SKILL.md +3 -3
- package/framework/skills/core/morph-eval/SKILL.md +1 -1
- package/framework/skills/core/morph-hotfix/SKILL.md +1 -1
- package/framework/skills/core/morph-implement/SKILL.md +1 -1
- package/framework/skills/core/morph-plan/SKILL.md +6 -4
- package/framework/skills/core/morph-proposal/SKILL.md +10 -1
- package/framework/skills/core/morph-review/SKILL.md +4 -3
- package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
- package/framework/skills/core/morph-standards/SKILL.md +29 -15
- package/framework/skills/core/morph-uiux/SKILL.md +135 -0
- package/package.json +1 -1
- package/src/commands/observability/cost.js +93 -5
- package/src/commands/project/update.js +2 -63
- package/src/commands/state/gate-check.js +10 -3
- package/src/core/templates/template-registry.js +2 -30
- package/src/lib/git/default-branch.js +44 -8
- package/src/lib/installers/templates-reconcile.js +81 -0
- package/src/lib/risk-detector.js +20 -1
- package/src/lib/telemetry/telemetry-reader.js +80 -4
- 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).
|
|
279
|
-
//
|
|
280
|
-
//
|
|
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
|
-
|
|
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 ---
|