phasegate 0.16.0 → 0.32.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.ja.md +74 -42
- package/README.md +69 -9
- package/docs/ADR/ADR-013-story-reflection-gate.md +100 -0
- package/docs/guide/configuration.md +244 -7
- package/package.json +7 -5
- package/scripts/harness/adr-foundation/domain/ports/adr-document-parser-port.ts +1 -0
- package/scripts/harness/adr-foundation/domain/ports/adr-frontmatter-parser-port.ts +1 -0
- package/scripts/harness/adr-foundation/domain/ports/adr-repository-port.ts +1 -0
- package/scripts/harness/adr-foundation/domain/value-objects/adr-status.ts +6 -6
- package/scripts/harness/agent-integration/application/dto/handle-pre-tool-use-dto.ts +3 -1
- package/scripts/harness/agent-integration/application/usecases/handle-pre-tool-use-usecase.ts +108 -2
- package/scripts/harness/agent-integration/domain/ports/config-query-port.ts +2 -0
- package/scripts/harness/agent-integration/domain/ports/phase-gate-query-port.ts +1 -1
- package/scripts/harness/agent-integration/domain/ports/story-reflection-query-port.ts +8 -0
- package/scripts/harness/agent-integration/domain/services/bash-write-target-extractor.ts +258 -0
- package/scripts/harness/agent-integration/domain/services/hook-to-cli-translator.ts +21 -4
- package/scripts/harness/agent-integration/domain/value-objects/protected-file-list.ts +20 -0
- package/scripts/harness/agent-integration/domain/value-objects/story-reflection-query-result.ts +63 -0
- package/scripts/harness/agent-integration/infrastructure/adapters/file-system-story-reflection-query-adapter.ts +122 -0
- package/scripts/harness/agent-integration/infrastructure/adapters/harness-config-config-query-adapter.ts +20 -0
- package/scripts/harness/agent-integration/infrastructure/adapters/phase-gate-query-adapter.ts +17 -3
- package/scripts/harness/agent-integration/presentation/pre-tool-use-hook.ts +29 -2
- package/scripts/harness/biome-ast-engine/domain/services/lint-runner.ts +24 -0
- package/scripts/harness/biome-ast-engine/domain/services/rule-definition-registry.ts +1 -1
- package/scripts/harness/biome-ast-engine/domain/value-objects/source-module-snapshot.ts +5 -2
- package/scripts/harness/biome-ast-engine/infrastructure/adapters/node-workspace-file-adapter.ts +1 -1
- package/scripts/harness/biome-ast-engine/infrastructure/adapters/typescript-source-module-analyzer-adapter.ts +1 -1
- package/scripts/harness/biome-ast-engine/infrastructure/parsers/unit-comment-parser.ts +12 -7
- package/scripts/harness/ci-governance/composition-root.ts +1 -0
- package/scripts/harness/config-foundation/application/mappers/phase-config-section-mapper.ts +44 -0
- package/scripts/harness/config-foundation/application/usecases/load-resolved-config-use-case.ts +20 -1
- package/scripts/harness/config-foundation/domain/harness-config.ts +2 -1
- package/scripts/harness/config-foundation/domain/value-objects/phase-dependencies-config.ts +18 -4
- package/scripts/harness/config-foundation/infrastructure/schemas/harness-config-v2.schema.json +185 -10
- package/scripts/harness/config-foundation/infrastructure/validators/ajv-config-schema-validator.ts +2 -1
- package/scripts/harness/harness-api/application/dto/command-dispatch-input.ts +1 -0
- package/scripts/harness/harness-api/application/dto/command-dispatch-output.ts +1 -0
- package/scripts/harness/harness-api/application/dto/exit-code-decision-input.ts +1 -0
- package/scripts/harness/harness-api/application/dto/exit-code-decision-output.ts +1 -0
- package/scripts/harness/harness-api/application/dto/harness-api-response-contract.ts +1 -0
- package/scripts/harness/harness-api/application/dto/initialize-registry-input.ts +1 -0
- package/scripts/harness/harness-api/application/dto/registry-summary-output.ts +1 -0
- package/scripts/harness/harness-api/application/dto/status-derivation-input.ts +1 -0
- package/scripts/harness/harness-api/application/mappers/harness-api-response-mapper.ts +1 -0
- package/scripts/harness/harness-api/application/usecases/decide-exit-code-usecase.ts +1 -0
- package/scripts/harness/harness-api/application/usecases/derive-harness-status-usecase.ts +1 -0
- package/scripts/harness/harness-api/application/usecases/dispatch-command-usecase.ts +1 -0
- package/scripts/harness/harness-api/application/usecases/initialize-command-registry-usecase.ts +1 -0
- package/scripts/harness/harness-api/composition-root.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/artifact-scanner-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/biome-lint-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/config-query-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/impact-analysis-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/phase-gate-query-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/validator-execution-port.ts +1 -0
- package/scripts/harness/harness-api/domain/services/command-dispatch-service.ts +1 -0
- package/scripts/harness/harness-api/domain/services/command-registry.ts +1 -0
- package/scripts/harness/harness-api/domain/services/status-derivation-service.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/artifact-scan-result.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/check-ready-result.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/ci-check-result.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/cli-command-definition.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/command-input-spec.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/drift-report-summary.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/exit-code-spec.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/harness-api-response.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/harness-status-summary.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/layer-health.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/phase-info.ts +1 -0
- package/scripts/harness/harness-api/index.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/biome-ast-engine-lint-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/file-system-artifact-scanner-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/harness-config-query-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/nyquist-validation-impact-analysis-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/phase-dependency-model-query-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/validator-system-execution-adapter.ts +1 -0
- package/scripts/harness/harness-api/presentation/dto/cli-output-options.ts +1 -0
- package/scripts/harness/harness-api/presentation/formatters/harness-api-json-formatter.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/check-phase-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/check-ready-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/ci-check-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/complete-check-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/detect-drift-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/impact-analysis-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/lint-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/status-handler.ts +1 -0
- package/scripts/harness/harness-error/infrastructure/adapters/legacy-error-reporter-adapter.ts +7 -1
- package/scripts/harness/integrations/pre-commit.ts +1 -0
- package/scripts/harness/main.ts +154 -34
- package/scripts/harness/phase-dependency-model/application/dto/resolve-gate-result-dto.ts +14 -0
- package/scripts/harness/phase-dependency-model/application/services/phase-gate-result-mapper.ts +20 -0
- package/scripts/harness/phase-dependency-model/application/usecases/check-story-reflection-usecase.ts +42 -0
- package/scripts/harness/phase-dependency-model/application/usecases/resolve-gate-usecase.ts +161 -0
- package/scripts/harness/phase-dependency-model/composition-root.ts +57 -1
- package/scripts/harness/phase-dependency-model/domain/definitions/{default-phase-dependencies.ts → full-phase-dependencies.ts} +3 -3
- package/scripts/harness/phase-dependency-model/domain/definitions/{default-phase-nodes.ts → full-phase-nodes.ts} +1 -1
- package/scripts/harness/phase-dependency-model/domain/definitions/full-story-reflection-defaults.ts +28 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/minimal-phase-dependencies.ts +32 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/minimal-phase-nodes.ts +50 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/minimal-story-reflection-defaults.ts +8 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/standard-phase-dependencies.ts +39 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/standard-phase-nodes.ts +118 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/standard-story-reflection-defaults.ts +23 -0
- package/scripts/harness/phase-dependency-model/domain/models/phase-structure.ts +95 -23
- package/scripts/harness/phase-dependency-model/domain/ports/glob-matcher-port.ts +8 -0
- package/scripts/harness/phase-dependency-model/domain/ports/phase-config-provider-port.ts +2 -0
- package/scripts/harness/phase-dependency-model/domain/ports/story-annotation-verifier-port.ts +14 -0
- package/scripts/harness/phase-dependency-model/domain/ports/story-reflection-file-system-port.ts +16 -0
- package/scripts/harness/phase-dependency-model/domain/services/gate-graph.ts +223 -0
- package/scripts/harness/phase-dependency-model/domain/services/story-reflection-checker.ts +66 -0
- package/scripts/harness/phase-dependency-model/domain/values/gate-definition.ts +127 -0
- package/scripts/harness/phase-dependency-model/domain/values/gate-name.ts +40 -0
- package/scripts/harness/phase-dependency-model/domain/values/gate-story-annotation.ts +39 -0
- package/scripts/harness/phase-dependency-model/domain/values/phase-customization-policy.ts +16 -4
- package/scripts/harness/phase-dependency-model/domain/values/story-reflection-config.ts +44 -0
- package/scripts/harness/phase-dependency-model/domain/values/story-reflection-mapping.ts +91 -0
- package/scripts/harness/phase-dependency-model/domain/values/story-reflection-result.ts +55 -0
- package/scripts/harness/phase-dependency-model/infrastructure/adapters/picomatch-glob-matcher.ts +17 -0
- package/scripts/harness/phase-dependency-model/infrastructure/adapters/story-annotation-verifier-adapter.ts +46 -0
- package/scripts/harness/phase-dependency-model/infrastructure/config/custom-gates-config-parser.ts +22 -0
- package/scripts/harness/phase-dependency-model/infrastructure/config/harness-config-phase-config-provider.ts +78 -2
- package/scripts/harness/phase-dependency-model/infrastructure/filesystem/file-system-story-reflection-adapter.ts +94 -0
- package/scripts/harness/phase-dependency-model/presentation/cli/check-phase-gate-command-handler.ts +12 -4
- package/scripts/harness/phase-dependency-model/presentation/cli/story-reflection-status-presenter.ts +87 -0
- package/scripts/harness/regression-suite/application/dto/analyze-migration-input.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/analyze-migration-output.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/configure-ci-gate-input.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/configure-ci-gate-output.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/migrate-v0-tests-input.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/migrate-v0-tests-output.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/run-regression-suite-input.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/run-regression-suite-output.ts +1 -0
- package/scripts/harness/regression-suite/application/mappers/migration-mapping-mapper.ts +1 -0
- package/scripts/harness/regression-suite/application/mappers/test-execution-summary-mapper.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/analyze-v0-migration-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/configure-ci-gate-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/migrate-v0-tests-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/run-agent-independence-guard-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/run-gng-gate-regression-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/run-k-requirements-regression-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/run-k14-k15-regression-usecase.ts +1 -0
- package/scripts/harness/regression-suite/composition-root.ts +1 -0
- package/scripts/harness/regression-suite/domain/aggregates/v0-test-migration.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/ci-gate-result-writer-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/config-query-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/import-analyzer-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/migration-mapping-repository-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/suite-registry-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/test-runner-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/v0-spec-reader-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/services/import-guard-service.ts +1 -0
- package/scripts/harness/regression-suite/domain/services/migration-analyzer.ts +1 -0
- package/scripts/harness/regression-suite/domain/services/regression-runner.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/agent-independence-test.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/biome-modification-spec.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/ci-gate-config.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/coverage-rate.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/gng-condition-test.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/import-violation.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/k-requirement-test.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/migration-mapping.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/regression-suite-definition.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/suite-id.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/test-execution-summary.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/test-failure-detail.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/v0-test-id.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/v1-test-path.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/biome-ast-import-analyzer-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/file-system-v0-spec-reader-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/harness-config-query-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/json-ci-gate-result-writer-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/markdown-migration-mapping-repository-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/static-suite-registry-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/vitest-test-runner-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/registry/agent-independence-suite-definition.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/registry/gng-gate-suite-definition.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/registry/k-requirements-suite-definition.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/registry/v0-migration-suite-definition.ts +1 -0
- package/scripts/harness/setup/skill-deployer.ts +82 -5
- package/scripts/harness/shared-kernel/harness-api.ts +1 -0
- package/scripts/harness/skill-quality/composition-root.ts +1 -0
- package/scripts/harness/skill-quality/infrastructure/adapters/ajv-lesson-artifact-schema-adapter.ts +5 -4
- package/scripts/harness/traceability-model/domain/services/metadata-validator.ts +12 -10
- package/scripts/harness/traceability-model/infrastructure/parsers/source-metadata-parser.ts +16 -2
- package/skills/cascade-updater/SKILL.md +16 -3
- package/skills/codebase-mapper/SKILL.md +9 -9
- package/skills/codex-delegator/SKILL.md +5 -56
- package/skills/consistency-checker/SKILL.md +5 -9
- package/skills/consistency-checker/references//343/203/201/343/202/247/343/203/203/343/202/257/343/203/252/343/202/271/343/203/210.md +6 -3
- package/skills/doc-freshness-checker/SKILL.md +6 -6
- package/skills/engineering-perspective/SKILL.md +2 -58
- package/skills/engineering-perspective/references/domain-model.md +4 -135
- package/skills/implementation-readiness-checker/SKILL.md +18 -72
- package/skills/it-test-designer/SKILL.md +25 -161
- package/skills/it-test-designer/references/it-test-design-template.md +131 -0
- package/skills/it-test-logic-designer/SKILL.md +13 -388
- package/skills/it-test-logic-designer/references/controller-test-patterns.md +100 -0
- package/skills/it-test-logic-designer/references/repository-test-patterns.md +206 -0
- package/skills/it-test-logic-designer/references/usecase-test-patterns.md +87 -0
- package/skills/pointer-validator/SKILL.md +4 -4
- package/skills/scenario-test-designer/SKILL.md +4 -68
- package/skills/scenario-test-designer/references/scenario-test-design-template.md +41 -0
- package/skills/scenario-test-designer/references/scenario-test-plan-template.md +35 -0
- package/skills/scenario-test-logic-designer/SKILL.md +21 -304
- package/skills/scenario-test-logic-designer/references/msw-patterns.md +36 -0
- package/skills/scenario-test-logic-designer/references/playwright-patterns.md +237 -0
- package/skills/test-coverage-checker/SKILL.md +39 -121
- package/skills/test-coverage-checker/references/coverage-report-template.md +99 -0
- package/skills/uiux-designer/SKILL.md +27 -92
- package/skills/uiux-designer/references/data-testid-convention.md +38 -0
- package/skills/uiux-designer/references/uiux-design-template.md +105 -0
- package/skills/unit-test-designer/SKILL.md +5 -106
- package/skills/unit-test-designer/references/unit-test-design-template.md +127 -0
- package/skills/unit-test-logic-designer/SKILL.md +28 -250
- package/skills/unit-test-logic-designer/references/test-patterns.md +207 -0
package/scripts/harness/regression-suite/application/usecases/analyze-v0-migration-usecase.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @layer application
|
|
1
2
|
import { MigrationAnalyzer } from '../../domain/services/migration-analyzer.js';
|
|
2
3
|
import type { V0SpecReaderPort } from '../../domain/ports/v0-spec-reader-port.js';
|
|
3
4
|
import type { MigrationMappingRepositoryPort } from '../../domain/ports/migration-mapping-repository-port.js';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @layer application
|
|
1
2
|
import { MigrationAnalyzer } from '../../domain/services/migration-analyzer.js';
|
|
2
3
|
import type { V0SpecReaderPort } from '../../domain/ports/v0-spec-reader-port.js';
|
|
3
4
|
import type { MigrationMappingRepositoryPort } from '../../domain/ports/migration-mapping-repository-port.js';
|
package/scripts/harness/regression-suite/infrastructure/adapters/static-suite-registry-adapter.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @layer infrastructure
|
|
1
2
|
import type { SuiteId } from '../../domain/value-objects/suite-id.js';
|
|
2
3
|
import type { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
|
|
3
4
|
import type { SuiteRegistryPort } from '../../domain/ports/suite-registry-port.js';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @layer infrastructure
|
|
1
2
|
import { SuiteId } from '../../domain/value-objects/suite-id.js';
|
|
2
3
|
import { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
|
|
3
4
|
import { AgentIndependenceTest } from '../../domain/value-objects/agent-independence-test.js';
|
package/scripts/harness/regression-suite/infrastructure/registry/gng-gate-suite-definition.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @layer infrastructure
|
|
1
2
|
import { SuiteId } from '../../domain/value-objects/suite-id.js';
|
|
2
3
|
import { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
|
|
3
4
|
import { GngConditionTest } from '../../domain/value-objects/gng-condition-test.js';
|
package/scripts/harness/regression-suite/infrastructure/registry/k-requirements-suite-definition.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @layer infrastructure
|
|
1
2
|
import { SuiteId } from '../../domain/value-objects/suite-id.js';
|
|
2
3
|
import { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
|
|
3
4
|
import { KRequirementTest } from '../../domain/value-objects/k-requirement-test.js';
|
package/scripts/harness/regression-suite/infrastructure/registry/v0-migration-suite-definition.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @layer infrastructure
|
|
1
2
|
import { SuiteId } from '../../domain/value-objects/suite-id.js';
|
|
2
3
|
import { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
|
|
3
4
|
import { KRequirementTest } from '../../domain/value-objects/k-requirement-test.js';
|
|
@@ -18,16 +18,86 @@ const HARNESS_CONFIG_FILE = 'phasegate.config.json';
|
|
|
18
18
|
const HOOKS_TEMPLATE_DIR = join('templates', '.claude');
|
|
19
19
|
const HOOKS_TARGET_DIR = '.claude';
|
|
20
20
|
|
|
21
|
+
// ── Skill Category Map ──
|
|
22
|
+
|
|
23
|
+
export type SkillCategory = 'core' | 'aidlc' | 'utility';
|
|
24
|
+
export type SkillSet = 'core' | 'all';
|
|
25
|
+
|
|
26
|
+
export const SKILL_CATEGORIES: Record<SkillCategory, readonly string[]> = {
|
|
27
|
+
core: [
|
|
28
|
+
'cascade-updater',
|
|
29
|
+
'codebase-mapper',
|
|
30
|
+
'consistency-checker',
|
|
31
|
+
'doc-freshness-checker',
|
|
32
|
+
'engineering-perspective',
|
|
33
|
+
'implementation-readiness-checker',
|
|
34
|
+
'pointer-validator',
|
|
35
|
+
'test-coverage-checker',
|
|
36
|
+
],
|
|
37
|
+
aidlc: [
|
|
38
|
+
'domain-designer',
|
|
39
|
+
'environment-designer',
|
|
40
|
+
'implementation-planner',
|
|
41
|
+
'it-test-designer',
|
|
42
|
+
'it-test-logic-designer',
|
|
43
|
+
'logical-designer',
|
|
44
|
+
'mock-designer',
|
|
45
|
+
'product-architect',
|
|
46
|
+
'quick-implementor',
|
|
47
|
+
'scenario-test-designer',
|
|
48
|
+
'scenario-test-logic-designer',
|
|
49
|
+
'story-implementor',
|
|
50
|
+
'story-mapper',
|
|
51
|
+
'story-writer',
|
|
52
|
+
'uiux-designer',
|
|
53
|
+
'unit-designer',
|
|
54
|
+
'unit-test-designer',
|
|
55
|
+
'unit-test-logic-designer',
|
|
56
|
+
],
|
|
57
|
+
utility: [
|
|
58
|
+
'codex-delegator',
|
|
59
|
+
'skill-creator',
|
|
60
|
+
],
|
|
61
|
+
} as const;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* 指定された SkillSet に含まれるスキル名の一覧を返す。
|
|
65
|
+
*/
|
|
66
|
+
export function getSkillsForSet(skillSet: SkillSet): string[] {
|
|
67
|
+
if (skillSet === 'core') {
|
|
68
|
+
return [...SKILL_CATEGORIES.core];
|
|
69
|
+
}
|
|
70
|
+
return [
|
|
71
|
+
...SKILL_CATEGORIES.core,
|
|
72
|
+
...SKILL_CATEGORIES.aidlc,
|
|
73
|
+
...SKILL_CATEGORIES.utility,
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* スキル名からカテゴリを逆引きする。未知のスキルは null を返す。
|
|
79
|
+
*/
|
|
80
|
+
export function getCategoryForSkill(skillName: string): SkillCategory | null {
|
|
81
|
+
for (const [category, skills] of Object.entries(SKILL_CATEGORIES)) {
|
|
82
|
+
if ((skills as readonly string[]).includes(skillName)) {
|
|
83
|
+
return category as SkillCategory;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
|
|
21
89
|
export interface DeployResult {
|
|
22
90
|
deployedSkills: string[];
|
|
23
91
|
targetDir: string;
|
|
24
92
|
version: string;
|
|
25
93
|
deployedAt: string;
|
|
94
|
+
skillSet: SkillSet;
|
|
26
95
|
}
|
|
27
96
|
|
|
28
97
|
export interface VersionInfo {
|
|
29
98
|
version: string;
|
|
30
99
|
deployedAt: string;
|
|
100
|
+
skillSet?: SkillSet;
|
|
31
101
|
}
|
|
32
102
|
|
|
33
103
|
interface PkgJson {
|
|
@@ -65,14 +135,20 @@ async function copyDirectory(src: string, dest: string): Promise<number> {
|
|
|
65
135
|
* @param harnessRoot - harnessパッケージのルートディレクトリ(skills/がある場所)
|
|
66
136
|
* @param projectRoot - デプロイ先プロジェクトのルートディレクトリ
|
|
67
137
|
*/
|
|
68
|
-
export async function deploySkills(
|
|
138
|
+
export async function deploySkills(
|
|
139
|
+
harnessRoot: string,
|
|
140
|
+
projectRoot: string,
|
|
141
|
+
skillSet: SkillSet = 'all',
|
|
142
|
+
): Promise<DeployResult> {
|
|
69
143
|
const skillsSource = join(harnessRoot, SKILLS_SOURCE_DIR);
|
|
70
144
|
const skillsTarget = join(projectRoot, SKILLS_TARGET_DIR);
|
|
71
145
|
const version = await getHarnessVersion(harnessRoot);
|
|
72
146
|
const deployedAt = new Date().toISOString();
|
|
73
147
|
|
|
74
148
|
const skillDirs = await fs.readdir(skillsSource, { withFileTypes: true });
|
|
75
|
-
const
|
|
149
|
+
const allSkills = skillDirs.filter((d) => d.isDirectory()).map((d) => d.name);
|
|
150
|
+
const allowedSkills = getSkillsForSet(skillSet);
|
|
151
|
+
const skills = allSkills.filter((s) => allowedSkills.includes(s));
|
|
76
152
|
|
|
77
153
|
await fs.mkdir(skillsTarget, { recursive: true });
|
|
78
154
|
|
|
@@ -82,14 +158,14 @@ export async function deploySkills(harnessRoot: string, projectRoot: string): Pr
|
|
|
82
158
|
await copyDirectory(srcSkillDir, destSkillDir);
|
|
83
159
|
}
|
|
84
160
|
|
|
85
|
-
const versionInfo: VersionInfo = { version, deployedAt };
|
|
161
|
+
const versionInfo: VersionInfo = { version, deployedAt, skillSet };
|
|
86
162
|
await fs.writeFile(
|
|
87
163
|
join(skillsTarget, HARNESS_VERSION_FILE),
|
|
88
164
|
JSON.stringify(versionInfo, null, 2) + '\n',
|
|
89
165
|
'utf-8',
|
|
90
166
|
);
|
|
91
167
|
|
|
92
|
-
return { deployedSkills: skills, targetDir: skillsTarget, version, deployedAt };
|
|
168
|
+
return { deployedSkills: skills, targetDir: skillsTarget, version, deployedAt, skillSet };
|
|
93
169
|
}
|
|
94
170
|
|
|
95
171
|
/**
|
|
@@ -176,6 +252,7 @@ export async function deployHookScripts(
|
|
|
176
252
|
export async function initHarnessConfig(
|
|
177
253
|
projectRoot: string,
|
|
178
254
|
projectName: string,
|
|
255
|
+
phasePreset?: 'full' | 'standard' | 'minimal' | 'custom',
|
|
179
256
|
): Promise<{ created: boolean; path: string }> {
|
|
180
257
|
const configPath = join(projectRoot, HARNESS_CONFIG_FILE);
|
|
181
258
|
try {
|
|
@@ -193,7 +270,7 @@ export async function initHarnessConfig(
|
|
|
193
270
|
layers: {},
|
|
194
271
|
quickMode: {},
|
|
195
272
|
phaseDependencies: {
|
|
196
|
-
preset: 'default',
|
|
273
|
+
preset: phasePreset ?? 'default',
|
|
197
274
|
override: false,
|
|
198
275
|
customRules: [],
|
|
199
276
|
},
|
package/scripts/harness/skill-quality/infrastructure/adapters/ajv-lesson-artifact-schema-adapter.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* @layer infrastructure
|
|
3
3
|
* @unit skill-quality
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
5
|
+
import AjvModule from 'ajv';
|
|
6
|
+
const Ajv = (AjvModule as any).default ?? AjvModule;
|
|
6
7
|
import type { LessonArtifactSchemaPort } from '../../domain/ports/lesson-artifact-schema-port.js';
|
|
7
8
|
import type { ValidationViolation } from '../../domain/types/validation-violation.js';
|
|
8
9
|
|
|
@@ -17,8 +18,8 @@ const LESSON_ARTIFACT_SCHEMA = {
|
|
|
17
18
|
};
|
|
18
19
|
|
|
19
20
|
export class AjvLessonArtifactSchemaAdapter implements LessonArtifactSchemaPort {
|
|
20
|
-
private readonly ajv: Ajv
|
|
21
|
-
private readonly compiledValidator: ReturnType<Ajv[
|
|
21
|
+
private readonly ajv: InstanceType<typeof Ajv>;
|
|
22
|
+
private readonly compiledValidator: ReturnType<InstanceType<typeof Ajv>["compile"]>;
|
|
22
23
|
|
|
23
24
|
constructor() {
|
|
24
25
|
this.ajv = new Ajv();
|
|
@@ -28,7 +29,7 @@ export class AjvLessonArtifactSchemaAdapter implements LessonArtifactSchemaPort
|
|
|
28
29
|
async validate(json: unknown): Promise<readonly ValidationViolation[]> {
|
|
29
30
|
const valid = this.compiledValidator(json);
|
|
30
31
|
if (valid) return [];
|
|
31
|
-
return (this.compiledValidator.errors ?? []).map((err) => ({
|
|
32
|
+
return (this.compiledValidator.errors ?? []).map((err: any) => ({
|
|
32
33
|
ruleId: 'SCHEMA_VIOLATION',
|
|
33
34
|
message: err.message ?? 'Schema validation error',
|
|
34
35
|
location: err.instancePath,
|
|
@@ -80,10 +80,10 @@ export class MetadataValidator {
|
|
|
80
80
|
}>;
|
|
81
81
|
}): Promise<MetadataValidationResult> {
|
|
82
82
|
const errors: TraceabilityHarnessError[] = [];
|
|
83
|
-
const
|
|
83
|
+
const unitTags = input.tags.filter((tag) => tag.type === '@unit');
|
|
84
84
|
const layerTag = input.tags.find((tag) => tag.type === '@layer');
|
|
85
85
|
|
|
86
|
-
if (
|
|
86
|
+
if (unitTags.length === 0) {
|
|
87
87
|
errors.push(
|
|
88
88
|
createError({
|
|
89
89
|
message: '@unit が必要です',
|
|
@@ -111,14 +111,16 @@ export class MetadataValidator {
|
|
|
111
111
|
);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
114
|
+
for (const unitTag of unitTags) {
|
|
115
|
+
if (!(await hasUnit(this.unitDefinitionPort, unitTag.value))) {
|
|
116
|
+
errors.push(
|
|
117
|
+
createError({
|
|
118
|
+
message: `@unit "${unitTag.value}" は unit 定義に存在しません`,
|
|
119
|
+
suggestion: '登録済みの unit 名を指定してください',
|
|
120
|
+
fixExample: '@unit traceability-model',
|
|
121
|
+
}),
|
|
122
|
+
);
|
|
123
|
+
}
|
|
122
124
|
}
|
|
123
125
|
|
|
124
126
|
if (errors.length > 0) {
|
|
@@ -17,6 +17,20 @@ export interface ParsedMetadataTag {
|
|
|
17
17
|
readonly lineNumber: number;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
function expandUnitTags(rawValue: string, lineNumber: number): ParsedMetadataTag[] {
|
|
21
|
+
if (!rawValue.includes(',')) {
|
|
22
|
+
return [{ type: '@unit', value: rawValue.trim(), lineNumber }];
|
|
23
|
+
}
|
|
24
|
+
return rawValue
|
|
25
|
+
.split(',')
|
|
26
|
+
.map((v) => ({
|
|
27
|
+
type: '@unit' as const,
|
|
28
|
+
value: v.trim(),
|
|
29
|
+
lineNumber,
|
|
30
|
+
}))
|
|
31
|
+
.filter((t) => t.value.length > 0);
|
|
32
|
+
}
|
|
33
|
+
|
|
20
34
|
/**
|
|
21
35
|
* 実装ファイル向けに @unit / @layer / @story-id を抽出する
|
|
22
36
|
*/
|
|
@@ -30,7 +44,7 @@ export function parseImplementationTags(content: string): readonly ParsedMetadat
|
|
|
30
44
|
|
|
31
45
|
const unitMatch = UNIT_TAG_PATTERN.exec(line);
|
|
32
46
|
if (unitMatch) {
|
|
33
|
-
tags.push(
|
|
47
|
+
tags.push(...expandUnitTags(unitMatch[1], lineNumber));
|
|
34
48
|
}
|
|
35
49
|
|
|
36
50
|
const layerMatch = LAYER_TAG_PATTERN.exec(line);
|
|
@@ -80,7 +94,7 @@ export function parseAllTags(content: string): readonly ParsedMetadataTag[] {
|
|
|
80
94
|
|
|
81
95
|
const unitMatch = UNIT_TAG_PATTERN.exec(line);
|
|
82
96
|
if (unitMatch) {
|
|
83
|
-
tags.push(
|
|
97
|
+
tags.push(...expandUnitTags(unitMatch[1], lineNumber));
|
|
84
98
|
}
|
|
85
99
|
|
|
86
100
|
const layerMatch = LAYER_TAG_PATTERN.exec(line);
|
|
@@ -9,6 +9,19 @@ review: opus
|
|
|
9
9
|
|
|
10
10
|
下位フェーズでの発見・変更・人間からの指示を、正しいレイヤーの設計文書にフィードバックし、影響範囲を整合的に更新するスキル。
|
|
11
11
|
|
|
12
|
+
## storyReflection ゲート通過の標準手段
|
|
13
|
+
|
|
14
|
+
`phaseDependencies.storyReflection`(ADR-013)は、`docs/inception/{unit}/{storyId}/` 配下の US/issue 設計が `docs/product/construction/{unit}/` の累積設計文書に反映されていない場合、`src/{unit}/*` および `scripts/harness/{unit}/*` への Write/Edit(Bash 迂回経由の書き込みも含む)を pre-tool-use hook でブロックする。
|
|
15
|
+
|
|
16
|
+
**cascade-updater はこの storyReflection ゲートを通過する標準手段である。**
|
|
17
|
+
|
|
18
|
+
- `full` / `standard` プリセットでは、inception の新規 US/issue を作成した後、実装着手前に cascade-updater を実行して product 文書に `@story-id {storyId}` を追記する
|
|
19
|
+
- cascade-updater を実行せずに実装へ進もうとすると `[L2-STORY-REFLECTION]` ブロックが発生する(エラー中で本スキルの実行が案内される)
|
|
20
|
+
- `minimal` プリセットでは storyReflection が無効化されるためゲート連動しないが、cascade-updater による設計整合性の維持は推奨される
|
|
21
|
+
- Quick Mode (`relaxedGates: ["phase-gate"]`) 時は storyReflection も緩和されるため、cascade-updater 実行の必須性は緩まる(ただし品質維持のため実行は推奨)
|
|
22
|
+
|
|
23
|
+
詳細は ADR-013 および `docs/guide/configuration.md` の storyReflection セクションを参照。
|
|
24
|
+
|
|
12
25
|
## 前提条件チェック
|
|
13
26
|
|
|
14
27
|
### 必須インプット
|
|
@@ -21,10 +34,10 @@ review: opus
|
|
|
21
34
|
|
|
22
35
|
**このスキルは3フェーズで実行する。**
|
|
23
36
|
- **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
|
|
24
|
-
- **Phase 2(実行)**:
|
|
37
|
+
- **Phase 2(実行)**: プロジェクトのモデルルーティング設定に従い、実行モデルに委譲して成果物を生成する
|
|
25
38
|
- **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
|
|
26
39
|
|
|
27
|
-
**Phase 1/2/3
|
|
40
|
+
**Phase 1/2/3を同時に実行してはならない。**
|
|
28
41
|
|
|
29
42
|
---
|
|
30
43
|
|
|
@@ -110,7 +123,7 @@ review: opus
|
|
|
110
123
|
|
|
111
124
|
### レビュー手順
|
|
112
125
|
1. Sonnetが出力したファイルを読み込む
|
|
113
|
-
2.
|
|
126
|
+
2. プロジェクトのレビュー基準に沿って検証する
|
|
114
127
|
3. **スキル固有レビュー観点**を検証する
|
|
115
128
|
4. 判定結果を出力する
|
|
116
129
|
|