@polymorphism-tech/morph-spec 4.7.2 → 4.8.4
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/LICENSE +1 -2
- package/README.md +379 -414
- package/bin/morph-spec.js +57 -394
- package/bin/validate.js +2 -26
- package/claude-plugin.json +2 -2
- package/docs/CHEATSHEET.md +203 -221
- package/docs/QUICKSTART.md +2 -8
- package/framework/CLAUDE.md +1 -1
- package/framework/commands/morph-proposal.md +3 -3
- package/framework/hooks/README.md +2 -5
- package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +4 -55
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +20 -5
- package/framework/hooks/claude-code/statusline.py +6 -1
- package/framework/hooks/dev/check-sync-health.js +117 -0
- package/framework/hooks/dev/guard-version-numbers.js +57 -0
- package/framework/hooks/dev/sync-standards-registry.js +60 -0
- package/framework/hooks/dev/sync-template-registry.js +60 -0
- package/framework/hooks/dev/validate-skill-format.js +70 -0
- package/framework/hooks/dev/validate-standard-format.js +73 -0
- package/framework/hooks/shared/payload-utils.js +39 -0
- package/framework/hooks/shared/state-reader.js +25 -1
- package/framework/rules/morph-workflow.md +1 -1
- package/framework/skills/level-0-meta/morph-init/SKILL.md +216 -0
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +4 -4
- package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +4 -4
- package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +1 -1
- package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +192 -191
- package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -180
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +339 -338
- package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -253
- package/framework/skills/level-1-workflows/phase-setup/SKILL.md +168 -170
- package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +284 -283
- package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -245
- package/framework/templates/examples/design-system-examples.md +1 -1
- package/framework/templates/ui/FluentDesignTheme.cs +1 -1
- package/framework/templates/ui/MudTheme.cs +1 -1
- package/framework/templates/ui/design-system.css +1 -1
- package/package.json +7 -5
- package/src/commands/agents/index.js +1 -2
- package/src/commands/index.js +13 -16
- package/src/commands/project/doctor.js +100 -14
- package/src/commands/project/index.js +7 -10
- package/src/commands/project/init.js +398 -528
- package/src/commands/project/install-plugin-cmd.js +28 -0
- package/src/commands/project/setup-infra-cmd.js +12 -0
- package/src/commands/project/tutorial.js +115 -0
- package/src/commands/state/approve.js +213 -221
- package/src/commands/state/index.js +0 -1
- package/src/commands/state/state.js +337 -365
- package/src/commands/templates/index.js +0 -4
- package/src/commands/trust/trust.js +1 -93
- package/src/commands/utils/index.js +1 -5
- package/src/commands/validation/index.js +1 -5
- package/src/core/registry/command-registry.js +11 -285
- package/src/core/state/state-manager.js +5 -2
- package/src/lib/detectors/index.js +81 -87
- package/src/lib/detectors/structure-detector.js +275 -273
- package/src/lib/generators/recap-generator.js +232 -225
- package/src/scripts/global-install.js +34 -0
- package/src/scripts/install-plugin.js +126 -0
- package/src/scripts/setup-infra.js +203 -0
- package/src/utils/agents-installer.js +10 -1
- package/src/utils/hooks-installer.js +66 -3
- package/.morph/.morphversion +0 -5
- package/.morph/analytics/threads-log.jsonl +0 -5
- package/.morph/config/config.json +0 -8
- package/.morph/framework/agents.json +0 -1815
- package/.morph/framework/hooks/README.md +0 -205
- package/.morph/framework/hooks/claude-code/notification/approval-reminder.js +0 -54
- package/.morph/framework/hooks/claude-code/post-tool-use/dispatch.js +0 -83
- package/.morph/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +0 -42
- package/.morph/framework/hooks/claude-code/pre-compact/save-morph-context.js +0 -61
- package/.morph/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +0 -71
- package/.morph/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +0 -58
- package/.morph/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +0 -64
- package/.morph/framework/hooks/claude-code/session-start/inject-morph-context.js +0 -94
- package/.morph/framework/hooks/claude-code/statusline.py +0 -538
- package/.morph/framework/hooks/claude-code/statusline.sh +0 -7
- package/.morph/framework/hooks/claude-code/stop/validate-completion.js +0 -88
- package/.morph/framework/hooks/claude-code/user-prompt/enrich-prompt.js +0 -91
- package/.morph/framework/hooks/git/commit-msg/conventional-commits.sh +0 -33
- package/.morph/framework/hooks/git/pre-commit/agents.sh +0 -25
- package/.morph/framework/hooks/git/pre-commit/orchestrator.sh +0 -64
- package/.morph/framework/hooks/git/pre-commit/specs.sh +0 -50
- package/.morph/framework/hooks/git/pre-push/run-tests.sh +0 -44
- package/.morph/framework/hooks/shared/hook-response.js +0 -45
- package/.morph/framework/hooks/shared/phase-utils.js +0 -129
- package/.morph/framework/hooks/shared/state-reader.js +0 -138
- package/.morph/framework/hooks/shared/stdin-reader.js +0 -26
- package/.morph/framework/standards/STANDARDS.json +0 -933
- package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
- package/.morph/framework/standards/ai-agents/production.md +0 -415
- package/.morph/framework/standards/ai-agents/setup.md +0 -418
- package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
- package/.morph/framework/standards/ai-agents/workflows.md +0 -354
- package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
- package/.morph/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
- package/.morph/framework/standards/architecture/ddd/complexity-levels.md +0 -108
- package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
- package/.morph/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
- package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
- package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
- package/.morph/framework/standards/backend/api/rest.md +0 -492
- package/.morph/framework/standards/backend/api/validation.md +0 -88
- package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
- package/.morph/framework/standards/backend/database/ef-core.md +0 -199
- package/.morph/framework/standards/backend/database/migrations.md +0 -393
- package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
- package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
- package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
- package/.morph/framework/standards/backend/dotnet/async.md +0 -366
- package/.morph/framework/standards/backend/dotnet/core.md +0 -117
- package/.morph/framework/standards/backend/dotnet/di.md +0 -439
- package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
- package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
- package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
- package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
- package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
- package/.morph/framework/standards/context/analytics.md +0 -96
- package/.morph/framework/standards/context/bundles.md +0 -110
- package/.morph/framework/standards/context/priming.md +0 -78
- package/.morph/framework/standards/core/architecture.md +0 -185
- package/.morph/framework/standards/core/coding.md +0 -214
- package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
- package/.morph/framework/standards/core/git.md +0 -185
- package/.morph/framework/standards/core/testing.md +0 -295
- package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
- package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
- package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
- package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
- package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
- package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
- package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
- package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
- package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
- package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
- package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
- package/.morph/framework/standards/frontend/blazor/state.md +0 -191
- package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
- package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
- package/.morph/framework/standards/frontend/nextjs/app-router.md +0 -123
- package/.morph/framework/standards/frontend/nextjs/components.md +0 -132
- package/.morph/framework/standards/frontend/nextjs/data-fetching.md +0 -126
- package/.morph/framework/standards/frontend/nextjs/forms.md +0 -128
- package/.morph/framework/standards/frontend/nextjs/naming-conventions.md +0 -67
- package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -215
- package/.morph/framework/standards/frontend/nextjs/project-structure.md +0 -102
- package/.morph/framework/standards/frontend/nextjs/state-management.md +0 -72
- package/.morph/framework/standards/frontend/nextjs/testing.md +0 -111
- package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
- package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
- package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
- package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
- package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
- package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
- package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
- package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
- package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
- package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
- package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
- package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
- package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
- package/.morph/framework/standards/integration/api/graphql.md +0 -91
- package/.morph/framework/standards/integration/api/grpc.md +0 -114
- package/.morph/framework/standards/integration/api/rest-design.md +0 -95
- package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
- package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
- package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
- package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
- package/.morph/framework/standards/observability/logging.md +0 -131
- package/.morph/framework/standards/observability/metrics.md +0 -121
- package/.morph/framework/standards/observability/monitoring.md +0 -114
- package/.morph/framework/standards/observability/tracing.md +0 -132
- package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
- package/.morph/framework/standards/workflows/thread-management.md +0 -113
- package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
- package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
- package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
- package/.morph/framework/templates/README.md +0 -814
- package/.morph/framework/templates/REGISTRY.json +0 -1888
- package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
- package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
- package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
- package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
- package/.morph/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
- package/.morph/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
- package/.morph/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
- package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
- package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
- package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
- package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
- package/.morph/framework/templates/code/dotnet/test.cs +0 -239
- package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
- package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
- package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
- package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
- package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
- package/.morph/framework/templates/context/CONTEXT.md +0 -181
- package/.morph/framework/templates/docs/clarifications.md +0 -253
- package/.morph/framework/templates/docs/onboarding.md +0 -123
- package/.morph/framework/templates/docs/proposal.md +0 -182
- package/.morph/framework/templates/docs/schema-analysis.md +0 -119
- package/.morph/framework/templates/docs/spec.md +0 -198
- package/.morph/framework/templates/docs/ui-components.md +0 -124
- package/.morph/framework/templates/docs/ui-design-system.md +0 -76
- package/.morph/framework/templates/docs/ui-flows.md +0 -167
- package/.morph/framework/templates/docs/ui-mockups.md +0 -98
- package/.morph/framework/templates/docs/user-stories.md +0 -34
- package/.morph/framework/templates/examples/design-system-examples.md +0 -357
- package/.morph/framework/templates/examples/spec-examples.md +0 -90
- package/.morph/framework/templates/feature/decisions.md +0 -187
- package/.morph/framework/templates/feature/recap.md +0 -146
- package/.morph/framework/templates/feature/tasks.md +0 -199
- package/.morph/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +0 -43
- package/.morph/framework/templates/frontend/nextjs/client-component.tsx.hbs +0 -26
- package/.morph/framework/templates/frontend/nextjs/env.mjs.hbs +0 -32
- package/.morph/framework/templates/frontend/nextjs/feature-form.tsx.hbs +0 -56
- package/.morph/framework/templates/frontend/nextjs/page.tsx.hbs +0 -22
- package/.morph/framework/templates/frontend/nextjs/tsconfig.json.hbs +0 -26
- package/.morph/framework/templates/frontend/nextjs/use-feature.ts.hbs +0 -54
- package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
- package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
- package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
- package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
- package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
- package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
- package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
- package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
- package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
- package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
- package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
- package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
- package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
- package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
- package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
- package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
- package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
- package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
- package/.morph/framework/templates/infrastructure/github/README.md +0 -593
- package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
- package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
- package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
- package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
- package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
- package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
- package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
- package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
- package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
- package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
- package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
- package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
- package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
- package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
- package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
- package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
- package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
- package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
- package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
- package/.morph/framework/templates/project-structure/dotnet-ddd.md +0 -70
- package/.morph/framework/templates/saas/subscription.cs +0 -347
- package/.morph/framework/templates/saas/tenant.cs +0 -338
- package/.morph/framework/templates/state.template.json +0 -17
- package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
- package/.morph/framework/templates/ui/MudTheme.cs +0 -281
- package/.morph/framework/templates/ui/design-system.css +0 -226
- package/.morph/logs/tool-failures.log +0 -17
- package/.morph/memory/pre-compact-2026-02-24T17-43-30-049Z.json +0 -16
- package/.morph/plans/eager-watching-bunny.md +0 -105
- package/.morph/plans/temporal-seeking-nebula.md +0 -45
- package/.morph/state.json +0 -48
- package/CLAUDE.md +0 -77
- package/docs/ARCHITECTURE.md +0 -331
- package/docs/COMMAND-FLOWS.md +0 -368
- package/docs/claude-alignment-report.md +0 -137
- package/docs/examples/order-management/contracts.cs +0 -84
- package/docs/examples/order-management/proposal.md +0 -24
- package/docs/examples/order-management/spec.md +0 -162
- package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +0 -512
- package/docs/plans/2026-02-22-claude-settings.md +0 -515
- package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +0 -728
- package/docs/plans/2026-02-22-morph-spec-next.md +0 -478
- package/docs/plans/2026-02-22-native-alignment-design.md +0 -199
- package/docs/plans/2026-02-22-native-alignment-impl.md +0 -925
- package/docs/plans/2026-02-22-native-enrichment-design.md +0 -244
- package/docs/plans/2026-02-22-native-enrichment.md +0 -735
- package/docs/plans/2026-02-23-ddd-architecture-refactor.md +0 -1153
- package/docs/plans/2026-02-23-ddd-nextsteps.md +0 -682
- package/docs/plans/2026-02-23-infra-architect-refactor.md +0 -437
- package/docs/plans/2026-02-23-nextjs-code-review-design.md +0 -156
- package/docs/plans/2026-02-23-nextjs-code-review-impl.md +0 -1254
- package/docs/plans/2026-02-23-nextjs-standards-design.md +0 -149
- package/docs/plans/2026-02-23-nextjs-standards-impl.md +0 -1846
- package/scripts/generate-refs.js +0 -336
- package/scripts/generate-standards-registry.js +0 -44
- package/scripts/scan-nextjs.mjs +0 -169
- package/scripts/validate-real.mjs +0 -255
- package/src/commands/feature/create-story.js +0 -362
- package/src/commands/feature/index.js +0 -6
- package/src/commands/feature/shard-spec.js +0 -225
- package/src/commands/feature/sprint-status.js +0 -250
- package/src/commands/generation/generate-onboarding.js +0 -169
- package/src/commands/generation/generate.js +0 -276
- package/src/commands/generation/index.js +0 -5
- package/src/commands/learning/capture-pattern.js +0 -121
- package/src/commands/learning/index.js +0 -5
- package/src/commands/learning/search-patterns.js +0 -126
- package/src/commands/mcp/mcp.js +0 -102
- package/src/commands/project/changes.js +0 -66
- package/src/commands/project/cost.js +0 -179
- package/src/commands/project/diff.js +0 -278
- package/src/commands/project/revert.js +0 -173
- package/src/commands/project/standards.js +0 -80
- package/src/commands/project/sync.js +0 -167
- package/src/commands/project/update-agents.js +0 -23
- package/src/commands/state/rollback-phase.js +0 -185
- package/src/commands/templates/template-customize.js +0 -87
- package/src/commands/templates/template-list.js +0 -114
- package/src/commands/templates/template-show.js +0 -129
- package/src/commands/templates/template-validate.js +0 -91
- package/src/commands/utils/troubleshoot.js +0 -222
- package/src/commands/validation/analyze-blazor-concurrency.js +0 -193
- package/src/commands/validation/lint-fluent.js +0 -352
- package/src/commands/validation/validate-blazor-state.js +0 -210
- package/src/commands/validation/validate-blazor.js +0 -156
- package/src/commands/validation/validate-css.js +0 -84
- package/src/lib/detectors/conversation-analyzer.js +0 -163
- package/src/lib/learning/index.js +0 -7
- package/src/lib/learning/learning-system.js +0 -520
- package/src/lib/troubleshooting/index.js +0 -8
- package/src/lib/troubleshooting/troubleshoot-grep.js +0 -198
- package/src/lib/troubleshooting/troubleshoot-index.js +0 -144
- package/src/llm/environment-detector.js +0 -43
package/docs/CHEATSHEET.md
CHANGED
|
@@ -1,221 +1,203 @@
|
|
|
1
|
-
# morph-spec Cheat Sheet
|
|
2
|
-
|
|
3
|
-
## Setup
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
npm install -g @polymorphism-tech/morph-spec # install globally
|
|
7
|
-
morph-spec init # initialize project
|
|
8
|
-
morph-spec init --wizard # interactive wizard
|
|
9
|
-
morph-spec init --force # overwrite existing
|
|
10
|
-
morph-spec update # sync framework files
|
|
11
|
-
morph-spec doctor # health check
|
|
12
|
-
morph-spec --version
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Phase workflow
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
proposal → setup → [uiux] → design → clarify → tasks → implement → [sync]
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
Phases in brackets are optional.
|
|
24
|
-
|
|
25
|
-
| Phase | Directory | Output files | Gate |
|
|
26
|
-
|-------|-----------|--------------|------|
|
|
27
|
-
| proposal | `0-proposal/` | `proposal.md` | ✅ Approval |
|
|
28
|
-
| setup | *(no output)* | context loaded | — |
|
|
29
|
-
| uiux *(optional)* | `2-ui/` | `design-system.md`, `mockups.md`, `components.md`, `flows.md` | ✅ Approval |
|
|
30
|
-
| design | `1-design/` | `spec.md`, `contracts.cs`, `decisions.md` | ✅ Approval |
|
|
31
|
-
| clarify | `1-design/` | spec updated | — |
|
|
32
|
-
| tasks | `3-tasks/` | `tasks.md` | ✅ Approval |
|
|
33
|
-
| implement | `4-implement/` | code + `recap.md` | — |
|
|
34
|
-
| sync *(optional)* | `.morph/context/` | standards updated | — |
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## Slash commands (Claude Code)
|
|
39
|
-
|
|
40
|
-
| Command | Description |
|
|
41
|
-
|---------|-------------|
|
|
42
|
-
| `/morph-proposal {feature}` | Full spec pipeline — phases 0–4 with approval gates |
|
|
43
|
-
| `/morph-apply {feature}` | Implement approved feature — phase 5 |
|
|
44
|
-
| `/morph-status` | Project-wide feature status dashboard |
|
|
45
|
-
| `/morph-preflight` | Pre-implementation validation (7 checks) |
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## CLI — project management
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
morph-spec init [--
|
|
53
|
-
morph-spec update [--
|
|
54
|
-
morph-spec doctor
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
morph-spec state
|
|
65
|
-
morph-spec
|
|
66
|
-
morph-spec
|
|
67
|
-
morph-spec
|
|
68
|
-
morph-spec
|
|
69
|
-
morph-spec
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
morph-spec
|
|
90
|
-
morph-spec
|
|
91
|
-
morph-spec
|
|
92
|
-
morph-spec
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
morph-spec
|
|
102
|
-
morph-spec
|
|
103
|
-
morph-spec
|
|
104
|
-
morph-spec
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
morph-spec
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
morph-spec
|
|
130
|
-
morph-spec
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
morph
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
├──
|
|
174
|
-
│
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
.
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|------|-------------|
|
|
205
|
-
| `.morph/state.json` | `permissions.deny` |
|
|
206
|
-
| `.morph/framework/**` | `permissions.deny` |
|
|
207
|
-
| Approved spec/contracts | `protect-spec-files.js` hook |
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## Links
|
|
212
|
-
|
|
213
|
-
- [QUICKSTART.md](QUICKSTART.md) — step-by-step guide
|
|
214
|
-
- [ARCHITECTURE.md](ARCHITECTURE.md) — system design
|
|
215
|
-
- [CHANGELOG.md](../CHANGELOG.md) — release history
|
|
216
|
-
- [npm](https://www.npmjs.com/package/@polymorphism-tech/morph-spec)
|
|
217
|
-
- support@polymorphism.com.br
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
*morph-spec v4.6.0 by Polymorphism Tech*
|
|
1
|
+
# morph-spec Cheat Sheet
|
|
2
|
+
|
|
3
|
+
## Setup
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install -g @polymorphism-tech/morph-spec # install globally
|
|
7
|
+
morph-spec init # initialize project
|
|
8
|
+
morph-spec init --wizard # interactive wizard
|
|
9
|
+
morph-spec init --force # overwrite existing
|
|
10
|
+
morph-spec update # sync framework files
|
|
11
|
+
morph-spec doctor # health check
|
|
12
|
+
morph-spec --version
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Phase workflow
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
proposal → setup → [uiux] → design → clarify → tasks → implement → [sync]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Phases in brackets are optional.
|
|
24
|
+
|
|
25
|
+
| Phase | Directory | Output files | Gate |
|
|
26
|
+
|-------|-----------|--------------|------|
|
|
27
|
+
| proposal | `0-proposal/` | `proposal.md` | ✅ Approval |
|
|
28
|
+
| setup | *(no output)* | context loaded | — |
|
|
29
|
+
| uiux *(optional)* | `2-ui/` | `design-system.md`, `mockups.md`, `components.md`, `flows.md` | ✅ Approval |
|
|
30
|
+
| design | `1-design/` | `spec.md`, `contracts.cs`, `decisions.md` | ✅ Approval |
|
|
31
|
+
| clarify | `1-design/` | spec updated | — |
|
|
32
|
+
| tasks | `3-tasks/` | `tasks.md` | ✅ Approval |
|
|
33
|
+
| implement | `4-implement/` | code + `recap.md` | — |
|
|
34
|
+
| sync *(optional)* | `.morph/context/` | standards updated | — |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Slash commands (Claude Code)
|
|
39
|
+
|
|
40
|
+
| Command | Description |
|
|
41
|
+
|---------|-------------|
|
|
42
|
+
| `/morph-proposal {feature}` | Full spec pipeline — phases 0–4 with approval gates |
|
|
43
|
+
| `/morph-apply {feature}` | Implement approved feature — phase 5 |
|
|
44
|
+
| `/morph-status` | Project-wide feature status dashboard |
|
|
45
|
+
| `/morph-preflight` | Pre-implementation validation (7 checks) |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## CLI — project management
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
morph-spec init [--force] [--skip-mcp]
|
|
53
|
+
morph-spec update [--templates] [--standards]
|
|
54
|
+
morph-spec doctor
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## CLI — feature workflow
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
morph-spec state list # all features
|
|
63
|
+
morph-spec state get {feature} [--json] # feature detail
|
|
64
|
+
morph-spec state set {feature} {key} {value} # update property
|
|
65
|
+
morph-spec phase advance {feature} # advance to next phase
|
|
66
|
+
morph-spec status {feature} [--json] [--verbose]
|
|
67
|
+
morph-spec task done {feature} # mark task complete
|
|
68
|
+
morph-spec task start {feature} # start next task
|
|
69
|
+
morph-spec task next {feature} # preview next task
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## CLI — validation
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
morph-spec validate # all validators
|
|
78
|
+
morph-spec validate architecture
|
|
79
|
+
morph-spec validate packages
|
|
80
|
+
morph-spec validate contrast [--wcag-aaa]
|
|
81
|
+
morph-spec validate-feature {feature} [--phase {phase}] [--json]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## CLI — utilities
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
morph-spec generate recap {feature} # auto-generate recap.md
|
|
90
|
+
morph-spec template render {id} {output} {vars-json}
|
|
91
|
+
morph-spec trust status [feature]
|
|
92
|
+
morph-spec trust set {feature} {level} [reason]
|
|
93
|
+
morph-spec mcp setup [name] [--list] [--auto]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## State — mark-output
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
morph-spec state mark-output {feature} proposal
|
|
102
|
+
morph-spec state mark-output {feature} spec
|
|
103
|
+
morph-spec state mark-output {feature} contracts
|
|
104
|
+
morph-spec state mark-output {feature} decisions
|
|
105
|
+
morph-spec state mark-output {feature} tasks
|
|
106
|
+
morph-spec state mark-output {feature} recap
|
|
107
|
+
|
|
108
|
+
# UI outputs (camelCase or kebab-case both work)
|
|
109
|
+
morph-spec state mark-output {feature} uiDesignSystem
|
|
110
|
+
morph-spec state mark-output {feature} uiMockups
|
|
111
|
+
morph-spec state mark-output {feature} uiComponents
|
|
112
|
+
morph-spec state mark-output {feature} uiFlows
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## State — agents
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
morph-spec state add-agent {feature} {agent-id}
|
|
121
|
+
morph-spec state remove-agent {feature} {agent-id}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Checkpoints
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
morph-spec checkpoint-save {feature}
|
|
130
|
+
morph-spec checkpoint-restore {feature}
|
|
131
|
+
morph-spec checkpoint-list {feature}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Approvals
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
morph-spec approve {feature} {gate} # approve a gate
|
|
140
|
+
morph-spec approval-status {feature} # show gate status
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Directory structure
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
.morph/
|
|
149
|
+
├── config/
|
|
150
|
+
│ └── config.json # project config (editable)
|
|
151
|
+
├── framework/ # READ-ONLY
|
|
152
|
+
│ ├── agents.json # 38 agents, 4 tiers
|
|
153
|
+
│ ├── standards/ # 82 standards across 11 categories
|
|
154
|
+
│ └── templates/ # code and IaC templates
|
|
155
|
+
├── context/ # project context (editable)
|
|
156
|
+
│ ├── README.md
|
|
157
|
+
│ └── standards.md
|
|
158
|
+
├── features/
|
|
159
|
+
│ └── {feature}/
|
|
160
|
+
│ ├── 0-proposal/proposal.md
|
|
161
|
+
│ ├── 1-design/spec.md, contracts.cs, decisions.md
|
|
162
|
+
│ ├── 2-ui/design-system.md, mockups.md, components.md, flows.md
|
|
163
|
+
│ ├── 3-tasks/tasks.md
|
|
164
|
+
│ └── 4-implement/recap.md
|
|
165
|
+
├── checkpoints/
|
|
166
|
+
├── logs/
|
|
167
|
+
└── state.json # READ-ONLY — CLI managed
|
|
168
|
+
|
|
169
|
+
.claude/
|
|
170
|
+
├── commands/ # slash commands
|
|
171
|
+
├── skills/ # framework skills (SKILL.md per dir)
|
|
172
|
+
├── agents/ # native subagents (38)
|
|
173
|
+
│ ├── morph-{id}.md # tier 1-2 agents
|
|
174
|
+
│ └── morph-domain-{name}.md # tier 3 domain agents
|
|
175
|
+
├── rules/ # path-scoped rules (6 files)
|
|
176
|
+
└── settings.local.json # hooks (11)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Protected files
|
|
182
|
+
|
|
183
|
+
These files are never edited directly. Use CLI commands or `morph-spec update` instead:
|
|
184
|
+
|
|
185
|
+
| Path | Protected by |
|
|
186
|
+
|------|-------------|
|
|
187
|
+
| `.morph/state.json` | `permissions.deny` |
|
|
188
|
+
| `.morph/framework/**` | `permissions.deny` |
|
|
189
|
+
| Approved spec/contracts | `protect-spec-files.js` hook |
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Links
|
|
194
|
+
|
|
195
|
+
- [QUICKSTART.md](QUICKSTART.md) — step-by-step guide
|
|
196
|
+
- [ARCHITECTURE.md](ARCHITECTURE.md) — system design
|
|
197
|
+
- [CHANGELOG.md](../CHANGELOG.md) — release history
|
|
198
|
+
- [npm](https://www.npmjs.com/package/@polymorphism-tech/morph-spec)
|
|
199
|
+
- support@polymorphism.com.br
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
*morph-spec v4.8.4 by Polymorphism Tech*
|
package/docs/QUICKSTART.md
CHANGED
|
@@ -29,7 +29,7 @@ morph-spec init
|
|
|
29
29
|
- Creates `.morph/` with framework files, standards, and templates
|
|
30
30
|
- Creates `.morph/context/` with inferred project context
|
|
31
31
|
- Installs `.claude/skills/`, `.claude/agents/`, `.claude/rules/`
|
|
32
|
-
- Writes `.claude/settings.local.json` with
|
|
32
|
+
- Writes `.claude/settings.local.json` with 10 Claude Code hooks
|
|
33
33
|
- Copies `CLAUDE.md` with runtime instructions
|
|
34
34
|
|
|
35
35
|
Verify the installation:
|
|
@@ -118,12 +118,6 @@ morph-spec state get my-feature
|
|
|
118
118
|
morph-spec status my-feature
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
-
See what phase the feature is in and which approval gates have been passed:
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
morph-spec state show my-feature
|
|
125
|
-
```
|
|
126
|
-
|
|
127
121
|
Advance to the next phase manually (when needed):
|
|
128
122
|
|
|
129
123
|
```bash
|
|
@@ -209,4 +203,4 @@ morph-spec doctor
|
|
|
209
203
|
|
|
210
204
|
---
|
|
211
205
|
|
|
212
|
-
*morph-spec v4.
|
|
206
|
+
*morph-spec v4.8.4 by Polymorphism Tech*
|
package/framework/CLAUDE.md
CHANGED
|
@@ -22,9 +22,9 @@ npx morph-spec state get {feature-name}
|
|
|
22
22
|
### Workflow
|
|
23
23
|
|
|
24
24
|
1. **Detecte agentes automaticamente:**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
- Read `.morph/framework/agents.json`
|
|
26
|
+
- Para cada agente, compare `domains` e `keywords` com a feature solicitada
|
|
27
|
+
- Registre os agentes relevantes: `npx morph-spec state add-agent {feature-name} {agent-id}`
|
|
28
28
|
|
|
29
29
|
2. **Invoque skills dos agentes detectados:**
|
|
30
30
|
- Para agentes com `skillPath` em agents.json, consulte o Skill correspondente
|
|
@@ -12,12 +12,10 @@ framework/hooks/
|
|
|
12
12
|
│ ├── user-prompt/
|
|
13
13
|
│ │ └── enrich-prompt.js # Context-aware prompt enrichment
|
|
14
14
|
│ ├── pre-tool-use/
|
|
15
|
-
│ │ ├── protect-readonly-files.js # Block edits to state.json & framework/
|
|
16
15
|
│ │ ├── protect-spec-files.js # Block edits to approved spec artifacts
|
|
17
16
|
│ │ └── enforce-phase-writes.js # Enforce writes to correct phase dir
|
|
18
17
|
│ ├── post-tool-use/
|
|
19
|
-
│ │
|
|
20
|
-
│ │ └── dispatch.js # Dispatch on CLI commands
|
|
18
|
+
│ │ └── dispatch.js # Dispatch on CLI commands (auto-checkpoint)
|
|
21
19
|
│ ├── stop/
|
|
22
20
|
│ │ └── validate-completion.js # Advisory: warn about incomplete work
|
|
23
21
|
│ ├── pre-compact/
|
|
@@ -85,7 +83,6 @@ The installer writes to `.claude/settings.local.json`:
|
|
|
85
83
|
{ "matcher": "Bash", "hooks": [...] }
|
|
86
84
|
],
|
|
87
85
|
"PostToolUse": [
|
|
88
|
-
{ "matcher": "Write", "hooks": [...] },
|
|
89
86
|
{ "matcher": "Bash", "hooks": [...] }
|
|
90
87
|
],
|
|
91
88
|
"Stop": [{ "hooks": [...] }],
|
|
@@ -202,4 +199,4 @@ morph-spec doctor --reset
|
|
|
202
199
|
|
|
203
200
|
---
|
|
204
201
|
|
|
205
|
-
*MORPH-SPEC
|
|
202
|
+
*MORPH-SPEC by Polymorphism Tech — Hooks Architecture v2.5*
|
|
@@ -1,58 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Blocks direct edits to:
|
|
9
|
-
* - .morph/state.json → must use CLI commands
|
|
10
|
-
* - .morph/framework/** → read-only framework files
|
|
11
|
-
*
|
|
12
|
-
* Fail-open: exits 0 on any error.
|
|
3
|
+
* DEPRECATED — This hook has been replaced by native permissions.deny in settings.local.json.
|
|
4
|
+
* The file is kept as an empty stub. It is NOT registered in hooks-installer.js.
|
|
5
|
+
* Safe to delete.
|
|
13
6
|
*/
|
|
14
|
-
|
|
15
|
-
import { readStdin } from '../../shared/stdin-reader.js';
|
|
16
|
-
import { stateExists } from '../../shared/state-reader.js';
|
|
17
|
-
import { isStatePath, isFrameworkPath } from '../../shared/phase-utils.js';
|
|
18
|
-
import { block, pass } from '../../shared/hook-response.js';
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
// Skip if not a morph-spec project
|
|
22
|
-
if (!stateExists()) {
|
|
23
|
-
pass();
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const payload = await readStdin();
|
|
27
|
-
if (!payload) pass();
|
|
28
|
-
|
|
29
|
-
const filePath = payload?.tool_input?.file_path || payload?.tool_input?.path || '';
|
|
30
|
-
if (!filePath) pass();
|
|
31
|
-
|
|
32
|
-
// Block edits to state.json
|
|
33
|
-
if (isStatePath(filePath)) {
|
|
34
|
-
block(
|
|
35
|
-
'MORPH-SPEC: Direct edits to .morph/state.json are blocked.\n' +
|
|
36
|
-
'Use CLI commands instead:\n' +
|
|
37
|
-
' morph-spec state set <feature> <key> <value>\n' +
|
|
38
|
-
' morph-spec phase advance <feature>\n' +
|
|
39
|
-
' morph-spec task done <feature> <taskId>\n' +
|
|
40
|
-
' morph-spec approve <feature> <gate>'
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Block edits to framework files
|
|
45
|
-
if (isFrameworkPath(filePath)) {
|
|
46
|
-
block(
|
|
47
|
-
'MORPH-SPEC: Files in .morph/framework/ are read-only.\n' +
|
|
48
|
-
'These files are managed by the framework and overwritten on update.\n' +
|
|
49
|
-
'To customize, create project-specific overrides in .morph/context/ or .morph/config/.'
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// All other files are allowed
|
|
54
|
-
pass();
|
|
55
|
-
} catch {
|
|
56
|
-
// Fail-open
|
|
57
|
-
process.exit(0);
|
|
58
|
-
}
|
|
7
|
+
process.exit(0);
|
|
@@ -11,13 +11,26 @@
|
|
|
11
11
|
* Fail-open: exits 0 on any error.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import { loadState, getActiveFeature, getPendingGates, getMissingOutputs } from '../../shared/state-reader.js';
|
|
14
|
+
import { loadState, getActiveFeature, getPendingGates, getMissingOutputs, derivePhaseForFeature } from '../../shared/state-reader.js';
|
|
15
15
|
import { stateExists } from '../../shared/state-reader.js';
|
|
16
16
|
import { injectContext, pass } from '../../shared/hook-response.js';
|
|
17
17
|
import { readFileSync, existsSync } from 'fs';
|
|
18
18
|
import { join } from 'path';
|
|
19
19
|
|
|
20
|
-
const
|
|
20
|
+
const DEFAULT_SPEC_MAX_CHARS = 3000;
|
|
21
|
+
|
|
22
|
+
function getSpecMaxChars() {
|
|
23
|
+
try {
|
|
24
|
+
const configPath = join(process.cwd(), '.morph/config/config.json');
|
|
25
|
+
if (!existsSync(configPath)) return DEFAULT_SPEC_MAX_CHARS;
|
|
26
|
+
const cfg = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
27
|
+
return cfg?.hooks?.specInjectionLimit ?? DEFAULT_SPEC_MAX_CHARS;
|
|
28
|
+
} catch {
|
|
29
|
+
return DEFAULT_SPEC_MAX_CHARS;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const SPEC_MAX_CHARS = getSpecMaxChars();
|
|
21
34
|
|
|
22
35
|
try {
|
|
23
36
|
if (!stateExists()) pass();
|
|
@@ -30,7 +43,8 @@ try {
|
|
|
30
43
|
|
|
31
44
|
if (active) {
|
|
32
45
|
const { name, feature } = active;
|
|
33
|
-
|
|
46
|
+
const phase = derivePhaseForFeature(name);
|
|
47
|
+
lines.push(`- Active feature: ${name} (phase: ${phase}, workflow: ${feature.workflow || 'auto'})`);
|
|
34
48
|
lines.push(`- Status: ${feature.status}`);
|
|
35
49
|
|
|
36
50
|
// Task progress
|
|
@@ -78,8 +92,9 @@ try {
|
|
|
78
92
|
const featureNames = Object.keys(state.features);
|
|
79
93
|
lines.push(`- Features: ${featureNames.length} (${featureNames.join(', ')})`);
|
|
80
94
|
|
|
81
|
-
for (const [
|
|
82
|
-
|
|
95
|
+
for (const [fname, feat] of Object.entries(state.features)) {
|
|
96
|
+
const fPhase = derivePhaseForFeature(fname);
|
|
97
|
+
lines.push(` - ${fname}: phase=${fPhase}, status=${feat.status}`);
|
|
83
98
|
}
|
|
84
99
|
}
|
|
85
100
|
|
|
@@ -347,7 +347,12 @@ def get_session_name(entries):
|
|
|
347
347
|
def get_block_start(transcript_path, entries):
|
|
348
348
|
"""Find start of current 5-hour billing block. Cached per transcript."""
|
|
349
349
|
h = hashlib.sha256(transcript_path.encode()).hexdigest()[:16]
|
|
350
|
-
|
|
350
|
+
# Use platform-appropriate cache directory
|
|
351
|
+
if os.name == 'nt':
|
|
352
|
+
base = Path(os.environ.get('LOCALAPPDATA', str(Path.home() / 'AppData' / 'Local')))
|
|
353
|
+
cache_dir = base / 'morph-spec' / 'cache'
|
|
354
|
+
else:
|
|
355
|
+
cache_dir = Path.home() / '.cache' / 'morph-spec'
|
|
351
356
|
cache_file = cache_dir / f'block-{h}.json'
|
|
352
357
|
now = time.time()
|
|
353
358
|
block_s = 5 * 3600
|