@jaimevalasek/aioson 1.7.2 → 1.8.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 +35 -0
- package/README.md +153 -10
- package/docs/en/cli-reference.md +56 -1
- package/docs/en/i18n.md +18 -18
- package/docs/en/schemas/index.json +10 -0
- package/docs/en/schemas/parallel-assign.schema.json +9 -0
- package/docs/en/schemas/parallel-doctor.schema.json +36 -0
- package/docs/en/schemas/parallel-guard.schema.json +63 -0
- package/docs/en/schemas/parallel-merge.schema.json +84 -0
- package/docs/en/schemas/parallel-status.schema.json +91 -1
- package/docs/integrations/apps-publish-marketplace.md +94 -0
- package/docs/pt/README.md +9 -0
- package/docs/pt/agentes.md +324 -3
- package/docs/pt/clientes-ai.md +7 -3
- package/docs/pt/comandos-cli.md +160 -13
- package/docs/pt/compress-agents.md +304 -0
- package/docs/pt/design-docs-governance.md +59 -0
- package/docs/pt/feature-archive.md +191 -0
- package/docs/pt/genome-3.0-spec.md +115 -4
- package/docs/pt/genome-distribution.md +232 -0
- package/docs/pt/inicio-rapido.md +1 -0
- package/docs/pt/motor-hardening.md +492 -0
- package/docs/pt/runner-system.md +113 -0
- package/package.json +2 -1
- package/src/agent-manifests.js +66 -0
- package/src/agents.js +27 -7
- package/src/autonomy-policy.js +139 -0
- package/src/brain-query.js +161 -0
- package/src/cli.js +1377 -1099
- package/src/commands/agents.js +102 -7
- package/src/commands/artifact-validate.js +33 -4
- package/src/commands/auth.js +272 -0
- package/src/commands/brain-query.js +44 -0
- package/src/commands/briefing.js +344 -0
- package/src/commands/commit-prepare.js +547 -0
- package/src/commands/compress-agents.js +416 -0
- package/src/commands/context-health.js +4 -2
- package/src/commands/context-trim.js +17 -11
- package/src/commands/design-hybrid-options.js +3 -3
- package/src/commands/devlog-process.js +6 -4
- package/src/commands/dossier.js +423 -0
- package/src/commands/feature-archive.js +513 -0
- package/src/commands/feature-close.js +123 -18
- package/src/commands/gate-approve.js +198 -0
- package/src/commands/gate-check.js +24 -5
- package/src/commands/genome-doctor.js +166 -9
- package/src/commands/git-guard.js +170 -0
- package/src/commands/harness.js +121 -0
- package/src/commands/implementation-plan.js +47 -20
- package/src/commands/init.js +6 -2
- package/src/commands/install.js +6 -2
- package/src/commands/live.js +497 -56
- package/src/commands/locale-apply.js +9 -6
- package/src/commands/locale-diff.js +11 -112
- package/src/commands/mcp-doctor.js +2 -1
- package/src/commands/mcp-init.js +4 -10
- package/src/commands/memory.js +234 -0
- package/src/commands/parallel-assign.js +107 -27
- package/src/commands/parallel-doctor.js +416 -3
- package/src/commands/parallel-guard.js +241 -0
- package/src/commands/parallel-init.js +66 -4
- package/src/commands/parallel-merge.js +299 -0
- package/src/commands/parallel-status.js +147 -3
- package/src/commands/preflight.js +63 -4
- package/src/commands/qa-init.js +10 -5
- package/src/commands/revision.js +235 -0
- package/src/commands/scaffold-complete.js +188 -0
- package/src/commands/security-audit.js +275 -0
- package/src/commands/security-scan.js +376 -0
- package/src/commands/self-implement-loop.js +46 -2
- package/src/commands/setup-context.js +11 -10
- package/src/commands/squad-agent-create.js +51 -9
- package/src/commands/squad-investigate.js +53 -0
- package/src/commands/squad-plan.js +33 -1
- package/src/commands/squad-scaffold.js +4 -3
- package/src/commands/squad-score.js +71 -14
- package/src/commands/squad-status.js +22 -1
- package/src/commands/squad-validate.js +93 -2
- package/src/commands/store-genome.js +304 -0
- package/src/commands/store-skill.js +247 -0
- package/src/commands/store-squad.js +431 -0
- package/src/commands/store-system.js +392 -0
- package/src/commands/tool-capabilities.js +63 -0
- package/src/commands/update.js +3 -3
- package/src/commands/verify-gate.js +40 -0
- package/src/commands/workflow-execute.js +644 -155
- package/src/commands/workflow-harden.js +231 -0
- package/src/commands/workflow-heal.js +136 -0
- package/src/commands/workflow-next.js +460 -22
- package/src/commands/workflow-status.js +328 -138
- package/src/commands/workspace.js +144 -0
- package/src/constants.js +42 -75
- package/src/context-memory.js +133 -4
- package/src/context-writer.js +2 -1
- package/src/context.js +32 -2
- package/src/doctor.js +46 -6
- package/src/dossier/codemap-store.js +267 -0
- package/src/dossier/dossier-bootstrap.js +222 -0
- package/src/dossier/dossier-compact.js +159 -0
- package/src/dossier/lock.js +128 -0
- package/src/dossier/revision-store.js +313 -0
- package/src/dossier/schema.js +155 -0
- package/src/dossier/store.js +400 -0
- package/src/execution-gateway.js +3 -0
- package/src/friction-scanner.js +202 -0
- package/src/genome-schema.js +24 -1
- package/src/genomes.js +33 -0
- package/src/handoff-contract.js +363 -0
- package/src/handoff-validator.js +45 -0
- package/src/harness/circuit-breaker.js +135 -0
- package/src/i18n/messages/en.js +317 -22
- package/src/i18n/messages/es.js +259 -18
- package/src/i18n/messages/fr.js +260 -18
- package/src/i18n/messages/pt-BR.js +313 -22
- package/src/install-profile.js +0 -16
- package/src/installer.js +70 -6
- package/src/lib/git-commit-guard.js +691 -0
- package/src/lib/security/artifact-reader.js +167 -0
- package/src/lib/security/exit-codes.js +51 -0
- package/src/lib/security/findings-writer.js +176 -0
- package/src/lib/security/runtime-events.js +77 -0
- package/src/lib/security/secrets-regex.js +115 -0
- package/src/lib/store/security-scan.js +173 -0
- package/src/lib/terminal-checkbox.js +130 -0
- package/src/lib/tmux-launcher.js +163 -0
- package/src/lib/tool-capabilities.js +102 -0
- package/src/locales.js +12 -8
- package/src/parallel-workspace.js +756 -0
- package/src/parser.js +8 -1
- package/src/path-guard.js +47 -0
- package/src/preflight-engine.js +237 -26
- package/src/self-healing.js +142 -0
- package/src/session-handoff.js +111 -1
- package/src/squad/squad-scaffold.js +183 -19
- package/src/test-briefing.js +226 -0
- package/src/updater.js +1 -1
- package/src/utils.js +3 -0
- package/src/workflow-gates.js +185 -0
- package/template/.aioson/agents/analyst.md +76 -130
- package/template/.aioson/agents/architect.md +53 -86
- package/template/.aioson/agents/committer.md +161 -0
- package/template/.aioson/agents/cypher.md +252 -0
- package/template/.aioson/agents/dev.md +112 -628
- package/template/.aioson/agents/deyvin.md +33 -236
- package/template/.aioson/agents/discover.md +235 -0
- package/template/.aioson/agents/discovery-design-doc.md +17 -252
- package/template/.aioson/agents/genome.md +76 -26
- package/template/.aioson/agents/manifests/analyst.manifest.json +26 -0
- package/template/.aioson/agents/manifests/architect.manifest.json +23 -0
- package/template/.aioson/agents/manifests/committer.manifest.json +23 -0
- package/template/.aioson/agents/manifests/dev.manifest.json +37 -0
- package/template/.aioson/agents/manifests/orchestrator.manifest.json +30 -0
- package/template/.aioson/agents/manifests/pentester.manifest.json +39 -0
- package/template/.aioson/agents/manifests/pm.manifest.json +26 -0
- package/template/.aioson/agents/manifests/product.manifest.json +23 -0
- package/template/.aioson/agents/manifests/qa.manifest.json +25 -0
- package/template/.aioson/agents/manifests/setup.manifest.json +20 -0
- package/template/.aioson/agents/manifests/ux-ui.manifest.json +24 -0
- package/template/.aioson/agents/neo.md +5 -7
- package/template/.aioson/agents/orache.md +2 -6
- package/template/.aioson/agents/orchestrator.md +81 -182
- package/template/.aioson/agents/pentester.md +235 -0
- package/template/.aioson/agents/pm.md +40 -104
- package/template/.aioson/agents/product.md +99 -344
- package/template/.aioson/agents/profiler-enricher.md +57 -6
- package/template/.aioson/agents/profiler-forge.md +17 -7
- package/template/.aioson/agents/profiler-researcher.md +29 -6
- package/template/.aioson/agents/qa.md +168 -514
- package/template/.aioson/agents/setup.md +52 -278
- package/template/.aioson/agents/sheldon.md +122 -754
- package/template/.aioson/agents/site-forge.md +111 -1583
- package/template/.aioson/agents/squad.md +139 -2010
- package/template/.aioson/agents/tester.md +10 -0
- package/template/.aioson/agents/ux-ui.md +104 -812
- package/template/.aioson/agents/validator.md +69 -0
- package/template/.aioson/brains/scripts/query.js +5 -1
- package/template/.aioson/config/autonomy-protocol.json +43 -0
- package/template/.aioson/config.md +43 -15
- package/template/.aioson/constitution.md +36 -33
- package/template/.aioson/context/design-doc.md +136 -0
- package/template/.aioson/context/project-map.md +57 -0
- package/template/.aioson/design-docs/code-reuse.md +48 -0
- package/template/.aioson/design-docs/componentization.md +47 -0
- package/template/.aioson/design-docs/file-size.md +52 -0
- package/template/.aioson/design-docs/folder-structure.md +51 -0
- package/template/.aioson/design-docs/naming.md +54 -0
- package/template/.aioson/docs/LAYERS.md +12 -2
- package/template/.aioson/docs/dev/execution-discipline.md +106 -0
- package/template/.aioson/docs/dev/stack-conventions.md +83 -0
- package/template/.aioson/docs/deyvin/continuity-recovery.md +57 -0
- package/template/.aioson/docs/deyvin/debugging-escalation.md +30 -0
- package/template/.aioson/docs/deyvin/pair-execution.md +44 -0
- package/template/.aioson/docs/deyvin/runtime-handoffs.md +36 -0
- package/template/.aioson/docs/product/conversation-playbook.md +116 -0
- package/template/.aioson/docs/product/prd-contract.md +107 -0
- package/template/.aioson/docs/product/quality-lens.md +57 -0
- package/template/.aioson/docs/product/research-loop.md +65 -0
- package/template/.aioson/docs/sheldon/enrichment-paths.md +134 -0
- package/template/.aioson/docs/sheldon/quality-lens.md +57 -0
- package/template/.aioson/docs/sheldon/research-loop.md +56 -0
- package/template/.aioson/docs/sheldon/web-intelligence.md +75 -0
- package/template/.aioson/docs/site-forge-build.md +195 -0
- package/template/.aioson/docs/site-forge-extraction.md +135 -0
- package/template/.aioson/docs/site-forge-qa.md +155 -0
- package/template/.aioson/docs/site-forge-recon.md +434 -0
- package/template/.aioson/docs/site-forge-transform.md +249 -0
- package/template/.aioson/docs/squad/content-output.md +91 -0
- package/template/.aioson/docs/squad/creation-flow.md +135 -0
- package/template/.aioson/docs/squad/domain-classification.md +117 -0
- package/template/.aioson/docs/squad/genome-bindings.md +47 -0
- package/template/.aioson/docs/squad/package-contract.md +234 -0
- package/template/.aioson/docs/squad/quality-lens.md +56 -0
- package/template/.aioson/docs/squad/research-loop.md +59 -0
- package/template/.aioson/docs/squad/session-operations.md +117 -0
- package/template/.aioson/docs/squad/workflow-quality.md +165 -0
- package/template/.aioson/docs/ux-ui/accessibility-audit.md +55 -0
- package/template/.aioson/docs/ux-ui/audit-mode.md +86 -0
- package/template/.aioson/docs/ux-ui/component-map.md +35 -0
- package/template/.aioson/docs/ux-ui/design-execution.md +111 -0
- package/template/.aioson/docs/ux-ui/design-gate.md +27 -0
- package/template/.aioson/docs/ux-ui/research-mode.md +39 -0
- package/template/.aioson/docs/ux-ui/site-delivery.md +156 -0
- package/template/.aioson/docs/ux-ui/token-contract.md +57 -0
- package/template/.aioson/genomes/copywriting.meta.json +48 -0
- package/template/.aioson/git-guard.json +11 -0
- package/template/.aioson/mcp/servers.md +0 -1
- package/template/.aioson/rules/agent-language-policy.md +93 -0
- package/template/.aioson/rules/aioson-context-boundary.md +63 -0
- package/template/.aioson/rules/canonical-path-contract.md +47 -0
- package/template/.aioson/rules/data-format-convention.md +24 -86
- package/template/.aioson/rules/disk-first-artifacts.md +44 -0
- package/template/.aioson/rules/output-brevity.md +44 -0
- package/template/.aioson/rules/prd-section-ownership.md +49 -0
- package/template/.aioson/rules/security-baseline.md +139 -0
- package/template/.aioson/rules/spec-level-ownership.md +61 -0
- package/template/.aioson/rules/squad-driver-pattern.md +81 -0
- package/template/.aioson/schemas/squad-blueprint.schema.json +24 -0
- package/template/.aioson/schemas/squad-manifest.schema.json +44 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/pm.md +30 -0
- package/template/.aioson/skills/process/secure-tdd/SKILL.md +97 -0
- package/template/.aioson/skills/process/secure-tdd/references/nextjs.md +81 -0
- package/template/.aioson/skills/process/secure-tdd/references/node-express.md +91 -0
- package/template/.aioson/skills/process/secure-tdd/references/planned-stacks.md +33 -0
- package/template/.aioson/skills/static/harness-validate/SKILL.md +46 -0
- package/template/.aioson/skills/static/web-research-cache.md +3 -0
- package/template/.aioson/tasks/squad-create.md +35 -8
- package/template/.aioson/tasks/squad-design.md +50 -2
- package/template/.aioson/tasks/squad-investigate.md +14 -1
- package/template/.claude/commands/aioson/agent/committer.md +5 -0
- package/template/.claude/commands/aioson/agent/copywriter.md +5 -0
- package/template/.claude/commands/aioson/agent/cypher.md +5 -0
- package/template/.claude/commands/aioson/agent/pair.md +5 -0
- package/template/.claude/commands/aioson/agent/validator.md +5 -0
- package/template/.gemini/commands/aios-analyst.toml +6 -3
- package/template/.gemini/commands/aios-architect.toml +7 -6
- package/template/.gemini/commands/aios-committer.toml +7 -0
- package/template/.gemini/commands/aios-copywriter.toml +7 -0
- package/template/.gemini/commands/aios-cypher.toml +7 -0
- package/template/.gemini/commands/aios-dev.toml +8 -7
- package/template/.gemini/commands/aios-deyvin.toml +6 -5
- package/template/.gemini/commands/aios-discovery-design-doc.toml +6 -3
- package/template/.gemini/commands/aios-genome.toml +7 -0
- package/template/.gemini/commands/aios-neo.toml +5 -3
- package/template/.gemini/commands/aios-orache.toml +7 -0
- package/template/.gemini/commands/aios-orchestrator.toml +8 -7
- package/template/.gemini/commands/aios-pair.toml +6 -5
- package/template/.gemini/commands/aios-pm.toml +8 -7
- package/template/.gemini/commands/aios-product.toml +5 -3
- package/template/.gemini/commands/aios-qa.toml +6 -5
- package/template/.gemini/commands/aios-setup.toml +5 -2
- package/template/.gemini/commands/aios-sheldon.toml +7 -0
- package/template/.gemini/commands/aios-site-forge.toml +7 -0
- package/template/.gemini/commands/aios-squad.toml +7 -0
- package/template/.gemini/commands/aios-tester.toml +6 -5
- package/template/.gemini/commands/aios-ux-ui.toml +8 -7
- package/template/.gemini/commands/aios-validator.toml +7 -0
- package/template/AGENTS.md +12 -1
- package/template/CLAUDE.md +5 -1
- package/template/.aioson/locales/en/agents/analyst.md +0 -244
- package/template/.aioson/locales/en/agents/architect.md +0 -245
- package/template/.aioson/locales/en/agents/dev.md +0 -397
- package/template/.aioson/locales/en/agents/deyvin.md +0 -137
- package/template/.aioson/locales/en/agents/discovery-design-doc.md +0 -27
- package/template/.aioson/locales/en/agents/genome.md +0 -212
- package/template/.aioson/locales/en/agents/neo.md +0 -8
- package/template/.aioson/locales/en/agents/orache.md +0 -6
- package/template/.aioson/locales/en/agents/orchestrator.md +0 -189
- package/template/.aioson/locales/en/agents/pair.md +0 -5
- package/template/.aioson/locales/en/agents/pm.md +0 -84
- package/template/.aioson/locales/en/agents/product.md +0 -378
- package/template/.aioson/locales/en/agents/profiler-enricher.md +0 -5
- package/template/.aioson/locales/en/agents/profiler-forge.md +0 -5
- package/template/.aioson/locales/en/agents/profiler-researcher.md +0 -5
- package/template/.aioson/locales/en/agents/qa.md +0 -270
- package/template/.aioson/locales/en/agents/setup.md +0 -421
- package/template/.aioson/locales/en/agents/sheldon.md +0 -455
- package/template/.aioson/locales/en/agents/squad.md +0 -449
- package/template/.aioson/locales/en/agents/tester.md +0 -6
- package/template/.aioson/locales/en/agents/ux-ui.md +0 -668
- package/template/.aioson/locales/es/agents/analyst.md +0 -225
- package/template/.aioson/locales/es/agents/architect.md +0 -245
- package/template/.aioson/locales/es/agents/dev.md +0 -370
- package/template/.aioson/locales/es/agents/deyvin.md +0 -99
- package/template/.aioson/locales/es/agents/discovery-design-doc.md +0 -21
- package/template/.aioson/locales/es/agents/genome.md +0 -104
- package/template/.aioson/locales/es/agents/neo.md +0 -50
- package/template/.aioson/locales/es/agents/orache.md +0 -105
- package/template/.aioson/locales/es/agents/orchestrator.md +0 -194
- package/template/.aioson/locales/es/agents/pair.md +0 -7
- package/template/.aioson/locales/es/agents/pm.md +0 -90
- package/template/.aioson/locales/es/agents/product.md +0 -372
- package/template/.aioson/locales/es/agents/profiler-enricher.md +0 -7
- package/template/.aioson/locales/es/agents/profiler-forge.md +0 -7
- package/template/.aioson/locales/es/agents/profiler-researcher.md +0 -7
- package/template/.aioson/locales/es/agents/qa.md +0 -198
- package/template/.aioson/locales/es/agents/setup.md +0 -405
- package/template/.aioson/locales/es/agents/sheldon.md +0 -309
- package/template/.aioson/locales/es/agents/squad.md +0 -532
- package/template/.aioson/locales/es/agents/tester.md +0 -9
- package/template/.aioson/locales/es/agents/ux-ui.md +0 -212
- package/template/.aioson/locales/fr/agents/analyst.md +0 -225
- package/template/.aioson/locales/fr/agents/architect.md +0 -245
- package/template/.aioson/locales/fr/agents/dev.md +0 -370
- package/template/.aioson/locales/fr/agents/deyvin.md +0 -99
- package/template/.aioson/locales/fr/agents/discovery-design-doc.md +0 -21
- package/template/.aioson/locales/fr/agents/genome.md +0 -104
- package/template/.aioson/locales/fr/agents/neo.md +0 -50
- package/template/.aioson/locales/fr/agents/orache.md +0 -106
- package/template/.aioson/locales/fr/agents/orchestrator.md +0 -194
- package/template/.aioson/locales/fr/agents/pair.md +0 -7
- package/template/.aioson/locales/fr/agents/pm.md +0 -90
- package/template/.aioson/locales/fr/agents/product.md +0 -372
- package/template/.aioson/locales/fr/agents/profiler-enricher.md +0 -7
- package/template/.aioson/locales/fr/agents/profiler-forge.md +0 -7
- package/template/.aioson/locales/fr/agents/profiler-researcher.md +0 -7
- package/template/.aioson/locales/fr/agents/qa.md +0 -198
- package/template/.aioson/locales/fr/agents/setup.md +0 -405
- package/template/.aioson/locales/fr/agents/sheldon.md +0 -309
- package/template/.aioson/locales/fr/agents/squad.md +0 -532
- package/template/.aioson/locales/fr/agents/tester.md +0 -9
- package/template/.aioson/locales/fr/agents/ux-ui.md +0 -212
- package/template/.aioson/locales/pt-BR/agents/analyst.md +0 -319
- package/template/.aioson/locales/pt-BR/agents/architect.md +0 -284
- package/template/.aioson/locales/pt-BR/agents/dev.md +0 -483
- package/template/.aioson/locales/pt-BR/agents/deyvin.md +0 -184
- package/template/.aioson/locales/pt-BR/agents/discovery-design-doc.md +0 -198
- package/template/.aioson/locales/pt-BR/agents/genome.md +0 -297
- package/template/.aioson/locales/pt-BR/agents/neo.md +0 -208
- package/template/.aioson/locales/pt-BR/agents/orache.md +0 -137
- package/template/.aioson/locales/pt-BR/agents/orchestrator.md +0 -324
- package/template/.aioson/locales/pt-BR/agents/pair.md +0 -5
- package/template/.aioson/locales/pt-BR/agents/pm.md +0 -182
- package/template/.aioson/locales/pt-BR/agents/product.md +0 -466
- package/template/.aioson/locales/pt-BR/agents/profiler-enricher.md +0 -5
- package/template/.aioson/locales/pt-BR/agents/profiler-forge.md +0 -5
- package/template/.aioson/locales/pt-BR/agents/profiler-researcher.md +0 -5
- package/template/.aioson/locales/pt-BR/agents/qa.md +0 -300
- package/template/.aioson/locales/pt-BR/agents/setup.md +0 -533
- package/template/.aioson/locales/pt-BR/agents/sheldon.md +0 -323
- package/template/.aioson/locales/pt-BR/agents/squad.md +0 -1330
- package/template/.aioson/locales/pt-BR/agents/tester.md +0 -449
- package/template/.aioson/locales/pt-BR/agents/ux-ui.md +0 -669
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: output-brevity
|
|
3
|
+
description: All agents must produce terse, direct output — no preambles, no trailing summaries, no narration of actions
|
|
4
|
+
priority: 8
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Output Brevity
|
|
9
|
+
|
|
10
|
+
All agents produce direct output. No padding.
|
|
11
|
+
|
|
12
|
+
## What to eliminate
|
|
13
|
+
|
|
14
|
+
- Preambles: "I will now...", "Let me...", "I'm going to..."
|
|
15
|
+
- Trailing summaries: "In summary, I have...", "To recap what was done..."
|
|
16
|
+
- Action narration: "Reading the file...", "Now I'll check..."
|
|
17
|
+
- Filler acknowledgements: "Great!", "Sure!", "Of course!", "Absolutely!"
|
|
18
|
+
- Restating the user's request before answering it
|
|
19
|
+
|
|
20
|
+
## What to keep
|
|
21
|
+
|
|
22
|
+
- Artifact content — complete and uncompressed
|
|
23
|
+
- Technical explanations when genuinely non-obvious
|
|
24
|
+
- Questions when clarification is required
|
|
25
|
+
- Security warnings, irreversible action confirmations — revert to full prose for these
|
|
26
|
+
|
|
27
|
+
## Pattern
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
❌ "I'll analyze the project structure and then provide my findings..."
|
|
31
|
+
✅ [analysis output directly]
|
|
32
|
+
|
|
33
|
+
❌ "In summary, I've created 3 files and updated the spec."
|
|
34
|
+
✅ "Created: spec-auth.md, prd-auth.md, features.md"
|
|
35
|
+
|
|
36
|
+
❌ "Great question! Let me explain how this works..."
|
|
37
|
+
✅ [explanation directly]
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Exceptions — use full prose
|
|
41
|
+
|
|
42
|
+
- Security warnings or destructive action confirmations
|
|
43
|
+
- Multi-step sequences where brevity would cause ambiguity
|
|
44
|
+
- User appears confused or has contradictory requirements
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prd-section-ownership
|
|
3
|
+
description: Define qual agente é dono de cada seção do PRD — outros agentes não podem modificar seções que não são suas
|
|
4
|
+
priority: 9
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
agents: [product, pm, analyst, architect, ux-ui, sheldon]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# PRD Section Ownership
|
|
10
|
+
|
|
11
|
+
`prd.md` and `prd-{slug}.md` are shared documents. Each section has one owner — others may only read or append sub-sections, never replace.
|
|
12
|
+
|
|
13
|
+
## Ownership table
|
|
14
|
+
|
|
15
|
+
| PRD Section | Owner | Others may |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| `## Objetivo` | `@product` | Read only |
|
|
18
|
+
| `## Problema` | `@product` | Read only |
|
|
19
|
+
| `## Usuários e Personas` | `@product` | Read only |
|
|
20
|
+
| `## Funcionalidades` | `@product` | Read only |
|
|
21
|
+
| `## Critérios de Aceite` | `@product` (structure) / `@pm` (enrichment) | `@analyst`, `@architect` add technical sub-items |
|
|
22
|
+
| `## Fases de Entrega` | `@pm` | Read only |
|
|
23
|
+
| `## Restrições Técnicas` | `@architect` | Read only |
|
|
24
|
+
| `## Considerações de UX` | `@ux-ui` | Read only |
|
|
25
|
+
| `## Riscos` | `@pm` | `@analyst`, `@architect` add new risks only |
|
|
26
|
+
| `## Decisões Registradas` | `@sheldon` (project) / `@pm` (feature) | Read only |
|
|
27
|
+
|
|
28
|
+
## Modification rule
|
|
29
|
+
|
|
30
|
+
An agent may only modify sections it owns. Non-owners may only **add** a new sub-section at the end — never replace or rewrite existing content.
|
|
31
|
+
|
|
32
|
+
## Safe addition pattern
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
## Critérios de Aceite
|
|
36
|
+
<!-- @product: owner of this section -->
|
|
37
|
+
|
|
38
|
+
- CA-01: User can schedule an appointment
|
|
39
|
+
- CA-02: System sends confirmation email
|
|
40
|
+
|
|
41
|
+
### Technical criteria (added by @analyst)
|
|
42
|
+
- CA-T01: Scheduling validates availability via DB query before confirming
|
|
43
|
+
- CA-T02: Email queue uses BullMQ with 3x retry
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## On violation detected
|
|
47
|
+
|
|
48
|
+
1. Do not overwrite the section.
|
|
49
|
+
2. Create a sub-section with explicit attribution (`<!-- added by @{agent} -->`), OR create a separate artifact (`requirements-{slug}.md`, `architecture.md`, etc.).
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-baseline
|
|
3
|
+
description: Secure by Default baseline controls for technical agents
|
|
4
|
+
priority: 10
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
agents: [analyst, architect, dev, qa]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Security Baseline — Secure by Default
|
|
10
|
+
|
|
11
|
+
> Implements `Article VII — Zero Trust by Default` of the AIOSON constitution.
|
|
12
|
+
> Loaded by `@analyst`, `@architect`, `@dev`, and `@qa`. Other agents must not
|
|
13
|
+
> load this rule — product, copy, design and orchestration scopes are out of band.
|
|
14
|
+
|
|
15
|
+
This rule defines the minimum security baseline every technical agent must
|
|
16
|
+
respect. It does **not** promise absolute security. It declares concrete
|
|
17
|
+
controls, expected evidence and how each project classification consumes them.
|
|
18
|
+
Deviations are allowed only when recorded as an explicit decision in the
|
|
19
|
+
feature `spec-{slug}.md` with N/A rationale.
|
|
20
|
+
|
|
21
|
+
## Classification policy
|
|
22
|
+
|
|
23
|
+
| Classification | Behavior |
|
|
24
|
+
|---|---|
|
|
25
|
+
| **MICRO** | **Advisory.** Controls are surfaced as recommendations. No automated blocking. `@qa` may still flag obviously dangerous patterns. |
|
|
26
|
+
| **SMALL** | **Scan-oriented.** Static checks and tool-first scans run automatically. `@pentester` is **not** mandatory. Open Medium+ findings are reported but do not block by default. |
|
|
27
|
+
| **MEDIUM** | **Audit-blocking.** Surface assessment runs against attack-surface map. **Open High or Critical findings block Gate D** until resolved or explicitly waived with rationale recorded in `spec-{slug}.md`. |
|
|
28
|
+
|
|
29
|
+
`@pentester` (`app_target` mode) may be invoked by `@qa` for any feature with
|
|
30
|
+
auth, money, ownership, file uploads, external URLs or suspicious audit
|
|
31
|
+
findings — regardless of classification. It is never required by classification
|
|
32
|
+
alone.
|
|
33
|
+
|
|
34
|
+
## Severity scale
|
|
35
|
+
|
|
36
|
+
| Severity | Examples |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `critical` | Ownership bypass, financial race condition, committed production secret. |
|
|
39
|
+
| `high` | Missing server-side validation, unsafe upload signature handling, missing rate limit on sensitive endpoint. |
|
|
40
|
+
| `medium` | Unsanitized external URL, low-impact tracker, storage boundary abuse surface. |
|
|
41
|
+
| `advisory` | MICRO recommendations or surfaces marked N/A with explicit rationale. |
|
|
42
|
+
|
|
43
|
+
## Direct LLM mode (no CLI)
|
|
44
|
+
|
|
45
|
+
When the `aioson` CLI is unavailable, agents must fall back to **checklist-only
|
|
46
|
+
verification** of the controls below, record the limitation in the session
|
|
47
|
+
devlog, and **must not** fabricate runtime telemetry events. Findings still
|
|
48
|
+
land in `.aioson/context/security-findings-{slug}.json` (one of the few
|
|
49
|
+
machine-readable exceptions allowed under `.aioson/context/`).
|
|
50
|
+
|
|
51
|
+
## Controls
|
|
52
|
+
|
|
53
|
+
### SEC-SBD-01 — Server-side input limits
|
|
54
|
+
|
|
55
|
+
- Maps to: OWASP A03 / A04
|
|
56
|
+
- Default severity: `high`
|
|
57
|
+
- Owner agent: `@dev` (implements), `@analyst` (declares limits), `@qa` (verifies)
|
|
58
|
+
- Applies to: analyst, dev, qa
|
|
59
|
+
- Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking when feature accepts user input
|
|
60
|
+
- Required evidence: explicit field-length / type / range limits enforced server-side, plus negative tests asserting rejection on overflow or wrong type. N/A rationale required when feature has no user input.
|
|
61
|
+
|
|
62
|
+
### SEC-SBD-02 — Upload file signature validation
|
|
63
|
+
|
|
64
|
+
- Maps to: OWASP A03 / A05
|
|
65
|
+
- Default severity: `high`
|
|
66
|
+
- Owner agent: `@dev` (implements), `@qa` (verifies)
|
|
67
|
+
- Applies to: analyst, dev, qa
|
|
68
|
+
- Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking when feature accepts uploads
|
|
69
|
+
- Required evidence: magic-byte / file-signature validation independent of MIME header and extension; rejection test for spoofed extension. N/A when no upload surface exists.
|
|
70
|
+
|
|
71
|
+
### SEC-SBD-03 — Ownership / IDOR authorization
|
|
72
|
+
|
|
73
|
+
- Maps to: OWASP A01
|
|
74
|
+
- Default severity: `critical`
|
|
75
|
+
- Owner agent: `@dev` (implements), `@analyst` (maps surfaces), `@qa` (verifies)
|
|
76
|
+
- Applies to: analyst, architect, dev, qa
|
|
77
|
+
- Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on every endpoint that returns or mutates per-user data
|
|
78
|
+
- Required evidence: ownership check at the data layer (not only route), and a negative test where user A attempts to access user B's resource and receives 403/404. N/A only when resource is intentionally public.
|
|
79
|
+
|
|
80
|
+
### SEC-SBD-04 — Atomic critical state changes
|
|
81
|
+
|
|
82
|
+
- Maps to: OWASP A04
|
|
83
|
+
- Default severity: `critical`
|
|
84
|
+
- Owner agent: `@architect` (designs), `@dev` (implements), `@qa` (verifies)
|
|
85
|
+
- Applies to: architect, dev, qa
|
|
86
|
+
- Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on money, inventory, quotas, ownership transfers, balance updates
|
|
87
|
+
- Required evidence: transactional boundary (DB transaction, row lock, or equivalent) plus a concurrency test or documented invariant proving no double-spend / lost update. N/A when feature has no shared mutable state.
|
|
88
|
+
|
|
89
|
+
### SEC-SBD-05 — Secrets outside code
|
|
90
|
+
|
|
91
|
+
- Maps to: OWASP A02 / A05
|
|
92
|
+
- Default severity: `critical` (committed) / `high` (config drift)
|
|
93
|
+
- Owner agent: `@dev` (implements), `@qa` (verifies)
|
|
94
|
+
- Applies to: analyst, architect, dev, qa
|
|
95
|
+
- Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on any commit
|
|
96
|
+
- Required evidence: secrets loaded from environment / vault / managed config; `.env` and equivalents in `.gitignore`; secret-scan pass on diff. Brownfield exception: pre-existing secret must be rotated and tracked, never silently kept.
|
|
97
|
+
|
|
98
|
+
### SEC-SBD-06 — External URL sanitization
|
|
99
|
+
|
|
100
|
+
- Maps to: OWASP A03 / A10
|
|
101
|
+
- Default severity: `medium` (raises to `high` when URL is followed server-side)
|
|
102
|
+
- Owner agent: `@dev` (implements), `@qa` (verifies)
|
|
103
|
+
- Applies to: analyst, dev, qa
|
|
104
|
+
- Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking when feature accepts or follows external URLs
|
|
105
|
+
- Required evidence: scheme allowlist, host validation, SSRF protection (private-range block) when followed server-side, escaping when rendered. N/A when no external URL is accepted.
|
|
106
|
+
|
|
107
|
+
### SEC-SBD-07 — Storage default-deny / RLS boundary
|
|
108
|
+
|
|
109
|
+
- Maps to: OWASP A01 / A05
|
|
110
|
+
- Default severity: `critical`
|
|
111
|
+
- Owner agent: `@architect` (designs), `@dev` (implements), `@qa` (verifies)
|
|
112
|
+
- Applies to: architect, dev, qa
|
|
113
|
+
- Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on every multi-tenant or per-user store
|
|
114
|
+
- Required evidence: storage layer denies by default (RLS policies enabled, bucket private, queue ACL closed) plus a negative test from an unauthorized identity. N/A when storage is single-tenant and intentionally public.
|
|
115
|
+
|
|
116
|
+
### SEC-SBD-08 — Auth enumeration / rate limiting
|
|
117
|
+
|
|
118
|
+
- Maps to: OWASP A07
|
|
119
|
+
- Default severity: `high`
|
|
120
|
+
- Owner agent: `@dev` (implements), `@qa` (verifies)
|
|
121
|
+
- Applies to: analyst, dev, qa
|
|
122
|
+
- Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on login, password reset, signup, OTP and any auth-adjacent endpoint
|
|
123
|
+
- Required evidence: per-endpoint rate limit (per IP and per identifier), uniform error response for "user not found" vs "wrong password", lockout or backoff after N failures, and a negative test asserting enumeration is not possible. N/A when feature has no auth surface.
|
|
124
|
+
|
|
125
|
+
## Out of scope (v1)
|
|
126
|
+
|
|
127
|
+
The following are explicitly **not** part of this baseline and require a future
|
|
128
|
+
PRD before adoption: deceptive endpoints (honeypots), jump-scare responses,
|
|
129
|
+
adversarial CAPTCHAs, and any technique whose primary purpose is to deceive
|
|
130
|
+
attackers. The baseline is preventive, not deceptive.
|
|
131
|
+
|
|
132
|
+
## Maintenance
|
|
133
|
+
|
|
134
|
+
- Control IDs are stable. Adding a control means appending `SEC-SBD-09`, never
|
|
135
|
+
renumbering or repurposing an existing ID.
|
|
136
|
+
- Severity defaults can be raised per-feature in `spec-{slug}.md` with rationale; they cannot be silently lowered.
|
|
137
|
+
- Changes to this rule require an explicit decision recorded in the relevant
|
|
138
|
+
feature spec and a `last_amended`-style note in the constitution if they
|
|
139
|
+
alter Article VII semantics.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-level-ownership
|
|
3
|
+
description: spec.md é de projeto, spec-{slug}.md é de feature — os dois níveis nunca se misturam
|
|
4
|
+
priority: 9
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
agents: [dev, qa, pm, sheldon]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Spec Ownership: Project vs Feature Level
|
|
10
|
+
|
|
11
|
+
Two distinct levels — never mix them.
|
|
12
|
+
|
|
13
|
+
| File | Level | Owner | Content |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| `spec.md` | **Project** | `@dev` (full project) | Stack, global patterns, infrastructure — decisions affecting the whole project |
|
|
16
|
+
| `spec-{slug}.md` | **Feature** | `@dev` (specific feature) | Decisions, entities, dependencies, ACs for ONE feature |
|
|
17
|
+
|
|
18
|
+
## Absolute rules
|
|
19
|
+
|
|
20
|
+
1. `spec.md` never receives feature-specific content → create `spec-{slug}.md` for that.
|
|
21
|
+
2. `spec-{slug}.md` never receives project decisions → stack decisions go in `spec.md` or `architecture.md`.
|
|
22
|
+
3. `spec-{slug}.md` is created by `@dev` at feature implementation start. One file per slug. Slug must match `prd-{slug}.md` and `implementation-plan-{slug}.md`.
|
|
23
|
+
4. No `spec-{slug}.md` without a corresponding `prd-{slug}.md`.
|
|
24
|
+
|
|
25
|
+
## Mandatory structure: spec-{slug}.md
|
|
26
|
+
|
|
27
|
+
```markdown
|
|
28
|
+
---
|
|
29
|
+
feature: {slug}
|
|
30
|
+
status: in_progress | done
|
|
31
|
+
phase_gates:
|
|
32
|
+
requirements: approved | pending | skipped
|
|
33
|
+
design: approved | pending | skipped
|
|
34
|
+
plan: approved | pending | skipped
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
# Spec — {feature name}
|
|
38
|
+
|
|
39
|
+
## Implemented entities
|
|
40
|
+
## Technical decisions
|
|
41
|
+
## Dependencies
|
|
42
|
+
## QA approval
|
|
43
|
+
(filled by @qa on feature close)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Mandatory structure: spec.md (project level)
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
# Spec — {project name}
|
|
50
|
+
|
|
51
|
+
## Stack and infrastructure
|
|
52
|
+
## Global code patterns
|
|
53
|
+
## External integrations
|
|
54
|
+
## Cross-feature architecture decisions
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## On violation detected
|
|
58
|
+
|
|
59
|
+
1. Do not write to the wrong file.
|
|
60
|
+
2. Identify the correct level.
|
|
61
|
+
3. Write to the correct file (create if needed following mandatory structure above).
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: squad-driver-pattern
|
|
3
|
+
description: Territory boundaries and integration pattern for AIOSON squads — separates squad definitions (owned by @squad) from application driver code (owned by @dev)
|
|
4
|
+
priority: 9
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
agents: [dev, sheldon, pm, qa, architect]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Squad Driver Pattern
|
|
10
|
+
|
|
11
|
+
Two distinct layers — never mixed:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Layer 1 — Definition (owned by @squad)
|
|
15
|
+
.aioson/squads/{squad-slug}/
|
|
16
|
+
agents/greeting-agent.md ← prompt and personality
|
|
17
|
+
agents/orquestrador.md ← orchestration logic
|
|
18
|
+
squad.manifest.json ← configuration
|
|
19
|
+
workflows/main.md ← execution pipeline
|
|
20
|
+
|
|
21
|
+
Layer 2 — Driver (owned by @dev)
|
|
22
|
+
src/services/squadRunner.js ← loads and executes definitions
|
|
23
|
+
src/services/greetingService.js ← driver consuming greeting-agent.md
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Territory rules — absolute for all agents
|
|
27
|
+
|
|
28
|
+
| Agent | Can create/modify | Must never touch |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `@squad` | `.aioson/squads/` | Application code (`src/`, `app/`, etc.) |
|
|
31
|
+
| `@dev` | Application code | `.aioson/squads/` |
|
|
32
|
+
| `@pm` | Implementation plan | Either layer |
|
|
33
|
+
| `@architect` | `architecture.md` | Squad files or agent code |
|
|
34
|
+
|
|
35
|
+
## Correct integration pattern
|
|
36
|
+
|
|
37
|
+
The application service is a **driver** — loads the squad definition and sends it to the LLM. Never embeds prompts in code.
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
// CORRECT — driver consuming @squad definition
|
|
41
|
+
class GreetingService {
|
|
42
|
+
async respond(message) {
|
|
43
|
+
const agentDef = fs.readFileSync(
|
|
44
|
+
'.aioson/squads/squad-greeting/agents/greeting-agent.md', 'utf-8'
|
|
45
|
+
)
|
|
46
|
+
return await llm.call({ system: agentDef, user: message })
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// WRONG — prompt embedded in code (@dev must not do this)
|
|
51
|
+
class GreetingService {
|
|
52
|
+
async respond(message) {
|
|
53
|
+
const prompt = "Voce e um atendente de farmacia..." // ← @squad territory
|
|
54
|
+
return await llm.call({ system: prompt, user: message })
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Per-agent responsibilities
|
|
60
|
+
|
|
61
|
+
**`@product` / `@sheldon`:** describe squad behavior and objective in PRDs — never literal prompts. Prompts are `@squad` territory.
|
|
62
|
+
|
|
63
|
+
**`@analyst` / `@architect`:** include the driver layer as explicit component in `architecture.md`:
|
|
64
|
+
```
|
|
65
|
+
SquadRunner — loads definitions from .aioson/squads/ and executes via LLM API
|
|
66
|
+
dependencies: fs (read .md), llm-client (model call)
|
|
67
|
+
no domain logic — only orchestrates loading and execution
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**`@pm`:** separate squad phases from code phases in implementation plans:
|
|
71
|
+
- Squad phases → `executor: @squad`
|
|
72
|
+
- Driver phases → `executor: @dev` with task "create SquadRunner that loads `.aioson/squads/{slug}/`"
|
|
73
|
+
|
|
74
|
+
**`@dev`:** never write inline prompts. If a task requires creating/modifying files in `.aioson/squads/` — stop and redirect to `@squad`.
|
|
75
|
+
|
|
76
|
+
**`@squad`:** read `implementation-plan` and `prd` before asking anything — context is already in artifacts.
|
|
77
|
+
|
|
78
|
+
**`@qa`:** verify:
|
|
79
|
+
- [ ] Squad services are drivers (load `.md`, never embed prompts)
|
|
80
|
+
- [ ] No agent prompt is hardcoded in application code
|
|
81
|
+
- [ ] `.aioson/squads/` was not modified by `@dev`
|
|
@@ -31,6 +31,30 @@
|
|
|
31
31
|
"enum": ["content", "software", "research", "mixed"]
|
|
32
32
|
},
|
|
33
33
|
"domain": { "type": "string" },
|
|
34
|
+
"locale_scope": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "Universal or locale-specific scope for generated agent files",
|
|
37
|
+
"pattern": "^(universal|[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*)$"
|
|
38
|
+
},
|
|
39
|
+
"locale_rationale": { "type": "string" },
|
|
40
|
+
"domainClassification": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"properties": {
|
|
43
|
+
"tier": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"enum": ["tier-1-regulated", "tier-2-specialized", "tier-3-common"]
|
|
46
|
+
},
|
|
47
|
+
"rationale": { "type": "string" },
|
|
48
|
+
"regulations": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": { "type": "string" }
|
|
51
|
+
},
|
|
52
|
+
"investigationPolicy": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"enum": ["required", "recommended", "optional"]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
34
58
|
"executors": {
|
|
35
59
|
"type": "array",
|
|
36
60
|
"items": {
|
|
@@ -38,6 +38,34 @@
|
|
|
38
38
|
"enum": ["private", "public"],
|
|
39
39
|
"default": "private"
|
|
40
40
|
},
|
|
41
|
+
"locale_scope": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"description": "Universal or locale-specific scope for agent prompt files",
|
|
44
|
+
"pattern": "^(universal|[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*)$"
|
|
45
|
+
},
|
|
46
|
+
"locale_rationale": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "Why the squad is locale-specific when locale_scope is not universal"
|
|
49
|
+
},
|
|
50
|
+
"domainClassification": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"description": "Classification of the squad domain for research and safety routing",
|
|
53
|
+
"properties": {
|
|
54
|
+
"tier": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"enum": ["tier-1-regulated", "tier-2-specialized", "tier-3-common"]
|
|
57
|
+
},
|
|
58
|
+
"rationale": { "type": "string" },
|
|
59
|
+
"regulations": {
|
|
60
|
+
"type": "array",
|
|
61
|
+
"items": { "type": "string" }
|
|
62
|
+
},
|
|
63
|
+
"investigationPolicy": {
|
|
64
|
+
"type": "string",
|
|
65
|
+
"enum": ["required", "recommended", "optional"]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
41
69
|
"ephemeral": {
|
|
42
70
|
"type": "boolean",
|
|
43
71
|
"default": false,
|
|
@@ -48,6 +76,22 @@
|
|
|
48
76
|
"description": "Time-to-live for ephemeral squads (e.g. '24h', '7d'). After TTL, squad files are eligible for cleanup."
|
|
49
77
|
},
|
|
50
78
|
"aiosLiteCompatibility": { "type": "string" },
|
|
79
|
+
"sourceDocs": {
|
|
80
|
+
"type": "array",
|
|
81
|
+
"items": { "type": "string" },
|
|
82
|
+
"description": "Project artifacts consumed during squad design"
|
|
83
|
+
},
|
|
84
|
+
"investigation": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"description": "Reference to a persisted @orache investigation report",
|
|
87
|
+
"properties": {
|
|
88
|
+
"slug": { "type": "string" },
|
|
89
|
+
"path": { "type": "string" },
|
|
90
|
+
"confidence": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
91
|
+
"dimensionsCovered": { "type": "integer", "minimum": 0, "maximum": 7 },
|
|
92
|
+
"date": { "type": "string", "format": "date" }
|
|
93
|
+
}
|
|
94
|
+
},
|
|
51
95
|
"storagePolicy": {
|
|
52
96
|
"type": "object",
|
|
53
97
|
"properties": {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Spec-Driven Reference — @pm
|
|
2
|
+
|
|
3
|
+
> Router file. Do not duplicate logic from the generic references — load those directly.
|
|
4
|
+
|
|
5
|
+
## Which references to load for backlog and delivery planning
|
|
6
|
+
|
|
7
|
+
### Always load when this skill is active
|
|
8
|
+
|
|
9
|
+
- `approval-gates.md` — @pm owns Gate C; use it to know exactly what must be true before `phase_gates.plan` can be set to `approved` and before handing off to @dev or @orchestrator
|
|
10
|
+
- `classification-map.md` — use to calibrate sprint sizing and decide how many delivery phases are appropriate for MICRO/SMALL/MEDIUM
|
|
11
|
+
|
|
12
|
+
### Load when plan structure is ambiguous
|
|
13
|
+
|
|
14
|
+
- `artifact-map.md` — use to understand which artifacts @pm may read (prd, requirements, spec, architecture) vs. which it must not overwrite (@analyst's requirements, @architect's architecture)
|
|
15
|
+
- `maintenance-and-state.md` — use when retaking a sprint session or checking if a spec-{slug}.md checkpoint needs updating before continuing
|
|
16
|
+
|
|
17
|
+
### Do not load for @pm
|
|
18
|
+
|
|
19
|
+
- `hardening-lane.md` — @pm receives hardened input from @product and @analyst; if input is still vague, send it back upstream, do not harden it yourself
|
|
20
|
+
- `qa.md` — Gate D belongs to @qa, not @pm
|
|
21
|
+
|
|
22
|
+
## Behavioral notes for @pm under SDD
|
|
23
|
+
|
|
24
|
+
- @pm is the **Gate C owner** — the plan is not complete until `spec-{slug}.md` has `phase_gates.plan: approved` and `implementation-plan-{slug}.md` (if MEDIUM) has `status: approved`
|
|
25
|
+
- Gate C is **blocking in MEDIUM** — @dev and @orchestrator must not execute without Gate C passing
|
|
26
|
+
- Gate C is **informational in SMALL** — flag if the plan looks thin, but do not block
|
|
27
|
+
- Gate C is **skipped in MICRO** — @dev reads prd.md directly; @pm does not run for MICRO
|
|
28
|
+
- ACs produced by @pm must match or extend the ACs in `conformance-{slug}.yaml` when it exists — never contradict the analyst's behavioral contracts
|
|
29
|
+
- @pm adds delivery phases and prioritization; it does NOT rewrite Vision, Problem, Users, or Flows — those belong to @product
|
|
30
|
+
- At session end, always tell the user explicitly: "Gate C passed — activate [@orchestrator / @dev]" OR "Gate C blocked — [reason]"
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: secure-tdd
|
|
3
|
+
description: Process skill for adversarial TDD in security-sensitive features. Load after aioson-spec-driven when classification and attack surface justify it.
|
|
4
|
+
activation: |
|
|
5
|
+
You are now running the secure-tdd process. Confirm the feature classification and attack surface, load only the stack reference you need, write adversarial tests first, then implement production code.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Skill: secure-tdd
|
|
9
|
+
|
|
10
|
+
> Process skill. Adversarial tests before production code.
|
|
11
|
+
> Load this file first. Then load only the stack reference you need.
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
Load this skill only after the normal feature workflow is already active.
|
|
16
|
+
|
|
17
|
+
- **MEDIUM:** load when the feature has auth, ownership, money, uploads, external URLs, secrets/credentials, or sensitive storage boundaries.
|
|
18
|
+
- **SMALL:** optional reduced mode for the same surfaces.
|
|
19
|
+
- **MICRO:** do not auto-load.
|
|
20
|
+
|
|
21
|
+
This skill complements `aioson-spec-driven`. It never replaces it.
|
|
22
|
+
|
|
23
|
+
## Loading order
|
|
24
|
+
|
|
25
|
+
1. Load `.aioson/skills/process/aioson-spec-driven/SKILL.md` first when the feature is spec-driven.
|
|
26
|
+
2. Read the current `requirements-{slug}.md`, `spec-{slug}.md`, and `architecture.md`.
|
|
27
|
+
3. Load `secure-tdd/SKILL.md`.
|
|
28
|
+
4. Load only one stack reference:
|
|
29
|
+
- `references/node-express.md`
|
|
30
|
+
- `references/nextjs.md`
|
|
31
|
+
5. If your stack is not covered by a full v1 reference, read `references/planned-stacks.md` for the minimal fallback.
|
|
32
|
+
|
|
33
|
+
## Goal
|
|
34
|
+
|
|
35
|
+
Make `@dev` write the security-sensitive tests first, before implementation, for the attack paths most likely to regress:
|
|
36
|
+
|
|
37
|
+
- auth bypass
|
|
38
|
+
- IDOR / ownership breaks
|
|
39
|
+
- race conditions / double-submit
|
|
40
|
+
- server-side validation gaps
|
|
41
|
+
- upload validation gaps
|
|
42
|
+
- unsafe external URL handling
|
|
43
|
+
- auth enumeration / rate limiting gaps
|
|
44
|
+
|
|
45
|
+
## Core rule
|
|
46
|
+
|
|
47
|
+
Frontend is never the authority.
|
|
48
|
+
Validation, authorization, limits, and sensitive state rules must be enforced server-side.
|
|
49
|
+
|
|
50
|
+
## Adversarial loop
|
|
51
|
+
|
|
52
|
+
1. Confirm the sensitive surface from requirements or the Attack Surface Map.
|
|
53
|
+
2. Map the surface to the relevant controls:
|
|
54
|
+
- `SEC-SBD-01` input limits
|
|
55
|
+
- `SEC-SBD-02` upload validation
|
|
56
|
+
- `SEC-SBD-03` ownership / IDOR / auth bypass
|
|
57
|
+
- `SEC-SBD-04` race condition / atomicity
|
|
58
|
+
- `SEC-SBD-06` external URL sanitization
|
|
59
|
+
- `SEC-SBD-08` auth enumeration / rate limiting
|
|
60
|
+
3. Write the minimum failing adversarial tests first.
|
|
61
|
+
4. Implement only enough production code to make those tests pass.
|
|
62
|
+
5. Re-run the tests immediately.
|
|
63
|
+
6. Record in `spec-{slug}.md` which attack classes are now covered.
|
|
64
|
+
|
|
65
|
+
`SEC-SBD-05` remains primarily tool-first via `security:scan`. Mention it in implementation decisions when relevant, but do not turn this skill into a secrets-scanning checklist.
|
|
66
|
+
|
|
67
|
+
## Output contract
|
|
68
|
+
|
|
69
|
+
When this skill is active, `@dev` should produce:
|
|
70
|
+
|
|
71
|
+
- at least one adversarial test per relevant sensitive surface
|
|
72
|
+
- a short note in `spec-{slug}.md` listing the covered attack classes
|
|
73
|
+
- no new product rules beyond what requirements and architecture already define
|
|
74
|
+
|
|
75
|
+
## Reduced mode for SMALL
|
|
76
|
+
|
|
77
|
+
For SMALL features:
|
|
78
|
+
|
|
79
|
+
- choose only the highest-risk surfaces
|
|
80
|
+
- prefer 1-2 adversarial tests over a full matrix
|
|
81
|
+
- do not block implementation just to expand the suite
|
|
82
|
+
|
|
83
|
+
## Non-goals
|
|
84
|
+
|
|
85
|
+
- do not invoke `@pentester`
|
|
86
|
+
- do not emit runtime events
|
|
87
|
+
- do not create CLI commands
|
|
88
|
+
- do not auto-generate large prompt libraries
|
|
89
|
+
- do not duplicate the baseline rule prose
|
|
90
|
+
|
|
91
|
+
## References available
|
|
92
|
+
|
|
93
|
+
| File | Load when |
|
|
94
|
+
|---|---|
|
|
95
|
+
| `references/node-express.md` | Implementing Node / Express or service-style Node boundaries |
|
|
96
|
+
| `references/nextjs.md` | Implementing Next.js route handlers, server actions, or server-side validation |
|
|
97
|
+
| `references/planned-stacks.md` | The target stack is Laravel, Django, Rails, FastAPI, or another non-v1 stack |
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# secure-tdd reference: Next.js
|
|
2
|
+
|
|
3
|
+
Use this when the feature runs on Next.js route handlers, server actions, or server-side validation flows.
|
|
4
|
+
|
|
5
|
+
## Preferred runners
|
|
6
|
+
|
|
7
|
+
- Vitest
|
|
8
|
+
- Testing Library
|
|
9
|
+
- direct assertions on route handlers or server actions when available
|
|
10
|
+
|
|
11
|
+
## Write first
|
|
12
|
+
|
|
13
|
+
Start with failing tests that prove the server side rejects forged or cross-user behavior even if the UI looks correct.
|
|
14
|
+
|
|
15
|
+
Priority order:
|
|
16
|
+
1. auth bypass in route handlers or server actions
|
|
17
|
+
2. forged payload that bypasses UI constraints
|
|
18
|
+
3. IDOR / ownership checks on resource fetch or mutation
|
|
19
|
+
4. unsafe redirect / external URL handling
|
|
20
|
+
5. optimistic UI or double-submit that must not create duplicate critical state
|
|
21
|
+
|
|
22
|
+
## Minimum patterns
|
|
23
|
+
|
|
24
|
+
### Server-side validation independent of UI
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
it('rejects forged payloads on the server', async () => {
|
|
28
|
+
const res = await POST(new Request('http://test.local/api/resources', {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
body: JSON.stringify({ title: 'x'.repeat(10000) })
|
|
31
|
+
}));
|
|
32
|
+
expect(res.status).toBe(422);
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Auth / ownership
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
it('blocks access to another users resource', async () => {
|
|
40
|
+
const res = await GET(
|
|
41
|
+
new Request('http://test.local/api/resources/foreign-id'),
|
|
42
|
+
{ params: { id: 'foreign-id' } }
|
|
43
|
+
);
|
|
44
|
+
expect([401, 403]).toContain(res.status);
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### External URL sanitization
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
it('rejects unsafe redirect targets', async () => {
|
|
52
|
+
const res = await POST(new Request('http://test.local/api/redirects', {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
body: JSON.stringify({ target: 'javascript:alert(1)' })
|
|
55
|
+
}));
|
|
56
|
+
expect(res.status).toBe(422);
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Double-submit / optimistic UI distrust
|
|
61
|
+
|
|
62
|
+
Write a test proving the server allows only one critical mutation even if the client sends duplicates quickly.
|
|
63
|
+
|
|
64
|
+
## Control mapping
|
|
65
|
+
|
|
66
|
+
- `SEC-SBD-01`: route handler / action validation
|
|
67
|
+
- `SEC-SBD-03`: auth bypass / ownership
|
|
68
|
+
- `SEC-SBD-04`: duplicate mutation / optimistic UI distrust
|
|
69
|
+
- `SEC-SBD-06`: unsafe URL / redirect target
|
|
70
|
+
- `SEC-SBD-08`: auth messaging / rate-limiting when applicable
|
|
71
|
+
|
|
72
|
+
## Core reminder
|
|
73
|
+
|
|
74
|
+
UI affordances are not evidence.
|
|
75
|
+
Server actions, route handlers, and backend services must enforce the rule.
|
|
76
|
+
|
|
77
|
+
## Avoid
|
|
78
|
+
|
|
79
|
+
- testing only component rendering for a security-sensitive feature
|
|
80
|
+
- assuming hidden fields or disabled buttons are protection
|
|
81
|
+
- skipping server-action tests because the page already validates input
|