sistema-multiagente-sdlc 1.2.0 → 1.3.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.
- package/CHANGELOG.md +39 -1
- package/README.md +43 -16
- package/migrations/1.3.0/up.mjs +14 -0
- package/package.json +1 -1
- package/schemas/sdlc.config.schema.json +1 -1
- package/scripts/validate-models-schema.mjs +25 -1
- package/src/cli.js +3 -5
- package/src/migrations.js +3 -1
- package/src/render.js +1 -1
- package/templates/.github/agents/analista-requisitos.agent.md +31 -0
- package/templates/.github/skills/edge-case-hunter/SKILL.md +71 -0
- package/templates/docs/agents/catalogo-comandos-proyecto.md +1 -1
- package/templates/manifest.yaml +2 -0
- package/templates/scripts/agent-skills.manifest.json +1 -0
- package/templates/scripts/models.yaml +31 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,44 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
_No hay cambios pendientes._
|
|
6
|
+
|
|
7
|
+
## [1.3.0] — 2026-05-23
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- ADR `0002-codegraph-spike.md` (versión Propuesta inicial): aprobar evaluación de 7 días de [CodeGraph (colbymchenry)](https://github.com/colbymchenry/codegraph). Esta versión queda en el historial git; la versión vigente es la Aceptada del bloque "Changed" anterior.
|
|
12
|
+
- ADR `0003-per-phase-model-assignment.md`: extender `templates/scripts/models.yaml` con bloque opcional `phases:` para asignar modelos distintos a fases SDD (`sdd-explore`, `sdd-design`, `sdd-implement`, `sdd-review` o F0-F17). Reduce costo en exploración manteniendo precisión en F2-F3. Inspirado por el patrón `--profile-phase` de `gentle-ai`.
|
|
13
|
+
- `templates/scripts/models.yaml`: bloque `phases:` opt-in con defaults documentados (Haiku para `sdd-explore`, Opus para `sdd-design`, Sonnet para `sdd-implement`/`sdd-review`).
|
|
14
|
+
- Skill `edge-case-hunter`: checklist portable para revisar entradas límite, concurrencia, fallos parciales, dependencias, autorización y volumen antes de implementación.
|
|
15
|
+
- `analista-requisitos.agent.md`: protocolo de elicitación avanzada para historias ambiguas antes de pasar a diseño.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- ADR `0002-codegraph-spike.md` cambia de estado **Propuesta → Aceptada**. Se reemplaza la estrategia de "spike 7 días con benchmarks sintéticos obligatorios" por **"instalar y observar"**: la adopción es coexistencia con Graphify desde el día 1, sin slice dedicado, y la verificación del ahorro de tokens claimado por CodeGraph (94 % menos tool-calls según su README) se hará por observación natural durante varias sesiones reales. El ADR ahora documenta:
|
|
20
|
+
- Reglas concretas de coexistencia (Graphify-first para razonamiento humano y `enrich-us` 4.5; CodeGraph vía MCP para queries estructurales runtime).
|
|
21
|
+
- Triggers para abrir ADR 0004 (evidencia de ahorro real, cobertura de rutas framework, o costo operativo excesivo).
|
|
22
|
+
- Implementación operativa ya ejecutada en `FacturacionDian` con scope narrow (`apps/**/src` + `packages/**/src`, `.ts/.tsx`) para evitar el OOM del index default sobre un monorepo grande.
|
|
23
|
+
- Métricas del index inicial sobre `FacturacionDian`: 658 archivos, 7.954 nodes, 14.869 edges, 14.48 MB native SQLite.
|
|
24
|
+
- `scripts/validate-models-schema.mjs`: soporte para clave top-level `phases` opcional + verificación de shape `{ primary, fallback }` por fase. Bloque `phases:` declarado pero vacío produce error explícito.
|
|
25
|
+
|
|
26
|
+
### Docs
|
|
27
|
+
|
|
28
|
+
- README: actualizada tabla `BMAD Comparison` con realidad V6 de BMAD-METHOD (module ecosystem BMM/BMB/TEA/BMGD/CIS, Skills Architecture, Sub-Agent inclusion, scale-adaptive, Discord community) y comparación side-by-side honesta. Datos tomados del README oficial v6 de `bmad-code-org/BMAD-METHOD`.
|
|
29
|
+
- README Roadmap v1.3.0: agregadas entradas `macos-latest` para `regression-install` matrix y bump de `actions/checkout@v5` + `actions/setup-node@v5` con `node-version: 24` antes del deprecation deadline de GitHub (Node 20 deprecated jun 2026, removed sep 2026).
|
|
30
|
+
|
|
31
|
+
## [1.2.1] — 2026-05-18
|
|
32
|
+
|
|
33
|
+
### UX fix — `init` sin `--target` usa cwd
|
|
34
|
+
|
|
35
|
+
- `bin/sdlc.js` (`src/cli.js`): `requireTarget` deja de exigir `--target <repo>`. Cuando se omite, se usa `process.cwd()` como destino.
|
|
36
|
+
- El quickstart del README (`npx sistema-multiagente-sdlc init --dry-run`) ahora coincide con el comportamiento real del CLI; antes fallaba con `Falta --target <repo>`.
|
|
37
|
+
- Mensaje de `help` actualizado: `--target` queda marcado como opcional con default cwd.
|
|
38
|
+
- Regresión nueva en `tests/run-regression.mjs`: smoke test ejecuta `node bin/sdlc.js init --dry-run` desde un tmpdir con `cwd` distinto al repo y verifica que el dry-run no escriba archivos.
|
|
39
|
+
- Sin cambios en `frameworkVersion` (sigue `1.2.0`): no se altera el contenido de los archivos gestionados, solo el front-door del CLI. Las instalaciones existentes no requieren `upgrade` ni migración.
|
|
40
|
+
|
|
41
|
+
## [1.2.0] — 2026-05-17
|
|
4
42
|
|
|
5
43
|
### Phase 1 — Versionado y migraciones
|
|
6
44
|
|
package/README.md
CHANGED
|
@@ -12,10 +12,21 @@ The operating model is SDD waterfall by slice and agile by release: each slice h
|
|
|
12
12
|
|
|
13
13
|
## Quick Start
|
|
14
14
|
|
|
15
|
-
Published package flow
|
|
15
|
+
Published package flow (>=1.2.1):
|
|
16
16
|
|
|
17
17
|
```powershell
|
|
18
|
-
|
|
18
|
+
# Desde la raíz del repo destino (cwd = repo).
|
|
19
|
+
# --target es opcional desde v1.2.1: si se omite, se usa el directorio actual.
|
|
20
|
+
npx sistema-multiagente-sdlc init --mode greenfield --project-name "My Project"
|
|
21
|
+
|
|
22
|
+
# Smoke previo sin escribir nada:
|
|
23
|
+
npx sistema-multiagente-sdlc init --mode greenfield --project-name "My Project" --dry-run --json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Para v1.2.0 (compatibilidad), el comando equivalente requería `--target` explícito:
|
|
27
|
+
|
|
28
|
+
```powershell
|
|
29
|
+
npx sistema-multiagente-sdlc@1.2.0 init --target . --mode greenfield --project-name "My Project"
|
|
19
30
|
```
|
|
20
31
|
|
|
21
32
|
Local development flow:
|
|
@@ -111,21 +122,35 @@ All external installs are opt-in. Scripts default to dry-run or local-only behav
|
|
|
111
122
|
|
|
112
123
|
## BMAD Comparison
|
|
113
124
|
|
|
114
|
-
|
|
125
|
+
Side-by-side de los dos frameworks. La intención no es competir sino aclarar dónde se solapan y dónde cada uno se especializa. Datos de BMAD tomados de su README oficial v6 (`bmad-code-org/BMAD-METHOD`, npm `bmad-method`).
|
|
126
|
+
|
|
127
|
+
| Feature | BMAD-METHOD v6 | SistemaMultiagente_SDLC v1.3.0 |
|
|
115
128
|
| --- | --- | --- |
|
|
116
|
-
|
|
|
117
|
-
|
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
|
|
|
121
|
-
|
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
129
|
+
| License | MIT | MIT |
|
|
130
|
+
| Runtime requisitos | Node ≥20.12, Python ≥3.10, `uv` | Node ≥18, PowerShell (pwsh/powershell), Git |
|
|
131
|
+
| Install command | `npx bmad-method install` (interactive) o `--yes --modules --tools` (CI) | `npx sistema-multiagente-sdlc init` (cwd default desde v1.2.1) |
|
|
132
|
+
| Scope principal | AI-driven agile development | AI-assisted SDLC con governance enterprise y SDD |
|
|
133
|
+
| Workflows | 34+ agile workflows (BMM core) | SDD waterfall por slice + agile por release (F0-F17 phases) |
|
|
134
|
+
| Scale-adaptive | sí, automático (bug → enterprise) | scale hint activo desde v1.3.0 |
|
|
135
|
+
| Agentes/personas | 12+ personas (PM, Architect, Dev, UX, …) | 8 personas activas + roadmap extensible |
|
|
136
|
+
| Party / collaboration mode | yes (multiple personas en sesión) | roundtable opt-in planned v1.3.0 |
|
|
137
|
+
| Help CLI / next-step coach | `bmad-help` skill | `sdlc doctor` (state checks); `sdlc next` planned v1.3.0 |
|
|
138
|
+
| Modules / ecosystem | BMM (core) + BMB (builder) + TEA (test architect) + BMGD (game dev) + CIS (creative) | mode-based (`greenfield` / `legacy`) + extensible packs planned v2.0.0 |
|
|
139
|
+
| Skills architecture | sí (V6 + Sub-Agent inclusion + Cross-Platform Agent Team) | skills mirroring across `.claude/`, `.agents/`, `.windsurf/` (`bootstrap-agent-skills.ps1`) |
|
|
140
|
+
| Custom agent/workflow builder | BMad Builder v1 | personas `.agent.md` + validators (`validate-agent-persona-schema`) |
|
|
141
|
+
| Dev Loop automation | en roadmap V6 | `phase-graph.yaml` + rework label-driven + lock TTL |
|
|
142
|
+
| Brownfield-first | no | sí (legacy mode con research obligatorio antes de proposal) |
|
|
143
|
+
| Governance validators | not core | 14 validators (config, personal-paths, template-sanitization, manifest-integrity, governance-precedence, …) |
|
|
144
|
+
| OpenSpec / SDD | not core | integrated (capacidades canónicas en `openspec/specs/`) |
|
|
145
|
+
| Readiness L1/L2/L3 + matriz NFR | not core | integrated (`business-production-readiness` spec) |
|
|
146
|
+
| Migration system + rollback | not core | backup automático + `sdlc upgrade --to-version` + `sdlc rollback --to <id>` |
|
|
147
|
+
| Multi-agent lock | not core | TTL `platform-context.json` lock |
|
|
148
|
+
| Sanitization de paths/templates | not core | `validate:no-personal-paths` + `validate:template-sanitization` |
|
|
149
|
+
| Provenance (SLSA) | n/d explícito | sí, SLSA v1 + signatures vía OIDC GitHub (workflow `publish.yml`) |
|
|
150
|
+
| Community | Discord abierto, YouTube, X | GitHub Issues + Discussions (Discord no necesario) |
|
|
151
|
+
| Trademark | BMad / BMAD-METHOD trademarks of BMad Code, LLC | sin restricción explícita más allá de MIT |
|
|
152
|
+
|
|
153
|
+
Lectura corta: BMAD lidera en agile breadth y community (12+ personas, 34+ workflows, 5 módulos, Discord activo, Skills Architecture V6). SistemaMultiagente_SDLC lidera en governance + brownfield + SDD + validators (14) + migration system + readiness L1/L2/L3 + sanitization. Ambos pueden coexistir: BMAD orquesta; SistemaMultiagente_SDLC orquesta **y verifica**.
|
|
129
154
|
|
|
130
155
|
## Roadmap
|
|
131
156
|
|
|
@@ -137,6 +162,8 @@ v1.3.0:
|
|
|
137
162
|
- calibration extensions
|
|
138
163
|
- roundtable opt-in
|
|
139
164
|
- docs site
|
|
165
|
+
- regression-install matrix: agregar `macos-latest` (triple coverage ubuntu + windows + macos)
|
|
166
|
+
- bump `actions/checkout@v5` + `actions/setup-node@v5` con `node-version: 24`; deadline GitHub: Node 20 deprecated jun 2026, removed sep 2026
|
|
140
167
|
|
|
141
168
|
v2.0.0:
|
|
142
169
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function up(files = {}) {
|
|
2
|
+
const extra = {
|
|
3
|
+
".sdlc/migrations/1.3.0-applied.txt": "Migration 1.3.0 applied by SistemaMultiagente_SDLC.\ngenerated-by-sdlc\n"
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
const configPath = ".sdlc/config.json";
|
|
7
|
+
if (typeof files[configPath] === "string") {
|
|
8
|
+
const config = JSON.parse(files[configPath]);
|
|
9
|
+
config.frameworkVersion = "1.3.0";
|
|
10
|
+
extra[configPath] = `${JSON.stringify(config, null, 2)}\n`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return extra;
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"type": "string",
|
|
22
22
|
"enum": ["bug", "feature", "epic", "platform"],
|
|
23
23
|
"default": "feature",
|
|
24
|
-
"description": "
|
|
24
|
+
"description": "Scale hint used by v1.3.0+ for adaptive planning and agent routing."
|
|
25
25
|
},
|
|
26
26
|
"stack": {
|
|
27
27
|
"type": "object",
|
|
@@ -25,7 +25,31 @@ for (const platform of ["claude_code", "codex", "copilot", "windsurf"]) {
|
|
|
25
25
|
requirePattern(new RegExp(`^ ${platform}:\\s*\\n default:\\s*\\S+`, "m"), `platform ${platform} requires default`);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
// Optional `phases:` block (v1.3.0+). When present, each phase entry must
|
|
29
|
+
// declare primary and fallback model identifiers, same shape as `roles`.
|
|
30
|
+
if (/^phases:\s*$/m.test(content)) {
|
|
31
|
+
const phasesBlockRegex = /^phases:\s*$([\s\S]*?)(?=^[A-Za-z0-9_-]+:|\Z)/m;
|
|
32
|
+
const phasesBlockMatch = phasesBlockRegex.exec(content);
|
|
33
|
+
if (phasesBlockMatch) {
|
|
34
|
+
const phasesBody = phasesBlockMatch[1];
|
|
35
|
+
const phaseEntryRegex = /^ ([A-Za-z0-9_-]+):\s*$/gm;
|
|
36
|
+
let phaseMatch;
|
|
37
|
+
let phasesFound = 0;
|
|
38
|
+
while ((phaseMatch = phaseEntryRegex.exec(phasesBody)) !== null) {
|
|
39
|
+
phasesFound += 1;
|
|
40
|
+
const phaseName = phaseMatch[1];
|
|
41
|
+
const phaseShape = new RegExp(`^ ${phaseName}:\\s*\\n primary:\\s*\\S+\\n fallback:\\s*\\S+`, "m");
|
|
42
|
+
if (!phaseShape.test(phasesBody)) {
|
|
43
|
+
errors.push(`phase ${phaseName} requires primary and fallback`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (phasesFound === 0) {
|
|
47
|
+
errors.push("phases block declared but contains no phase entries");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const allowedTopLevel = new Set(["version", "updated", "roles", "platforms", "phases", "fallbacks"]);
|
|
29
53
|
for (const line of content.split("\n")) {
|
|
30
54
|
const match = /^([A-Za-z0-9_-]+):/.exec(line);
|
|
31
55
|
if (match && !allowedTopLevel.has(match[1])) {
|
package/src/cli.js
CHANGED
|
@@ -65,9 +65,7 @@ function print(payload, json) {
|
|
|
65
65
|
|
|
66
66
|
function requireTarget(options) {
|
|
67
67
|
if (!options.target) {
|
|
68
|
-
|
|
69
|
-
error.exitCode = EXIT_ERROR;
|
|
70
|
-
throw error;
|
|
68
|
+
return path.resolve(process.cwd());
|
|
71
69
|
}
|
|
72
70
|
return path.resolve(options.target);
|
|
73
71
|
}
|
|
@@ -394,7 +392,7 @@ function collectDoctorEnhancements(target, config) {
|
|
|
394
392
|
}
|
|
395
393
|
|
|
396
394
|
if (!config || !config.scale) {
|
|
397
|
-
findings.push({ level: "error", code: "scale-missing", message: "config.scale is required in v1.
|
|
395
|
+
findings.push({ level: "error", code: "scale-missing", message: "config.scale is required in v1.3.0" });
|
|
398
396
|
} else {
|
|
399
397
|
findings.push({ level: "info", code: "scale-present", message: `scale=${config.scale}` });
|
|
400
398
|
}
|
|
@@ -624,7 +622,7 @@ function commandHelp() {
|
|
|
624
622
|
exitCode: EXIT_OK,
|
|
625
623
|
payload: {
|
|
626
624
|
status: "ok",
|
|
627
|
-
message: "Uso: sdlc <init|install|upgrade|rollback|doctor|diff|prune-backups|migrate-config> --target <repo> [--json]"
|
|
625
|
+
message: "Uso: sdlc <init|install|upgrade|rollback|doctor|diff|prune-backups|migrate-config> [--target <repo>] [--json]\nSi --target se omite, se usa el directorio actual (process.cwd())."
|
|
628
626
|
}
|
|
629
627
|
};
|
|
630
628
|
}
|
package/src/migrations.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { up as up_1_0_1 } from "../migrations/1.0.1/up.mjs";
|
|
2
2
|
import { up as up_1_1_0 } from "../migrations/1.1.0/up.mjs";
|
|
3
3
|
import { up as up_1_2_0 } from "../migrations/1.2.0/up.mjs";
|
|
4
|
+
import { up as up_1_3_0 } from "../migrations/1.3.0/up.mjs";
|
|
4
5
|
|
|
5
6
|
const REGISTRY = [
|
|
6
7
|
{ version: "1.0.1", up: up_1_0_1 },
|
|
7
8
|
{ version: "1.1.0", up: up_1_1_0 },
|
|
8
|
-
{ version: "1.2.0", up: up_1_2_0 }
|
|
9
|
+
{ version: "1.2.0", up: up_1_2_0 },
|
|
10
|
+
{ version: "1.3.0", up: up_1_3_0 }
|
|
9
11
|
];
|
|
10
12
|
|
|
11
13
|
function semverTuple(v) {
|
package/src/render.js
CHANGED
|
@@ -2,7 +2,7 @@ import path from "node:path";
|
|
|
2
2
|
import { renderTemplates } from "./template-loader.js";
|
|
3
3
|
export { validateConfigShape } from "./config-validator.js";
|
|
4
4
|
|
|
5
|
-
export const FRAMEWORK_VERSION = "1.
|
|
5
|
+
export const FRAMEWORK_VERSION = "1.3.0";
|
|
6
6
|
export const SCHEMA_VERSION = 1;
|
|
7
7
|
export const SUPPORTED_MODES = new Set(["greenfield", "legacy"]);
|
|
8
8
|
|
|
@@ -23,3 +23,34 @@ Owns functional definition before planning and implementation begin.
|
|
|
23
23
|
- Skip human validation for functional scope.
|
|
24
24
|
- Treat ambiguous stakeholder language as executable specification.
|
|
25
25
|
- Decide architecture ownership without involving `arquitecto`.
|
|
26
|
+
|
|
27
|
+
## Advanced Elicitation
|
|
28
|
+
|
|
29
|
+
When a story is ambiguous, incomplete or contradictory, apply this protocol before producing the functional draft.
|
|
30
|
+
|
|
31
|
+
### Clarification Dimensions
|
|
32
|
+
|
|
33
|
+
Ask at least one question for every undefined dimension:
|
|
34
|
+
|
|
35
|
+
| Dimension | Example question |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Functional | What must the user be able to do at the end? What works today and must not change? |
|
|
38
|
+
| NFR | Is there a response-time, concurrency or data-size constraint? |
|
|
39
|
+
| UX | Is there visible UI? Where does it happen? How does the user know it finished? |
|
|
40
|
+
| Integration | Which external systems participate? What happens if one fails? |
|
|
41
|
+
|
|
42
|
+
### Minimum Acceptance Criteria
|
|
43
|
+
|
|
44
|
+
Do not move to design until these exist:
|
|
45
|
+
|
|
46
|
+
1. Actor + action + expected result.
|
|
47
|
+
2. Happy path + one unhappy path.
|
|
48
|
+
3. Functional Definition of Done.
|
|
49
|
+
|
|
50
|
+
### Escalation
|
|
51
|
+
|
|
52
|
+
If the stakeholder cannot answer in one elicitation session:
|
|
53
|
+
|
|
54
|
+
1. Mark gaps in the draft with `[GAP: undefined]`.
|
|
55
|
+
2. Propose a 48-hour deadline in the validation block.
|
|
56
|
+
3. If still undefined after 48 hours, escalate to the human business owner and do not move to design.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: edge-case-hunter
|
|
3
|
+
description: "Structured edge-case checklist for F3/F4 before implementation. Adapted from BMAD-METHOD patterns without installing the full framework."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Edge Case Hunter
|
|
7
|
+
|
|
8
|
+
## Goal
|
|
9
|
+
|
|
10
|
+
Produce an edge-case inventory for a capability before implementation starts. The goal is not to block delivery; it is to force hard cases into design time instead of QA or production.
|
|
11
|
+
|
|
12
|
+
## When To Use
|
|
13
|
+
|
|
14
|
+
- **F3 Design** — before closing design and moving to implementation.
|
|
15
|
+
- **F4 Validation** — pre-merge review when design skipped edge-case review.
|
|
16
|
+
|
|
17
|
+
## Checklist
|
|
18
|
+
|
|
19
|
+
Answer every dimension. A "not applicable" answer must include a one-line justification.
|
|
20
|
+
|
|
21
|
+
### 1. Invalid Or Boundary Input
|
|
22
|
+
|
|
23
|
+
- [ ] Empty, null or undefined input.
|
|
24
|
+
- [ ] Zero-size input: empty array, empty string, object without properties.
|
|
25
|
+
- [ ] Valid min and max boundary.
|
|
26
|
+
- [ ] Just outside valid boundary.
|
|
27
|
+
- [ ] Wrong types.
|
|
28
|
+
|
|
29
|
+
### 2. Concurrency And Shared State
|
|
30
|
+
|
|
31
|
+
- [ ] Two users execute the same operation on the same resource.
|
|
32
|
+
- [ ] Read/write race condition.
|
|
33
|
+
- [ ] Retry after partial state change.
|
|
34
|
+
|
|
35
|
+
### 3. Partial Failure And Recovery
|
|
36
|
+
|
|
37
|
+
- [ ] Step N fails after step N-1 already changed state.
|
|
38
|
+
- [ ] Rollback or explicit partial-state handling.
|
|
39
|
+
- [ ] Error message names the failing step enough for recovery.
|
|
40
|
+
|
|
41
|
+
### 4. External Dependencies
|
|
42
|
+
|
|
43
|
+
- [ ] External service timeout.
|
|
44
|
+
- [ ] Unexpected response shape.
|
|
45
|
+
- [ ] Retry idempotency.
|
|
46
|
+
|
|
47
|
+
### 5. Authorization And Privacy
|
|
48
|
+
|
|
49
|
+
- [ ] User changes an ID in the URL or payload.
|
|
50
|
+
- [ ] Logs or errors expose sensitive data.
|
|
51
|
+
- [ ] Permission validation happens on the server, not only in UI.
|
|
52
|
+
|
|
53
|
+
### 6. Volume And Performance
|
|
54
|
+
|
|
55
|
+
- [ ] Large result set.
|
|
56
|
+
- [ ] Required indexes for queries.
|
|
57
|
+
- [ ] Explicit response limits.
|
|
58
|
+
|
|
59
|
+
## Expected Output
|
|
60
|
+
|
|
61
|
+
Add an `### Edge cases` section to the design or local issue with:
|
|
62
|
+
|
|
63
|
+
- Cases that pass.
|
|
64
|
+
- Cases that create implementation tasks.
|
|
65
|
+
- Cases that do not apply, with justification.
|
|
66
|
+
|
|
67
|
+
## Limits
|
|
68
|
+
|
|
69
|
+
- Do not invent unrelated cases.
|
|
70
|
+
- If investigation takes more than 30 minutes, create a spike.
|
|
71
|
+
- This complements QA; it does not replace it.
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
| `sdlc install --mode legacy` | instala gobierno en proyecto brownfield |
|
|
9
9
|
| `sdlc doctor --json` | valida estado instalado |
|
|
10
10
|
| `sdlc diff --json` | detecta drift contra templates |
|
|
11
|
-
| `sdlc upgrade --to-version 1.
|
|
11
|
+
| `sdlc upgrade --to-version 1.3.0` | aplica migraciones |
|
|
12
12
|
| `sdlc rollback --to <backup>` | restaura backup |
|
|
13
13
|
| `sdlc prune-backups --keep 5` | limpia backups antiguos |
|
|
14
14
|
|
package/templates/manifest.yaml
CHANGED
|
@@ -172,6 +172,8 @@ templates:
|
|
|
172
172
|
target: .claude/skills/enrich-us/SKILL.md
|
|
173
173
|
- source: .github/skills/enrich-us/SKILL.md
|
|
174
174
|
target: .github/skills/enrich-us/SKILL.md
|
|
175
|
+
- source: .github/skills/edge-case-hunter/SKILL.md
|
|
176
|
+
target: .github/skills/edge-case-hunter/SKILL.md
|
|
175
177
|
- source: .claude/skills/commit/SKILL.md
|
|
176
178
|
target: .claude/skills/commit/SKILL.md
|
|
177
179
|
- source: .github/skills/commit/SKILL.md
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
version: 1
|
|
2
|
-
updated: "2026-05-
|
|
2
|
+
updated: "2026-05-19"
|
|
3
3
|
|
|
4
4
|
roles:
|
|
5
5
|
orquestador:
|
|
@@ -25,6 +25,36 @@ platforms:
|
|
|
25
25
|
windsurf:
|
|
26
26
|
default: claude-sonnet-4-6
|
|
27
27
|
|
|
28
|
+
# Per-phase model assignment (opt-in, v1.3.0+).
|
|
29
|
+
# Asignar modelos distintos a cada fase del flujo SDD para optimizar costo sin
|
|
30
|
+
# perder calidad en pasos críticos. Cuando una fase no aparezca aquí, se usa el
|
|
31
|
+
# rol equivalente (ver bloque `roles` arriba). Esto NO reemplaza `roles`/`platforms`;
|
|
32
|
+
# es una capa de override más fina.
|
|
33
|
+
#
|
|
34
|
+
# Convenciones:
|
|
35
|
+
# - Claves: nombres canónicos de fase F0-F17 (ver docs/agents/presentacion-sistema-multiagente-sdlc.md)
|
|
36
|
+
# o pseudo-fases SDD (`sdd-explore`, `sdd-design`, `sdd-implement`, `sdd-review`).
|
|
37
|
+
# - Valores: { primary, fallback }, mismo schema que `roles`.
|
|
38
|
+
# - Modelos `cheap:*` o `:free` quedan permitidos para exploración/triage donde la
|
|
39
|
+
# precisión no es crítica. Ver ADR 0003 para criterios.
|
|
40
|
+
phases:
|
|
41
|
+
# F0 triage / exploración rápida → modelo barato
|
|
42
|
+
sdd-explore:
|
|
43
|
+
primary: claude-haiku-4-5-20251001
|
|
44
|
+
fallback: claude-sonnet-4-6
|
|
45
|
+
# F2-F3 análisis y diseño → modelo más capaz
|
|
46
|
+
sdd-design:
|
|
47
|
+
primary: claude-opus-4-7
|
|
48
|
+
fallback: claude-sonnet-4-6
|
|
49
|
+
# F5+ implementación → modelo intermedio
|
|
50
|
+
sdd-implement:
|
|
51
|
+
primary: claude-sonnet-4-6
|
|
52
|
+
fallback: claude-haiku-4-5-20251001
|
|
53
|
+
# F6+ verificación / review → modelo intermedio con fallback a haiku
|
|
54
|
+
sdd-review:
|
|
55
|
+
primary: claude-sonnet-4-6
|
|
56
|
+
fallback: claude-haiku-4-5-20251001
|
|
57
|
+
|
|
28
58
|
fallbacks:
|
|
29
59
|
- claude-sonnet-4-6
|
|
30
60
|
- claude-haiku-4-5-20251001
|