@planu/cli 0.80.1 → 0.81.1
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/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/config/ac-gap-keywords.json +144 -0
- package/dist/config/challenge-scenarios.json +114 -0
- package/dist/config/code-quality-thresholds.json +114 -0
- package/dist/config/compliance-frameworks.json +150 -0
- package/dist/config/dor-dod-items.json +214 -0
- package/dist/config/drift-severity.json +22 -0
- package/dist/config/elicitation-questions.json +70 -0
- package/dist/config/feasibility-rules.json +91 -0
- package/dist/config/rbac-roles.json +27 -0
- package/dist/config/readiness-config.json +18 -0
- package/dist/config/spec-types.json +42 -0
- package/dist/engine/ac-gap-detector/constants.d.ts.map +1 -1
- package/dist/engine/ac-gap-detector/constants.js +24 -126
- package/dist/engine/ac-gap-detector/constants.js.map +1 -1
- package/dist/engine/ac-gap-detector/keyword-loader.d.ts +13 -0
- package/dist/engine/ac-gap-detector/keyword-loader.d.ts.map +1 -0
- package/dist/engine/ac-gap-detector/keyword-loader.js +35 -0
- package/dist/engine/ac-gap-detector/keyword-loader.js.map +1 -0
- package/dist/engine/challenge-scenarios-loader.d.ts +46 -0
- package/dist/engine/challenge-scenarios-loader.d.ts.map +1 -0
- package/dist/engine/challenge-scenarios-loader.js +83 -0
- package/dist/engine/challenge-scenarios-loader.js.map +1 -0
- package/dist/engine/code-quality-thresholds-loader.d.ts +27 -0
- package/dist/engine/code-quality-thresholds-loader.d.ts.map +1 -0
- package/dist/engine/code-quality-thresholds-loader.js +88 -0
- package/dist/engine/code-quality-thresholds-loader.js.map +1 -0
- package/dist/engine/compliance-injector.d.ts +46 -0
- package/dist/engine/compliance-injector.d.ts.map +1 -0
- package/dist/engine/compliance-injector.js +121 -0
- package/dist/engine/compliance-injector.js.map +1 -0
- package/dist/engine/dor-dod/dod.d.ts +3 -2
- package/dist/engine/dor-dod/dod.d.ts.map +1 -1
- package/dist/engine/dor-dod/dod.js +38 -73
- package/dist/engine/dor-dod/dod.js.map +1 -1
- package/dist/engine/dor-dod/dor.d.ts +3 -2
- package/dist/engine/dor-dod/dor.d.ts.map +1 -1
- package/dist/engine/dor-dod/dor.js +75 -125
- package/dist/engine/dor-dod/dor.js.map +1 -1
- package/dist/engine/dor-dod/items-loader.d.ts +18 -0
- package/dist/engine/dor-dod/items-loader.d.ts.map +1 -0
- package/dist/engine/dor-dod/items-loader.js +55 -0
- package/dist/engine/dor-dod/items-loader.js.map +1 -0
- package/dist/engine/elicitation/question-generator.d.ts.map +1 -1
- package/dist/engine/elicitation/question-generator.js +74 -63
- package/dist/engine/elicitation/question-generator.js.map +1 -1
- package/dist/engine/feasibility-rules-loader.d.ts +13 -0
- package/dist/engine/feasibility-rules-loader.d.ts.map +1 -0
- package/dist/engine/feasibility-rules-loader.js +39 -0
- package/dist/engine/feasibility-rules-loader.js.map +1 -0
- package/dist/engine/feasibility-validator.d.ts +1 -1
- package/dist/engine/feasibility-validator.d.ts.map +1 -1
- package/dist/engine/feasibility-validator.js +21 -78
- package/dist/engine/feasibility-validator.js.map +1 -1
- package/dist/engine/rbac/roles.d.ts +13 -5
- package/dist/engine/rbac/roles.d.ts.map +1 -1
- package/dist/engine/rbac/roles.js +58 -24
- package/dist/engine/rbac/roles.js.map +1 -1
- package/dist/engine/readiness-checker.d.ts +1 -1
- package/dist/engine/readiness-checker.d.ts.map +1 -1
- package/dist/engine/readiness-checker.js +10 -12
- package/dist/engine/readiness-checker.js.map +1 -1
- package/dist/engine/readiness-config-loader.d.ts +8 -0
- package/dist/engine/readiness-config-loader.d.ts.map +1 -0
- package/dist/engine/readiness-config-loader.js +58 -0
- package/dist/engine/readiness-config-loader.js.map +1 -0
- package/dist/engine/spec-types-loader.d.ts +22 -0
- package/dist/engine/spec-types-loader.d.ts.map +1 -0
- package/dist/engine/spec-types-loader.js +50 -0
- package/dist/engine/spec-types-loader.js.map +1 -0
- package/dist/engine/validator/analyzer.d.ts +1 -0
- package/dist/engine/validator/analyzer.d.ts.map +1 -1
- package/dist/engine/validator/analyzer.js +31 -8
- package/dist/engine/validator/analyzer.js.map +1 -1
- package/dist/types/common/primitives.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/plugin-configs.d.ts +105 -0
- package/dist/types/plugin-configs.d.ts.map +1 -0
- package/dist/types/plugin-configs.js +6 -0
- package/dist/types/plugin-configs.js.map +1 -0
- package/package.json +1 -1
- package/src/config/ac-gap-keywords.json +144 -0
- package/src/config/challenge-scenarios.json +114 -0
- package/src/config/code-quality-thresholds.json +114 -0
- package/src/config/compliance-frameworks.json +150 -0
- package/src/config/dor-dod-items.json +214 -0
- package/src/config/drift-severity.json +22 -0
- package/src/config/elicitation-questions.json +70 -0
- package/src/config/feasibility-rules.json +91 -0
- package/src/config/rbac-roles.json +27 -0
- package/src/config/readiness-config.json +18 -0
- package/src/config/spec-types.json +42 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "dor-1",
|
|
4
|
+
"kind": "dor",
|
|
5
|
+
"description": "Spec has a clear title and description",
|
|
6
|
+
"category": "spec",
|
|
7
|
+
"required": true,
|
|
8
|
+
"autoCheck": true,
|
|
9
|
+
"autoCheckField": "title",
|
|
10
|
+
"autoCheckCondition": "length>3"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "dor-2",
|
|
14
|
+
"kind": "dor",
|
|
15
|
+
"description": "Spec type and scope are defined",
|
|
16
|
+
"category": "spec",
|
|
17
|
+
"required": true,
|
|
18
|
+
"autoCheck": true,
|
|
19
|
+
"autoCheckField": "type+scope",
|
|
20
|
+
"autoCheckCondition": "bothNonEmpty"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "dor-3",
|
|
24
|
+
"kind": "dor",
|
|
25
|
+
"description": "Difficulty is assessed (1-5)",
|
|
26
|
+
"category": "spec",
|
|
27
|
+
"required": true,
|
|
28
|
+
"autoCheck": true,
|
|
29
|
+
"autoCheckField": "difficulty",
|
|
30
|
+
"autoCheckCondition": "between1and5"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "dor-4",
|
|
34
|
+
"kind": "dor",
|
|
35
|
+
"description": "Estimation is complete (dev hours > 0)",
|
|
36
|
+
"category": "spec",
|
|
37
|
+
"required": true,
|
|
38
|
+
"autoCheck": true,
|
|
39
|
+
"autoCheckField": "estimation.devHours",
|
|
40
|
+
"autoCheckCondition": "greaterThan0"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "dor-5",
|
|
44
|
+
"kind": "dor",
|
|
45
|
+
"description": "HU.md file exists and is complete",
|
|
46
|
+
"category": "spec",
|
|
47
|
+
"required": true,
|
|
48
|
+
"autoCheck": true,
|
|
49
|
+
"autoCheckField": "specPath",
|
|
50
|
+
"autoCheckCondition": "nonEmpty"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "dor-6",
|
|
54
|
+
"kind": "dor",
|
|
55
|
+
"description": "FICHA-TECNICA.md file exists and is complete",
|
|
56
|
+
"category": "design",
|
|
57
|
+
"required": true,
|
|
58
|
+
"autoCheck": true,
|
|
59
|
+
"autoCheckField": "technicalPath",
|
|
60
|
+
"autoCheckCondition": "nonEmpty"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "dor-7",
|
|
64
|
+
"kind": "dor",
|
|
65
|
+
"description": "No blocking dependencies (blockedBy is empty)",
|
|
66
|
+
"category": "dependencies",
|
|
67
|
+
"required": true,
|
|
68
|
+
"autoCheck": true,
|
|
69
|
+
"autoCheckField": "blockedBy",
|
|
70
|
+
"autoCheckCondition": "emptyArray"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "dor-8",
|
|
74
|
+
"kind": "dor",
|
|
75
|
+
"description": "Risk level is assessed",
|
|
76
|
+
"category": "technical",
|
|
77
|
+
"required": true,
|
|
78
|
+
"autoCheck": true,
|
|
79
|
+
"autoCheckField": "risk",
|
|
80
|
+
"autoCheckCondition": "nonEmpty"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "dor-9",
|
|
84
|
+
"kind": "dor",
|
|
85
|
+
"description": "Target is defined (frontend/backend/fullstack)",
|
|
86
|
+
"category": "technical",
|
|
87
|
+
"required": true,
|
|
88
|
+
"autoCheck": true,
|
|
89
|
+
"autoCheckField": "target",
|
|
90
|
+
"autoCheckCondition": "nonEmpty"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "dor-10",
|
|
94
|
+
"kind": "dor",
|
|
95
|
+
"description": "Spec is in approved status",
|
|
96
|
+
"category": "spec",
|
|
97
|
+
"required": true,
|
|
98
|
+
"autoCheck": true,
|
|
99
|
+
"autoCheckField": "status",
|
|
100
|
+
"autoCheckCondition": "approvedOrImplementing"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "dor-11",
|
|
104
|
+
"kind": "dor",
|
|
105
|
+
"description": "Git branch is configured for this spec",
|
|
106
|
+
"category": "technical",
|
|
107
|
+
"required": false,
|
|
108
|
+
"autoCheck": true,
|
|
109
|
+
"autoCheckField": "gitBranch",
|
|
110
|
+
"autoCheckCondition": "nonEmpty"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "dor-arch-1",
|
|
114
|
+
"kind": "dor",
|
|
115
|
+
"description": "Architecture diagram or ADR included for architectural scope",
|
|
116
|
+
"category": "design",
|
|
117
|
+
"required": false,
|
|
118
|
+
"autoCheck": false,
|
|
119
|
+
"autoCheckField": null,
|
|
120
|
+
"autoCheckCondition": null,
|
|
121
|
+
"scopeFilter": ["architectural", "cross-module"]
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "dor-type-1",
|
|
125
|
+
"kind": "dor",
|
|
126
|
+
"description": "Acceptance criteria reviewed and approved by team",
|
|
127
|
+
"category": "team",
|
|
128
|
+
"required": false,
|
|
129
|
+
"autoCheck": false,
|
|
130
|
+
"autoCheckField": null,
|
|
131
|
+
"autoCheckCondition": null,
|
|
132
|
+
"typeFilter": ["feature", "refactor"]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "dod-1",
|
|
136
|
+
"kind": "dod",
|
|
137
|
+
"description": "All acceptance criteria implemented",
|
|
138
|
+
"category": "code",
|
|
139
|
+
"required": true,
|
|
140
|
+
"autoCheck": false,
|
|
141
|
+
"autoCheckField": null,
|
|
142
|
+
"autoCheckCondition": null
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"id": "dod-2",
|
|
146
|
+
"kind": "dod",
|
|
147
|
+
"description": "No critical quality issues (validate score >= 80)",
|
|
148
|
+
"category": "quality",
|
|
149
|
+
"required": true,
|
|
150
|
+
"autoCheck": false,
|
|
151
|
+
"autoCheckField": null,
|
|
152
|
+
"autoCheckCondition": null
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "dod-3",
|
|
156
|
+
"kind": "dod",
|
|
157
|
+
"description": "Unit tests written and passing for new code",
|
|
158
|
+
"category": "tests",
|
|
159
|
+
"required": true,
|
|
160
|
+
"autoCheck": false,
|
|
161
|
+
"autoCheckField": null,
|
|
162
|
+
"autoCheckCondition": null
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "dod-4",
|
|
166
|
+
"kind": "dod",
|
|
167
|
+
"description": "No regressions in existing tests",
|
|
168
|
+
"category": "tests",
|
|
169
|
+
"required": true,
|
|
170
|
+
"autoCheck": false,
|
|
171
|
+
"autoCheckField": null,
|
|
172
|
+
"autoCheckCondition": null
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"id": "dod-5",
|
|
176
|
+
"kind": "dod",
|
|
177
|
+
"description": "Linting and formatting clean (zero errors, zero warnings)",
|
|
178
|
+
"category": "quality",
|
|
179
|
+
"required": true,
|
|
180
|
+
"autoCheck": false,
|
|
181
|
+
"autoCheckField": null,
|
|
182
|
+
"autoCheckCondition": null
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"id": "dod-6",
|
|
186
|
+
"kind": "dod",
|
|
187
|
+
"description": "Code reviewed and approved",
|
|
188
|
+
"category": "review",
|
|
189
|
+
"required": false,
|
|
190
|
+
"autoCheck": false,
|
|
191
|
+
"autoCheckField": null,
|
|
192
|
+
"autoCheckCondition": null
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"id": "dod-7",
|
|
196
|
+
"kind": "dod",
|
|
197
|
+
"description": "Documentation updated (HU.md, FICHA-TECNICA.md, PLAN.md)",
|
|
198
|
+
"category": "docs",
|
|
199
|
+
"required": false,
|
|
200
|
+
"autoCheck": false,
|
|
201
|
+
"autoCheckField": null,
|
|
202
|
+
"autoCheckCondition": null
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"id": "dod-8",
|
|
206
|
+
"kind": "dod",
|
|
207
|
+
"description": "Actuals recorded (hours, tokens, cost)",
|
|
208
|
+
"category": "review",
|
|
209
|
+
"required": true,
|
|
210
|
+
"autoCheck": true,
|
|
211
|
+
"autoCheckField": "actuals",
|
|
212
|
+
"autoCheckCondition": "notNull"
|
|
213
|
+
}
|
|
214
|
+
]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "critical",
|
|
4
|
+
"severity": "critical",
|
|
5
|
+
"keywords": ["security", "auth", "permission", "authentication", "authorization", "privilege"]
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"id": "high",
|
|
9
|
+
"severity": "high",
|
|
10
|
+
"keywords": ["error", "validation", "test", "exception", "failure", "required"]
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "medium",
|
|
14
|
+
"severity": "medium",
|
|
15
|
+
"keywords": ["performance", "cache", "optimize", "latency", "throughput", "timeout"]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "low",
|
|
19
|
+
"severity": "low",
|
|
20
|
+
"keywords": []
|
|
21
|
+
}
|
|
22
|
+
]
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "users",
|
|
4
|
+
"category": "users",
|
|
5
|
+
"questionTemplate": "Who are the primary users of \"{title}\"?",
|
|
6
|
+
"hint": "e.g., \"authenticated users\", \"admin only\", \"all visitors\"",
|
|
7
|
+
"required": true,
|
|
8
|
+
"answerType": "text",
|
|
9
|
+
"condition": "always"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "success",
|
|
13
|
+
"category": "success",
|
|
14
|
+
"questionTemplate": "How will you know when this feature is successfully implemented?",
|
|
15
|
+
"hint": "Describe the outcome from the user's perspective",
|
|
16
|
+
"required": true,
|
|
17
|
+
"answerType": "text",
|
|
18
|
+
"condition": "always"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "scope",
|
|
22
|
+
"category": "scope",
|
|
23
|
+
"questionTemplate": "What is the scope of this change?",
|
|
24
|
+
"required": true,
|
|
25
|
+
"answerType": "choice",
|
|
26
|
+
"choices": [
|
|
27
|
+
"Small change in one place",
|
|
28
|
+
"Medium feature across 2-3 areas",
|
|
29
|
+
"Large cross-module change",
|
|
30
|
+
"Major architectural change"
|
|
31
|
+
],
|
|
32
|
+
"condition": "always"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "edge_cases",
|
|
36
|
+
"category": "behavior",
|
|
37
|
+
"questionTemplate": "What should happen in error or edge cases?",
|
|
38
|
+
"hint": "e.g., \"show error message\", \"redirect to login\", \"fail silently\"",
|
|
39
|
+
"required": false,
|
|
40
|
+
"answerType": "text",
|
|
41
|
+
"condition": "always"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "data",
|
|
45
|
+
"category": "data",
|
|
46
|
+
"questionTemplate": "What data needs to be stored or retrieved for this feature?",
|
|
47
|
+
"hint": "List the key fields/entities involved",
|
|
48
|
+
"required": false,
|
|
49
|
+
"answerType": "text",
|
|
50
|
+
"condition": "data",
|
|
51
|
+
"conditionKeywords": ["data", "store"]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "api_contract",
|
|
55
|
+
"category": "constraints",
|
|
56
|
+
"questionTemplate": "Does this require a new API endpoint or changes to existing ones?",
|
|
57
|
+
"required": false,
|
|
58
|
+
"answerType": "yes-no",
|
|
59
|
+
"condition": "api",
|
|
60
|
+
"conditionKeywords": ["api", "endpoint"]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "performance",
|
|
64
|
+
"category": "constraints",
|
|
65
|
+
"questionTemplate": "Are there performance requirements (response time, load, etc.)?",
|
|
66
|
+
"required": false,
|
|
67
|
+
"answerType": "text",
|
|
68
|
+
"condition": "always"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "feature-keywords",
|
|
4
|
+
"category": "feature",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"quiero",
|
|
7
|
+
"debe",
|
|
8
|
+
"should",
|
|
9
|
+
"feature",
|
|
10
|
+
"screen",
|
|
11
|
+
"page",
|
|
12
|
+
"module",
|
|
13
|
+
"endpoint",
|
|
14
|
+
"flow",
|
|
15
|
+
"integration",
|
|
16
|
+
"dashboard",
|
|
17
|
+
"panel",
|
|
18
|
+
"view",
|
|
19
|
+
"form",
|
|
20
|
+
"report",
|
|
21
|
+
"notification",
|
|
22
|
+
"alert",
|
|
23
|
+
"widget"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "performance-keywords",
|
|
28
|
+
"category": "performance",
|
|
29
|
+
"keywords": [
|
|
30
|
+
"ultra-fast",
|
|
31
|
+
"ultra fast",
|
|
32
|
+
"< 100ms",
|
|
33
|
+
"<100ms",
|
|
34
|
+
"high performance",
|
|
35
|
+
"low latency",
|
|
36
|
+
"sub-second",
|
|
37
|
+
"instant",
|
|
38
|
+
"real-time response"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "security-keywords",
|
|
43
|
+
"category": "security",
|
|
44
|
+
"keywords": [
|
|
45
|
+
"encrypted",
|
|
46
|
+
"encryption",
|
|
47
|
+
"highly secure",
|
|
48
|
+
"compliance",
|
|
49
|
+
"hipaa",
|
|
50
|
+
"gdpr",
|
|
51
|
+
"pci",
|
|
52
|
+
"soc2",
|
|
53
|
+
"zero-trust",
|
|
54
|
+
"audit log",
|
|
55
|
+
"audit trail"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "cheap-keywords",
|
|
60
|
+
"category": "cheap",
|
|
61
|
+
"keywords": [
|
|
62
|
+
"cheap",
|
|
63
|
+
"zero cost",
|
|
64
|
+
"free",
|
|
65
|
+
"no cost",
|
|
66
|
+
"minimal cost",
|
|
67
|
+
"low cost",
|
|
68
|
+
"budget",
|
|
69
|
+
"affordable",
|
|
70
|
+
"open source only"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"id": "offline-keywords",
|
|
75
|
+
"category": "offline",
|
|
76
|
+
"keywords": ["offline", "offline mode", "no internet", "works offline"]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "realtime-keywords",
|
|
80
|
+
"category": "realtime",
|
|
81
|
+
"keywords": [
|
|
82
|
+
"real-time sync",
|
|
83
|
+
"realtime sync",
|
|
84
|
+
"live sync",
|
|
85
|
+
"instant sync",
|
|
86
|
+
"real-time updates",
|
|
87
|
+
"websocket sync",
|
|
88
|
+
"live updates"
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "Admin",
|
|
4
|
+
"description": "Full access to all operations: create, read, update, delete, approve, implement, configure.",
|
|
5
|
+
"permissions": ["create", "read", "update", "delete", "approve", "implement", "configure"]
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"id": "Architect",
|
|
9
|
+
"description": "Can create/approve specs and configure the project constitution.",
|
|
10
|
+
"permissions": ["create", "read", "update", "approve", "configure"]
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "Developer",
|
|
14
|
+
"description": "Can read specs and implement (update) them.",
|
|
15
|
+
"permissions": ["read", "update", "implement"]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "Reviewer",
|
|
19
|
+
"description": "Can read and approve/reject specs.",
|
|
20
|
+
"permissions": ["read", "approve"]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "Observer",
|
|
24
|
+
"description": "Read-only access to all specs and project data.",
|
|
25
|
+
"permissions": ["read"]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"vagueWords": [
|
|
3
|
+
{ "id": "fast", "word": "fast" },
|
|
4
|
+
{ "id": "easy", "word": "easy" },
|
|
5
|
+
{ "id": "good", "word": "good" },
|
|
6
|
+
{ "id": "nice", "word": "nice" },
|
|
7
|
+
{ "id": "quick", "word": "quick" },
|
|
8
|
+
{ "id": "better", "word": "better" },
|
|
9
|
+
{ "id": "simple", "word": "simple" },
|
|
10
|
+
{ "id": "clean", "word": "clean" }
|
|
11
|
+
],
|
|
12
|
+
"thresholds": {
|
|
13
|
+
"strictBlocker": 50,
|
|
14
|
+
"strictCaution": 70,
|
|
15
|
+
"lenientBlocker": 40,
|
|
16
|
+
"lenientCaution": 60
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "feature",
|
|
4
|
+
"label": "Feature",
|
|
5
|
+
"description": "New functionality or capability"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"id": "refactor",
|
|
9
|
+
"label": "Refactor",
|
|
10
|
+
"description": "Restructure existing code without changing behavior"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "bugfix",
|
|
14
|
+
"label": "Bug Fix",
|
|
15
|
+
"description": "Fix a defect or incorrect behavior"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "infra",
|
|
19
|
+
"label": "Infrastructure",
|
|
20
|
+
"description": "Infrastructure, CI/CD, build, deployment changes"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "docs",
|
|
24
|
+
"label": "Documentation",
|
|
25
|
+
"description": "Documentation-only changes"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "project",
|
|
29
|
+
"label": "Project",
|
|
30
|
+
"description": "Cross-cutting project-wide initiative"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "agent",
|
|
34
|
+
"label": "Agent",
|
|
35
|
+
"description": "AI agent or automation workflow"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "tech-debt",
|
|
39
|
+
"label": "Tech Debt",
|
|
40
|
+
"description": "Address accumulated technical debt"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/engine/ac-gap-detector/constants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/engine/ac-gap-detector/constants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,2FAA2F;AAC3F,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKxD,CAAC;AAmBF,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAkC,CAAC;AAExF,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAA4B,CAAC;AAE5E,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAA+B,CAAC;AAElF,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAAiC,CAAC;AAEtF,uEAAuE;AACvE,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAAmC,CAAC;AAE1F,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAAiC,CAAC;AAEtF,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAA8B,CAAC;AAE/E,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAA4B,CAAC;AAE5E,+EAA+E;AAC/E,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAA0B,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { loadKeywordGroups } from './keyword-loader.js';
|
|
1
2
|
/** Numeric weight per priority (higher = more important). Used for sorting and scoring. */
|
|
2
3
|
export const PRIORITY_ORDER = {
|
|
3
4
|
critical: 4,
|
|
@@ -5,139 +6,36 @@ export const PRIORITY_ORDER = {
|
|
|
5
6
|
medium: 2,
|
|
6
7
|
low: 1,
|
|
7
8
|
};
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Config-driven keyword sets (SPEC-211)
|
|
11
|
+
// Loaded once at module init from src/config/ac-gap-keywords.json
|
|
12
|
+
// Teams can override at data/global/ac-gap-keywords-custom.json
|
|
13
|
+
// or data/projects/{hash}/config/ac-gap-keywords-overrides.json
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
const _keywords = loadKeywordGroups();
|
|
16
|
+
function getKeywords(domain) {
|
|
17
|
+
const kws = _keywords.get(domain);
|
|
18
|
+
if (!kws) {
|
|
19
|
+
throw new Error(`AC gap keyword group not found for domain: "${domain}"`);
|
|
20
|
+
}
|
|
21
|
+
return kws;
|
|
22
|
+
}
|
|
8
23
|
/** Keywords that indicate an existing AC already covers error handling. */
|
|
9
|
-
export const ERROR_HANDLING_KEYWORDS =
|
|
10
|
-
'error',
|
|
11
|
-
'fail',
|
|
12
|
-
'invalid',
|
|
13
|
-
'exception',
|
|
14
|
-
'reject',
|
|
15
|
-
'4xx',
|
|
16
|
-
'5xx',
|
|
17
|
-
'not found',
|
|
18
|
-
'404',
|
|
19
|
-
'500',
|
|
20
|
-
'timeout',
|
|
21
|
-
'unavailable',
|
|
22
|
-
'catch',
|
|
23
|
-
'handling',
|
|
24
|
-
];
|
|
24
|
+
export const ERROR_HANDLING_KEYWORDS = getKeywords('error-handling');
|
|
25
25
|
/** Keywords that indicate existing ACs cover security concerns. */
|
|
26
|
-
export const SECURITY_KEYWORDS =
|
|
27
|
-
'auth',
|
|
28
|
-
'permission',
|
|
29
|
-
'role',
|
|
30
|
-
'unauthorized',
|
|
31
|
-
'forbidden',
|
|
32
|
-
'jwt',
|
|
33
|
-
'token',
|
|
34
|
-
'csrf',
|
|
35
|
-
'xss',
|
|
36
|
-
'inject',
|
|
37
|
-
'sanitize',
|
|
38
|
-
'rate limit',
|
|
39
|
-
'throttle',
|
|
40
|
-
'secure',
|
|
41
|
-
'encrypt',
|
|
42
|
-
'https',
|
|
43
|
-
];
|
|
26
|
+
export const SECURITY_KEYWORDS = getKeywords('security');
|
|
44
27
|
/** Keywords that indicate existing ACs cover performance concerns. */
|
|
45
|
-
export const PERFORMANCE_KEYWORDS =
|
|
46
|
-
'performance',
|
|
47
|
-
'latency',
|
|
48
|
-
'response time',
|
|
49
|
-
'load',
|
|
50
|
-
'concurrent',
|
|
51
|
-
'throughput',
|
|
52
|
-
'cache',
|
|
53
|
-
'slow',
|
|
54
|
-
'fast',
|
|
55
|
-
'benchmark',
|
|
56
|
-
'sla',
|
|
57
|
-
'p95',
|
|
58
|
-
'p99',
|
|
59
|
-
];
|
|
28
|
+
export const PERFORMANCE_KEYWORDS = getKeywords('performance');
|
|
60
29
|
/** Keywords that indicate existing ACs cover accessibility. */
|
|
61
|
-
export const ACCESSIBILITY_KEYWORDS =
|
|
62
|
-
'accessibility',
|
|
63
|
-
'a11y',
|
|
64
|
-
'wcag',
|
|
65
|
-
'aria',
|
|
66
|
-
'screen reader',
|
|
67
|
-
'keyboard',
|
|
68
|
-
'focus',
|
|
69
|
-
'contrast',
|
|
70
|
-
'alt text',
|
|
71
|
-
];
|
|
30
|
+
export const ACCESSIBILITY_KEYWORDS = getKeywords('accessibility');
|
|
72
31
|
/** Keywords that indicate existing ACs cover input/data validation. */
|
|
73
|
-
export const DATA_VALIDATION_KEYWORDS =
|
|
74
|
-
'validate',
|
|
75
|
-
'validation',
|
|
76
|
-
'required field',
|
|
77
|
-
'max length',
|
|
78
|
-
'min length',
|
|
79
|
-
'format',
|
|
80
|
-
'schema',
|
|
81
|
-
'constraint',
|
|
82
|
-
'sanitize',
|
|
83
|
-
'input',
|
|
84
|
-
'boundary',
|
|
85
|
-
];
|
|
32
|
+
export const DATA_VALIDATION_KEYWORDS = getKeywords('data-validation');
|
|
86
33
|
/** Keywords that indicate existing ACs cover observability. */
|
|
87
|
-
export const OBSERVABILITY_KEYWORDS =
|
|
88
|
-
'log',
|
|
89
|
-
'metric',
|
|
90
|
-
'trace',
|
|
91
|
-
'monitor',
|
|
92
|
-
'alert',
|
|
93
|
-
'audit',
|
|
94
|
-
'observability',
|
|
95
|
-
'telemetry',
|
|
96
|
-
'event',
|
|
97
|
-
];
|
|
34
|
+
export const OBSERVABILITY_KEYWORDS = getKeywords('observability');
|
|
98
35
|
/** Keywords that indicate existing ACs cover edge cases broadly. */
|
|
99
|
-
export const EDGE_CASE_KEYWORDS =
|
|
100
|
-
'edge',
|
|
101
|
-
'empty',
|
|
102
|
-
'null',
|
|
103
|
-
'boundary',
|
|
104
|
-
'concurrent',
|
|
105
|
-
'race condition',
|
|
106
|
-
'duplicate',
|
|
107
|
-
'overflow',
|
|
108
|
-
'underflow',
|
|
109
|
-
'missing',
|
|
110
|
-
'optional',
|
|
111
|
-
];
|
|
36
|
+
export const EDGE_CASE_KEYWORDS = getKeywords('edge-cases');
|
|
112
37
|
/** Keywords that indicate existing ACs cover rollback / undo. */
|
|
113
|
-
export const ROLLBACK_KEYWORDS =
|
|
114
|
-
'rollback',
|
|
115
|
-
'undo',
|
|
116
|
-
'revert',
|
|
117
|
-
'restore',
|
|
118
|
-
'migration',
|
|
119
|
-
'transaction',
|
|
120
|
-
'atomic',
|
|
121
|
-
'idempotent',
|
|
122
|
-
];
|
|
38
|
+
export const ROLLBACK_KEYWORDS = getKeywords('rollback');
|
|
123
39
|
/** Signal words that suggest this spec likely has UI / frontend components. */
|
|
124
|
-
export const WEB_UI_KEYWORDS =
|
|
125
|
-
'ui',
|
|
126
|
-
'frontend',
|
|
127
|
-
'form',
|
|
128
|
-
'page',
|
|
129
|
-
'view',
|
|
130
|
-
'component',
|
|
131
|
-
'modal',
|
|
132
|
-
'button',
|
|
133
|
-
'screen',
|
|
134
|
-
'layout',
|
|
135
|
-
'render',
|
|
136
|
-
'display',
|
|
137
|
-
'react',
|
|
138
|
-
'vue',
|
|
139
|
-
'angular',
|
|
140
|
-
'html',
|
|
141
|
-
'css',
|
|
142
|
-
];
|
|
40
|
+
export const WEB_UI_KEYWORDS = getKeywords('web-ui');
|
|
143
41
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/engine/ac-gap-detector/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/engine/ac-gap-detector/constants.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,cAAc,GAAkC;IAC3D,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,8EAA8E;AAC9E,wCAAwC;AACxC,kEAAkE;AAClE,gEAAgE;AAChE,kEAAkE;AAClE,8EAA8E;AAE9E,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;AAEtC,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,+CAA+C,MAAM,GAAG,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAsB,WAAW,CAAC,gBAAgB,CAAC,CAAC;AAExF,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAsB,WAAW,CAAC,UAAU,CAAC,CAAC;AAE5E,sEAAsE;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAsB,WAAW,CAAC,aAAa,CAAC,CAAC;AAElF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAsB,WAAW,CAAC,eAAe,CAAC,CAAC;AAEtF,uEAAuE;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAsB,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAE1F,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAsB,WAAW,CAAC,eAAe,CAAC,CAAC;AAEtF,oEAAoE;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAsB,WAAW,CAAC,YAAY,CAAC,CAAC;AAE/E,iEAAiE;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAsB,WAAW,CAAC,UAAU,CAAC,CAAC;AAE5E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAsB,WAAW,CAAC,QAAQ,CAAC,CAAC"}
|