@mytechtoday/augment-extensions 1.2.2 → 1.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/augment-extensions/visual-design/CHANGELOG.md +132 -0
- package/augment-extensions/visual-design/README.md +255 -0
- package/augment-extensions/visual-design/__tests__/README.md +119 -0
- package/augment-extensions/visual-design/__tests__/style-selector.test.ts +172 -0
- package/augment-extensions/visual-design/__tests__/vendor-styles.test.ts +214 -0
- package/augment-extensions/visual-design/domains/other/ai-prompt-helper.ts +157 -0
- package/augment-extensions/visual-design/domains/other/dotnet-application.ts +156 -0
- package/augment-extensions/visual-design/domains/other/linux-platform.ts +156 -0
- package/augment-extensions/visual-design/domains/other/mobile-application.ts +157 -0
- package/augment-extensions/visual-design/domains/other/motion-picture.ts +156 -0
- package/augment-extensions/visual-design/domains/other/os-application.ts +156 -0
- package/augment-extensions/visual-design/domains/other/print-campaigns.ts +158 -0
- package/augment-extensions/visual-design/domains/other/web-app.ts +157 -0
- package/augment-extensions/visual-design/domains/other/website.ts +161 -0
- package/augment-extensions/visual-design/domains/other/windows-platform.ts +156 -0
- package/augment-extensions/visual-design/domains/web-page-styles/amazon-cloudscape.ts +506 -0
- package/augment-extensions/visual-design/domains/web-page-styles/google-modern.ts +615 -0
- package/augment-extensions/visual-design/domains/web-page-styles/microsoft-fluent.ts +531 -0
- package/augment-extensions/visual-design/examples/README.md +97 -0
- package/augment-extensions/visual-design/examples/ai-prompt-generation.md +233 -0
- package/augment-extensions/visual-design/examples/basic-usage.md +216 -0
- package/augment-extensions/visual-design/examples/domain-workflows.md +257 -0
- package/augment-extensions/visual-design/examples/vendor-comparison.md +247 -0
- package/augment-extensions/visual-design/module.json +78 -0
- package/augment-extensions/visual-design/style-selector.ts +177 -0
- package/augment-extensions/visual-design/types.ts +302 -0
- package/augment-extensions/visual-design/visual-design-core.ts +469 -0
- package/augment-extensions/workflows/adr-support/README.md +227 -0
- package/augment-extensions/workflows/adr-support/__tests__/adr-validator.test.ts +203 -0
- package/augment-extensions/workflows/adr-support/adr-validator.ts +162 -0
- package/augment-extensions/workflows/adr-support/examples/complete-lifecycle-example.md +449 -0
- package/augment-extensions/workflows/adr-support/examples/integration-example.md +580 -0
- package/augment-extensions/workflows/adr-support/examples/superseding-example.md +436 -0
- package/augment-extensions/workflows/adr-support/module.json +112 -0
- package/augment-extensions/workflows/adr-support/rules/adr-creation.md +372 -0
- package/augment-extensions/workflows/adr-support/rules/beads-integration.md +443 -0
- package/augment-extensions/workflows/adr-support/rules/conflict-detection.md +486 -0
- package/augment-extensions/workflows/adr-support/rules/decision-detection.md +362 -0
- package/augment-extensions/workflows/adr-support/rules/lifecycle-management.md +427 -0
- package/augment-extensions/workflows/adr-support/rules/openspec-integration.md +465 -0
- package/augment-extensions/workflows/adr-support/rules/template-selection.md +405 -0
- package/augment-extensions/workflows/adr-support/rules/validation-rules.md +543 -0
- package/augment-extensions/workflows/adr-support/schemas/adr-config.json +191 -0
- package/augment-extensions/workflows/adr-support/schemas/adr-metadata.json +172 -0
- package/augment-extensions/workflows/adr-support/templates/business-case.md +235 -0
- package/augment-extensions/workflows/adr-support/templates/madr-elaborate.md +197 -0
- package/augment-extensions/workflows/adr-support/templates/madr-simple.md +68 -0
- package/augment-extensions/workflows/adr-support/templates/nygard.md +84 -0
- package/cli/dist/utils/__tests__/adr-validator.example.d.ts +6 -0
- package/cli/dist/utils/__tests__/adr-validator.example.d.ts.map +1 -0
- package/cli/dist/utils/__tests__/adr-validator.example.js +148 -0
- package/cli/dist/utils/__tests__/adr-validator.example.js.map +1 -0
- package/cli/dist/utils/adr-validator.d.ts +65 -0
- package/cli/dist/utils/adr-validator.d.ts.map +1 -0
- package/cli/dist/utils/adr-validator.js +203 -0
- package/cli/dist/utils/adr-validator.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ADR Validation Module
|
|
4
|
+
* Implements validation logic for Architecture Decision Records (ADRs)
|
|
5
|
+
* Based on augment-extensions/workflows/adr-support/rules/validation-rules.md
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.isValidISO8601 = isValidISO8601;
|
|
9
|
+
exports.validateMetadata = validateMetadata;
|
|
10
|
+
exports.validateOptionalFields = validateOptionalFields;
|
|
11
|
+
exports.validateFileName = validateFileName;
|
|
12
|
+
exports.validateADRReferences = validateADRReferences;
|
|
13
|
+
exports.validateContentQuality = validateContentQuality;
|
|
14
|
+
exports.validateContext = validateContext;
|
|
15
|
+
exports.validateADR = validateADR;
|
|
16
|
+
/**
|
|
17
|
+
* Validates ISO 8601 date format (YYYY-MM-DD)
|
|
18
|
+
*/
|
|
19
|
+
function isValidISO8601(date) {
|
|
20
|
+
const iso8601Pattern = /^\d{4}-\d{2}-\d{2}$/;
|
|
21
|
+
if (!iso8601Pattern.test(date)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const parsedDate = new Date(date);
|
|
25
|
+
return parsedDate instanceof Date && !isNaN(parsedDate.getTime());
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validates required metadata fields
|
|
29
|
+
* Level 1: Structural Validation (Required)
|
|
30
|
+
*/
|
|
31
|
+
function validateMetadata(adr) {
|
|
32
|
+
const errors = [];
|
|
33
|
+
// ID validation
|
|
34
|
+
if (!adr.id) {
|
|
35
|
+
errors.push("Missing required field: id");
|
|
36
|
+
}
|
|
37
|
+
else if (!/^adr-\d{4}$/.test(adr.id)) {
|
|
38
|
+
errors.push("Invalid ID format. Must be adr-NNNN (e.g., adr-0001)");
|
|
39
|
+
}
|
|
40
|
+
// Title validation
|
|
41
|
+
if (!adr.title) {
|
|
42
|
+
errors.push("Missing required field: title");
|
|
43
|
+
}
|
|
44
|
+
else if (adr.title.length < 10 || adr.title.length > 100) {
|
|
45
|
+
errors.push("Title must be 10-100 characters");
|
|
46
|
+
}
|
|
47
|
+
// Status validation
|
|
48
|
+
const validStatuses = ['draft', 'proposed', 'approved', 'implemented', 'maintained', 'superseded', 'sunset'];
|
|
49
|
+
if (!adr.status) {
|
|
50
|
+
errors.push("Missing required field: status");
|
|
51
|
+
}
|
|
52
|
+
else if (!validStatuses.includes(adr.status)) {
|
|
53
|
+
errors.push(`Invalid status. Must be one of: ${validStatuses.join(', ')}`);
|
|
54
|
+
}
|
|
55
|
+
// Date validation
|
|
56
|
+
if (!adr.date) {
|
|
57
|
+
errors.push("Missing required field: date");
|
|
58
|
+
}
|
|
59
|
+
else if (!isValidISO8601(adr.date)) {
|
|
60
|
+
errors.push("Invalid date format. Must be ISO 8601 (YYYY-MM-DD)");
|
|
61
|
+
}
|
|
62
|
+
// Deciders validation
|
|
63
|
+
if (!adr.deciders || adr.deciders.length === 0) {
|
|
64
|
+
errors.push("At least one decider must be specified");
|
|
65
|
+
}
|
|
66
|
+
return { valid: errors.length === 0, errors };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validates optional metadata fields
|
|
70
|
+
* Level 2: Content Validation (Warning)
|
|
71
|
+
*/
|
|
72
|
+
function validateOptionalFields(adr) {
|
|
73
|
+
const warnings = [];
|
|
74
|
+
// Tags validation
|
|
75
|
+
if (adr.tags && !Array.isArray(adr.tags)) {
|
|
76
|
+
warnings.push("Tags must be an array");
|
|
77
|
+
}
|
|
78
|
+
// Supersedes validation
|
|
79
|
+
if (adr.supersedes) {
|
|
80
|
+
if (!Array.isArray(adr.supersedes)) {
|
|
81
|
+
warnings.push("Supersedes must be an array");
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
adr.supersedes.forEach(id => {
|
|
85
|
+
if (!/^adr-\d{4}$/.test(id)) {
|
|
86
|
+
warnings.push(`Invalid ADR ID in supersedes: ${id}`);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Superseded_by validation
|
|
92
|
+
if (adr.superseded_by && !/^adr-\d{4}$/.test(adr.superseded_by)) {
|
|
93
|
+
warnings.push(`Invalid ADR ID in superseded_by: ${adr.superseded_by}`);
|
|
94
|
+
}
|
|
95
|
+
return { valid: warnings.length === 0, warnings };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Validates file naming convention
|
|
99
|
+
* Format: adr/NNNN-brief-title.md
|
|
100
|
+
*/
|
|
101
|
+
function validateFileName(filePath) {
|
|
102
|
+
const errors = [];
|
|
103
|
+
const pattern = /^adr\/\d{4}-[a-z0-9-]+\.md$/;
|
|
104
|
+
if (!pattern.test(filePath)) {
|
|
105
|
+
errors.push("Invalid file name. Must be adr/NNNN-brief-title.md");
|
|
106
|
+
}
|
|
107
|
+
return { valid: errors.length === 0, errors };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Validates ADR references
|
|
111
|
+
* Level 3: Reference Validation (Warning)
|
|
112
|
+
*/
|
|
113
|
+
function validateADRReferences(adr, allADRs) {
|
|
114
|
+
const warnings = [];
|
|
115
|
+
const adrIds = new Set(allADRs.map(a => a.id));
|
|
116
|
+
// Validate supersedes references
|
|
117
|
+
if (adr.supersedes) {
|
|
118
|
+
adr.supersedes.forEach(id => {
|
|
119
|
+
if (!adrIds.has(id)) {
|
|
120
|
+
warnings.push(`Referenced ADR does not exist: ${id}`);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// Validate superseded_by reference
|
|
125
|
+
if (adr.superseded_by && !adrIds.has(adr.superseded_by)) {
|
|
126
|
+
warnings.push(`Referenced ADR does not exist: ${adr.superseded_by}`);
|
|
127
|
+
}
|
|
128
|
+
// Validate related_decisions
|
|
129
|
+
if (adr.related_decisions) {
|
|
130
|
+
adr.related_decisions.forEach(id => {
|
|
131
|
+
if (!adrIds.has(id)) {
|
|
132
|
+
warnings.push(`Related ADR does not exist: ${id}`);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return { valid: warnings.length === 0, warnings };
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Validates content quality
|
|
140
|
+
* Checks for placeholder text and minimum content length
|
|
141
|
+
*/
|
|
142
|
+
function validateContentQuality(content) {
|
|
143
|
+
const warnings = [];
|
|
144
|
+
// Check for placeholder text
|
|
145
|
+
const placeholders = ['TODO', 'TBD', 'FIXME', 'XXX', '[Insert', 'Lorem ipsum'];
|
|
146
|
+
placeholders.forEach(placeholder => {
|
|
147
|
+
if (content.includes(placeholder)) {
|
|
148
|
+
warnings.push(`Contains placeholder text: ${placeholder}`);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
return { valid: warnings.length === 0, warnings };
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Validates context section content
|
|
155
|
+
* Ensures context explains "why" not "how"
|
|
156
|
+
*/
|
|
157
|
+
function validateContext(context) {
|
|
158
|
+
const warnings = [];
|
|
159
|
+
// Should contain problem statement
|
|
160
|
+
const problemIndicators = ['problem', 'issue', 'challenge', 'need', 'requirement'];
|
|
161
|
+
const hasProblem = problemIndicators.some(word => context.toLowerCase().includes(word));
|
|
162
|
+
if (!hasProblem) {
|
|
163
|
+
warnings.push("Context should clearly state the problem or need");
|
|
164
|
+
}
|
|
165
|
+
// Should not be too implementation-focused
|
|
166
|
+
const implDetails = ['function', 'class', 'variable', 'line', 'file'];
|
|
167
|
+
const tooDetailed = implDetails.filter(word => context.toLowerCase().includes(word)).length > 2;
|
|
168
|
+
if (tooDetailed) {
|
|
169
|
+
warnings.push("Context contains too many implementation details. Focus on 'why' not 'how'");
|
|
170
|
+
}
|
|
171
|
+
return { valid: warnings.length === 0, warnings };
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Comprehensive ADR validation
|
|
175
|
+
* Runs all validation checks and aggregates results
|
|
176
|
+
*/
|
|
177
|
+
function validateADR(adr, allADRs = []) {
|
|
178
|
+
const errors = [];
|
|
179
|
+
const warnings = [];
|
|
180
|
+
// Level 1: Structural validation (required)
|
|
181
|
+
const metadataResult = validateMetadata(adr);
|
|
182
|
+
if (metadataResult.errors) {
|
|
183
|
+
errors.push(...metadataResult.errors);
|
|
184
|
+
}
|
|
185
|
+
// Level 2: Content validation (warnings)
|
|
186
|
+
const optionalResult = validateOptionalFields(adr);
|
|
187
|
+
if (optionalResult.warnings) {
|
|
188
|
+
warnings.push(...optionalResult.warnings);
|
|
189
|
+
}
|
|
190
|
+
// Level 3: Reference validation (warnings)
|
|
191
|
+
if (allADRs.length > 0) {
|
|
192
|
+
const refResult = validateADRReferences(adr, allADRs);
|
|
193
|
+
if (refResult.warnings) {
|
|
194
|
+
warnings.push(...refResult.warnings);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
valid: errors.length === 0,
|
|
199
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
200
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=adr-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adr-validator.js","sourceRoot":"","sources":["../../src/utils/adr-validator.ts"],"names":[],"mappings":"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"}
|