@jaimevalasek/aioson 1.30.2 → 1.33.1
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 +27 -0
- package/README.md +19 -6
- package/docs/en/5-reference/cli-reference.md +1 -1
- package/docs/pt/5-referencia/comandos-cli.md +1 -1
- package/docs/pt/5-referencia/harness-retro.md +2 -1
- package/package.json +1 -1
- package/src/cli.js +38 -21
- package/src/commands/classify.js +389 -327
- package/src/commands/harness-retro-promote.js +387 -0
- package/src/commands/prototype-check.js +163 -0
- package/src/commands/verify-implementation.js +428 -0
- package/src/commands/workflow-next.js +222 -9
- package/src/constants.js +2 -0
- package/src/lib/retro/retro-render.js +10 -1
- package/src/lib/retro/retro-sources.js +45 -27
- package/src/lib/retro/verification-reports.js +230 -0
- package/src/runtime-store.js +13 -9
- package/src/verification/evidence-bundle.js +251 -0
- package/src/verification/ledger-store.js +221 -0
- package/src/verification/path-policy.js +74 -0
- package/src/verification/policy-engine.js +95 -0
- package/src/verification/prompt-package.js +314 -0
- package/src/verification/redaction.js +77 -0
- package/src/verification/report-parser.js +132 -0
- package/src/verification/report-store.js +97 -0
- package/src/verification/result.js +16 -0
- package/src/verification/runners/index.js +319 -0
- package/src/verification/runtime-telemetry.js +144 -0
- package/src/verification/schema.js +276 -0
- package/src/verification/source-discovery.js +153 -0
- package/template/.aioson/agents/analyst.md +9 -6
- package/template/.aioson/agents/briefing-refiner.md +22 -0
- package/template/.aioson/agents/briefing.md +69 -12
- package/template/.aioson/agents/design-hybrid-forge.md +18 -14
- package/template/.aioson/agents/dev.md +23 -10
- package/template/.aioson/agents/deyvin.md +3 -2
- package/template/.aioson/agents/product.md +15 -11
- package/template/.aioson/agents/qa.md +13 -4
- package/template/.aioson/agents/scope-check.md +19 -5
- package/template/.aioson/agents/sheldon.md +4 -3
- package/template/.aioson/agents/ux-ui.md +3 -2
- package/template/.aioson/docs/feature-expansion-taxonomy.md +31 -3
- package/template/.aioson/docs/prototype-contract.md +81 -0
- package/template/.aioson/skills/process/briefing-expansion-scout/SKILL.md +25 -3
- package/template/.aioson/skills/process/design-hybrid-forge/SKILL.md +5 -3
- package/template/.aioson/skills/process/design-hybrid-forge/references/external-source-ingestion.md +89 -0
- package/template/.aioson/skills/process/product-scope-expansion/SKILL.md +29 -2
- package/template/.aioson/skills/process/prototype-forge/SKILL.md +92 -0
- package/template/.aioson/skills/process/sheldon-expansion-audit/SKILL.md +23 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.33.1] - 2026-06-24
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- **Hardened adversarial verification gates.** `prototype:check` now rejects prototype and manifest references that resolve outside the project root before reading them, strict evidence bundles run prototype checks with `--strict`, partial prototype acceptance-criterion coverage can fail strict audits, Sheldon-owned scope findings route back to `@sheldon`, and failed external auditor stderr is kept in a separate artifact instead of being copied into the consolidated verification report.
|
|
9
|
+
|
|
10
|
+
## [1.33.0] - 2026-06-24
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- **Scope-aware solution fan-out in `@briefing`.** Horizontal exploration no longer forces 3–5 options when the user has already committed to one specific solution and its operational surface is complete; it records any weighed alternative as a short "Alternatives considered" note instead. Operational completeness is never waived — only the breadth of options when the direction is already fixed.
|
|
14
|
+
- **Non-blocking prototype recommendation in `@briefing-refiner`.** For a rich-surface briefing with no prototype yet, the handoff now recommends running prototype mode before `@product` (it surfaces missing management screens and broken interactions early). Recommendation only — it never blocks the route to `@product`.
|
|
15
|
+
|
|
16
|
+
## [1.32.0] - 2026-06-24
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- **External DESIGN.md sources in `@design-hybrid-forge`.** A hybrid's primary parent or modifier can now be an external DESIGN.md source (a refero.design md-example or a similar portable design spec extracted from a real site), not only a local AIOSON design skill. The agent normalizes the source into the same parent DNA the crossover protocol expects, records `sources[]` provenance in `.skill-meta.json`, and enforces an anti-clone rule — the hybrid stays a new identity (no brand/logo/trademark or 1:1 palette reproduction, never named after the source). The "exactly 2 primary parents" model is unchanged.
|
|
20
|
+
|
|
21
|
+
## [1.31.0] - 2026-06-24
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- **Clickable prototype stage.** New `prototype-forge` process skill and an optional `@briefing-refiner` "Generate prototype" mode produce a self-contained, clickable HTML app-shell (`prototype.html` + manifest) that materializes a rich-surface feature's screens, navigation, and CRUD interactions before the PRD — delegating visuals to the selected design skill while owning structure, behavior, and state. No native dialogs; authenticated app chrome is seeded.
|
|
25
|
+
- **Horizontal solution exploration in `@briefing`.** For goals with more than one viable shape, `@briefing` explores 3–5 solution shapes, maps each one's operational surface, and writes an optional `solution-options.md` so `@product` chooses with the trade-offs in hand.
|
|
26
|
+
- **Prototype propagated as a contract.** New `prototype-contract.md` defines how the prototype flows through the chain: `@product` writes a `## Prototype reference` in the PRD, `@dev` reproduces its screens/interactions, `@ux-ui` treats it as the authoritative realization, and `@analyst` derives acceptance criteria so `@validator` honors it via the binary contract (respecting its context sandbox).
|
|
27
|
+
- **Operational-surface classification floor.** `aioson classify` now floors rich operational surfaces (workspaces, boards/cards, Kanban/CRM pipelines, CRUD/admin management) to at least SMALL, so a Trello-like feature can't take the MICRO shortcut that skips `@analyst`/`@architect`/the prototype.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- **Operational Surface Map across planning agents.** `feature-expansion-taxonomy.md` and the briefing/product/sheldon expansion skills now require every Core object to have create/list/edit/archive/restore behavior and a management surface, so rich-surface features (Trello/Kanban/CRM/workspace-like) can't pass with bare nouns.
|
|
31
|
+
|
|
5
32
|
## [1.30.2] - 2026-06-24
|
|
6
33
|
|
|
7
34
|
### Changed
|
package/README.md
CHANGED
|
@@ -716,7 +716,7 @@ aioson scan:project [path] [--folder=src] [--with-llm] [--provider=<name>] [--dr
|
|
|
716
716
|
aioson agents
|
|
717
717
|
aioson agent:prompt <agent> [--tool=codex|claude|gemini|opencode]
|
|
718
718
|
aioson workflow:plan [path] [--classification=MICRO|SMALL|MEDIUM] [--json]
|
|
719
|
-
aioson workflow:next [path] [--complete] [--auto-heal] [--force]
|
|
719
|
+
aioson workflow:next [path] [--complete] [--auto-heal] [--force] [--scope-mode=post-dev|post-fix|final] [--verification-policy=advisory|standard|strict]
|
|
720
720
|
aioson workflow:heal [path] --stage=<agent>
|
|
721
721
|
aioson workflow:harden [path] [--dry-run]
|
|
722
722
|
aioson workflow:execute [path] [--dry-run] [--start-from=<agent>]
|
|
@@ -729,8 +729,13 @@ aioson intake:ask [path] --agent=<agent> --schema=<questions.json> [--out=<answe
|
|
|
729
729
|
<summary><strong>SDD automation & gates</strong></summary>
|
|
730
730
|
|
|
731
731
|
```bash
|
|
732
|
-
aioson preflight [path] [--json]
|
|
732
|
+
aioson preflight [path] [--json]
|
|
733
733
|
aioson classify [path] [--json]
|
|
734
|
+
aioson prototype:check [path] --feature=<slug> [--json]
|
|
735
|
+
aioson verify:implementation [path] --feature=<slug> --prepare-ledger|--check-ledger|--build-prompt|--check-report=<path> [--policy=advisory|standard|strict] [--json]
|
|
736
|
+
aioson verify:implementation [path] --feature=<slug> --tool=codex|claude|opencode [--model=<model>|configured-default] [--timeout-ms=<ms>] [--max-output-bytes=<bytes>] [--policy=advisory|standard|strict] [--json]
|
|
737
|
+
aioson harness:retro [path] --feature=<slug>|--last=<N> [--json]
|
|
738
|
+
aioson harness:retro-promote [path] --feature=<slug> [--to=learnings|rules] [--apply --select=<candidate-key|all>] [--json]
|
|
734
739
|
aioson gate:check [path] --gate=A|B|C|D [--json]
|
|
735
740
|
aioson artifact:validate [path] --feature=<slug> [--json]
|
|
736
741
|
aioson ac:test-audit [path] --feature=<slug> [--json]
|
|
@@ -738,10 +743,18 @@ aioson sdd:benchmark [path] --feature=<slug> [--json]
|
|
|
738
743
|
aioson detect:test-runner [path] [--json]
|
|
739
744
|
aioson agent:audit [path] [--json]
|
|
740
745
|
aioson brief:gen [path] --feature=<slug> [--json]
|
|
741
|
-
aioson verify:gate [path] --feature=<slug> [--json]
|
|
742
|
-
```
|
|
743
|
-
|
|
744
|
-
|
|
746
|
+
aioson verify:gate [path] --feature=<slug> [--json]
|
|
747
|
+
```
|
|
748
|
+
|
|
749
|
+
`verify:implementation` prepares/checks `.aioson/context/features/{slug}/implementation-ledger.md`, builds clean-auditor prompt packages, validates `Machine Report` JSON with reusable schema helpers in `src/verification/schema.js`, and can optionally run a constrained auditor through `codex`, `claude`, or `opencode`. Runner execution is opt-in, uses explicit timeout/output limits, writes raw output under `verification-runs/`, and promotes only a valid or system-generated `INCONCLUSIVE` report to `verification-report.md`.
|
|
750
|
+
|
|
751
|
+
`workflow:next --agent=scope-check --scope-mode=post-dev --verification-policy=strict` consumes an existing local `verification-report.md` as structured evidence in the scope-check prompt. It validates and routes the report result, but never runs an external `--tool` auditor automatically.
|
|
752
|
+
|
|
753
|
+
`harness:retro` mines schema-valid implementation verification reports as a retrospective source. It uses only non-confirming `Machine Report` findings (`DOES_NOT_CONFIRM`, `PARTIAL`, `NOT_VERIFIED`) and never includes raw auditor output, stderr, prompt packages, or finding evidence text in the generated dossier.
|
|
754
|
+
|
|
755
|
+
`harness:retro-promote` is the human-approved promotion path from a generated retro dossier to `.aioson/learnings/` or `.aioson/rules/`. It is dry-run by default; writing requires `--apply --select=<candidate-key|all>`. Promotion records bounded metadata and source paths only, and never edits prompts, skills, PRDs, plans, raw reports, or agent files automatically.
|
|
756
|
+
|
|
757
|
+
</details>
|
|
745
758
|
|
|
746
759
|
<details>
|
|
747
760
|
<summary><strong>Parallel orchestration</strong></summary>
|
|
@@ -820,7 +820,7 @@ aioson harness:retro . --feature=checkout --json
|
|
|
820
820
|
|
|
821
821
|
**Exit codes:** 0 = success (including empty dossier); 1 = unexpected I/O error; 12 = input error (invalid slug, conflicting flags, feature not found).
|
|
822
822
|
|
|
823
|
-
**Sources mined:** QA reports, correction plans, dossier FAIL→PASS cycles, execution events, attempt artifacts, failure signatures, devlogs.
|
|
823
|
+
**Sources mined:** QA reports, implementation verification reports (non-confirming `Machine Report` findings only), correction plans, dossier FAIL→PASS cycles, execution events, attempt artifacts, failure signatures, devlogs. Raw auditor output, stderr, prompt packages, and finding evidence text are not mined.
|
|
824
824
|
|
|
825
825
|
---
|
|
826
826
|
|
|
@@ -1877,7 +1877,7 @@ aioson harness:retro . --last=5
|
|
|
1877
1877
|
aioson harness:retro . --feature=checkout --json
|
|
1878
1878
|
```
|
|
1879
1879
|
|
|
1880
|
-
Saída em `.aioson/context/retro/checkout.md`. Fontes mineradas: QA reports, planos de correção, trilha FAIL→PASS do dossier, eventos de execução, tentativas, assinaturas de falha e devlogs. Operação de leitura — arquivos-fonte nunca são alterados.
|
|
1880
|
+
Saída em `.aioson/context/retro/checkout.md`. Fontes mineradas: QA reports, reports de verificação de implementação (apenas findings não confirmatórios do `Machine Report`), planos de correção, trilha FAIL→PASS do dossier, eventos de execução, tentativas, assinaturas de falha e devlogs. Raw auditor output, stderr, prompts e texto de evidence não são minerados. Operação de leitura — arquivos-fonte nunca são alterados.
|
|
1881
1881
|
|
|
1882
1882
|
```bash
|
|
1883
1883
|
# Exibir prévia de um artefato com truncação segura
|
|
@@ -55,11 +55,12 @@ Usado principalmente na interface de feedback do `self:loop` quando um critério
|
|
|
55
55
|
|
|
56
56
|
## Fontes mineradas
|
|
57
57
|
|
|
58
|
-
O `harness:retro` lê
|
|
58
|
+
O `harness:retro` lê oito fontes por feature:
|
|
59
59
|
|
|
60
60
|
| Fonte | O que captura |
|
|
61
61
|
|---|---|
|
|
62
62
|
| Relatórios QA | Falhas e severidades de `@qa` |
|
|
63
|
+
| Reports de verificação de implementação | Findings não confirmatórios do `Machine Report` (`DOES_NOT_CONFIRM`, `PARTIAL`, `NOT_VERIFIED`); não minera raw output, stderr, prompts nem texto de evidence |
|
|
63
64
|
| Planos de correção | Correções aplicadas por ciclo |
|
|
64
65
|
| Trilha do dossier | Ciclos FAIL→PASS do Agent Trail |
|
|
65
66
|
| `execution_events` | Eventos de telemetria do loop |
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -183,9 +183,11 @@ const { runRunnerRun } = require('./commands/runner-run');
|
|
|
183
183
|
const { runRunnerQueue } = require('./commands/runner-queue');
|
|
184
184
|
const { runRunnerPlan } = require('./commands/runner-plan');
|
|
185
185
|
const { runRunnerDaemon } = require('./commands/runner-daemon');
|
|
186
|
-
const { runPreflight } = require('./commands/preflight');
|
|
187
|
-
const { runClassify } = require('./commands/classify');
|
|
188
|
-
const {
|
|
186
|
+
const { runPreflight } = require('./commands/preflight');
|
|
187
|
+
const { runClassify } = require('./commands/classify');
|
|
188
|
+
const { runPrototypeCheck } = require('./commands/prototype-check');
|
|
189
|
+
const { runVerifyImplementation } = require('./commands/verify-implementation');
|
|
190
|
+
const { runSizing } = require('./commands/sizing');
|
|
189
191
|
const { runDetectTestRunner } = require('./commands/detect-test-runner');
|
|
190
192
|
const { runPulseUpdate } = require('./commands/pulse-update');
|
|
191
193
|
const { runAgentEpilogue } = require('./commands/agent-epilogue');
|
|
@@ -290,10 +292,12 @@ const JSON_SUPPORTED_COMMANDS = new Set([
|
|
|
290
292
|
'workflow-status',
|
|
291
293
|
'feature:current',
|
|
292
294
|
'feature-current',
|
|
293
|
-
'harness:retro',
|
|
294
|
-
'harness-retro',
|
|
295
|
-
'harness:
|
|
296
|
-
'harness-
|
|
295
|
+
'harness:retro',
|
|
296
|
+
'harness-retro',
|
|
297
|
+
'harness:retro-promote',
|
|
298
|
+
'harness-retro-promote',
|
|
299
|
+
'harness:preview',
|
|
300
|
+
'harness-preview',
|
|
297
301
|
'agent:next',
|
|
298
302
|
'agent-next',
|
|
299
303
|
'parallel:init',
|
|
@@ -433,10 +437,12 @@ const JSON_SUPPORTED_COMMANDS = new Set([
|
|
|
433
437
|
'harness-status',
|
|
434
438
|
'harness:check',
|
|
435
439
|
'harness-check',
|
|
436
|
-
'harness:retro',
|
|
437
|
-
'harness-retro',
|
|
438
|
-
'harness:
|
|
439
|
-
'harness-
|
|
440
|
+
'harness:retro',
|
|
441
|
+
'harness-retro',
|
|
442
|
+
'harness:retro-promote',
|
|
443
|
+
'harness-retro-promote',
|
|
444
|
+
'harness:preview',
|
|
445
|
+
'harness-preview',
|
|
440
446
|
'brief-gen',
|
|
441
447
|
'verify:gate',
|
|
442
448
|
'verify-gate',
|
|
@@ -649,8 +655,12 @@ const JSON_SUPPORTED_COMMANDS = new Set([
|
|
|
649
655
|
'--version',
|
|
650
656
|
'-v',
|
|
651
657
|
'preflight',
|
|
652
|
-
'classify',
|
|
653
|
-
'
|
|
658
|
+
'classify',
|
|
659
|
+
'prototype:check',
|
|
660
|
+
'prototype-check',
|
|
661
|
+
'verify:implementation',
|
|
662
|
+
'verify-implementation',
|
|
663
|
+
'sizing',
|
|
654
664
|
'detect:test-runner',
|
|
655
665
|
'detect-test-runner',
|
|
656
666
|
'pulse:update',
|
|
@@ -1346,12 +1356,15 @@ async function main() {
|
|
|
1346
1356
|
} else if (command === 'harness:check' || command === 'harness-check') {
|
|
1347
1357
|
const { runHarnessCheck } = require('./commands/harness-check');
|
|
1348
1358
|
result = await runHarnessCheck({ args, options, logger: commandLogger, t });
|
|
1349
|
-
} else if (command === 'harness:retro' || command === 'harness-retro') {
|
|
1350
|
-
const { runHarnessRetro } = require('./commands/harness-retro');
|
|
1351
|
-
result = await runHarnessRetro({ args, options, logger: commandLogger, t });
|
|
1352
|
-
} else if (command === 'harness:
|
|
1353
|
-
const {
|
|
1354
|
-
result = await
|
|
1359
|
+
} else if (command === 'harness:retro' || command === 'harness-retro') {
|
|
1360
|
+
const { runHarnessRetro } = require('./commands/harness-retro');
|
|
1361
|
+
result = await runHarnessRetro({ args, options, logger: commandLogger, t });
|
|
1362
|
+
} else if (command === 'harness:retro-promote' || command === 'harness-retro-promote') {
|
|
1363
|
+
const { runHarnessRetroPromote } = require('./commands/harness-retro-promote');
|
|
1364
|
+
result = await runHarnessRetroPromote({ args, options, logger: commandLogger, t });
|
|
1365
|
+
} else if (command === 'harness:preview' || command === 'harness-preview') {
|
|
1366
|
+
const { runHarnessPreview } = require('./commands/harness-preview');
|
|
1367
|
+
result = await runHarnessPreview({ args, options, logger: commandLogger, t });
|
|
1355
1368
|
} else if (command === 'verify:gate' || command === 'verify-gate') {
|
|
1356
1369
|
result = await runVerifyGate({ args, options, logger: commandLogger, t });
|
|
1357
1370
|
|
|
@@ -1588,8 +1601,12 @@ async function main() {
|
|
|
1588
1601
|
result = await runPreflight({ args, options, logger: commandLogger });
|
|
1589
1602
|
} else if (command === 'classify') {
|
|
1590
1603
|
result = await runClassify({ args, options, logger: commandLogger });
|
|
1591
|
-
} else if (command === '
|
|
1592
|
-
result = await
|
|
1604
|
+
} else if (command === 'prototype:check' || command === 'prototype-check') {
|
|
1605
|
+
result = await runPrototypeCheck({ args, options, logger: commandLogger });
|
|
1606
|
+
} else if (command === 'verify:implementation' || command === 'verify-implementation') {
|
|
1607
|
+
result = await runVerifyImplementation({ args, options, logger: commandLogger });
|
|
1608
|
+
} else if (command === 'sizing') {
|
|
1609
|
+
result = await runSizing({ args, options, logger: commandLogger });
|
|
1593
1610
|
} else if (command === 'detect:test-runner' || command === 'detect-test-runner') {
|
|
1594
1611
|
result = await runDetectTestRunner({ args, options, logger: commandLogger });
|
|
1595
1612
|
} else if (command === 'pulse:update' || command === 'pulse-update') {
|