@gluecharm-lab/easyspecs-cli 0.0.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/main.cjs +19663 -0
- package/dist/main.cjs.map +7 -0
- package/package.json +27 -0
- package/resources/opencode-agents/MERMAID.md +20 -0
- package/resources/opencode-agents/README.md +67 -0
- package/resources/opencode-agents/agent-ace-curator.md +31 -0
- package/resources/opencode-agents/agent-ace-reflector.md +16 -0
- package/resources/opencode-agents/agent-ace-trace-recorder.md +33 -0
- package/resources/opencode-agents/agent-add-reference-architecture-md.md +22 -0
- package/resources/opencode-agents/agent-add-reference-project-md.md +21 -0
- package/resources/opencode-agents/agent-classify-unreferenced-file.md +61 -0
- package/resources/opencode-agents/agent-list-data-model.md +243 -0
- package/resources/opencode-agents/agent-list-entity-fields.md +191 -0
- package/resources/opencode-agents/agent-list-experiences.md +252 -0
- package/resources/opencode-agents/agent-list-features.md +218 -0
- package/resources/opencode-agents/agent-list-scenarios.md +179 -0
- package/resources/opencode-agents/agent-list-services.md +208 -0
- package/resources/opencode-agents/agent-list-tech-stack.md +176 -0
- package/resources/opencode-agents/agent-list-use-cases.md +179 -0
- package/resources/opencode-agents/agent-md-architecture.md +139 -0
- package/resources/opencode-agents/agent-md-docs-project.md +172 -0
- package/resources/opencode-agents/agent-md-entity-detail.md +86 -0
- package/resources/opencode-agents/agent-md-feature-detail.md +95 -0
- package/resources/opencode-agents/agent-md-field-detail.md +80 -0
- package/resources/opencode-agents/agent-md-interaction-detail.md +84 -0
- package/resources/opencode-agents/agent-md-method-detail.md +86 -0
- package/resources/opencode-agents/agent-md-relationship-detail.md +80 -0
- package/resources/opencode-agents/agent-md-scenario-detail.md +92 -0
- package/resources/opencode-agents/agent-md-service-detail.md +88 -0
- package/resources/opencode-agents/agent-md-tool-detail.md +82 -0
- package/resources/opencode-agents/agent-md-use-case-detail.md +165 -0
- package/resources/opencode-agents/agent-md-view-detail.md +117 -0
- package/resources/opencode-agents/agent-reference-coverage-execution-report.md +28 -0
- package/resources/opencode-agents/agent-repo-surface-scan.md +136 -0
- package/resources/opencode-agents/agent-resolve-open-question.md +42 -0
- package/resources/opencode-agents/agent-review-data-model-list.md +26 -0
- package/resources/opencode-agents/agent-review-entity-fields-list.md +26 -0
- package/resources/opencode-agents/agent-review-experiences-list.md +72 -0
- package/resources/opencode-agents/agent-review-features-list.md +52 -0
- package/resources/opencode-agents/agent-review-scenarios-list.md +28 -0
- package/resources/opencode-agents/agent-review-services-list.md +26 -0
- package/resources/opencode-agents/agent-review-tech-stack-list.md +26 -0
- package/resources/opencode-agents/agent-review-use-cases-list.md +28 -0
- package/resources/opencode-agents/agent-triage-unreferenced-coordination.md +35 -0
- package/resources/schemas/ace/ace-agent-overlay.schema.json +29 -0
- package/resources/schemas/ace/ace-curator-delta.schema.json +51 -0
- package/resources/schemas/ace/ace-generator-trace.schema.json +134 -0
- package/resources/schemas/ace/ace-playbook.schema.json +36 -0
- package/resources/schemas/ace/ace-reflector-lessons.schema.json +77 -0
- package/resources/schemas/context-lists/coordination-duplicates-report.schema.json +97 -0
- package/resources/schemas/context-lists/coverage-reference-validation.schema.json +125 -0
- package/resources/schemas/context-lists/data-model-list.schema.json +157 -0
- package/resources/schemas/context-lists/entity-fields-list.schema.json +104 -0
- package/resources/schemas/context-lists/experiences-list.schema.json +132 -0
- package/resources/schemas/context-lists/features-list.schema.json +109 -0
- package/resources/schemas/context-lists/repo-surface-scan.schema.json +150 -0
- package/resources/schemas/context-lists/scenarios-list.schema.json +107 -0
- package/resources/schemas/context-lists/services-list.schema.json +132 -0
- package/resources/schemas/context-lists/tech-stack-list.schema.json +108 -0
- package/resources/schemas/context-lists/use-cases-list.schema.json +108 -0
- package/resources/schemas/context-lists/zero-reference-classifier-record.schema.json +61 -0
- package/resources/schemas/context-lists/zero-reference-routing.schema.json +98 -0
- package/resources/schemas/context-lists/zero-reference-triage-record.schema.json +57 -0
- package/resources/schemas/context-lists/zero-reference-triage.schema.json +69 -0
- package/resources/schemas/index-application-context.schema.json +202 -0
- package/resources/schemas/srs-impact.schema.json +187 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: SRS-8 coordination JSON — writes per-use-case scenarios list JSON under .gluecharm/context using file tools.
|
|
3
|
+
mode: primary
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent: Scenarios list (per use case, coordination JSON)
|
|
7
|
+
|
|
8
|
+
| Field | Value |
|
|
9
|
+
| ----- | ----- |
|
|
10
|
+
| **AGENT_ID** | `ctx-list-scenarios` |
|
|
11
|
+
| **Display name** | Scenarios list |
|
|
12
|
+
| **SRS-8** | §4.6 `FE-<nn>_UC-<uu>-scenarios-list.json`; §6.2; **AC6**, **R6**, **R22** |
|
|
13
|
+
| **Output** | `<worktree>/.gluecharm/context/FE-<nn>_UC-<uu>-scenarios-list.json` |
|
|
14
|
+
| **Pattern** | §3.5.2 — JSON list + parent **`FE_CODE`**, **`UC_CODE`** |
|
|
15
|
+
|
|
16
|
+
## Responsibility
|
|
17
|
+
|
|
18
|
+
**`.opencode/` exclusion:** The worktree may contain **`.opencode/`** (materialized OpenCode agents, schemas, and tooling). It is **not** part of the analyzed product codebase. **Do not** use it to infer application behavior. **Never** cite paths under **`.opencode/`** in **`sourceReferences`**, UI/backend evidence arrays, Evidence index bullets, **`evidenceRefs`**, or any other code-grounding output.
|
|
19
|
+
|
|
20
|
+
For one **use case**, emit all **scenarios** (`SC-*`). Barrier for parallel **`FE-<nn>_UC-<uu>_SC-<ss>.md`** detail agents (§6.2).
|
|
21
|
+
|
|
22
|
+
**Cardinality:** For any non-trivial use case, **one scenario is usually too few**. Expect **several** scenarios: at minimum happy path plus meaningful variants (validation failures, auth/permission denials, empty or boundary data, conflicts, retries, optional branches). Treat a single-SC list as a **red flag** unless the use case is truly a single linear path with no testable branches.
|
|
23
|
+
|
|
24
|
+
## Revision
|
|
25
|
+
|
|
26
|
+
Coordination output is **JSON** (no markdown `##` headings in the artifact). Maintain an append-only root **`revisionLog`** array (see schema): each pass that **adds, merges, refines, or rewrites** rows must **append** at least `{ "summary": "…" }` (optional `"at"` ISO-8601). **Never delete** prior `revisionLog` entries. Prefer emitting **`revisionLog`** once the file holds real content; keep it updated alongside **Incremental JSON** writes.
|
|
27
|
+
|
|
28
|
+
## Task (for `{{LIST_TASK_DESCRIPTION}}`)
|
|
29
|
+
|
|
30
|
+
List concrete scenarios (flows, test-like paths, edge cases) for **feature {{FE_CODE}}**, **use case {{UC_CODE}}**. Do not alter parent codes. Aim for **multiple** scenarios when the implementation or tests support distinct paths (see **Cardinality** under Responsibility). Each scenario **must** include **`sourceReferences`** with **`minItems: 1`** (`path`, `startLine`, `endLine`, optional `note`). **`path`** is always one **file**, never a folder; split folder evidence across multiple entries.
|
|
31
|
+
|
|
32
|
+
## JSON Schema (Draft 2020-12)
|
|
33
|
+
|
|
34
|
+
**Bundled file:** `resources/schemas/context-lists/scenarios-list.schema.json`
|
|
35
|
+
**Materialized (`{{LIST_SCHEMA_REF}}` example):** `<worktree>/.opencode/schemas/context-lists/scenarios-list.schema.json`
|
|
36
|
+
|
|
37
|
+
**Output filename:** `FE-<nn>_UC-<uu>-scenarios-list.json` must match **`featureCode`** and **`useCaseCode`**.
|
|
38
|
+
|
|
39
|
+
Emit **only** JSON that validates against this schema:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
44
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/scenarios-list.schema.json",
|
|
45
|
+
"title": "FE-nn_UC-uu-scenarios-list",
|
|
46
|
+
"$defs": {
|
|
47
|
+
"sourceReference": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"additionalProperties": false,
|
|
50
|
+
"required": ["path", "startLine", "endLine"],
|
|
51
|
+
"properties": {
|
|
52
|
+
"path": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"minLength": 1,
|
|
55
|
+
"pattern": "^[^/]+(/[^/]+)*$",
|
|
56
|
+
"description": "Repo-relative path to a single file (forward slashes). Not a directory: no trailing slash; list each file in a folder as its own sourceReferences entry."
|
|
57
|
+
},
|
|
58
|
+
"startLine": {
|
|
59
|
+
"type": "integer",
|
|
60
|
+
"minimum": 1,
|
|
61
|
+
"description": "1-based inclusive start line."
|
|
62
|
+
},
|
|
63
|
+
"endLine": {
|
|
64
|
+
"type": "integer",
|
|
65
|
+
"minimum": 1,
|
|
66
|
+
"description": "1-based inclusive end line; should be >= startLine."
|
|
67
|
+
},
|
|
68
|
+
"note": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "Optional short label for this evidence span."
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"sourceReferenceList": {
|
|
75
|
+
"type": "array",
|
|
76
|
+
"description": "Evidence spans: each item references one file + line range, never a folder path.",
|
|
77
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"type": "object",
|
|
81
|
+
"additionalProperties": false,
|
|
82
|
+
"required": ["featureCode", "useCaseCode", "scenarios"],
|
|
83
|
+
"properties": {
|
|
84
|
+
"kind": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"const": "easyspecs.scenarios-list",
|
|
87
|
+
"description": "Optional coordination document id; when present must be this value."
|
|
88
|
+
},
|
|
89
|
+
"version": {
|
|
90
|
+
"type": "integer",
|
|
91
|
+
"minimum": 1,
|
|
92
|
+
"description": "Optional coordination format version when present."
|
|
93
|
+
},
|
|
94
|
+
"featureCode": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"pattern": "^FE-[0-9]+$",
|
|
97
|
+
"description": "Feature code from features-list.json."
|
|
98
|
+
},
|
|
99
|
+
"useCaseCode": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"pattern": "^UC-[0-9]+$"
|
|
102
|
+
},
|
|
103
|
+
"scenarios": {
|
|
104
|
+
"type": "array",
|
|
105
|
+
"items": {
|
|
106
|
+
"type": "object",
|
|
107
|
+
"additionalProperties": true,
|
|
108
|
+
"required": ["code", "name", "sourceReferences"],
|
|
109
|
+
"properties": {
|
|
110
|
+
"code": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"pattern": "^SC-[0-9]+$"
|
|
113
|
+
},
|
|
114
|
+
"name": { "type": "string", "minLength": 1 },
|
|
115
|
+
"description": { "type": "string" },
|
|
116
|
+
"order": { "type": "integer" },
|
|
117
|
+
"sourceReferences": {
|
|
118
|
+
"type": "array",
|
|
119
|
+
"minItems": 1,
|
|
120
|
+
"description": "Required: at least one file + line range per scenario row.",
|
|
121
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"revisionLog": {
|
|
127
|
+
"type": "array",
|
|
128
|
+
"description": "Append-only log of substantive edits; add an entry whenever this pass changes rows, merges, or refines the coordination file.",
|
|
129
|
+
"items": {
|
|
130
|
+
"type": "object",
|
|
131
|
+
"additionalProperties": false,
|
|
132
|
+
"required": ["summary"],
|
|
133
|
+
"properties": {
|
|
134
|
+
"at": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"description": "ISO-8601 timestamp when known."
|
|
137
|
+
},
|
|
138
|
+
"summary": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"minLength": 1,
|
|
141
|
+
"maxLength": 2000,
|
|
142
|
+
"description": "What was added, changed, or refined in this write."
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Example instance:**
|
|
152
|
+
|
|
153
|
+
```json
|
|
154
|
+
{
|
|
155
|
+
"featureCode": "FE-01",
|
|
156
|
+
"useCaseCode": "UC-01",
|
|
157
|
+
"scenarios": [
|
|
158
|
+
{
|
|
159
|
+
"code": "SC-01",
|
|
160
|
+
"name": "Valid credentials redirect to home",
|
|
161
|
+
"order": 1,
|
|
162
|
+
"sourceReferences": [
|
|
163
|
+
{ "path": "test/e2e/login.spec.ts", "startLine": 10, "endLine": 35, "note": "happy path" }
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
],
|
|
167
|
+
"revisionLog": [
|
|
168
|
+
{ "summary": "Initial scenario list for use case; extend this array on every substantive merge or refinement pass." }
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Prerequisites
|
|
174
|
+
|
|
175
|
+
Corresponding **`FE-<nn>-use-cases-list.json`** exists.
|
|
176
|
+
|
|
177
|
+
## OpenCode wiring
|
|
178
|
+
|
|
179
|
+
§3.5.2; fill **`{{PARENT_CONTEXT_BLOCK}}`** with FE and UC codes.
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: SRS-8 coordination JSON — writes services-list.json under .gluecharm/context using file tools.
|
|
3
|
+
mode: primary
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent: Services list (coordination JSON)
|
|
7
|
+
|
|
8
|
+
| Field | Value |
|
|
9
|
+
| ----- | ----- |
|
|
10
|
+
| **AGENT_ID** | `ctx-list-services` |
|
|
11
|
+
| **Display name** | Services list |
|
|
12
|
+
| **SRS-8** | §4.6 `services-list.json`; §6.4 Service scope; **R6**, **R13**, **R22** |
|
|
13
|
+
| **Output** | `<worktree>/.gluecharm/context/services-list.json` |
|
|
14
|
+
| **Pattern** | §3.5.2 — JSON list (coordination) |
|
|
15
|
+
|
|
16
|
+
## Responsibility
|
|
17
|
+
|
|
18
|
+
**`.opencode/` exclusion:** The worktree may contain **`.opencode/`** (materialized OpenCode agents, schemas, and tooling). It is **not** part of the analyzed product codebase. **Do not** use it to infer application behavior. **Never** cite paths under **`.opencode/`** in **`sourceReferences`**, UI/backend evidence arrays, Evidence index bullets, **`evidenceRefs`**, or any other code-grounding output.
|
|
19
|
+
|
|
20
|
+
Emit **services** (`SV-*`) and **methods** (`ME-*`) as a structured list (methods nested under services or via optional per-service list files per PLAN). Barrier for **`SV-<nn>-<slug>.md`** and **`SV-<nn>_ME-<mm>-<slug>.md`** (§6.4).
|
|
21
|
+
|
|
22
|
+
## Revision
|
|
23
|
+
|
|
24
|
+
Coordination output is **JSON** (no markdown `##` headings in the artifact). Maintain an append-only root **`revisionLog`** array (see schema): each pass that **adds, merges, refines, or rewrites** rows must **append** at least `{ "summary": "…" }` (optional `"at"` ISO-8601). **Never delete** prior `revisionLog` entries. Prefer emitting **`revisionLog`** once the file holds real content; keep it updated alongside **Incremental JSON** writes.
|
|
25
|
+
|
|
26
|
+
## Task (for `{{LIST_TASK_DESCRIPTION}}`)
|
|
27
|
+
|
|
28
|
+
Identify bounded contexts, APIs, backend services, or modules that expose callable operations. Assign stable **`SV-*`** and **`ME-*`** codes and names. Each **service** and each **method** **must** include **`sourceReferences`** with **`minItems: 1`** (`path`, `startLine`, `endLine`, optional `note`). **`path`** must be a **file** path only, not a module directory; one array element per file.
|
|
29
|
+
|
|
30
|
+
## JSON Schema (Draft 2020-12)
|
|
31
|
+
|
|
32
|
+
**Bundled file:** `resources/schemas/context-lists/services-list.schema.json`
|
|
33
|
+
**Materialized (`{{LIST_SCHEMA_REF}}` example):** `<worktree>/.opencode/schemas/context-lists/services-list.schema.json`
|
|
34
|
+
|
|
35
|
+
Emit **only** JSON that validates against this schema:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
40
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/services-list.schema.json",
|
|
41
|
+
"title": "services-list",
|
|
42
|
+
"$defs": {
|
|
43
|
+
"sourceReference": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"additionalProperties": false,
|
|
46
|
+
"required": ["path", "startLine", "endLine"],
|
|
47
|
+
"properties": {
|
|
48
|
+
"path": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"minLength": 1,
|
|
51
|
+
"pattern": "^[^/]+(/[^/]+)*$",
|
|
52
|
+
"description": "Repo-relative path to a single file (forward slashes). Not a directory: no trailing slash; list each file in a folder as its own sourceReferences entry."
|
|
53
|
+
},
|
|
54
|
+
"startLine": {
|
|
55
|
+
"type": "integer",
|
|
56
|
+
"minimum": 1,
|
|
57
|
+
"description": "1-based inclusive start line."
|
|
58
|
+
},
|
|
59
|
+
"endLine": {
|
|
60
|
+
"type": "integer",
|
|
61
|
+
"minimum": 1,
|
|
62
|
+
"description": "1-based inclusive end line; should be >= startLine."
|
|
63
|
+
},
|
|
64
|
+
"note": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"description": "Optional short label for this evidence span."
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"sourceReferenceList": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"description": "Evidence spans: each item references one file + line range, never a folder path.",
|
|
73
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
74
|
+
},
|
|
75
|
+
"methodItem": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"additionalProperties": true,
|
|
78
|
+
"required": ["code", "name", "sourceReferences"],
|
|
79
|
+
"properties": {
|
|
80
|
+
"code": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"pattern": "^ME-[0-9]+$"
|
|
83
|
+
},
|
|
84
|
+
"name": { "type": "string", "minLength": 1 },
|
|
85
|
+
"slug": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
88
|
+
"description": "Recommended for SV-<nn>_ME-<mm>-<slug>.md detail basenames."
|
|
89
|
+
},
|
|
90
|
+
"description": { "type": "string" },
|
|
91
|
+
"order": { "type": "integer" },
|
|
92
|
+
"sourceReferences": {
|
|
93
|
+
"type": "array",
|
|
94
|
+
"minItems": 1,
|
|
95
|
+
"description": "Required: at least one file + line range per method row.",
|
|
96
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"type": "object",
|
|
102
|
+
"additionalProperties": false,
|
|
103
|
+
"required": ["services"],
|
|
104
|
+
"properties": {
|
|
105
|
+
"kind": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"const": "easyspecs.services-list",
|
|
108
|
+
"description": "Optional coordination document id; when present must be this value."
|
|
109
|
+
},
|
|
110
|
+
"version": {
|
|
111
|
+
"type": "integer",
|
|
112
|
+
"minimum": 1,
|
|
113
|
+
"description": "Optional coordination format version when present."
|
|
114
|
+
},
|
|
115
|
+
"services": {
|
|
116
|
+
"type": "array",
|
|
117
|
+
"items": {
|
|
118
|
+
"type": "object",
|
|
119
|
+
"additionalProperties": true,
|
|
120
|
+
"required": ["code", "name", "sourceReferences"],
|
|
121
|
+
"properties": {
|
|
122
|
+
"code": {
|
|
123
|
+
"type": "string",
|
|
124
|
+
"pattern": "^SV-[0-9]+$"
|
|
125
|
+
},
|
|
126
|
+
"name": { "type": "string", "minLength": 1 },
|
|
127
|
+
"slug": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
130
|
+
"description": "Recommended for SV-<nn>-<slug>.md detail basenames."
|
|
131
|
+
},
|
|
132
|
+
"description": { "type": "string" },
|
|
133
|
+
"order": { "type": "integer" },
|
|
134
|
+
"sourceReferences": {
|
|
135
|
+
"type": "array",
|
|
136
|
+
"minItems": 1,
|
|
137
|
+
"description": "Required: at least one file + line range per service row.",
|
|
138
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
139
|
+
},
|
|
140
|
+
"methods": {
|
|
141
|
+
"type": "array",
|
|
142
|
+
"items": { "$ref": "#/$defs/methodItem" }
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"revisionLog": {
|
|
148
|
+
"type": "array",
|
|
149
|
+
"description": "Append-only log of substantive edits; add an entry whenever this pass changes rows, merges, or refines the coordination file.",
|
|
150
|
+
"items": {
|
|
151
|
+
"type": "object",
|
|
152
|
+
"additionalProperties": false,
|
|
153
|
+
"required": ["summary"],
|
|
154
|
+
"properties": {
|
|
155
|
+
"at": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"description": "ISO-8601 timestamp when known."
|
|
158
|
+
},
|
|
159
|
+
"summary": {
|
|
160
|
+
"type": "string",
|
|
161
|
+
"minLength": 1,
|
|
162
|
+
"maxLength": 2000,
|
|
163
|
+
"description": "What was added, changed, or refined in this write."
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Example instance:**
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"services": [
|
|
177
|
+
{
|
|
178
|
+
"code": "SV-01",
|
|
179
|
+
"name": "Auth API",
|
|
180
|
+
"slug": "auth-api",
|
|
181
|
+
"sourceReferences": [
|
|
182
|
+
{ "path": "src/api/auth/index.ts", "startLine": 1, "endLine": 60, "note": "service module" }
|
|
183
|
+
],
|
|
184
|
+
"methods": [
|
|
185
|
+
{
|
|
186
|
+
"code": "ME-01",
|
|
187
|
+
"name": "POST /login",
|
|
188
|
+
"slug": "post-login",
|
|
189
|
+
"sourceReferences": [
|
|
190
|
+
{ "path": "src/api/auth/index.ts", "startLine": 100, "endLine": 180, "note": "login route" }
|
|
191
|
+
]
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
],
|
|
196
|
+
"revisionLog": [
|
|
197
|
+
{ "summary": "Initial services/methods discovery; extend this array on every substantive merge or refinement pass." }
|
|
198
|
+
]
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Barriers
|
|
203
|
+
|
|
204
|
+
After this list is valid, parallel service markdown and (once ME codes are fixed) method markdown agents may run.
|
|
205
|
+
|
|
206
|
+
## OpenCode wiring
|
|
207
|
+
|
|
208
|
+
§3.5.2; enforce single JSON output path. No writes to `index-application-context.json`.
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: SRS-8 coordination JSON — writes tech-stack-list.json under .gluecharm/context using file tools.
|
|
3
|
+
mode: primary
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent: Tech stack list (coordination JSON)
|
|
7
|
+
|
|
8
|
+
| Field | Value |
|
|
9
|
+
| ----- | ----- |
|
|
10
|
+
| **AGENT_ID** | `ctx-list-tech-stack` |
|
|
11
|
+
| **Display name** | Tech stack list |
|
|
12
|
+
| **SRS-8** | §4.6 `tech-stack-list.json`; §6.6 Tech stack scope; **R6**, **R13**, **R22** |
|
|
13
|
+
| **Output** | `<worktree>/.gluecharm/context/tech-stack-list.json` |
|
|
14
|
+
| **Pattern** | §3.5.2 — JSON list (coordination) |
|
|
15
|
+
|
|
16
|
+
## Responsibility
|
|
17
|
+
|
|
18
|
+
**`.opencode/` exclusion:** The worktree may contain **`.opencode/`** (materialized OpenCode agents, schemas, and tooling). It is **not** part of the analyzed product codebase. **Do not** use it to infer application behavior. **Never** cite paths under **`.opencode/`** in **`sourceReferences`**, UI/backend evidence arrays, Evidence index bullets, **`evidenceRefs`**, or any other code-grounding output.
|
|
19
|
+
|
|
20
|
+
Emit **tools** (`TS-*`): languages, frameworks, infra, key libraries. Usually one level of detail; PLAN may add depth. Barrier for parallel **`TS-<nn>-<slug>.md`** (§6.6).
|
|
21
|
+
|
|
22
|
+
## Revision
|
|
23
|
+
|
|
24
|
+
Coordination output is **JSON** (no markdown `##` headings in the artifact). Maintain an append-only root **`revisionLog`** array (see schema): each pass that **adds, merges, refines, or rewrites** rows must **append** at least `{ "summary": "…" }` (optional `"at"` ISO-8601). **Never delete** prior `revisionLog` entries. Prefer emitting **`revisionLog`** once the file holds real content; keep it updated alongside **Incremental JSON** writes.
|
|
25
|
+
|
|
26
|
+
## Task (for `{{LIST_TASK_DESCRIPTION}}`)
|
|
27
|
+
|
|
28
|
+
Inventory the technology stack from manifest files, configs, and repo structure. Each tool gets a stable **`TS-<nn>`** code and **`name`**. Each tool **must** include **`sourceReferences`**: a non-empty array (`minItems: 1`) of `{ path, startLine, endLine, note? }` — **`path`** must name a **file** (e.g. `package.json`, `pnpm-lock.yaml`), never a directory; use several entries if evidence spans multiple files.
|
|
29
|
+
|
|
30
|
+
## JSON Schema (Draft 2020-12)
|
|
31
|
+
|
|
32
|
+
**Bundled file:** `resources/schemas/context-lists/tech-stack-list.schema.json`
|
|
33
|
+
**Materialized (`{{LIST_SCHEMA_REF}}` example):** `<worktree>/.opencode/schemas/context-lists/tech-stack-list.schema.json`
|
|
34
|
+
|
|
35
|
+
Emit **only** JSON that validates against this schema:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
40
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/tech-stack-list.schema.json",
|
|
41
|
+
"title": "tech-stack-list",
|
|
42
|
+
"$defs": {
|
|
43
|
+
"sourceReference": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"additionalProperties": false,
|
|
46
|
+
"required": ["path", "startLine", "endLine"],
|
|
47
|
+
"properties": {
|
|
48
|
+
"path": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"minLength": 1,
|
|
51
|
+
"pattern": "^[^/]+(/[^/]+)*$",
|
|
52
|
+
"description": "Repo-relative path to a single file (forward slashes). Not a directory: no trailing slash; list each file in a folder as its own sourceReferences entry."
|
|
53
|
+
},
|
|
54
|
+
"startLine": {
|
|
55
|
+
"type": "integer",
|
|
56
|
+
"minimum": 1,
|
|
57
|
+
"description": "1-based inclusive start line."
|
|
58
|
+
},
|
|
59
|
+
"endLine": {
|
|
60
|
+
"type": "integer",
|
|
61
|
+
"minimum": 1,
|
|
62
|
+
"description": "1-based inclusive end line; should be >= startLine."
|
|
63
|
+
},
|
|
64
|
+
"note": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"description": "Optional short label for this evidence span."
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"sourceReferenceList": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"description": "Evidence spans: each item references one file + line range, never a folder path.",
|
|
73
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"type": "object",
|
|
77
|
+
"additionalProperties": false,
|
|
78
|
+
"required": ["tools"],
|
|
79
|
+
"properties": {
|
|
80
|
+
"kind": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"const": "easyspecs.tech-stack-list",
|
|
83
|
+
"description": "Optional coordination document id; when present must be this value."
|
|
84
|
+
},
|
|
85
|
+
"version": {
|
|
86
|
+
"type": "integer",
|
|
87
|
+
"minimum": 1,
|
|
88
|
+
"description": "Optional coordination format version when present."
|
|
89
|
+
},
|
|
90
|
+
"tools": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"items": {
|
|
93
|
+
"type": "object",
|
|
94
|
+
"additionalProperties": true,
|
|
95
|
+
"required": ["code", "name", "sourceReferences"],
|
|
96
|
+
"properties": {
|
|
97
|
+
"code": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"pattern": "^TS-[0-9]+$"
|
|
100
|
+
},
|
|
101
|
+
"name": { "type": "string", "minLength": 1 },
|
|
102
|
+
"slug": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
105
|
+
"description": "Recommended for TS-<nn>-<slug>.md detail basenames."
|
|
106
|
+
},
|
|
107
|
+
"category": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"description": "e.g. runtime, framework, infra, library"
|
|
110
|
+
},
|
|
111
|
+
"version": { "type": "string", "description": "Tool or library version string (not coordination `version`)." },
|
|
112
|
+
"description": { "type": "string" },
|
|
113
|
+
"order": { "type": "integer" },
|
|
114
|
+
"sourceReferences": {
|
|
115
|
+
"type": "array",
|
|
116
|
+
"minItems": 1,
|
|
117
|
+
"description": "Required: at least one repo file + line range grounding this tool (e.g. package.json, lockfile, tsconfig).",
|
|
118
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"revisionLog": {
|
|
124
|
+
"type": "array",
|
|
125
|
+
"description": "Append-only log of substantive edits; add an entry whenever this pass changes rows, merges, or refines the coordination file.",
|
|
126
|
+
"items": {
|
|
127
|
+
"type": "object",
|
|
128
|
+
"additionalProperties": false,
|
|
129
|
+
"required": ["summary"],
|
|
130
|
+
"properties": {
|
|
131
|
+
"at": {
|
|
132
|
+
"type": "string",
|
|
133
|
+
"description": "ISO-8601 timestamp when known."
|
|
134
|
+
},
|
|
135
|
+
"summary": {
|
|
136
|
+
"type": "string",
|
|
137
|
+
"minLength": 1,
|
|
138
|
+
"maxLength": 2000,
|
|
139
|
+
"description": "What was added, changed, or refined in this write."
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Example instance:**
|
|
149
|
+
|
|
150
|
+
```json
|
|
151
|
+
{
|
|
152
|
+
"tools": [
|
|
153
|
+
{
|
|
154
|
+
"code": "TS-01",
|
|
155
|
+
"name": "TypeScript",
|
|
156
|
+
"slug": "typescript",
|
|
157
|
+
"category": "language",
|
|
158
|
+
"version": "5.x",
|
|
159
|
+
"sourceReferences": [
|
|
160
|
+
{ "path": "package.json", "startLine": 1, "endLine": 80, "note": "devDependencies" }
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
],
|
|
164
|
+
"revisionLog": [
|
|
165
|
+
{ "summary": "Initial tech-stack discovery; extend this array on every substantive merge or refinement pass." }
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Barriers
|
|
171
|
+
|
|
172
|
+
After this file is valid, parallel tool detail markdown agents may run.
|
|
173
|
+
|
|
174
|
+
## OpenCode wiring
|
|
175
|
+
|
|
176
|
+
§3.5.2. Single JSON output file only.
|