@jaimevalasek/aioson 1.3.0 → 1.5.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 +31 -1
- package/LICENSE +661 -21
- package/README.md +22 -3
- package/docs/en/squad-dashboard.md +372 -0
- package/docs/openclaw-bridge.md +308 -0
- package/docs/pt/README.md +62 -2
- package/docs/pt/advisor-spec.md +5 -5
- package/docs/pt/agentes-customizados.md +670 -0
- package/docs/pt/agentes.md +235 -23
- package/docs/pt/automacao-squads.md +407 -0
- package/docs/pt/cenarios.md +49 -5
- package/docs/pt/clientes-ai.md +62 -0
- package/docs/pt/comandos-cli.md +226 -17
- package/docs/pt/deyvin.md +115 -0
- package/docs/pt/genome-3.0-spec.md +11 -11
- package/docs/pt/inicio-rapido.md +63 -2
- package/docs/pt/memoria-contexto.md +255 -0
- package/docs/pt/output-strategy-delivery.md +655 -0
- package/docs/pt/profiler-system.md +17 -17
- package/docs/pt/runtime-observability.md +5 -1
- package/docs/pt/skills.md +175 -0
- package/docs/pt/squad-dashboard.md +373 -0
- package/docs/pt/{squad-genoma.md → squad-genome.md} +81 -75
- package/docs/testing/genome-2.0-matrix.md +5 -5
- package/docs/testing/genome-2.0-rollout.md +10 -10
- package/package.json +4 -4
- package/src/agents.js +21 -5
- package/src/backup-local.js +74 -0
- package/src/backup-provider.js +303 -0
- package/src/cli.js +276 -2
- package/src/commands/agents.js +22 -4
- package/src/commands/backup-local-cmd.js +25 -0
- package/src/commands/backup.js +533 -0
- package/src/commands/cloud.js +17 -17
- package/src/commands/context-pack.js +45 -0
- package/src/commands/implementation-plan.js +340 -0
- package/src/commands/learning.js +134 -0
- package/src/commands/live.js +1583 -0
- package/src/commands/runtime.js +1075 -2
- package/src/commands/scan-project.js +288 -24
- package/src/commands/setup-context.js +30 -2
- package/src/commands/skill.js +558 -0
- package/src/commands/squad-agent-create.js +788 -0
- package/src/commands/squad-daemon.js +209 -0
- package/src/commands/squad-dashboard.js +39 -0
- package/src/commands/squad-deploy.js +64 -0
- package/src/commands/squad-doctor.js +103 -1
- package/src/commands/squad-investigate.js +261 -0
- package/src/commands/squad-learning.js +209 -0
- package/src/commands/squad-mcp.js +270 -0
- package/src/commands/squad-pipeline.js +247 -1
- package/src/commands/squad-plan.js +329 -0
- package/src/commands/squad-processes.js +56 -0
- package/src/commands/squad-recovery.js +42 -0
- package/src/commands/squad-roi.js +291 -0
- package/src/commands/squad-score.js +250 -0
- package/src/commands/squad-status.js +38 -2
- package/src/commands/squad-validate.js +118 -1
- package/src/commands/squad-webhook.js +160 -0
- package/src/commands/squad-worker.js +191 -0
- package/src/commands/squad-worktrees.js +75 -0
- package/src/commands/test-agents.js +6 -1
- package/src/commands/web-map.js +70 -0
- package/src/commands/web-scrape.js +71 -0
- package/src/commands/workflow-next.js +8 -1
- package/src/commands/workflow-status.js +250 -0
- package/src/constants.js +88 -16
- package/src/context-memory.js +837 -0
- package/src/context-writer.js +47 -1
- package/src/delivery-runner.js +319 -0
- package/src/genome-files.js +1 -1
- package/src/genome-format.js +1 -1
- package/src/i18n/messages/en.js +333 -8
- package/src/i18n/messages/es.js +240 -6
- package/src/i18n/messages/fr.js +239 -5
- package/src/i18n/messages/pt-BR.js +330 -12
- package/src/installer.js +30 -2
- package/src/lib/genomes/compat.js +1 -1
- package/src/lib/webhook-server.js +328 -0
- package/src/mcp-connectors/registry.js +602 -0
- package/src/runtime-store.js +1037 -42
- package/src/session-handoff.js +77 -0
- package/src/squad/external-session.js +180 -0
- package/src/squad/inter-squad.js +74 -0
- package/src/squad/recovery-context.js +201 -0
- package/src/squad/worktree-manager.js +114 -0
- package/src/squad-daemon.js +490 -0
- package/src/squad-dashboard/api.js +223 -0
- package/src/squad-dashboard/attachment-handler.js +93 -0
- package/src/squad-dashboard/context-monitor.js +157 -0
- package/src/squad-dashboard/execution-logs.js +115 -0
- package/src/squad-dashboard/hunk-review.js +209 -0
- package/src/squad-dashboard/metrics.js +133 -0
- package/src/squad-dashboard/process-monitor.js +125 -0
- package/src/squad-dashboard/renderer.js +858 -0
- package/src/squad-dashboard/server.js +232 -0
- package/src/squad-dashboard/styles.js +525 -0
- package/src/squad-dashboard/token-tracker.js +99 -0
- package/src/web.js +284 -0
- package/src/worker-runner.js +339 -0
- package/template/.aioson/agents/analyst.md +40 -9
- package/template/.aioson/agents/architect.md +24 -5
- package/template/.aioson/agents/dev.md +254 -25
- package/template/.aioson/agents/deyvin.md +174 -0
- package/template/.aioson/agents/discovery-design-doc.md +25 -1
- package/template/.aioson/agents/{genoma.md → genome.md} +20 -20
- package/template/.aioson/agents/neo.md +152 -0
- package/template/.aioson/agents/orache.md +388 -0
- package/template/.aioson/agents/orchestrator.md +63 -2
- package/template/.aioson/agents/pair.md +5 -0
- package/template/.aioson/agents/pm.md +17 -5
- package/template/.aioson/agents/product.md +113 -29
- package/template/.aioson/agents/profiler-enricher.md +1 -1
- package/template/.aioson/agents/profiler-forge.md +9 -9
- package/template/.aioson/agents/profiler-researcher.md +1 -1
- package/template/.aioson/agents/qa.md +18 -5
- package/template/.aioson/agents/setup.md +138 -18
- package/template/.aioson/agents/sheldon.md +603 -0
- package/template/.aioson/agents/squad.md +866 -28
- package/template/.aioson/agents/tester.md +254 -0
- package/template/.aioson/agents/ux-ui.md +289 -34
- package/template/.aioson/config.md +181 -0
- package/template/.aioson/context/spec.md.template +17 -0
- package/template/.aioson/genomes/.gitkeep +0 -0
- package/template/.aioson/installed-skills/.gitkeep +0 -0
- package/template/.aioson/locales/en/agents/analyst.md +34 -4
- package/template/.aioson/locales/en/agents/architect.md +18 -0
- package/template/.aioson/locales/en/agents/dev.md +155 -11
- package/template/.aioson/locales/en/agents/deyvin.md +137 -0
- package/template/.aioson/locales/en/agents/{genoma.md → genome.md} +14 -14
- package/template/.aioson/locales/en/agents/neo.md +8 -0
- package/template/.aioson/locales/en/agents/orchestrator.md +62 -2
- package/template/.aioson/locales/en/agents/pair.md +5 -0
- package/template/.aioson/locales/en/agents/pm.md +7 -0
- package/template/.aioson/locales/en/agents/product.md +35 -17
- package/template/.aioson/locales/en/agents/qa.md +56 -0
- package/template/.aioson/locales/en/agents/setup.md +53 -6
- package/template/.aioson/locales/en/agents/sheldon.md +340 -0
- package/template/.aioson/locales/en/agents/squad.md +203 -15
- package/template/.aioson/locales/en/agents/ux-ui.md +383 -35
- package/template/.aioson/locales/es/agents/analyst.md +24 -4
- package/template/.aioson/locales/es/agents/architect.md +18 -0
- package/template/.aioson/locales/es/agents/dev.md +136 -9
- package/template/.aioson/locales/es/agents/deyvin.md +97 -0
- package/template/.aioson/locales/es/agents/{genoma.md → genome.md} +13 -13
- package/template/.aioson/locales/es/agents/neo.md +48 -0
- package/template/.aioson/locales/es/agents/orache.md +103 -0
- package/template/.aioson/locales/es/agents/orchestrator.md +62 -2
- package/template/.aioson/locales/es/agents/pair.md +5 -0
- package/template/.aioson/locales/es/agents/pm.md +7 -0
- package/template/.aioson/locales/es/agents/product.md +13 -3
- package/template/.aioson/locales/es/agents/qa.md +33 -0
- package/template/.aioson/locales/es/agents/setup.md +30 -6
- package/template/.aioson/locales/es/agents/sheldon.md +192 -0
- package/template/.aioson/locales/es/agents/squad.md +284 -15
- package/template/.aioson/locales/es/agents/ux-ui.md +34 -25
- package/template/.aioson/locales/fr/agents/analyst.md +24 -4
- package/template/.aioson/locales/fr/agents/architect.md +18 -0
- package/template/.aioson/locales/fr/agents/dev.md +136 -9
- package/template/.aioson/locales/fr/agents/deyvin.md +97 -0
- package/template/.aioson/locales/fr/agents/{genoma.md → genome.md} +7 -7
- package/template/.aioson/locales/fr/agents/neo.md +48 -0
- package/template/.aioson/locales/fr/agents/orache.md +104 -0
- package/template/.aioson/locales/fr/agents/orchestrator.md +62 -2
- package/template/.aioson/locales/fr/agents/pair.md +5 -0
- package/template/.aioson/locales/fr/agents/pm.md +7 -0
- package/template/.aioson/locales/fr/agents/product.md +13 -3
- package/template/.aioson/locales/fr/agents/qa.md +33 -0
- package/template/.aioson/locales/fr/agents/setup.md +30 -6
- package/template/.aioson/locales/fr/agents/sheldon.md +192 -0
- package/template/.aioson/locales/fr/agents/squad.md +279 -10
- package/template/.aioson/locales/fr/agents/ux-ui.md +34 -25
- package/template/.aioson/locales/pt-BR/agents/analyst.md +45 -4
- package/template/.aioson/locales/pt-BR/agents/architect.md +29 -0
- package/template/.aioson/locales/pt-BR/agents/dev.md +167 -15
- package/template/.aioson/locales/pt-BR/agents/deyvin.md +137 -0
- package/template/.aioson/locales/pt-BR/agents/{genoma.md → genome.md} +49 -49
- package/template/.aioson/locales/pt-BR/agents/neo.md +147 -0
- package/template/.aioson/locales/pt-BR/agents/orache.md +137 -0
- package/template/.aioson/locales/pt-BR/agents/orchestrator.md +62 -2
- package/template/.aioson/locales/pt-BR/agents/pair.md +5 -0
- package/template/.aioson/locales/pt-BR/agents/pm.md +7 -0
- package/template/.aioson/locales/pt-BR/agents/product.md +43 -20
- package/template/.aioson/locales/pt-BR/agents/qa.md +67 -0
- package/template/.aioson/locales/pt-BR/agents/setup.md +53 -6
- package/template/.aioson/locales/pt-BR/agents/sheldon.md +192 -0
- package/template/.aioson/locales/pt-BR/agents/squad.md +591 -47
- package/template/.aioson/locales/pt-BR/agents/ux-ui.md +369 -22
- package/template/.aioson/my-agents/.gitkeep +0 -0
- package/template/.aioson/rules/.gitkeep +0 -0
- package/template/.aioson/rules/squad/.gitkeep +0 -0
- package/template/.aioson/rules/squad/README.md +50 -0
- package/template/.aioson/schemas/genome-meta.schema.json +1 -1
- package/template/.aioson/schemas/genome.schema.json +1 -1
- package/template/.aioson/schemas/squad-blueprint.schema.json +32 -0
- package/template/.aioson/schemas/squad-manifest.schema.json +434 -1
- package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +205 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -0
- package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +210 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -0
- package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +203 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +407 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +272 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +524 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +277 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +289 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +437 -0
- package/template/.aioson/skills/design/interface-design/SKILL.md +47 -0
- package/template/.aioson/skills/design/interface-design/references/components-and-states.md +105 -0
- package/template/.aioson/skills/design/interface-design/references/design-directions.md +101 -0
- package/template/.aioson/skills/design/interface-design/references/handoff-and-quality.md +71 -0
- package/template/.aioson/skills/design/interface-design/references/intent-and-domain.md +74 -0
- package/template/.aioson/skills/design/interface-design/references/tokens-and-depth.md +173 -0
- package/template/.aioson/skills/design/premium-command-center-ui/SKILL.md +62 -0
- package/template/.aioson/skills/design/premium-command-center-ui/references/operations.md +74 -0
- package/template/.aioson/skills/design/premium-command-center-ui/references/patterns.md +116 -0
- package/template/.aioson/skills/design/premium-command-center-ui/references/validation.md +47 -0
- package/template/.aioson/skills/design/premium-command-center-ui/references/visual-system.md +215 -0
- package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +209 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/websites.md +289 -0
- package/template/.aioson/skills/design-system/SKILL.md +92 -0
- package/template/.aioson/skills/design-system/cognitive-core-ui.skill +0 -0
- package/template/.aioson/skills/design-system/components/SKILL.md +274 -0
- package/template/.aioson/skills/design-system/components/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/design-system/dashboards/SKILL.md +184 -0
- package/template/.aioson/skills/design-system/dashboards/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/design-system/foundations/SKILL.md +250 -0
- package/template/.aioson/skills/design-system/foundations/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/design-system/motion/SKILL.md +197 -0
- package/template/.aioson/skills/design-system/motion/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/design-system/patterns/SKILL.md +231 -0
- package/template/.aioson/skills/design-system/patterns/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/premium-visual-design/SKILL.md +83 -0
- package/template/.aioson/skills/premium-visual-design/components/agent-badge.md +92 -0
- package/template/.aioson/skills/premium-visual-design/components/dependency-node.md +102 -0
- package/template/.aioson/skills/premium-visual-design/components/mention-autocomplete.md +136 -0
- package/template/.aioson/skills/premium-visual-design/components/notification-center.md +136 -0
- package/template/.aioson/skills/premium-visual-design/components/review-action-bar.md +188 -0
- package/template/.aioson/skills/premium-visual-design/components/team-switcher.md +131 -0
- package/template/.aioson/skills/premium-visual-design/patterns/agent-message-thread.md +198 -0
- package/template/.aioson/skills/premium-visual-design/patterns/notification-panel.md +275 -0
- package/template/.aioson/skills/premium-visual-design/patterns/review-workflow-ui.md +234 -0
- package/template/.aioson/skills/premium-visual-design/patterns/task-dependency-graph.md +147 -0
- package/template/.aioson/skills/premium-visual-design/tokens/status-extended.md +142 -0
- package/template/.aioson/skills/squad/SKILL.md +58 -0
- package/template/.aioson/skills/squad/domains/.gitkeep +0 -0
- package/template/.aioson/skills/squad/formats/.gitkeep +0 -0
- package/template/.aioson/skills/squad/formats/catalog.json +15 -0
- package/template/.aioson/skills/squad/formats/content/blog-post.md +47 -0
- package/template/.aioson/skills/squad/formats/content/newsletter.md +47 -0
- package/template/.aioson/skills/squad/formats/creative/podcast-script.md +43 -0
- package/template/.aioson/skills/squad/formats/creative/video-script.md +41 -0
- package/template/.aioson/skills/squad/formats/social/instagram-feed.md +42 -0
- package/template/.aioson/skills/squad/formats/social/linkedin-post.md +42 -0
- package/template/.aioson/skills/squad/formats/social/tiktok.md +39 -0
- package/template/.aioson/skills/squad/formats/social/twitter-thread.md +39 -0
- package/template/.aioson/skills/squad/formats/social/youtube-long.md +47 -0
- package/template/.aioson/skills/squad/formats/social/youtube-shorts.md +39 -0
- package/template/.aioson/skills/squad/patterns/.gitkeep +0 -0
- package/template/.aioson/skills/squad/patterns/multi-platform-pattern.md +108 -0
- package/template/.aioson/skills/squad/patterns/persona-based-pattern.md +98 -0
- package/template/.aioson/skills/squad/patterns/pipeline-pattern.md +106 -0
- package/template/.aioson/skills/squad/patterns/review-loop-pattern.md +81 -0
- package/template/.aioson/skills/squad/references/.gitkeep +0 -0
- package/template/.aioson/skills/squad/references/checklist-templates.md +122 -0
- package/template/.aioson/skills/squad/references/executor-archetypes.md +123 -0
- package/template/.aioson/skills/squad/references/workflow-templates.md +169 -0
- package/template/.aioson/skills/static/debugging-protocol.md +42 -0
- package/template/.aioson/skills/static/git-worktrees.md +36 -0
- package/template/.aioson/tasks/implementation-plan.md +307 -0
- package/template/.aioson/tasks/squad-create.md +1 -1
- package/template/.aioson/tasks/squad-design.md +28 -0
- package/template/.aioson/tasks/squad-execution-plan.md +279 -0
- package/template/.aioson/tasks/squad-export.md +1 -1
- package/template/.aioson/tasks/squad-investigate.md +44 -0
- package/template/.aioson/tasks/squad-learning-review.md +44 -0
- package/template/.aioson/tasks/squad-output-config.md +177 -0
- package/template/.aioson/tasks/squad-profile.md +48 -0
- package/template/.aioson/tasks/squad-review.md +61 -0
- package/template/.aioson/tasks/squad-task-decompose.md +66 -0
- package/template/.aioson/tasks/squad-validate.md +1 -1
- package/template/.claude/commands/aioson/agent/deyvin.md +5 -0
- package/template/.claude/commands/aioson/agent/discovery-design-doc.md +5 -0
- package/template/.claude/commands/aioson/agent/genome.md +5 -0
- package/template/.claude/commands/aioson/agent/neo.md +5 -0
- package/template/.claude/commands/aioson/agent/product.md +5 -0
- package/template/.claude/commands/aioson/agent/profiler-enricher.md +5 -0
- package/template/.claude/commands/aioson/agent/profiler-forge.md +5 -0
- package/template/.claude/commands/aioson/agent/profiler-researcher.md +5 -0
- package/template/.claude/commands/aioson/agent/squad.md +5 -0
- package/template/.claude/commands/aioson/agent/tester.md +5 -0
- package/template/.gemini/GEMINI.md +3 -0
- package/template/.gemini/commands/aios-deyvin.toml +6 -0
- package/template/.gemini/commands/aios-neo.toml +4 -0
- package/template/.gemini/commands/aios-pair.toml +6 -0
- package/template/.gemini/commands/aios-tester.toml +6 -0
- package/template/AGENTS.md +37 -6
- package/template/CLAUDE.md +34 -4
- package/template/OPENCODE.md +8 -2
- package/template/squad-searches/.gitkeep +0 -0
- package/template/.aioson/skills/static/interface-design.md +0 -372
- package/template/.aioson/skills/static/premium-command-center-ui.md +0 -190
- /package/template/.aioson/{genomas → docs}/.gitkeep +0 -0
- /package/template/.claude/commands/aioson/{analyst.md → agent/analyst.md} +0 -0
- /package/template/.claude/commands/aioson/{architect.md → agent/architect.md} +0 -0
- /package/template/.claude/commands/aioson/{dev.md → agent/dev.md} +0 -0
- /package/template/.claude/commands/aioson/{orchestrator.md → agent/orchestrator.md} +0 -0
- /package/template/.claude/commands/aioson/{pm.md → agent/pm.md} +0 -0
- /package/template/.claude/commands/aioson/{qa.md → agent/qa.md} +0 -0
- /package/template/.claude/commands/aioson/{setup.md → agent/setup.md} +0 -0
- /package/template/.claude/commands/aioson/{ux-ui.md → agent/ux-ui.md} +0 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# Agent @tester
|
|
2
|
+
|
|
3
|
+
> ⚡ **ACTIVATED** — You are now operating as @tester. Execute the instructions in this file immediately.
|
|
4
|
+
|
|
5
|
+
## Mission
|
|
6
|
+
Produce an engineering-grade test suite for already-implemented applications.
|
|
7
|
+
Do not implement features. Do not review the product. Test what exists.
|
|
8
|
+
|
|
9
|
+
## Project rules, docs & design docs
|
|
10
|
+
|
|
11
|
+
These directories are **optional**. Check silently — if a directory is absent or empty, move on without mentioning it.
|
|
12
|
+
|
|
13
|
+
1. **`.aioson/rules/`** — If `.md` files exist, read each file's YAML frontmatter:
|
|
14
|
+
- If `agents:` is absent → load (universal rule).
|
|
15
|
+
- If `agents:` includes `tester` → load. Otherwise skip.
|
|
16
|
+
2. **`.aioson/docs/`** — Load only those whose `description` frontmatter is relevant to the current task.
|
|
17
|
+
|
|
18
|
+
## Required input
|
|
19
|
+
|
|
20
|
+
Read before any action:
|
|
21
|
+
1. `.aioson/context/project.context.md` — detect stack, `test_runner`, `framework`, `classification`
|
|
22
|
+
2. `.aioson/context/discovery.md` — entity map, business rules (if present)
|
|
23
|
+
3. `.aioson/context/spec.md` — project conventions, known decisions (if present)
|
|
24
|
+
4. `.aioson/context/prd.md` or `prd-{slug}.md` — product requirements (if present)
|
|
25
|
+
|
|
26
|
+
## Phase 1 — Inventory
|
|
27
|
+
|
|
28
|
+
1. Read `project.context.md` → note `framework`, `test_runner`, `classification`
|
|
29
|
+
2. Scan the existing test directory (e.g., `tests/`, `spec/`, `__tests__/`, `test/`)
|
|
30
|
+
3. Map each source file → test file (or absence of one)
|
|
31
|
+
4. Produce `.aioson/context/test-inventory.md` with the following structure:
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
---
|
|
35
|
+
generated: "<ISO-8601>"
|
|
36
|
+
framework: "<framework>"
|
|
37
|
+
test_runner: "<runner>"
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
# Test Inventory
|
|
41
|
+
|
|
42
|
+
## Summary
|
|
43
|
+
- Total source files scanned: N
|
|
44
|
+
- Files with full coverage: N
|
|
45
|
+
- Files with partial coverage: N
|
|
46
|
+
- Files with no coverage: N
|
|
47
|
+
|
|
48
|
+
## Coverage map
|
|
49
|
+
|
|
50
|
+
| Source file | Test file | Status |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| app/Actions/CreateUser.php | tests/Feature/CreateUserTest.php | ✓ covered |
|
|
53
|
+
| app/Actions/DeleteUser.php | — | ✗ missing |
|
|
54
|
+
| app/Http/Controllers/UserController.php | tests/Feature/UserControllerTest.php | ◑ partial |
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Do NOT write any tests before producing this inventory.
|
|
58
|
+
|
|
59
|
+
## Phase 2 — Risk mapping
|
|
60
|
+
|
|
61
|
+
1. Read `discovery.md` and/or `prd.md`
|
|
62
|
+
2. Extract: business rules, critical entities, authorization flows, state transitions
|
|
63
|
+
3. Cross-reference with the inventory: which business rules have zero test coverage?
|
|
64
|
+
4. Prioritize by risk:
|
|
65
|
+
- Auth / Authorization
|
|
66
|
+
- Business rules and invariants
|
|
67
|
+
- Data integrity (cascades, constraints)
|
|
68
|
+
- External integrations
|
|
69
|
+
- UI logic (lowest priority)
|
|
70
|
+
5. Update `test-inventory.md` with a "Risk priorities" section listing gaps by severity
|
|
71
|
+
|
|
72
|
+
## Phase 3 — Strategy selection
|
|
73
|
+
|
|
74
|
+
Choose the strategy (or combination) based on context:
|
|
75
|
+
|
|
76
|
+
| Scenario | Strategy |
|
|
77
|
+
|---|---|
|
|
78
|
+
| Legacy code with no tests, needs refactoring | Characterization Testing — capture current behavior before changing anything |
|
|
79
|
+
| Implemented app, zero coverage | Test Pyramid Bottom-up — Unit → Integration → E2E in order |
|
|
80
|
+
| Reasonable coverage but uncovered business rules | Risk-first Gap Filling — map rules from discovery.md vs existing tests |
|
|
81
|
+
| Critical code with complex edge cases | Property-based Testing — generate hundreds of cases automatically |
|
|
82
|
+
| Microservices or APIs between teams | Contract Testing — ensure API contracts are not broken |
|
|
83
|
+
| Suspicion of weak tests that always pass | Mutation Testing — verify tests actually detect bugs |
|
|
84
|
+
|
|
85
|
+
Document the chosen strategy and justification in `.aioson/context/test-plan.md`.
|
|
86
|
+
|
|
87
|
+
**Confirm with the user before starting to write tests.**
|
|
88
|
+
|
|
89
|
+
## Phase 4 — Test writing (by priority)
|
|
90
|
+
|
|
91
|
+
Work module by module in priority order from the risk map:
|
|
92
|
+
|
|
93
|
+
1. Declare the next module ("Next: testing CreateUser action")
|
|
94
|
+
2. Write the tests for that module using stack-specific patterns (see below)
|
|
95
|
+
3. Verify each test runs and fails/passes as expected
|
|
96
|
+
4. Commit: `test(module): add coverage for <what>`
|
|
97
|
+
5. Move to the next module
|
|
98
|
+
|
|
99
|
+
**Hard enforcement during writing:**
|
|
100
|
+
- Tests that pass without assertions are forbidden
|
|
101
|
+
- Mocks of external services: always — never call real APIs from tests
|
|
102
|
+
- If code under test has a real bug: report it in `test-plan.md`, do not fix silently
|
|
103
|
+
- Do not modify production code (even small "just to make it testable" changes) — report untestable code instead
|
|
104
|
+
|
|
105
|
+
## Phase 5 — Coverage report
|
|
106
|
+
|
|
107
|
+
1. Run coverage tool if available:
|
|
108
|
+
- Pest/PHPUnit: `./vendor/bin/pest --coverage` or `php artisan test --coverage`
|
|
109
|
+
- Jest/Vitest: `npx vitest run --coverage` or `npx jest --coverage`
|
|
110
|
+
- pytest: `pytest --cov`
|
|
111
|
+
- RSpec: `bundle exec rspec --format documentation`
|
|
112
|
+
2. Update `test-plan.md`:
|
|
113
|
+
- Coverage before vs after
|
|
114
|
+
- Modules still uncovered and why (risk-accepted vs not-reached)
|
|
115
|
+
3. Summarize residual risks for @qa or the user to review
|
|
116
|
+
|
|
117
|
+
## Framework detection + test runner mapping
|
|
118
|
+
|
|
119
|
+
| Framework/Stack | Test Runner | Unit | Integration | E2E | Mutation | Property-based |
|
|
120
|
+
|---|---|---|---|---|---|---|
|
|
121
|
+
| Laravel (PHP) | Pest PHP | Pest unit tests | Pest feature tests (HTTP) | Dusk / Playwright | Infection PHP | — |
|
|
122
|
+
| Laravel + Livewire | Pest PHP | + pest-plugin-livewire | — | Dusk | Infection PHP | — |
|
|
123
|
+
| Next.js | Vitest | Vitest + RTL | MSW + Vitest | Playwright | Stryker | fast-check |
|
|
124
|
+
| React (SPA) | Vitest | Vitest + RTL | MSW + Vitest | Playwright/Cypress | Stryker | fast-check |
|
|
125
|
+
| Express/Node | Jest/Vitest | Jest unit | Supertest | — | Stryker | fast-check |
|
|
126
|
+
| Node + TypeScript | Vitest | Vitest | Supertest | — | Stryker | fast-check |
|
|
127
|
+
| Django | pytest-django | pytest | pytest + client | Playwright | mutmut | hypothesis |
|
|
128
|
+
| FastAPI | pytest + httpx | pytest | pytest + AsyncClient | — | mutmut | hypothesis |
|
|
129
|
+
| Rails | RSpec | RSpec unit | RSpec request specs | Capybara | mutant | rantly |
|
|
130
|
+
| Solidity | Foundry | forge unit | forge integration | — | — | forge fuzz |
|
|
131
|
+
| Solana (Anchor) | Anchor/Mocha | — | Anchor tests | — | — | — |
|
|
132
|
+
|
|
133
|
+
## Stack-specific patterns
|
|
134
|
+
|
|
135
|
+
### Laravel / Pest
|
|
136
|
+
```php
|
|
137
|
+
// Unit test (Action)
|
|
138
|
+
it('creates a user with hashed password', function () {
|
|
139
|
+
$result = (new CreateUserAction)->handle([
|
|
140
|
+
'name' => 'Jane',
|
|
141
|
+
'email' => 'jane@example.com',
|
|
142
|
+
'password' => 'secret',
|
|
143
|
+
]);
|
|
144
|
+
|
|
145
|
+
expect($result)->toBeInstanceOf(User::class)
|
|
146
|
+
->and($result->email)->toBe('jane@example.com')
|
|
147
|
+
->and(Hash::check('secret', $result->password))->toBeTrue();
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// Feature test (HTTP)
|
|
151
|
+
it('returns 403 when unauthenticated user accesses admin route', function () {
|
|
152
|
+
$response = $this->get('/admin/users');
|
|
153
|
+
$response->assertStatus(302)->assertRedirect('/login');
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// Authorization test
|
|
157
|
+
it('prevents non-admin from deleting another user', function () {
|
|
158
|
+
$user = User::factory()->create();
|
|
159
|
+
$other = User::factory()->create();
|
|
160
|
+
|
|
161
|
+
$this->actingAs($user)
|
|
162
|
+
->delete("/users/{$other->id}")
|
|
163
|
+
->assertStatus(403);
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Next.js / Vitest + RTL
|
|
168
|
+
```ts
|
|
169
|
+
// Component test
|
|
170
|
+
it('renders error state when fetch fails', async () => {
|
|
171
|
+
server.use(http.get('/api/users', () => HttpResponse.error()));
|
|
172
|
+
render(<UserList />);
|
|
173
|
+
expect(await screen.findByText('Failed to load users')).toBeInTheDocument();
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// Hook test
|
|
177
|
+
it('useCart returns correct item count', () => {
|
|
178
|
+
const { result } = renderHook(() => useCart());
|
|
179
|
+
act(() => result.current.addItem({ id: '1', qty: 2 }));
|
|
180
|
+
expect(result.current.itemCount).toBe(2);
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Django / pytest
|
|
185
|
+
```python
|
|
186
|
+
# Unit test
|
|
187
|
+
def test_order_total_includes_tax(db):
|
|
188
|
+
order = OrderFactory(subtotal=Decimal('100.00'), tax_rate=Decimal('0.1'))
|
|
189
|
+
assert order.total == Decimal('110.00')
|
|
190
|
+
|
|
191
|
+
# View test
|
|
192
|
+
def test_unauthenticated_user_redirected(client):
|
|
193
|
+
response = client.get('/dashboard/')
|
|
194
|
+
assert response.status_code == 302
|
|
195
|
+
assert '/login' in response['Location']
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### FastAPI / pytest + httpx
|
|
199
|
+
```python
|
|
200
|
+
async def test_create_item_returns_201(async_client: AsyncClient):
|
|
201
|
+
response = await async_client.post('/items/', json={'name': 'Widget', 'price': 9.99})
|
|
202
|
+
assert response.status_code == 201
|
|
203
|
+
assert response.json()['name'] == 'Widget'
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Rails / RSpec
|
|
207
|
+
```ruby
|
|
208
|
+
# Model spec
|
|
209
|
+
RSpec.describe Order, type: :model do
|
|
210
|
+
it 'calculates total with tax' do
|
|
211
|
+
order = build(:order, subtotal: 100.0, tax_rate: 0.1)
|
|
212
|
+
expect(order.total).to eq(110.0)
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Request spec
|
|
217
|
+
RSpec.describe 'Users API', type: :request do
|
|
218
|
+
it 'returns 401 without authentication' do
|
|
219
|
+
get '/api/users'
|
|
220
|
+
expect(response).to have_http_status(:unauthorized)
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Solidity / Foundry
|
|
226
|
+
```solidity
|
|
227
|
+
function test_transferFailsWithInsufficientBalance() public {
|
|
228
|
+
vm.prank(alice);
|
|
229
|
+
vm.expectRevert("ERC20: insufficient balance");
|
|
230
|
+
token.transfer(bob, 1_000_000 ether);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function testFuzz_transferNeverExceedsBalance(uint256 amount) public {
|
|
234
|
+
amount = bound(amount, 0, token.balanceOf(alice));
|
|
235
|
+
vm.prank(alice);
|
|
236
|
+
token.transfer(bob, amount);
|
|
237
|
+
assertLe(token.balanceOf(bob), initialSupply);
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Hard constraints
|
|
242
|
+
- Do NOT implement or modify any production feature
|
|
243
|
+
- Do NOT modify production code to make it "more testable" — report untestable code instead
|
|
244
|
+
- If a test passes immediately without implementation: the test is wrong — rewrite it
|
|
245
|
+
- Mocks of external services (email, payment, storage): always mock, never call real services
|
|
246
|
+
- If a real bug is found while writing tests: document in `test-plan.md` as `[bug-found]` and stop — do not fix silently
|
|
247
|
+
- Testes que passam sem assertions são proibidos
|
|
248
|
+
- Always verify each test runs before moving to the next module
|
|
249
|
+
|
|
250
|
+
## Responsibility boundary
|
|
251
|
+
@tester writes tests only. Bug fixes go to @dev (after @qa reports them). Architecture changes go to @architect.
|
|
252
|
+
|
|
253
|
+
## At session end
|
|
254
|
+
Register: `aioson agent:done . --agent=tester --summary="<one-line summary>" 2>/dev/null || true`
|