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.
Files changed (30) hide show
  1. package/dist/plugin/engine/types.d.ts +1 -0
  2. package/dist/plugin/engine/types.d.ts.map +1 -1
  3. package/dist/plugin/tools/spec-artifact-instr.d.ts +10 -0
  4. package/dist/plugin/tools/spec-artifact-instr.d.ts.map +1 -1
  5. package/dist/plugin/tools/spec-artifact-instr.js +40 -1
  6. package/dist/plugin/tools/spec-artifact-instr.js.map +1 -1
  7. package/dist/plugin/tools/util.d.ts.map +1 -1
  8. package/dist/plugin/tools/util.js +2 -0
  9. package/dist/plugin/tools/util.js.map +1 -1
  10. package/package.json +1 -1
  11. package/src/schemas/ui-driven.yaml +1 -0
  12. package/src/templates/hybrid/schema.yaml +32 -0
  13. package/src/templates/hybrid/tasks.yaml +103 -0
  14. package/src/templates/spec-driven/design-tech.yaml +42 -0
  15. package/src/templates/spec-driven/proposal.yaml +43 -0
  16. package/src/templates/spec-driven/schema.yaml +32 -0
  17. package/src/templates/spec-driven/spec.yaml +56 -0
  18. package/src/templates/tdd/design-tech.yaml +42 -0
  19. package/src/templates/tdd/proposal.yaml +43 -0
  20. package/src/templates/tdd/schema.yaml +32 -0
  21. package/src/templates/tdd/spec.yaml +56 -0
  22. package/src/templates/tdd/tasks.yaml +77 -0
  23. package/src/templates/ui-driven/design-html.html +224 -0
  24. package/src/templates/ui-driven/schema.yaml +33 -0
  25. /package/src/templates/{design-tech.yaml → hybrid/design-tech.yaml} +0 -0
  26. /package/src/templates/{proposal.yaml → hybrid/proposal.yaml} +0 -0
  27. /package/src/templates/{spec.yaml → hybrid/spec.yaml} +0 -0
  28. /package/src/templates/{tasks.yaml → spec-driven/tasks.yaml} +0 -0
  29. /package/src/templates/{design-hifi.yaml → ui-driven/design-hifi.yaml} +0 -0
  30. /package/src/templates/{design-wireframe.yaml → ui-driven/design-wireframe.yaml} +0 -0
@@ -8,6 +8,7 @@ export interface Schema {
8
8
  version: number;
9
9
  description?: string;
10
10
  extends?: string;
11
+ inheritance_chain?: string[];
11
12
  artifacts: ArtifactDef[];
12
13
  apply: ApplyDef;
13
14
  }
@@ -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":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAOxD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6E1G"}
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 = `${assetRoot(ctx.pluginDir)}/templates/${artifactDef.template}`;
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":"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"}
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,CAyC3G"}
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;SACrB,CAAA;QAED,kEAAkE;QAClE,KAAK,MAAM,aAAa,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC,CAAA;YAChF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,aAAa,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACtC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/plugin/tools/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arggon-harness",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Spec-driven SDLC workflow for OpenCode — plugin, skills, commands, and init system",
5
5
  "type": "module",
6
6
  "main": "dist/plugin/index.js",
@@ -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