@mc1global/opencode-jarvis 0.1.0 → 0.3.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/dist/application/agent-registry/dtos.d.ts +66 -0
- package/dist/application/agent-registry/dtos.d.ts.map +1 -0
- package/dist/application/agent-registry/dtos.js +11 -0
- package/dist/application/agent-registry/dtos.js.map +1 -0
- package/dist/application/agent-registry/use-cases.d.ts +39 -0
- package/dist/application/agent-registry/use-cases.d.ts.map +1 -0
- package/dist/application/agent-registry/use-cases.js +222 -0
- package/dist/application/agent-registry/use-cases.js.map +1 -0
- package/dist/application/azure-sync/dtos.d.ts +210 -0
- package/dist/application/azure-sync/dtos.d.ts.map +1 -0
- package/dist/application/azure-sync/dtos.js +11 -0
- package/dist/application/azure-sync/dtos.js.map +1 -0
- package/dist/application/azure-sync/field-builders.d.ts +54 -0
- package/dist/application/azure-sync/field-builders.d.ts.map +1 -0
- package/dist/application/azure-sync/field-builders.js +166 -0
- package/dist/application/azure-sync/field-builders.js.map +1 -0
- package/dist/application/azure-sync/index.d.ts +16 -0
- package/dist/application/azure-sync/index.d.ts.map +1 -0
- package/dist/application/azure-sync/index.js +10 -0
- package/dist/application/azure-sync/index.js.map +1 -0
- package/dist/application/azure-sync/pr-use-cases.d.ts +39 -0
- package/dist/application/azure-sync/pr-use-cases.d.ts.map +1 -0
- package/dist/application/azure-sync/pr-use-cases.js +192 -0
- package/dist/application/azure-sync/pr-use-cases.js.map +1 -0
- package/dist/application/azure-sync/pull-use-cases.d.ts +43 -0
- package/dist/application/azure-sync/pull-use-cases.d.ts.map +1 -0
- package/dist/application/azure-sync/pull-use-cases.js +322 -0
- package/dist/application/azure-sync/pull-use-cases.js.map +1 -0
- package/dist/application/azure-sync/push-use-cases.d.ts +53 -0
- package/dist/application/azure-sync/push-use-cases.d.ts.map +1 -0
- package/dist/application/azure-sync/push-use-cases.js +341 -0
- package/dist/application/azure-sync/push-use-cases.js.map +1 -0
- package/dist/application/azure-sync/reverse-field-builder.d.ts +52 -0
- package/dist/application/azure-sync/reverse-field-builder.d.ts.map +1 -0
- package/dist/application/azure-sync/reverse-field-builder.js +130 -0
- package/dist/application/azure-sync/reverse-field-builder.js.map +1 -0
- package/dist/application/azure-sync/task-push-use-cases.d.ts +68 -0
- package/dist/application/azure-sync/task-push-use-cases.d.ts.map +1 -0
- package/dist/application/azure-sync/task-push-use-cases.js +162 -0
- package/dist/application/azure-sync/task-push-use-cases.js.map +1 -0
- package/dist/application/config/config-service.d.ts +64 -0
- package/dist/application/config/config-service.d.ts.map +1 -0
- package/dist/application/config/config-service.js +110 -0
- package/dist/application/config/config-service.js.map +1 -0
- package/dist/application/config/index.d.ts +5 -0
- package/dist/application/config/index.d.ts.map +1 -0
- package/dist/application/config/index.js +5 -0
- package/dist/application/config/index.js.map +1 -0
- package/dist/application/kanban/board-use-cases.d.ts.map +1 -1
- package/dist/application/kanban/board-use-cases.js +14 -0
- package/dist/application/kanban/board-use-cases.js.map +1 -1
- package/dist/application/kanban/card-use-cases.d.ts +21 -2
- package/dist/application/kanban/card-use-cases.d.ts.map +1 -1
- package/dist/application/kanban/card-use-cases.js +180 -1
- package/dist/application/kanban/card-use-cases.js.map +1 -1
- package/dist/application/kanban/dtos.d.ts +59 -0
- package/dist/application/kanban/dtos.d.ts.map +1 -1
- package/dist/application/mcp/index.d.ts +10 -0
- package/dist/application/mcp/index.d.ts.map +1 -0
- package/dist/application/mcp/index.js +8 -0
- package/dist/application/mcp/index.js.map +1 -0
- package/dist/application/mcp/middleware.d.ts +91 -0
- package/dist/application/mcp/middleware.d.ts.map +1 -0
- package/dist/application/mcp/middleware.js +84 -0
- package/dist/application/mcp/middleware.js.map +1 -0
- package/dist/application/mcp/tool-adapter.d.ts +72 -0
- package/dist/application/mcp/tool-adapter.d.ts.map +1 -0
- package/dist/application/mcp/tool-adapter.js +132 -0
- package/dist/application/mcp/tool-adapter.js.map +1 -0
- package/dist/application/pipeline/dtos.d.ts +135 -0
- package/dist/application/pipeline/dtos.d.ts.map +1 -0
- package/dist/application/pipeline/dtos.js +11 -0
- package/dist/application/pipeline/dtos.js.map +1 -0
- package/dist/application/pipeline/index.d.ts +8 -0
- package/dist/application/pipeline/index.d.ts.map +1 -0
- package/dist/application/pipeline/index.js +7 -0
- package/dist/application/pipeline/index.js.map +1 -0
- package/dist/application/pipeline/use-cases.d.ts +67 -0
- package/dist/application/pipeline/use-cases.d.ts.map +1 -0
- package/dist/application/pipeline/use-cases.js +413 -0
- package/dist/application/pipeline/use-cases.js.map +1 -0
- package/dist/application/rag/use-cases.d.ts +3 -0
- package/dist/application/rag/use-cases.d.ts.map +1 -1
- package/dist/application/rag/use-cases.js +112 -34
- package/dist/application/rag/use-cases.js.map +1 -1
- package/dist/domain/agent-registry/entities.d.ts +68 -0
- package/dist/domain/agent-registry/entities.d.ts.map +1 -0
- package/dist/domain/agent-registry/entities.js +177 -0
- package/dist/domain/agent-registry/entities.js.map +1 -0
- package/dist/domain/agent-registry/repositories.d.ts +56 -0
- package/dist/domain/agent-registry/repositories.d.ts.map +1 -0
- package/dist/domain/agent-registry/repositories.js +12 -0
- package/dist/domain/agent-registry/repositories.js.map +1 -0
- package/dist/domain/agent-registry/services.d.ts +87 -0
- package/dist/domain/agent-registry/services.d.ts.map +1 -0
- package/dist/domain/agent-registry/services.js +188 -0
- package/dist/domain/agent-registry/services.js.map +1 -0
- package/dist/domain/agent-registry/value-objects.d.ts +145 -0
- package/dist/domain/agent-registry/value-objects.d.ts.map +1 -0
- package/dist/domain/agent-registry/value-objects.js +339 -0
- package/dist/domain/agent-registry/value-objects.js.map +1 -0
- package/dist/domain/azure-sync/entities.d.ts +165 -0
- package/dist/domain/azure-sync/entities.d.ts.map +1 -0
- package/dist/domain/azure-sync/entities.js +203 -0
- package/dist/domain/azure-sync/entities.js.map +1 -0
- package/dist/domain/azure-sync/index.d.ts +16 -0
- package/dist/domain/azure-sync/index.d.ts.map +1 -0
- package/dist/domain/azure-sync/index.js +14 -0
- package/dist/domain/azure-sync/index.js.map +1 -0
- package/dist/domain/azure-sync/ports.d.ts +117 -0
- package/dist/domain/azure-sync/ports.d.ts.map +1 -0
- package/dist/domain/azure-sync/ports.js +13 -0
- package/dist/domain/azure-sync/ports.js.map +1 -0
- package/dist/domain/azure-sync/repositories.d.ts +53 -0
- package/dist/domain/azure-sync/repositories.d.ts.map +1 -0
- package/dist/domain/azure-sync/repositories.js +11 -0
- package/dist/domain/azure-sync/repositories.js.map +1 -0
- package/dist/domain/azure-sync/services.d.ts +107 -0
- package/dist/domain/azure-sync/services.d.ts.map +1 -0
- package/dist/domain/azure-sync/services.js +316 -0
- package/dist/domain/azure-sync/services.js.map +1 -0
- package/dist/domain/azure-sync/value-objects.d.ts +129 -0
- package/dist/domain/azure-sync/value-objects.d.ts.map +1 -0
- package/dist/domain/azure-sync/value-objects.js +343 -0
- package/dist/domain/azure-sync/value-objects.js.map +1 -0
- package/dist/domain/config/index.d.ts +9 -0
- package/dist/domain/config/index.d.ts.map +1 -0
- package/dist/domain/config/index.js +7 -0
- package/dist/domain/config/index.js.map +1 -0
- package/dist/domain/config/repositories.d.ts +36 -0
- package/dist/domain/config/repositories.d.ts.map +1 -0
- package/dist/domain/config/repositories.js +12 -0
- package/dist/domain/config/repositories.js.map +1 -0
- package/dist/domain/config/value-objects.d.ts +112 -0
- package/dist/domain/config/value-objects.d.ts.map +1 -0
- package/dist/domain/config/value-objects.js +93 -0
- package/dist/domain/config/value-objects.js.map +1 -0
- package/dist/domain/governance/policies.d.ts.map +1 -1
- package/dist/domain/governance/policies.js +70 -0
- package/dist/domain/governance/policies.js.map +1 -1
- package/dist/domain/kanban/entities.d.ts +67 -15
- package/dist/domain/kanban/entities.d.ts.map +1 -1
- package/dist/domain/kanban/entities.js +177 -14
- package/dist/domain/kanban/entities.js.map +1 -1
- package/dist/domain/kanban/grooming.d.ts +27 -7
- package/dist/domain/kanban/grooming.d.ts.map +1 -1
- package/dist/domain/kanban/grooming.js +50 -12
- package/dist/domain/kanban/grooming.js.map +1 -1
- package/dist/domain/kanban/services.d.ts +16 -2
- package/dist/domain/kanban/services.d.ts.map +1 -1
- package/dist/domain/kanban/services.js +29 -2
- package/dist/domain/kanban/services.js.map +1 -1
- package/dist/domain/kanban/value-objects.d.ts +48 -0
- package/dist/domain/kanban/value-objects.d.ts.map +1 -1
- package/dist/domain/kanban/value-objects.js +53 -0
- package/dist/domain/kanban/value-objects.js.map +1 -1
- package/dist/domain/pipeline/gate.d.ts +75 -0
- package/dist/domain/pipeline/gate.d.ts.map +1 -0
- package/dist/domain/pipeline/gate.js +158 -0
- package/dist/domain/pipeline/gate.js.map +1 -0
- package/dist/domain/pipeline/index.d.ts +13 -0
- package/dist/domain/pipeline/index.d.ts.map +1 -0
- package/dist/domain/pipeline/index.js +14 -0
- package/dist/domain/pipeline/index.js.map +1 -0
- package/dist/domain/pipeline/pipeline.d.ts +99 -0
- package/dist/domain/pipeline/pipeline.d.ts.map +1 -0
- package/dist/domain/pipeline/pipeline.js +257 -0
- package/dist/domain/pipeline/pipeline.js.map +1 -0
- package/dist/domain/pipeline/ports.d.ts +120 -0
- package/dist/domain/pipeline/ports.d.ts.map +1 -0
- package/dist/domain/pipeline/ports.js +12 -0
- package/dist/domain/pipeline/ports.js.map +1 -0
- package/dist/domain/pipeline/repositories.d.ts +66 -0
- package/dist/domain/pipeline/repositories.d.ts.map +1 -0
- package/dist/domain/pipeline/repositories.js +11 -0
- package/dist/domain/pipeline/repositories.js.map +1 -0
- package/dist/domain/pipeline/services.d.ts +77 -0
- package/dist/domain/pipeline/services.d.ts.map +1 -0
- package/dist/domain/pipeline/services.js +156 -0
- package/dist/domain/pipeline/services.js.map +1 -0
- package/dist/domain/pipeline/value-objects.d.ts +117 -0
- package/dist/domain/pipeline/value-objects.d.ts.map +1 -0
- package/dist/domain/pipeline/value-objects.js +313 -0
- package/dist/domain/pipeline/value-objects.js.map +1 -0
- package/dist/domain/rag/value-objects.d.ts +9 -2
- package/dist/domain/rag/value-objects.d.ts.map +1 -1
- package/dist/domain/rag/value-objects.js +8 -2
- package/dist/domain/rag/value-objects.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +113 -75
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/agent-registry/agent-profile-repository.d.ts +29 -0
- package/dist/infrastructure/agent-registry/agent-profile-repository.d.ts.map +1 -0
- package/dist/infrastructure/agent-registry/agent-profile-repository.js +109 -0
- package/dist/infrastructure/agent-registry/agent-profile-repository.js.map +1 -0
- package/dist/infrastructure/agent-registry/agent-session-adapter.d.ts +28 -0
- package/dist/infrastructure/agent-registry/agent-session-adapter.d.ts.map +1 -0
- package/dist/infrastructure/agent-registry/agent-session-adapter.js +61 -0
- package/dist/infrastructure/agent-registry/agent-session-adapter.js.map +1 -0
- package/dist/infrastructure/agent-registry/built-in-profiles.d.ts +19 -0
- package/dist/infrastructure/agent-registry/built-in-profiles.d.ts.map +1 -0
- package/dist/infrastructure/agent-registry/built-in-profiles.js +210 -0
- package/dist/infrastructure/agent-registry/built-in-profiles.js.map +1 -0
- package/dist/infrastructure/azure-sync/azure-auth.d.ts +40 -0
- package/dist/infrastructure/azure-sync/azure-auth.d.ts.map +1 -0
- package/dist/infrastructure/azure-sync/azure-auth.js +94 -0
- package/dist/infrastructure/azure-sync/azure-auth.js.map +1 -0
- package/dist/infrastructure/azure-sync/azure-devops-client.d.ts +43 -0
- package/dist/infrastructure/azure-sync/azure-devops-client.d.ts.map +1 -0
- package/dist/infrastructure/azure-sync/azure-devops-client.js +296 -0
- package/dist/infrastructure/azure-sync/azure-devops-client.js.map +1 -0
- package/dist/infrastructure/azure-sync/index.d.ts +9 -0
- package/dist/infrastructure/azure-sync/index.d.ts.map +1 -0
- package/dist/infrastructure/azure-sync/index.js +12 -0
- package/dist/infrastructure/azure-sync/index.js.map +1 -0
- package/dist/infrastructure/azure-sync/sqlite-sync-repository.d.ts +39 -0
- package/dist/infrastructure/azure-sync/sqlite-sync-repository.d.ts.map +1 -0
- package/dist/infrastructure/azure-sync/sqlite-sync-repository.js +202 -0
- package/dist/infrastructure/azure-sync/sqlite-sync-repository.js.map +1 -0
- package/dist/infrastructure/config/index.d.ts +5 -0
- package/dist/infrastructure/config/index.d.ts.map +1 -0
- package/dist/infrastructure/config/index.js +5 -0
- package/dist/infrastructure/config/index.js.map +1 -0
- package/dist/infrastructure/config/yaml-config-repository.d.ts +22 -0
- package/dist/infrastructure/config/yaml-config-repository.d.ts.map +1 -0
- package/dist/infrastructure/config/yaml-config-repository.js +68 -0
- package/dist/infrastructure/config/yaml-config-repository.js.map +1 -0
- package/dist/infrastructure/database/sqlite-adapter.d.ts +13 -15
- package/dist/infrastructure/database/sqlite-adapter.d.ts.map +1 -1
- package/dist/infrastructure/database/sqlite-adapter.js +31 -17
- package/dist/infrastructure/database/sqlite-adapter.js.map +1 -1
- package/dist/infrastructure/domain-map/llm-prompt-factory.d.ts +21 -0
- package/dist/infrastructure/domain-map/llm-prompt-factory.d.ts.map +1 -0
- package/dist/infrastructure/domain-map/llm-prompt-factory.js +49 -0
- package/dist/infrastructure/domain-map/llm-prompt-factory.js.map +1 -0
- package/dist/infrastructure/kanban/card-repository.d.ts +6 -0
- package/dist/infrastructure/kanban/card-repository.d.ts.map +1 -1
- package/dist/infrastructure/kanban/card-repository.js +79 -7
- package/dist/infrastructure/kanban/card-repository.js.map +1 -1
- package/dist/infrastructure/pipeline/dagger-adapter.d.ts +50 -0
- package/dist/infrastructure/pipeline/dagger-adapter.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/dagger-adapter.js +153 -0
- package/dist/infrastructure/pipeline/dagger-adapter.js.map +1 -0
- package/dist/infrastructure/pipeline/dagger-scaffold-generator.d.ts +35 -0
- package/dist/infrastructure/pipeline/dagger-scaffold-generator.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/dagger-scaffold-generator.js +132 -0
- package/dist/infrastructure/pipeline/dagger-scaffold-generator.js.map +1 -0
- package/dist/infrastructure/pipeline/index.d.ts +20 -0
- package/dist/infrastructure/pipeline/index.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/index.js +19 -0
- package/dist/infrastructure/pipeline/index.js.map +1 -0
- package/dist/infrastructure/pipeline/pipeline-template-registry.d.ts +23 -0
- package/dist/infrastructure/pipeline/pipeline-template-registry.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/pipeline-template-registry.js +63 -0
- package/dist/infrastructure/pipeline/pipeline-template-registry.js.map +1 -0
- package/dist/infrastructure/pipeline/scaffold-templates-extra.d.ts +17 -0
- package/dist/infrastructure/pipeline/scaffold-templates-extra.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/scaffold-templates-extra.js +467 -0
- package/dist/infrastructure/pipeline/scaffold-templates-extra.js.map +1 -0
- package/dist/infrastructure/pipeline/scaffold-templates.d.ts +23 -0
- package/dist/infrastructure/pipeline/scaffold-templates.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/scaffold-templates.js +476 -0
- package/dist/infrastructure/pipeline/scaffold-templates.js.map +1 -0
- package/dist/infrastructure/pipeline/sqlite-pipeline-repository.d.ts +32 -0
- package/dist/infrastructure/pipeline/sqlite-pipeline-repository.d.ts.map +1 -0
- package/dist/infrastructure/pipeline/sqlite-pipeline-repository.js +197 -0
- package/dist/infrastructure/pipeline/sqlite-pipeline-repository.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +300 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/tools/agent-registry-tools.d.ts +11 -0
- package/dist/tools/agent-registry-tools.d.ts.map +1 -0
- package/dist/tools/agent-registry-tools.js +208 -0
- package/dist/tools/agent-registry-tools.js.map +1 -0
- package/dist/tools/azure-sync-tools.d.ts +15 -0
- package/dist/tools/azure-sync-tools.d.ts.map +1 -0
- package/dist/tools/azure-sync-tools.js +332 -0
- package/dist/tools/azure-sync-tools.js.map +1 -0
- package/dist/tools/kanban-card-tools.d.ts.map +1 -1
- package/dist/tools/kanban-card-tools.js +41 -16
- package/dist/tools/kanban-card-tools.js.map +1 -1
- package/dist/tools/kanban-gate-tools.d.ts +7 -0
- package/dist/tools/kanban-gate-tools.d.ts.map +1 -0
- package/dist/tools/kanban-gate-tools.js +106 -0
- package/dist/tools/kanban-gate-tools.js.map +1 -0
- package/dist/tools/kanban-grooming-tools.d.ts +7 -0
- package/dist/tools/kanban-grooming-tools.d.ts.map +1 -0
- package/dist/tools/kanban-grooming-tools.js +180 -0
- package/dist/tools/kanban-grooming-tools.js.map +1 -0
- package/dist/tools/pipeline-tools.d.ts +15 -0
- package/dist/tools/pipeline-tools.d.ts.map +1 -0
- package/dist/tools/pipeline-tools.js +424 -0
- package/dist/tools/pipeline-tools.js.map +1 -0
- package/package.json +9 -3
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
* Grooming Validator
|
|
3
3
|
*
|
|
4
4
|
* Validates that a card meets all criteria to transition from
|
|
5
|
-
* GROOMING to READY.
|
|
5
|
+
* GROOMING to READY. This is the most important gate in the
|
|
6
|
+
* kanban lifecycle — where design, documentation, acceptance
|
|
7
|
+
* criteria, dependencies, and value propositions must be
|
|
8
|
+
* established before work can begin.
|
|
6
9
|
*
|
|
7
|
-
* Validation rules
|
|
10
|
+
* Validation rules:
|
|
8
11
|
* 1. Card must be in grooming status
|
|
9
|
-
* 2. Must have a description (
|
|
10
|
-
* 3. Must have
|
|
11
|
-
* 4. Must have
|
|
12
|
-
* 5.
|
|
12
|
+
* 2. Must have a description (summary of the work)
|
|
13
|
+
* 3. Must have a scope document linked (vault artifact)
|
|
14
|
+
* 4. Must have >= 2 acceptance criteria
|
|
15
|
+
* 5. Each acceptance criterion must be >= MIN_AC_DESCRIPTION_LENGTH chars
|
|
16
|
+
* 6. Must have story points estimated
|
|
17
|
+
* 7. Must have an epic assigned
|
|
18
|
+
* 8. If card has blockers (blockedBy), they must be acknowledged
|
|
19
|
+
* (this is a soft check — presence is validated, not resolution)
|
|
13
20
|
*
|
|
14
21
|
* SOLID: SRP - grooming validation only (separate from card lifecycle)
|
|
15
22
|
* SOLID: OCP - new rules can be added without modifying existing ones
|
|
@@ -21,10 +28,22 @@ export declare const MIN_ACCEPTANCE_CRITERIA = 2;
|
|
|
21
28
|
export interface GroomingResult {
|
|
22
29
|
readonly valid: boolean;
|
|
23
30
|
readonly errors: readonly string[];
|
|
31
|
+
readonly warnings: readonly string[];
|
|
32
|
+
readonly checklist: GroomingChecklist;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Detailed checklist showing which grooming requirements are met.
|
|
36
|
+
* Useful for agents and humans to see progress toward readiness.
|
|
37
|
+
*/
|
|
38
|
+
export interface GroomingChecklist {
|
|
39
|
+
readonly inGroomingStatus: boolean;
|
|
24
40
|
readonly hasDescription: boolean;
|
|
41
|
+
readonly hasScopeDoc: boolean;
|
|
25
42
|
readonly hasAcceptanceCriteria: boolean;
|
|
43
|
+
readonly acceptanceCriteriaQuality: boolean;
|
|
26
44
|
readonly hasStoryPoints: boolean;
|
|
27
45
|
readonly hasEpic: boolean;
|
|
46
|
+
readonly dependenciesAcknowledged: boolean;
|
|
28
47
|
}
|
|
29
48
|
/**
|
|
30
49
|
* Validates card readiness for the grooming -> ready transition.
|
|
@@ -33,7 +52,8 @@ export interface GroomingResult {
|
|
|
33
52
|
export declare class GroomingValidator {
|
|
34
53
|
/**
|
|
35
54
|
* Validate a card for grooming completion.
|
|
36
|
-
* Returns a result with all validation errors (not just the first)
|
|
55
|
+
* Returns a result with all validation errors (not just the first),
|
|
56
|
+
* plus warnings for non-blocking issues and a detailed checklist.
|
|
37
57
|
*/
|
|
38
58
|
validate(card: Card): GroomingResult;
|
|
39
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grooming.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/grooming.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"grooming.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/grooming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;CAC5C;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc;CAmGrC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CardStatus } from "./value-objects.js";
|
|
1
|
+
import { CardStatus, MIN_AC_DESCRIPTION_LENGTH } from "./value-objects.js";
|
|
2
2
|
/** Minimum acceptance criteria required for grooming completion. */
|
|
3
3
|
export const MIN_ACCEPTANCE_CRITERIA = 2;
|
|
4
4
|
/**
|
|
@@ -8,42 +8,80 @@ export const MIN_ACCEPTANCE_CRITERIA = 2;
|
|
|
8
8
|
export class GroomingValidator {
|
|
9
9
|
/**
|
|
10
10
|
* Validate a card for grooming completion.
|
|
11
|
-
* Returns a result with all validation errors (not just the first)
|
|
11
|
+
* Returns a result with all validation errors (not just the first),
|
|
12
|
+
* plus warnings for non-blocking issues and a detailed checklist.
|
|
12
13
|
*/
|
|
13
14
|
validate(card) {
|
|
14
15
|
const errors = [];
|
|
16
|
+
const warnings = [];
|
|
15
17
|
// Rule 1: Must be in grooming status
|
|
16
|
-
|
|
18
|
+
const inGroomingStatus = card.status === CardStatus.Grooming;
|
|
19
|
+
if (!inGroomingStatus) {
|
|
17
20
|
errors.push(`Card must be in grooming status, current: "${card.status}"`);
|
|
18
21
|
}
|
|
19
|
-
// Rule 2: Must have a description (
|
|
22
|
+
// Rule 2: Must have a description (summary)
|
|
20
23
|
const hasDescription = card.description !== undefined && card.description.trim().length > 0;
|
|
21
24
|
if (!hasDescription) {
|
|
22
|
-
errors.push("Missing description (
|
|
25
|
+
errors.push("Missing description (card summary required)");
|
|
23
26
|
}
|
|
24
|
-
// Rule 3: Must have
|
|
27
|
+
// Rule 3: Must have a scope document linked
|
|
28
|
+
const hasScopeDoc = card.scopeDocPath !== undefined;
|
|
29
|
+
if (!hasScopeDoc) {
|
|
30
|
+
errors.push("Scope document not linked. Create a vault doc from the " +
|
|
31
|
+
"Scope-Doc template and link it with the card's scopeDocPath");
|
|
32
|
+
}
|
|
33
|
+
// Rule 4: Must have >= 2 acceptance criteria
|
|
25
34
|
const hasAcceptanceCriteria = card.acceptanceCriteria.length >= MIN_ACCEPTANCE_CRITERIA;
|
|
26
35
|
if (!hasAcceptanceCriteria) {
|
|
27
36
|
errors.push(`Need at least ${MIN_ACCEPTANCE_CRITERIA} acceptance criteria, ` +
|
|
28
37
|
`found: ${card.acceptanceCriteria.length}`);
|
|
29
38
|
}
|
|
30
|
-
// Rule
|
|
39
|
+
// Rule 5: Each AC must meet minimum quality (length)
|
|
40
|
+
const shortCriteria = card.acceptanceCriteria.filter((ac) => ac.description.length < MIN_AC_DESCRIPTION_LENGTH);
|
|
41
|
+
const acceptanceCriteriaQuality = shortCriteria.length === 0;
|
|
42
|
+
if (!acceptanceCriteriaQuality && card.acceptanceCriteria.length > 0) {
|
|
43
|
+
errors.push(`${shortCriteria.length} acceptance criteria too short ` +
|
|
44
|
+
`(min ${MIN_AC_DESCRIPTION_LENGTH} chars). ` +
|
|
45
|
+
`Criteria must be specific and measurable`);
|
|
46
|
+
}
|
|
47
|
+
// Rule 6: Must have story points
|
|
31
48
|
const hasStoryPoints = card.storyPoints !== undefined;
|
|
32
49
|
if (!hasStoryPoints) {
|
|
33
50
|
errors.push("Story points not estimated");
|
|
34
51
|
}
|
|
35
|
-
// Rule
|
|
52
|
+
// Rule 7: Must have an epic
|
|
36
53
|
const hasEpic = card.epicId !== undefined;
|
|
37
54
|
if (!hasEpic) {
|
|
38
55
|
errors.push("Epic not assigned");
|
|
39
56
|
}
|
|
57
|
+
// Rule 8: Dependencies acknowledgement
|
|
58
|
+
// If the card has blockedBy entries, this is informational —
|
|
59
|
+
// the card can still pass grooming, but we warn about blockers
|
|
60
|
+
const dependenciesAcknowledged = true; // Always passes (soft check)
|
|
61
|
+
if (card.blockedBy.length > 0) {
|
|
62
|
+
const blockerIds = card.blockedBy.map((id) => id.value).join(", ");
|
|
63
|
+
warnings.push(`Card has ${card.blockedBy.length} blocker(s): ${blockerIds}. ` +
|
|
64
|
+
`Ensure blockers are documented in the scope document`);
|
|
65
|
+
}
|
|
66
|
+
// Report on dependsOn for awareness
|
|
67
|
+
if (card.dependsOn.length > 0) {
|
|
68
|
+
const depIds = card.dependsOn.map((id) => id.value).join(", ");
|
|
69
|
+
warnings.push(`Card depends on ${card.dependsOn.length} card(s): ${depIds}`);
|
|
70
|
+
}
|
|
40
71
|
return {
|
|
41
72
|
valid: errors.length === 0,
|
|
42
73
|
errors,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
74
|
+
warnings,
|
|
75
|
+
checklist: {
|
|
76
|
+
inGroomingStatus,
|
|
77
|
+
hasDescription,
|
|
78
|
+
hasScopeDoc,
|
|
79
|
+
hasAcceptanceCriteria,
|
|
80
|
+
acceptanceCriteriaQuality,
|
|
81
|
+
hasStoryPoints,
|
|
82
|
+
hasEpic,
|
|
83
|
+
dependenciesAcknowledged,
|
|
84
|
+
},
|
|
47
85
|
};
|
|
48
86
|
}
|
|
49
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grooming.js","sourceRoot":"","sources":["../../../src/domain/kanban/grooming.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grooming.js","sourceRoot":"","sources":["../../../src/domain/kanban/grooming.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAwBzC;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,IAAU;QACjB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,qCAAqC;QACrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC;QAC7D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CACT,8CAA8C,IAAI,CAAC,MAAM,GAAG,CAC7D,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,cAAc,GAClB,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC7D,CAAC;QAED,4CAA4C;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CACT,yDAAyD;gBACvD,6DAA6D,CAChE,CAAC;QACJ,CAAC;QAED,6CAA6C;QAC7C,MAAM,qBAAqB,GACzB,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,uBAAuB,CAAC;QAC5D,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CACT,iBAAiB,uBAAuB,wBAAwB;gBAC9D,UAAU,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAC7C,CAAC;QACJ,CAAC;QAED,qDAAqD;QACrD,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAClD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,yBAAyB,CAC1D,CAAC;QACF,MAAM,yBAAyB,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,MAAM,CAAC,IAAI,CACT,GAAG,aAAa,CAAC,MAAM,iCAAiC;gBACtD,QAAQ,yBAAyB,WAAW;gBAC5C,0CAA0C,CAC7C,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;QACtD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;QAED,4BAA4B;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;QAED,uCAAuC;QACvC,6DAA6D;QAC7D,+DAA+D;QAC/D,MAAM,wBAAwB,GAAG,IAAI,CAAC,CAAC,6BAA6B;QACpE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,QAAQ,CAAC,IAAI,CACX,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,gBAAgB,UAAU,IAAI;gBAC7D,sDAAsD,CACzD,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,QAAQ,CAAC,IAAI,CACX,mBAAmB,IAAI,CAAC,SAAS,CAAC,MAAM,aAAa,MAAM,EAAE,CAC9D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,QAAQ;YACR,SAAS,EAAE;gBACT,gBAAgB;gBAChB,cAAc;gBACd,WAAW;gBACX,qBAAqB;gBACrB,yBAAyB;gBACzB,cAAc;gBACd,OAAO;gBACP,wBAAwB;aACzB;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -12,15 +12,29 @@
|
|
|
12
12
|
import type { WorkspaceId, Result } from "../shared/value-objects.js";
|
|
13
13
|
import type { Card } from "./entities.js";
|
|
14
14
|
import { CardStatus } from "./value-objects.js";
|
|
15
|
-
import type { CardId, SprintId, EpicId, StoryPoints } from "./value-objects.js";
|
|
15
|
+
import type { CardId, SprintId, EpicId, StoryPoints, GateTaskDefinition } from "./value-objects.js";
|
|
16
16
|
import type { CardRepository } from "./repositories.js";
|
|
17
|
+
/**
|
|
18
|
+
* Port for resolving gate task configuration.
|
|
19
|
+
* The domain service uses this to get gate definitions and interval settings
|
|
20
|
+
* without depending on the config bounded context directly.
|
|
21
|
+
*
|
|
22
|
+
* DDD: Port interface — domain defines, infrastructure/application implements
|
|
23
|
+
*/
|
|
24
|
+
export interface GateConfigPort {
|
|
25
|
+
/** Get gate task definitions for a given phase. Returns empty array if no gates configured. */
|
|
26
|
+
getGateDefinitions(phase: string): readonly GateTaskDefinition[];
|
|
27
|
+
/** Minimum seconds between status transitions. Returns 0 if no cooldown. */
|
|
28
|
+
getMinTransitionIntervalSecs(): number;
|
|
29
|
+
}
|
|
17
30
|
/**
|
|
18
31
|
* Orchestrates card lifecycle operations with cross-cutting validations.
|
|
19
32
|
*/
|
|
20
33
|
export declare class CardDomainService {
|
|
21
34
|
private readonly cardRepo;
|
|
35
|
+
private readonly gateConfig?;
|
|
22
36
|
private readonly groomingValidator;
|
|
23
|
-
constructor(cardRepo: CardRepository);
|
|
37
|
+
constructor(cardRepo: CardRepository, gateConfig?: GateConfigPort | undefined);
|
|
24
38
|
/**
|
|
25
39
|
* Move a card to a new status with full validation:
|
|
26
40
|
* - State machine transition
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAoC,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,+FAA+F;IAC/F,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,kBAAkB,EAAE,CAAC;IACjE,4EAA4E;IAC5E,4BAA4B,IAAI,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAJ9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;gBAG1C,QAAQ,EAAE,cAAc,EACxB,UAAU,CAAC,EAAE,cAAc,YAAA;IAG9C;;;;;;OAMG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IA4FxB,8BAA8B;IACxB,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYxB,+BAA+B;IACzB,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYxB,kCAAkC;IAC5B,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYxB,iCAAiC;IAC3B,WAAW,CACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYxB,2DAA2D;IACrD,SAAS,CACb,SAAS,EAAE,WAAW,EACtB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IASnC,+BAA+B;IACzB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAS3D;;OAEG;IACG,aAAa,CACjB,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;CAW/C"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { ok, fail } from "../shared/value-objects.js";
|
|
2
|
-
import { CardStatus, DEFAULT_WIP_LIMITS } from "./value-objects.js";
|
|
2
|
+
import { CardStatus, DEFAULT_WIP_LIMITS, GATED_PHASES } from "./value-objects.js";
|
|
3
3
|
import { GroomingValidator } from "./grooming.js";
|
|
4
4
|
/**
|
|
5
5
|
* Orchestrates card lifecycle operations with cross-cutting validations.
|
|
6
6
|
*/
|
|
7
7
|
export class CardDomainService {
|
|
8
8
|
cardRepo;
|
|
9
|
+
gateConfig;
|
|
9
10
|
groomingValidator = new GroomingValidator();
|
|
10
|
-
constructor(cardRepo) {
|
|
11
|
+
constructor(cardRepo, gateConfig) {
|
|
11
12
|
this.cardRepo = cardRepo;
|
|
13
|
+
this.gateConfig = gateConfig;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Move a card to a new status with full validation:
|
|
@@ -50,8 +52,33 @@ export class CardDomainService {
|
|
|
50
52
|
return fail(`WIP limit reached for "${targetStatus}": ${currentCount}/${wipLimit}`);
|
|
51
53
|
}
|
|
52
54
|
}
|
|
55
|
+
// Gate task enforcement (if config is provided)
|
|
56
|
+
if (this.gateConfig !== undefined && GATED_PHASES.includes(card.status)) {
|
|
57
|
+
// Auto-verify any "ac-met" gates before checking
|
|
58
|
+
card.autoVerifyGates();
|
|
59
|
+
// Check all required gates are met before allowing promotion
|
|
60
|
+
if (!card.allRequiredGatesMet()) {
|
|
61
|
+
const unmet = card.unmetRequiredGates();
|
|
62
|
+
const descriptions = unmet.map((g) => g.description).join("; ");
|
|
63
|
+
return fail(`Gate tasks not met for "${card.status}": ${descriptions}`);
|
|
64
|
+
}
|
|
65
|
+
// Enforce minimum transition interval (cooldown)
|
|
66
|
+
const minSecs = this.gateConfig.getMinTransitionIntervalSecs();
|
|
67
|
+
if (minSecs > 0 && card.lastTransitionAt !== undefined) {
|
|
68
|
+
const elapsed = (Date.now() - card.lastTransitionAt.value.getTime()) / 1000;
|
|
69
|
+
if (elapsed < minSecs) {
|
|
70
|
+
return fail(`Transition too fast: ${Math.round(elapsed)}s since last ` +
|
|
71
|
+
`transition, minimum is ${minSecs}s`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
53
75
|
// Execute the transition (entity enforces state machine)
|
|
54
76
|
card.moveTo(targetStatus);
|
|
77
|
+
// Initialize gate tasks for the new phase (if gated)
|
|
78
|
+
if (this.gateConfig !== undefined && GATED_PHASES.includes(targetStatus)) {
|
|
79
|
+
const definitions = this.gateConfig.getGateDefinitions(targetStatus);
|
|
80
|
+
card.initGateTasks(definitions);
|
|
81
|
+
}
|
|
55
82
|
await this.cardRepo.save(card);
|
|
56
83
|
return ok(card);
|
|
57
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/domain/kanban/services.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/domain/kanban/services.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAgBlD;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAIT;IACA;IAJF,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAE7D,YACmB,QAAwB,EACxB,UAA2B;QAD3B,aAAQ,GAAR,QAAQ,CAAgB;QACxB,eAAU,GAAV,UAAU,CAAiB;IAC3C,CAAC;IAEJ;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,CACZ,MAAc,EACd,YAAwB;QAExB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC,mBAAmB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,qEAAqE;YACrE,IACE,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ;gBACnC,YAAY,KAAK,UAAU,CAAC,KAAK,EACjC,CAAC;gBACD,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC7D,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;oBAC1B,OAAO,IAAI,CACT,wBAAwB,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3D,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC;YAED,sDAAsD;YACtD,IACE,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,KAAK;gBAChC,YAAY,KAAK,UAAU,CAAC,KAAK,EACjC,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAChC,OAAO,IAAI,CAAC,gDAAgD,CAAC,CAAC;gBAChE,CAAC;gBACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBACrC,OAAO,IAAI,CAAC,+CAA+C,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;YAED,wCAAwC;YACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAClD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CACpD,IAAI,CAAC,SAAS,EACd,YAAY,CACb,CAAC;gBACF,IAAI,YAAY,IAAI,QAAQ,EAAE,CAAC;oBAC7B,OAAO,IAAI,CACT,0BAA0B,YAAY,MAAM,YAAY,IAAI,QAAQ,EAAE,CACvE,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,gDAAgD;YAChD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxE,iDAAiD;gBACjD,IAAI,CAAC,eAAe,EAAE,CAAC;gBAEvB,6DAA6D;gBAC7D,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;oBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxC,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChE,OAAO,IAAI,CACT,2BAA2B,IAAI,CAAC,MAAM,MAAM,YAAY,EAAE,CAC3D,CAAC;gBACJ,CAAC;gBAED,iDAAiD;gBACjD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,4BAA4B,EAAE,CAAC;gBAC/D,IAAI,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;oBACvD,MAAM,OAAO,GACX,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;oBAC9D,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;wBACtB,OAAO,IAAI,CACT,wBAAwB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe;4BACxD,0BAA0B,OAAO,GAAG,CACvC,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,yDAAyD;YACzD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAE1B,qDAAqD;YACrD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBACrE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,KAAK,CAAC,YAAY,CAChB,MAAc,EACd,MAAc;QAEd,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,mBAAmB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,cAAc,CAClB,MAAc,EACd,QAAkB;QAElB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,mBAAmB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,4BAA4B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,cAAc,CAClB,MAAc,EACd,MAAmB;QAEnB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,mBAAmB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,+BAA+B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,WAAW,CACf,MAAc,EACd,KAAa;QAEb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,mBAAmB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,2BAA2B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAS,CACb,SAAsB,EACtB,MAAmB;QAEnB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACrE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,yBAAyB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,SAAsB;QAEtB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAgC,CAAC;YAC/C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/C,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,8BAA8B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -57,10 +57,58 @@ export declare enum Priority {
|
|
|
57
57
|
export declare const VALID_STORY_POINTS: readonly [1, 2, 3, 5, 8, 13, 21];
|
|
58
58
|
export type StoryPoints = (typeof VALID_STORY_POINTS)[number];
|
|
59
59
|
export declare function isValidStoryPoints(value: number): value is StoryPoints;
|
|
60
|
+
/**
|
|
61
|
+
* Minimum character length for each acceptance criterion description.
|
|
62
|
+
* Prevents vague, one-word criteria like "works" or "tests pass".
|
|
63
|
+
* Criteria should be specific and measurable.
|
|
64
|
+
*/
|
|
65
|
+
export declare const MIN_AC_DESCRIPTION_LENGTH = 10;
|
|
60
66
|
/** Maximum number of review iterations before escalation. */
|
|
61
67
|
export declare const MAX_REVIEW_ITERATIONS = 4;
|
|
62
68
|
/** Default WIP limits per column. null = no limit. */
|
|
63
69
|
export declare const DEFAULT_WIP_LIMITS: Record<CardStatus, number | null>;
|
|
70
|
+
/**
|
|
71
|
+
* Validated relative vault path to a card's scope document.
|
|
72
|
+
* Must be a non-empty string ending in .md, relative to the vault root.
|
|
73
|
+
*
|
|
74
|
+
* Examples: "03-Scope-Docs/CD-009-Grooming-Enhancement.md"
|
|
75
|
+
*
|
|
76
|
+
* DDD: Value Object - immutable, compared by value
|
|
77
|
+
*/
|
|
78
|
+
export declare class ScopeDocPath {
|
|
79
|
+
readonly value: string;
|
|
80
|
+
private constructor();
|
|
81
|
+
static create(path: string): ScopeDocPath;
|
|
82
|
+
static from(value: string): ScopeDocPath;
|
|
83
|
+
equals(other: ScopeDocPath): boolean;
|
|
84
|
+
toString(): string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Auto-verification strategy for a gate task.
|
|
88
|
+
* Re-exported from config for kanban domain convenience.
|
|
89
|
+
*/
|
|
90
|
+
export type { AutoVerifyType, GateTaskDefinition } from "../config/value-objects.js";
|
|
91
|
+
/**
|
|
92
|
+
* Runtime gate task instance attached to a card.
|
|
93
|
+
* Created from GateTaskDefinition when a card enters a phase.
|
|
94
|
+
* Immutable once met — tracks evidence of completion.
|
|
95
|
+
*
|
|
96
|
+
* DDD: Value Object — no identity, compared by value
|
|
97
|
+
*/
|
|
98
|
+
export interface GateTask {
|
|
99
|
+
readonly description: string;
|
|
100
|
+
readonly phase: string;
|
|
101
|
+
readonly required: boolean;
|
|
102
|
+
readonly autoVerify: "ac-met" | "none";
|
|
103
|
+
readonly met: boolean;
|
|
104
|
+
readonly evidence: string | undefined;
|
|
105
|
+
readonly metAt: string | undefined;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Phases that support gate tasks (exit criteria before promotion).
|
|
109
|
+
* Only forward-moving active phases — not backlog, grooming, ready, or done.
|
|
110
|
+
*/
|
|
111
|
+
export declare const GATED_PHASES: readonly CardStatus[];
|
|
64
112
|
/**
|
|
65
113
|
* Card identifier. Format: CD-{NNN}
|
|
66
114
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-objects.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/value-objects.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAItD;;;;;;;;;;;;GAYG;AACH,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,qCAAqC;AACrC,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,UAAU,EAAE,CAStE,CAAC;AAIF,oBAAY,YAAY;IACtB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAM1E,CAAC;AAIJ,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,UAAU,gBAAgB;IAC1B,IAAI,SAAS;CACd;AAED,qCAAqC;AACrC,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,UAAU,EAAE,CAItE,CAAC;AAIF,oBAAY,QAAQ;IAClB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,GAAG,QAAQ;CACZ;AAID,0CAA0C;AAC1C,eAAO,MAAM,kBAAkB,kCAAmC,CAAC;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEtE;AAID,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAIvC,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAShE,CAAC;AAIF;;GAEG;AACH,qBAAa,MAAO,SAAQ,QAAQ;IAClC,OAAO;IAIP,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOvC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC,IAAI,QAAQ,IAAI,MAAM,CAGrB;CACF;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,QAAQ;IACpC,OAAO;IAIP,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAOzC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAIpC,IAAI,QAAQ,IAAI,MAAM,CAGrB;CACF;AAED;;GAEG;AACH,qBAAa,MAAO,SAAQ,QAAQ;IAClC,OAAO;IAIP,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOvC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC,IAAI,QAAQ,IAAI,MAAM,CAGrB;CACF"}
|
|
1
|
+
{"version":3,"file":"value-objects.d.ts","sourceRoot":"","sources":["../../../src/domain/kanban/value-objects.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,6 +85,13 @@ export const VALID_STORY_POINTS = [1, 2, 3, 5, 8, 13, 21];
|
|
|
85
85
|
export function isValidStoryPoints(value) {
|
|
86
86
|
return VALID_STORY_POINTS.includes(value);
|
|
87
87
|
}
|
|
88
|
+
// ── Acceptance Criteria Quality ───────────────────────────────────────
|
|
89
|
+
/**
|
|
90
|
+
* Minimum character length for each acceptance criterion description.
|
|
91
|
+
* Prevents vague, one-word criteria like "works" or "tests pass".
|
|
92
|
+
* Criteria should be specific and measurable.
|
|
93
|
+
*/
|
|
94
|
+
export const MIN_AC_DESCRIPTION_LENGTH = 10;
|
|
88
95
|
// ── Review Iterations ─────────────────────────────────────────────────
|
|
89
96
|
/** Maximum number of review iterations before escalation. */
|
|
90
97
|
export const MAX_REVIEW_ITERATIONS = 4;
|
|
@@ -100,6 +107,52 @@ export const DEFAULT_WIP_LIMITS = {
|
|
|
100
107
|
[CardStatus.Tested]: null,
|
|
101
108
|
[CardStatus.Done]: null,
|
|
102
109
|
};
|
|
110
|
+
// ── Scope Document Path ───────────────────────────────────────────────
|
|
111
|
+
/**
|
|
112
|
+
* Validated relative vault path to a card's scope document.
|
|
113
|
+
* Must be a non-empty string ending in .md, relative to the vault root.
|
|
114
|
+
*
|
|
115
|
+
* Examples: "03-Scope-Docs/CD-009-Grooming-Enhancement.md"
|
|
116
|
+
*
|
|
117
|
+
* DDD: Value Object - immutable, compared by value
|
|
118
|
+
*/
|
|
119
|
+
export class ScopeDocPath {
|
|
120
|
+
value;
|
|
121
|
+
constructor(value) {
|
|
122
|
+
this.value = value;
|
|
123
|
+
}
|
|
124
|
+
static create(path) {
|
|
125
|
+
const trimmed = path.trim();
|
|
126
|
+
if (trimmed.length === 0) {
|
|
127
|
+
throw new Error("ScopeDocPath: path cannot be empty");
|
|
128
|
+
}
|
|
129
|
+
if (!trimmed.endsWith(".md")) {
|
|
130
|
+
throw new Error("ScopeDocPath: path must end with .md");
|
|
131
|
+
}
|
|
132
|
+
if (trimmed.startsWith("/")) {
|
|
133
|
+
throw new Error("ScopeDocPath: path must be relative (no leading /)");
|
|
134
|
+
}
|
|
135
|
+
return new ScopeDocPath(trimmed);
|
|
136
|
+
}
|
|
137
|
+
static from(value) {
|
|
138
|
+
return new ScopeDocPath(value);
|
|
139
|
+
}
|
|
140
|
+
equals(other) {
|
|
141
|
+
return this.value === other.value;
|
|
142
|
+
}
|
|
143
|
+
toString() {
|
|
144
|
+
return this.value;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Phases that support gate tasks (exit criteria before promotion).
|
|
149
|
+
* Only forward-moving active phases — not backlog, grooming, ready, or done.
|
|
150
|
+
*/
|
|
151
|
+
export const GATED_PHASES = [
|
|
152
|
+
CardStatus.Doing,
|
|
153
|
+
CardStatus.Review,
|
|
154
|
+
CardStatus.Tested,
|
|
155
|
+
];
|
|
103
156
|
// ── Identity Types ────────────────────────────────────────────────────
|
|
104
157
|
/**
|
|
105
158
|
* Card identifier. Format: CD-{NNN}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-objects.js","sourceRoot":"","sources":["../../../src/domain/kanban/value-objects.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"value-objects.js","sourceRoot":"","sources":["../../../src/domain/kanban/value-objects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline Domain — Gate (Child Entity)
|
|
3
|
+
*
|
|
4
|
+
* A single quality checkpoint within a Pipeline.
|
|
5
|
+
* Gates progress through: pending -> running -> passed|failed|skipped.
|
|
6
|
+
* Failed gates can be retried (failed -> pending).
|
|
7
|
+
*
|
|
8
|
+
* SOLID: SRP — Gate manages gate-level state transitions
|
|
9
|
+
* DDD: Child entity — no identity outside its Pipeline aggregate
|
|
10
|
+
*/
|
|
11
|
+
import { Timestamp } from "../shared/value-objects.js";
|
|
12
|
+
import { type GateId, type GateType, type GateStatus, type SkipPolicy, DaggerFunctionRef, GateOutput } from "./value-objects.js";
|
|
13
|
+
/** Data shape for Gate reconstitution. */
|
|
14
|
+
export interface GateProps {
|
|
15
|
+
readonly id: GateId;
|
|
16
|
+
readonly type: GateType;
|
|
17
|
+
readonly status: GateStatus;
|
|
18
|
+
readonly order: number;
|
|
19
|
+
readonly daggerFunction: DaggerFunctionRef;
|
|
20
|
+
readonly skipPolicy: SkipPolicy;
|
|
21
|
+
readonly command?: string;
|
|
22
|
+
readonly output?: GateOutput;
|
|
23
|
+
readonly skippedReason?: string;
|
|
24
|
+
readonly approvedBy?: string;
|
|
25
|
+
readonly startedAt?: Timestamp;
|
|
26
|
+
readonly completedAt?: Timestamp;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Gate — a single quality checkpoint within a Pipeline.
|
|
30
|
+
*
|
|
31
|
+
* Gates progress through: pending -> running -> passed|failed|skipped
|
|
32
|
+
* Failed gates can be retried (failed -> pending).
|
|
33
|
+
* Skipping requires policy validation (done at Pipeline/service level).
|
|
34
|
+
*/
|
|
35
|
+
export declare class Gate {
|
|
36
|
+
readonly id: GateId;
|
|
37
|
+
readonly type: GateType;
|
|
38
|
+
readonly order: number;
|
|
39
|
+
readonly daggerFunction: DaggerFunctionRef;
|
|
40
|
+
readonly skipPolicy: SkipPolicy;
|
|
41
|
+
readonly command: string | undefined;
|
|
42
|
+
private _status;
|
|
43
|
+
private _output;
|
|
44
|
+
private _skippedReason;
|
|
45
|
+
private _approvedBy;
|
|
46
|
+
private _startedAt;
|
|
47
|
+
private _completedAt;
|
|
48
|
+
private constructor();
|
|
49
|
+
/** Create a new gate in pending status. */
|
|
50
|
+
static create(id: GateId, type: GateType, order: number, daggerFunction: DaggerFunctionRef, skipPolicy: SkipPolicy, command?: string): Gate;
|
|
51
|
+
/** Reconstitute from persisted data. */
|
|
52
|
+
static reconstitute(props: GateProps): Gate;
|
|
53
|
+
get status(): GateStatus;
|
|
54
|
+
get output(): GateOutput | undefined;
|
|
55
|
+
get skippedReason(): string | undefined;
|
|
56
|
+
get approvedBy(): string | undefined;
|
|
57
|
+
get startedAt(): Timestamp | undefined;
|
|
58
|
+
get completedAt(): Timestamp | undefined;
|
|
59
|
+
get isTerminal(): boolean;
|
|
60
|
+
get isSuccess(): boolean;
|
|
61
|
+
/** Start execution of this gate. */
|
|
62
|
+
start(): void;
|
|
63
|
+
/** Mark gate as passed with optional output. */
|
|
64
|
+
pass(output?: string): void;
|
|
65
|
+
/** Mark gate as failed with optional output. */
|
|
66
|
+
fail(output?: string): void;
|
|
67
|
+
/** Skip gate with reason (policy check done at Pipeline level). */
|
|
68
|
+
skip(reason: string, approvedBy?: string): void;
|
|
69
|
+
/** Retry a failed gate (resets to pending). */
|
|
70
|
+
retry(): void;
|
|
71
|
+
/** Export gate state for persistence. */
|
|
72
|
+
toProps(): GateProps;
|
|
73
|
+
private assertTransition;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../../src/domain/pipeline/gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,iBAAiB,EACjB,UAAU,EAIX,MAAM,oBAAoB,CAAC;AAE5B,0CAA0C;AAC1C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;CAClC;AAED;;;;;;GAMG;AACH,qBAAa,IAAI;aASG,EAAE,EAAE,MAAM;aACV,IAAI,EAAE,QAAQ;aACd,KAAK,EAAE,MAAM;aACb,cAAc,EAAE,iBAAiB;aACjC,UAAU,EAAE,UAAU;aACtB,OAAO,EAAE,MAAM,GAAG,SAAS;IAb7C,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,YAAY,CAAwB;IAE5C,OAAO;IAsBP,2CAA2C;IAC3C,MAAM,CAAC,MAAM,CACX,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,iBAAiB,EACjC,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,MAAM,GACf,IAAI;IAiBP,wCAAwC;IACxC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAmB3C,IAAI,MAAM,IAAI,UAAU,CAEvB;IACD,IAAI,MAAM,IAAI,UAAU,GAAG,SAAS,CAEnC;IACD,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IACD,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IACD,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,CAErC;IACD,IAAI,WAAW,IAAI,SAAS,GAAG,SAAS,CAEvC;IACD,IAAI,UAAU,IAAI,OAAO,CAExB;IACD,IAAI,SAAS,IAAI,OAAO,CAEvB;IAID,oCAAoC;IACpC,KAAK,IAAI,IAAI;IAMb,gDAAgD;IAChD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAS3B,gDAAgD;IAChD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAS3B,mEAAmE;IACnE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAa/C,+CAA+C;IAC/C,KAAK,IAAI,IAAI;IAQb,yCAAyC;IACzC,OAAO,IAAI,SAAS;IAyBpB,OAAO,CAAC,gBAAgB;CAQzB"}
|