atlas-workflow 0.8.2
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/LICENSE +21 -0
- package/README.md +235 -0
- package/VERSION +1 -0
- package/build/cli/atlas-init.mjs +590 -0
- package/hosts/opencode/.opencode/agents/atlas-direct-execute.md +31 -0
- package/hosts/opencode/.opencode/agents/atlas-findings-repair.md +35 -0
- package/hosts/opencode/.opencode/agents/atlas-plan-execute.md +33 -0
- package/hosts/opencode/.opencode/agents/atlas-slice-review.md +27 -0
- package/hosts/opencode/.opencode/agents/atlas-task-validator.md +121 -0
- package/hosts/opencode/.opencode/atlas/VERSION +1 -0
- package/hosts/opencode/.opencode/atlas/orchestrator/README.md +261 -0
- package/hosts/opencode/.opencode/atlas/orchestrator/commands/workflow.md +37 -0
- package/hosts/opencode/.opencode/atlas/orchestrator/defaults/paths.md +21 -0
- package/hosts/opencode/.opencode/atlas/orchestrator/references/host-adapters.md +104 -0
- package/hosts/opencode/.opencode/atlas/orchestrator/references/qa_s13_matrix.md +141 -0
- package/hosts/opencode/.opencode/atlas/orchestrator/references/subagent_dispatch.md +42 -0
- package/hosts/opencode/.opencode/atlas/orchestrator/skills/atlas-workflow-orchestrator/SKILL.md +412 -0
- package/hosts/opencode/.opencode/atlas/packages/mcp-server/README.md +28 -0
- package/hosts/opencode/.opencode/atlas/packages/mcp-server/package.json +15 -0
- package/hosts/opencode/.opencode/atlas/packages/mcp-server/server.js +3076 -0
- package/hosts/opencode/.opencode/atlas/packages/templates/BACKLOG_MESTRE_TEMPLATE.md +844 -0
- package/hosts/opencode/.opencode/atlas/packages/templates/BOUNDARY_PRD_PLAN.md +93 -0
- package/hosts/opencode/.opencode/atlas/packages/templates/PERGUNTAS_EM_ABERTO_TEMPLATE.md +139 -0
- package/hosts/opencode/.opencode/atlas/packages/templates/PLAN_TEMPLATE.md +146 -0
- package/hosts/opencode/.opencode/atlas/packages/templates/PRD_TEMPLATE.md +149 -0
- package/hosts/opencode/.opencode/atlas/packages/templates/STATE_FILE_SCHEMA.md +32 -0
- package/hosts/opencode/.opencode/skills/atlas-backlog-generator/SKILL.md +88 -0
- package/hosts/opencode/.opencode/skills/atlas-backlog-generator/agents/openai.yaml +4 -0
- package/hosts/opencode/.opencode/skills/atlas-direct-execute/SKILL.md +186 -0
- package/hosts/opencode/.opencode/skills/atlas-direct-execute/agents/openai.yaml +7 -0
- package/hosts/opencode/.opencode/skills/atlas-findings-repair/SKILL.md +148 -0
- package/hosts/opencode/.opencode/skills/atlas-findings-repair/agents/openai.yaml +7 -0
- package/hosts/opencode/.opencode/skills/atlas-plan-execute/SKILL.md +129 -0
- package/hosts/opencode/.opencode/skills/atlas-plan-execute/agents/openai.yaml +7 -0
- package/hosts/opencode/.opencode/skills/atlas-plan-execute/references/plan-contract.md +88 -0
- package/hosts/opencode/.opencode/skills/atlas-plan-execute/references/quality-gates.md +60 -0
- package/hosts/opencode/.opencode/skills/atlas-plan-execute/scripts/check_budget_state.py +96 -0
- package/hosts/opencode/.opencode/skills/atlas-plan-execute/scripts/extract_plan_contract.py +191 -0
- package/hosts/opencode/.opencode/skills/atlas-plan-execute/scripts/validate_gate_result.py +56 -0
- package/hosts/opencode/.opencode/skills/atlas-plan-handoff/SKILL.md +181 -0
- package/hosts/opencode/.opencode/skills/atlas-plan-handoff/agents/openai.yaml +7 -0
- package/hosts/opencode/.opencode/skills/atlas-prd-interview/SKILL.md +77 -0
- package/hosts/opencode/.opencode/skills/atlas-prd-interview/agents/openai.yaml +7 -0
- package/hosts/opencode/.opencode/skills/atlas-slice-review/SKILL.md +121 -0
- package/hosts/opencode/.opencode/skills/atlas-slice-review/agents/openai.yaml +4 -0
- package/hosts/opencode/.opencode/skills/atlas-slice-review/references/review-contract.md +58 -0
- package/hosts/opencode/.opencode/skills/atlas-slice-review/references/scenario-lenses.md +49 -0
- package/hosts/opencode/.opencode/skills/atlas-slice-review/scripts/classify_findings.py +56 -0
- package/hosts/opencode/.opencode/skills/atlas-slice-review/scripts/extract_review_slice.py +158 -0
- package/hosts/opencode/.opencode/skills/atlas-sprint-prd-generator/SKILL.md +74 -0
- package/hosts/opencode/.opencode/skills/atlas-sprint-prd-generator/agents/openai.yaml +7 -0
- package/hosts/opencode/.opencode/skills/atlas-task-validator/SKILL.md +158 -0
- package/hosts/opencode/.opencode/skills/atlas-task-validator/agents/openai.yaml +7 -0
- package/hosts/opencode/.opencode/skills/atlas-workflow-orchestrator/SKILL.md +412 -0
- package/hosts/opencode/opencode.json +13 -0
- package/hosts/pi/.mcp.json +11 -0
- package/hosts/pi/.pi/agents/atlas-direct-execute.md +218 -0
- package/hosts/pi/.pi/agents/atlas-findings-repair.md +184 -0
- package/hosts/pi/.pi/agents/atlas-plan-execute.md +163 -0
- package/hosts/pi/.pi/agents/atlas-slice-review.md +149 -0
- package/hosts/pi/.pi/agents/atlas-task-validator.md +121 -0
- package/hosts/pi/atlas/VERSION +1 -0
- package/hosts/pi/atlas/orchestrator/README.md +261 -0
- package/hosts/pi/atlas/orchestrator/commands/workflow.md +37 -0
- package/hosts/pi/atlas/orchestrator/defaults/paths.md +21 -0
- package/hosts/pi/atlas/orchestrator/references/host-adapters.md +104 -0
- package/hosts/pi/atlas/orchestrator/references/qa_s13_matrix.md +141 -0
- package/hosts/pi/atlas/orchestrator/references/subagent_dispatch.md +42 -0
- package/hosts/pi/atlas/orchestrator/skills/atlas-workflow-orchestrator/SKILL.md +412 -0
- package/hosts/pi/atlas/packages/mcp-server/README.md +28 -0
- package/hosts/pi/atlas/packages/mcp-server/package.json +15 -0
- package/hosts/pi/atlas/packages/mcp-server/server.js +3076 -0
- package/hosts/pi/atlas/packages/templates/BACKLOG_MESTRE_TEMPLATE.md +844 -0
- package/hosts/pi/atlas/packages/templates/BOUNDARY_PRD_PLAN.md +93 -0
- package/hosts/pi/atlas/packages/templates/PERGUNTAS_EM_ABERTO_TEMPLATE.md +139 -0
- package/hosts/pi/atlas/packages/templates/PLAN_TEMPLATE.md +146 -0
- package/hosts/pi/atlas/packages/templates/PRD_TEMPLATE.md +149 -0
- package/hosts/pi/atlas/packages/templates/STATE_FILE_SCHEMA.md +32 -0
- package/hosts/pi/skills/atlas-backlog-generator/SKILL.md +88 -0
- package/hosts/pi/skills/atlas-backlog-generator/agents/openai.yaml +4 -0
- package/hosts/pi/skills/atlas-direct-execute/SKILL.md +186 -0
- package/hosts/pi/skills/atlas-direct-execute/agents/openai.yaml +7 -0
- package/hosts/pi/skills/atlas-findings-repair/SKILL.md +148 -0
- package/hosts/pi/skills/atlas-findings-repair/agents/openai.yaml +7 -0
- package/hosts/pi/skills/atlas-plan-execute/SKILL.md +129 -0
- package/hosts/pi/skills/atlas-plan-execute/agents/openai.yaml +7 -0
- package/hosts/pi/skills/atlas-plan-execute/references/plan-contract.md +88 -0
- package/hosts/pi/skills/atlas-plan-execute/references/quality-gates.md +60 -0
- package/hosts/pi/skills/atlas-plan-execute/scripts/check_budget_state.py +96 -0
- package/hosts/pi/skills/atlas-plan-execute/scripts/extract_plan_contract.py +191 -0
- package/hosts/pi/skills/atlas-plan-execute/scripts/validate_gate_result.py +56 -0
- package/hosts/pi/skills/atlas-plan-handoff/SKILL.md +181 -0
- package/hosts/pi/skills/atlas-plan-handoff/agents/openai.yaml +7 -0
- package/hosts/pi/skills/atlas-prd-interview/SKILL.md +77 -0
- package/hosts/pi/skills/atlas-prd-interview/agents/openai.yaml +7 -0
- package/hosts/pi/skills/atlas-slice-review/SKILL.md +121 -0
- package/hosts/pi/skills/atlas-slice-review/agents/openai.yaml +4 -0
- package/hosts/pi/skills/atlas-slice-review/references/review-contract.md +58 -0
- package/hosts/pi/skills/atlas-slice-review/references/scenario-lenses.md +49 -0
- package/hosts/pi/skills/atlas-slice-review/scripts/classify_findings.py +56 -0
- package/hosts/pi/skills/atlas-slice-review/scripts/extract_review_slice.py +158 -0
- package/hosts/pi/skills/atlas-sprint-prd-generator/SKILL.md +74 -0
- package/hosts/pi/skills/atlas-sprint-prd-generator/agents/openai.yaml +7 -0
- package/hosts/pi/skills/atlas-task-validator/SKILL.md +158 -0
- package/hosts/pi/skills/atlas-task-validator/agents/openai.yaml +7 -0
- package/hosts/pi/skills/atlas-workflow-orchestrator/SKILL.md +412 -0
- package/package.json +17 -0
- package/plugins/atlas-workflow-orchestrator/.codex/agents/atlas-direct-execute.toml +3 -0
- package/plugins/atlas-workflow-orchestrator/.codex/agents/atlas-findings-repair.toml +3 -0
- package/plugins/atlas-workflow-orchestrator/.codex/agents/atlas-plan-execute.toml +3 -0
- package/plugins/atlas-workflow-orchestrator/.codex/agents/atlas-slice-review.toml +3 -0
- package/plugins/atlas-workflow-orchestrator/.codex/agents/atlas-task-validator.toml +5 -0
- package/plugins/atlas-workflow-orchestrator/.codex-plugin/plugin.json +37 -0
- package/plugins/atlas-workflow-orchestrator/.mcp.json +12 -0
- package/plugins/atlas-workflow-orchestrator/VERSION +1 -0
- package/plugins/atlas-workflow-orchestrator/agents/atlas-direct-execute.md +31 -0
- package/plugins/atlas-workflow-orchestrator/agents/atlas-findings-repair.md +35 -0
- package/plugins/atlas-workflow-orchestrator/agents/atlas-plan-execute.md +33 -0
- package/plugins/atlas-workflow-orchestrator/agents/atlas-slice-review.md +27 -0
- package/plugins/atlas-workflow-orchestrator/agents/atlas-task-validator.md +123 -0
- package/plugins/atlas-workflow-orchestrator/orchestrator/README.md +261 -0
- package/plugins/atlas-workflow-orchestrator/orchestrator/commands/workflow.md +37 -0
- package/plugins/atlas-workflow-orchestrator/orchestrator/defaults/paths.md +21 -0
- package/plugins/atlas-workflow-orchestrator/orchestrator/references/host-adapters.md +104 -0
- package/plugins/atlas-workflow-orchestrator/orchestrator/references/qa_s13_matrix.md +141 -0
- package/plugins/atlas-workflow-orchestrator/orchestrator/references/subagent_dispatch.md +42 -0
- package/plugins/atlas-workflow-orchestrator/orchestrator/skills/atlas-workflow-orchestrator/SKILL.md +412 -0
- package/plugins/atlas-workflow-orchestrator/packages/mcp-server/README.md +28 -0
- package/plugins/atlas-workflow-orchestrator/packages/mcp-server/package.json +15 -0
- package/plugins/atlas-workflow-orchestrator/packages/mcp-server/server.js +3076 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-backlog-generator/SKILL.md +88 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-backlog-generator/agents/openai.yaml +4 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-direct-execute/SKILL.md +186 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-direct-execute/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-findings-repair/SKILL.md +148 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-findings-repair/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-plan-execute/SKILL.md +129 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-plan-execute/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-plan-execute/references/plan-contract.md +88 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-plan-execute/references/quality-gates.md +60 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-plan-execute/scripts/check_budget_state.py +96 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-plan-execute/scripts/extract_plan_contract.py +191 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-plan-execute/scripts/validate_gate_result.py +56 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-plan-handoff/SKILL.md +181 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-plan-handoff/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-prd-interview/SKILL.md +77 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-prd-interview/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-slice-review/SKILL.md +121 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-slice-review/agents/openai.yaml +4 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-slice-review/references/review-contract.md +58 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-slice-review/references/scenario-lenses.md +49 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-slice-review/scripts/classify_findings.py +56 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-slice-review/scripts/extract_review_slice.py +158 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-sprint-prd-generator/SKILL.md +74 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-sprint-prd-generator/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-task-validator/SKILL.md +158 -0
- package/plugins/atlas-workflow-orchestrator/packages/skills/atlas-task-validator/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/packages/templates/BACKLOG_MESTRE_TEMPLATE.md +844 -0
- package/plugins/atlas-workflow-orchestrator/packages/templates/BOUNDARY_PRD_PLAN.md +93 -0
- package/plugins/atlas-workflow-orchestrator/packages/templates/PERGUNTAS_EM_ABERTO_TEMPLATE.md +139 -0
- package/plugins/atlas-workflow-orchestrator/packages/templates/PLAN_TEMPLATE.md +146 -0
- package/plugins/atlas-workflow-orchestrator/packages/templates/PRD_TEMPLATE.md +149 -0
- package/plugins/atlas-workflow-orchestrator/packages/templates/STATE_FILE_SCHEMA.md +32 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-backlog-generator/SKILL.md +88 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-backlog-generator/agents/openai.yaml +4 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-direct-execute/SKILL.md +186 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-direct-execute/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-findings-repair/SKILL.md +148 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-findings-repair/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-plan-execute/SKILL.md +129 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-plan-execute/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-plan-execute/references/plan-contract.md +88 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-plan-execute/references/quality-gates.md +60 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-plan-execute/scripts/check_budget_state.py +96 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-plan-execute/scripts/extract_plan_contract.py +191 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-plan-execute/scripts/validate_gate_result.py +56 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-plan-handoff/SKILL.md +181 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-plan-handoff/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-prd-interview/SKILL.md +77 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-prd-interview/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-slice-review/SKILL.md +121 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-slice-review/agents/openai.yaml +4 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-slice-review/references/review-contract.md +58 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-slice-review/references/scenario-lenses.md +49 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-slice-review/scripts/classify_findings.py +56 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-slice-review/scripts/extract_review_slice.py +158 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-sprint-prd-generator/SKILL.md +74 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-sprint-prd-generator/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-task-validator/SKILL.md +158 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-task-validator/agents/openai.yaml +7 -0
- package/plugins/atlas-workflow-orchestrator/skills/atlas-workflow-orchestrator/SKILL.md +412 -0
- package/plugins/atlas-workflow-orchestrator/templates/BACKLOG_MESTRE_TEMPLATE.md +844 -0
- package/plugins/atlas-workflow-orchestrator/templates/BOUNDARY_PRD_PLAN.md +93 -0
- package/plugins/atlas-workflow-orchestrator/templates/PERGUNTAS_EM_ABERTO_TEMPLATE.md +139 -0
- package/plugins/atlas-workflow-orchestrator/templates/PLAN_TEMPLATE.md +146 -0
- package/plugins/atlas-workflow-orchestrator/templates/PRD_TEMPLATE.md +149 -0
- package/plugins/atlas-workflow-orchestrator/templates/STATE_FILE_SCHEMA.md +32 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: atlas-slice-review
|
|
3
|
+
description: Skill `atlas-slice-review`. Revisa uma slice implementada após `atlas-plan-execute`, usando o plano (`atlas-plan-handoff`), invariantes e código tocado como contrato. Revisão fria focada na slice — regressões ocultas, gaps de lógica, cenários em falta, riscos de segurança, violações arquiteturais e testes em falta.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Atlas Slice Review
|
|
7
|
+
|
|
8
|
+
Use this skill only when `--review` is present after `atlas-plan-execute` or any equivalent implementation pass has finished a specific plan slice.
|
|
9
|
+
|
|
10
|
+
Review only the slice that was executed. Do not widen into a generic repo audit unless the user explicitly asks for that.
|
|
11
|
+
|
|
12
|
+
## Invocation gate
|
|
13
|
+
|
|
14
|
+
`--review` is the only automatic dispatch condition. Do not auto-trigger from heuristics, diff size, risk level, or validator observations. If `--review` is absent, report that external review was skipped by contract.
|
|
15
|
+
|
|
16
|
+
## Uso standalone — rótulo de garantia reduzida obrigatório (PRD D10/D11)
|
|
17
|
+
|
|
18
|
+
Esta skill é **análise de leitura**: revisa código, **não muta código**. Pela fronteira de determinismo do Atlas (mutação de código, PRD D10), leitura standalone é **permitida**, mas carrega **risco epistêmico** — a análise não passou pela defesa fria do pipeline (`atlas-task-validator`, que é pipeline-only, só `state_path`). Esse risco é mitigado por **rótulo**, não por gate.
|
|
19
|
+
|
|
20
|
+
**Regra dura:** quando `atlas-slice-review` roda **fora do pipeline** (sem o `atlas-task-validator` ter fechado a slice via state file), a saída **SEMPRE** sai rotulada como garantia reduzida. É **proibido** simular `validator_status: passed` ou qualquer veredito de validação aprovado — a review é leitura, não validação fria.
|
|
21
|
+
|
|
22
|
+
### Formato exato do rótulo (obrigatório no topo da saída standalone)
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
guarantee_level: reduced_standalone
|
|
26
|
+
validator_status: not_run (sem validator-closed)
|
|
27
|
+
scope: standalone
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- `guarantee_level: reduced_standalone` — enum fixo (PRD D12); nunca `full_pipeline` em uso standalone.
|
|
31
|
+
- `validator_status: not_run (sem validator-closed)` — declara explicitamente que a defesa fria não rodou. **Proibido** escrever `passed`/`pass`.
|
|
32
|
+
- `scope: standalone` — marca que a review não está ancorada num state file de pipeline.
|
|
33
|
+
|
|
34
|
+
Quando a review roda **dentro do pipeline** (despachada pelo orquestrador após o validator frio fechar a slice), o nível de garantia da slice vem do pipeline (`full_pipeline`) e este rótulo de redução **não** se aplica — mas a própria review continua sendo leitura e nunca emite veredito de validador.
|
|
35
|
+
|
|
36
|
+
> **Invariante:** uma análise de leitura standalone nunca se declara fechada por validação; sai rotulada `reduced_standalone` e jamais simula `validator_status: passed` (PRD D10/D11, fecha Q-08).
|
|
37
|
+
|
|
38
|
+
## State persistence
|
|
39
|
+
|
|
40
|
+
Use `atlas_run_state` as the primary source for run state, dispatch status, and validator status. Do not read or write run ledger files directly. If MCP state is unavailable, block the review rather than accepting a local file fallback.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Review Contract
|
|
45
|
+
|
|
46
|
+
Base the review on three inputs:
|
|
47
|
+
1. **The plan artifact** produced by `atlas-plan-handoff` (Section 2 - Invariantes, Section 6 - Contratos, Section 8 - Validação).
|
|
48
|
+
2. **The executed task ids** or slice boundaries.
|
|
49
|
+
3. **The real code** touched by the implementation.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Required Workflow
|
|
54
|
+
|
|
55
|
+
### 1. Build the slice boundary first
|
|
56
|
+
Before reviewing code, identify:
|
|
57
|
+
* diff physical boundary (`git diff --name-only main...HEAD`).
|
|
58
|
+
* Section 2 - Invariants of Execution (contract).
|
|
59
|
+
* Section 6 - Technical Contracts (signatures and shapes).
|
|
60
|
+
* Section 8 - Validation and Checklist (QA criteria).
|
|
61
|
+
* touch files expected vs actual.
|
|
62
|
+
* resolved conflicts and permission matrices that apply.
|
|
63
|
+
|
|
64
|
+
If the diff and the plan disagree materially, call that out as a structural finding or blocker. Do not silently review an invented scope.
|
|
65
|
+
|
|
66
|
+
### 2. Review in code-review mode, not implementation mode
|
|
67
|
+
This skill is not for fixing code first. It is for finding problems first.
|
|
68
|
+
Look for:
|
|
69
|
+
* behavioral regressions introduced by the slice.
|
|
70
|
+
* hidden logic gaps or missing business scenarios.
|
|
71
|
+
* state-transition bugs and view/store mismatches.
|
|
72
|
+
* security or privacy issues.
|
|
73
|
+
* contract drift from the plan.
|
|
74
|
+
* validation and tests gaps.
|
|
75
|
+
|
|
76
|
+
### 3. Use the plan to hunt missing scenarios
|
|
77
|
+
For each executed task, compare: stated objective, expected change, invariants preserved, and done criteria with real code.
|
|
78
|
+
Ask what the implementation forgot:
|
|
79
|
+
* **State & orquestration:** transition states reativity (loading, success, empty, error), rapid triggers concurency, setup/cleanup symmetry, async stale.
|
|
80
|
+
* **Business rules:** negative paths, closed decisions, fallsback that weaken invariants.
|
|
81
|
+
* **View & rendering:** inputs empty, null, partial, out of order, UI permission conditional.
|
|
82
|
+
* **Contracts:** shape drift, enums, mappers, RLS server-side, i18n parity.
|
|
83
|
+
|
|
84
|
+
### 4. Distinguish current-diff findings from pre-existing issues
|
|
85
|
+
Prefer findings attributable to the executed slice. Mark pre-existing issues as observations or separate notes to keep signals clean and actionable.
|
|
86
|
+
|
|
87
|
+
### 5. Output Expectations
|
|
88
|
+
|
|
89
|
+
Return exactly this structure:
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
## Findings
|
|
93
|
+
|
|
94
|
+
### P0 - <short title>
|
|
95
|
+
- **Slice/Task:** T0N
|
|
96
|
+
- **Por que importa:** [impacto real]
|
|
97
|
+
- **Arquivo:** `relative/path.ext:line`
|
|
98
|
+
- **Modo de falha:** [o que quebra e como]
|
|
99
|
+
- **Evidência:** [o que suporta o finding]
|
|
100
|
+
|
|
101
|
+
### P1 - <short title>
|
|
102
|
+
[same shape]
|
|
103
|
+
|
|
104
|
+
### P2 - <short title>
|
|
105
|
+
[same shape]
|
|
106
|
+
|
|
107
|
+
### P3 - <short title>
|
|
108
|
+
[same shape]
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Perguntas Abertas ou Suposições
|
|
113
|
+
[questões que precisam de confirmação antes de agir nos findings]
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Resumo da Slice
|
|
118
|
+
[breve — o que foi bem implementado, o que precisa atenção, se a slice pode ser considerada fechada]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Do not add extra sections or narrative conclusions.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Atlas Slice Review"
|
|
3
|
+
short_description: "Slice-focused post-plan review gate (atlas-slice-review)"
|
|
4
|
+
default_prompt: "Use $atlas-slice-review to review the executed plan slice for hidden regressions, logic gaps, missing scenarios, security risks, and test omissions."
|
package/plugins/atlas-workflow-orchestrator/skills/atlas-slice-review/references/review-contract.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Review Contract
|
|
2
|
+
|
|
3
|
+
This skill assumes the implementation was guided by a plan with task-level structure close to `atlas-plan-handoff`.
|
|
4
|
+
|
|
5
|
+
## Minimum expected inputs
|
|
6
|
+
|
|
7
|
+
- the plan artifact
|
|
8
|
+
- the executed task ids or a clearly described slice
|
|
9
|
+
- the real changed files or diff
|
|
10
|
+
|
|
11
|
+
The plan should also expose execution metadata:
|
|
12
|
+
|
|
13
|
+
- `Plan prefix: atlas`
|
|
14
|
+
- `Execution mode: sequencial (T01→TN)` or `orchestrated-per-slice`
|
|
15
|
+
|
|
16
|
+
## Minimum expected task fields
|
|
17
|
+
|
|
18
|
+
For each reviewed task, try to recover:
|
|
19
|
+
|
|
20
|
+
- `Objective`
|
|
21
|
+
- `Likely files/modules`
|
|
22
|
+
- `Expected change`
|
|
23
|
+
- `Invariants preserved`
|
|
24
|
+
- `Do not change`
|
|
25
|
+
- `Do not do`
|
|
26
|
+
- `Risks / pitfalls`
|
|
27
|
+
- `Done criteria`
|
|
28
|
+
- `Task-local validation`
|
|
29
|
+
- `Quality gates (recommended)`
|
|
30
|
+
- `Stop and ask if`
|
|
31
|
+
|
|
32
|
+
Recover these plan-level constraints when present:
|
|
33
|
+
|
|
34
|
+
- resolved source conflicts and chosen authority
|
|
35
|
+
- permission or responsibility matrices
|
|
36
|
+
- generated-file, localization, import, route, RPC, or schema constraints
|
|
37
|
+
- explicit final validation gates
|
|
38
|
+
|
|
39
|
+
## Review scope discipline
|
|
40
|
+
|
|
41
|
+
The review scope is the intersection of:
|
|
42
|
+
|
|
43
|
+
- what the plan asked for
|
|
44
|
+
- what the executor claims to have completed
|
|
45
|
+
- what the diff actually changed
|
|
46
|
+
|
|
47
|
+
If these three disagree, that disagreement is part of the review result.
|
|
48
|
+
|
|
49
|
+
If the implementation chose a path that the plan explicitly rejected, treat it as a contract violation even if the UI appears to work.
|
|
50
|
+
|
|
51
|
+
## Typical review outcomes
|
|
52
|
+
|
|
53
|
+
- the slice matches the plan and no material findings are present
|
|
54
|
+
- the slice works but missed scenarios, validations, or tests
|
|
55
|
+
- the slice violates a plan invariant or broadens scope incorrectly
|
|
56
|
+
- the slice ignores a resolved source conflict or permission matrix
|
|
57
|
+
- the slice introduced a regression outside the intended task boundary
|
|
58
|
+
- the slice appears correct but validation evidence is too weak to trust closure
|
package/plugins/atlas-workflow-orchestrator/skills/atlas-slice-review/references/scenario-lenses.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Scenario Lenses
|
|
2
|
+
|
|
3
|
+
Use these lenses to find hidden bugs in the executed slice. Apply only the relevant ones.
|
|
4
|
+
|
|
5
|
+
## State and orchestration
|
|
6
|
+
|
|
7
|
+
- Can the state machine enter a half-updated state?
|
|
8
|
+
- Are loading, success, empty, and error states all representable?
|
|
9
|
+
- What happens on repeated triggers or rapid taps?
|
|
10
|
+
- Is cleanup symmetrical with setup?
|
|
11
|
+
- Can stale async results overwrite newer state?
|
|
12
|
+
|
|
13
|
+
## Business rules
|
|
14
|
+
|
|
15
|
+
- Which negative path did the plan imply but the code does not implement?
|
|
16
|
+
- Are closed decisions from the plan really enforced?
|
|
17
|
+
- Did the implementation honor the plan's resolved source-of-truth decisions?
|
|
18
|
+
- If roles differ by resource, can any actor mutate a resource the matrix forbids?
|
|
19
|
+
- Is there any fallback that weakens a business invariant?
|
|
20
|
+
- Does the implementation silently infer data that the plan said must be explicit?
|
|
21
|
+
|
|
22
|
+
## View and rendering
|
|
23
|
+
|
|
24
|
+
- Can the UI render a shape the store never guarantees?
|
|
25
|
+
- Can the store produce a shape the UI does not handle?
|
|
26
|
+
- Are empty, null, partial, and reordered inputs rendered safely?
|
|
27
|
+
- Is user feedback tied to the real pipeline or only to a local shortcut?
|
|
28
|
+
|
|
29
|
+
## Contracts and integration
|
|
30
|
+
|
|
31
|
+
- Did any field, enum, or payload meaning drift from the plan?
|
|
32
|
+
- Are all relevant consumers updated after a shape change?
|
|
33
|
+
- Does the code assume a backend guarantee that is not actually enforced?
|
|
34
|
+
- Is retry or re-entry behavior still coherent after this slice?
|
|
35
|
+
- Did generated files, localization keys, imports, routes, RPC signatures, or schemas match the verified repo convention?
|
|
36
|
+
|
|
37
|
+
## Security and safety
|
|
38
|
+
|
|
39
|
+
- Did the slice weaken permission, ownership, or visibility checks?
|
|
40
|
+
- Can an untrusted input reach a sensitive path without validation?
|
|
41
|
+
- Was any auth, session, or cleanup invariant softened?
|
|
42
|
+
- Did logging or observability leak sensitive information?
|
|
43
|
+
|
|
44
|
+
## Validation and tests
|
|
45
|
+
|
|
46
|
+
- Do the tests cover only the happy path?
|
|
47
|
+
- Which regression would still pass the current tests?
|
|
48
|
+
- Was a required manual check skipped or replaced by weaker evidence?
|
|
49
|
+
- Did the executor claim closure despite an environment-limited validation gap?
|
package/plugins/atlas-workflow-orchestrator/skills/atlas-slice-review/scripts/classify_findings.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Normalize raw findings into a severity-oriented review structure."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
import json
|
|
8
|
+
import pathlib
|
|
9
|
+
import sys
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
SEVERITY_ORDER = {"P0": 0, "P1": 1, "P2": 2, "P3": 3}
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def load_findings(path: pathlib.Path) -> list[dict[str, Any]]:
|
|
16
|
+
payload = json.loads(path.read_text(encoding="utf-8"))
|
|
17
|
+
if not isinstance(payload, list):
|
|
18
|
+
raise ValueError("Findings input must be a JSON array")
|
|
19
|
+
return payload
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def normalize_finding(finding: dict[str, Any]) -> dict[str, Any]:
|
|
23
|
+
severity = finding.get("severity", "P2")
|
|
24
|
+
if severity not in SEVERITY_ORDER:
|
|
25
|
+
severity = "P2"
|
|
26
|
+
return {
|
|
27
|
+
"severity": severity,
|
|
28
|
+
"task_id": finding.get("task_id", ""),
|
|
29
|
+
"title": finding.get("title", ""),
|
|
30
|
+
"file": finding.get("file", ""),
|
|
31
|
+
"line": finding.get("line"),
|
|
32
|
+
"summary": finding.get("summary", ""),
|
|
33
|
+
"evidence": finding.get("evidence", ""),
|
|
34
|
+
"diff_attributed": bool(finding.get("diff_attributed", True)),
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def main() -> int:
|
|
39
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
40
|
+
parser.add_argument("findings_json", help="Path to a JSON array of findings")
|
|
41
|
+
args = parser.parse_args()
|
|
42
|
+
|
|
43
|
+
try:
|
|
44
|
+
normalized = [normalize_finding(item) for item in load_findings(pathlib.Path(args.findings_json))]
|
|
45
|
+
except (FileNotFoundError, ValueError, json.JSONDecodeError) as exc:
|
|
46
|
+
sys.stderr.write(f"{exc}\n")
|
|
47
|
+
return 1
|
|
48
|
+
|
|
49
|
+
normalized.sort(key=lambda item: (SEVERITY_ORDER[item["severity"]], item["task_id"], item["file"], item["line"] or 0))
|
|
50
|
+
json.dump(normalized, sys.stdout, indent=2)
|
|
51
|
+
sys.stdout.write("\n")
|
|
52
|
+
return 0
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
if __name__ == "__main__":
|
|
56
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Extract the review slice from a atlas-plan-handoff-style markdown artifact."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
import json
|
|
8
|
+
import pathlib
|
|
9
|
+
import re
|
|
10
|
+
import sys
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
TASK_HEADING_RE = re.compile(r"^####\s+(T\d{2})\.\s+(.*)$")
|
|
14
|
+
FIELD_RE = re.compile(r"^- ([^:]+):\s*(.*)$")
|
|
15
|
+
HEADING_RE = re.compile(r"^(#{1,4})\s+(.*\S)\s*$")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def normalize_heading(text: str) -> str:
|
|
19
|
+
text = re.sub(r"^\d+\.\s*", "", text.strip())
|
|
20
|
+
return re.sub(r"[^a-z0-9]+", "_", text.lower()).strip("_")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def normalize_field(text: str) -> str:
|
|
24
|
+
text = text.strip().strip("*").strip()
|
|
25
|
+
text = re.sub(r"^\d+\.\s*", "", text)
|
|
26
|
+
return re.sub(r"[^a-z0-9]+", "_", text.lower()).strip("_")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def parse_sections(text: str) -> dict[str, list[str]]:
|
|
30
|
+
sections: dict[str, list[str]] = {}
|
|
31
|
+
current_key: str | None = None
|
|
32
|
+
for raw_line in text.splitlines():
|
|
33
|
+
line = raw_line.rstrip()
|
|
34
|
+
heading_match = HEADING_RE.match(line)
|
|
35
|
+
if heading_match:
|
|
36
|
+
current_key = normalize_heading(heading_match.group(2).strip())
|
|
37
|
+
sections.setdefault(current_key, [])
|
|
38
|
+
continue
|
|
39
|
+
if current_key is not None and line.strip():
|
|
40
|
+
sections[current_key].append(line)
|
|
41
|
+
return sections
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def first_section(sections: dict[str, list[str]], keys: list[str]) -> list[str]:
|
|
45
|
+
for key in keys:
|
|
46
|
+
if key in sections:
|
|
47
|
+
return sections[key]
|
|
48
|
+
return []
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def parse_tasks(text: str) -> list[dict[str, Any]]:
|
|
52
|
+
tasks: list[dict[str, Any]] = []
|
|
53
|
+
current: dict[str, Any] | None = None
|
|
54
|
+
current_field: str | None = None
|
|
55
|
+
for raw_line in text.splitlines():
|
|
56
|
+
line = raw_line.rstrip()
|
|
57
|
+
task_match = TASK_HEADING_RE.match(line)
|
|
58
|
+
if task_match:
|
|
59
|
+
current = {
|
|
60
|
+
"id": task_match.group(1),
|
|
61
|
+
"title": task_match.group(2).strip(),
|
|
62
|
+
"fields": {},
|
|
63
|
+
}
|
|
64
|
+
tasks.append(current)
|
|
65
|
+
current_field = None
|
|
66
|
+
continue
|
|
67
|
+
if current is None:
|
|
68
|
+
continue
|
|
69
|
+
field_match = FIELD_RE.match(line)
|
|
70
|
+
if field_match:
|
|
71
|
+
key = normalize_field(field_match.group(1))
|
|
72
|
+
current["fields"][key] = field_match.group(2).strip().strip("*").strip()
|
|
73
|
+
current_field = key
|
|
74
|
+
continue
|
|
75
|
+
if current_field and line.strip():
|
|
76
|
+
previous = current["fields"].get(current_field, "")
|
|
77
|
+
current["fields"][current_field] = f"{previous}\n{line.strip()}".strip()
|
|
78
|
+
return tasks
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def expected_files_for(task: dict[str, Any]) -> str:
|
|
82
|
+
fields = task["fields"]
|
|
83
|
+
for key in ("likely_files/modules", "files", "arquivos_verificados", "arquivos", "m_dulos"):
|
|
84
|
+
value = fields.get(key)
|
|
85
|
+
if value:
|
|
86
|
+
return value
|
|
87
|
+
return ""
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def main() -> int:
|
|
91
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
92
|
+
parser.add_argument("plan", help="Path to the plan markdown file")
|
|
93
|
+
parser.add_argument("--task-id", action="append", dest="task_ids", default=[], help="Task id to extract, repeatable")
|
|
94
|
+
parser.add_argument("--changed-file", action="append", dest="changed_files", default=[], help="Changed file path, repeatable")
|
|
95
|
+
args = parser.parse_args()
|
|
96
|
+
|
|
97
|
+
text = pathlib.Path(args.plan).read_text(encoding="utf-8")
|
|
98
|
+
sections = parse_sections(text)
|
|
99
|
+
tasks = parse_tasks(text)
|
|
100
|
+
selected = [task for task in tasks if not args.task_ids or task["id"] in args.task_ids]
|
|
101
|
+
|
|
102
|
+
payload = {
|
|
103
|
+
"task_ids": args.task_ids,
|
|
104
|
+
"selected_tasks": selected,
|
|
105
|
+
"changed_files": args.changed_files,
|
|
106
|
+
"expected_files": [expected_files_for(task) for task in selected],
|
|
107
|
+
"execution_metadata": {
|
|
108
|
+
"plan_prefix": "",
|
|
109
|
+
"execution_mode": "",
|
|
110
|
+
},
|
|
111
|
+
"plan_constraints": {
|
|
112
|
+
"rules_and_decisions": first_section(
|
|
113
|
+
sections,
|
|
114
|
+
[
|
|
115
|
+
"project_rules_constraints_and_decisions_already_made",
|
|
116
|
+
"regras_e_restri_es_do_projeto",
|
|
117
|
+
"regras_decis_es",
|
|
118
|
+
"decis_es_fechadas",
|
|
119
|
+
],
|
|
120
|
+
),
|
|
121
|
+
"contracts_invariants_quality": first_section(
|
|
122
|
+
sections,
|
|
123
|
+
["contracts_invariants_and_quality_guarantees", "contratos_e_invariantes"],
|
|
124
|
+
),
|
|
125
|
+
"risk_and_regression": first_section(
|
|
126
|
+
sections,
|
|
127
|
+
["risk_and_regression_matrix", "regression_risks", "matriz_de_risco_e_regress_o", "riscos"],
|
|
128
|
+
),
|
|
129
|
+
"validation": first_section(sections, ["validation", "valida_o", "valida_o_final"]),
|
|
130
|
+
},
|
|
131
|
+
"review_focus": [
|
|
132
|
+
"logic gaps",
|
|
133
|
+
"hidden scenarios",
|
|
134
|
+
"regressions",
|
|
135
|
+
"security risks",
|
|
136
|
+
"missing tests",
|
|
137
|
+
"plan contract drift",
|
|
138
|
+
"source conflict drift",
|
|
139
|
+
"permission matrix drift",
|
|
140
|
+
],
|
|
141
|
+
}
|
|
142
|
+
metadata_section = first_section(
|
|
143
|
+
sections,
|
|
144
|
+
["execution_metadata", "metadados_de_execu_o", "metadados_execu_o"],
|
|
145
|
+
)
|
|
146
|
+
for line in metadata_section:
|
|
147
|
+
lowered = line.lower()
|
|
148
|
+
if "plan prefix" in lowered:
|
|
149
|
+
payload["execution_metadata"]["plan_prefix"] = line.split(":", 1)[-1].strip().strip("`")
|
|
150
|
+
elif "execution mode" in lowered:
|
|
151
|
+
payload["execution_metadata"]["execution_mode"] = line.split(":", 1)[-1].strip().strip("`")
|
|
152
|
+
json.dump(payload, sys.stdout, indent=2)
|
|
153
|
+
sys.stdout.write("\n")
|
|
154
|
+
return 0
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
if __name__ == "__main__":
|
|
158
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: atlas-sprint-prd-generator
|
|
3
|
+
description: Skill `atlas-sprint-prd-generator`. Use quando o usuário pedir para criar, gerar, montar ou atualizar um PRD de Sprint a partir de um sprint ID como S01/S02, usando o template de PRD e o backlog/roadmap real do repositório como fonte de escopo, dependências e fase-fonte.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Atlas Sprint PRD Generator
|
|
7
|
+
|
|
8
|
+
Gere PRDs de Sprint em PT-BR ancorados no backlog/roadmap real, no template canônico empacotado e no código real do repositório atual. Não invente contrato.
|
|
9
|
+
|
|
10
|
+
Todo PRD gerado por esta skill deve declarar explicitamente a cadeia de execução Atlas (`atlas-*`) para consumo posterior por `atlas-plan-handoff` e `atlas-plan-execute`.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Entrada Esperada
|
|
15
|
+
|
|
16
|
+
* Sprint ID: `S<NN>` (`S01`, `S02`, etc.).
|
|
17
|
+
* Opcional: app/projeto alvo quando houver mais de uma fonte de backlog/roadmap.
|
|
18
|
+
* Opcional: path de saída.
|
|
19
|
+
|
|
20
|
+
*Se faltar o Sprint ID, peça antes de gerar.*
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Workflow Obrigatório
|
|
25
|
+
|
|
26
|
+
1. **Localizar Insumos:** Descubra a raiz do repo com `git rev-parse --show-toplevel`. Localize o template canônico em `<raiz-do-plugin>/packages/templates/PRD_TEMPLATE.md`. Localize backlog/roadmap no repo ativo (`**/BACKLOG_MESTRE*.md`).
|
|
27
|
+
2. **Extração da Sprint:** Leia a fonte de backlog/roadmap. Localize a sprint, extraindo fase-fonte, objetivo, dependências e filename do PRD.
|
|
28
|
+
3. **Inspecionar Código:** Busque no codebase por classes, tabelas, RPCs, mappers e rotas existentes que influenciam a feature.
|
|
29
|
+
4. **Redação do PRD:** Siga estritamente o layout enxuto e focado do `PRD_TEMPLATE.md` (teto orientativo de ~180-220 linhas), separando dores e regras de negócio de implementações de código.
|
|
30
|
+
|
|
31
|
+
### Resolução Canônica de Templates
|
|
32
|
+
|
|
33
|
+
* Fonte única: `packages/templates/` empacotado no plugin Atlas Workflow.
|
|
34
|
+
* Resolver `PRD_TEMPLATE.md` a partir da raiz do plugin/bundle, antes de olhar qualquer arquivo do repo consumidor.
|
|
35
|
+
* Template local do repo consumidor nunca sobrepõe o template empacotado.
|
|
36
|
+
* Se `packages/templates/PRD_TEMPLATE.md` não existir, abortar com erro claro: `Template canônico ausente: PRD_TEMPLATE.md`.
|
|
37
|
+
* Não usar fallback silencioso para cópias antigas, vault local ou templates globais.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Metadados Atlas Obrigatórios
|
|
42
|
+
|
|
43
|
+
Todo PRD criado ou atualizado por esta skill deve incluir, perto do topo e sem substituir o template, o seguinte bloco de metadados:
|
|
44
|
+
|
|
45
|
+
```md
|
|
46
|
+
## Metadados de execução
|
|
47
|
+
- Plan prefix: `atlas`
|
|
48
|
+
- Target planner: `atlas-plan-handoff`
|
|
49
|
+
- Target executor: `atlas-plan-execute`
|
|
50
|
+
- Internal validator: `atlas-task-validator`
|
|
51
|
+
- External review: `atlas-slice-review` (optional)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Regras de Conteúdo
|
|
57
|
+
|
|
58
|
+
* **Status final:** `Aprovado para implementação`. Setar **automaticamente** ao finalizar a geração — é o status que o gate TC do orquestrador exige (`required_status=Aprovado para implementação`) para o PRD avançar no pipeline. Não deixar `Draft` (trava o gate e força correção manual). O sinal de determinismo que sustenta o avanço é o `atlas_scan_prd` (varredura de ambiguidade) + entrevista quando houver padrões bloqueantes — não o campo Status, que é marcador documental.
|
|
59
|
+
* **Data:** ISO `YYYY-MM-DD` (hoje).
|
|
60
|
+
* **Escopo:** Lista fechada de capacidades funcionais.
|
|
61
|
+
* **UX:** Cobrir caminhos de `loading`, `empty`, `error`, `success` e `permission` sob a perspectiva do usuário.
|
|
62
|
+
* **Critérios de Aceite:** Binários e observáveis, divididos conforme `PRD_TEMPLATE.md` em: **Produto**, **UX**, **Dados** e **Regressão de produto**.
|
|
63
|
+
* **Proibições Estritas:**
|
|
64
|
+
* Não inventar schemas, RPCs, endpoints ou tabelas.
|
|
65
|
+
* Não misturar plano de implementação, classes Dart, imports, clean architecture ou comandos de terminal com o PRD. Seguir estritamente o `BOUNDARY_PRD_PLAN.md`.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Validação Mínima
|
|
70
|
+
|
|
71
|
+
Antes de salvar:
|
|
72
|
+
* Confirme que todas as seções do template estão presentes.
|
|
73
|
+
* Garanta que o bloco de `Metadados de execução` existe e está preenchido com `atlas`.
|
|
74
|
+
* Certifique-se de que não há nomes de classes de código ou arquivos Dart dentro do PRD.
|
package/plugins/atlas-workflow-orchestrator/skills/atlas-sprint-prd-generator/agents/openai.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Atlas Sprint PRD Generator"
|
|
3
|
+
short_description: "Gera PRDs de Sprint com prefixo atlas-*"
|
|
4
|
+
default_prompt: "Use $atlas-sprint-prd-generator para criar o PRD da sprint S01 com metadados de execução atlas-* a partir do backlog mestre e do PRD template reais."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|