| 37 | } |
| 38 | |
| 39 | function usage() { |
| 40 | return [ |
| 41 | 'Usage:', |
| 42 | ' node scripts/campaign.js complete <slug-or-path> [--archive] [--pr <url>] [--merge-sha <sha>] [--verification <text>] [--note <text>] [--outcome <type>]', |
| 43 | '', |
| 44 | 'Completes a campaign only when every phase is complete, completed, done, or skipped.', |
| 45 | 'Outcome types: shipped-pr, review-package, implementation-plan, blocked-decision, archived-completion.', |
| 46 | 'Use --force only after human review of incomplete phases.', |
| 47 | ].join('\n'); |
| 48 | } |
| 49 | |
| 50 | function resolveCampaignPath(projectRoot, target) { |
| 51 | if (!target) throw new Error('Missing campaign slug or path.'); |