forge-workflow 0.0.4 → 0.0.6
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/.claude/commands/dev.md +345 -340
- package/.claude/commands/plan.md +566 -521
- package/.claude/commands/premerge.md +186 -176
- package/.claude/commands/research.md +42 -42
- package/.claude/commands/review.md +448 -442
- package/.claude/commands/rollback.md +721 -721
- package/.claude/commands/ship.md +212 -164
- package/.claude/commands/sonarcloud.md +152 -152
- package/.claude/commands/status.md +90 -48
- package/.claude/commands/validate.md +288 -282
- package/.claude/commands/verify.md +269 -221
- package/.claude/rules/greptile-review-process.md +285 -285
- package/.claude/rules/workflow.md +121 -105
- package/.claude/scripts/greptile-resolve.sh +558 -526
- package/.claude/scripts/load-env.sh +32 -32
- package/.cline/workflows/dev.md +342 -337
- package/.cline/workflows/plan.md +563 -518
- package/.cline/workflows/premerge.md +183 -173
- package/.cline/workflows/research.md +39 -39
- package/.cline/workflows/review.md +445 -439
- package/.cline/workflows/rollback.md +718 -718
- package/.cline/workflows/ship.md +209 -161
- package/.cline/workflows/sonarcloud.md +146 -146
- package/.cline/workflows/status.md +87 -45
- package/.cline/workflows/validate.md +285 -279
- package/.cline/workflows/verify.md +266 -218
- package/.codex/config.toml +11 -11
- package/.codex/skills/dev/SKILL.md +345 -340
- package/.codex/skills/plan/SKILL.md +566 -521
- package/.codex/skills/premerge/SKILL.md +186 -176
- package/.codex/skills/research/SKILL.md +42 -42
- package/.codex/skills/review/SKILL.md +448 -442
- package/.codex/skills/rollback/SKILL.md +721 -721
- package/.codex/skills/ship/SKILL.md +212 -164
- package/.codex/skills/sonarcloud/SKILL.md +149 -149
- package/.codex/skills/status/SKILL.md +90 -48
- package/.codex/skills/validate/SKILL.md +288 -282
- package/.codex/skills/verify/SKILL.md +269 -221
- package/.cursor/commands/dev.md +342 -337
- package/.cursor/commands/plan.md +563 -518
- package/.cursor/commands/premerge.md +183 -173
- package/.cursor/commands/research.md +39 -39
- package/.cursor/commands/review.md +445 -439
- package/.cursor/commands/rollback.md +718 -718
- package/.cursor/commands/ship.md +209 -161
- package/.cursor/commands/sonarcloud.md +146 -146
- package/.cursor/commands/status.md +87 -45
- package/.cursor/commands/validate.md +285 -279
- package/.cursor/commands/verify.md +266 -218
- package/.cursor/rules/permissions-guidance.mdc +37 -37
- package/.forge/hooks/check-tdd.js +240 -240
- package/.github/PLUGIN_TEMPLATE.json +32 -32
- package/.github/prompts/dev.prompt.md +347 -342
- package/.github/prompts/plan.prompt.md +568 -523
- package/.github/prompts/premerge.prompt.md +188 -178
- package/.github/prompts/research.prompt.md +44 -44
- package/.github/prompts/review.prompt.md +450 -444
- package/.github/prompts/rollback.prompt.md +723 -723
- package/.github/prompts/ship.prompt.md +214 -166
- package/.github/prompts/sonarcloud.prompt.md +151 -151
- package/.github/prompts/status.prompt.md +92 -50
- package/.github/prompts/validate.prompt.md +290 -284
- package/.github/prompts/verify.prompt.md +271 -223
- package/.github/workflows/beads-to-github.yml +56 -0
- package/.github/workflows/github-to-beads.yml +97 -0
- package/.kilocode/workflows/dev.md +346 -341
- package/.kilocode/workflows/plan.md +567 -522
- package/.kilocode/workflows/premerge.md +187 -177
- package/.kilocode/workflows/research.md +43 -43
- package/.kilocode/workflows/review.md +449 -443
- package/.kilocode/workflows/rollback.md +722 -722
- package/.kilocode/workflows/ship.md +213 -165
- package/.kilocode/workflows/sonarcloud.md +150 -150
- package/.kilocode/workflows/status.md +91 -49
- package/.kilocode/workflows/validate.md +289 -283
- package/.kilocode/workflows/verify.md +270 -222
- package/.mcp.json.example +12 -12
- package/.opencode/commands/dev.md +345 -340
- package/.opencode/commands/plan.md +566 -521
- package/.opencode/commands/premerge.md +186 -176
- package/.opencode/commands/research.md +42 -42
- package/.opencode/commands/review.md +448 -442
- package/.opencode/commands/rollback.md +721 -721
- package/.opencode/commands/ship.md +212 -164
- package/.opencode/commands/sonarcloud.md +149 -149
- package/.opencode/commands/status.md +90 -48
- package/.opencode/commands/validate.md +288 -282
- package/.opencode/commands/verify.md +269 -221
- package/.roo/commands/dev.md +346 -341
- package/.roo/commands/plan.md +567 -522
- package/.roo/commands/premerge.md +187 -177
- package/.roo/commands/research.md +43 -43
- package/.roo/commands/review.md +449 -443
- package/.roo/commands/rollback.md +722 -722
- package/.roo/commands/ship.md +213 -165
- package/.roo/commands/sonarcloud.md +150 -150
- package/.roo/commands/status.md +91 -49
- package/.roo/commands/validate.md +289 -283
- package/.roo/commands/verify.md +270 -222
- package/AGENTS.md +272 -175
- package/CLAUDE.md +110 -100
- package/README.md +429 -416
- package/bin/forge-cmd.js +317 -313
- package/bin/forge-preflight.js +322 -309
- package/bin/forge.js +4765 -4303
- package/docs/AGENT_INSTALL_PROMPT.md +342 -342
- package/docs/BEADS_GITHUB_SYNC.md +251 -251
- package/docs/ENHANCED_ONBOARDING.md +612 -602
- package/docs/EXAMPLES.md +482 -482
- package/docs/GREPTILE_SETUP.md +400 -400
- package/docs/MANUAL_REVIEW_GUIDE.md +106 -106
- package/docs/ROADMAP.md +359 -359
- package/docs/SETUP.md +663 -631
- package/docs/TOOLCHAIN.md +653 -630
- package/docs/VALIDATION.md +363 -363
- package/install.sh +40 -1056
- package/lefthook.yml +50 -39
- package/lib/agents/README.md +198 -198
- package/lib/agents/claude.plugin.json +28 -28
- package/lib/agents/cline.plugin.json +22 -22
- package/lib/agents/codex.plugin.json +19 -19
- package/lib/agents/copilot.plugin.json +24 -24
- package/lib/agents/cursor.plugin.json +25 -25
- package/lib/agents/kilocode.plugin.json +22 -22
- package/lib/agents/opencode.plugin.json +20 -20
- package/lib/agents/roo.plugin.json +23 -23
- package/lib/agents-config.js +2112 -2112
- package/lib/beads-health-check.js +143 -0
- package/lib/beads-setup.js +341 -0
- package/lib/beads-sync-scaffold.js +260 -0
- package/lib/commands/_registry.js +134 -0
- package/lib/commands/clean.js +181 -0
- package/lib/commands/dev.js +571 -513
- package/lib/commands/plan.js +692 -692
- package/lib/commands/push.js +196 -0
- package/lib/commands/recommend.js +119 -119
- package/lib/commands/ship.js +377 -377
- package/lib/commands/status.js +378 -378
- package/lib/commands/sync.js +55 -0
- package/lib/commands/team.js +37 -0
- package/lib/commands/test.js +207 -0
- package/lib/commands/validate.js +602 -602
- package/lib/commands/worktree.js +310 -0
- package/lib/context-merge.js +359 -359
- package/lib/dep-guard/analyzer.js +294 -294
- package/lib/dep-guard/behavior-detector.js +98 -98
- package/lib/dep-guard/contract-detector.js +162 -162
- package/lib/dep-guard/import-detector.js +498 -498
- package/lib/dep-guard/path-utils.js +13 -13
- package/lib/dep-guard/rubric.js +120 -120
- package/lib/dep-guard/task-parser.js +318 -318
- package/lib/detect-agent.js +191 -191
- package/lib/detect-worktree.js +47 -47
- package/lib/docs-command.js +51 -0
- package/lib/docs-copy.js +50 -0
- package/lib/file-hash.js +26 -26
- package/lib/freshness-token.js +148 -0
- package/lib/greptile-match.js +80 -0
- package/lib/husky-migration.js +450 -0
- package/lib/lefthook-check.js +65 -0
- package/lib/pat-setup.js +207 -0
- package/lib/plugin-catalog.js +350 -350
- package/lib/plugin-manager.js +166 -166
- package/lib/plugin-recommender.js +141 -141
- package/lib/project-discovery.js +491 -491
- package/lib/reset.js +309 -0
- package/lib/setup-action-log.js +139 -139
- package/lib/setup-summary-renderer.js +106 -106
- package/lib/setup-utils.js +96 -0
- package/lib/setup.js +192 -192
- package/lib/smart-merge.js +64 -0
- package/lib/symlink-utils.js +81 -0
- package/lib/task-ownership.js +117 -0
- package/lib/workflow-profiles.js +197 -197
- package/package.json +131 -128
- package/scripts/beads-context.sh +426 -0
- package/scripts/beads-context.test.js +567 -0
- package/scripts/behavioral-judge.sh +378 -0
- package/scripts/benchmark.js +85 -0
- package/scripts/branch-protection.js +183 -0
- package/scripts/check-agents.js +172 -0
- package/scripts/check-forge-token.js +98 -0
- package/scripts/commitlint.js +42 -0
- package/scripts/conflict-detect.sh +323 -0
- package/scripts/dep-guard-analyze.js +71 -0
- package/scripts/dep-guard.sh +789 -0
- package/scripts/eval_win.py +249 -0
- package/scripts/file-index.sh +493 -0
- package/scripts/forge-team/index.sh +86 -0
- package/scripts/forge-team/lib/agent-prompt.sh +52 -0
- package/scripts/forge-team/lib/claim.sh +256 -0
- package/scripts/forge-team/lib/dashboard.sh +341 -0
- package/scripts/forge-team/lib/epic.sh +332 -0
- package/scripts/forge-team/lib/hooks.sh +253 -0
- package/scripts/forge-team/lib/identity.sh +235 -0
- package/scripts/forge-team/lib/sync-github.sh +317 -0
- package/scripts/forge-team/lib/verify.sh +284 -0
- package/scripts/forge-team/lib/workload.sh +296 -0
- package/scripts/forge-team/tests/agent-prompt.test.sh +72 -0
- package/scripts/forge-team/tests/claim.test.sh +179 -0
- package/scripts/forge-team/tests/dashboard.test.sh +170 -0
- package/scripts/forge-team/tests/dispatcher.test.sh +79 -0
- package/scripts/forge-team/tests/epic.test.sh +176 -0
- package/scripts/forge-team/tests/hooks.test.sh +239 -0
- package/scripts/forge-team/tests/identity.test.sh +176 -0
- package/scripts/forge-team/tests/integration.test.sh +371 -0
- package/scripts/forge-team/tests/sync-github.test.sh +209 -0
- package/scripts/forge-team/tests/verify.test.sh +314 -0
- package/scripts/forge-team/tests/workflow-integration.test.sh +43 -0
- package/scripts/forge-team/tests/workload.test.sh +209 -0
- package/scripts/github-beads-sync/comment.mjs +64 -0
- package/scripts/github-beads-sync/config.mjs +148 -0
- package/scripts/github-beads-sync/github-api.mjs +131 -0
- package/scripts/github-beads-sync/index.mjs +332 -0
- package/scripts/github-beads-sync/label-mapper.mjs +54 -0
- package/scripts/github-beads-sync/mapping.mjs +78 -0
- package/scripts/github-beads-sync/reverse-sync-cli.mjs +31 -0
- package/scripts/github-beads-sync/reverse-sync.mjs +138 -0
- package/scripts/github-beads-sync/run-bd.mjs +159 -0
- package/scripts/github-beads-sync/sanitize.mjs +121 -0
- package/scripts/github-beads-sync.config.json +26 -0
- package/scripts/improve-command.js +375 -0
- package/scripts/lib/eval-runner.js +268 -0
- package/scripts/lib/eval-schema.js +135 -0
- package/scripts/lib/eval-storage.js +78 -0
- package/scripts/lib/grading.js +203 -0
- package/scripts/lib/jsonl-lock.sh +48 -0
- package/scripts/lib/sanitize.sh +116 -0
- package/scripts/lib/transcript-parser.js +63 -0
- package/scripts/lint.js +47 -0
- package/scripts/migrate-to-bun-test.js +412 -0
- package/scripts/pr-coordinator.sh +706 -0
- package/scripts/run-command-eval.js +236 -0
- package/scripts/smart-status.sh +809 -0
- package/scripts/sync-commands.js +571 -0
- package/scripts/sync-utils.sh +455 -0
- package/scripts/test-dashboard.js +123 -0
- package/scripts/test.js +46 -0
- package/scripts/validate.sh +94 -0
- package/skills/parallel-deep-research/SKILL.md +108 -108
- package/skills/parallel-deep-research/evals/README.md +27 -27
- package/skills/parallel-deep-research/evals/evals.json +62 -62
- package/skills/sonarcloud-analysis/SKILL.md +171 -171
- package/skills/sonarcloud-analysis/evals/README.md +27 -27
- package/skills/sonarcloud-analysis/evals/evals.json +50 -50
- package/skills/sonarcloud-analysis/references/api-reference.md +466 -466
- package/.cursor/hooks/state/continual-learning-index.json +0 -19
- package/.cursor/hooks/state/continual-learning.json +0 -8
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
# Manual Review Guide
|
|
2
|
-
|
|
3
|
-
**Purpose**: Structured guidance for manual code review integrated with AI review tools.
|
|
4
|
-
|
|
5
|
-
**Audience**: Developers conducting PR reviews, maintainers configuring review workflows.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
Manual review remains essential even with AI-powered tools like Greptile and CodeRabbit. This guide provides a systematic approach to combine human judgment with AI insights for comprehensive code quality.
|
|
12
|
-
|
|
13
|
-
**Review Philosophy**:
|
|
14
|
-
- **AI First, Human Final**: Use AI tools for breadth, manual review for depth
|
|
15
|
-
- **Structured Process**: Follow systematic checklist to avoid missing critical issues
|
|
16
|
-
- **Context Matters**: Apply judgment based on project stage, risk, and complexity
|
|
17
|
-
- **Documentation Required**: Every PR needs clear explanation of changes and reasoning
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Review Workflow Integration
|
|
22
|
-
|
|
23
|
-
This guide integrates with the Forge 9-Stage TDD Workflow:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
/status → /research → /plan → /dev → /validate → /ship → /review → /premerge → /verify
|
|
27
|
-
↑
|
|
28
|
-
You are here
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### When to Use This Guide
|
|
32
|
-
|
|
33
|
-
- **Stage 7 (/review)**: Address ALL PR feedback from GitHub Actions, Greptile, SonarCloud, and manual reviewers
|
|
34
|
-
- **After AI Review**: When Greptile or CodeRabbit has completed initial analysis
|
|
35
|
-
- **Before Merge**: Final verification before approving PR
|
|
36
|
-
- **Post-Merge**: Documentation verification in /verify stage
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## Part 1: AI Review Tools Best Practices
|
|
41
|
-
|
|
42
|
-
### Greptile - Semantic Understanding
|
|
43
|
-
- Use .claude/scripts/greptile-resolve.sh for systematic thread handling
|
|
44
|
-
- Always reply and resolve threads after fixes
|
|
45
|
-
- See .claude/rules/greptile-review-process.md for detailed workflow
|
|
46
|
-
|
|
47
|
-
### CodeRabbit - Multi-Model Review
|
|
48
|
-
- Address security issues immediately
|
|
49
|
-
- Consider performance suggestions with benchmarks
|
|
50
|
-
- Apply style suggestions for consistency
|
|
51
|
-
|
|
52
|
-
### SonarCloud - Static Analysis
|
|
53
|
-
- Coverage ≥80% on new code
|
|
54
|
-
- 0 security hotspots unreviewed
|
|
55
|
-
- Use /sonarcloud skill for PR-specific issues
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## Part 2: Manual Review Checklist
|
|
60
|
-
|
|
61
|
-
### 1. Functional Correctness
|
|
62
|
-
- ☐ Code matches PR description
|
|
63
|
-
- ☐ Edge cases handled
|
|
64
|
-
- ☐ Error messages clear
|
|
65
|
-
- ☐ Invalid input handled gracefully
|
|
66
|
-
|
|
67
|
-
### 2. Security (OWASP Top 10)
|
|
68
|
-
- ☐ Authorization before sensitive ops
|
|
69
|
-
- ☐ Data encrypted at rest/transit
|
|
70
|
-
- ☐ SQL queries parameterized
|
|
71
|
-
- ☐ No code injection risks
|
|
72
|
-
|
|
73
|
-
### 3. Testing Quality
|
|
74
|
-
- ☐ Tests for new code
|
|
75
|
-
- ☐ Edge cases covered
|
|
76
|
-
- ☐ TDD compliance (test commits before feat commits)
|
|
77
|
-
|
|
78
|
-
### 4. Code Quality
|
|
79
|
-
- ☐ Self-documenting code
|
|
80
|
-
- ☐ Single responsibility functions
|
|
81
|
-
- ☐ No duplication (DRY)
|
|
82
|
-
- ☐ Clear organization
|
|
83
|
-
|
|
84
|
-
### 5. Performance
|
|
85
|
-
- ☐ Efficient algorithms
|
|
86
|
-
- ☐ Optimized queries
|
|
87
|
-
- ☐ No memory leaks
|
|
88
|
-
|
|
89
|
-
### 6. Documentation
|
|
90
|
-
- ☐ Public APIs documented
|
|
91
|
-
- ☐ PR explains why, not just what
|
|
92
|
-
- ☐ README updated if needed
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Summary
|
|
97
|
-
|
|
98
|
-
**Manual Review Essentials**:
|
|
99
|
-
- Use AI tools for pattern detection
|
|
100
|
-
- Apply human judgment for context
|
|
101
|
-
- Follow systematic checklist
|
|
102
|
-
- Verify security, testing, documentation
|
|
103
|
-
|
|
104
|
-
**Integration**: Stage 7 (/review) → Address ALL feedback systematically
|
|
105
|
-
|
|
106
|
-
**Key**: Trust AI for breadth, humans for depth. Best results combine both.
|
|
1
|
+
# Manual Review Guide
|
|
2
|
+
|
|
3
|
+
**Purpose**: Structured guidance for manual code review integrated with AI review tools.
|
|
4
|
+
|
|
5
|
+
**Audience**: Developers conducting PR reviews, maintainers configuring review workflows.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Manual review remains essential even with AI-powered tools like Greptile and CodeRabbit. This guide provides a systematic approach to combine human judgment with AI insights for comprehensive code quality.
|
|
12
|
+
|
|
13
|
+
**Review Philosophy**:
|
|
14
|
+
- **AI First, Human Final**: Use AI tools for breadth, manual review for depth
|
|
15
|
+
- **Structured Process**: Follow systematic checklist to avoid missing critical issues
|
|
16
|
+
- **Context Matters**: Apply judgment based on project stage, risk, and complexity
|
|
17
|
+
- **Documentation Required**: Every PR needs clear explanation of changes and reasoning
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Review Workflow Integration
|
|
22
|
+
|
|
23
|
+
This guide integrates with the Forge 9-Stage TDD Workflow:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
/status → /research → /plan → /dev → /validate → /ship → /review → /premerge → /verify
|
|
27
|
+
↑
|
|
28
|
+
You are here
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### When to Use This Guide
|
|
32
|
+
|
|
33
|
+
- **Stage 7 (/review)**: Address ALL PR feedback from GitHub Actions, Greptile, SonarCloud, and manual reviewers
|
|
34
|
+
- **After AI Review**: When Greptile or CodeRabbit has completed initial analysis
|
|
35
|
+
- **Before Merge**: Final verification before approving PR
|
|
36
|
+
- **Post-Merge**: Documentation verification in /verify stage
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
## Part 1: AI Review Tools Best Practices
|
|
41
|
+
|
|
42
|
+
### Greptile - Semantic Understanding
|
|
43
|
+
- Use .claude/scripts/greptile-resolve.sh for systematic thread handling
|
|
44
|
+
- Always reply and resolve threads after fixes
|
|
45
|
+
- See .claude/rules/greptile-review-process.md for detailed workflow
|
|
46
|
+
|
|
47
|
+
### CodeRabbit - Multi-Model Review
|
|
48
|
+
- Address security issues immediately
|
|
49
|
+
- Consider performance suggestions with benchmarks
|
|
50
|
+
- Apply style suggestions for consistency
|
|
51
|
+
|
|
52
|
+
### SonarCloud - Static Analysis
|
|
53
|
+
- Coverage ≥80% on new code
|
|
54
|
+
- 0 security hotspots unreviewed
|
|
55
|
+
- Use /sonarcloud skill for PR-specific issues
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Part 2: Manual Review Checklist
|
|
60
|
+
|
|
61
|
+
### 1. Functional Correctness
|
|
62
|
+
- ☐ Code matches PR description
|
|
63
|
+
- ☐ Edge cases handled
|
|
64
|
+
- ☐ Error messages clear
|
|
65
|
+
- ☐ Invalid input handled gracefully
|
|
66
|
+
|
|
67
|
+
### 2. Security (OWASP Top 10)
|
|
68
|
+
- ☐ Authorization before sensitive ops
|
|
69
|
+
- ☐ Data encrypted at rest/transit
|
|
70
|
+
- ☐ SQL queries parameterized
|
|
71
|
+
- ☐ No code injection risks
|
|
72
|
+
|
|
73
|
+
### 3. Testing Quality
|
|
74
|
+
- ☐ Tests for new code
|
|
75
|
+
- ☐ Edge cases covered
|
|
76
|
+
- ☐ TDD compliance (test commits before feat commits)
|
|
77
|
+
|
|
78
|
+
### 4. Code Quality
|
|
79
|
+
- ☐ Self-documenting code
|
|
80
|
+
- ☐ Single responsibility functions
|
|
81
|
+
- ☐ No duplication (DRY)
|
|
82
|
+
- ☐ Clear organization
|
|
83
|
+
|
|
84
|
+
### 5. Performance
|
|
85
|
+
- ☐ Efficient algorithms
|
|
86
|
+
- ☐ Optimized queries
|
|
87
|
+
- ☐ No memory leaks
|
|
88
|
+
|
|
89
|
+
### 6. Documentation
|
|
90
|
+
- ☐ Public APIs documented
|
|
91
|
+
- ☐ PR explains why, not just what
|
|
92
|
+
- ☐ README updated if needed
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Summary
|
|
97
|
+
|
|
98
|
+
**Manual Review Essentials**:
|
|
99
|
+
- Use AI tools for pattern detection
|
|
100
|
+
- Apply human judgment for context
|
|
101
|
+
- Follow systematic checklist
|
|
102
|
+
- Verify security, testing, documentation
|
|
103
|
+
|
|
104
|
+
**Integration**: Stage 7 (/review) → Address ALL feedback systematically
|
|
105
|
+
|
|
106
|
+
**Key**: Trust AI for breadth, humans for depth. Best results combine both.
|