@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,191 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: SRS-8 coordination JSON — writes per-entity DM-nn-fields-list.json under .gluecharm/context using file tools.
|
|
3
|
+
mode: primary
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent: Entity fields list (per entity, coordination JSON)
|
|
7
|
+
|
|
8
|
+
| Field | Value |
|
|
9
|
+
| ----- | ----- |
|
|
10
|
+
| **AGENT_ID** | `ctx-list-entity-fields` |
|
|
11
|
+
| **Display name** | Entity fields list |
|
|
12
|
+
| **SRS-8** | §4.6 `DM-<nn>-fields-list.json`; §6.5 Data model scope; **R6**, **R22** |
|
|
13
|
+
| **Output** | `<worktree>/.gluecharm/context/DM-<nn>-fields-list.json` (one run per entity) |
|
|
14
|
+
| **Pattern** | §3.5.2 — JSON list + **`{{PARENT_CONTEXT_BLOCK}}`** with **`DM_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 entity** already fixed in `data-model-list.json`, emit all **fields** (`FD-*`) with stable codes, names, URL-safe **slugs** for detail markdown basenames **`DM-<nn>_FD-<ff>-<slug>.md`**, and **mandatory `sourceReferences`** on **every** field row (same object shape as features / entities / other coordination lists). Barrier for **field detail** markdown runs.
|
|
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** field 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
|
+
The orchestrator fills the task line with the target **DM-** code and output basename. Enumerate attributes, columns, or properties for **that entity only**. Do not change **`entityCode`**.
|
|
29
|
+
|
|
30
|
+
### `sourceReferences` (required per field)
|
|
31
|
+
|
|
32
|
+
- **Every** object in **`fields`** **must** include **`sourceReferences`**: a non-empty array (`minItems: 1`).
|
|
33
|
+
- Each element: **`path`** (single repo-relative **file**, forward slashes, **never** a directory or trailing slash), **`startLine`**, **`endLine`** (1-based inclusive), optional **`note`**.
|
|
34
|
+
- Cite schema, ORM models, migrations, DTOs, or types that justify the field — not narrative-only docs.
|
|
35
|
+
- **Do not** use any path whose **basename** is `readme.md` in any casing (`README.md`, etc.).
|
|
36
|
+
- **Do not** use paths under **`.opencode/`** (see **`.opencode/` exclusion** above).
|
|
37
|
+
|
|
38
|
+
## JSON Schema (Draft 2020-12)
|
|
39
|
+
|
|
40
|
+
**Bundled file:** `resources/schemas/context-lists/entity-fields-list.schema.json`
|
|
41
|
+
**Materialized (`{{LIST_SCHEMA_REF}}` example):** `<worktree>/.opencode/schemas/context-lists/entity-fields-list.schema.json`
|
|
42
|
+
|
|
43
|
+
**Output filename:** `DM-<nn>-fields-list.json` must match **`entityCode`** (e.g. `DM-01` → `DM-01-fields-list.json`).
|
|
44
|
+
|
|
45
|
+
**Keep this embedded block identical** to the bundled `.schema.json` (maintainer rule). Emit **only** JSON that validates (UTF-8, no comments):
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
50
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/entity-fields-list.schema.json",
|
|
51
|
+
"title": "DM-nn-fields-list",
|
|
52
|
+
"$defs": {
|
|
53
|
+
"sourceReference": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": false,
|
|
56
|
+
"required": ["path", "startLine", "endLine"],
|
|
57
|
+
"properties": {
|
|
58
|
+
"path": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"minLength": 1,
|
|
61
|
+
"pattern": "^[^/]+(/[^/]+)*$",
|
|
62
|
+
"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."
|
|
63
|
+
},
|
|
64
|
+
"startLine": {
|
|
65
|
+
"type": "integer",
|
|
66
|
+
"minimum": 1,
|
|
67
|
+
"description": "1-based inclusive start line."
|
|
68
|
+
},
|
|
69
|
+
"endLine": {
|
|
70
|
+
"type": "integer",
|
|
71
|
+
"minimum": 1,
|
|
72
|
+
"description": "1-based inclusive end line; should be >= startLine."
|
|
73
|
+
},
|
|
74
|
+
"note": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"description": "Optional short label for this evidence span."
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"type": "object",
|
|
82
|
+
"additionalProperties": false,
|
|
83
|
+
"required": ["entityCode", "fields"],
|
|
84
|
+
"properties": {
|
|
85
|
+
"kind": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"const": "easyspecs.entity-fields-list",
|
|
88
|
+
"description": "Optional coordination document id; when present must be this value."
|
|
89
|
+
},
|
|
90
|
+
"version": {
|
|
91
|
+
"type": "integer",
|
|
92
|
+
"minimum": 1,
|
|
93
|
+
"description": "Optional coordination format version when present."
|
|
94
|
+
},
|
|
95
|
+
"entityCode": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"pattern": "^DM-[0-9]+$",
|
|
98
|
+
"description": "Must match the entity row in data-model-list.json and the output basename DM-nn-fields-list.json."
|
|
99
|
+
},
|
|
100
|
+
"fields": {
|
|
101
|
+
"type": "array",
|
|
102
|
+
"description": "Each field must include implementation evidence via sourceReferences (same shape as other coordination lists).",
|
|
103
|
+
"items": {
|
|
104
|
+
"type": "object",
|
|
105
|
+
"additionalProperties": false,
|
|
106
|
+
"required": ["code", "name", "slug", "sourceReferences"],
|
|
107
|
+
"properties": {
|
|
108
|
+
"code": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"pattern": "^FD-[0-9]+$"
|
|
111
|
+
},
|
|
112
|
+
"name": { "type": "string", "minLength": 1 },
|
|
113
|
+
"slug": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
116
|
+
"description": "URL-safe slug for DM-nn_FD-ff-<slug>.md detail basename."
|
|
117
|
+
},
|
|
118
|
+
"description": { "type": "string" },
|
|
119
|
+
"order": { "type": "integer" },
|
|
120
|
+
"sourceReferences": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"minItems": 1,
|
|
123
|
+
"description": "At least one file + line span per field; each path is a single repo file (never a directory). Do not use readme.md basenames.",
|
|
124
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"revisionLog": {
|
|
130
|
+
"type": "array",
|
|
131
|
+
"description": "Append-only log of substantive edits; add an entry whenever this pass changes rows, merges, or refines the coordination file.",
|
|
132
|
+
"items": {
|
|
133
|
+
"type": "object",
|
|
134
|
+
"additionalProperties": false,
|
|
135
|
+
"required": ["summary"],
|
|
136
|
+
"properties": {
|
|
137
|
+
"at": {
|
|
138
|
+
"type": "string",
|
|
139
|
+
"description": "ISO-8601 timestamp when known."
|
|
140
|
+
},
|
|
141
|
+
"summary": {
|
|
142
|
+
"type": "string",
|
|
143
|
+
"minLength": 1,
|
|
144
|
+
"maxLength": 2000,
|
|
145
|
+
"description": "What was added, changed, or refined in this write."
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Example instance:**
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"entityCode": "DM-01",
|
|
159
|
+
"fields": [
|
|
160
|
+
{
|
|
161
|
+
"code": "FD-01",
|
|
162
|
+
"name": "email",
|
|
163
|
+
"slug": "email",
|
|
164
|
+
"description": "User login email",
|
|
165
|
+
"sourceReferences": [
|
|
166
|
+
{
|
|
167
|
+
"path": "prisma/schema.prisma",
|
|
168
|
+
"startLine": 12,
|
|
169
|
+
"endLine": 18,
|
|
170
|
+
"note": "User model column"
|
|
171
|
+
}
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
"revisionLog": [
|
|
176
|
+
{ "summary": "Initial field list for entity; extend this array on every substantive merge or refinement pass." }
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Output rules
|
|
182
|
+
|
|
183
|
+
- Write exactly one file at **`{{OUTPUT_FILE_ABSOLUTE}}`**.
|
|
184
|
+
- Set **`entityCode`** to the **DM-** code from the parent context block (must match the basename prefix).
|
|
185
|
+
- Use sequential **FD-01**, **FD-02**, … unless the repo already uses stable FD codes—then preserve them.
|
|
186
|
+
- **Slug** must match `^[a-z0-9]+(?:-[a-z0-9]+)*$` (lowercase, hyphens).
|
|
187
|
+
- If **`fields`** is empty (`[]`), no row-level **`sourceReferences`** are required (valid for entities with no persisted attributes found).
|
|
188
|
+
|
|
189
|
+
## OpenCode wiring
|
|
190
|
+
|
|
191
|
+
Bind this logical agent to your OpenCode CLI. Supply **`{{LIST_SCHEMA_REF}}`**, **`{{WORKTREE_ROOT}}`**, **`{{OUTPUT_FILE_ABSOLUTE}}`**, **`{{OUTPUT_BASENAME}}`**, **`{{PARENT_CONTEXT_BLOCK}}`**. Do **not** write `index-application-context.json`.
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: SRS-8 coordination JSON — writes experiences-list.json under .gluecharm/context; repo-grounded views (web, desktop, CLI/TUI, hybrid); no invented surfaces.
|
|
3
|
+
mode: primary
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent: Experiences list (coordination JSON)
|
|
7
|
+
|
|
8
|
+
| Field | Value |
|
|
9
|
+
| ----- | ----- |
|
|
10
|
+
| **AGENT_ID** | `ctx-list-experiences` |
|
|
11
|
+
| **Display name** | Experiences list |
|
|
12
|
+
| **SRS-8** | §4.6 `experiences-list.json`; §6.3 Experience scope; §6.1 parallel with other global lists; **R6**, **R13**, **R22** |
|
|
13
|
+
| **Output** | `<worktree>/.gluecharm/context/experiences-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 **views** (`XP-*`) and their **interactions** (`BH-*`) in a machine-readable tree or structure agreed by PLAN (nested under views or flat with parent references). This list is the barrier for parallel **`XP-<nn>-<slug>.md`** and then **`XP-<nn>_BH-<ii>-<slug>.md`** (§6.3).
|
|
21
|
+
|
|
22
|
+
A **view** is any **distinct user-facing surface** the repository actually implements: graphical windows/pages, **terminal / CLI flows** (subcommands, prompts, help surfaces), **TUIs**, IDE/extension panels, etc. **Do not assume** a browser SPA or a single “routes folder” mental model.
|
|
23
|
+
|
|
24
|
+
**Grounding rule:** Every **`XP-*`** and **`BH-*`** you emit must be **supportable from product source files** via **`sourceReferences`** with **`minItems: 1`** (one file per array entry, line range)—**not** from **`.opencode/`** or other tooling-only paths (see **`.opencode/` exclusion** above). If you cannot point to implementation or definitive wiring (e.g. form unit, route file, CLI dispatcher, contribution manifest), **omit** that view or interaction—do not invent placeholders to match a generic app shape.
|
|
25
|
+
|
|
26
|
+
## Reasoning workflow (mandatory order)
|
|
27
|
+
|
|
28
|
+
Follow this sequence before fixing codes and writing JSON. Skipping it produces **hallucinated views** (especially fake routes or screens).
|
|
29
|
+
|
|
30
|
+
### 1. Classify UI paradigm(s)
|
|
31
|
+
|
|
32
|
+
From **`{{WORKTREE_ROOT}}`** (projects, packages, entrypoints, frameworks—**not** assumptions), decide which apply:
|
|
33
|
+
|
|
34
|
+
- **Web** (browser): SPA, SSR, static site, server templates.
|
|
35
|
+
- **Desktop GUI**: Electron, Qt, WPF, WinForms, **Embarcadero Delphi / VCL / FMX**, etc.
|
|
36
|
+
- **CLI**: binaries, scripted tools, multi-command CLIs, interactive prompts.
|
|
37
|
+
- **TUI**: ncurses-style or modern terminal UIs.
|
|
38
|
+
- **Hybrid**: e.g. desktop + embedded webview; CLI + optional GUI.
|
|
39
|
+
- **No end-user UI in-repo** (library, pure backend): emit **only** what the schema and PLAN allow—typically **no** fabricated XP rows; if the product is “used via API only,” say so in `revisionLog` and keep the list minimal or empty per schema.
|
|
40
|
+
|
|
41
|
+
### 2. Map where “views” live for each paradigm
|
|
42
|
+
|
|
43
|
+
| Paradigm | Where to look (verify; examples only) |
|
|
44
|
+
| -------- | ------------------------------------- |
|
|
45
|
+
| Web | Router config, page/layout components, app entry, templates |
|
|
46
|
+
| Desktop (generic) | Main window, scenes, XAML/storyboards, window classes |
|
|
47
|
+
| **Delphi (Object Pascal)** | **`.dproj` / `.dpr`** → units; **forms**: **`.dfm`** + matching **`.pas`**; frames/datamodules may compose surfaces—trace **user-openable** forms/dialogs/wizards, not every internal module unless it is itself an interactive surface |
|
|
48
|
+
| CLI | Entrypoint, command/subcommand registration, flag definitions, help text sources |
|
|
49
|
+
| TUI | Screen definitions, panels, keybinding maps |
|
|
50
|
+
| VS Code / extension | `package.json` `contributes`, webview registration, command IDs |
|
|
51
|
+
|
|
52
|
+
Discovery for Delphi and many desktop stacks is **not linear** (unlike “one routes file”). Follow project and unit references until each claimed view has a **concrete** file span.
|
|
53
|
+
|
|
54
|
+
### 3. Enumerate views and interactions from evidence
|
|
55
|
+
|
|
56
|
+
- Name views by **what the user actually encounters** (e.g. “Main window”, “`migrate` subcommand”, “Settings dialog”).
|
|
57
|
+
- Under each view, list **`BH-*`** interactions grounded in handlers, menu actions, CLI verbs, or control event code.
|
|
58
|
+
- Prefer **fewer, verifiable** rows over a large speculative catalog.
|
|
59
|
+
|
|
60
|
+
### 4. Emit schema-valid JSON
|
|
61
|
+
|
|
62
|
+
Assign stable **`code`** values per srs-4 Experience scope, fill **`sourceReferences`** for views and interactions, maintain **`revisionLog`**.
|
|
63
|
+
|
|
64
|
+
## Revision
|
|
65
|
+
|
|
66
|
+
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.
|
|
67
|
+
|
|
68
|
+
## Task (for `{{LIST_TASK_DESCRIPTION}}`)
|
|
69
|
+
|
|
70
|
+
Run the **reasoning workflow**, then discover **only** user-facing surfaces and interactions **evidenced in the repo**. Assign stable **`code`** values consistent with srs-4 Experience scope.
|
|
71
|
+
|
|
72
|
+
On each **view** (`XP-*`) and **interaction** (`BH-*`), include **`sourceReferences`** with **`minItems: 1`**: `path`, `startLine`, `endLine`, optional `note` (e.g. form unit + key procedure, route/component file, CLI dispatcher line range, `contributes.commands` span). Each **`path`** is one **file**, never a folder; enumerate files separately. If you cannot ground a row, **omit** it—do not emit views or interactions without evidence.
|
|
73
|
+
|
|
74
|
+
## JSON Schema (Draft 2020-12)
|
|
75
|
+
|
|
76
|
+
**Bundled file:** `resources/schemas/context-lists/experiences-list.schema.json`
|
|
77
|
+
**Materialized (`{{LIST_SCHEMA_REF}}` example):** `<worktree>/.opencode/schemas/context-lists/experiences-list.schema.json`
|
|
78
|
+
|
|
79
|
+
Emit **only** JSON that validates against this schema:
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
84
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/experiences-list.schema.json",
|
|
85
|
+
"title": "experiences-list",
|
|
86
|
+
"$defs": {
|
|
87
|
+
"sourceReference": {
|
|
88
|
+
"type": "object",
|
|
89
|
+
"additionalProperties": false,
|
|
90
|
+
"required": ["path", "startLine", "endLine"],
|
|
91
|
+
"properties": {
|
|
92
|
+
"path": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"minLength": 1,
|
|
95
|
+
"pattern": "^[^/]+(/[^/]+)*$",
|
|
96
|
+
"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."
|
|
97
|
+
},
|
|
98
|
+
"startLine": {
|
|
99
|
+
"type": "integer",
|
|
100
|
+
"minimum": 1,
|
|
101
|
+
"description": "1-based inclusive start line."
|
|
102
|
+
},
|
|
103
|
+
"endLine": {
|
|
104
|
+
"type": "integer",
|
|
105
|
+
"minimum": 1,
|
|
106
|
+
"description": "1-based inclusive end line; should be >= startLine."
|
|
107
|
+
},
|
|
108
|
+
"note": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"description": "Optional short label for this evidence span."
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"sourceReferenceList": {
|
|
115
|
+
"type": "array",
|
|
116
|
+
"description": "Evidence spans: each item references one file + line range, never a folder path.",
|
|
117
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
118
|
+
},
|
|
119
|
+
"interactionItem": {
|
|
120
|
+
"type": "object",
|
|
121
|
+
"additionalProperties": true,
|
|
122
|
+
"required": ["code", "name", "sourceReferences"],
|
|
123
|
+
"properties": {
|
|
124
|
+
"code": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"pattern": "^BH-[0-9]+$"
|
|
127
|
+
},
|
|
128
|
+
"name": { "type": "string", "minLength": 1 },
|
|
129
|
+
"slug": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
132
|
+
"description": "Recommended for XP-<nn>_BH-<ii>-<slug>.md detail basenames."
|
|
133
|
+
},
|
|
134
|
+
"description": { "type": "string" },
|
|
135
|
+
"order": { "type": "integer" },
|
|
136
|
+
"sourceReferences": {
|
|
137
|
+
"type": "array",
|
|
138
|
+
"minItems": 1,
|
|
139
|
+
"description": "Required: at least one file + line range per interaction row.",
|
|
140
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"type": "object",
|
|
146
|
+
"additionalProperties": false,
|
|
147
|
+
"required": ["views"],
|
|
148
|
+
"properties": {
|
|
149
|
+
"kind": {
|
|
150
|
+
"type": "string",
|
|
151
|
+
"const": "easyspecs.experiences-list",
|
|
152
|
+
"description": "Optional coordination document id; when present must be this value."
|
|
153
|
+
},
|
|
154
|
+
"version": {
|
|
155
|
+
"type": "integer",
|
|
156
|
+
"minimum": 1,
|
|
157
|
+
"description": "Optional coordination format version when present."
|
|
158
|
+
},
|
|
159
|
+
"views": {
|
|
160
|
+
"type": "array",
|
|
161
|
+
"items": {
|
|
162
|
+
"type": "object",
|
|
163
|
+
"additionalProperties": true,
|
|
164
|
+
"required": ["code", "name", "sourceReferences"],
|
|
165
|
+
"properties": {
|
|
166
|
+
"code": {
|
|
167
|
+
"type": "string",
|
|
168
|
+
"pattern": "^XP-[0-9]+$"
|
|
169
|
+
},
|
|
170
|
+
"name": { "type": "string", "minLength": 1 },
|
|
171
|
+
"slug": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
174
|
+
"description": "Recommended for XP-<nn>-<slug>.md detail basenames."
|
|
175
|
+
},
|
|
176
|
+
"description": { "type": "string" },
|
|
177
|
+
"order": { "type": "integer" },
|
|
178
|
+
"sourceReferences": {
|
|
179
|
+
"type": "array",
|
|
180
|
+
"minItems": 1,
|
|
181
|
+
"description": "Required: at least one file + line range per view row.",
|
|
182
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
183
|
+
},
|
|
184
|
+
"interactions": {
|
|
185
|
+
"type": "array",
|
|
186
|
+
"items": { "$ref": "#/$defs/interactionItem" }
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"revisionLog": {
|
|
192
|
+
"type": "array",
|
|
193
|
+
"description": "Append-only log of substantive edits; add an entry whenever this pass changes rows, merges, or refines the coordination file.",
|
|
194
|
+
"items": {
|
|
195
|
+
"type": "object",
|
|
196
|
+
"additionalProperties": false,
|
|
197
|
+
"required": ["summary"],
|
|
198
|
+
"properties": {
|
|
199
|
+
"at": {
|
|
200
|
+
"type": "string",
|
|
201
|
+
"description": "ISO-8601 timestamp when known."
|
|
202
|
+
},
|
|
203
|
+
"summary": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"minLength": 1,
|
|
206
|
+
"maxLength": 2000,
|
|
207
|
+
"description": "What was added, changed, or refined in this write."
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Example instance (web SPA shape—illustrative only):** For CLI-only repos, a “view” might be **`XP-01` = root CLI / help** with **`BH-*`** per subcommand file; for Delphi, cite **`.pas` + `.dfm`** pairs per form. **Do not copy** this example’s paths or structure when the repo is not a web app.
|
|
217
|
+
|
|
218
|
+
```json
|
|
219
|
+
{
|
|
220
|
+
"views": [
|
|
221
|
+
{
|
|
222
|
+
"code": "XP-01",
|
|
223
|
+
"name": "Login screen",
|
|
224
|
+
"slug": "login-screen",
|
|
225
|
+
"sourceReferences": [
|
|
226
|
+
{ "path": "src/views/Login.vue", "startLine": 1, "endLine": 200, "note": "screen shell" }
|
|
227
|
+
],
|
|
228
|
+
"interactions": [
|
|
229
|
+
{
|
|
230
|
+
"code": "BH-01",
|
|
231
|
+
"name": "Submit credentials",
|
|
232
|
+
"slug": "submit-credentials",
|
|
233
|
+
"sourceReferences": [
|
|
234
|
+
{ "path": "src/views/Login.vue", "startLine": 80, "endLine": 120, "note": "submit handler" }
|
|
235
|
+
]
|
|
236
|
+
}
|
|
237
|
+
]
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
"revisionLog": [
|
|
241
|
+
{ "summary": "Initial experiences/views discovery; extend this array on every substantive merge or refinement pass." }
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Barriers
|
|
247
|
+
|
|
248
|
+
- **After** `experiences-list.json` is valid, parallel view detail agents may run; after BH codes are fixed per view, parallel interaction detail agents may run (§6.3).
|
|
249
|
+
|
|
250
|
+
## OpenCode wiring
|
|
251
|
+
|
|
252
|
+
§3.5.2 prompt. Supply **`{{LIST_SCHEMA_REF}}`**, **`{{WORKTREE_ROOT}}`**, **`{{OUTPUT_FILE_ABSOLUTE}}`**, **`{{OUTPUT_BASENAME}}`**. Fill **`{{PARENT_CONTEXT_BLOCK}}`** only if generating a child list file in a split PLAN. Never write the final index JSON.
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: SRS-8 coordination JSON — incremental schema-valid features-list.json while discovering the repo; multi-pass refinement; .gluecharm/context (file tools; chat-only insufficient).
|
|
3
|
+
mode: primary
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent: Features list (coordination JSON)
|
|
7
|
+
|
|
8
|
+
| Field | Value |
|
|
9
|
+
| ----- | ----- |
|
|
10
|
+
| **AGENT_ID** | `ctx-list-features` |
|
|
11
|
+
| **Display name** | Features list |
|
|
12
|
+
| **SRS-8** | §4.6 `features-list.json`; §6.1 global discovery; §6.2 Feature scope entry; **R6**, **R22** |
|
|
13
|
+
| **Output** | `<worktree>/.gluecharm/context/features-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 the **canonical registry of features**: stable **`code`** (`FE-01` …), human-readable **`name`**, and **`<slug>`** for each feature’s detail file basename **`FE-<nn>-<slug>.md`** (§4.1, §4.3). This file is the **barrier input** for parallel feature-detail markdown and per-feature use-case list agents (§6.2).
|
|
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
|
+
Produce **`features-list.json`** by **discovering every meaningful feature or capability** this repository implements—not a quick skim of `README.md`. Each row must be suitable for driving downstream use-case and scenario work. Do **not** write markdown lists; output **one JSON file** only.
|
|
29
|
+
|
|
30
|
+
### Incremental JSON (mandatory)
|
|
31
|
+
|
|
32
|
+
Treat **`{{OUTPUT_FILE_ABSOLUTE}}`** as a **living document** while you navigate and read the project:
|
|
33
|
+
|
|
34
|
+
1. **Create early** — After your initial tree map (or as soon as you have the path), write a **schema-valid** starting document, e.g. `{ "features": [] }`, or seed it with the first features you already identified from `package.json` / entrypoints.
|
|
35
|
+
2. **Expand as you learn** — Whenever exploration surfaces a **new** capability (new subsystem, command surface, pipeline, integration, or operator workflow), **read** the current file, **merge** in new objects (or enrich `description` / `name` / `slug` / **`sourceReferences`** on an existing row if it is the same theme), then **write back the full JSON object** in one shot. Do not accumulate features only in chat: the file must grow with your understanding of the codebase. Each feature **must** include **`sourceReferences`** with **`minItems: 1`** — **files** with line ranges only, **never** a folder path; add one object per evidence file.
|
|
36
|
+
3. **Always valid** — Every write must be **parseable JSON** and satisfy **`features-list.schema.json`** (no comments, no trailing text). Prefer rewriting the whole file rather than risky partial edits.
|
|
37
|
+
4. **Stable codes** — Assign **`FE-01`, `FE-02`, …** as you add rows; **do not renumber** existing codes during incremental adds (downstream agents depend on stability). Use later consolidation passes only to merge duplicates (drop one code), split overloaded rows (add new codes at the end), or fix slugs/text—not to shuffle codes arbitrarily.
|
|
38
|
+
|
|
39
|
+
### Repository discovery (mandatory)
|
|
40
|
+
|
|
41
|
+
1. **Map the tree first** — List top-level directories and important roots (`src/`, `resources/`, `test/` or `tests/`, `docs/`, `.gluecharm/`, scripts, config). **Skip** **`.opencode/`** for product discovery (materialized agents/schemas only — see **`.opencode/` exclusion** above). Note entry points: `package.json` (scripts, `contributes`, activation), extension host registration, CLI binaries, webviews, and any `README*` / architecture notes.
|
|
42
|
+
2. **Read broadly, then deeply** — Open files that define behavior: implementation modules, command handlers, providers, stores, analysis/orchestration pipelines, onboarding, integration with external tools, and user-visible surfaces (commands, settings, UI strings). Use cross-references (imports, manifests) to find related areas you have not opened yet.
|
|
43
|
+
3. **Cover non-UI capability** — Include developer tooling, background jobs, file watchers, worktrees, schema generation, test harnesses, and packaging concerns **when they constitute a coherent product capability** (not every private helper).
|
|
44
|
+
4. **Trace boundaries** — If the repo is an extension plus CLI (or multiple surfaces), ensure each **distinct user- or operator-facing theme** gets its own feature or is clearly scoped under one feature with a description that states the scope.
|
|
45
|
+
|
|
46
|
+
### Exhaustiveness
|
|
47
|
+
|
|
48
|
+
The list must be **as complete as the repository allows**: prefer **splitting** distinct themes over merging unrelated behavior under one vague feature. Before finalizing, mentally check: *commands/settings from `package.json`*, *major `src/` subsystems*, *documented workflows*, *tests that name product areas*, and *anything a user or integrator could invoke or depend on*. Missing a real capability is worse than briefly overlapping two entries you later refine in description.
|
|
49
|
+
|
|
50
|
+
**Downstream cardinality:** For each **meaningful** product feature, the later **use-cases list** should **usually** enumerate **several** use cases (different goals, surfaces, or actors). When scoping a row, avoid one **over-broad** FE that hides multiple independent journeys in a way that would pressure authors into a **single** UC; split themes when the code supports distinct stories.
|
|
51
|
+
|
|
52
|
+
### Quality: refine in passes (mandatory)
|
|
53
|
+
|
|
54
|
+
Discovery and **incremental file updates** above are the primary way the list grows. When navigation is substantially complete, run **at least three** refinement passes **against the current JSON on disk** (read → edit → write full valid JSON each time; no separate staging file):
|
|
55
|
+
|
|
56
|
+
| Pass | Goal |
|
|
57
|
+
| ---- | ---- |
|
|
58
|
+
| **1 — Coverage check** | Re-walk the repo tree and manifests against the file; append missing features; remove entries with no evidence in code or docs. |
|
|
59
|
+
| **2 — Consolidation** | Merge true duplicates; split overloaded rows; tighten `name` and optional `description`; ensure slugs are kebab-case per schema; set sensible **`order`** if used. |
|
|
60
|
+
| **3 — Final sanity** | Unique `code` values, schema-valid document, each feature has **`sourceReferences`** with **`minItems: 1`** (**file** paths + line ranges, no directories); plus command ids in prose/`description` where useful. |
|
|
61
|
+
| **4 (optional)** | Second gap hunt if the repo is large or you touched new areas late. |
|
|
62
|
+
|
|
63
|
+
The file at **`{{OUTPUT_FILE_ABSOLUTE}}`** must already contain the near-final list before these passes; passes **refine** it, not replace a chat-only draft.
|
|
64
|
+
|
|
65
|
+
## JSON Schema (Draft 2020-12)
|
|
66
|
+
|
|
67
|
+
**Bundled file:** `resources/schemas/context-lists/features-list.schema.json`
|
|
68
|
+
**Materialized (`{{LIST_SCHEMA_REF}}` example):** `<worktree>/.opencode/schemas/context-lists/features-list.schema.json`
|
|
69
|
+
|
|
70
|
+
**`sourceReferences` (this list):** **required** on each feature row (`minItems: 1`). Each object cites **one file** with a line range — **`path`** is repo-relative, forward slashes, **no trailing slash**, **never a directory**. **Never** use paths under **`.opencode/`** (see **`.opencode/` exclusion** above). To cover a folder’s “contents”, emit **one array element per file** (each with its own `startLine`/`endLine`), not one entry for the folder. Optional **`note`**.
|
|
71
|
+
|
|
72
|
+
Emit **only** JSON that validates against this schema (UTF-8, no comments, no trailing text):
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
77
|
+
"$id": "https://easyspecs.ai/schemas/context-lists/features-list.schema.json",
|
|
78
|
+
"title": "features-list",
|
|
79
|
+
"$defs": {
|
|
80
|
+
"sourceReference": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"additionalProperties": false,
|
|
83
|
+
"required": ["path", "startLine", "endLine"],
|
|
84
|
+
"properties": {
|
|
85
|
+
"path": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"minLength": 1,
|
|
88
|
+
"pattern": "^[^/]+(/[^/]+)*$",
|
|
89
|
+
"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."
|
|
90
|
+
},
|
|
91
|
+
"startLine": {
|
|
92
|
+
"type": "integer",
|
|
93
|
+
"minimum": 1,
|
|
94
|
+
"description": "1-based inclusive start line."
|
|
95
|
+
},
|
|
96
|
+
"endLine": {
|
|
97
|
+
"type": "integer",
|
|
98
|
+
"minimum": 1,
|
|
99
|
+
"description": "1-based inclusive end line; should be >= startLine."
|
|
100
|
+
},
|
|
101
|
+
"note": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"description": "Optional short label for this evidence span."
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"sourceReferenceList": {
|
|
108
|
+
"type": "array",
|
|
109
|
+
"description": "Evidence spans: each item references one file + line range, never a folder path.",
|
|
110
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"type": "object",
|
|
114
|
+
"additionalProperties": false,
|
|
115
|
+
"required": ["features"],
|
|
116
|
+
"properties": {
|
|
117
|
+
"kind": {
|
|
118
|
+
"type": "string",
|
|
119
|
+
"const": "easyspecs.features-list",
|
|
120
|
+
"description": "Optional coordination document id; when present must be this value."
|
|
121
|
+
},
|
|
122
|
+
"version": {
|
|
123
|
+
"type": "integer",
|
|
124
|
+
"minimum": 1,
|
|
125
|
+
"description": "Optional coordination format version when present."
|
|
126
|
+
},
|
|
127
|
+
"features": {
|
|
128
|
+
"type": "array",
|
|
129
|
+
"items": {
|
|
130
|
+
"type": "object",
|
|
131
|
+
"additionalProperties": true,
|
|
132
|
+
"required": ["code", "name", "slug", "sourceReferences"],
|
|
133
|
+
"properties": {
|
|
134
|
+
"code": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"pattern": "^FE-[0-9]+$",
|
|
137
|
+
"description": "Stable feature code; FE- plus one or more digits (e.g. FE-1, FE-01, FE-120)."
|
|
138
|
+
},
|
|
139
|
+
"name": { "type": "string", "minLength": 1 },
|
|
140
|
+
"slug": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
143
|
+
"description": "URL-safe slug for FE-<nn>-<slug>.md basename."
|
|
144
|
+
},
|
|
145
|
+
"description": { "type": "string" },
|
|
146
|
+
"order": { "type": "integer" },
|
|
147
|
+
"featureKind": {
|
|
148
|
+
"type": "string",
|
|
149
|
+
"enum": ["product", "infrastructure", "testing"],
|
|
150
|
+
"description": "SRS-27: classify product vs platform/ops vs verification-only surface; omit to treat as product in consumers that care."
|
|
151
|
+
},
|
|
152
|
+
"sourceReferences": {
|
|
153
|
+
"type": "array",
|
|
154
|
+
"minItems": 1,
|
|
155
|
+
"description": "Required: at least one file + line range per feature row.",
|
|
156
|
+
"items": { "$ref": "#/$defs/sourceReference" }
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"revisionLog": {
|
|
162
|
+
"type": "array",
|
|
163
|
+
"description": "Append-only log of substantive edits; add an entry whenever this pass changes rows, merges, or refines the coordination file.",
|
|
164
|
+
"items": {
|
|
165
|
+
"type": "object",
|
|
166
|
+
"additionalProperties": false,
|
|
167
|
+
"required": ["summary"],
|
|
168
|
+
"properties": {
|
|
169
|
+
"at": {
|
|
170
|
+
"type": "string",
|
|
171
|
+
"description": "ISO-8601 timestamp when known."
|
|
172
|
+
},
|
|
173
|
+
"summary": {
|
|
174
|
+
"type": "string",
|
|
175
|
+
"minLength": 1,
|
|
176
|
+
"maxLength": 2000,
|
|
177
|
+
"description": "What was added, changed, or refined in this write."
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Example instance:**
|
|
187
|
+
|
|
188
|
+
```json
|
|
189
|
+
{
|
|
190
|
+
"features": [
|
|
191
|
+
{
|
|
192
|
+
"code": "FE-01",
|
|
193
|
+
"name": "User authentication",
|
|
194
|
+
"slug": "user-authentication",
|
|
195
|
+
"order": 1,
|
|
196
|
+
"sourceReferences": [
|
|
197
|
+
{
|
|
198
|
+
"path": "src/auth/login.ts",
|
|
199
|
+
"startLine": 1,
|
|
200
|
+
"endLine": 120,
|
|
201
|
+
"note": "login flow"
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
],
|
|
206
|
+
"revisionLog": [
|
|
207
|
+
{ "summary": "Initial features discovery; extend this array on every substantive merge or refinement pass." }
|
|
208
|
+
]
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Barriers
|
|
213
|
+
|
|
214
|
+
- **After** this file exists and is valid, orchestration may fan out **`FE-<nn>-<slug>.md`** and **`FE-<nn>-use-cases-list.json`** in parallel (§6.2).
|
|
215
|
+
|
|
216
|
+
## OpenCode wiring
|
|
217
|
+
|
|
218
|
+
Bind this logical agent to your OpenCode CLI (e.g. `runOpenCodeAgent` with a prompt constructed from §3.5.2). Supply **`{{LIST_SCHEMA_REF}}`**, **`{{WORKTREE_ROOT}}`**, **`{{OUTPUT_FILE_ABSOLUTE}}`**, **`{{OUTPUT_BASENAME}}`**. Do **not** write `index-application-context.json`.
|