@jaimevalasek/aioson 1.23.1 → 1.28.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 +56 -0
- package/docs/en/4-agents/README.md +11 -8
- package/docs/en/4-agents/forge-run.md +165 -0
- package/docs/en/5-reference/README.md +1 -0
- package/docs/en/5-reference/cli-reference.md +199 -85
- package/docs/en/5-reference/executable-verification.md +165 -0
- package/docs/pt/4-agentes/README.md +2 -1
- package/docs/pt/4-agentes/forge-run.md +150 -0
- package/docs/pt/4-agentes/pm.md +8 -0
- package/docs/pt/4-agentes/qa.md +2 -0
- package/docs/pt/4-agentes/scope-check.md +19 -1
- package/docs/pt/4-agentes/sheldon.md +2 -0
- package/docs/pt/4-agentes/validator.md +20 -0
- package/docs/pt/5-referencia/autopilot-handoff.md +33 -0
- package/docs/pt/5-referencia/comandos-cli.md +64 -9
- package/docs/pt/5-referencia/fluxo-artefatos.md +40 -15
- package/docs/pt/5-referencia/loop-guardrails.md +19 -0
- package/docs/pt/5-referencia/sdd-automation-scripts.md +130 -26
- package/package.json +1 -1
- package/src/cli.js +70 -54
- package/src/commands/context-select.js +1 -0
- package/src/commands/forge-compile.js +330 -0
- package/src/commands/harness-check.js +159 -0
- package/src/commands/harness.js +37 -2
- package/src/commands/spec-analyze.js +324 -0
- package/src/constants.js +118 -108
- package/src/context-selector.js +28 -2
- package/src/gateway-pointer-merge.js +25 -4
- package/src/harness/contract-schema.js +8 -0
- package/src/harness/plan-waves.js +77 -0
- package/src/harness/review-payload.js +230 -0
- package/src/i18n/messages/en.js +21 -15
- package/src/i18n/messages/es.js +15 -13
- package/src/i18n/messages/fr.js +15 -13
- package/src/i18n/messages/pt-BR.js +21 -15
- package/src/parser.js +3 -1
- package/template/.aioson/agents/dev.md +67 -66
- package/template/.aioson/agents/deyvin.md +79 -74
- package/template/.aioson/agents/forge-run.md +57 -0
- package/template/.aioson/agents/pm.md +51 -45
- package/template/.aioson/agents/qa.md +22 -22
- package/template/.aioson/agents/scope-check.md +49 -46
- package/template/.aioson/agents/sheldon.md +1 -1
- package/template/.aioson/agents/validator.md +16 -5
- package/template/.aioson/docs/autopilot-handoff.md +34 -32
- package/template/.aioson/docs/sheldon/harness-contract.md +19 -2
- package/template/.aioson/skills/process/aioson-spec-driven/SKILL.md +9 -7
- package/template/.aioson/skills/process/aioson-spec-driven/references/deyvin.md +19 -15
- package/template/.claude/commands/aioson/agent/forge-run.md +17 -0
- package/template/AGENTS.md +7 -5
- package/template/CLAUDE.md +4 -3
- package/template/OPENCODE.md +24 -22
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Executable verification — AIOSON (EN)
|
|
2
|
+
|
|
3
|
+
> **What this is:** the reference for AIOSON's "executable verification" theme (versions 1.24.0–1.28.0).
|
|
4
|
+
> **Reading time:** 8 min.
|
|
5
|
+
> **What you will learn:**
|
|
6
|
+
> - How AIOSON turns binary success criteria into deterministic, runnable checks
|
|
7
|
+
> - The five phases: `verification` + `harness:check`, the fresh-context validator, `spec:analyze`, Wave markers, and Lane B (`forge:compile` + `@forge-run`)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## The idea in one paragraph
|
|
12
|
+
|
|
13
|
+
AIOSON already has two strong foundations: the **`harness-contract.json`** (binary success criteria per feature) and the **SDD artifact chain** (PRD → spec → plan → conformance). The executable-verification theme builds on both to make verification **deterministic** (run a command, read an exit code) and to make specs **compilable** (turn a ready spec into an auditable workflow). Everything is **additive**: the default lane — `@scope-check` → `@dev` → `@qa` → `@validator` — is **unchanged**. The new pieces tighten the verification surface without rerouting existing flows.
|
|
14
|
+
|
|
15
|
+
The theme ships in five phases.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Phase 1 (v1.24.0) — `harness:check` + the `verification` field
|
|
20
|
+
|
|
21
|
+
A `harness-contract.json` criterion can now carry an authored **`verification`** field: a shell command that proves the criterion mechanically. `@sheldon` authors it for every mechanically-checkable `binary: true` criterion — preferring the project's own test runner, deterministic, cross-platform, with **exit 0 = pass**. Legacy contracts without `verification` stay valid; `validateContract` only emits an advisory **warning** (never an error) for `binary: true` criteria that lack it.
|
|
22
|
+
|
|
23
|
+
The new command runs those commands deterministically:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Run every verifiable criterion of the active contract (auto-discovered)
|
|
27
|
+
aioson harness:check . --slug=checkout
|
|
28
|
+
|
|
29
|
+
# Run only a subset of criteria
|
|
30
|
+
aioson harness:check . --slug=checkout --criteria=C1,C3
|
|
31
|
+
|
|
32
|
+
# Custom timeout and JSON output (exit 0 = pass)
|
|
33
|
+
aioson harness:check . --slug=checkout --timeout=120000 --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`harness:check` runs **outside** the self:loop and is **read-only** over `progress.json` — it never mutates circuit-breaker state. It reuses the loop's `runCriteria`/`executeInSandbox` machinery, so it inherits timeouts, process-tree kill, credential redaction, and failure signatures. It persists `last-check-output.json` and emits `criteria_check_failed` telemetry on failure. With `--slug` omitted, it auto-discovers the active contract; `--criteria` runs a subset.
|
|
37
|
+
|
|
38
|
+
**Validator impact:** `@validator` now runs `harness:check` **first** and copies the exit-code verdicts **verbatim** into `results[].passed`. It only LLM-judges the criteria that have no `verification`. The output schema is unchanged.
|
|
39
|
+
|
|
40
|
+
See [`harness:check`](./cli-reference.md#harnesscheck) in the CLI reference.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Phase 2 (v1.25.0) — Fresh-context validator (review payload)
|
|
45
|
+
|
|
46
|
+
`harness:validate` now appends a self-contained **review payload** to the generated `validator-prompt.txt`, so the validator can judge without access to the implementing session:
|
|
47
|
+
|
|
48
|
+
- (a) the `harness:check` results,
|
|
49
|
+
- (b) the changed-file list (untracked files included; `.aioson/**` framework state filtered out),
|
|
50
|
+
- (c) a unified diff against a resolved base.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Generate the validator prompt with review payload
|
|
54
|
+
aioson harness:validate . --slug=checkout
|
|
55
|
+
|
|
56
|
+
# Resolve the diff against an explicit base
|
|
57
|
+
aioson harness:validate . --slug=checkout --base=main
|
|
58
|
+
|
|
59
|
+
# Skip the diff (results + changed files still included)
|
|
60
|
+
aioson harness:validate . --slug=checkout --no-diff
|
|
61
|
+
|
|
62
|
+
# Cap the embedded diff size
|
|
63
|
+
aioson harness:validate . --slug=checkout --max-diff-bytes=200000
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The base is resolved in this order: `--base` > `baseline.json` head > merge-base with `main`/`master` > `HEAD`. `--max-diff-bytes` defaults to `200000` and truncates on a line boundary; `--no-diff` is a pure boolean flag that skips the diff. The payload degrades gracefully outside a git repo. The work lives in a new module, `src/harness/review-payload.js`.
|
|
67
|
+
|
|
68
|
+
**Protocol:** `@validator` runs in a **fresh, isolated context** — a subagent (Task tool) or a separate session — **never inline** in the implementing session, because implementation history biases the verdict. The flow is:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
harness:check → harness:validate → isolated subagent run → harness:validate (consume verdict)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The final `harness:validate` re-run consumes the verdict back through the circuit breaker.
|
|
75
|
+
|
|
76
|
+
See [`harness:validate`](./cli-reference.md#harnessvalidate) in the CLI reference.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Phase 3 (v1.26.0) — `spec:analyze` cross-artifact consistency
|
|
81
|
+
|
|
82
|
+
`spec:analyze` is the **content** sibling of `artifact:validate`. Where `artifact:validate` checks chain **presence** (unchanged), `spec:analyze` checks **consistency of content** across the feature's artifacts before the execution gate:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Analyze cross-artifact consistency
|
|
86
|
+
aioson spec:analyze . --feature=checkout
|
|
87
|
+
|
|
88
|
+
# JSON output for gate scripting (errors → exit 1)
|
|
89
|
+
aioson spec:analyze . --feature=checkout --json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
It runs five deterministic checks:
|
|
93
|
+
|
|
94
|
+
1. **REQ/AC ID traceability** — declared-but-unreferenced = coverage-gap warning; referenced-but-undeclared = orphan/drift warning (noise-guarded for prose plans).
|
|
95
|
+
2. **Staleness** — an upstream artifact modified after a downstream one = warning (60s tolerance; the project-global `architecture.md` is excluded).
|
|
96
|
+
3. **Readiness** — `blocked` = error; `ready_with_warnings` = info.
|
|
97
|
+
4. **Harness-contract sanity** — schema errors = error; executable-coverage = info.
|
|
98
|
+
5. **AC→contract linkage** = info.
|
|
99
|
+
|
|
100
|
+
An `error` flips `ok: false` (exit 1 in `--json`). Results persist to `spec-analyze-{slug}.json`. `@scope-check` runs `spec:analyze` in preflight: **errors are blockers, warnings are pre-computed drift evidence**.
|
|
101
|
+
|
|
102
|
+
See [`spec:analyze`](./cli-reference.md#specanalyze) in the CLI reference.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Phase 4 (v1.27.0) — Wave parallelism markers
|
|
107
|
+
|
|
108
|
+
`@pm`'s Execution Sequence table gains a **`Wave`** column. Same-wave phases are **file-disjoint and dependency-free**, so they can run in parallel (via isolated subagents or worktrees). Waves run in ascending order, and marking is **conservative**: when in doubt, sequential.
|
|
109
|
+
|
|
110
|
+
`spec:analyze` gains the **`wave_file_overlap`** check: same-wave phases that share Primary files raise a warning. Plans without a `Wave` column skip the check entirely.
|
|
111
|
+
|
|
112
|
+
The Wave column is what Phase 5 compiles into `parallel()` blocks.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Phase 5 (v1.28.0) — Lane B: `forge:compile` + `@forge-run`
|
|
117
|
+
|
|
118
|
+
Lane B is an **opt-in, additive** second lane: it compiles a MEDIUM feature's artifacts into a single auditable, versionable workflow and runs the whole verification cycle end to end. The default lane stays the recommended path.
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Compile the feature into a forge-run.workflow.js
|
|
122
|
+
aioson forge:compile . --feature=checkout
|
|
123
|
+
|
|
124
|
+
# JSON output (hard preflights may refuse)
|
|
125
|
+
aioson forge:compile . --feature=checkout --json
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
`forge:compile` produces `.aioson/plans/{slug}/forge-run.workflow.js` — a Claude Code dynamic-workflow script committed alongside the spec. Its structure mirrors the whole theme:
|
|
129
|
+
|
|
130
|
+
- one **`parallel()` per Wave** (file-disjoint dev agents; blocked-wave early stop),
|
|
131
|
+
- a deterministic **`harness:check` convergence loop** bounded by the governor's `error_streak_limit` (sequential fixes — only waves prove disjointness) plus a token-budget guard,
|
|
132
|
+
- a **3-lens adversarial review** (correctness / completeness / regression-risk; majority survives; refute-by-default) for binary criteria **without** `verification`,
|
|
133
|
+
- a **fresh-context validator** stage closing through `harness:validate` → `last-validator-output.json` → `apply-validation`.
|
|
134
|
+
|
|
135
|
+
**Hard preflights** refuse compilation and name the owning agent: invalid/missing contract, zero executable criteria, plan without a `Wave` column, `spec:analyze` errors, and `wave_file_overlap` (a warning in `spec:analyze`, an **error** here). The generated code is deterministic by construction: pure-literal metadata, plain JS, no `Date.now`/`Math.random`/`new Date`, artifact text via `JSON.stringify` (injection-safe). It **never** runs `feature:close`. New module: `src/harness/plan-waves.js`.
|
|
136
|
+
|
|
137
|
+
The opt-in entry point is the **`@forge-run`** agent: compile → review with the user (cost warning) → execute via the workflow runtime (never hand-emulated) → report. One feature per run. **PASS** recommends the human run `feature:close`; **FAIL** routes to `@dev` via the normal lane. It never auto-runs `feature:close`/publish.
|
|
138
|
+
|
|
139
|
+
See [`forge:compile`](./cli-reference.md#forgecompile) in the CLI reference and the [@forge-run agent card](../4-agents/forge-run.md).
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## How the phases fit together
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
@sheldon authors verification ──► harness:check (deterministic, exit 0 = pass) [Phase 1]
|
|
147
|
+
│
|
|
148
|
+
@scope-check runs spec:analyze ◄────────┤ (errors block, warnings = drift) [Phase 3]
|
|
149
|
+
@pm fills the Wave column ──────────────┤ (parallelizable, file-disjoint) [Phase 4]
|
|
150
|
+
│
|
|
151
|
+
default lane: @dev ► @qa ► harness:validate (review payload) [Phase 2]
|
|
152
|
+
└► @validator in a FRESH, ISOLATED context
|
|
153
|
+
│
|
|
154
|
+
Lane B (opt-in): @forge-run ► forge:compile ► run the compiled workflow [Phase 5]
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
The default lane and Lane B consume the **same** contract, plan, and `spec:analyze` results — Lane B just compiles them into one executable script.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## See also
|
|
162
|
+
|
|
163
|
+
- [CLI reference](./cli-reference.md) — `harness:check`, `harness:validate`, `spec:analyze`, `forge:compile`
|
|
164
|
+
- [@forge-run agent card](../4-agents/forge-run.md) — the opt-in Lane B entry point
|
|
165
|
+
- [Agents index](../4-agents/README.md) — `@sheldon`, `@pm`, `@scope-check`, `@validator`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Guia de Agentes AIOSON
|
|
2
2
|
|
|
3
|
-
> Índice com
|
|
3
|
+
> Índice com 30 agentes e 1 alias, com situação de uso e saída esperada.
|
|
4
4
|
> Cada agente tem sua ficha — clique no nome para detalhes.
|
|
5
5
|
> `@pair` é alias de `@deyvin` e não possui ficha separada.
|
|
6
6
|
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
| [@dev](./dev.md) | Implementa a feature | Após planning completo | código + `dev-state.md` |
|
|
21
21
|
| [@qa](./qa.md) | Testa, valida ACs, ciclo autônomo com `@dev` | Após `@dev` | `test-plan.md`, `qa-report-*.md` |
|
|
22
22
|
| [@validator](./validator.md) | Gate final: valida contrato binário de sucesso | Após `@qa`, antes de fechar feature | veredicto em `last-handoff.json` |
|
|
23
|
+
| [@forge-run](./forge-run.md) | Lane B opt-in: compila e roda o workflow de verificação executável de uma feature MEDIUM | MEDIUM com contrato `verification` + plano com Wave | `forge-run.workflow.js` |
|
|
23
24
|
| [@tester](./tester.md) | Engenharia de testes para apps já existentes | Legacy/brownfield ou lacunas graves | `test-inventory.md` |
|
|
24
25
|
| [@pentester](./pentester.md) | Revisão adversarial de segurança | Antes de publicar ou por demanda | `security-findings-*.json` |
|
|
25
26
|
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# @forge-run — Compile e execute o workflow da Lane B (verificação executável)
|
|
2
|
+
|
|
3
|
+
> **Para quem é:** quem tem uma feature MEDIUM com contrato binário e plano por waves, e quer rodar todo o ciclo de execução verificável em um único workflow compilado.
|
|
4
|
+
> **Tempo de leitura:** 4 min.
|
|
5
|
+
> **O que você vai sair sabendo:**
|
|
6
|
+
> - O que é a Lane B e por que ela é **opt-in** e **aditiva**
|
|
7
|
+
> - O protocolo: `forge:compile` → revisão com você → execução → relatório
|
|
8
|
+
> - Por que `@forge-run` nunca enfraquece uma verificação nem fecha a feature
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Para que serve
|
|
13
|
+
|
|
14
|
+
A lane padrão de verificação executável (`@scope-check` → `@dev` → `@qa` → `@validator`) continua **inalterada** e é o caminho recomendado. O `@forge-run` é uma **segunda lane (Lane B), opcional e aditiva**: ele compila os artefatos de uma feature MEDIUM num único **workflow versionável** e roda o ciclo inteiro de verificação determinística de ponta a ponta.
|
|
15
|
+
|
|
16
|
+
Em vez de avançar etapa a etapa manualmente, `@forge-run` gera `.aioson/plans/{slug}/forge-run.workflow.js` — um script de dynamic workflow do Claude Code — e o executa via runtime de workflows. A estrutura compilada reflete o roadmap de verificação executável:
|
|
17
|
+
|
|
18
|
+
- **`parallel()` por Wave** — fases na mesma wave são disjuntas em arquivos e rodam em paralelo (ver coluna `Wave` do [@pm](./pm.md)).
|
|
19
|
+
- **Loop determinístico sobre `harness:check`** — limitado pelo `error_streak_limit` do governor; fixes são sequenciais.
|
|
20
|
+
- **Revisão adversarial de 3 lentes** — para os critérios que não têm `verification` (e portanto não podem ser checados mecanicamente).
|
|
21
|
+
- **Validador em contexto fresco** — fecha pelo ciclo `apply-validation` (ver [@validator](./validator.md)).
|
|
22
|
+
|
|
23
|
+
**Regra dura:** uma feature por run. `@forge-run` nunca roda `feature:close` nem publica.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Quando invocar
|
|
28
|
+
|
|
29
|
+
- Feature **MEDIUM** com `harness-contract.json` contendo `verification` por critério (autorado pelo [@sheldon](./sheldon.md)).
|
|
30
|
+
- Plano de implementação com a coluna `Wave` preenchida (produzido pelo [@pm](./pm.md)).
|
|
31
|
+
- `aioson spec:analyze` limpo (sem `errors`) — pré-condição do gate de execução.
|
|
32
|
+
- Quando você quer rodar todo o ciclo de verificação executável como um único workflow reproduzível e versionável.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Quando NÃO invocar
|
|
37
|
+
|
|
38
|
+
- Features MICRO ou SMALL → use a lane padrão (`@dev` → `@qa` → `@validator`).
|
|
39
|
+
- Contrato sem critérios executáveis, ou plano sem Wave → os preflights duros recusam compilar.
|
|
40
|
+
- `spec:analyze` com `errors` ou `wave_file_overlap` → resolva antes; a Lane B não compila por cima de drift.
|
|
41
|
+
- Você quer apenas validar, não executar → use `@validator` diretamente.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Inputs obrigatórios
|
|
46
|
+
|
|
47
|
+
A Lane B só compila quando todos os pré-requisitos estão presentes — caso contrário os preflights duros recusam:
|
|
48
|
+
|
|
49
|
+
- `.aioson/plans/{slug}/harness-contract.json` — contrato **válido**, com pelo menos um critério executável (`verification` presente).
|
|
50
|
+
- `implementation-plan-{slug}.md` — plano com a coluna `Wave` preenchida.
|
|
51
|
+
- `spec-analyze-{slug}.json` sem `errors` e sem `wave_file_overlap`.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Diálogo típico
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Você > @forge-run
|
|
59
|
+
|
|
60
|
+
@forge-run > Feature: checkout-stripe (MEDIUM)
|
|
61
|
+
|
|
62
|
+
Preflight da Lane B:
|
|
63
|
+
- harness-contract.json válido ✓
|
|
64
|
+
- 5 critérios, 4 com verification (executáveis) ✓
|
|
65
|
+
- implementation-plan com coluna Wave ✓
|
|
66
|
+
- spec:analyze → ok, sem errors, sem wave_file_overlap ✓
|
|
67
|
+
|
|
68
|
+
$ aioson forge:compile . --feature=checkout-stripe
|
|
69
|
+
Compilado: .aioson/plans/checkout-stripe/forge-run.workflow.js
|
|
70
|
+
|
|
71
|
+
Estrutura do workflow:
|
|
72
|
+
- Wave 1 (parallel): backend + migrations
|
|
73
|
+
- Wave 2: frontend
|
|
74
|
+
- Loop harness:check (limite error_streak: 3, fixes sequenciais)
|
|
75
|
+
- Revisão adversarial de 3 lentes para C5 (sem verification)
|
|
76
|
+
- Validador fresh-context → apply-validation
|
|
77
|
+
|
|
78
|
+
⚠ Custo: este workflow roda múltiplas execuções de LLM.
|
|
79
|
+
Revise o script antes de executar. Aprovar execução? (s/n)
|
|
80
|
+
|
|
81
|
+
Você > s
|
|
82
|
+
|
|
83
|
+
@forge-run > Executando via runtime de workflows...
|
|
84
|
+
Wave 1 ✓ Wave 2 ✓
|
|
85
|
+
harness:check → 4/4 critérios executáveis PASS
|
|
86
|
+
Revisão adversarial C5 → PASS
|
|
87
|
+
Validador fresh-context → overall_score: 1
|
|
88
|
+
|
|
89
|
+
RESULTADO: PASS
|
|
90
|
+
Recomendação: rode `aioson feature:close` manualmente.
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Saídas em disco
|
|
96
|
+
|
|
97
|
+
| Arquivo | Conteúdo |
|
|
98
|
+
|---|---|
|
|
99
|
+
| `.aioson/plans/{slug}/forge-run.workflow.js` | Workflow compilado e versionável (dynamic workflow do Claude Code) |
|
|
100
|
+
| `.aioson/plans/{slug}/last-check-output.json` | Último resultado do `harness:check` consumido pelo loop |
|
|
101
|
+
| `.aioson/plans/{slug}/last-validator-output.json` | Veredicto do validador fresh-context |
|
|
102
|
+
| `.aioson/plans/{slug}/progress.json` | Estado pós-execução (`circuit_state`, `ready_for_done_gate`) |
|
|
103
|
+
|
|
104
|
+
O código gerado é determinístico por construção: metadados literais, sem `Date.now`/`Math.random`, texto sempre via `JSON.stringify`, e **nunca** invoca `feature:close`.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Como ele lê seu projeto
|
|
109
|
+
|
|
110
|
+
- `.aioson/plans/{slug}/harness-contract.json` — contrato e critérios com `verification`
|
|
111
|
+
- `.aioson/context/implementation-plan-{slug}.md` — plano com coluna `Wave`
|
|
112
|
+
- `.aioson/plans/{slug}/spec-analyze-{slug}.json` — consistência cross-artefato (gate de execução)
|
|
113
|
+
- `.aioson/plans/{slug}/progress.json` — estado e `error_streak_limit` do governor
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Comandos CLI relacionados
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# Compila os artefatos da feature no workflow da Lane B
|
|
121
|
+
aioson forge:compile . --feature={slug}
|
|
122
|
+
|
|
123
|
+
# (saída parseável)
|
|
124
|
+
aioson forge:compile . --feature={slug} --json
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Regras duras
|
|
130
|
+
|
|
131
|
+
- **Nunca** passa por cima de um preflight que falhou (contrato inválido, zero critério executável, plano sem Wave, `errors` ou `wave_file_overlap` do `spec:analyze`).
|
|
132
|
+
- **Nunca** enfraquece ou remove uma checagem de `verification` para fazer um critério passar.
|
|
133
|
+
- **Nunca** roda `feature:close` nem publica — isso é sempre decisão humana.
|
|
134
|
+
- Uma feature por run.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Handoff típico
|
|
139
|
+
|
|
140
|
+
- **Vem de:** entrada opt-in pelo usuário (Lane B); pressupõe `@sheldon`, `@pm` e `@scope-check`/`spec:analyze` já concluídos.
|
|
141
|
+
- **PASS:** recomenda que o **humano** rode `aioson feature:close` manualmente.
|
|
142
|
+
- **FAIL:** volta ao `@dev` pela **lane normal** para corrigir e re-verificar.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Próximo passo
|
|
147
|
+
|
|
148
|
+
- [Ficha do @pm](./pm.md) — produz a coluna `Wave` que vira `parallel()` no workflow
|
|
149
|
+
- [Ficha do @sheldon](./sheldon.md) — autora o campo `verification` por critério
|
|
150
|
+
- [Ficha do @validator](./validator.md) — o validador fresh-context que fecha o ciclo
|
package/docs/pt/4-agentes/pm.md
CHANGED
|
@@ -35,6 +35,14 @@ Para o projeto completo (configuração inicial), `@pm` entra após `@ux-ui` e a
|
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
38
|
+
## Coluna `Wave` na Execution Sequence (v1.27.0+)
|
|
39
|
+
|
|
40
|
+
A tabela **Execution Sequence** do `implementation-plan-{slug}.md` ganhou a coluna `Wave`. Fases marcadas na **mesma wave** são **disjuntas em arquivos** (não tocam nos mesmos arquivos) e, portanto, **paralelizáveis** — é exatamente essa marcação que a Lane B do [@forge-run](./forge-run.md) compila em blocos `parallel()`.
|
|
41
|
+
|
|
42
|
+
A marcação é **conservadora**: na dúvida, o `@pm` deixa sequencial. Só agrupa na mesma wave quando tem certeza de que não há sobreposição de arquivos.
|
|
43
|
+
|
|
44
|
+
O `aioson spec:analyze` verifica a consistência das waves: mesma wave com arquivos sobrepostos dispara o warning `wave_file_overlap`, que o [@scope-check](./scope-check.md) trata como drift pré-computado.
|
|
45
|
+
|
|
38
46
|
## Quando invocar
|
|
39
47
|
|
|
40
48
|
- Features MEDIUM (obrigatório no workflow — produz Gate C).
|
package/docs/pt/4-agentes/qa.md
CHANGED
|
@@ -115,6 +115,8 @@ aioson dossier:show . --slug=checkout-stripe
|
|
|
115
115
|
- **Vem de:** `@dev`
|
|
116
116
|
- **Vai para:** `@validator` (quando há harness-contract) ou encerramento da feature
|
|
117
117
|
|
|
118
|
+
> Desde a v1.24.0, o `@validator` roda `aioson harness:check` **primeiro** (verificação determinística, exit 0 = pass) e julga por LLM só os critérios sem `verification`. Ele é ativado a partir do `validator-prompt.txt` autocontido (critérios + resultados do check + diff vs. base) em **contexto fresco e isolado** — não na sessão que implementou. Ver [Ficha do @validator](./validator.md).
|
|
119
|
+
|
|
118
120
|
---
|
|
119
121
|
|
|
120
122
|
## Próximo passo
|
|
@@ -11,9 +11,26 @@ Ele evita drift de escopo: antes de codar, confere se tudo que foi decidido est
|
|
|
11
11
|
- Após `@dev` e/ou correções de `@qa`/`@tester`/`@pentester`, quando houve mudança material de código ou comportamento.
|
|
12
12
|
- Em reaberturas de feature com risco de quebra de contrato entre o que foi planejado e o que está sendo entregue.
|
|
13
13
|
|
|
14
|
+
## Preflight determinístico: `spec:analyze` (v1.26.0+)
|
|
15
|
+
|
|
16
|
+
No modo `pre-dev`, antes de julgar, o `@scope-check` roda `aioson spec:analyze . --feature={slug}` — uma checagem **determinística** de consistência entre artefatos, executada **antes do gate de execução**. Ela cobre:
|
|
17
|
+
|
|
18
|
+
- rastreabilidade REQ/AC (gaps e órfãos);
|
|
19
|
+
- staleness (upstream modificado depois do downstream);
|
|
20
|
+
- readiness `blocked` (vira `error`);
|
|
21
|
+
- sanidade do contrato e vínculo AC→contrato;
|
|
22
|
+
- `wave_file_overlap` (mesma wave + arquivos sobrepostos — ver coluna `Wave` do [@pm](./pm.md)).
|
|
23
|
+
|
|
24
|
+
Interpretação:
|
|
25
|
+
|
|
26
|
+
- **`errors` são blockers** — `spec:analyze` retorna `ok:false` e o `@scope-check` não libera para `@dev`.
|
|
27
|
+
- **`warnings` são evidência de drift pré-computada** — entram no relatório como divergências a confirmar, sem necessariamente bloquear.
|
|
28
|
+
|
|
29
|
+
O resultado é persistido em `spec-analyze-{slug}.json`.
|
|
30
|
+
|
|
14
31
|
## Modos
|
|
15
32
|
|
|
16
|
-
- `pre-dev` (padrão): valida intenção e plano antes da primeira implementação.
|
|
33
|
+
- `pre-dev` (padrão): valida intenção e plano antes da primeira implementação (roda `spec:analyze`).
|
|
17
34
|
- `post-dev` (opcional): valida se o diff entregue bate com o plano aprovado.
|
|
18
35
|
- `post-fix` (opcional): valida se correções mantiveram o escopo e contrato.
|
|
19
36
|
- `final` (opcional): reconcilia intenção, plano e resultado de fechamento.
|
|
@@ -34,6 +51,7 @@ Cria/atualiza:
|
|
|
34
51
|
|
|
35
52
|
- `.aioson/context/scope-check.md` (modo projeto)
|
|
36
53
|
- `.aioson/context/scope-check-{slug}.md` (modo feature)
|
|
54
|
+
- `.aioson/plans/{slug}/spec-analyze-{slug}.json` (resultado do `spec:analyze` no `pre-dev`)
|
|
37
55
|
|
|
38
56
|
O relatório deve indicar:
|
|
39
57
|
|
|
@@ -69,6 +69,8 @@ O `@sheldon` decide entre **enriquecer in-place** ou **criar plano faseado** dep
|
|
|
69
69
|
|
|
70
70
|
**Re-entrante:** se `sheldon-enrichment.md` já existir, o `@sheldon` detecta e oferece nova rodada sem refazer do zero. Você pode invocá-lo 2, 3, N vezes — cada rodada fecha mais gaps.
|
|
71
71
|
|
|
72
|
+
**Campo `verification` no contrato (v1.24.0+):** ao gerar o `harness-contract.json`, o `@sheldon` agora autora um comando de shell `verification` para **todo critério `binary:true` mecanicamente verificável** (exit 0 = pass). Ele prefere o test runner do próprio projeto, mira em comandos determinísticos e cross-platform. Com isso, `aioson harness:check` consegue verificar o critério de forma determinística, fora do `self:loop`, e o `@validator` copia o exit code verbatim no veredicto. Contratos legados sem o campo continuam válidos (o `@validator` cai no julgamento por LLM para esses critérios).
|
|
73
|
+
|
|
72
74
|
## Como ele lê seu projeto
|
|
73
75
|
|
|
74
76
|
1. `.aioson/context/project.context.md` — stack e classificação.
|
|
@@ -86,6 +86,26 @@ Apenas e exclusivamente:
|
|
|
86
86
|
|
|
87
87
|
---
|
|
88
88
|
|
|
89
|
+
## Ativação em contexto fresco (v1.24.0+)
|
|
90
|
+
|
|
91
|
+
A ativação preferida do `@validator` é o **`validator-prompt.txt` autocontido** gerado por `aioson harness:validate`. Esse prompt embute um REVIEW PAYLOAD com tudo que ele precisa para julgar sem depender de chat anterior:
|
|
92
|
+
|
|
93
|
+
- os critérios do `harness-contract.json`;
|
|
94
|
+
- os **resultados do `harness:check`** (verificação determinística, exit 0 = pass);
|
|
95
|
+
- a lista de arquivos alterados e o **diff unificado vs. base resolvida** (`--base` > `baseline.json` > merge-base `main`/`master` > `HEAD`; default `--max-diff-bytes` 200KB; `--no-diff` omite). Fora de git, degrada graciosamente.
|
|
96
|
+
|
|
97
|
+
Por isso o `@validator` roda em **contexto fresco e isolado** — subagente (Task tool) ou sessão separada, nunca inline na sessão que implementou. O histórico de implementação enviesa o veredicto.
|
|
98
|
+
|
|
99
|
+
**Ordem de operações:**
|
|
100
|
+
|
|
101
|
+
1. Roda `harness:check` **primeiro** e copia o exit code **verbatim** em `results[].passed` — não re-julga o que a máquina já decidiu.
|
|
102
|
+
2. Só usa julgamento por LLM nos critérios **sem** `verification` (não verificáveis mecanicamente).
|
|
103
|
+
3. O schema de saída permanece inalterado (`overall_score: 1 | 0`).
|
|
104
|
+
|
|
105
|
+
Fluxo completo: `harness:check` → `harness:validate` → execução isolada → re-rodar `harness:validate` para o output ser consumido pelo circuit breaker (`apply-validation`).
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
89
109
|
## Handoff típico
|
|
90
110
|
|
|
91
111
|
- **Vem de:** `@qa` (recomenda `@validator` no relatório quando `harness-contract.json` existe).
|
|
@@ -57,6 +57,25 @@ Uma vez que o `@dev` inicial termina, o autopilot retoma automaticamente:
|
|
|
57
57
|
|
|
58
58
|
`@tester` e `@pentester` só executam quando os seus triggers disparam (`@qa` identifica gaps de cobertura → `@tester`; superfície sensível auth/secrets/data → `@pentester`).
|
|
59
59
|
|
|
60
|
+
### Protocolo de contexto fresco do @validator
|
|
61
|
+
|
|
62
|
+
O `@validator` roda em contexto **fresco e isolado** (subagente/Task tool ou sessão separada), nunca inline na sessão que implementou — o histórico de implementação enviesa o veredito. Quando o autopilot roteia para `@validator`, a sequência é:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
harness:check → roda os criteria[].verification deterministicamente (exit code = veredito)
|
|
66
|
+
↓
|
|
67
|
+
harness:validate → gera validator-prompt.txt com REVIEW PAYLOAD autocontido:
|
|
68
|
+
(a) resultados do harness:check
|
|
69
|
+
(b) lista de arquivos alterados (untracked incluídos, .aioson/** filtrado)
|
|
70
|
+
(c) diff unificado vs base resolvida (--base > baseline.json > merge-base > HEAD)
|
|
71
|
+
↓
|
|
72
|
+
execução isolada em subagente → @validator julga só os critérios sem verification, em contexto limpo
|
|
73
|
+
↓
|
|
74
|
+
harness:validate (de novo) → consome o veredito pelo circuit breaker (waiting_validation/apply-validation)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
O review payload torna o prompt do validador **autocontido**: ele não precisa explorar o repositório. O diff tem teto de tamanho (`--max-diff-bytes`, default 200KB, truncamento em fronteira de linha); `--no-diff` omite o diff; fora de repo git, degrada graciosamente. A máquina de estados `waiting_validation`/`apply-validation` permanece inalterada.
|
|
78
|
+
|
|
60
79
|
---
|
|
61
80
|
|
|
62
81
|
## Condições de parada
|
|
@@ -124,6 +143,20 @@ Você > aioson feature:close . --feature=minha-feature
|
|
|
124
143
|
|
|
125
144
|
---
|
|
126
145
|
|
|
146
|
+
## Lane B — execução compilada (alternativa opt-in)
|
|
147
|
+
|
|
148
|
+
Para features **MEDIUM**, existe uma lane de execução alternativa ao autopilot em tempo real: a **Lane B**, acionada pelo agente `@forge-run` (`/forge-run`). Em vez de encadear agentes vivos, o `@forge-run` **compila** os artefatos da feature num `.aioson/plans/{slug}/forge-run.workflow.js` (via `aioson forge:compile`) e o executa pelo runtime de workflows.
|
|
149
|
+
|
|
150
|
+
O workflow compilado embute o mesmo ciclo de revisão: um `parallel()` por Wave → convergência no `harness:check` → revisão adversarial de 3 lentes para critérios binários sem `verification` → validador fresh-context fechando por `harness:validate` → `apply-validation`. Como a lane normal, ele **nunca** roda `feature:close`/publish: PASS recomenda o humano rodar `feature:close`; FAIL volta ao `@dev` pela lane normal. Uma feature por run.
|
|
151
|
+
|
|
152
|
+
Quando preferir cada uma:
|
|
153
|
+
- **Autopilot (lane normal)** — handoffs determinísticos entre agentes vivos; padrão para SMALL e MEDIUM.
|
|
154
|
+
- **Lane B (`@forge-run`)** — execução compilada, reproduzível e versionável de uma feature MEDIUM; opt-in, com aviso de custo antes de rodar.
|
|
155
|
+
|
|
156
|
+
Veja [SDD Automation Scripts — forge:compile](./sdd-automation-scripts.md#forgecompile-lane-b).
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
127
160
|
## Próximos passos
|
|
128
161
|
|
|
129
162
|
- [SDD Framework](./sdd-framework.md) — sequência completa MICRO/SMALL/MEDIUM
|
|
@@ -225,6 +225,8 @@ Scripts determinísticos que movem verificações de estado, validação de arte
|
|
|
225
225
|
| `feature:export` | **Copia** todos os artefatos de uma feature para um `--out` limpo, sem mexer na origem; gera `INDEX.md` | Exportar specs para analisar fora, entregar a cliente, ou usar o AIOSON só como gerador de specs. Veja [feature-export.md](./feature-export.md) |
|
|
226
226
|
| `gate:check` | Valida pré-requisitos e artefatos de um phase gate (A/B/C/D); retorna PASS ou BLOCKED | Antes de avançar para o próximo agente |
|
|
227
227
|
| `artifact:validate` | Verifica a cadeia completa de artefatos de uma feature (PRD → spec → plano → conformance) | A qualquer momento para checar completude |
|
|
228
|
+
| `spec:analyze` | Irmão de **conteúdo** do `artifact:validate`: consistência cruzada entre os artefatos (rastreabilidade REQ/AC, staleness, readiness, sanidade do contrato, vínculo AC→contrato, overlap de waves) antes do gate de execução | No preflight do `@scope-check` — errors viram blockers, warnings viram evidência de drift |
|
|
229
|
+
| `forge:compile` | **Lane B:** compila os artefatos de uma feature MEDIUM num `forge-run.workflow.js` auditável e versionável (parallel por Wave → convergência no `harness:check` → revisão adversarial → validador fresh-context) | Quando quer execução compilada e reproduzível via `@forge-run`; nunca roda `feature:close`/publish |
|
|
228
230
|
| `workflow:execute` | Monta e executa o plano de agentes baseado na classificação; aceita `--dry-run` e `--start-from` | Para orquestrar features sem o dashboard |
|
|
229
231
|
| `runner:run` | Executa uma tarefa ou worker diretamente pelo runner | Quando quer executar fora do loop principal de sessão |
|
|
230
232
|
| `runner:queue` | Enfileira tarefas no runner com prioridade e agente designado | Para execução assíncrona ou batch de tarefas |
|
|
@@ -304,6 +306,8 @@ Controle do loop autônomo `self:loop` com scope guard, budget enforcement, huma
|
|
|
304
306
|
|
|
305
307
|
| Comando | O que faz | Quando usar |
|
|
306
308
|
|---|---|---|
|
|
309
|
+
| `harness:check` | Roda os comandos `criteria[].verification` do contrato deterministicamente, **fora do self:loop** (read-only sobre `progress.json`); exit 0 = pass | Verificação determinística avulsa dos critérios; o `@validator` roda primeiro e copia o veredito verbatim |
|
|
310
|
+
| `harness:validate` | Gera o `validator-prompt.txt` com **review payload autocontido** (resultados do `harness:check` + arquivos alterados + diff vs base resolvida) e consome o veredito pelo circuit breaker | Antes de executar o `@validator` em contexto fresco e isolado |
|
|
307
311
|
| `harness:approve` | Aprova um gate humano pendente no loop (persiste decisão auditável) | Quando o loop pausou em `HUMAN_GATE` e você quer retomá-lo |
|
|
308
312
|
| `harness:reject` | Rejeita um gate humano (encerra a tentativa com resumo; requer `--reason`) | Quando quer cancelar a tentativa atual após revisão humana |
|
|
309
313
|
| `harness:status` | Visão do estado do loop: circuito, iteração N/M, budget, checks, gates pendentes, próxima ação | Sempre que quiser saber o que o loop está fazendo ou por que parou |
|
|
@@ -1668,7 +1672,7 @@ Valida pré-requisitos e artefatos. Retorna PASS ou BLOCKED com lista de evidên
|
|
|
1668
1672
|
aioson artifact:validate . --feature=checkout --json
|
|
1669
1673
|
```
|
|
1670
1674
|
|
|
1671
|
-
Verifica toda a cadeia PRD → spec → plano → conformance e indica o próximo artefato faltante.
|
|
1675
|
+
Verifica toda a cadeia PRD → spec → plano → conformance e indica o próximo artefato faltante. Para checar a **consistência de conteúdo** entre os artefatos (não só a presença), veja `spec:analyze` no exemplo 58.
|
|
1672
1676
|
|
|
1673
1677
|
### 48. Atualizar pulse ao final da sessão
|
|
1674
1678
|
|
|
@@ -1723,14 +1727,14 @@ aioson workflow:execute . \
|
|
|
1723
1727
|
--classification=SMALL \
|
|
1724
1728
|
--dry-run
|
|
1725
1729
|
|
|
1726
|
-
# Executar de verdade
|
|
1727
|
-
aioson workflow:execute . --feature=checkout --tool=claude
|
|
1728
|
-
|
|
1729
|
-
# Executar com política agentica persistida para o gateway
|
|
1730
|
-
aioson workflow:execute . --feature=checkout --tool=codex --agentic --max-dev-qa-cycles=3
|
|
1731
|
-
|
|
1732
|
-
# Retomar do dev (pular product e analyst)
|
|
1733
|
-
aioson workflow:execute . \
|
|
1730
|
+
# Executar de verdade
|
|
1731
|
+
aioson workflow:execute . --feature=checkout --tool=claude
|
|
1732
|
+
|
|
1733
|
+
# Executar com política agentica persistida para o gateway
|
|
1734
|
+
aioson workflow:execute . --feature=checkout --tool=codex --agentic --max-dev-qa-cycles=3
|
|
1735
|
+
|
|
1736
|
+
# Retomar do dev (pular product e analyst)
|
|
1737
|
+
aioson workflow:execute . \
|
|
1734
1738
|
--feature=checkout \
|
|
1735
1739
|
--tool=claude \
|
|
1736
1740
|
--start-from=dev
|
|
@@ -1878,6 +1882,57 @@ aioson harness:preview .aioson/context/retro/checkout.md
|
|
|
1878
1882
|
|
|
1879
1883
|
---
|
|
1880
1884
|
|
|
1885
|
+
### 58. Verificar critérios deterministicamente com harness:check
|
|
1886
|
+
|
|
1887
|
+
Roda os comandos `criteria[].verification` do `harness-contract.json` **fora do self:loop**, de forma determinística. Read-only sobre `progress.json` — o estado do circuit breaker continua exclusivo de `harness:validate`/`apply-validation`.
|
|
1888
|
+
|
|
1889
|
+
```bash
|
|
1890
|
+
# Rodar todos os critérios verificáveis do contrato ativo (auto-descoberto)
|
|
1891
|
+
aioson harness:check . --slug=checkout
|
|
1892
|
+
|
|
1893
|
+
# Rodar um subconjunto de critérios
|
|
1894
|
+
aioson harness:check . --slug=checkout --criteria=C1,C3
|
|
1895
|
+
|
|
1896
|
+
# Com timeout customizado e saída JSON (exit 0 = pass)
|
|
1897
|
+
aioson harness:check . --slug=checkout --timeout=120000 --json
|
|
1898
|
+
```
|
|
1899
|
+
|
|
1900
|
+
Reusa o mesmo motor do loop (timeouts, kill de process-tree, redaction de credenciais, failure signatures). Persiste `last-check-output.json` e emite telemetria `criteria_check_failed`. O `verification` é campo autorado por critério — o `@sheldon` o escreve para todo critério `binary:true` mecanicamente verificável; contratos legados sem o campo continuam válidos (gera apenas WARNING advisory). O `@validator` roda `harness:check` **primeiro** e copia o veredito do exit code verbatim. Veja [Loop Guardrails](./loop-guardrails.md#harnesscheck--verificação-determinística-avulsa).
|
|
1901
|
+
|
|
1902
|
+
---
|
|
1903
|
+
|
|
1904
|
+
### 59. Validar consistência cruzada com spec:analyze
|
|
1905
|
+
|
|
1906
|
+
Irmão de **conteúdo** do `artifact:validate` (que checa só presença). Roda checagens determinísticas entre os artefatos da feature antes do gate de execução.
|
|
1907
|
+
|
|
1908
|
+
```bash
|
|
1909
|
+
# Analisar a consistência cruzada dos artefatos da feature
|
|
1910
|
+
aioson spec:analyze . --feature=checkout
|
|
1911
|
+
|
|
1912
|
+
# Saída JSON para scripting de gate (errors → exit 1)
|
|
1913
|
+
aioson spec:analyze . --feature=checkout --json
|
|
1914
|
+
```
|
|
1915
|
+
|
|
1916
|
+
Checagens: rastreabilidade REQ/AC (ids declarados nunca usados downstream = gap; ids usados sem declaração = órfão/drift), staleness (upstream modificado após downstream gerado), readiness (`blocked` = error, `ready_with_warnings` = info), sanidade do contrato e vínculo AC→contrato, mais `wave_file_overlap` (fases da mesma Wave com Primary files sobrepostos). Severidades: **error** vira `ok:false`/exit 1; **warning** = drift provável; **info** = dívida. Persiste `spec-analyze-{slug}.json` em `.aioson/context/`. O `@scope-check` roda no preflight: errors são blockers, warnings viram evidência de drift pré-computada.
|
|
1917
|
+
|
|
1918
|
+
---
|
|
1919
|
+
|
|
1920
|
+
### 60. Compilar a Lane B com forge:compile
|
|
1921
|
+
|
|
1922
|
+
Compila os artefatos de uma feature MEDIUM num script de dynamic workflow auditável e versionável, commitado junto da spec. Entrada opt-in via `@forge-run`.
|
|
1923
|
+
|
|
1924
|
+
```bash
|
|
1925
|
+
# Compilar a feature num forge-run.workflow.js
|
|
1926
|
+
aioson forge:compile . --feature=checkout
|
|
1927
|
+
|
|
1928
|
+
# Saída JSON (preflights duros podem recusar a compilação)
|
|
1929
|
+
aioson forge:compile . --feature=checkout --json
|
|
1930
|
+
```
|
|
1931
|
+
|
|
1932
|
+
Gera `.aioson/plans/{slug}/forge-run.workflow.js`: um `parallel()` por Wave (devs em arquivos disjuntos) → loop de convergência no `harness:check` (fixes sequenciais, limitado pelo `error_streak_limit` do governor + guarda de orçamento) → revisão adversarial de 3 lentes para critérios binários **sem** `verification` → estágio de validador fresh-context fechando pelo ciclo normal `harness:validate` → `apply-validation`. Preflights duros recusam compilar (contrato inválido/ausente, zero critério executável, plano sem coluna Wave, errors do `spec:analyze`, `wave_file_overlap`) e nomeiam o agente dono (`@sheldon`, `@pm`, `@discovery-design-doc`). O script gerado **nunca** roda `feature:close`/publish.
|
|
1933
|
+
|
|
1934
|
+
---
|
|
1935
|
+
|
|
1881
1936
|
## Atalhos úteis
|
|
1882
1937
|
|
|
1883
1938
|
```bash
|