arggon-harness 0.1.2 → 0.1.3
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/plugin/engine/types.d.ts +1 -0
- package/dist/plugin/engine/types.d.ts.map +1 -1
- package/dist/plugin/tools/spec-artifact-instr.d.ts +10 -0
- package/dist/plugin/tools/spec-artifact-instr.d.ts.map +1 -1
- package/dist/plugin/tools/spec-artifact-instr.js +40 -1
- package/dist/plugin/tools/spec-artifact-instr.js.map +1 -1
- package/dist/plugin/tools/util.d.ts.map +1 -1
- package/dist/plugin/tools/util.js +2 -0
- package/dist/plugin/tools/util.js.map +1 -1
- package/package.json +1 -1
- package/src/schemas/ui-driven.yaml +1 -0
- package/src/templates/hybrid/schema.yaml +32 -0
- package/src/templates/hybrid/tasks.yaml +103 -0
- package/src/templates/spec-driven/design-tech.yaml +42 -0
- package/src/templates/spec-driven/proposal.yaml +43 -0
- package/src/templates/spec-driven/schema.yaml +32 -0
- package/src/templates/spec-driven/spec.yaml +56 -0
- package/src/templates/tdd/design-tech.yaml +42 -0
- package/src/templates/tdd/proposal.yaml +43 -0
- package/src/templates/tdd/schema.yaml +32 -0
- package/src/templates/tdd/spec.yaml +56 -0
- package/src/templates/tdd/tasks.yaml +77 -0
- package/src/templates/ui-driven/design-html.html +224 -0
- package/src/templates/ui-driven/schema.yaml +33 -0
- /package/src/templates/{design-tech.yaml → hybrid/design-tech.yaml} +0 -0
- /package/src/templates/{proposal.yaml → hybrid/proposal.yaml} +0 -0
- /package/src/templates/{spec.yaml → hybrid/spec.yaml} +0 -0
- /package/src/templates/{tasks.yaml → spec-driven/tasks.yaml} +0 -0
- /package/src/templates/{design-hifi.yaml → ui-driven/design-hifi.yaml} +0 -0
- /package/src/templates/{design-wireframe.yaml → ui-driven/design-wireframe.yaml} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugin/engine/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugin/engine/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import type { ToolContext, ToolResult } from "./util.js";
|
|
2
|
+
import type { Schema } from "../engine/types.js";
|
|
2
3
|
export interface SpecArtifactInstrArgs {
|
|
3
4
|
changeName: string;
|
|
4
5
|
artifactId?: string;
|
|
5
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the filesystem path to a template by walking the schema's inheritance chain.
|
|
9
|
+
*
|
|
10
|
+
* - If templateName is falsy, throws immediately with a clear missing-field error.
|
|
11
|
+
* - If templateName contains "/", resolves as an explicit path (bypasses chain).
|
|
12
|
+
* - Otherwise, walks inheritance_chain (most specific first) and returns the first match.
|
|
13
|
+
* - Throws with a full search trace if no template is found anywhere in the chain.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveTemplatePath(templateName: string, schema: Schema, pluginDir: string): Promise<string>;
|
|
6
16
|
export declare function specArtifactInstr(args: SpecArtifactInstrArgs, ctx: ToolContext): Promise<ToolResult>;
|
|
7
17
|
//# sourceMappingURL=spec-artifact-instr.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-artifact-instr.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-artifact-instr.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spec-artifact-instr.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-artifact-instr.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAIxD,OAAO,KAAK,EAAE,MAAM,EAAsB,MAAM,oBAAoB,CAAA;AAGpE,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BlH;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6E1G"}
|
|
@@ -1,8 +1,47 @@
|
|
|
1
1
|
import * as fs from "fs/promises";
|
|
2
|
+
import * as path from "path";
|
|
2
3
|
import { parseYaml, loadSchema, assetRoot } from "./util.js";
|
|
3
4
|
import * as State from "../engine/state.js";
|
|
4
5
|
import * as ArtifactGraph from "../engine/artifact-graph.js";
|
|
5
6
|
import { readProjectConfig } from "../engine/config.js";
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the filesystem path to a template by walking the schema's inheritance chain.
|
|
9
|
+
*
|
|
10
|
+
* - If templateName is falsy, throws immediately with a clear missing-field error.
|
|
11
|
+
* - If templateName contains "/", resolves as an explicit path (bypasses chain).
|
|
12
|
+
* - Otherwise, walks inheritance_chain (most specific first) and returns the first match.
|
|
13
|
+
* - Throws with a full search trace if no template is found anywhere in the chain.
|
|
14
|
+
*/
|
|
15
|
+
export async function resolveTemplatePath(templateName, schema, pluginDir) {
|
|
16
|
+
if (!templateName) {
|
|
17
|
+
throw new Error("Artifact has no template field — cannot resolve template path");
|
|
18
|
+
}
|
|
19
|
+
const root = assetRoot(pluginDir);
|
|
20
|
+
// Explicit path with "/" — bypass chain resolution
|
|
21
|
+
if (templateName.includes("/")) {
|
|
22
|
+
const explicitPath = path.join(root, "templates", templateName);
|
|
23
|
+
try {
|
|
24
|
+
await fs.access(explicitPath);
|
|
25
|
+
return explicitPath;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error(`Template not found at explicit path: ${explicitPath}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Walk inheritance chain in order (index 0 = most specific)
|
|
32
|
+
const chain = schema.inheritance_chain ?? [schema.name];
|
|
33
|
+
for (const chainEntry of chain) {
|
|
34
|
+
const candidatePath = path.join(root, "templates", chainEntry, templateName);
|
|
35
|
+
try {
|
|
36
|
+
await fs.access(candidatePath);
|
|
37
|
+
return candidatePath;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Not found in this entry — continue to parent
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`Template "${templateName}" not found — searched: ${chain.join(" → ")}`);
|
|
44
|
+
}
|
|
6
45
|
export async function specArtifactInstr(args, ctx) {
|
|
7
46
|
try {
|
|
8
47
|
const changeDir = `${ctx.projectRoot}/spec/changes/${args.changeName}`;
|
|
@@ -27,7 +66,7 @@ export async function specArtifactInstr(args, ctx) {
|
|
|
27
66
|
if (!artifactDef) {
|
|
28
67
|
return { output: `Artifact not found: ${artifactId}`, metadata: { error: true } };
|
|
29
68
|
}
|
|
30
|
-
const templatePath =
|
|
69
|
+
const templatePath = await resolveTemplatePath(artifactDef.template, schema, ctx.pluginDir);
|
|
31
70
|
const template = await fs.readFile(templatePath, "utf-8");
|
|
32
71
|
const dependencies = artifactDef.requires.map(depId => {
|
|
33
72
|
const dep = schema.artifacts.find(a => a.id === depId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-artifact-instr.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-artifact-instr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"spec-artifact-instr.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-artifact-instr.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/util.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC9B;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAE9C;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,KAAG,MAQ7C,CAAA;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/util.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC9B;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAE9C;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,KAAG,MAQ7C,CAAA;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CA2C3G"}
|
|
@@ -48,6 +48,7 @@ export async function loadSchema(pluginDir, schemaName, seen) {
|
|
|
48
48
|
artifacts: [...parent.artifacts],
|
|
49
49
|
apply: raw.apply || parent.apply,
|
|
50
50
|
extends: raw.extends,
|
|
51
|
+
inheritance_chain: [raw.name, ...parent.inheritance_chain],
|
|
51
52
|
};
|
|
52
53
|
// Merge artifacts: child overrides matching ids, appends new ones
|
|
53
54
|
for (const childArtifact of raw.artifacts) {
|
|
@@ -61,6 +62,7 @@ export async function loadSchema(pluginDir, schemaName, seen) {
|
|
|
61
62
|
}
|
|
62
63
|
return merged;
|
|
63
64
|
}
|
|
65
|
+
raw.inheritance_chain = [raw.name];
|
|
64
66
|
return raw;
|
|
65
67
|
}
|
|
66
68
|
//# sourceMappingURL=util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/plugin/tools/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,IAAI,MAAM,SAAS,CAAA;AAa1B,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAU,EAAE;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;QACrC,8DAA8D;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IAChD,CAAC;IACD,wDAAwD;IACxD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAiB,EAAE,UAAkB,EAAE,IAAkB;IACxF,gCAAgC;IAChC,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3C,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,OAAO,UAAU,EAAE,CAAC,CAAA;IACpF,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,UAAU,OAAO,CAAC,CAAA;IACnF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAW,CAAA;IAExC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,iCAAiC;QACjC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAE7D,8EAA8E;QAC9E,MAAM,MAAM,GAAW;YACrB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;YAClD,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;YAChC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;YAChC,OAAO,EAAE,GAAG,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/plugin/tools/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -7,6 +7,7 @@ artifacts:
|
|
|
7
7
|
- id: design-html
|
|
8
8
|
generates: design.html
|
|
9
9
|
description: Visual design mockup as a standalone HTML file serving as the design source of truth
|
|
10
|
+
template: design-html.html
|
|
10
11
|
instruction: |
|
|
11
12
|
Create a complete visual design mockup as a standalone HTML file.
|
|
12
13
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: hybrid
|
|
2
|
+
version: 1
|
|
3
|
+
description: Combined workflow — spec-driven planning with TDD implementation
|
|
4
|
+
|
|
5
|
+
artifacts:
|
|
6
|
+
- id: proposal
|
|
7
|
+
generates: proposal.yaml
|
|
8
|
+
description: Change proposal with capabilities and acceptance criteria
|
|
9
|
+
template: proposal.yaml
|
|
10
|
+
requires: []
|
|
11
|
+
|
|
12
|
+
- id: specs
|
|
13
|
+
generates: specs/*.yaml
|
|
14
|
+
description: Specifications with scenarios and verify blocks
|
|
15
|
+
template: spec.yaml
|
|
16
|
+
requires: [proposal]
|
|
17
|
+
|
|
18
|
+
- id: design-tech
|
|
19
|
+
generates: design-tech.yaml
|
|
20
|
+
description: Technical design with architecture and testability decisions
|
|
21
|
+
template: design-tech.yaml
|
|
22
|
+
requires: [specs]
|
|
23
|
+
|
|
24
|
+
- id: tasks
|
|
25
|
+
generates: tasks.yaml
|
|
26
|
+
description: Tasks organized by feature supporting both standard and TDD patterns
|
|
27
|
+
template: tasks.yaml
|
|
28
|
+
requires: [specs, design-tech]
|
|
29
|
+
|
|
30
|
+
apply:
|
|
31
|
+
requires: [tasks]
|
|
32
|
+
tracks: tasks.yaml
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Hybrid Workflow Tasks Template
|
|
2
|
+
#
|
|
3
|
+
# Supports both standard task patterns and TDD RED→GREEN→REFACTOR tasks.
|
|
4
|
+
#
|
|
5
|
+
# Use STANDARD tasks when:
|
|
6
|
+
# - Implementing well-understood features with clear requirements
|
|
7
|
+
# - Making infrastructure/config/build changes
|
|
8
|
+
# - Writing documentation or non-code artifacts
|
|
9
|
+
# - Making small, low-risk changes
|
|
10
|
+
#
|
|
11
|
+
# Use TDD tasks (with tdd_phase) when:
|
|
12
|
+
# - Implementing core business logic
|
|
13
|
+
# - Making changes with high regression risk
|
|
14
|
+
# - Building new APIs or data processing pipelines
|
|
15
|
+
# - Refactoring complex code
|
|
16
|
+
#
|
|
17
|
+
# Standard tasks use: id, group, description, depends_on, complexity,
|
|
18
|
+
# estimated_minutes, spec_refs, affected_files, acceptance, status
|
|
19
|
+
#
|
|
20
|
+
# TDD tasks add: tdd_phase: 'red' | 'green' | 'refactor'
|
|
21
|
+
#
|
|
22
|
+
# You can mix both patterns in the same task list.
|
|
23
|
+
# Standard tasks typically go first (setup), then TDD loops for each behavior.
|
|
24
|
+
|
|
25
|
+
workflow: hybrid
|
|
26
|
+
|
|
27
|
+
agent:
|
|
28
|
+
critical_path:
|
|
29
|
+
- t1
|
|
30
|
+
- t2
|
|
31
|
+
- t3
|
|
32
|
+
- t4
|
|
33
|
+
total_estimated_minutes: 200
|
|
34
|
+
|
|
35
|
+
tasks:
|
|
36
|
+
# ── Standard task example (infrastructure/setup) ──
|
|
37
|
+
- id: t1
|
|
38
|
+
group: Setup
|
|
39
|
+
description: Configure [dependency/infrastructure]
|
|
40
|
+
depends_on: []
|
|
41
|
+
complexity: low
|
|
42
|
+
estimated_minutes: 20
|
|
43
|
+
spec_refs:
|
|
44
|
+
- [capability-id]/REQ-[requirement-id]
|
|
45
|
+
affected_files:
|
|
46
|
+
- [path/to/config/file]
|
|
47
|
+
acceptance:
|
|
48
|
+
- [dependency] is configured and working
|
|
49
|
+
- Configuration follows project conventions
|
|
50
|
+
status: pending
|
|
51
|
+
|
|
52
|
+
# ── TDD loop: RED → GREEN → REFACTOR for [behavior-1] ──
|
|
53
|
+
- id: t2
|
|
54
|
+
group: "TDD: RED"
|
|
55
|
+
description: Write failing test for [behavior-1]
|
|
56
|
+
depends_on:
|
|
57
|
+
- t1
|
|
58
|
+
complexity: low
|
|
59
|
+
estimated_minutes: 15
|
|
60
|
+
spec_refs:
|
|
61
|
+
- [capability-id]/REQ-[requirement-id]
|
|
62
|
+
affected_files:
|
|
63
|
+
- test/[test-file].test.ts
|
|
64
|
+
acceptance:
|
|
65
|
+
- Test compiles and runs
|
|
66
|
+
- Test fails with expected message
|
|
67
|
+
tdd_phase: red
|
|
68
|
+
status: pending
|
|
69
|
+
|
|
70
|
+
- id: t3
|
|
71
|
+
group: "TDD: GREEN"
|
|
72
|
+
description: Implement minimal code to pass [behavior-1] test
|
|
73
|
+
depends_on:
|
|
74
|
+
- t2
|
|
75
|
+
complexity: low
|
|
76
|
+
estimated_minutes: 20
|
|
77
|
+
spec_refs:
|
|
78
|
+
- [capability-id]/REQ-[requirement-id]
|
|
79
|
+
affected_files:
|
|
80
|
+
- src/[implementation].ts
|
|
81
|
+
acceptance:
|
|
82
|
+
- All existing tests still pass
|
|
83
|
+
- New test from t2 now passes
|
|
84
|
+
tdd_phase: green
|
|
85
|
+
status: pending
|
|
86
|
+
|
|
87
|
+
- id: t4
|
|
88
|
+
group: "TDD: REFACTOR"
|
|
89
|
+
description: Refactor [behavior-1] implementation and tests
|
|
90
|
+
depends_on:
|
|
91
|
+
- t3
|
|
92
|
+
complexity: medium
|
|
93
|
+
estimated_minutes: 25
|
|
94
|
+
spec_refs:
|
|
95
|
+
- [capability-id]/REQ-[requirement-id]
|
|
96
|
+
affected_files:
|
|
97
|
+
- src/[implementation].ts
|
|
98
|
+
- test/[test-file].test.ts
|
|
99
|
+
acceptance:
|
|
100
|
+
- All tests still pass
|
|
101
|
+
- Code is clean and follows conventions
|
|
102
|
+
tdd_phase: refactor
|
|
103
|
+
status: pending
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Design Template
|
|
2
|
+
#
|
|
3
|
+
# Instructions:
|
|
4
|
+
# - Focus on HOW to implement
|
|
5
|
+
# - Include alternatives considered
|
|
6
|
+
# - Only create if change is complex enough
|
|
7
|
+
|
|
8
|
+
id: <change-name>
|
|
9
|
+
schema: <schema-name>
|
|
10
|
+
|
|
11
|
+
agent:
|
|
12
|
+
context_files:
|
|
13
|
+
- <relevant files>
|
|
14
|
+
affected_paths:
|
|
15
|
+
- <paths affected>
|
|
16
|
+
|
|
17
|
+
body:
|
|
18
|
+
context: |
|
|
19
|
+
<Background, current state, constraints>
|
|
20
|
+
|
|
21
|
+
goals:
|
|
22
|
+
- <What this design achieves>
|
|
23
|
+
- <Another goal>
|
|
24
|
+
|
|
25
|
+
non_goals:
|
|
26
|
+
- <What's explicitly out of scope>
|
|
27
|
+
- <Another non-goal>
|
|
28
|
+
|
|
29
|
+
decisions:
|
|
30
|
+
- title: <decision title>
|
|
31
|
+
approach: |
|
|
32
|
+
<Chosen approach and rationale>
|
|
33
|
+
alternatives: |
|
|
34
|
+
<Alternatives considered and why not chosen>
|
|
35
|
+
|
|
36
|
+
- title: <another decision>
|
|
37
|
+
approach: |
|
|
38
|
+
<approach>
|
|
39
|
+
|
|
40
|
+
risks:
|
|
41
|
+
- <Risk and mitigation strategy>
|
|
42
|
+
- <Another risk>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Proposal Template
|
|
2
|
+
#
|
|
3
|
+
# Instructions:
|
|
4
|
+
# - Replace <placeholders> with actual values
|
|
5
|
+
# - Remove comment lines (starting with #) before saving
|
|
6
|
+
# - Keep the structure intact
|
|
7
|
+
|
|
8
|
+
id: <change-name-kebab-case>
|
|
9
|
+
schema: <schema-name>
|
|
10
|
+
created: <YYYY-MM-DD>
|
|
11
|
+
status: active
|
|
12
|
+
|
|
13
|
+
agent:
|
|
14
|
+
priority: <low|medium|high>
|
|
15
|
+
context_files:
|
|
16
|
+
- <file1.ts>
|
|
17
|
+
- <file2.ts>
|
|
18
|
+
affected_paths:
|
|
19
|
+
- <src/path/**>
|
|
20
|
+
hints:
|
|
21
|
+
- <implementation hint>
|
|
22
|
+
|
|
23
|
+
body:
|
|
24
|
+
why: |
|
|
25
|
+
<1-3 sentences explaining the problem and why this change is needed>
|
|
26
|
+
|
|
27
|
+
what_changes:
|
|
28
|
+
- <bullet point describing a change>
|
|
29
|
+
- <another change>
|
|
30
|
+
|
|
31
|
+
capabilities:
|
|
32
|
+
new:
|
|
33
|
+
- id: <capability-id>
|
|
34
|
+
description: <what this capability does>
|
|
35
|
+
modified:
|
|
36
|
+
- id: <existing-capability-id>
|
|
37
|
+
description: <what changed>
|
|
38
|
+
|
|
39
|
+
impact:
|
|
40
|
+
- path: <src/file.ts>
|
|
41
|
+
change: <what changes in this file>
|
|
42
|
+
- path: <src/another.ts>
|
|
43
|
+
change: <description>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: spec-driven
|
|
2
|
+
version: 1
|
|
3
|
+
description: Standard spec-driven workflow with proposal, specs, design, and tasks
|
|
4
|
+
|
|
5
|
+
artifacts:
|
|
6
|
+
- id: proposal
|
|
7
|
+
generates: proposal.yaml
|
|
8
|
+
description: Change proposal with why, what, and impact
|
|
9
|
+
template: proposal.yaml
|
|
10
|
+
requires: []
|
|
11
|
+
|
|
12
|
+
- id: specs
|
|
13
|
+
generates: specs/*.yaml
|
|
14
|
+
description: Delta specifications for each capability with requirement scenarios
|
|
15
|
+
template: spec.yaml
|
|
16
|
+
requires: [proposal]
|
|
17
|
+
|
|
18
|
+
- id: design-tech
|
|
19
|
+
generates: design-tech.yaml
|
|
20
|
+
description: Technical design with architecture decisions, alternatives, and risks
|
|
21
|
+
template: design-tech.yaml
|
|
22
|
+
requires: [proposal]
|
|
23
|
+
|
|
24
|
+
- id: tasks
|
|
25
|
+
generates: tasks.yaml
|
|
26
|
+
description: Implementation task list with dependencies and acceptance criteria
|
|
27
|
+
template: tasks.yaml
|
|
28
|
+
requires: [specs, design-tech]
|
|
29
|
+
|
|
30
|
+
apply:
|
|
31
|
+
requires: [tasks]
|
|
32
|
+
tracks: tasks.yaml
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Delta Spec Template
|
|
2
|
+
#
|
|
3
|
+
# Instructions:
|
|
4
|
+
# - One file per capability
|
|
5
|
+
# - Use operations: add, modify, remove, rename
|
|
6
|
+
# - Each requirement must have at least one scenario
|
|
7
|
+
# - Add verify blocks for testable assertions
|
|
8
|
+
|
|
9
|
+
capability: <capability-id>
|
|
10
|
+
version: 1
|
|
11
|
+
|
|
12
|
+
agent:
|
|
13
|
+
related_specs:
|
|
14
|
+
- <other-capability>
|
|
15
|
+
affected_paths:
|
|
16
|
+
- <src/auth/**>
|
|
17
|
+
|
|
18
|
+
operations:
|
|
19
|
+
- op: add
|
|
20
|
+
requirement:
|
|
21
|
+
id: <requirement-id>
|
|
22
|
+
description: |
|
|
23
|
+
The system SHALL <behavior description>.
|
|
24
|
+
scenarios:
|
|
25
|
+
- id: <scenario-id>
|
|
26
|
+
given:
|
|
27
|
+
- <precondition>
|
|
28
|
+
when:
|
|
29
|
+
- <action or event>
|
|
30
|
+
then:
|
|
31
|
+
- <expected outcome>
|
|
32
|
+
verify:
|
|
33
|
+
- type: assertion
|
|
34
|
+
code: "<testable assertion>"
|
|
35
|
+
|
|
36
|
+
# Example modify operation:
|
|
37
|
+
# - op: modify
|
|
38
|
+
# requirement:
|
|
39
|
+
# id: <existing-requirement-id>
|
|
40
|
+
# description: |
|
|
41
|
+
# <complete updated requirement>
|
|
42
|
+
# scenarios:
|
|
43
|
+
# - id: <scenario-id>
|
|
44
|
+
# given: [...]
|
|
45
|
+
# when: [...]
|
|
46
|
+
# then: [...]
|
|
47
|
+
|
|
48
|
+
# Example remove operation:
|
|
49
|
+
# - op: remove
|
|
50
|
+
# requirement:
|
|
51
|
+
# id: <requirement-to-remove>
|
|
52
|
+
|
|
53
|
+
# Example rename operation:
|
|
54
|
+
# - op: rename
|
|
55
|
+
# from: <old-id>
|
|
56
|
+
# to: <new-id>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Design Template
|
|
2
|
+
#
|
|
3
|
+
# Instructions:
|
|
4
|
+
# - Focus on HOW to implement
|
|
5
|
+
# - Include alternatives considered
|
|
6
|
+
# - Only create if change is complex enough
|
|
7
|
+
|
|
8
|
+
id: <change-name>
|
|
9
|
+
schema: <schema-name>
|
|
10
|
+
|
|
11
|
+
agent:
|
|
12
|
+
context_files:
|
|
13
|
+
- <relevant files>
|
|
14
|
+
affected_paths:
|
|
15
|
+
- <paths affected>
|
|
16
|
+
|
|
17
|
+
body:
|
|
18
|
+
context: |
|
|
19
|
+
<Background, current state, constraints>
|
|
20
|
+
|
|
21
|
+
goals:
|
|
22
|
+
- <What this design achieves>
|
|
23
|
+
- <Another goal>
|
|
24
|
+
|
|
25
|
+
non_goals:
|
|
26
|
+
- <What's explicitly out of scope>
|
|
27
|
+
- <Another non-goal>
|
|
28
|
+
|
|
29
|
+
decisions:
|
|
30
|
+
- title: <decision title>
|
|
31
|
+
approach: |
|
|
32
|
+
<Chosen approach and rationale>
|
|
33
|
+
alternatives: |
|
|
34
|
+
<Alternatives considered and why not chosen>
|
|
35
|
+
|
|
36
|
+
- title: <another decision>
|
|
37
|
+
approach: |
|
|
38
|
+
<approach>
|
|
39
|
+
|
|
40
|
+
risks:
|
|
41
|
+
- <Risk and mitigation strategy>
|
|
42
|
+
- <Another risk>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Proposal Template
|
|
2
|
+
#
|
|
3
|
+
# Instructions:
|
|
4
|
+
# - Replace <placeholders> with actual values
|
|
5
|
+
# - Remove comment lines (starting with #) before saving
|
|
6
|
+
# - Keep the structure intact
|
|
7
|
+
|
|
8
|
+
id: <change-name-kebab-case>
|
|
9
|
+
schema: <schema-name>
|
|
10
|
+
created: <YYYY-MM-DD>
|
|
11
|
+
status: active
|
|
12
|
+
|
|
13
|
+
agent:
|
|
14
|
+
priority: <low|medium|high>
|
|
15
|
+
context_files:
|
|
16
|
+
- <file1.ts>
|
|
17
|
+
- <file2.ts>
|
|
18
|
+
affected_paths:
|
|
19
|
+
- <src/path/**>
|
|
20
|
+
hints:
|
|
21
|
+
- <implementation hint>
|
|
22
|
+
|
|
23
|
+
body:
|
|
24
|
+
why: |
|
|
25
|
+
<1-3 sentences explaining the problem and why this change is needed>
|
|
26
|
+
|
|
27
|
+
what_changes:
|
|
28
|
+
- <bullet point describing a change>
|
|
29
|
+
- <another change>
|
|
30
|
+
|
|
31
|
+
capabilities:
|
|
32
|
+
new:
|
|
33
|
+
- id: <capability-id>
|
|
34
|
+
description: <what this capability does>
|
|
35
|
+
modified:
|
|
36
|
+
- id: <existing-capability-id>
|
|
37
|
+
description: <what changed>
|
|
38
|
+
|
|
39
|
+
impact:
|
|
40
|
+
- path: <src/file.ts>
|
|
41
|
+
change: <what changes in this file>
|
|
42
|
+
- path: <src/another.ts>
|
|
43
|
+
change: <description>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: tdd
|
|
2
|
+
version: 1
|
|
3
|
+
description: Test-driven development with RED-GREEN-REFACTOR vertical slices
|
|
4
|
+
|
|
5
|
+
artifacts:
|
|
6
|
+
- id: proposal
|
|
7
|
+
generates: proposal.yaml
|
|
8
|
+
description: Change proposal with testable acceptance criteria
|
|
9
|
+
template: proposal.yaml
|
|
10
|
+
requires: []
|
|
11
|
+
|
|
12
|
+
- id: specs
|
|
13
|
+
generates: specs/*.yaml
|
|
14
|
+
description: Requirements with Gherkin scenarios and test verification blocks
|
|
15
|
+
template: spec.yaml
|
|
16
|
+
requires: [proposal]
|
|
17
|
+
|
|
18
|
+
- id: design-tech
|
|
19
|
+
generates: design-tech.yaml
|
|
20
|
+
description: Technical design with testability decisions and interface contracts
|
|
21
|
+
template: design-tech.yaml
|
|
22
|
+
requires: [specs]
|
|
23
|
+
|
|
24
|
+
- id: tasks
|
|
25
|
+
generates: tasks.yaml
|
|
26
|
+
description: Vertical slice tasks organized as RED-GREEN-REFACTOR per behavior
|
|
27
|
+
template: tasks.yaml
|
|
28
|
+
requires: [specs, design-tech]
|
|
29
|
+
|
|
30
|
+
apply:
|
|
31
|
+
requires: [tasks]
|
|
32
|
+
tracks: tasks.yaml
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Delta Spec Template
|
|
2
|
+
#
|
|
3
|
+
# Instructions:
|
|
4
|
+
# - One file per capability
|
|
5
|
+
# - Use operations: add, modify, remove, rename
|
|
6
|
+
# - Each requirement must have at least one scenario
|
|
7
|
+
# - Add verify blocks for testable assertions
|
|
8
|
+
|
|
9
|
+
capability: <capability-id>
|
|
10
|
+
version: 1
|
|
11
|
+
|
|
12
|
+
agent:
|
|
13
|
+
related_specs:
|
|
14
|
+
- <other-capability>
|
|
15
|
+
affected_paths:
|
|
16
|
+
- <src/auth/**>
|
|
17
|
+
|
|
18
|
+
operations:
|
|
19
|
+
- op: add
|
|
20
|
+
requirement:
|
|
21
|
+
id: <requirement-id>
|
|
22
|
+
description: |
|
|
23
|
+
The system SHALL <behavior description>.
|
|
24
|
+
scenarios:
|
|
25
|
+
- id: <scenario-id>
|
|
26
|
+
given:
|
|
27
|
+
- <precondition>
|
|
28
|
+
when:
|
|
29
|
+
- <action or event>
|
|
30
|
+
then:
|
|
31
|
+
- <expected outcome>
|
|
32
|
+
verify:
|
|
33
|
+
- type: assertion
|
|
34
|
+
code: "<testable assertion>"
|
|
35
|
+
|
|
36
|
+
# Example modify operation:
|
|
37
|
+
# - op: modify
|
|
38
|
+
# requirement:
|
|
39
|
+
# id: <existing-requirement-id>
|
|
40
|
+
# description: |
|
|
41
|
+
# <complete updated requirement>
|
|
42
|
+
# scenarios:
|
|
43
|
+
# - id: <scenario-id>
|
|
44
|
+
# given: [...]
|
|
45
|
+
# when: [...]
|
|
46
|
+
# then: [...]
|
|
47
|
+
|
|
48
|
+
# Example remove operation:
|
|
49
|
+
# - op: remove
|
|
50
|
+
# requirement:
|
|
51
|
+
# id: <requirement-to-remove>
|
|
52
|
+
|
|
53
|
+
# Example rename operation:
|
|
54
|
+
# - op: rename
|
|
55
|
+
# from: <old-id>
|
|
56
|
+
# to: <new-id>
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# TDD Workflow Tasks Template
|
|
2
|
+
#
|
|
3
|
+
# Tasks are structured around the RED → GREEN → REFACTOR loop.
|
|
4
|
+
# Each vertical slice of behavior produces three tasks:
|
|
5
|
+
#
|
|
6
|
+
# RED: Write a failing test that defines the desired behavior
|
|
7
|
+
# GREEN: Write the minimal implementation to pass the test
|
|
8
|
+
# REFACTOR: Clean up both test and implementation
|
|
9
|
+
#
|
|
10
|
+
# The tdd_phase field marks which phase each task belongs to.
|
|
11
|
+
# Tasks without a tdd_phase use the standard task format.
|
|
12
|
+
|
|
13
|
+
workflow: tdd
|
|
14
|
+
|
|
15
|
+
agent:
|
|
16
|
+
critical_path:
|
|
17
|
+
- t1
|
|
18
|
+
- t2
|
|
19
|
+
- t3
|
|
20
|
+
total_estimated_minutes: 120
|
|
21
|
+
|
|
22
|
+
tasks:
|
|
23
|
+
- id: t1
|
|
24
|
+
group: RED
|
|
25
|
+
description: Write failing test for [behavior]
|
|
26
|
+
depends_on: []
|
|
27
|
+
complexity: low
|
|
28
|
+
estimated_minutes: 15
|
|
29
|
+
spec_refs:
|
|
30
|
+
- [capability-id]/REQ-[requirement-id]
|
|
31
|
+
affected_files:
|
|
32
|
+
- test/[path-to-test-file].test.ts
|
|
33
|
+
acceptance:
|
|
34
|
+
- Test compiles and runs
|
|
35
|
+
- Test fails with expected error/message
|
|
36
|
+
- Test name describes the expected behavior
|
|
37
|
+
tdd_phase: red
|
|
38
|
+
status: pending
|
|
39
|
+
|
|
40
|
+
- id: t2
|
|
41
|
+
group: GREEN
|
|
42
|
+
description: Implement minimal code to pass [behavior] test
|
|
43
|
+
depends_on:
|
|
44
|
+
- t1
|
|
45
|
+
complexity: low
|
|
46
|
+
estimated_minutes: 20
|
|
47
|
+
spec_refs:
|
|
48
|
+
- [capability-id]/REQ-[requirement-id]
|
|
49
|
+
affected_files:
|
|
50
|
+
- src/[path-to-implementation].ts
|
|
51
|
+
acceptance:
|
|
52
|
+
- All existing tests still pass
|
|
53
|
+
- New test from t1 now passes
|
|
54
|
+
- Implementation is minimal (no premature optimization)
|
|
55
|
+
- No new failing tests introduced
|
|
56
|
+
tdd_phase: green
|
|
57
|
+
status: pending
|
|
58
|
+
|
|
59
|
+
- id: t3
|
|
60
|
+
group: REFACTOR
|
|
61
|
+
description: Refactor [behavior] implementation and tests
|
|
62
|
+
depends_on:
|
|
63
|
+
- t2
|
|
64
|
+
complexity: medium
|
|
65
|
+
estimated_minutes: 25
|
|
66
|
+
spec_refs:
|
|
67
|
+
- [capability-id]/REQ-[requirement-id]
|
|
68
|
+
affected_files:
|
|
69
|
+
- src/[path-to-implementation].ts
|
|
70
|
+
- test/[path-to-test-file].test.ts
|
|
71
|
+
acceptance:
|
|
72
|
+
- All tests still pass
|
|
73
|
+
- Code follows project conventions
|
|
74
|
+
- No duplicated logic
|
|
75
|
+
- Names and structure are clean
|
|
76
|
+
tdd_phase: refactor
|
|
77
|
+
status: pending
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title><!-- DESIGN: page-title --></title>
|
|
7
|
+
|
|
8
|
+
<!--
|
|
9
|
+
============================================================
|
|
10
|
+
DESIGN: palette
|
|
11
|
+
Inject design-specific CSS variables here.
|
|
12
|
+
Expected variables:
|
|
13
|
+
--color-primary, --color-secondary, --color-accent,
|
|
14
|
+
--color-background, --color-foreground, --color-surface,
|
|
15
|
+
--color-border, --color-muted, --color-success,
|
|
16
|
+
--color-warning, --color-error, --color-info
|
|
17
|
+
============================================================
|
|
18
|
+
-->
|
|
19
|
+
<style>
|
|
20
|
+
:root {
|
|
21
|
+
/* ── Override with design-palette values ── */
|
|
22
|
+
--color-primary: #3B82F6;
|
|
23
|
+
--color-primary-hover: #2563EB;
|
|
24
|
+
--color-secondary: #8B5CF6;
|
|
25
|
+
--color-accent: #F59E0B;
|
|
26
|
+
--color-background: #F9FAFB;
|
|
27
|
+
--color-foreground: #111827;
|
|
28
|
+
--color-surface: #FFFFFF;
|
|
29
|
+
--color-border: #E5E7EB;
|
|
30
|
+
--color-muted: #F3F4F6;
|
|
31
|
+
--color-success: #10B981;
|
|
32
|
+
--color-warning: #F59E0B;
|
|
33
|
+
--color-error: #EF4444;
|
|
34
|
+
--color-info: #3B82F6;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* ── Base reset ── */
|
|
38
|
+
*, *::before, *::after {
|
|
39
|
+
box-sizing: border-box;
|
|
40
|
+
margin: 0;
|
|
41
|
+
padding: 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
body {
|
|
45
|
+
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
46
|
+
font-size: 16px;
|
|
47
|
+
line-height: 1.6;
|
|
48
|
+
color: var(--color-foreground);
|
|
49
|
+
background: var(--color-background);
|
|
50
|
+
-webkit-font-smoothing: antialiased;
|
|
51
|
+
}
|
|
52
|
+
</style>
|
|
53
|
+
|
|
54
|
+
<!--
|
|
55
|
+
============================================================
|
|
56
|
+
DESIGN: typography
|
|
57
|
+
Inject font-face imports, custom font families, and type
|
|
58
|
+
scale overrides here.
|
|
59
|
+
============================================================
|
|
60
|
+
-->
|
|
61
|
+
<style>
|
|
62
|
+
/* ── Type scale (replace with design-typography values) ── */
|
|
63
|
+
h1 { font-size: 2.5rem; font-weight: 700; line-height: 1.2; letter-spacing: -0.025em; }
|
|
64
|
+
h2 { font-size: 2rem; font-weight: 700; line-height: 1.25; letter-spacing: -0.02em; }
|
|
65
|
+
h3 { font-size: 1.5rem; font-weight: 600; line-height: 1.3; letter-spacing: -0.015em; }
|
|
66
|
+
h4 { font-size: 1.25rem;font-weight: 600; line-height: 1.35; letter-spacing: -0.01em; }
|
|
67
|
+
h5 { font-size: 1.125rem;font-weight: 600;line-height: 1.4; letter-spacing: 0em; }
|
|
68
|
+
h6 { font-size: 1rem; font-weight: 600; line-height: 1.45; letter-spacing: 0em; }
|
|
69
|
+
p { font-size: 1rem; font-weight: 400; line-height: 1.6; }
|
|
70
|
+
small { font-size: 0.875rem; font-weight: 400; line-height: 1.5; }
|
|
71
|
+
</style>
|
|
72
|
+
|
|
73
|
+
<!--
|
|
74
|
+
============================================================
|
|
75
|
+
DESIGN: layout
|
|
76
|
+
Inject grid, flex, and responsive layout rules here.
|
|
77
|
+
============================================================
|
|
78
|
+
-->
|
|
79
|
+
<style>
|
|
80
|
+
/* ── Layout containers (replace with design-layout values) ── */
|
|
81
|
+
.container {
|
|
82
|
+
width: 100%;
|
|
83
|
+
max-width: 1200px;
|
|
84
|
+
margin: 0 auto;
|
|
85
|
+
padding: 0 1.5rem;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.grid {
|
|
89
|
+
display: grid;
|
|
90
|
+
gap: 1.5rem;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.flex-row {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-wrap: wrap;
|
|
96
|
+
gap: 1rem;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.flex-col {
|
|
100
|
+
display: flex;
|
|
101
|
+
flex-direction: column;
|
|
102
|
+
gap: 1rem;
|
|
103
|
+
}
|
|
104
|
+
</style>
|
|
105
|
+
|
|
106
|
+
<!--
|
|
107
|
+
============================================================
|
|
108
|
+
DESIGN: components
|
|
109
|
+
Inject component-specific CSS (buttons, cards, inputs,
|
|
110
|
+
navigation, etc.) here.
|
|
111
|
+
============================================================
|
|
112
|
+
-->
|
|
113
|
+
<style>
|
|
114
|
+
/* ── Component styles (replace with design-component values) ── */
|
|
115
|
+
|
|
116
|
+
/* Buttons */
|
|
117
|
+
.btn {
|
|
118
|
+
display: inline-flex;
|
|
119
|
+
align-items: center;
|
|
120
|
+
justify-content: center;
|
|
121
|
+
padding: 0.5rem 1rem;
|
|
122
|
+
font-size: 0.875rem;
|
|
123
|
+
font-weight: 500;
|
|
124
|
+
border: none;
|
|
125
|
+
border-radius: 0.375rem;
|
|
126
|
+
cursor: pointer;
|
|
127
|
+
transition: all 150ms ease;
|
|
128
|
+
text-decoration: none;
|
|
129
|
+
}
|
|
130
|
+
.btn-primary {
|
|
131
|
+
background: var(--color-primary);
|
|
132
|
+
color: #fff;
|
|
133
|
+
}
|
|
134
|
+
.btn-primary:hover {
|
|
135
|
+
background: var(--color-primary-hover);
|
|
136
|
+
}
|
|
137
|
+
.btn-secondary {
|
|
138
|
+
background: var(--color-secondary);
|
|
139
|
+
color: #fff;
|
|
140
|
+
}
|
|
141
|
+
.btn-ghost {
|
|
142
|
+
background: transparent;
|
|
143
|
+
color: var(--color-foreground);
|
|
144
|
+
}
|
|
145
|
+
.btn-ghost:hover {
|
|
146
|
+
background: var(--color-muted);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* Cards */
|
|
150
|
+
.card {
|
|
151
|
+
background: var(--color-surface);
|
|
152
|
+
border: 1px solid var(--color-border);
|
|
153
|
+
border-radius: 0.5rem;
|
|
154
|
+
padding: 1.5rem;
|
|
155
|
+
box-shadow: 0 1px 3px rgba(0,0,0,0.08);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* Inputs */
|
|
159
|
+
.input {
|
|
160
|
+
width: 100%;
|
|
161
|
+
padding: 0.5rem 0.75rem;
|
|
162
|
+
font-size: 0.875rem;
|
|
163
|
+
border: 1px solid var(--color-border);
|
|
164
|
+
border-radius: 0.375rem;
|
|
165
|
+
background: var(--color-surface);
|
|
166
|
+
color: var(--color-foreground);
|
|
167
|
+
transition: border-color 150ms ease;
|
|
168
|
+
}
|
|
169
|
+
.input:focus {
|
|
170
|
+
border-color: var(--color-primary);
|
|
171
|
+
outline: none;
|
|
172
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary) 20%, transparent);
|
|
173
|
+
}
|
|
174
|
+
</style>
|
|
175
|
+
</head>
|
|
176
|
+
<body>
|
|
177
|
+
|
|
178
|
+
<!-- ════════════════════════════════════════════════════════════
|
|
179
|
+
HEADER
|
|
180
|
+
════════════════════════════════════════════════════════════ -->
|
|
181
|
+
<header class="container" style="padding-top: 1rem; padding-bottom: 1rem;">
|
|
182
|
+
<nav class="flex-row" style="align-items: center; justify-content: space-between;">
|
|
183
|
+
<!-- Logo / Brand -->
|
|
184
|
+
<div><!-- DESIGN: logo --></div>
|
|
185
|
+
<!-- Navigation links -->
|
|
186
|
+
<div><!-- DESIGN: nav-links --></div>
|
|
187
|
+
</nav>
|
|
188
|
+
</header>
|
|
189
|
+
|
|
190
|
+
<!-- ════════════════════════════════════════════════════════════
|
|
191
|
+
MAIN CONTENT
|
|
192
|
+
════════════════════════════════════════════════════════════ -->
|
|
193
|
+
<main>
|
|
194
|
+
<!-- ── Hero Section ── -->
|
|
195
|
+
<section id="hero" class="container" style="padding-top: 4rem; padding-bottom: 4rem;">
|
|
196
|
+
<!-- DESIGN: hero-content -->
|
|
197
|
+
</section>
|
|
198
|
+
|
|
199
|
+
<!-- ── Features / Grid Section ── -->
|
|
200
|
+
<section id="features" class="container" style="padding-top: 4rem; padding-bottom: 4rem;">
|
|
201
|
+
<div class="grid" style="grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));">
|
|
202
|
+
<!-- DESIGN: feature-card-1 -->
|
|
203
|
+
<!-- DESIGN: feature-card-2 -->
|
|
204
|
+
<!-- DESIGN: feature-card-3 -->
|
|
205
|
+
</div>
|
|
206
|
+
</section>
|
|
207
|
+
|
|
208
|
+
<!-- ── Content Section ── -->
|
|
209
|
+
<section id="content" class="container" style="padding-top: 4rem; padding-bottom: 4rem;">
|
|
210
|
+
<!-- DESIGN: section-content -->
|
|
211
|
+
</section>
|
|
212
|
+
</main>
|
|
213
|
+
|
|
214
|
+
<!-- ════════════════════════════════════════════════════════════
|
|
215
|
+
FOOTER
|
|
216
|
+
════════════════════════════════════════════════════════════ -->
|
|
217
|
+
<footer class="container" style="padding-top: 2rem; padding-bottom: 2rem; border-top: 1px solid var(--color-border);">
|
|
218
|
+
<div class="flex-row" style="justify-content: space-between;">
|
|
219
|
+
<!-- DESIGN: footer-content -->
|
|
220
|
+
</div>
|
|
221
|
+
</footer>
|
|
222
|
+
|
|
223
|
+
</body>
|
|
224
|
+
</html>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: ui-driven
|
|
2
|
+
version: 1
|
|
3
|
+
description: Spec-driven workflow for frontend/UI work with required design artifacts
|
|
4
|
+
extends: spec-driven
|
|
5
|
+
|
|
6
|
+
artifacts:
|
|
7
|
+
- id: design-html
|
|
8
|
+
generates: design.html
|
|
9
|
+
description: Visual design mockup as a standalone HTML file for human review
|
|
10
|
+
template: design-html.html
|
|
11
|
+
requires: [design-tech]
|
|
12
|
+
|
|
13
|
+
- id: design-wireframe
|
|
14
|
+
generates: design-wireframe.yaml
|
|
15
|
+
description: Page wireframes with layout regions, component placements, and user flows
|
|
16
|
+
template: design-wireframe.yaml
|
|
17
|
+
requires: [design-html]
|
|
18
|
+
|
|
19
|
+
- id: design-hifi
|
|
20
|
+
generates: design-hifi.yaml
|
|
21
|
+
description: High-fidelity design system with color palette, typography, and component library
|
|
22
|
+
template: design-hifi.yaml
|
|
23
|
+
requires: [design-wireframe]
|
|
24
|
+
|
|
25
|
+
- id: tasks
|
|
26
|
+
generates: tasks.yaml
|
|
27
|
+
description: Implementation task list with dependencies
|
|
28
|
+
template: tasks.yaml
|
|
29
|
+
requires: [specs, design-tech, design-hifi]
|
|
30
|
+
|
|
31
|
+
apply:
|
|
32
|
+
requires: [tasks]
|
|
33
|
+
tracks: tasks.yaml
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|