@guilhermefsousa/open-spec-kit 0.0.10 → 0.0.11

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 (28) hide show
  1. package/README.md +1 -1
  2. package/bin/open-spec-kit.js +7 -0
  3. package/package.json +1 -1
  4. package/src/commands/doctor.js +107 -197
  5. package/src/commands/init.js +112 -347
  6. package/src/commands/install.js +393 -0
  7. package/src/commands/update.js +117 -165
  8. package/src/schemas/spec.schema.js +3 -3
  9. package/src/utils/global-path.js +73 -0
  10. package/templates/agents/agents/spec-hub.agent.md +13 -13
  11. package/templates/agents/rules/hub_structure.instructions.md +1 -1
  12. package/templates/agents/rules/ownership.instructions.md +39 -39
  13. package/templates/agents/skills/dev-orchestrator/SKILL.md +17 -17
  14. package/templates/agents/skills/discovery/SKILL.md +17 -17
  15. package/templates/agents/skills/setup-project/SKILL.md +12 -12
  16. package/templates/agents/skills/specifying-features/SKILL.md +28 -28
  17. package/templates/github/agents/spec-hub.agent.md +5 -5
  18. package/templates/github/copilot-instructions.md +9 -9
  19. package/templates/github/instructions/hub_structure.instructions.md +1 -1
  20. package/templates/github/instructions/ownership.instructions.md +9 -9
  21. package/templates/github/skills/dev-orchestrator/SKILL.md +619 -5
  22. package/templates/github/skills/discovery/SKILL.md +419 -5
  23. package/templates/github/skills/setup-project/SKILL.md +496 -5
  24. package/templates/github/skills/specifying-features/SKILL.md +417 -5
  25. /package/templates/github/prompts/{dev.prompt.md → osk-build.prompt.md} +0 -0
  26. /package/templates/github/prompts/{discovery.prompt.md → osk-discover.prompt.md} +0 -0
  27. /package/templates/github/prompts/{setup.prompt.md → osk-init.prompt.md} +0 -0
  28. /package/templates/github/prompts/{nova-feature.prompt.md → osk-spec.prompt.md} +0 -0
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: specifying-features
2
+ name: osk-spec
3
3
  description: "Breaks an approved PRD into N feature specifications with brief, scenarios (Given/When/Then), contracts, and repo-partitioned tasks. Generates/updates Design Document on Confluence."
4
4
  metadata:
5
5
  works_on: [copilot, antigravity, claude]
@@ -16,11 +16,11 @@ Take an approved PRD and produce minimal, unambiguous feature specifications tha
16
16
 
17
17
  ### Validate prerequisites
18
18
 
19
- 1. Read `projects.yml` — if empty, **stop** with message: "/setup não foi executado."
20
- 2. Read `docs/architecture.md` — if file does not exist: **stop** — "/setup não gerou architecture.md. Execute /setup primeiro."
21
- 3. In Confluence (via MCP — same as /setup), find the feature page and check its labels:
22
- - If label `prd-aprovado` is NOT present: **stop** — "PRD não aprovado. A feature precisa ter label 'prd-aprovado' antes de rodar /spec. Execute /discovery primeiro."
23
- - If label `prd-rejeitado` is present AND its addition date is MORE RECENT than `prd-aprovado` (check via MCP — page metadata or label timestamps): **stop** — "PRD foi rejeitado após aprovação. Execute /discovery para resolver antes de prosseguir."
19
+ 1. Read `projects.yml` — if empty, **stop** with message: "/osk-init não foi executado."
20
+ 2. Read `docs/architecture.md` — if file does not exist: **stop** — "/osk-init não gerou architecture.md. Execute /osk-init primeiro."
21
+ 3. In Confluence (via MCP — same as /osk-init), find the feature page and check its labels:
22
+ - If label `prd-aprovado` is NOT present: **stop** — "PRD não aprovado. A feature precisa ter label 'prd-aprovado' antes de rodar /osk-spec. Execute /osk-discover primeiro."
23
+ - If label `prd-rejeitado` is present AND its addition date is MORE RECENT than `prd-aprovado` (check via MCP — page metadata or label timestamps): **stop** — "PRD foi rejeitado após aprovação. Execute /osk-discover para resolver antes de prosseguir."
24
24
  - If `prd-aprovado` IS present and no subsequent `prd-rejeitado`: proceed
25
25
  4. Read the feature page content — verify it has a "## PRD" section with "### Requisitos aceitos". If not: **stop** — "PRD não encontrado na página da feature."
26
26
  5. **Idempotency check**: if `specs/` already contains a directory for this feature (matching name or Confluence page ID in links.md):
@@ -46,8 +46,8 @@ Read these files FIRST:
46
46
  **Figma freshness check (if Figma configured):**
47
47
  If `projects.yml` has `figma.file_url` and Figma MCP is available:
48
48
  1. Read `get_metadata()` for the feature's frames
49
- 2. Compare key elements (screen count, form fields) against what /discovery captured in the PRD
50
- 3. If significant changes detected (new screens, removed fields) → WARN: "Design no Figma mudou desde o /discovery. Diferenças: {list}. Continuar com o design atual ou re-executar /discovery?"
49
+ 2. Compare key elements (screen count, form fields) against what /osk-discover captured in the PRD
50
+ 3. If significant changes detected (new screens, removed fields) → WARN: "Design no Figma mudou desde o /osk-discover. Diferenças: {list}. Continuar com o design atual ou re-executar /osk-discover?"
51
51
  4. If no changes or Figma unavailable → proceed silently
52
52
 
53
53
  ## Inputs
@@ -80,8 +80,8 @@ Numbering is sequential: find the highest existing number in `specs/` and increm
80
80
  ### 3. Write specs (per feature)
81
81
 
82
82
  > **⚠️ MANDATORY: generate ALL 5 files per feature — `brief.md`, `scenarios.md`, `contracts.md`, `tasks.md`, `links.md`.**
83
- > `/dev` rejects specs with missing files (checks in Phase A). `open-spec-kit validate` fails on Rule-01 if any of the 5 are absent.
84
- > `links.md` is frequently forgotten because it's the smallest — it is **mandatory** and `/dev` depends on it to track post-merge PRs.
83
+ > `/osk-build` rejects specs with missing files (checks in Phase A). `open-spec-kit validate` fails on Rule-01 if any of the 5 are absent.
84
+ > `links.md` is frequently forgotten because it's the smallest — it is **mandatory** and `/osk-build` depends on it to track post-merge PRs.
85
85
 
86
86
  **MANDATORY LANGUAGE for ALL generated files**: Brazilian Portuguese (pt-BR) with correct accents. This includes code comments, Gherkin descriptions, and free text. Examples: "não" NOT "nao", "autenticação" NOT "autenticacao", "código" NOT "codigo", "é" NOT "e", "já" NOT "ja", "número" NOT "numero", "válido" NOT "valido", "obrigatório" NOT "obrigatorio", "mínimo" NOT "minimo". Technical terms stay in English (endpoint, token, hash, bcrypt, JWT).
87
87
 
@@ -142,7 +142,7 @@ Numbering is sequential: find the highest existing number in `specs/` and increm
142
142
  - **NFR scenarios (if PRD has "Requisitos Não-Funcionais")**: for each measurable NFR target (e.g., "GET /bills < 200ms p95"), create at least one CT-NNN-XX scenario with a concrete Given/When/Then. Example: `Given 50 concurrent users, When GET /api/v1/bills with filters, Then p95 response time < 200ms`. If the NFR is not measurable in a test (e.g., "99.9% uptime"), include it in brief.md under "Restrições" instead. Add NFR-related tasks to tasks.md (e.g., "add response time middleware", "configure rate limiting").
143
143
  - **No unresolved markers (MANDATORY)**: specs MUST NOT contain any of these markers anywhere — including inside code blocks and code examples:
144
144
  `MOCKADO`, `TODO`, `A CONFIRMAR`, `TBD`, `FIXME`, `PLACEHOLDER`, `TKTK`
145
- If any assumption is not validated, go back to /discovery to resolve it.
145
+ If any assumption is not validated, go back to /osk-discover to resolve it.
146
146
  The `open-spec-kit validate` command will ERROR on any unresolved marker.
147
147
  - **Cross-spec dependencies are NOT REQs**: if a feature uses an entity or type defined in another spec, do NOT create a REQ for it. Instead, use a `> Dependency:` block in the brief:
148
148
  `> Dependency: Uses entity Tutor defined in specs/002 (see contracts.md of feature 002)`
@@ -181,7 +181,7 @@ Additional rules:
181
181
  #### tasks.md
182
182
  - **IMPORTANT**: use the EXACT repo name as declared in `projects.yml` as heading `## repo-name`. E.g., `## todo-app-api`, NOT `## Backend`. The `open-spec-kit validate` command checks that headings match repos from projects.yml (Rule 21).
183
183
  - Group tasks by repo (from `projects.yml`) — each `## repo` heading is one **execution unit** (1 agent or 1 dev)
184
- - **Validate repos**: every repo referenced in tasks.md MUST exist in `projects.yml`. If a task references a repo not in projects.yml, **add it** with `status: planned` and `url: null`. The /dev will auto-create it in Phase A.1. Log: "Repo '{name}' adicionado ao projects.yml com status: planned."
184
+ - **Validate repos**: every repo referenced in tasks.md MUST exist in `projects.yml`. If a task references a repo not in projects.yml, **add it** with `status: planned` and `url: null`. The /osk-build will auto-create it in Phase A.1. Log: "Repo '{name}' adicionado ao projects.yml com status: planned."
185
185
  - Within each `## repo` block, list tasks in execution order — the list order IS the dependency order (no need to annotate dependencies between tasks of the same block)
186
186
  - **Parallelism between blocks**: if a repo block depends ONLY on contracts (already defined in contracts.md) and NOT on the implementation of another block, mark with `[P]` — it can start in parallel. Example: `### todo-front [P] — can start after contracts are defined`
187
187
  - **Dependency between blocks**: if a repo block REQUIRES another block to be COMPLETED first, declare explicitly with `> Dependency: todo-api block must be completed before starting`
@@ -192,11 +192,11 @@ Additional rules:
192
192
  - M (médio): 2-8h, multiple files, may need investigation
193
193
  - G (grande): > 8h, complex logic, new patterns, integration work
194
194
  - Format: `- [ ] [P] T-NNN-REPO-XX: description (REQ-NNN)`
195
- - **Feature grande**: if the PRD has more than 15 behaviors/requirements or spans 4+ repos, /discovery should have flagged it already. If it arrived here approved, proceed without questioning. Just note in brief.md: "Feature com {N} requisitos — escopo aprovado pelo PO."
195
+ - **Feature grande**: if the PRD has more than 15 behaviors/requirements or spans 4+ repos, /osk-discover should have flagged it already. If it arrived here approved, proceed without questioning. Just note in brief.md: "Feature com {N} requisitos — escopo aprovado pelo PO."
196
196
 
197
197
  #### links.md
198
198
  - Link to Confluence feature page
199
- - Empty PR table with this schema (filled by /dev during implementation):
199
+ - Empty PR table with this schema (filled by /osk-build during implementation):
200
200
 
201
201
  ```markdown
202
202
  ## PRs
@@ -205,7 +205,7 @@ Additional rules:
205
205
  |------|--------|-------|--------|
206
206
  ```
207
207
 
208
- Status values: `open`, `em-review`, `merged`, `closed`. The /dev uses the Status column to detect merged MRs for post-merge Phase D.
208
+ Status values: `open`, `em-review`, `merged`, `closed`. The /osk-build uses the Status column to detect merged MRs for post-merge Phase D.
209
209
 
210
210
  #### ✅ Artifact checklist (MANDATORY — verify before proceeding to self-review)
211
211
 
@@ -215,7 +215,7 @@ Confirm you generated all **5 files** for this feature:
215
215
  - [ ] `scenarios.md` — Given/When/Then per behavior
216
216
  - [ ] `contracts.md` — endpoints, entities, enums, rules
217
217
  - [ ] `tasks.md` — checklist per repo (use EXACT repo name from projects.yml as heading `##`)
218
- - [ ] `links.md` — Confluence URL + PR table ← **frequently forgotten; /dev depends on this file**
218
+ - [ ] `links.md` — Confluence URL + PR table ← **frequently forgotten; /osk-build depends on this file**
219
219
 
220
220
  If any file is missing, **create it now** before continuing.
221
221
 
@@ -226,7 +226,7 @@ If contracts.md defines REST endpoints, generate a minimal OpenAPI 3.0 stub file
226
226
  - request/response schemas (from contract types)
227
227
  - auth scheme (if authenticated endpoints: bearerAuth)
228
228
 
229
- This is a STUB — /dev may extend it during implementation. Mark as draft: `info.description: "Auto-generated from contracts.md — draft"`
229
+ This is a STUB — /osk-build may extend it during implementation. Mark as draft: `info.description: "Auto-generated from contracts.md — draft"`
230
230
 
231
231
  If the feature has no REST endpoints (e.g., worker-only feature), skip this step.
232
232
 
@@ -276,23 +276,23 @@ Result values:
276
276
  - ⚠️ = partially passing, documented exceptions (include reason)
277
277
  - ❌ = failing — MUST be fixed before proceeding (this state should not appear in the final report since all failures are fixed first)
278
278
 
279
- The /dev reads this report in Phase A before starting implementation. If it contains ⚠️ items, the dev evaluates whether to proceed or request spec changes.
279
+ The /osk-build reads this report in Phase A before starting implementation. If it contains ⚠️ items, the dev evaluates whether to proceed or request spec changes.
280
280
 
281
281
  ### 5. Validate Glossary on Confluence (read-only)
282
282
 
283
- > **Ownership rule**: the Glossário is updated ONLY by /discovery (exit gate). The /spec only VALIDATES.
283
+ > **Ownership rule**: the Glossário is updated ONLY by /osk-discover (exit gate). The /osk-spec only VALIDATES.
284
284
 
285
- Check if the /discovery phase identified new terms (see "GLOSSÁRIO" notes on the feature page or in the PRD). If yes:
285
+ Check if the /osk-discover phase identified new terms (see "GLOSSÁRIO" notes on the feature page or in the PRD). If yes:
286
286
  1. Read the current Glossário on Confluence (in storage format)
287
287
  2. Verify that ALL new terms listed in the PRD section "GLOSSÁRIO: termos novos" are present in the Glossário page
288
- 3. **If any term is MISSING**: **stop** — "Glossário incompleto. O /discovery deveria ter adicionado os termos '{missing}' no exit gate. Re-execute /discovery para corrigir."
288
+ 3. **If any term is MISSING**: **stop** — "Glossário incompleto. O /osk-discover deveria ter adicionado os termos '{missing}' no exit gate. Re-execute /osk-discover para corrigir."
289
289
  4. **If all terms are present**: proceed (no update needed)
290
290
 
291
- Do NOT add terms directly — this is /discovery's responsibility.
291
+ Do NOT add terms directly — this is /osk-discover's responsibility.
292
292
 
293
293
  ### 6. Generate/update Design Document on Confluence
294
294
 
295
- > **Ownership rule**: the DD is owned by the `design-doc` agent (Labs). The /spec delegates creation/update to it. Only uses MCP directly as a fallback.
295
+ > **Ownership rule**: the DD is owned by the `design-doc` agent (Labs). The /osk-spec delegates creation/update to it. Only uses MCP directly as a fallback.
296
296
 
297
297
  Read `projects.yml` → `agents.design_doc`. If configured (not null), use that agent to generate or update the DD on Confluence with:
298
298
  - Updated architecture (if feature adds components)
@@ -333,7 +333,7 @@ Read `projects.yml` → `agents.design_doc`. If configured (not null), use that
333
333
  • tasks.md — {task_count} tasks por repo
334
334
 
335
335
  📊 <b>Cobertura:</b> {req_count} REQs → {scenario_count} cenários" \
336
- --next "Review técnico antes de iniciar /dev" \
336
+ --next "Review técnico antes de iniciar /osk-build" \
337
337
  --button-text "Ver spec no Confluence" \
338
338
  --button-url "{feature_page_url}"
339
339
 
@@ -404,7 +404,7 @@ If a Confluence operation fails mid-flow (updating DD, changing labels, reading
404
404
  ### Integration
405
405
  - [ ] DD updated on Confluence
406
406
  - [ ] Glossary validated on Confluence (all PRD terms present)
407
- - [ ] All open decisions in architecture.md resolved (no blockers for /dev)
407
+ - [ ] All open decisions in architecture.md resolved (no blockers for /osk-build)
408
408
  - [ ] Feature label updated on Confluence → `em-spec`
409
409
  - [ ] All spec files committed and pushed
410
410
  - [ ] GChat notification sent
@@ -412,10 +412,10 @@ If a Confluence operation fails mid-flow (updating DD, changing labels, reading
412
412
 
413
413
  ## Exit gate (BLOCKING — cannot close the loop without these)
414
414
 
415
- The /spec CANNOT be considered done until ALL of the following are true. If any item fails, fix it before moving to /dev.
415
+ The /osk-spec CANNOT be considered done until ALL of the following are true. If any item fails, fix it before moving to /osk-build.
416
416
 
417
417
  1. **Design Document exists and is updated on Confluence** — the DD page MUST exist under the project root. If it doesn't exist, create it. If it exists, add/update the section for this feature. NEVER skip this step. Verify by reading the DD page after updating.
418
- 2. **Glossary validated** — if any feature PRD has a "GLOSSÁRIO: termos novos" section, ALL listed terms MUST be present in the Glossário page. Read the Glossário page and verify. If any term is MISSING: **stop** — "Glossário incompleto. Re-execute /discovery para adicionar os termos faltantes." The /spec does NOT add terms — it only validates that /discovery did its job.
419
- 3. **All decisions resolved** — read `docs/architecture.md` "Decisões em Aberto" section. If ANY decision is still open that blocks /dev, the /spec CANNOT close. Technical decisions can be resolved by the dev team. Business decisions must go back to the PO. If an open decision needs resolution, go back to /discovery — the /spec does not resolve decisions, only validates.
418
+ 2. **Glossary validated** — if any feature PRD has a "GLOSSÁRIO: termos novos" section, ALL listed terms MUST be present in the Glossário page. Read the Glossário page and verify. If any term is MISSING: **stop** — "Glossário incompleto. Re-execute /osk-discover para adicionar os termos faltantes." The /osk-spec does NOT add terms — it only validates that /osk-discover did its job.
419
+ 3. **All decisions resolved** — read `docs/architecture.md` "Decisões em Aberto" section. If ANY decision is still open that blocks /osk-build, the /osk-spec CANNOT close. Technical decisions can be resolved by the dev team. Business decisions must go back to the PO. If an open decision needs resolution, go back to /osk-discover — the /osk-spec does not resolve decisions, only validates.
420
420
  4. **Self-review completed** — the traceability matrix (REQ → CT, CT → REQ) MUST be verified. Report what was checked and any fixes applied. Do NOT skip silently.
421
421
  5. **Commit and push** — all spec files MUST be committed and pushed to the spec repo before closing. Verify with `git status` that working directory is clean.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: spec-agent
3
- description: "Orquestra o ciclo de especificação: invoca skills (/setup, /discovery, /spec, /dev) e coordena agents do Labs."
3
+ description: "Orquestra o ciclo de especificação: invoca skills (/osk-init, /osk-discover, /osk-spec, /osk-build) e coordena agents do Labs."
4
4
  user-invocable: true
5
5
  disable-model-invocation: false
6
6
  tools:
@@ -47,10 +47,10 @@ Cada skill tem instruções completas em `.agents/skills/*/SKILL.md`:
47
47
 
48
48
  | Skill | Prompt file | O que faz |
49
49
  |-------|-------------|-----------|
50
- | Setup | `/setup` | Bootstrap do projeto a partir do Confluence |
51
- | Discovery | `/discovery` | Análise de demanda, Q&A com PO, gera PRD |
52
- | Spec | `/nova-feature` | Quebra PRD em specs técnicas (brief, cenários, contratos, tasks) |
53
- | Dev | `/dev` | Orquestra implementação (TDD, MR, security, docs vivas) |
50
+ | Setup | `/osk-init` | Bootstrap do projeto a partir do Confluence |
51
+ | Discovery | `/osk-discover` | Análise de demanda, Q&A com PO, gera PRD |
52
+ | Spec | `/osk-spec` | Quebra PRD em specs técnicas (brief, cenários, contratos, tasks) |
53
+ | Dev | `/osk-build` | Orquestra implementação (TDD, MR, security, docs vivas) |
54
54
 
55
55
  ## Sub-agents
56
56
 
@@ -25,10 +25,10 @@ Invoke via prompt files (digite `/` no chat):
25
25
 
26
26
  | Comando | Skill | O que faz |
27
27
  |---------|-------|-----------|
28
- | `/setup` | setup-project | Bootstrap do projeto a partir do Confluence |
29
- | `/discovery` | discovery | Análise de demanda, Q&A com PO, gera PRD |
30
- | `/nova-feature` | specifying-features | Quebra PRD em specs técnicas |
31
- | `/dev` | dev-orchestrator | Orquestra implementação TDD |
28
+ | `/osk-init` | osk-init | Bootstrap do projeto a partir do Confluence |
29
+ | `/osk-discover` | osk-discover | Análise de demanda, Q&A com PO, gera PRD |
30
+ | `/osk-spec` | osk-spec | Quebra PRD em specs técnicas |
31
+ | `/osk-build` | osk-build | Orquestra implementação TDD |
32
32
 
33
33
  Cada prompt file aponta para o SKILL.md completo em `.agents/skills/*/SKILL.md`.
34
34
 
@@ -75,12 +75,12 @@ Este projeto suporta Claude Code e Copilot. Ao modificar agents, rules ou skills
75
75
 
76
76
  ```
77
77
  Projeto (Space ou página raiz)
78
- +-- Visão do Produto <- /setup gera
79
- +-- Glossário <- /setup gera | /discovery e /dev atualizam
80
- +-- DD (Design Document) <- design-doc agent gera | /dev atualiza
78
+ +-- Visão do Produto <- /osk-init gera
79
+ +-- Glossário <- /osk-init gera | /osk-discover e /osk-build atualizam
80
+ +-- DD (Design Document) <- design-doc agent gera | /osk-build atualiza
81
81
  +-- Demandas/ <- PO joga docs aqui
82
- +-- Features/ <- /setup cria | /discovery escreve dúvidas + PRD
83
- +-- Domínio/ <- /setup gera | /dev atualiza
82
+ +-- Features/ <- /osk-init cria | /osk-discover escreve dúvidas + PRD
83
+ +-- Domínio/ <- /osk-init gera | /osk-build atualiza
84
84
  | +-- Regras
85
85
  | +-- Fluxos
86
86
  | +-- Tabelas de Referência
@@ -23,7 +23,7 @@ applyTo: "specs/**,docs/**,projects.yml"
23
23
  | `contracts.md` | Schemas, tipos, regras de negócio |
24
24
  | `tasks.md` | Tarefas por repo (1 task = 1 PR) |
25
25
  | `links.md` | Tracking de PRs + link Confluence |
26
- | `audit-report.md` | Resultado do self-review do /spec |
26
+ | `audit-report.md` | Resultado do self-review do /osk-spec |
27
27
  | `conformance-report.json` | Validação de conformidade pós-implementação |
28
28
 
29
29
  ## Regras
@@ -19,15 +19,15 @@ Antes de criar ou modificar qualquer artefato, leia `.agents/rules/ownership.ins
19
19
 
20
20
  | Artefato | Owner | Updater |
21
21
  |----------|-------|---------|
22
- | `projects.yml` | /setup | /spec, /dev |
23
- | `docs/architecture.md` | /setup | /discovery |
24
- | `specs/NNN/brief.md` | /spec | — |
25
- | `specs/NNN/scenarios.md` | /spec | — |
26
- | `specs/NNN/contracts.md` | /spec | — |
27
- | `specs/NNN/tasks.md` | /spec | — |
28
- | `specs/NNN/links.md` | /spec | /dev |
29
- | `specs/NNN/audit-report.md` | /spec | — |
30
- | `specs/NNN/conformance-report.json` | /dev | — |
22
+ | `projects.yml` | /osk-init | /osk-spec, /osk-build |
23
+ | `docs/architecture.md` | /osk-init | /osk-discover |
24
+ | `specs/NNN/brief.md` | /osk-spec | — |
25
+ | `specs/NNN/scenarios.md` | /osk-spec | — |
26
+ | `specs/NNN/contracts.md` | /osk-spec | — |
27
+ | `specs/NNN/tasks.md` | /osk-spec | — |
28
+ | `specs/NNN/links.md` | /osk-spec | /osk-build |
29
+ | `specs/NNN/audit-report.md` | /osk-spec | — |
30
+ | `specs/NNN/conformance-report.json` | /osk-build | — |
31
31
 
32
32
  ## Labels de feature (fluxo sequencial)
33
33