agileflow 3.4.2 → 4.0.0-alpha.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 +235 -494
- package/README.md +22 -114
- package/bin/agileflow.js +15 -0
- package/bin/hooks/pre-bash.js +35 -0
- package/bin/hooks/pre-compact.js +34 -0
- package/bin/hooks/pre-edit.js +32 -0
- package/bin/hooks/pre-write.js +32 -0
- package/bin/hooks/session-start.js +42 -0
- package/bin/hooks/stop.js +34 -0
- package/content/plugins/ads/plugin.yaml +14 -0
- package/content/plugins/audit/plugin.yaml +14 -0
- package/content/plugins/core/hooks/session-welcome.js +19 -0
- package/content/plugins/core/plugin.yaml +34 -0
- package/content/plugins/core/skills/agileflow-adr/SKILL.md +179 -0
- package/content/plugins/core/skills/agileflow-babysit-mentor/SKILL.md +144 -0
- package/content/plugins/core/skills/agileflow-epic-planner/SKILL.md +179 -0
- package/content/plugins/core/skills/agileflow-status-updater/SKILL.md +132 -0
- package/content/plugins/core/skills/agileflow-story-writer/SKILL.md +200 -0
- package/content/plugins/council/plugin.yaml +14 -0
- package/content/plugins/seo/plugin.yaml +14 -0
- package/package.json +29 -49
- package/src/cli/commands/doctor.js +159 -0
- package/src/cli/commands/hook.js +80 -0
- package/src/cli/commands/setup.js +254 -0
- package/src/cli/commands/status.js +47 -0
- package/src/cli/commands/update.js +82 -0
- package/src/cli/index.js +73 -0
- package/src/cli/wizard/ide-picker.js +57 -0
- package/src/cli/wizard/personalization.js +64 -0
- package/src/cli/wizard/plugin-picker.js +106 -0
- package/src/lib/hash.js +41 -0
- package/src/runtime/config/defaults.js +45 -0
- package/src/runtime/config/loader.js +118 -0
- package/src/runtime/config/schema.json +76 -0
- package/src/runtime/config/writer.js +54 -0
- package/src/runtime/hooks/aggregator.js +133 -0
- package/src/runtime/hooks/chain.js +93 -0
- package/src/runtime/hooks/logger.js +68 -0
- package/src/runtime/hooks/manifest-loader.js +228 -0
- package/src/runtime/hooks/orchestrator.js +322 -0
- package/src/runtime/ide/capabilities.js +111 -0
- package/src/runtime/ide/claude-code-settings.js +234 -0
- package/src/runtime/ide/claude-code-skills.js +202 -0
- package/src/runtime/installer/file-index.js +112 -0
- package/src/runtime/installer/install.js +306 -0
- package/src/runtime/installer/stash.js +61 -0
- package/src/runtime/installer/sync-engine.js +205 -0
- package/src/runtime/plugins/registry.js +132 -0
- package/src/runtime/plugins/resolver.js +138 -0
- package/src/runtime/plugins/validator.js +196 -0
- package/src/runtime/skills/validator.js +335 -0
- package/lib/README.md +0 -178
- package/lib/api-routes.js +0 -625
- package/lib/api-server.js +0 -278
- package/lib/cache-provider.js +0 -155
- package/lib/claude-cli-bridge.js +0 -215
- package/lib/codebase-indexer.js +0 -819
- package/lib/colors.generated.js +0 -117
- package/lib/colors.js +0 -341
- package/lib/consent.js +0 -232
- package/lib/content-sanitizer.js +0 -464
- package/lib/correlation.js +0 -277
- package/lib/dashboard-automations.js +0 -130
- package/lib/dashboard-git.js +0 -254
- package/lib/dashboard-inbox.js +0 -64
- package/lib/dashboard-protocol.js +0 -605
- package/lib/dashboard-server.js +0 -1296
- package/lib/dashboard-session.js +0 -136
- package/lib/dashboard-status.js +0 -72
- package/lib/dashboard-terminal.js +0 -354
- package/lib/dashboard-websocket.js +0 -88
- package/lib/drivers/claude-driver.ts +0 -312
- package/lib/drivers/codex-driver.ts +0 -464
- package/lib/drivers/driver-manager.ts +0 -159
- package/lib/drivers/gemini-driver.ts +0 -498
- package/lib/drivers/index.ts +0 -17
- package/lib/error-codes.js +0 -590
- package/lib/errors.js +0 -670
- package/lib/feature-flags.js +0 -171
- package/lib/feedback.js +0 -595
- package/lib/file-cache.js +0 -541
- package/lib/flag-detection.js +0 -344
- package/lib/format-error.js +0 -156
- package/lib/gate-runner.js +0 -282
- package/lib/generator-factory.js +0 -333
- package/lib/git-operations.js +0 -266
- package/lib/lazy-require.js +0 -59
- package/lib/lock-file.js +0 -144
- package/lib/logger.js +0 -106
- package/lib/merge-operations.js +0 -1006
- package/lib/path-resolver.js +0 -544
- package/lib/path-utils.js +0 -49
- package/lib/paths.js +0 -291
- package/lib/placeholder-registry.js +0 -822
- package/lib/process-executor.js +0 -214
- package/lib/progress.js +0 -334
- package/lib/protocol/driver.ts +0 -354
- package/lib/protocol/index.ts +0 -12
- package/lib/protocol/ir.ts +0 -271
- package/lib/registry-cache.js +0 -80
- package/lib/registry-di.js +0 -358
- package/lib/result-schema.js +0 -363
- package/lib/result.js +0 -210
- package/lib/session-display.js +0 -331
- package/lib/session-operations.js +0 -611
- package/lib/session-registry.js +0 -484
- package/lib/session-state-machine.js +0 -465
- package/lib/session-switching.js +0 -191
- package/lib/skill-loader.js +0 -213
- package/lib/smart-json-file.js +0 -682
- package/lib/state-machine.js +0 -286
- package/lib/table-formatter.js +0 -519
- package/lib/template-loader.js +0 -143
- package/lib/transient-status.js +0 -374
- package/lib/ui-manager.js +0 -612
- package/lib/validate-args.js +0 -213
- package/lib/validate-commands.js +0 -308
- package/lib/validate-names.js +0 -143
- package/lib/validate-paths.js +0 -434
- package/lib/validate.js +0 -134
- package/lib/worktree-operations.js +0 -201
- package/lib/yaml-utils.js +0 -164
- package/scripts/README.md +0 -267
- package/scripts/af +0 -34
- package/scripts/agent-loop.js +0 -819
- package/scripts/agileflow-configure.js +0 -368
- package/scripts/agileflow-statusline.sh +0 -857
- package/scripts/agileflow-welcome.js +0 -2246
- package/scripts/api-server-runner.js +0 -177
- package/scripts/archive-completed-stories.sh +0 -308
- package/scripts/auto-self-improve.js +0 -326
- package/scripts/automation-run-due.js +0 -128
- package/scripts/babysit-clear-restore.js +0 -154
- package/scripts/babysit-context-restore.js +0 -89
- package/scripts/backfill-ideation-status.js +0 -128
- package/scripts/batch-pmap-loop.js +0 -551
- package/scripts/check-update.js +0 -282
- package/scripts/ci-summary.js +0 -294
- package/scripts/claude-smart.sh +0 -85
- package/scripts/claude-tmux.sh +0 -737
- package/scripts/claude-watchdog.sh +0 -225
- package/scripts/clear-active-command.js +0 -48
- package/scripts/compress-status.sh +0 -116
- package/scripts/context-loader.js +0 -310
- package/scripts/damage-control/bash-tool-damage-control.js +0 -22
- package/scripts/damage-control/edit-tool-damage-control.js +0 -19
- package/scripts/damage-control/patterns.yaml +0 -227
- package/scripts/damage-control/write-tool-damage-control.js +0 -19
- package/scripts/damage-control-bash.js +0 -51
- package/scripts/damage-control-edit.js +0 -48
- package/scripts/damage-control-multi-agent.js +0 -231
- package/scripts/damage-control-write.js +0 -48
- package/scripts/dashboard-serve.js +0 -336
- package/scripts/dependency-check.js +0 -311
- package/scripts/document-repl.js +0 -793
- package/scripts/expertise-metrics.sh +0 -264
- package/scripts/generate-all.sh +0 -77
- package/scripts/generate-colors.js +0 -314
- package/scripts/generators/agent-registry.js +0 -183
- package/scripts/generators/command-registry.js +0 -166
- package/scripts/generators/index.js +0 -85
- package/scripts/generators/inject-babysit.js +0 -191
- package/scripts/generators/inject-help.js +0 -125
- package/scripts/generators/inject-readme.js +0 -166
- package/scripts/generators/skill-registry.js +0 -188
- package/scripts/get-env.js +0 -225
- package/scripts/init.sh +0 -76
- package/scripts/lib/README-portable-tasks.md +0 -424
- package/scripts/lib/ac-test-matcher.js +0 -452
- package/scripts/lib/audit-cleanup.js +0 -250
- package/scripts/lib/audit-registry.js +0 -340
- package/scripts/lib/automation-registry.js +0 -544
- package/scripts/lib/automation-runner.js +0 -476
- package/scripts/lib/browser-qa-evidence.js +0 -409
- package/scripts/lib/browser-qa-status.js +0 -192
- package/scripts/lib/bus-utils.js +0 -473
- package/scripts/lib/colors.generated.sh +0 -82
- package/scripts/lib/colors.sh +0 -46
- package/scripts/lib/command-prereqs.js +0 -280
- package/scripts/lib/concurrency-limiter.js +0 -511
- package/scripts/lib/configure-detect.js +0 -596
- package/scripts/lib/configure-features.js +0 -1927
- package/scripts/lib/configure-repair.js +0 -327
- package/scripts/lib/configure-utils.js +0 -114
- package/scripts/lib/context-formatter.js +0 -1158
- package/scripts/lib/context-loader.js +0 -840
- package/scripts/lib/counter.js +0 -103
- package/scripts/lib/damage-control-utils.js +0 -619
- package/scripts/lib/feature-catalog.js +0 -332
- package/scripts/lib/file-lock.js +0 -392
- package/scripts/lib/file-tracking.js +0 -735
- package/scripts/lib/frontmatter-parser.js +0 -133
- package/scripts/lib/gate-enforcer.js +0 -295
- package/scripts/lib/hook-metrics.js +0 -324
- package/scripts/lib/ideation-index.js +0 -1205
- package/scripts/lib/json-utils.sh +0 -162
- package/scripts/lib/lifecycle-detector.js +0 -125
- package/scripts/lib/model-profiles.js +0 -118
- package/scripts/lib/portable-tasks-cli.js +0 -274
- package/scripts/lib/portable-tasks.js +0 -479
- package/scripts/lib/process-cleanup.js +0 -527
- package/scripts/lib/quality-gates.js +0 -761
- package/scripts/lib/scale-detector.js +0 -396
- package/scripts/lib/sessionRegistry.js +0 -678
- package/scripts/lib/signal-detectors.js +0 -880
- package/scripts/lib/skill-catalog.js +0 -557
- package/scripts/lib/skill-recommender.js +0 -311
- package/scripts/lib/state-migrator.js +0 -353
- package/scripts/lib/status-task-bridge.js +0 -522
- package/scripts/lib/status-writer.js +0 -255
- package/scripts/lib/story-claiming.js +0 -704
- package/scripts/lib/story-state-machine.js +0 -437
- package/scripts/lib/sync-ideation-status.js +0 -291
- package/scripts/lib/task-registry-cache.js +0 -490
- package/scripts/lib/task-registry.js +0 -1191
- package/scripts/lib/task-sync.js +0 -230
- package/scripts/lib/tdd-phase-manager.js +0 -455
- package/scripts/lib/team-events.js +0 -510
- package/scripts/lib/tmux-audit-monitor.js +0 -611
- package/scripts/lib/tmux-group-colors.js +0 -113
- package/scripts/lib/tool-registry.yaml +0 -241
- package/scripts/lib/tool-shed.js +0 -441
- package/scripts/lib/validation-registry.js +0 -177
- package/scripts/messaging-bridge.js +0 -561
- package/scripts/migrate-ideation-index.js +0 -553
- package/scripts/native-team-observer.js +0 -219
- package/scripts/obtain-context.js +0 -272
- package/scripts/pre-push-check.sh +0 -46
- package/scripts/precompact-context.sh +0 -306
- package/scripts/query-codebase.js +0 -543
- package/scripts/ralph-loop.js +0 -1278
- package/scripts/resume-session.sh +0 -121
- package/scripts/screenshot-verifier.js +0 -215
- package/scripts/session-boundary.js +0 -138
- package/scripts/session-coordinator.sh +0 -232
- package/scripts/session-manager.js +0 -546
- package/scripts/smart-detect.js +0 -449
- package/scripts/spawn-audit-sessions.js +0 -877
- package/scripts/spawn-parallel.js +0 -751
- package/scripts/strip-ai-attribution.js +0 -63
- package/scripts/task-completed-gate.js +0 -237
- package/scripts/team-manager.js +0 -596
- package/scripts/team-status-display.js +0 -200
- package/scripts/teammate-idle-gate.js +0 -237
- package/scripts/test-session-boundary.js +0 -80
- package/scripts/tmux-close-windows.sh +0 -180
- package/scripts/tmux-restore-window.sh +0 -67
- package/scripts/tmux-save-closed-window.sh +0 -35
- package/scripts/tui/App.js +0 -151
- package/scripts/tui/Dashboard.js +0 -277
- package/scripts/tui/blessed/data/watcher.js +0 -180
- package/scripts/tui/blessed/index.js +0 -244
- package/scripts/tui/blessed/panels/output.js +0 -101
- package/scripts/tui/blessed/panels/sessions.js +0 -150
- package/scripts/tui/blessed/panels/trace.js +0 -97
- package/scripts/tui/blessed/ui/help.js +0 -77
- package/scripts/tui/blessed/ui/screen.js +0 -52
- package/scripts/tui/blessed/ui/statusbar.js +0 -47
- package/scripts/tui/blessed/ui/tabbar.js +0 -99
- package/scripts/tui/index.js +0 -70
- package/scripts/tui/lib/crashRecovery.js +0 -304
- package/scripts/tui/lib/eventStream.js +0 -309
- package/scripts/tui/lib/keyboard.js +0 -261
- package/scripts/tui/lib/loopControl.js +0 -371
- package/scripts/tui/panels/OutputPanel.js +0 -240
- package/scripts/tui/panels/SessionPanel.js +0 -170
- package/scripts/tui/panels/TracePanel.js +0 -298
- package/scripts/tui/simple-tui.js +0 -510
- package/scripts/validate-expertise.sh +0 -263
- package/scripts/validate-tokens.sh +0 -73
- package/scripts/validators/README.md +0 -143
- package/scripts/validators/component-validator.js +0 -239
- package/scripts/validators/json-schema-validator.js +0 -186
- package/scripts/validators/markdown-validator.js +0 -152
- package/scripts/validators/migration-validator.js +0 -129
- package/scripts/validators/security-validator.js +0 -380
- package/scripts/validators/story-format-validator.js +0 -197
- package/scripts/validators/test-result-validator.js +0 -114
- package/scripts/validators/workflow-validator.js +0 -247
- package/scripts/welcome-deferred.js +0 -437
- package/scripts/worktree-create.sh +0 -111
- package/src/core/agents/a11y-analyzer-aria.md +0 -155
- package/src/core/agents/a11y-analyzer-forms.md +0 -162
- package/src/core/agents/a11y-analyzer-keyboard.md +0 -175
- package/src/core/agents/a11y-analyzer-semantic.md +0 -153
- package/src/core/agents/a11y-analyzer-visual.md +0 -158
- package/src/core/agents/a11y-consensus.md +0 -248
- package/src/core/agents/accessibility.md +0 -515
- package/src/core/agents/adr-writer.md +0 -463
- package/src/core/agents/ads-audit-budget.md +0 -181
- package/src/core/agents/ads-audit-compliance.md +0 -169
- package/src/core/agents/ads-audit-creative.md +0 -164
- package/src/core/agents/ads-audit-google.md +0 -226
- package/src/core/agents/ads-audit-meta.md +0 -183
- package/src/core/agents/ads-audit-tracking.md +0 -197
- package/src/core/agents/ads-consensus.md +0 -396
- package/src/core/agents/ads-generate.md +0 -145
- package/src/core/agents/ads-performance-tracker.md +0 -197
- package/src/core/agents/analytics.md +0 -617
- package/src/core/agents/api-quality-analyzer-conventions.md +0 -148
- package/src/core/agents/api-quality-analyzer-docs.md +0 -176
- package/src/core/agents/api-quality-analyzer-errors.md +0 -183
- package/src/core/agents/api-quality-analyzer-pagination.md +0 -171
- package/src/core/agents/api-quality-analyzer-versioning.md +0 -143
- package/src/core/agents/api-quality-consensus.md +0 -214
- package/src/core/agents/api-validator.md +0 -183
- package/src/core/agents/api.md +0 -665
- package/src/core/agents/arch-analyzer-circular.md +0 -148
- package/src/core/agents/arch-analyzer-complexity.md +0 -171
- package/src/core/agents/arch-analyzer-coupling.md +0 -146
- package/src/core/agents/arch-analyzer-layering.md +0 -151
- package/src/core/agents/arch-analyzer-patterns.md +0 -162
- package/src/core/agents/arch-consensus.md +0 -227
- package/src/core/agents/brainstorm-analyzer-features.md +0 -169
- package/src/core/agents/brainstorm-analyzer-growth.md +0 -161
- package/src/core/agents/brainstorm-analyzer-integration.md +0 -172
- package/src/core/agents/brainstorm-analyzer-market.md +0 -147
- package/src/core/agents/brainstorm-analyzer-ux.md +0 -167
- package/src/core/agents/brainstorm-consensus.md +0 -237
- package/src/core/agents/browser-qa.md +0 -328
- package/src/core/agents/ci.md +0 -511
- package/src/core/agents/code-reviewer.md +0 -288
- package/src/core/agents/codebase-query.md +0 -266
- package/src/core/agents/completeness-analyzer-api.md +0 -190
- package/src/core/agents/completeness-analyzer-conditional.md +0 -201
- package/src/core/agents/completeness-analyzer-handlers.md +0 -159
- package/src/core/agents/completeness-analyzer-imports.md +0 -159
- package/src/core/agents/completeness-analyzer-routes.md +0 -182
- package/src/core/agents/completeness-analyzer-state.md +0 -188
- package/src/core/agents/completeness-analyzer-stubs.md +0 -198
- package/src/core/agents/completeness-consensus.md +0 -286
- package/src/core/agents/compliance.md +0 -509
- package/src/core/agents/council-advocate.md +0 -206
- package/src/core/agents/council-analyst.md +0 -252
- package/src/core/agents/council-optimist.md +0 -170
- package/src/core/agents/database.md +0 -601
- package/src/core/agents/datamigration.md +0 -699
- package/src/core/agents/design.md +0 -525
- package/src/core/agents/devops.md +0 -720
- package/src/core/agents/documentation.md +0 -504
- package/src/core/agents/epic-planner.md +0 -480
- package/src/core/agents/error-analyzer.md +0 -201
- package/src/core/agents/integrations.md +0 -603
- package/src/core/agents/legal-analyzer-a11y.md +0 -110
- package/src/core/agents/legal-analyzer-ai.md +0 -117
- package/src/core/agents/legal-analyzer-consumer.md +0 -108
- package/src/core/agents/legal-analyzer-content.md +0 -113
- package/src/core/agents/legal-analyzer-international.md +0 -115
- package/src/core/agents/legal-analyzer-licensing.md +0 -115
- package/src/core/agents/legal-analyzer-privacy.md +0 -108
- package/src/core/agents/legal-analyzer-security.md +0 -112
- package/src/core/agents/legal-analyzer-terms.md +0 -111
- package/src/core/agents/legal-consensus.md +0 -242
- package/src/core/agents/logic-analyzer-edge.md +0 -170
- package/src/core/agents/logic-analyzer-flow.md +0 -253
- package/src/core/agents/logic-analyzer-invariant.md +0 -206
- package/src/core/agents/logic-analyzer-race.md +0 -266
- package/src/core/agents/logic-analyzer-type.md +0 -217
- package/src/core/agents/logic-consensus.md +0 -253
- package/src/core/agents/mentor.md +0 -654
- package/src/core/agents/mobile.md +0 -501
- package/src/core/agents/monitoring.md +0 -537
- package/src/core/agents/multi-expert.md +0 -311
- package/src/core/agents/orchestrator.md +0 -749
- package/src/core/agents/perf-analyzer-assets.md +0 -174
- package/src/core/agents/perf-analyzer-bundle.md +0 -165
- package/src/core/agents/perf-analyzer-caching.md +0 -160
- package/src/core/agents/perf-analyzer-compute.md +0 -165
- package/src/core/agents/perf-analyzer-memory.md +0 -182
- package/src/core/agents/perf-analyzer-network.md +0 -157
- package/src/core/agents/perf-analyzer-queries.md +0 -155
- package/src/core/agents/perf-analyzer-rendering.md +0 -156
- package/src/core/agents/perf-consensus.md +0 -280
- package/src/core/agents/performance.md +0 -492
- package/src/core/agents/product.md +0 -535
- package/src/core/agents/qa.md +0 -765
- package/src/core/agents/readme-updater.md +0 -579
- package/src/core/agents/refactor.md +0 -558
- package/src/core/agents/research.md +0 -453
- package/src/core/agents/rlm-subcore.md +0 -207
- package/src/core/agents/schema-validator.md +0 -454
- package/src/core/agents/security-analyzer-api.md +0 -199
- package/src/core/agents/security-analyzer-auth.md +0 -160
- package/src/core/agents/security-analyzer-authz.md +0 -168
- package/src/core/agents/security-analyzer-deps.md +0 -147
- package/src/core/agents/security-analyzer-infra.md +0 -176
- package/src/core/agents/security-analyzer-injection.md +0 -148
- package/src/core/agents/security-analyzer-input.md +0 -191
- package/src/core/agents/security-analyzer-secrets.md +0 -175
- package/src/core/agents/security-consensus.md +0 -276
- package/src/core/agents/security.md +0 -486
- package/src/core/agents/seo-analyzer-content.md +0 -167
- package/src/core/agents/seo-analyzer-images.md +0 -187
- package/src/core/agents/seo-analyzer-performance.md +0 -206
- package/src/core/agents/seo-analyzer-schema.md +0 -176
- package/src/core/agents/seo-analyzer-sitemap.md +0 -172
- package/src/core/agents/seo-analyzer-technical.md +0 -144
- package/src/core/agents/seo-consensus.md +0 -289
- package/src/core/agents/team-coordinator.md +0 -333
- package/src/core/agents/team-lead.md +0 -171
- package/src/core/agents/test-analyzer-assertions.md +0 -181
- package/src/core/agents/test-analyzer-coverage.md +0 -183
- package/src/core/agents/test-analyzer-fragility.md +0 -185
- package/src/core/agents/test-analyzer-integration.md +0 -155
- package/src/core/agents/test-analyzer-maintenance.md +0 -173
- package/src/core/agents/test-analyzer-mocking.md +0 -178
- package/src/core/agents/test-analyzer-patterns.md +0 -189
- package/src/core/agents/test-analyzer-structure.md +0 -177
- package/src/core/agents/test-consensus.md +0 -294
- package/src/core/agents/testing.md +0 -527
- package/src/core/agents/ui-validator.md +0 -331
- package/src/core/agents/ui.md +0 -1227
- package/src/core/commands/adr/list.md +0 -191
- package/src/core/commands/adr/update.md +0 -258
- package/src/core/commands/adr/view.md +0 -274
- package/src/core/commands/adr.md +0 -394
- package/src/core/commands/ads/audit.md +0 -437
- package/src/core/commands/ads/budget.md +0 -97
- package/src/core/commands/ads/competitor.md +0 -112
- package/src/core/commands/ads/creative.md +0 -85
- package/src/core/commands/ads/generate.md +0 -238
- package/src/core/commands/ads/google.md +0 -112
- package/src/core/commands/ads/health.md +0 -327
- package/src/core/commands/ads/landing.md +0 -119
- package/src/core/commands/ads/linkedin.md +0 -112
- package/src/core/commands/ads/meta.md +0 -91
- package/src/core/commands/ads/microsoft.md +0 -115
- package/src/core/commands/ads/plan.md +0 -321
- package/src/core/commands/ads/test-plan.md +0 -317
- package/src/core/commands/ads/tiktok.md +0 -129
- package/src/core/commands/ads/track.md +0 -288
- package/src/core/commands/ads/youtube.md +0 -124
- package/src/core/commands/ads.md +0 -140
- package/src/core/commands/agent.md +0 -256
- package/src/core/commands/api.md +0 -267
- package/src/core/commands/assign.md +0 -369
- package/src/core/commands/audit.md +0 -531
- package/src/core/commands/auto.md +0 -556
- package/src/core/commands/automate.md +0 -415
- package/src/core/commands/babysit.md +0 -643
- package/src/core/commands/baseline.md +0 -743
- package/src/core/commands/batch.md +0 -551
- package/src/core/commands/blockers.md +0 -602
- package/src/core/commands/board.md +0 -509
- package/src/core/commands/browser-qa.md +0 -240
- package/src/core/commands/changelog.md +0 -582
- package/src/core/commands/choose.md +0 -430
- package/src/core/commands/ci.md +0 -330
- package/src/core/commands/code/accessibility.md +0 -347
- package/src/core/commands/code/api.md +0 -297
- package/src/core/commands/code/architecture.md +0 -297
- package/src/core/commands/code/completeness.md +0 -503
- package/src/core/commands/code/legal.md +0 -493
- package/src/core/commands/code/logic.md +0 -416
- package/src/core/commands/code/performance.md +0 -490
- package/src/core/commands/code/security.md +0 -493
- package/src/core/commands/code/test.md +0 -489
- package/src/core/commands/compress.md +0 -408
- package/src/core/commands/configure.md +0 -1159
- package/src/core/commands/context/export.md +0 -296
- package/src/core/commands/context/full.md +0 -353
- package/src/core/commands/context/note.md +0 -380
- package/src/core/commands/council.md +0 -592
- package/src/core/commands/debt.md +0 -491
- package/src/core/commands/deploy.md +0 -864
- package/src/core/commands/deps.md +0 -728
- package/src/core/commands/diagnose.md +0 -404
- package/src/core/commands/docs.md +0 -469
- package/src/core/commands/epic/edit.md +0 -213
- package/src/core/commands/epic/list.md +0 -190
- package/src/core/commands/epic/view.md +0 -267
- package/src/core/commands/epic.md +0 -477
- package/src/core/commands/export.md +0 -238
- package/src/core/commands/feedback.md +0 -603
- package/src/core/commands/handoff.md +0 -386
- package/src/core/commands/help.md +0 -194
- package/src/core/commands/ideate/brief.md +0 -363
- package/src/core/commands/ideate/discover.md +0 -399
- package/src/core/commands/ideate/features.md +0 -496
- package/src/core/commands/ideate/history.md +0 -403
- package/src/core/commands/ideate/new.md +0 -899
- package/src/core/commands/impact.md +0 -407
- package/src/core/commands/install.md +0 -529
- package/src/core/commands/learn/explain.md +0 -118
- package/src/core/commands/learn/glossary.md +0 -135
- package/src/core/commands/learn/patterns.md +0 -138
- package/src/core/commands/learn/tour.md +0 -126
- package/src/core/commands/maintain.md +0 -558
- package/src/core/commands/metrics.md +0 -844
- package/src/core/commands/migrate/codemods.md +0 -151
- package/src/core/commands/migrate/plan.md +0 -131
- package/src/core/commands/migrate/scan.md +0 -114
- package/src/core/commands/migrate/validate.md +0 -119
- package/src/core/commands/multi-expert.md +0 -447
- package/src/core/commands/packages.md +0 -535
- package/src/core/commands/pr.md +0 -337
- package/src/core/commands/readme-sync.md +0 -329
- package/src/core/commands/research/analyze.md +0 -798
- package/src/core/commands/research/ask.md +0 -864
- package/src/core/commands/research/import.md +0 -1025
- package/src/core/commands/research/list.md +0 -273
- package/src/core/commands/research/synthesize.md +0 -928
- package/src/core/commands/research/view.md +0 -323
- package/src/core/commands/retro.md +0 -795
- package/src/core/commands/review.md +0 -694
- package/src/core/commands/rlm.md +0 -446
- package/src/core/commands/roadmap/analyze.md +0 -400
- package/src/core/commands/rpi.md +0 -633
- package/src/core/commands/seo/audit.md +0 -428
- package/src/core/commands/seo/competitor.md +0 -174
- package/src/core/commands/seo/content.md +0 -107
- package/src/core/commands/seo/geo.md +0 -229
- package/src/core/commands/seo/hreflang.md +0 -140
- package/src/core/commands/seo/images.md +0 -96
- package/src/core/commands/seo/page.md +0 -198
- package/src/core/commands/seo/plan.md +0 -163
- package/src/core/commands/seo/programmatic.md +0 -131
- package/src/core/commands/seo/references/cwv-thresholds.md +0 -64
- package/src/core/commands/seo/references/eeat-framework.md +0 -110
- package/src/core/commands/seo/references/quality-gates.md +0 -91
- package/src/core/commands/seo/references/schema-types.md +0 -102
- package/src/core/commands/seo/schema.md +0 -183
- package/src/core/commands/seo/sitemap.md +0 -97
- package/src/core/commands/seo/technical.md +0 -100
- package/src/core/commands/seo.md +0 -107
- package/src/core/commands/serve.md +0 -127
- package/src/core/commands/session/cleanup.md +0 -452
- package/src/core/commands/session/end.md +0 -865
- package/src/core/commands/session/history.md +0 -293
- package/src/core/commands/session/init.md +0 -210
- package/src/core/commands/session/new.md +0 -827
- package/src/core/commands/session/resume.md +0 -291
- package/src/core/commands/session/spawn.md +0 -205
- package/src/core/commands/session/status.md +0 -274
- package/src/core/commands/skill/list.md +0 -139
- package/src/core/commands/skill/recommend.md +0 -216
- package/src/core/commands/sprint.md +0 -714
- package/src/core/commands/status/undo.md +0 -191
- package/src/core/commands/status.md +0 -423
- package/src/core/commands/story/edit.md +0 -204
- package/src/core/commands/story/list.md +0 -199
- package/src/core/commands/story/view.md +0 -312
- package/src/core/commands/story-validate.md +0 -491
- package/src/core/commands/story.md +0 -465
- package/src/core/commands/tdd-next.md +0 -238
- package/src/core/commands/tdd.md +0 -211
- package/src/core/commands/team/guide.md +0 -688
- package/src/core/commands/team/list.md +0 -59
- package/src/core/commands/team/start.md +0 -130
- package/src/core/commands/team/status.md +0 -66
- package/src/core/commands/team/stop.md +0 -78
- package/src/core/commands/template.md +0 -644
- package/src/core/commands/tests.md +0 -731
- package/src/core/commands/update.md +0 -591
- package/src/core/commands/validate-expertise.md +0 -305
- package/src/core/commands/velocity.md +0 -630
- package/src/core/commands/verify.md +0 -534
- package/src/core/commands/whats-new.md +0 -201
- package/src/core/commands/workflow.md +0 -449
- package/src/core/council/sessions/.gitkeep +0 -0
- package/src/core/council/shared_reasoning.template.md +0 -106
- package/src/core/experts/README.md +0 -236
- package/src/core/experts/_core-expertise.yaml +0 -105
- package/src/core/experts/accessibility/expertise.yaml +0 -115
- package/src/core/experts/accessibility/question.md +0 -41
- package/src/core/experts/accessibility/self-improve.md +0 -45
- package/src/core/experts/accessibility/workflow.md +0 -59
- package/src/core/experts/adr-writer/expertise.yaml +0 -138
- package/src/core/experts/adr-writer/question.md +0 -56
- package/src/core/experts/adr-writer/self-improve.md +0 -106
- package/src/core/experts/adr-writer/workflow.md +0 -184
- package/src/core/experts/analytics/expertise.yaml +0 -119
- package/src/core/experts/analytics/question.md +0 -74
- package/src/core/experts/analytics/self-improve.md +0 -163
- package/src/core/experts/analytics/workflow.md +0 -272
- package/src/core/experts/api/expertise.yaml +0 -124
- package/src/core/experts/api/question.md +0 -74
- package/src/core/experts/api/self-improve.md +0 -122
- package/src/core/experts/api/workflow.md +0 -248
- package/src/core/experts/ci/expertise.yaml +0 -106
- package/src/core/experts/ci/question.md +0 -69
- package/src/core/experts/ci/self-improve.md +0 -100
- package/src/core/experts/ci/workflow.md +0 -145
- package/src/core/experts/codebase-query/expertise.yaml +0 -121
- package/src/core/experts/codebase-query/question.md +0 -73
- package/src/core/experts/codebase-query/self-improve.md +0 -105
- package/src/core/experts/compliance/expertise.yaml +0 -101
- package/src/core/experts/compliance/question.md +0 -56
- package/src/core/experts/compliance/self-improve.md +0 -106
- package/src/core/experts/compliance/workflow.md +0 -184
- package/src/core/experts/database/expertise.yaml +0 -109
- package/src/core/experts/database/question.md +0 -74
- package/src/core/experts/database/self-improve.md +0 -121
- package/src/core/experts/database/workflow.md +0 -234
- package/src/core/experts/datamigration/expertise.yaml +0 -141
- package/src/core/experts/datamigration/question.md +0 -56
- package/src/core/experts/datamigration/self-improve.md +0 -106
- package/src/core/experts/datamigration/workflow.md +0 -184
- package/src/core/experts/design/expertise.yaml +0 -116
- package/src/core/experts/design/question.md +0 -56
- package/src/core/experts/design/self-improve.md +0 -106
- package/src/core/experts/design/workflow.md +0 -184
- package/src/core/experts/devops/expertise.yaml +0 -116
- package/src/core/experts/devops/question.md +0 -68
- package/src/core/experts/devops/self-improve.md +0 -102
- package/src/core/experts/devops/workflow.md +0 -142
- package/src/core/experts/documentation/expertise.yaml +0 -126
- package/src/core/experts/documentation/question.md +0 -41
- package/src/core/experts/documentation/self-improve.md +0 -45
- package/src/core/experts/documentation/workflow.md +0 -55
- package/src/core/experts/epic-planner/expertise.yaml +0 -144
- package/src/core/experts/epic-planner/question.md +0 -56
- package/src/core/experts/epic-planner/self-improve.md +0 -106
- package/src/core/experts/epic-planner/workflow.md +0 -184
- package/src/core/experts/integrations/expertise.yaml +0 -113
- package/src/core/experts/integrations/question.md +0 -74
- package/src/core/experts/integrations/self-improve.md +0 -151
- package/src/core/experts/integrations/workflow.md +0 -246
- package/src/core/experts/mentor/expertise.yaml +0 -125
- package/src/core/experts/mentor/question.md +0 -56
- package/src/core/experts/mentor/self-improve.md +0 -106
- package/src/core/experts/mentor/workflow.md +0 -184
- package/src/core/experts/mobile/expertise.yaml +0 -136
- package/src/core/experts/mobile/question.md +0 -72
- package/src/core/experts/mobile/self-improve.md +0 -140
- package/src/core/experts/mobile/workflow.md +0 -240
- package/src/core/experts/monitoring/expertise.yaml +0 -132
- package/src/core/experts/monitoring/question.md +0 -76
- package/src/core/experts/monitoring/self-improve.md +0 -150
- package/src/core/experts/monitoring/workflow.md +0 -264
- package/src/core/experts/performance/expertise.yaml +0 -68
- package/src/core/experts/performance/question.md +0 -41
- package/src/core/experts/performance/self-improve.md +0 -45
- package/src/core/experts/performance/workflow.md +0 -61
- package/src/core/experts/product/expertise.yaml +0 -143
- package/src/core/experts/product/question.md +0 -56
- package/src/core/experts/product/self-improve.md +0 -106
- package/src/core/experts/product/workflow.md +0 -184
- package/src/core/experts/qa/expertise.yaml +0 -110
- package/src/core/experts/qa/question.md +0 -56
- package/src/core/experts/qa/self-improve.md +0 -106
- package/src/core/experts/qa/workflow.md +0 -184
- package/src/core/experts/readme-updater/expertise.yaml +0 -141
- package/src/core/experts/readme-updater/question.md +0 -56
- package/src/core/experts/readme-updater/self-improve.md +0 -106
- package/src/core/experts/readme-updater/workflow.md +0 -184
- package/src/core/experts/refactor/expertise.yaml +0 -135
- package/src/core/experts/refactor/question.md +0 -41
- package/src/core/experts/refactor/self-improve.md +0 -45
- package/src/core/experts/refactor/workflow.md +0 -57
- package/src/core/experts/research/expertise.yaml +0 -143
- package/src/core/experts/research/question.md +0 -56
- package/src/core/experts/research/self-improve.md +0 -106
- package/src/core/experts/research/workflow.md +0 -184
- package/src/core/experts/security/expertise.yaml +0 -117
- package/src/core/experts/security/question.md +0 -77
- package/src/core/experts/security/self-improve.md +0 -102
- package/src/core/experts/security/workflow.md +0 -152
- package/src/core/experts/templates/expertise-template.yaml +0 -67
- package/src/core/experts/templates/question-template.md +0 -56
- package/src/core/experts/templates/self-improve-template.md +0 -106
- package/src/core/experts/templates/workflow-template.md +0 -184
- package/src/core/experts/testing/expertise.yaml +0 -112
- package/src/core/experts/testing/question.md +0 -68
- package/src/core/experts/testing/self-improve.md +0 -102
- package/src/core/experts/testing/workflow.md +0 -143
- package/src/core/experts/ui/expertise.yaml +0 -133
- package/src/core/experts/ui/question.md +0 -74
- package/src/core/experts/ui/self-improve.md +0 -122
- package/src/core/experts/ui/workflow.md +0 -262
- package/src/core/knowledge/ads/ad-audit-checklist-scoring.md +0 -424
- package/src/core/knowledge/ads/ad-optimization-logic.md +0 -590
- package/src/core/knowledge/ads/ad-technical-specifications.md +0 -385
- package/src/core/knowledge/ads/definitive-advertising-reference-2026.md +0 -506
- package/src/core/knowledge/ads/paid-advertising-research-2026.md +0 -445
- package/src/core/profiles/COMPARISON.md +0 -170
- package/src/core/profiles/README.md +0 -178
- package/src/core/profiles/claude-code.yaml +0 -111
- package/src/core/profiles/codex.yaml +0 -103
- package/src/core/profiles/cursor.yaml +0 -134
- package/src/core/profiles/examples.js +0 -250
- package/src/core/profiles/loader.js +0 -235
- package/src/core/profiles/windsurf.yaml +0 -159
- package/src/core/skills/_learnings/README.md +0 -91
- package/src/core/skills/_learnings/_template.yaml +0 -106
- package/src/core/skills/_learnings/code-review.yaml +0 -118
- package/src/core/skills/_learnings/commit.yaml +0 -69
- package/src/core/skills/_learnings/story-writer.yaml +0 -71
- package/src/core/teams/backend.json +0 -41
- package/src/core/teams/builder-validator.json +0 -51
- package/src/core/teams/code-review.json +0 -41
- package/src/core/teams/frontend.json +0 -41
- package/src/core/teams/fullstack.json +0 -41
- package/src/core/teams/logic-audit.json +0 -53
- package/src/core/teams/perf-audit.json +0 -71
- package/src/core/teams/qa.json +0 -41
- package/src/core/teams/security-audit.json +0 -71
- package/src/core/teams/solo.json +0 -35
- package/src/core/teams/test-audit.json +0 -71
- package/src/core/templates/CONTEXT.md.example +0 -49
- package/src/core/templates/README-template.md +0 -16
- package/src/core/templates/adr-template.md +0 -28
- package/src/core/templates/agent-coordination-pattern.md +0 -38
- package/src/core/templates/agent-profile-template.md +0 -51
- package/src/core/templates/agileflow-metadata.json +0 -150
- package/src/core/templates/browser-qa-spec.yaml +0 -94
- package/src/core/templates/ci-workflow.yml +0 -74
- package/src/core/templates/claude-settings.advanced.example.json +0 -75
- package/src/core/templates/claude-settings.example.json +0 -26
- package/src/core/templates/command-documentation.md +0 -187
- package/src/core/templates/command-prerequisites.yaml +0 -169
- package/src/core/templates/comms-note-template.md +0 -24
- package/src/core/templates/damage-control-patterns.yaml +0 -243
- package/src/core/templates/environment.json +0 -18
- package/src/core/templates/epic-template.md +0 -27
- package/src/core/templates/plan-template.md +0 -125
- package/src/core/templates/preserve-rules-common.md +0 -107
- package/src/core/templates/preserve-rules.json +0 -42
- package/src/core/templates/proactive-action-spec.md +0 -29
- package/src/core/templates/product-brief.md +0 -136
- package/src/core/templates/quality-gate-priorities.md +0 -34
- package/src/core/templates/research-template.md +0 -44
- package/src/core/templates/session-harness-protocol.md +0 -128
- package/src/core/templates/session-state.json +0 -56
- package/src/core/templates/story-lifecycle.md +0 -213
- package/src/core/templates/story-template.md +0 -92
- package/src/core/templates/tdd-test-template.js +0 -241
- package/src/core/templates/worktrees-guide.md +0 -231
- package/tools/agileflow-npx.js +0 -52
- package/tools/cli/agileflow-cli.js +0 -72
- package/tools/cli/commands/config.js +0 -285
- package/tools/cli/commands/doctor.js +0 -496
- package/tools/cli/commands/list.js +0 -385
- package/tools/cli/commands/serve.js +0 -492
- package/tools/cli/commands/session.js +0 -1176
- package/tools/cli/commands/setup.js +0 -255
- package/tools/cli/commands/status.js +0 -101
- package/tools/cli/commands/tui.js +0 -56
- package/tools/cli/commands/uninstall.js +0 -155
- package/tools/cli/commands/update.js +0 -299
- package/tools/cli/installers/core/installer.js +0 -892
- package/tools/cli/installers/ide/_base-ide.js +0 -518
- package/tools/cli/installers/ide/_interface.js +0 -238
- package/tools/cli/installers/ide/claude-code.js +0 -432
- package/tools/cli/installers/ide/codex.js +0 -426
- package/tools/cli/installers/ide/cursor.js +0 -217
- package/tools/cli/installers/ide/manager.js +0 -222
- package/tools/cli/installers/ide/windsurf.js +0 -282
- package/tools/cli/lib/command-context.js +0 -382
- package/tools/cli/lib/config-manager.js +0 -446
- package/tools/cli/lib/content-injector.js +0 -969
- package/tools/cli/lib/content-transformer.js +0 -496
- package/tools/cli/lib/docs-setup.js +0 -464
- package/tools/cli/lib/error-handler.js +0 -165
- package/tools/cli/lib/ide-error-factory.js +0 -421
- package/tools/cli/lib/ide-errors.js +0 -367
- package/tools/cli/lib/ide-generator.js +0 -357
- package/tools/cli/lib/ide-health-monitor.js +0 -364
- package/tools/cli/lib/ide-registry.js +0 -297
- package/tools/cli/lib/npm-utils.js +0 -103
- package/tools/cli/lib/self-update.js +0 -148
- package/tools/cli/lib/ui.js +0 -211
- package/tools/cli/lib/utils.js +0 -87
- package/tools/cli/lib/validation-middleware.js +0 -491
- package/tools/cli/lib/version-checker.js +0 -95
- package/tools/postinstall.js +0 -190
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: test-analyzer-mocking
|
|
3
|
-
description: Test mocking analyzer for over-mocking, mock leakage between tests, mocking what you own, testing mocks instead of code, and missing mock restoration
|
|
4
|
-
tools: Read, Glob, Grep
|
|
5
|
-
model: haiku
|
|
6
|
-
team_role: utility
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Test Analyzer: Mocking Quality
|
|
11
|
-
|
|
12
|
-
You are a specialized test analyzer focused on **mocking anti-patterns**. Your job is to find tests where mocking is misused, creating false confidence by testing mocks instead of actual code, or causing cross-test contamination through mock leakage.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Your Focus Areas
|
|
17
|
-
|
|
18
|
-
1. **Over-mocking**: Mocking implementation details instead of behavior, mocking so much that no real code runs
|
|
19
|
-
2. **Mock leakage**: Mocks not restored between tests, `jest.mock` at module level affecting all tests in file
|
|
20
|
-
3. **Mocking what you own**: Mocking your own modules instead of testing them, only testing the integration layer
|
|
21
|
-
4. **Testing mocks instead of code**: Assertions that only verify mock was called, not that the outcome is correct
|
|
22
|
-
5. **Missing mock restoration**: `jest.spyOn` without `mockRestore`, manual mocks without cleanup
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Analysis Process
|
|
27
|
-
|
|
28
|
-
### Step 1: Read the Target Code
|
|
29
|
-
|
|
30
|
-
Read the test files you're asked to analyze. Focus on:
|
|
31
|
-
- `jest.mock()`, `jest.spyOn()`, `sinon.stub()` usage
|
|
32
|
-
- Mock setup in beforeEach/beforeAll
|
|
33
|
-
- Mock cleanup in afterEach/afterAll
|
|
34
|
-
- What percentage of the system under test is mocked
|
|
35
|
-
- Assertion targets (mock calls vs actual output)
|
|
36
|
-
|
|
37
|
-
### Step 2: Look for These Patterns
|
|
38
|
-
|
|
39
|
-
**Pattern 1: Over-mocking (testing mocks, not code)**
|
|
40
|
-
```javascript
|
|
41
|
-
// OVER-MOCKED: Every dependency is mocked — no real code executes
|
|
42
|
-
jest.mock('./database');
|
|
43
|
-
jest.mock('./emailService');
|
|
44
|
-
jest.mock('./logger');
|
|
45
|
-
jest.mock('./validator');
|
|
46
|
-
|
|
47
|
-
it('processes order', async () => {
|
|
48
|
-
await processOrder(mockOrder);
|
|
49
|
-
expect(database.save).toHaveBeenCalledWith(mockOrder); // Only tests mock was called
|
|
50
|
-
expect(emailService.send).toHaveBeenCalled();
|
|
51
|
-
// PROBLEM: Never tests that processOrder actually works correctly
|
|
52
|
-
});
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
**Pattern 2: Mock leakage between tests**
|
|
56
|
-
```javascript
|
|
57
|
-
// LEAK: spyOn without restore
|
|
58
|
-
beforeEach(() => {
|
|
59
|
-
jest.spyOn(console, 'error'); // Leaks to next test
|
|
60
|
-
// Missing: afterEach(() => jest.restoreAllMocks())
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// LEAK: Module-level mock affects all tests in file
|
|
64
|
-
jest.mock('./config', () => ({ apiUrl: 'http://test' }));
|
|
65
|
-
// ALL tests in this file use mocked config, even ones that shouldn't
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**Pattern 3: Mocking what you own**
|
|
69
|
-
```javascript
|
|
70
|
-
// ANTI-PATTERN: Mocking your own utility instead of testing it
|
|
71
|
-
jest.mock('./utils/formatDate');
|
|
72
|
-
import { formatDate } from './utils/formatDate';
|
|
73
|
-
|
|
74
|
-
it('displays formatted date', () => {
|
|
75
|
-
formatDate.mockReturnValue('Jan 1, 2024');
|
|
76
|
-
const result = renderComponent({ date: new Date() });
|
|
77
|
-
expect(result).toContain('Jan 1, 2024');
|
|
78
|
-
// PROBLEM: formatDate is never actually tested
|
|
79
|
-
});
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
**Pattern 4: Assertion only on mock calls**
|
|
83
|
-
```javascript
|
|
84
|
-
// WEAK: Only verifies mock was called, not the actual behavior
|
|
85
|
-
it('saves user', async () => {
|
|
86
|
-
await createUser({ name: 'Test', email: 'test@test.com' });
|
|
87
|
-
expect(db.insert).toHaveBeenCalledTimes(1);
|
|
88
|
-
expect(db.insert).toHaveBeenCalledWith({ name: 'Test', email: 'test@test.com' });
|
|
89
|
-
// Missing: No assertion on return value, side effects, or error handling
|
|
90
|
-
// What if createUser silently fails after db.insert?
|
|
91
|
-
});
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
**Pattern 5: Deep mock chains**
|
|
95
|
-
```javascript
|
|
96
|
-
// FRAGILE: Deep mock chain mirrors implementation
|
|
97
|
-
const mockDb = {
|
|
98
|
-
connection: {
|
|
99
|
-
getRepository: jest.fn().mockReturnValue({
|
|
100
|
-
createQueryBuilder: jest.fn().mockReturnValue({
|
|
101
|
-
where: jest.fn().mockReturnThis(),
|
|
102
|
-
andWhere: jest.fn().mockReturnThis(),
|
|
103
|
-
getMany: jest.fn().mockResolvedValue(mockUsers)
|
|
104
|
-
})
|
|
105
|
-
})
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
// PROBLEM: Any refactor of query builder chain breaks this test
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
**Pattern 6: Manual mock without cleanup**
|
|
112
|
-
```javascript
|
|
113
|
-
// LEAK: Global state modified without restoration
|
|
114
|
-
const originalEnv = process.env.NODE_ENV;
|
|
115
|
-
process.env.NODE_ENV = 'test';
|
|
116
|
-
|
|
117
|
-
it('runs in test mode', () => { ... });
|
|
118
|
-
// Missing: afterEach(() => process.env.NODE_ENV = originalEnv);
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Output Format
|
|
124
|
-
|
|
125
|
-
For each potential issue found, output:
|
|
126
|
-
|
|
127
|
-
```markdown
|
|
128
|
-
### FINDING-{N}: {Brief Title}
|
|
129
|
-
|
|
130
|
-
**Location**: `{file}:{line}`
|
|
131
|
-
**Severity**: CRITICAL | HIGH | MEDIUM | LOW
|
|
132
|
-
**Confidence**: HIGH | MEDIUM | LOW
|
|
133
|
-
**Category**: Over-Mocking | Mock Leakage | Mocking Own Code | Testing Mocks | Deep Mock Chain | Missing Restore
|
|
134
|
-
|
|
135
|
-
**Code**:
|
|
136
|
-
\`\`\`{language}
|
|
137
|
-
{relevant code snippet, 3-7 lines}
|
|
138
|
-
\`\`\`
|
|
139
|
-
|
|
140
|
-
**Issue**: {Clear explanation of the mocking problem}
|
|
141
|
-
|
|
142
|
-
**Risk**: {What false confidence or test contamination this creates}
|
|
143
|
-
|
|
144
|
-
**Remediation**:
|
|
145
|
-
- {Specific fix with code example}
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## Severity Scale
|
|
151
|
-
|
|
152
|
-
| Severity | Definition | Example |
|
|
153
|
-
|----------|-----------|---------|
|
|
154
|
-
| CRITICAL | False confidence — test passes but code is untested | Over-mocked test where no real code runs, assertions only on mock calls |
|
|
155
|
-
| HIGH | Mock contamination affecting other tests | Missing mockRestore, module-level mock with side effects |
|
|
156
|
-
| MEDIUM | Suboptimal mocking pattern | Mocking own code, slightly deep mock chains |
|
|
157
|
-
| LOW | Minor mock hygiene | Optional mockRestore on harmless spy, verbose mock setup |
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## Important Rules
|
|
162
|
-
|
|
163
|
-
1. **Be SPECIFIC**: Include exact file paths and line numbers
|
|
164
|
-
2. **Check for afterEach/afterAll**: Mock cleanup might exist at describe or file level
|
|
165
|
-
3. **Check jest.config**: `restoreMocks: true` in config auto-restores mocks
|
|
166
|
-
4. **Distinguish unit from integration**: Some mocking is appropriate for unit tests
|
|
167
|
-
5. **External APIs should be mocked**: HTTP calls, databases in unit tests are correctly mocked
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## What NOT to Report
|
|
172
|
-
|
|
173
|
-
- Mocking external HTTP APIs (correct practice for unit tests)
|
|
174
|
-
- Mocking database in unit tests (correct — test integration separately)
|
|
175
|
-
- Tests with `jest.config.restoreMocks: true` (auto-cleanup)
|
|
176
|
-
- Proper use of dependency injection for testing
|
|
177
|
-
- Test coverage gaps (coverage analyzer handles those)
|
|
178
|
-
- Test fragility from timing issues (fragility analyzer handles those)
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: test-analyzer-patterns
|
|
3
|
-
description: Test anti-pattern analyzer for testing private methods, deep mock chains, oversized snapshots, test setup longer than test, and God test objects
|
|
4
|
-
tools: Read, Glob, Grep
|
|
5
|
-
model: haiku
|
|
6
|
-
team_role: utility
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Test Analyzer: Anti-Patterns
|
|
11
|
-
|
|
12
|
-
You are a specialized test analyzer focused on **test anti-patterns**. Your job is to find structural patterns in tests that make them brittle, hard to maintain, or misleading — patterns that experienced developers know to avoid.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Your Focus Areas
|
|
17
|
-
|
|
18
|
-
1. **Testing private methods directly**: Accessing internal implementation via workarounds instead of testing through public API
|
|
19
|
-
2. **Deep mock chains**: Mocking 3+ levels deep, mirroring internal implementation structure
|
|
20
|
-
3. **Oversized snapshots**: Snapshot files > 500 lines, testing entire page output instead of specific elements
|
|
21
|
-
4. **Test setup longer than test**: More lines of setup/mock configuration than actual assertions
|
|
22
|
-
5. **God test objects**: Single fixture/factory that creates everything, used by all tests
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Analysis Process
|
|
27
|
-
|
|
28
|
-
### Step 1: Read the Target Code
|
|
29
|
-
|
|
30
|
-
Read the test files you're asked to analyze. Focus on:
|
|
31
|
-
- Access to private/internal methods or properties
|
|
32
|
-
- Mock chain depth
|
|
33
|
-
- Snapshot file sizes
|
|
34
|
-
- Setup-to-assertion ratio
|
|
35
|
-
- Shared test fixtures and their complexity
|
|
36
|
-
|
|
37
|
-
### Step 2: Look for These Patterns
|
|
38
|
-
|
|
39
|
-
**Pattern 1: Testing private methods**
|
|
40
|
-
```javascript
|
|
41
|
-
// ANTI-PATTERN: Accessing private method via bracket notation
|
|
42
|
-
it('validates internal format', () => {
|
|
43
|
-
const service = new UserService();
|
|
44
|
-
// @ts-ignore or using bracket notation to access private
|
|
45
|
-
const result = service['_validateFormat']('test');
|
|
46
|
-
expect(result).toBe(true);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
// ANTI-PATTERN: Importing internal helper not in public API
|
|
50
|
-
import { _internalHelper } from '../src/service'; // Underscore prefix = private
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
**Pattern 2: Deep mock chains**
|
|
54
|
-
```javascript
|
|
55
|
-
// ANTI-PATTERN: 4-level deep mock mirroring internal structure
|
|
56
|
-
const mockDb = {
|
|
57
|
-
connection: {
|
|
58
|
-
manager: {
|
|
59
|
-
getRepository: jest.fn().mockReturnValue({
|
|
60
|
-
createQueryBuilder: jest.fn().mockReturnValue({
|
|
61
|
-
select: jest.fn().mockReturnThis(),
|
|
62
|
-
where: jest.fn().mockReturnThis(),
|
|
63
|
-
leftJoinAndSelect: jest.fn().mockReturnThis(),
|
|
64
|
-
getMany: jest.fn().mockResolvedValue(mockData)
|
|
65
|
-
})
|
|
66
|
-
})
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
// Any refactor breaks all these mocks
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
**Pattern 3: Oversized snapshots**
|
|
74
|
-
```javascript
|
|
75
|
-
// ANTI-PATTERN: Snapshot > 500 lines
|
|
76
|
-
it('renders page', () => {
|
|
77
|
-
const { container } = render(<EntirePage />);
|
|
78
|
-
expect(container).toMatchSnapshot();
|
|
79
|
-
// __snapshots__/Page.test.tsx.snap is 800+ lines
|
|
80
|
-
// Changes get rubber-stamped with `--updateSnapshot`
|
|
81
|
-
});
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**Pattern 4: Setup longer than test**
|
|
85
|
-
```javascript
|
|
86
|
-
// ANTI-PATTERN: 30 lines of setup for 2 lines of assertion
|
|
87
|
-
it('sends notification', async () => {
|
|
88
|
-
// 25 lines of mock setup...
|
|
89
|
-
const mockUser = { id: 1, name: 'Test', email: 'test@test.com', role: 'admin', ... };
|
|
90
|
-
const mockConfig = { smtp: { host: 'localhost', port: 587, ... }, templates: { ... } };
|
|
91
|
-
const mockTemplate = { subject: 'Test', body: '...', variables: [...] };
|
|
92
|
-
jest.spyOn(userService, 'get').mockResolvedValue(mockUser);
|
|
93
|
-
jest.spyOn(configService, 'get').mockResolvedValue(mockConfig);
|
|
94
|
-
jest.spyOn(templateService, 'render').mockResolvedValue(mockTemplate);
|
|
95
|
-
// ... more setup ...
|
|
96
|
-
|
|
97
|
-
// Actual test: 2 lines
|
|
98
|
-
await notificationService.send(1, 'welcome');
|
|
99
|
-
expect(emailClient.send).toHaveBeenCalledWith(expect.objectContaining({ to: 'test@test.com' }));
|
|
100
|
-
});
|
|
101
|
-
// FIX: Use factory functions, builders, or test fixtures
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**Pattern 5: God test object**
|
|
105
|
-
```javascript
|
|
106
|
-
// ANTI-PATTERN: One massive fixture used everywhere
|
|
107
|
-
const testData = {
|
|
108
|
-
users: [{ id: 1, name: 'Admin', role: 'admin', permissions: [...], teams: [...] }, ...],
|
|
109
|
-
products: [{ id: 1, name: 'Widget', price: 10, variants: [...], inventory: {...} }, ...],
|
|
110
|
-
orders: [{ id: 1, items: [...], shipping: {...}, billing: {...}, status: 'pending' }, ...],
|
|
111
|
-
config: { features: {...}, limits: {...}, integrations: {...} }
|
|
112
|
-
};
|
|
113
|
-
// Every test imports testData, changes to it break unrelated tests
|
|
114
|
-
// FIX: Use focused factories per domain: createTestUser(), createTestOrder()
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
**Pattern 6: Test verifies same thing multiple ways**
|
|
118
|
-
```javascript
|
|
119
|
-
// REDUNDANT: Triple-checking the same outcome
|
|
120
|
-
it('creates user', async () => {
|
|
121
|
-
const user = await createUser(data);
|
|
122
|
-
expect(user).toBeDefined();
|
|
123
|
-
expect(user).not.toBeNull();
|
|
124
|
-
expect(user).not.toBeUndefined();
|
|
125
|
-
expect(user.id).toBeDefined();
|
|
126
|
-
expect(user.id).toBeGreaterThan(0);
|
|
127
|
-
expect(typeof user.id).toBe('number');
|
|
128
|
-
// First 3 assertions are redundant, last 3 could be one: expect(user.id).toBeGreaterThan(0)
|
|
129
|
-
});
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## Output Format
|
|
135
|
-
|
|
136
|
-
For each potential issue found, output:
|
|
137
|
-
|
|
138
|
-
```markdown
|
|
139
|
-
### FINDING-{N}: {Brief Title}
|
|
140
|
-
|
|
141
|
-
**Location**: `{file}:{line}`
|
|
142
|
-
**Severity**: CRITICAL | HIGH | MEDIUM | LOW
|
|
143
|
-
**Confidence**: HIGH | MEDIUM | LOW
|
|
144
|
-
**Category**: Testing Privates | Deep Mock Chain | Oversized Snapshot | Setup > Test | God Object | Redundant Assertions
|
|
145
|
-
|
|
146
|
-
**Code**:
|
|
147
|
-
\`\`\`{language}
|
|
148
|
-
{relevant code snippet, 3-7 lines}
|
|
149
|
-
\`\`\`
|
|
150
|
-
|
|
151
|
-
**Issue**: {Clear explanation of the anti-pattern}
|
|
152
|
-
|
|
153
|
-
**Maintenance Cost**: {How this affects test maintenance when code changes}
|
|
154
|
-
|
|
155
|
-
**Remediation**:
|
|
156
|
-
- {Specific refactoring suggestion with code example}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## Severity Scale
|
|
162
|
-
|
|
163
|
-
| Severity | Definition | Example |
|
|
164
|
-
|----------|-----------|---------|
|
|
165
|
-
| CRITICAL | Anti-pattern causes false confidence or systematic brittleness | God object affecting 50+ tests, deep mock chains on critical path |
|
|
166
|
-
| HIGH | Significant maintenance burden | 800+ line snapshots, setup-heavy tests across many files |
|
|
167
|
-
| MEDIUM | Pattern creates friction | Testing private methods, moderate deep mocking |
|
|
168
|
-
| LOW | Minor code smell | Slightly redundant assertions, small oversized setup |
|
|
169
|
-
|
|
170
|
-
---
|
|
171
|
-
|
|
172
|
-
## Important Rules
|
|
173
|
-
|
|
174
|
-
1. **Be SPECIFIC**: Include exact file paths and line numbers
|
|
175
|
-
2. **Measure snapshot sizes**: Report actual line counts of snapshot files
|
|
176
|
-
3. **Count setup vs assertion lines**: Show the ratio
|
|
177
|
-
4. **Check for factories/builders**: Project may already have test utilities that aren't being used
|
|
178
|
-
5. **Consider test count affected**: God object affecting 5 tests is different from affecting 50
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## What NOT to Report
|
|
183
|
-
|
|
184
|
-
- Moderate test setup that's necessary for the test (not all setup is bad)
|
|
185
|
-
- Small snapshots (<100 lines) that capture meaningful UI state
|
|
186
|
-
- Testing internal methods when no public API exists (e.g., private utility modules)
|
|
187
|
-
- Test coverage gaps (coverage analyzer handles those)
|
|
188
|
-
- Assertion strength (assertions analyzer handles those)
|
|
189
|
-
- Test fragility from timing (fragility analyzer handles those)
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: test-analyzer-structure
|
|
3
|
-
description: Test structure analyzer for missing describe/it nesting, unclear test names, test code duplication, overly long test files, and missing setup/teardown
|
|
4
|
-
tools: Read, Glob, Grep
|
|
5
|
-
model: haiku
|
|
6
|
-
team_role: utility
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Test Analyzer: Test Structure
|
|
11
|
-
|
|
12
|
-
You are a specialized test analyzer focused on **test organization and structure**. Your job is to find test files that are poorly structured, making them hard to maintain, debug, and understand.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Your Focus Areas
|
|
17
|
-
|
|
18
|
-
1. **Missing describe/it nesting**: Flat test structure without grouping related tests
|
|
19
|
-
2. **Unclear test names**: Generic names like "test1", "works", "should work correctly"
|
|
20
|
-
3. **Test code duplication**: Same setup/assertion pattern copy-pasted across tests
|
|
21
|
-
4. **Overly long test files**: Files with 500+ lines, mixing concerns, hard to navigate
|
|
22
|
-
5. **Missing setup/teardown**: Repeated initialization in each test instead of beforeEach/afterEach
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Analysis Process
|
|
27
|
-
|
|
28
|
-
### Step 1: Read the Target Code
|
|
29
|
-
|
|
30
|
-
Read the test files you're asked to analyze. Focus on:
|
|
31
|
-
- Test file organization (describe/it nesting)
|
|
32
|
-
- Test names and descriptions
|
|
33
|
-
- Repeated code across test cases
|
|
34
|
-
- File length and number of tests per file
|
|
35
|
-
- Setup/teardown patterns
|
|
36
|
-
|
|
37
|
-
### Step 2: Look for These Patterns
|
|
38
|
-
|
|
39
|
-
**Pattern 1: Flat test structure**
|
|
40
|
-
```javascript
|
|
41
|
-
// FLAT: No grouping, hard to understand test relationships
|
|
42
|
-
test('creates user', ...);
|
|
43
|
-
test('creates user with email', ...);
|
|
44
|
-
test('fails without name', ...);
|
|
45
|
-
test('updates user', ...);
|
|
46
|
-
test('deletes user', ...);
|
|
47
|
-
test('lists users', ...);
|
|
48
|
-
// FIX: Group by operation: describe('create'), describe('update'), etc.
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**Pattern 2: Unclear test names**
|
|
52
|
-
```javascript
|
|
53
|
-
// UNCLEAR: What does "works" mean?
|
|
54
|
-
it('works', () => { ... });
|
|
55
|
-
it('test1', () => { ... });
|
|
56
|
-
it('should work correctly', () => { ... });
|
|
57
|
-
it('handles the thing', () => { ... });
|
|
58
|
-
// FIX: it('returns 404 when user not found', () => { ... })
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
**Pattern 3: Duplicated test setup**
|
|
62
|
-
```javascript
|
|
63
|
-
// DUPLICATED: Same setup in every test
|
|
64
|
-
it('creates order', () => {
|
|
65
|
-
const user = { id: 1, name: 'Test', role: 'admin' };
|
|
66
|
-
const cart = { items: [{ id: 1, qty: 2 }], total: 50 };
|
|
67
|
-
const result = createOrder(user, cart);
|
|
68
|
-
expect(result.status).toBe('created');
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('applies discount', () => {
|
|
72
|
-
const user = { id: 1, name: 'Test', role: 'admin' }; // Same setup!
|
|
73
|
-
const cart = { items: [{ id: 1, qty: 2 }], total: 50 }; // Same setup!
|
|
74
|
-
const result = createOrder(user, cart);
|
|
75
|
-
expect(result.discount).toBe(0.1);
|
|
76
|
-
});
|
|
77
|
-
// FIX: Move shared setup to beforeEach or factory function
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
**Pattern 4: Overly long test file**
|
|
81
|
-
```javascript
|
|
82
|
-
// LONG: 800+ lines in single test file
|
|
83
|
-
// Tests for UserService: create, update, delete, list, search, permissions, notifications...
|
|
84
|
-
// Should be split: user-create.test.ts, user-update.test.ts, etc.
|
|
85
|
-
// Or at minimum: well-nested describe blocks
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
**Pattern 5: Missing setup/teardown**
|
|
89
|
-
```javascript
|
|
90
|
-
// MISSING: No cleanup, tests may affect each other
|
|
91
|
-
describe('database tests', () => {
|
|
92
|
-
it('inserts record', async () => {
|
|
93
|
-
await db.insert({ id: 1, name: 'test' });
|
|
94
|
-
// Never cleaned up — affects next test
|
|
95
|
-
});
|
|
96
|
-
it('counts records', async () => {
|
|
97
|
-
const count = await db.count();
|
|
98
|
-
expect(count).toBe(0); // FAILS because previous test inserted
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
**Pattern 6: Deeply nested describes (over-nesting)**
|
|
104
|
-
```javascript
|
|
105
|
-
// OVER-NESTED: 4+ levels deep, hard to read
|
|
106
|
-
describe('UserService', () => {
|
|
107
|
-
describe('create', () => {
|
|
108
|
-
describe('with valid data', () => {
|
|
109
|
-
describe('when user is admin', () => {
|
|
110
|
-
describe('and has permission', () => {
|
|
111
|
-
it('creates the user', () => { ... });
|
|
112
|
-
// 5 levels deep — consider flattening
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Output Format
|
|
123
|
-
|
|
124
|
-
For each potential issue found, output:
|
|
125
|
-
|
|
126
|
-
```markdown
|
|
127
|
-
### FINDING-{N}: {Brief Title}
|
|
128
|
-
|
|
129
|
-
**Location**: `{file}:{line}`
|
|
130
|
-
**Severity**: CRITICAL | HIGH | MEDIUM | LOW
|
|
131
|
-
**Confidence**: HIGH | MEDIUM | LOW
|
|
132
|
-
**Category**: Flat Structure | Unclear Names | Duplication | Long File | Missing Setup | Over-Nesting
|
|
133
|
-
|
|
134
|
-
**Code**:
|
|
135
|
-
\`\`\`{language}
|
|
136
|
-
{relevant code snippet, 3-7 lines}
|
|
137
|
-
\`\`\`
|
|
138
|
-
|
|
139
|
-
**Issue**: {Clear explanation of the structural problem}
|
|
140
|
-
|
|
141
|
-
**Maintenance Impact**: {How this affects debugging, reviewing, and maintaining tests}
|
|
142
|
-
|
|
143
|
-
**Remediation**:
|
|
144
|
-
- {Specific restructuring suggestion}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## Severity Scale
|
|
150
|
-
|
|
151
|
-
| Severity | Definition | Example |
|
|
152
|
-
|----------|-----------|---------|
|
|
153
|
-
| CRITICAL | Tests are misleading or interdependent due to structure | Missing cleanup causing test pollution, copy-paste errors in duplicated tests |
|
|
154
|
-
| HIGH | Significant maintenance burden | 800+ line test file, completely flat structure on 30+ tests |
|
|
155
|
-
| MEDIUM | Readability and maintenance issue | Unclear names, moderate duplication, mild over-nesting |
|
|
156
|
-
| LOW | Minor improvement opportunity | Slightly better naming, optional factory function, minor cleanup |
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## Important Rules
|
|
161
|
-
|
|
162
|
-
1. **Be SPECIFIC**: Include exact file paths and line numbers
|
|
163
|
-
2. **Count tests per file**: Mention how many tests are in overly long files
|
|
164
|
-
3. **Show the pattern**: For duplication, show the repeated code
|
|
165
|
-
4. **Suggest specific restructuring**: Don't just say "refactor" — show the describe structure
|
|
166
|
-
5. **Consider project conventions**: Some teams prefer flat structure — note if consistent
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## What NOT to Report
|
|
171
|
-
|
|
172
|
-
- Well-structured test files that follow project conventions
|
|
173
|
-
- Short test files (<100 lines) with clear naming
|
|
174
|
-
- Deliberate flat structure in simple test files (5-10 tests)
|
|
175
|
-
- Test assertion quality (assertions analyzer handles those)
|
|
176
|
-
- Mock setup issues (mocking analyzer handles those)
|
|
177
|
-
- Coverage gaps (coverage analyzer handles those)
|