@rasensio/aidlc 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +251 -0
- package/capabilities/claude-code.yaml +9 -0
- package/capabilities/codex.yaml +8 -0
- package/capabilities/cursor.yaml +8 -0
- package/capabilities/kiro.yaml +9 -0
- package/capabilities/windsurf.yaml +8 -0
- package/ci/aidlc-gate.yml +100 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +39 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add-action.d.ts +83 -0
- package/dist/commands/add-action.d.ts.map +1 -0
- package/dist/commands/add-action.js +437 -0
- package/dist/commands/add-action.js.map +1 -0
- package/dist/commands/continue.d.ts +23 -0
- package/dist/commands/continue.d.ts.map +1 -0
- package/dist/commands/continue.js +238 -0
- package/dist/commands/continue.js.map +1 -0
- package/dist/commands/discover.d.ts +19 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +85 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/docs.d.ts +25 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +282 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/gate.d.ts +25 -0
- package/dist/commands/gate.d.ts.map +1 -0
- package/dist/commands/gate.js +168 -0
- package/dist/commands/gate.js.map +1 -0
- package/dist/commands/init.d.ts +24 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +187 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/review.d.ts +60 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +264 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/setup.d.ts +24 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +206 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +27 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +243 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +25 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +263 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/transition.d.ts +30 -0
- package/dist/commands/transition.d.ts.map +1 -0
- package/dist/commands/transition.js +353 -0
- package/dist/commands/transition.js.map +1 -0
- package/dist/compile/adapters/claude-code.d.ts +24 -0
- package/dist/compile/adapters/claude-code.d.ts.map +1 -0
- package/dist/compile/adapters/claude-code.js +271 -0
- package/dist/compile/adapters/claude-code.js.map +1 -0
- package/dist/compile/adapters/codex.d.ts +19 -0
- package/dist/compile/adapters/codex.d.ts.map +1 -0
- package/dist/compile/adapters/codex.js +157 -0
- package/dist/compile/adapters/codex.js.map +1 -0
- package/dist/compile/adapters/cursor.d.ts +21 -0
- package/dist/compile/adapters/cursor.d.ts.map +1 -0
- package/dist/compile/adapters/cursor.js +181 -0
- package/dist/compile/adapters/cursor.js.map +1 -0
- package/dist/compile/adapters/index.d.ts +16 -0
- package/dist/compile/adapters/index.d.ts.map +1 -0
- package/dist/compile/adapters/index.js +26 -0
- package/dist/compile/adapters/index.js.map +1 -0
- package/dist/compile/adapters/kiro.d.ts +24 -0
- package/dist/compile/adapters/kiro.d.ts.map +1 -0
- package/dist/compile/adapters/kiro.js +222 -0
- package/dist/compile/adapters/kiro.js.map +1 -0
- package/dist/compile/adapters/windsurf.d.ts +25 -0
- package/dist/compile/adapters/windsurf.d.ts.map +1 -0
- package/dist/compile/adapters/windsurf.js +242 -0
- package/dist/compile/adapters/windsurf.js.map +1 -0
- package/dist/compile/install-plan.d.ts +49 -0
- package/dist/compile/install-plan.d.ts.map +1 -0
- package/dist/compile/install-plan.js +112 -0
- package/dist/compile/install-plan.js.map +1 -0
- package/dist/compile/loaders.d.ts +81 -0
- package/dist/compile/loaders.d.ts.map +1 -0
- package/dist/compile/loaders.js +293 -0
- package/dist/compile/loaders.js.map +1 -0
- package/dist/compile/merger.d.ts +32 -0
- package/dist/compile/merger.d.ts.map +1 -0
- package/dist/compile/merger.js +60 -0
- package/dist/compile/merger.js.map +1 -0
- package/dist/core/gate.d.ts +36 -0
- package/dist/core/gate.d.ts.map +1 -0
- package/dist/core/gate.js +97 -0
- package/dist/core/gate.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lifecycle.d.ts +89 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +356 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/template-resolver.d.ts +56 -0
- package/dist/core/template-resolver.d.ts.map +1 -0
- package/dist/core/template-resolver.js +261 -0
- package/dist/core/template-resolver.js.map +1 -0
- package/dist/core/types.d.ts +527 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -0
- package/dist/discover/scanner.d.ts +58 -0
- package/dist/discover/scanner.d.ts.map +1 -0
- package/dist/discover/scanner.js +772 -0
- package/dist/discover/scanner.js.map +1 -0
- package/dist/events/event-bus.d.ts +53 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +263 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/events/plugin-hooks.d.ts +44 -0
- package/dist/events/plugin-hooks.d.ts.map +1 -0
- package/dist/events/plugin-hooks.js +225 -0
- package/dist/events/plugin-hooks.js.map +1 -0
- package/dist/orchestrator/budget-packer.d.ts +57 -0
- package/dist/orchestrator/budget-packer.d.ts.map +1 -0
- package/dist/orchestrator/budget-packer.js +70 -0
- package/dist/orchestrator/budget-packer.js.map +1 -0
- package/dist/orchestrator/config.d.ts +43 -0
- package/dist/orchestrator/config.d.ts.map +1 -0
- package/dist/orchestrator/config.js +109 -0
- package/dist/orchestrator/config.js.map +1 -0
- package/dist/orchestrator/endpoint-clients.d.ts +23 -0
- package/dist/orchestrator/endpoint-clients.d.ts.map +1 -0
- package/dist/orchestrator/endpoint-clients.js +129 -0
- package/dist/orchestrator/endpoint-clients.js.map +1 -0
- package/dist/orchestrator/orchestrator-loop.d.ts +93 -0
- package/dist/orchestrator/orchestrator-loop.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator-loop.js +185 -0
- package/dist/orchestrator/orchestrator-loop.js.map +1 -0
- package/dist/security/confirmation.d.ts +90 -0
- package/dist/security/confirmation.d.ts.map +1 -0
- package/dist/security/confirmation.js +140 -0
- package/dist/security/confirmation.js.map +1 -0
- package/dist/setup/setup-compute.d.ts +54 -0
- package/dist/setup/setup-compute.d.ts.map +1 -0
- package/dist/setup/setup-compute.js +66 -0
- package/dist/setup/setup-compute.js.map +1 -0
- package/dist/state/snapshot-store.d.ts +79 -0
- package/dist/state/snapshot-store.d.ts.map +1 -0
- package/dist/state/snapshot-store.js +164 -0
- package/dist/state/snapshot-store.js.map +1 -0
- package/dist/state/state-recovery.d.ts +87 -0
- package/dist/state/state-recovery.d.ts.map +1 -0
- package/dist/state/state-recovery.js +274 -0
- package/dist/state/state-recovery.js.map +1 -0
- package/dist/state/transition-log.d.ts +40 -0
- package/dist/state/transition-log.d.ts.map +1 -0
- package/dist/state/transition-log.js +83 -0
- package/dist/state/transition-log.js.map +1 -0
- package/dist/state/yaml-helpers.d.ts +53 -0
- package/dist/state/yaml-helpers.d.ts.map +1 -0
- package/dist/state/yaml-helpers.js +110 -0
- package/dist/state/yaml-helpers.js.map +1 -0
- package/examples/.gitkeep +0 -0
- package/guidance/accessibility.md +67 -0
- package/guidance/api-conventions.md +124 -0
- package/guidance/index.yaml +7 -0
- package/guidance/secure-defaults.md +71 -0
- package/package.json +52 -0
- package/phases/.gitkeep +0 -0
- package/skills/00-overview.md +74 -0
- package/skills/10-ideation.md +45 -0
- package/skills/20-requirements.md +54 -0
- package/skills/30-design.md +57 -0
- package/skills/40-implementation.md +64 -0
- package/skills/50-testing.md +60 -0
- package/skills/60-deployment.md +63 -0
- package/skills/70-maintenance.md +56 -0
- package/skills/80-review.md +85 -0
- package/skills/81-continue.md +57 -0
- package/skills/82-add-action.md +71 -0
- package/templates/.gitkeep +0 -0
- package/templates/bugfix.yaml +14 -0
- package/templates/full-feature.yaml +44 -0
- package/templates/micro-task.yaml +11 -0
- package/templates/quick-feature.yaml +20 -0
- package/templates/spike.yaml +15 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML load/save helpers with deterministic serialization and schema validation.
|
|
3
|
+
*
|
|
4
|
+
* - `loadYaml<T>()` loads and optionally validates a YAML file.
|
|
5
|
+
* - `saveYaml()` serializes data deterministically (stable key order, block style)
|
|
6
|
+
* so that single-field changes produce minimal git diffs (≤ 3 lines).
|
|
7
|
+
*
|
|
8
|
+
* Requirements: 4.2 (minimal diffs), 4.7 (validation errors name the file).
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* A lightweight schema validator function.
|
|
12
|
+
* Returns null/undefined when valid, or an error message string on failure.
|
|
13
|
+
*/
|
|
14
|
+
export type SchemaValidator<T = unknown> = (data: unknown) => string | null | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Error thrown when YAML loading or validation fails.
|
|
17
|
+
* Always includes the file path and a description of the failure.
|
|
18
|
+
*/
|
|
19
|
+
export declare class YamlLoadError extends Error {
|
|
20
|
+
readonly filePath: string;
|
|
21
|
+
readonly reason: string;
|
|
22
|
+
constructor(filePath: string, reason: string);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Load a YAML file, parse it, and optionally validate the result.
|
|
26
|
+
*
|
|
27
|
+
* @param filePath - Absolute or relative path to the YAML file.
|
|
28
|
+
* @param validate - Optional validator; receives parsed data, returns error string on failure.
|
|
29
|
+
* @returns The parsed (and validated) data cast to `T`.
|
|
30
|
+
* @throws {YamlLoadError} If the file is missing, unparseable, or fails validation.
|
|
31
|
+
*/
|
|
32
|
+
export declare function loadYaml<T = unknown>(filePath: string, validate?: SchemaValidator<T>): T;
|
|
33
|
+
/**
|
|
34
|
+
* Serialize `data` to YAML with deterministic output and write it to `filePath`.
|
|
35
|
+
*
|
|
36
|
+
* Deterministic properties:
|
|
37
|
+
* - Stable key order (sorted alphabetically).
|
|
38
|
+
* - Block style for readability.
|
|
39
|
+
* - No line wrapping — one scalar per line.
|
|
40
|
+
* - Repeated calls with the same data produce byte-identical output.
|
|
41
|
+
*
|
|
42
|
+
* Creates parent directories if they don't exist.
|
|
43
|
+
*
|
|
44
|
+
* @param filePath - Absolute or relative path for the output file.
|
|
45
|
+
* @param data - The data to serialize.
|
|
46
|
+
*/
|
|
47
|
+
export declare function saveYaml(filePath: string, data: unknown): void;
|
|
48
|
+
/**
|
|
49
|
+
* Serialize data to a YAML string with deterministic formatting.
|
|
50
|
+
* Exported for testing without filesystem side effects.
|
|
51
|
+
*/
|
|
52
|
+
export declare function serializeYaml(data: unknown): string;
|
|
53
|
+
//# sourceMappingURL=yaml-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-helpers.d.ts","sourceRoot":"","sources":["../../src/state/yaml-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAMxF;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAEpB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,MAAM;gBADd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM;CAKjC;AAMD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CA2BxF;AAoBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAI9D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML load/save helpers with deterministic serialization and schema validation.
|
|
3
|
+
*
|
|
4
|
+
* - `loadYaml<T>()` loads and optionally validates a YAML file.
|
|
5
|
+
* - `saveYaml()` serializes data deterministically (stable key order, block style)
|
|
6
|
+
* so that single-field changes produce minimal git diffs (≤ 3 lines).
|
|
7
|
+
*
|
|
8
|
+
* Requirements: 4.2 (minimal diffs), 4.7 (validation errors name the file).
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
11
|
+
import { dirname } from 'node:path';
|
|
12
|
+
import { stringify, parse } from 'yaml';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Errors
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown when YAML loading or validation fails.
|
|
18
|
+
* Always includes the file path and a description of the failure.
|
|
19
|
+
*/
|
|
20
|
+
export class YamlLoadError extends Error {
|
|
21
|
+
filePath;
|
|
22
|
+
reason;
|
|
23
|
+
constructor(filePath, reason) {
|
|
24
|
+
super(`${filePath}: ${reason}`);
|
|
25
|
+
this.filePath = filePath;
|
|
26
|
+
this.reason = reason;
|
|
27
|
+
this.name = 'YamlLoadError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// loadYaml
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
/**
|
|
34
|
+
* Load a YAML file, parse it, and optionally validate the result.
|
|
35
|
+
*
|
|
36
|
+
* @param filePath - Absolute or relative path to the YAML file.
|
|
37
|
+
* @param validate - Optional validator; receives parsed data, returns error string on failure.
|
|
38
|
+
* @returns The parsed (and validated) data cast to `T`.
|
|
39
|
+
* @throws {YamlLoadError} If the file is missing, unparseable, or fails validation.
|
|
40
|
+
*/
|
|
41
|
+
export function loadYaml(filePath, validate) {
|
|
42
|
+
let raw;
|
|
43
|
+
try {
|
|
44
|
+
raw = readFileSync(filePath, 'utf8');
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const code = err.code;
|
|
48
|
+
if (code === 'ENOENT') {
|
|
49
|
+
throw new YamlLoadError(filePath, 'file not found');
|
|
50
|
+
}
|
|
51
|
+
throw new YamlLoadError(filePath, `unable to read file: ${err.message}`);
|
|
52
|
+
}
|
|
53
|
+
let data;
|
|
54
|
+
try {
|
|
55
|
+
data = parse(raw);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
throw new YamlLoadError(filePath, `YAML parse error: ${err.message}`);
|
|
59
|
+
}
|
|
60
|
+
if (validate) {
|
|
61
|
+
const error = validate(data);
|
|
62
|
+
if (error) {
|
|
63
|
+
throw new YamlLoadError(filePath, `validation failed: ${error}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return data;
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// saveYaml
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
/**
|
|
72
|
+
* YAML serialization options tuned for deterministic, git-friendly output.
|
|
73
|
+
*
|
|
74
|
+
* - `sortMapEntries`: alphabetical key ordering for stable output.
|
|
75
|
+
* - `blockQuote: 'literal'`: multiline strings use `|` (block literal).
|
|
76
|
+
* - `lineWidth: 0`: disable line wrapping so scalars stay on one line.
|
|
77
|
+
* - `defaultKeyType: 'PLAIN'` and `defaultStringType: 'PLAIN'` keep output readable.
|
|
78
|
+
*/
|
|
79
|
+
const SERIALIZE_OPTIONS = {
|
|
80
|
+
sortMapEntries: true,
|
|
81
|
+
blockQuote: 'literal',
|
|
82
|
+
lineWidth: 0,
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Serialize `data` to YAML with deterministic output and write it to `filePath`.
|
|
86
|
+
*
|
|
87
|
+
* Deterministic properties:
|
|
88
|
+
* - Stable key order (sorted alphabetically).
|
|
89
|
+
* - Block style for readability.
|
|
90
|
+
* - No line wrapping — one scalar per line.
|
|
91
|
+
* - Repeated calls with the same data produce byte-identical output.
|
|
92
|
+
*
|
|
93
|
+
* Creates parent directories if they don't exist.
|
|
94
|
+
*
|
|
95
|
+
* @param filePath - Absolute or relative path for the output file.
|
|
96
|
+
* @param data - The data to serialize.
|
|
97
|
+
*/
|
|
98
|
+
export function saveYaml(filePath, data) {
|
|
99
|
+
const content = serializeYaml(data);
|
|
100
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
101
|
+
writeFileSync(filePath, content, 'utf8');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Serialize data to a YAML string with deterministic formatting.
|
|
105
|
+
* Exported for testing without filesystem side effects.
|
|
106
|
+
*/
|
|
107
|
+
export function serializeYaml(data) {
|
|
108
|
+
return stringify(data, SERIALIZE_OPTIONS);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=yaml-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-helpers.js","sourceRoot":"","sources":["../../src/state/yaml-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAYxC,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAEpB;IACA;IAFlB,YACkB,QAAgB,EAChB,MAAc;QAE9B,KAAK,CAAC,GAAG,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;QAHhB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QAG9B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAc,QAAgB,EAAE,QAA6B;IACnF,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,QAAQ,EAAE,wBAAyB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,IAAI,aAAa,CAAC,QAAQ,EAAE,qBAAsB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAS,CAAC,CAAC;QAClC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,aAAa,CAAC,QAAQ,EAAE,sBAAsB,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,IAAS,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG;IACxB,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,SAAkB;IAC9B,SAAS,EAAE,CAAC;CACb,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,IAAa;IACtD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC5C,CAAC"}
|
|
File without changes
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: accessibility
|
|
3
|
+
description: Web accessibility guidelines and inclusive design
|
|
4
|
+
---
|
|
5
|
+
# Accessibility
|
|
6
|
+
|
|
7
|
+
Follow these accessibility rules when building user interfaces. All interactive content must be usable by people with diverse abilities, including those using assistive technologies.
|
|
8
|
+
|
|
9
|
+
## Semantic HTML
|
|
10
|
+
|
|
11
|
+
- Use semantic elements (`<nav>`, `<main>`, `<article>`, `<section>`, `<header>`, `<footer>`) for page structure.
|
|
12
|
+
- Use heading elements (`<h1>`–`<h6>`) in logical hierarchy; never skip levels for styling.
|
|
13
|
+
- Use `<button>` for actions and `<a>` for navigation; never use `<div>` or `<span>` as interactive elements without proper roles.
|
|
14
|
+
- Use `<label>` elements explicitly associated with form inputs via `for`/`id` pairing.
|
|
15
|
+
- Use lists (`<ul>`, `<ol>`, `<dl>`) for grouped items rather than styled `<div>` sequences.
|
|
16
|
+
|
|
17
|
+
## ARIA Usage
|
|
18
|
+
|
|
19
|
+
- Prefer native HTML semantics over ARIA; add ARIA only when no native element provides the required semantics.
|
|
20
|
+
- Use `aria-label` or `aria-labelledby` for interactive elements that lack visible text labels.
|
|
21
|
+
- Set `aria-expanded`, `aria-selected`, `aria-checked` states dynamically to reflect current UI state.
|
|
22
|
+
- Apply `role="alert"` or `aria-live="polite"` for dynamic content that must be announced to screen readers.
|
|
23
|
+
- Never use `aria-hidden="true"` on focusable elements.
|
|
24
|
+
|
|
25
|
+
## Keyboard Navigation
|
|
26
|
+
|
|
27
|
+
- All interactive elements must be reachable and operable via keyboard alone (Tab, Shift+Tab, Enter, Space, Arrow keys).
|
|
28
|
+
- Maintain a logical tab order that follows the visual reading flow; avoid positive `tabindex` values.
|
|
29
|
+
- Provide visible focus indicators on all focusable elements; never remove outline without a visible replacement.
|
|
30
|
+
- Implement keyboard shortcuts for complex widgets (modals, dropdowns, tabs) per WAI-ARIA Authoring Practices.
|
|
31
|
+
- Trap focus inside modal dialogs until dismissed; restore focus to the triggering element on close.
|
|
32
|
+
|
|
33
|
+
## Color and Contrast
|
|
34
|
+
|
|
35
|
+
- Maintain a minimum contrast ratio of 4.5:1 for normal text and 3:1 for large text (WCAG AA).
|
|
36
|
+
- Never use color as the sole means of conveying information; pair color with text, icons, or patterns.
|
|
37
|
+
- Verify contrast in both light and dark modes if the application supports theme switching.
|
|
38
|
+
- Ensure focus indicators have at least 3:1 contrast against adjacent colors.
|
|
39
|
+
|
|
40
|
+
## Images and Media
|
|
41
|
+
|
|
42
|
+
- Provide meaningful `alt` text for informative images; use `alt=""` for decorative images.
|
|
43
|
+
- Provide captions or transcripts for video and audio content.
|
|
44
|
+
- Avoid auto-playing media; if unavoidable, provide an immediate mechanism to pause or stop.
|
|
45
|
+
- Ensure animated content can be paused and does not flash more than 3 times per second.
|
|
46
|
+
|
|
47
|
+
## Forms and Errors
|
|
48
|
+
|
|
49
|
+
- Associate error messages with their input fields using `aria-describedby` or `aria-errormessage`.
|
|
50
|
+
- Display error summaries at the top of forms with links to the offending fields.
|
|
51
|
+
- Do not rely solely on placeholder text as a label; placeholders disappear on input.
|
|
52
|
+
- Group related form controls with `<fieldset>` and `<legend>`.
|
|
53
|
+
- Provide clear instructions before the form and inline help where input format is constrained.
|
|
54
|
+
|
|
55
|
+
## Responsive and Adaptive Design
|
|
56
|
+
|
|
57
|
+
- Support zoom up to 200% without loss of content or functionality.
|
|
58
|
+
- Use relative units (rem, em, %) for text and spacing rather than fixed pixels.
|
|
59
|
+
- Ensure touch targets are at least 44x44 CSS pixels for mobile interfaces.
|
|
60
|
+
- Test layouts with different text sizes, languages, and reading directions (LTR/RTL).
|
|
61
|
+
|
|
62
|
+
## Testing and Verification
|
|
63
|
+
|
|
64
|
+
- Run automated accessibility scans (axe-core, Lighthouse) in CI and fix all critical/serious issues.
|
|
65
|
+
- Test with at least one screen reader (VoiceOver, NVDA, or JAWS) for major user flows.
|
|
66
|
+
- Validate keyboard-only navigation for all primary workflows.
|
|
67
|
+
- Note: full WCAG conformance requires manual testing with assistive technologies and expert review.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-conventions
|
|
3
|
+
description: REST API naming, error format, and versioning conventions
|
|
4
|
+
---
|
|
5
|
+
# API Conventions
|
|
6
|
+
|
|
7
|
+
Follow these conventions when designing, implementing, or reviewing REST APIs. Consistency across endpoints reduces integration friction and simplifies documentation.
|
|
8
|
+
|
|
9
|
+
## URL Structure and Naming
|
|
10
|
+
|
|
11
|
+
- Use lowercase, hyphen-separated path segments: `/user-profiles`, not `/userProfiles` or `/user_profiles`.
|
|
12
|
+
- Use plural nouns for resource collections: `/orders`, `/products`, `/users`.
|
|
13
|
+
- Use resource identifiers as path segments: `/users/{userId}/orders/{orderId}`.
|
|
14
|
+
- Limit nesting to two levels; deeper relationships should use query parameters or links.
|
|
15
|
+
- Use query parameters for filtering, sorting, and pagination: `?status=active&sort=-created_at&page=2`.
|
|
16
|
+
- Avoid verbs in URLs; let HTTP methods convey the action.
|
|
17
|
+
|
|
18
|
+
## HTTP Methods
|
|
19
|
+
|
|
20
|
+
- `GET` — Retrieve a resource or collection. Must be safe and idempotent. Never mutate state.
|
|
21
|
+
- `POST` — Create a new resource or trigger a non-idempotent action. Return 201 with Location header for creates.
|
|
22
|
+
- `PUT` — Replace an entire resource. Must be idempotent. Return 200 or 204.
|
|
23
|
+
- `PATCH` — Partially update a resource. Use JSON Merge Patch or JSON Patch content types. Return 200.
|
|
24
|
+
- `DELETE` — Remove a resource. Must be idempotent. Return 204 on success, 404 if already absent.
|
|
25
|
+
- `OPTIONS` — Return allowed methods and CORS headers. Used for preflight requests.
|
|
26
|
+
|
|
27
|
+
## Status Codes
|
|
28
|
+
|
|
29
|
+
Use the most specific applicable status code:
|
|
30
|
+
|
|
31
|
+
| Range | Use for |
|
|
32
|
+
|-------|---------|
|
|
33
|
+
| 200 | Successful retrieval or update |
|
|
34
|
+
| 201 | Resource created (include Location header) |
|
|
35
|
+
| 204 | Success with no response body |
|
|
36
|
+
| 400 | Malformed request (syntax or validation errors) |
|
|
37
|
+
| 401 | Missing or invalid authentication credentials |
|
|
38
|
+
| 403 | Authenticated but insufficient permissions |
|
|
39
|
+
| 404 | Resource not found |
|
|
40
|
+
| 409 | Conflict (e.g., duplicate key, version mismatch) |
|
|
41
|
+
| 422 | Semantically invalid request (valid syntax but business rule violation) |
|
|
42
|
+
| 429 | Rate limit exceeded (include Retry-After header) |
|
|
43
|
+
| 500 | Unexpected server error (never expose internals) |
|
|
44
|
+
|
|
45
|
+
## Error Response Format
|
|
46
|
+
|
|
47
|
+
Return a consistent JSON error body for all 4xx and 5xx responses:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"error": {
|
|
52
|
+
"code": "VALIDATION_FAILED",
|
|
53
|
+
"message": "Human-readable summary of the problem",
|
|
54
|
+
"details": [
|
|
55
|
+
{
|
|
56
|
+
"field": "email",
|
|
57
|
+
"issue": "Must be a valid email address"
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"request_id": "req_abc123"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- `code` — Machine-readable error identifier (UPPER_SNAKE_CASE).
|
|
66
|
+
- `message` — Brief, user-safe description. Never include stack traces or internal paths.
|
|
67
|
+
- `details` — Optional array of field-level errors for validation failures.
|
|
68
|
+
- `request_id` — Correlation identifier for debugging (matches server-side logs).
|
|
69
|
+
|
|
70
|
+
## Pagination
|
|
71
|
+
|
|
72
|
+
- Use cursor-based pagination for large or frequently-changing collections.
|
|
73
|
+
- Support limit/offset as a simpler alternative for smaller, stable datasets.
|
|
74
|
+
- Return pagination metadata in the response body:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"data": [...],
|
|
79
|
+
"pagination": {
|
|
80
|
+
"next_cursor": "eyJpZCI6MTAwfQ",
|
|
81
|
+
"has_more": true,
|
|
82
|
+
"total_count": 2340
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- Include `total_count` only when it can be computed efficiently.
|
|
88
|
+
|
|
89
|
+
## Versioning
|
|
90
|
+
|
|
91
|
+
- Use URL prefix versioning for major breaking changes: `/v1/users`, `/v2/users`.
|
|
92
|
+
- Increment the version number only on backward-incompatible changes.
|
|
93
|
+
- Support the previous major version for at least 6 months after a new version ships.
|
|
94
|
+
- Treat additive changes (new optional fields, new endpoints) as backward-compatible.
|
|
95
|
+
- Document deprecation timelines in the Sunset response header and changelog.
|
|
96
|
+
|
|
97
|
+
## Request and Response Conventions
|
|
98
|
+
|
|
99
|
+
- Use `snake_case` for JSON field names throughout request and response bodies.
|
|
100
|
+
- Represent timestamps in ISO 8601 format with UTC timezone: `2025-06-15T10:30:00Z`.
|
|
101
|
+
- Use envelope format for collections: `{ "data": [...], "pagination": {...} }`.
|
|
102
|
+
- Return the full created or updated resource in response to POST, PUT, and PATCH.
|
|
103
|
+
- Accept and return `Content-Type: application/json` by default.
|
|
104
|
+
- Support `Accept` header negotiation where multiple formats are available.
|
|
105
|
+
|
|
106
|
+
## Rate Limiting and Throttling
|
|
107
|
+
|
|
108
|
+
- Enforce rate limits per client or API key.
|
|
109
|
+
- Return `429 Too Many Requests` with a `Retry-After` header (seconds until next allowed request).
|
|
110
|
+
- Include rate limit headers on every response: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`.
|
|
111
|
+
|
|
112
|
+
## CORS and Security Headers
|
|
113
|
+
|
|
114
|
+
- Configure CORS to allow only trusted origins; avoid wildcard `*` in production.
|
|
115
|
+
- Return appropriate CORS headers: `Access-Control-Allow-Origin`, `Access-Control-Allow-Methods`, `Access-Control-Allow-Headers`.
|
|
116
|
+
- Set `Cache-Control: no-store` on responses containing sensitive data.
|
|
117
|
+
- Include `X-Content-Type-Options: nosniff` and `X-Request-Id` on all responses.
|
|
118
|
+
|
|
119
|
+
## Documentation and Discoverability
|
|
120
|
+
|
|
121
|
+
- Provide an OpenAPI 3.x specification for every public API.
|
|
122
|
+
- Include request/response examples for each endpoint.
|
|
123
|
+
- Document authentication requirements, rate limits, and error codes.
|
|
124
|
+
- Use consistent terminology across endpoint descriptions.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: secure-defaults
|
|
3
|
+
description: Security best practices and secure coding defaults
|
|
4
|
+
---
|
|
5
|
+
# Secure Defaults
|
|
6
|
+
|
|
7
|
+
Follow these security rules by default when writing or reviewing code. Deviations require explicit justification in the design artifact.
|
|
8
|
+
|
|
9
|
+
## Input Validation
|
|
10
|
+
|
|
11
|
+
- Validate and sanitize all external inputs at the system boundary before processing.
|
|
12
|
+
- Use an allowlist approach for accepted values when possible; reject unknown inputs.
|
|
13
|
+
- Enforce maximum length, type, and format constraints on every input field.
|
|
14
|
+
- Never trust client-side validation alone; always validate server-side.
|
|
15
|
+
|
|
16
|
+
## Database and Query Safety
|
|
17
|
+
|
|
18
|
+
- Use parameterized queries or prepared statements for all database access.
|
|
19
|
+
- Never construct SQL, NoSQL, or ORM queries by string concatenation with user input.
|
|
20
|
+
- Apply principle of least privilege to database credentials (read-only where writes are not needed).
|
|
21
|
+
- Escape identifiers if dynamic table or column names are unavoidable.
|
|
22
|
+
|
|
23
|
+
## Authentication and Authorization
|
|
24
|
+
|
|
25
|
+
- Hash passwords with a modern adaptive algorithm (bcrypt, scrypt, or argon2) with per-user salts.
|
|
26
|
+
- Enforce minimum password complexity or passphrase length per current NIST guidance.
|
|
27
|
+
- Implement rate limiting and account lockout on authentication endpoints.
|
|
28
|
+
- Check authorization on every request; never rely solely on client-side role checks.
|
|
29
|
+
- Use short-lived tokens (JWT, session) with explicit expiration and refresh rotation.
|
|
30
|
+
|
|
31
|
+
## Secrets Management
|
|
32
|
+
|
|
33
|
+
- Never store secrets (API keys, tokens, passwords, private keys) in source code or config files committed to version control.
|
|
34
|
+
- Use environment variables or a dedicated secrets manager for runtime secrets.
|
|
35
|
+
- Rotate secrets on a defined schedule and immediately on suspected compromise.
|
|
36
|
+
- Log secret access but never log secret values.
|
|
37
|
+
|
|
38
|
+
## Transport and Data Protection
|
|
39
|
+
|
|
40
|
+
- Use TLS 1.2+ for all network communication; reject plain HTTP in production.
|
|
41
|
+
- Encrypt sensitive data at rest using AES-256 or equivalent.
|
|
42
|
+
- Set Secure, HttpOnly, and SameSite attributes on all authentication cookies.
|
|
43
|
+
- Apply Content-Security-Policy, X-Content-Type-Options, and Strict-Transport-Security headers.
|
|
44
|
+
|
|
45
|
+
## Error Handling and Logging
|
|
46
|
+
|
|
47
|
+
- Never expose stack traces, internal paths, or database details in user-facing error responses.
|
|
48
|
+
- Log errors with sufficient context for debugging but exclude sensitive data (PII, secrets).
|
|
49
|
+
- Use structured logging (JSON) with consistent severity levels.
|
|
50
|
+
- Return generic error messages to clients; map internal errors to safe public codes.
|
|
51
|
+
|
|
52
|
+
## Dependency Security
|
|
53
|
+
|
|
54
|
+
- Pin dependency versions and use lock files to ensure reproducible builds.
|
|
55
|
+
- Audit dependencies for known vulnerabilities regularly (e.g., npm audit, Snyk, Dependabot).
|
|
56
|
+
- Prefer well-maintained packages with active security response teams.
|
|
57
|
+
- Remove unused dependencies to reduce attack surface.
|
|
58
|
+
|
|
59
|
+
## Least Privilege and Defense in Depth
|
|
60
|
+
|
|
61
|
+
- Run services with the minimum permissions required for their function.
|
|
62
|
+
- Separate concerns: do not mix admin and user-facing logic in the same process.
|
|
63
|
+
- Apply defense in depth: assume any single layer can be bypassed.
|
|
64
|
+
- Validate at multiple boundaries (network edge, service boundary, data layer).
|
|
65
|
+
|
|
66
|
+
## File and Resource Handling
|
|
67
|
+
|
|
68
|
+
- Validate uploaded file types, sizes, and content (not just extensions).
|
|
69
|
+
- Store uploaded files outside the web root with randomized names.
|
|
70
|
+
- Set restrictive file permissions on sensitive files (0600 for keys, 0644 for config).
|
|
71
|
+
- Avoid path traversal: canonicalize paths and reject `..` sequences in user input.
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rasensio/aidlc",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AI Development Lifecycle Framework — structured lifecycle guidance for AI coding agents across platforms",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/cli.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"aidlc": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=18.0.0"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"test:watch": "vitest",
|
|
17
|
+
"lint": "tsc --noEmit",
|
|
18
|
+
"prepublishOnly": "npm run build && npm test"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"ai",
|
|
22
|
+
"development",
|
|
23
|
+
"lifecycle",
|
|
24
|
+
"agent",
|
|
25
|
+
"skills",
|
|
26
|
+
"workflow"
|
|
27
|
+
],
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@clack/prompts": "1.7.0",
|
|
31
|
+
"commander": "15.0.0",
|
|
32
|
+
"picomatch": "4.0.5",
|
|
33
|
+
"yaml": "2.9.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "22.15.32",
|
|
37
|
+
"@types/picomatch": "3.0.2",
|
|
38
|
+
"fast-check": "4.9.0",
|
|
39
|
+
"typescript": "5.8.3",
|
|
40
|
+
"vitest": "4.1.10"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist/",
|
|
44
|
+
"skills/",
|
|
45
|
+
"capabilities/",
|
|
46
|
+
"templates/",
|
|
47
|
+
"guidance/",
|
|
48
|
+
"phases/",
|
|
49
|
+
"examples/",
|
|
50
|
+
"ci/"
|
|
51
|
+
]
|
|
52
|
+
}
|
package/phases/.gitkeep
ADDED
|
File without changes
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aidlc-overview
|
|
3
|
+
description: Framework overview and state protocol for the AI Development Lifecycle
|
|
4
|
+
phase: ideation
|
|
5
|
+
priority: 100
|
|
6
|
+
---
|
|
7
|
+
# AIDLC Framework Overview
|
|
8
|
+
|
|
9
|
+
You are operating within the AI Development Lifecycle (AIDLC) framework. This skill defines how you interact with lifecycle state and follow phase-driven development.
|
|
10
|
+
|
|
11
|
+
## Lifecycle Phases
|
|
12
|
+
|
|
13
|
+
The AIDLC defines seven ordered phases. Not all apply to every task:
|
|
14
|
+
|
|
15
|
+
1. **Ideation** — Problem exploration, goals, constraints
|
|
16
|
+
2. **Requirements** — Acceptance criteria, user stories, scope
|
|
17
|
+
3. **Design** — Architecture, interfaces, data flow
|
|
18
|
+
4. **Implementation** — Code production following the design
|
|
19
|
+
5. **Testing** — Verification against requirements
|
|
20
|
+
6. **Deployment** — Release preparation and execution
|
|
21
|
+
7. **Maintenance** — Monitoring, iteration, documentation updates
|
|
22
|
+
|
|
23
|
+
## Cycle Scopes
|
|
24
|
+
|
|
25
|
+
| Scope | Starting Phase | Applicable Phases |
|
|
26
|
+
|-------|---------------|-------------------|
|
|
27
|
+
| Full | Ideation | All seven phases |
|
|
28
|
+
| Standard | Requirements | Requirements through Deployment |
|
|
29
|
+
| Micro | Implementation | Implementation and Testing only |
|
|
30
|
+
|
|
31
|
+
## State Protocol
|
|
32
|
+
|
|
33
|
+
All state lives in `.aidlc/state/<instance-name>/`. Read and write state as follows:
|
|
34
|
+
|
|
35
|
+
### Reading State
|
|
36
|
+
|
|
37
|
+
1. Read `instance.yaml` to determine: current phase, template, scope, owner, claim
|
|
38
|
+
2. Read `phase-<name>.yaml` for per-phase status and artifact completion
|
|
39
|
+
3. Read `transitions.log` (NDJSON) for history — one JSON object per line
|
|
40
|
+
|
|
41
|
+
### Writing State
|
|
42
|
+
|
|
43
|
+
1. **Before mutating state**, check for an existing Instance_Claim in `instance.yaml`. If another session holds the claim and it is not stale, warn and request override confirmation.
|
|
44
|
+
2. Record your session identifier in the claim fields when you begin work.
|
|
45
|
+
3. Update phase state files as you produce artifacts.
|
|
46
|
+
4. Append a transition record to `transitions.log` only on successful phase transitions.
|
|
47
|
+
|
|
48
|
+
### Transition Records
|
|
49
|
+
|
|
50
|
+
Each line in `transitions.log` is a JSON object:
|
|
51
|
+
```json
|
|
52
|
+
{"timestamp":"<ISO 8601 UTC>","author":"<session-id>","from":"<phase>","to":"<phase>","type":"normal|skip|upgrade","criteria":["..."]}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Context and Guidance
|
|
56
|
+
|
|
57
|
+
- Project context lives in `.aidlc/context/` (style-guide.md, architecture.md)
|
|
58
|
+
- Guidance layers live in `.aidlc/guidance/` — load only those listed in `index.yaml`
|
|
59
|
+
- Load context relevant to the current phase; avoid re-reading unchanged files
|
|
60
|
+
|
|
61
|
+
## Security
|
|
62
|
+
|
|
63
|
+
Before executing any sensitive operation (infrastructure changes, permission modifications, file deletions), you MUST:
|
|
64
|
+
1. Describe the operation and its impact to the user
|
|
65
|
+
2. Wait for explicit confirmation
|
|
66
|
+
3. If cancelled, halt and log the cancellation
|
|
67
|
+
|
|
68
|
+
Never store credentials, tokens, or secrets in state files or artifacts.
|
|
69
|
+
|
|
70
|
+
## Token Efficiency
|
|
71
|
+
|
|
72
|
+
- Read compact state files, not full artifacts, to determine progress
|
|
73
|
+
- Use Artifact_Summaries (`<artifact>.summary.md`) when available
|
|
74
|
+
- Load only the skill for the current phase, not all skills at once
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aidlc-ideation
|
|
3
|
+
description: Guides the Ideation phase — exploring the problem space, defining goals and constraints
|
|
4
|
+
phase: ideation
|
|
5
|
+
priority: 50
|
|
6
|
+
---
|
|
7
|
+
# Ideation Phase
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Explore the problem space before committing to a solution. Define what we are building, why, and what constraints exist.
|
|
12
|
+
|
|
13
|
+
## Entry Criteria
|
|
14
|
+
|
|
15
|
+
- A lifecycle instance has been created with a Full scope
|
|
16
|
+
- The instance is claimed by this session
|
|
17
|
+
|
|
18
|
+
## Required Artifacts
|
|
19
|
+
|
|
20
|
+
- `ideation.md` — Problem statement, goals, constraints, initial ideas, and open questions
|
|
21
|
+
|
|
22
|
+
## Instructions
|
|
23
|
+
|
|
24
|
+
1. **Clarify the problem.** Ask the user what they want to build and why. Identify the core need vs. nice-to-haves.
|
|
25
|
+
2. **Explore constraints.** Document: timeline, technical constraints, platform limitations, team size, budget considerations.
|
|
26
|
+
3. **Generate options.** Propose 2-3 approaches. For each, note trade-offs (complexity, time, risk).
|
|
27
|
+
4. **Identify unknowns.** List open questions that need answers before requirements can be written.
|
|
28
|
+
5. **Summarize.** Write `ideation.md` with sections: Problem Statement, Goals, Constraints, Explored Options, Open Questions.
|
|
29
|
+
|
|
30
|
+
## Exit Criteria
|
|
31
|
+
|
|
32
|
+
- `ideation.md` exists and contains at minimum a problem statement and one defined goal
|
|
33
|
+
- The user has confirmed the direction (which option to pursue or a synthesis)
|
|
34
|
+
|
|
35
|
+
## Guidance
|
|
36
|
+
|
|
37
|
+
{{guidance:secure-defaults}}
|
|
38
|
+
|
|
39
|
+
## Security Confirmation
|
|
40
|
+
|
|
41
|
+
If any ideation option involves sensitive operations (new credentials, infrastructure provisioning, access control changes), flag it explicitly and note that confirmation will be required before execution in later phases.
|
|
42
|
+
|
|
43
|
+
## Completion
|
|
44
|
+
|
|
45
|
+
When exit criteria are met, update `phase-ideation.yaml` status to `complete` and append a transition record to `transitions.log`.
|