specrails-core 4.12.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +49 -78
  2. package/bin/specrails-core.mjs +18 -98
  3. package/bin/tui-installer.mjs +22 -105
  4. package/commands/doctor.md +1 -1
  5. package/dist/installer/cli.js +12 -2
  6. package/dist/installer/cli.js.map +1 -1
  7. package/dist/installer/commands/doctor.js +3 -5
  8. package/dist/installer/commands/doctor.js.map +1 -1
  9. package/dist/installer/commands/init.js +23 -19
  10. package/dist/installer/commands/init.js.map +1 -1
  11. package/dist/installer/commands/update.js +17 -16
  12. package/dist/installer/commands/update.js.map +1 -1
  13. package/dist/installer/commands/v5-migration.js +119 -0
  14. package/dist/installer/commands/v5-migration.js.map +1 -0
  15. package/dist/installer/phases/install-config.js +3 -6
  16. package/dist/installer/phases/install-config.js.map +1 -1
  17. package/dist/installer/phases/manifest.js +2 -6
  18. package/dist/installer/phases/manifest.js.map +1 -1
  19. package/dist/installer/phases/prereqs.js +0 -1
  20. package/dist/installer/phases/prereqs.js.map +1 -1
  21. package/dist/installer/phases/scaffold.js +38 -148
  22. package/dist/installer/phases/scaffold.js.map +1 -1
  23. package/package.json +1 -1
  24. package/schemas/profile.v1.json +1 -1
  25. package/templates/agents/sr-architect.md +30 -0
  26. package/templates/agents/sr-developer.md +21 -8
  27. package/templates/agents/sr-reviewer.md +44 -31
  28. package/templates/codex-skills/batch-implement/SKILL.md +9 -32
  29. package/templates/codex-skills/implement/SKILL.md +61 -143
  30. package/templates/codex-skills/rails/sr-architect/SKILL.md +38 -20
  31. package/templates/codex-skills/rails/sr-developer/SKILL.md +29 -10
  32. package/templates/codex-skills/rails/sr-reviewer/SKILL.md +21 -10
  33. package/templates/commands/specrails/doctor.md +1 -1
  34. package/templates/commands/specrails/implement.md +117 -288
  35. package/templates/commands/specrails/memory-inspect.md +6 -4
  36. package/templates/commands/specrails/propose-spec.md +1 -1
  37. package/templates/commands/specrails/refactor-recommender.md +8 -51
  38. package/templates/commands/specrails/retry.md +12 -48
  39. package/templates/commands/specrails/telemetry.md +1 -1
  40. package/templates/gemini-commands/implement.toml +9 -0
  41. package/templates/profiles/default.json +5 -18
  42. package/commands/enrich.md +0 -1456
  43. package/templates/agents/sr-backend-developer.md +0 -91
  44. package/templates/agents/sr-backend-reviewer.md +0 -152
  45. package/templates/agents/sr-doc-sync.md +0 -247
  46. package/templates/agents/sr-frontend-developer.md +0 -85
  47. package/templates/agents/sr-frontend-reviewer.md +0 -145
  48. package/templates/agents/sr-merge-resolver.md +0 -195
  49. package/templates/agents/sr-performance-reviewer.md +0 -186
  50. package/templates/agents/sr-product-analyst.md +0 -36
  51. package/templates/agents/sr-product-manager.md +0 -148
  52. package/templates/agents/sr-security-reviewer.md +0 -191
  53. package/templates/agents/sr-test-writer.md +0 -176
  54. package/templates/codex-skills/enrich/SKILL.md +0 -191
  55. package/templates/codex-skills/merge-resolve/SKILL.md +0 -88
  56. package/templates/codex-skills/rails/sr-backend-developer/SKILL.md +0 -93
  57. package/templates/codex-skills/rails/sr-backend-reviewer/SKILL.md +0 -120
  58. package/templates/codex-skills/rails/sr-doc-sync/SKILL.md +0 -124
  59. package/templates/codex-skills/rails/sr-frontend-developer/SKILL.md +0 -106
  60. package/templates/codex-skills/rails/sr-frontend-reviewer/SKILL.md +0 -111
  61. package/templates/codex-skills/rails/sr-merge-resolver/SKILL.md +0 -156
  62. package/templates/codex-skills/rails/sr-performance-reviewer/SKILL.md +0 -109
  63. package/templates/codex-skills/rails/sr-product-analyst/SKILL.md +0 -85
  64. package/templates/codex-skills/rails/sr-product-manager/SKILL.md +0 -131
  65. package/templates/codex-skills/rails/sr-security-reviewer/SKILL.md +0 -121
  66. package/templates/codex-skills/rails/sr-test-writer/SKILL.md +0 -115
  67. package/templates/commands/specrails/auto-propose-backlog-specs.md +0 -312
  68. package/templates/commands/specrails/enrich.md +0 -1456
  69. package/templates/commands/specrails/get-backlog-specs.md +0 -226
  70. package/templates/commands/specrails/merge-resolve.md +0 -172
  71. package/templates/commands/specrails/reconfig.md +0 -80
  72. package/templates/commands/specrails/vpc-drift.md +0 -405
  73. package/templates/commands/test.md +0 -58
  74. package/templates/personas/persona.md +0 -43
  75. package/templates/personas/the-maintainer.md +0 -98
  76. package/templates/settings/perf-thresholds.yml +0 -25
@@ -66,7 +66,7 @@ Set the following fields:
66
66
  - `priority`: Map Estimated Complexity — Low → `"low"`, Medium → `"medium"`, High/Very High → `"high"`
67
67
  - `labels`: `["spec-proposal"]`
68
68
  - `source`: `"propose-spec"`
69
- - `created_by`: `"sr-product-engineer"`
69
+ - `created_by`: `"sr-architect"`
70
70
 
71
71
  Print: `Created local ticket #{id}: {title}`
72
72
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: "Refactor Recommender"
3
- description: "Scan the codebase for refactoring opportunities ranked by impact/effort ratio and VPC persona value. Analyzes code for duplicates, long functions, large files, dead code, outdated patterns, and complex logic. Optionally creates GitHub Issues for tracking."
3
+ description: "Scan the codebase for refactoring opportunities ranked by impact/effort ratio. Analyzes code for duplicates, long functions, large files, dead code, outdated patterns, and complex logic. Optionally creates GitHub Issues for tracking."
4
4
  category: Workflow
5
- tags: [workflow, refactoring, code-quality, tech-debt, vpc]
5
+ tags: [workflow, refactoring, code-quality, tech-debt]
6
6
  ---
7
7
 
8
- Scan the codebase for refactoring opportunities, score each by impact/effort ratio and VPC persona value, and optionally create GitHub Issues for the top findings in {{BACKLOG_PROVIDER_NAME}}.
8
+ Scan the codebase for refactoring opportunities, score each by impact/effort ratio, and optionally create GitHub Issues for the top findings in {{BACKLOG_PROVIDER_NAME}}.
9
9
 
10
10
  **Input:** `$ARGUMENTS` — optional: comma-separated paths to scope the analysis. Flags: `--dry-run` (print findings without creating issues).
11
11
 
@@ -38,27 +38,6 @@ Always exclude the following from all analysis:
38
38
 
39
39
  ---
40
40
 
41
- ## Phase 1.5: VPC Context
42
-
43
- Check whether persona files exist at `.claude/agents/personas/`. This path is present in any repo that has run `/specrails:enrich`.
44
-
45
- ```bash
46
- ls .claude/agents/personas/ 2>/dev/null
47
- ```
48
-
49
- If the directory exists and contains persona files, set `VPC_AVAILABLE=true`. Otherwise set `VPC_AVAILABLE=false` and skip all VPC steps (they are optional enrichment, not blockers).
50
-
51
- When `VPC_AVAILABLE=true`, read each persona file and extract a compact VPC summary. For each persona record:
52
-
53
- - **name** — persona display name (e.g. "Alex — The Lead Dev")
54
- - **top_jobs** — up to 3 functional jobs relevant to code quality and maintainability
55
- - **critical_pains** — up to 3 pains marked Critical or High related to code reliability, complexity, or developer experience
56
- - **high_gains** — up to 3 gains marked High related to code clarity, speed, or confidence
57
-
58
- Store these as an in-memory `VPC_PROFILES` list. You will use it in Phase 3 to score persona fit.
59
-
60
- ---
61
-
62
41
  ## Phase 2: Analysis
63
42
 
64
43
  Analyze the scoped files across six categories. For each finding record:
@@ -97,24 +76,12 @@ Find deeply nested conditionals (more than 3 levels) and functions with high cyc
97
76
 
98
77
  ## Phase 3: Score and Rank
99
78
 
100
- Score every finding on three dimensions (1–5 each):
79
+ Score every finding on two dimensions (1–5 each):
101
80
 
102
81
  - **Impact** — how much the refactoring improves code quality, readability, or maintainability
103
82
  - **Effort** — how hard the refactoring is to implement (1 = trivial, 5 = major)
104
- - **VPC Value** — how directly this refactoring addresses persona jobs, pains, or gains (1 = no relevance, 5 = resolves a critical persona pain or delivers a high-value gain). Set to 3 when `VPC_AVAILABLE=false`.
105
-
106
- **Scoring VPC Value** (only when `VPC_AVAILABLE=true`):
107
-
108
- For each finding, reason over `VPC_PROFILES`:
109
83
 
110
- - Does fixing this reduce a **Critical/High pain** for any persona? (e.g. complex logic → harder to trust AI output → Alex's "agents go off the rails" pain) score 4–5
111
- - Does fixing this deliver a **High gain** for any persona? (e.g. extracting a function → cleaner API surface → easier onboarding → Sara's gain) → score 3–4
112
- - Is there indirect persona value? (e.g. dead code removal → smaller codebase → easier contributor review → Kai) → score 2–3
113
- - No clear persona relevance → score 1–2
114
-
115
- Assign one `vpc_value` integer per finding, and note the **primary persona** and **rationale** (one sentence).
116
-
117
- **Composite score**: `impact * 2 + (6 - effort) + vpc_value`. Higher is better.
84
+ **Composite score**: `impact * 2 + (6 - effort)`. Higher is better.
118
85
 
119
86
  Sort all findings by composite score descending. If the same code block was flagged by multiple categories, keep only the highest-scored entry and discard the duplicates.
120
87
 
@@ -144,7 +111,6 @@ For each of the **top 5** findings (by composite score) that does not already ha
144
111
  **Category**: {category}
145
112
  **File**: {file}:{line_range}
146
113
  **Impact**: {impact}/5 | **Effort**: {effort}/5 | **Score**: {composite}
147
- {vpc_line}
148
114
 
149
115
  ### Current Code
150
116
  ```{lang}
@@ -163,9 +129,6 @@ For each of the **top 5** findings (by composite score) that does not already ha
163
129
  _Generated by `/specrails:refactor-recommender` in {{PROJECT_NAME}}_
164
130
  ```
165
131
 
166
- Where `{vpc_line}` is included only when `VPC_AVAILABLE=true`:
167
- `**VPC Value**: {vpc_value}/5 — {vpc_persona}: {vpc_rationale}`
168
-
169
132
  ---
170
133
 
171
134
  ## Phase 5: Output Summary
@@ -176,11 +139,10 @@ Print the following report:
176
139
  ## Refactoring Opportunities — {{PROJECT_NAME}}
177
140
 
178
141
  {N} opportunities found | Sorted by composite score
179
- {vpc_header}
180
142
 
181
- | # | Category | File | Impact | Effort | VPC | Score | Description |
182
- |---|----------|------|--------|--------|-----|-------|-------------|
183
- | 1 | {category} | {file}:{line_range} | {impact}/5 | {effort}/5 | {vpc_value}/5 | {composite} | {description} |
143
+ | # | Category | File | Impact | Effort | Score | Description |
144
+ |---|----------|------|--------|--------|-------|-------------|
145
+ | 1 | {category} | {file}:{line_range} | {impact}/5 | {effort}/5 | {composite} | {description} |
184
146
  ...
185
147
 
186
148
  ### Top 3 Detailed Recommendations
@@ -188,7 +150,6 @@ Print the following report:
188
150
  #### 1. {description}
189
151
  **File**: {file}:{line_range}
190
152
  **Category**: {category} | **Score**: {composite}
191
- {vpc_detail}
192
153
 
193
154
  **Current:**
194
155
  ```{lang}
@@ -206,7 +167,3 @@ Print the following report:
206
167
 
207
168
  Issues created: {N} (or "dry-run: no issues created")
208
169
  ```
209
-
210
- Where:
211
- - `{vpc_header}` is `VPC personas loaded: {persona names}` when `VPC_AVAILABLE=true`, or `VPC personas: not found (run /specrails:enrich to enable)` otherwise.
212
- - `{vpc_detail}` is `**VPC Value**: {vpc_value}/5 — {vpc_persona}: {vpc_rationale}` when `VPC_AVAILABLE=true`, omitted otherwise.
@@ -35,7 +35,7 @@ Resume a failed `/specrails:implement` run for **{{PROJECT_NAME}}**. Reads pipel
35
35
  Scan `$ARGUMENTS` for flags:
36
36
 
37
37
  - `--list`: if present, set `LIST_ONLY=true`.
38
- - `--from <phase>`: if present, set `RESUME_FROM_OVERRIDE=<phase>`. Valid values: `architect`, `developer`, `test-writer`, `doc-sync`, `reviewer`, `ship`, `ci`.
38
+ - `--from <phase>`: if present, set `RESUME_FROM_OVERRIDE=<phase>`. Valid values: `architect`, `developer`, `reviewer`, `ship`, `ci`.
39
39
  - `--dry-run`: if present, set `DRY_RUN_OVERRIDE=true`.
40
40
 
41
41
  Extract the first positional argument (not starting with `--`) as `FEATURE_NAME`.
@@ -60,7 +60,7 @@ Exit after printing — do not proceed.
60
60
  Usage: /specrails:retry <feature-name> [--from <phase>] [--dry-run]
61
61
  /specrails:retry --list
62
62
 
63
- Phases: architect | developer | test-writer | doc-sync | reviewer | ship | ci
63
+ Phases: architect | developer | reviewer | ship | ci
64
64
  ```
65
65
 
66
66
  ---
@@ -91,7 +91,7 @@ Parse the state file and set the following variables:
91
91
  - `ORIGINAL_INPUT_FLAGS` ← `input.flags` object
92
92
  - `SINGLE_MODE` ← `input.flags.single_mode` (default `true`)
93
93
  - `DRY_RUN` ← if `DRY_RUN_OVERRIDE=true` then `true`, else `input.flags.dry_run` (default `false`)
94
- - `PHASE_STATUSES` ← `phases` map (`architect`, `developer`, `test-writer`, `doc-sync`, `reviewer`, `ship`, `ci` → `"done"`, `"failed"`, `"skipped"`, or `"pending"`)
94
+ - `PHASE_STATUSES` ← `phases` map (`architect`, `developer`, `reviewer`, `ship`, `ci` → `"done"`, `"failed"`, `"skipped"`, or `"pending"`)
95
95
 
96
96
  **Validation:**
97
97
 
@@ -114,9 +114,7 @@ Print the pipeline status:
114
114
  | Phase | Status | Notes |
115
115
  |--------------|---------|-------------------------------------|
116
116
  | architect | done | |
117
- | developer | done | |
118
- | test-writer | FAILED | <ERROR_CONTEXT or "no details"> |
119
- | doc-sync | pending | |
117
+ | developer | FAILED | <ERROR_CONTEXT or "no details"> |
120
118
  | reviewer | pending | |
121
119
  | ship | pending | |
122
120
  | ci | pending | |
@@ -136,7 +134,7 @@ Original input : <issues list or "text description">
136
134
  **Phase execution order (canonical):**
137
135
 
138
136
  ```
139
- architect → developer → test-writer → doc-sync → reviewer → ship → ci
137
+ architect → developer → reviewer → ship → ci
140
138
  ```
141
139
 
142
140
  **If `RESUME_FROM_OVERRIDE` is set:** use it as `RESUME_PHASE`. Validate it is one of the canonical values; if not, print an error and exit.
@@ -179,7 +177,7 @@ If `n` or no response: exit without changes.
179
177
 
180
178
  Execute phases in canonical order starting from `RESUME_PHASE`. For each phase:
181
179
 
182
- - If its status in `PHASE_STATUSES` is `"skipped"`: **skip** — the agent was not installed at the original run (e.g. an optional sr-test-writer / sr-doc-sync). Never launch a phase that was skipped, regardless of its position relative to `RESUME_PHASE`.
180
+ - If its status in `PHASE_STATUSES` is `"skipped"`: **skip** — it was not run at the original invocation. Never launch a phase that was skipped, regardless of its position relative to `RESUME_PHASE`.
183
181
  - If its status in `PHASE_STATUSES` is `"done"` AND it precedes `RESUME_PHASE` in canonical order: **skip** — do not re-run.
184
182
  - If it equals `RESUME_PHASE` or comes after (and is not `"skipped"`): **run** it.
185
183
 
@@ -240,46 +238,16 @@ Wait for all developers to complete. Collect the list of files created or modifi
240
238
 
241
239
  ---
242
240
 
243
- ### 4c. Phase: test-writer
244
-
245
- **Runs if `RESUME_PHASE` is `architect`, `developer`, or `test-writer`.**
246
-
247
- If `IMPLEMENTED_FILES` is empty: warn but continue — the sr-test-writer will discover files from git diff.
248
-
249
- Launch **sr-test-writer** agent(s) exactly as in Phase 3c of the implement pipeline. Pass:
250
- - `IMPLEMENTED_FILES_LIST`: the `implemented_files` array from state
251
- - `TASK_DESCRIPTION`: derived from `ORIGINAL_ISSUES` or architect artifacts
252
-
253
- Wait for completion. Failure is **non-blocking** — record `FAILED` and continue to next phase.
254
-
255
- **Pipeline state update:** `test-writer` → `done` or `failed`.
256
-
257
- ---
258
-
259
- ### 4d. Phase: doc-sync
260
-
261
- **Runs if `RESUME_PHASE` is any phase up to and including `doc-sync`.**
262
-
263
- Launch **sr-doc-sync** agent(s) exactly as in Phase 3d of the implement pipeline. Pass:
264
- - `IMPLEMENTED_FILES_LIST`: the `implemented_files` array from state
265
- - `TASK_DESCRIPTION`: derived from `ORIGINAL_ISSUES` or architect artifacts
266
-
267
- Wait for completion. Failure is **non-blocking** — record `FAILED` and continue.
268
-
269
- **Pipeline state update:** `doc-sync` → `done` or `failed`.
270
-
271
- ---
272
-
273
- ### 4e. Phase: reviewer
241
+ ### 4c. Phase: reviewer
274
242
 
275
243
  **Runs if `RESUME_PHASE` is any phase up to and including `reviewer`.**
276
244
 
277
- Launch layer reviewers and the generalist sr-reviewer exactly as in Phase 4b of the implement pipeline. Pass:
245
+ Launch the single **sr-reviewer** exactly as in Phase 4b of the implement pipeline. Pass:
278
246
  - `MODIFIED_FILES_LIST`: the `implemented_files` array from state
279
247
  - `PIPELINE_CONTEXT`: brief description from original input and issue titles
280
- - Layer reports from sr-frontend-reviewer, sr-backend-reviewer, sr-security-reviewer
248
+ - The security-exemptions config path (`.claude/security-exemptions.yaml`) if present
281
249
 
282
- Wait for all to complete. Parse `SECURITY_BLOCKED`, `FRONTEND_STATUS`, `BACKEND_STATUS`.
250
+ Wait for it to complete. Parse `SECURITY_BLOCKED` from the reviewer's `SECURITY_STATUS` line.
283
251
 
284
252
  **Run the Confidence Gate (Phase 4b-conf)** exactly as defined in the implement pipeline.
285
253
 
@@ -287,7 +255,7 @@ Wait for all to complete. Parse `SECURITY_BLOCKED`, `FRONTEND_STATUS`, `BACKEND_
287
255
 
288
256
  ---
289
257
 
290
- ### 4f. Phase: ship
258
+ ### 4d. Phase: ship
291
259
 
292
260
  **Runs if `RESUME_PHASE` is `ship` or `ci`.**
293
261
 
@@ -303,7 +271,7 @@ Otherwise, run Phase 4c (ship) of the implement pipeline exactly as defined:
303
271
 
304
272
  ---
305
273
 
306
- ### 4g. Phase: ci
274
+ ### 4e. Phase: ci
307
275
 
308
276
  **Runs if ship succeeded and code was pushed.**
309
277
 
@@ -327,8 +295,6 @@ Phases executed this run: <comma-separated list>
327
295
  |--------------|---------|
328
296
  | architect | done |
329
297
  | developer | done |
330
- | test-writer | done |
331
- | doc-sync | done |
332
298
  | reviewer | done |
333
299
  | ship | done |
334
300
  | ci | done |
@@ -359,8 +325,6 @@ Next steps:
359
325
  |-------|-----------|------------|
360
326
  | architect | **Yes** | Stop — cannot proceed without OpenSpec artifacts |
361
327
  | developer | **Yes** | Stop — cannot proceed without implemented files |
362
- | test-writer | No | Record FAILED, continue to doc-sync |
363
- | doc-sync | No | Record FAILED, continue to reviewer |
364
328
  | reviewer | No | Report findings, continue to ship |
365
329
  | ship | **Yes** | Stop — report failure with git/PR context |
366
330
  | ci | **Yes** | Stop — report failure with CI log and fix suggestions |
@@ -153,7 +153,7 @@ A valid telemetry record has the following structure (fields may be absent — t
153
153
  - Infer `agent` name from:
154
154
  1. The `agent` field directly (if present).
155
155
  2. The source log file path (if the path contains `sr-<name>`, extract it).
156
- 3. A `system_prompt` field snippet (if present): match against known agent persona names (`sr-architect`, `sr-developer`, `sr-test-writer`, `sr-reviewer`, `sr-security-reviewer`, `sr-doc-sync`, `sr-product-analyst`, `sr-product-manager`).
156
+ 3. A `system_prompt` field snippet (if present): match against known agent names (`sr-architect`, `sr-developer`, `sr-reviewer`) or any `custom-*` agent declared by an active profile.
157
157
  4. If agent cannot be determined: assign to the bucket `"unknown"`.
158
158
  - Apply time filter: if `PERIOD_START` is not null, skip records where `timestamp < PERIOD_START`.
159
159
  - If `AGENT_FILTER` is set, skip records where the resolved agent name does not match.
@@ -72,6 +72,15 @@ The change is archived BY THE REVIEWER as part of a passing review — never by
72
72
  (`openspec validate <id> --strict`).
73
73
  Apply the outcome rules above.
74
74
 
75
+ **Design confidence gate.** Read
76
+ `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<id>/design-confidence.json`
77
+ (written by the architect). Missing → warn and proceed (backward
78
+ compatible). `high`/`medium` → proceed. `low` → STOP before phase 2 and
79
+ report `BLOCKED: design confidence low — <blocking_question>`; tell the
80
+ user to answer the question in the ticket and re-run. Do NOT update the
81
+ ticket, do NOT invoke the developer — implementation must never run on a
82
+ design the architect does not trust.
83
+
75
84
  2. **APPLY — `invoke_agent` `sr-developer`.** Only after the architect reports
76
85
  back. It implements the tasks in TDD order and checks them off in `tasks.md`.
77
86
  Apply the outcome rules — on `MAX_TURNS`, re-invoke to RESUME until every task
@@ -1,27 +1,14 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "name": "default",
4
- "description": "Baseline profile equivalent to pre-4.1.0 legacy behavior: full chain, per-agent models matching the shipped agent frontmatters, and legacy routing rules.",
4
+ "description": "Baseline profile: the three core agents (sr-architect, sr-developer, sr-reviewer) with the models matching their shipped frontmatters. Extend by adding user-owned custom-* agents and routing rules.",
5
5
  "orchestrator": { "model": "sonnet" },
6
6
  "agents": [
7
- { "id": "sr-product-manager", "model": "opus" },
8
- { "id": "sr-product-analyst", "model": "haiku" },
9
- { "id": "sr-architect", "model": "sonnet", "required": true },
10
- { "id": "sr-developer", "model": "sonnet", "required": true },
11
- { "id": "sr-frontend-developer", "model": "sonnet" },
12
- { "id": "sr-backend-developer", "model": "sonnet" },
13
- { "id": "sr-test-writer", "model": "sonnet" },
14
- { "id": "sr-doc-sync", "model": "sonnet" },
15
- { "id": "sr-merge-resolver", "model": "sonnet" },
16
- { "id": "sr-reviewer", "model": "sonnet", "required": true },
17
- { "id": "sr-frontend-reviewer", "model": "sonnet" },
18
- { "id": "sr-backend-reviewer", "model": "sonnet" },
19
- { "id": "sr-security-reviewer", "model": "sonnet" },
20
- { "id": "sr-performance-reviewer","model": "sonnet" }
7
+ { "id": "sr-architect", "model": "sonnet", "required": true },
8
+ { "id": "sr-developer", "model": "sonnet", "required": true },
9
+ { "id": "sr-reviewer", "model": "sonnet", "required": true }
21
10
  ],
22
11
  "routing": [
23
- { "tags": ["frontend"], "agent": "sr-frontend-developer" },
24
- { "tags": ["backend"], "agent": "sr-backend-developer" },
25
- { "default": true, "agent": "sr-developer" }
12
+ { "default": true, "agent": "sr-developer" }
26
13
  ]
27
14
  }