arcane-cli 0.39.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -1
- package/dist/assets/.agents/skills/spell-address-review/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-adopt-docs/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-arcane-version/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-architect/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-brainstorm/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-bug/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-bump/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-check-drift/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-close-session/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-commit-work/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-compliance/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-create-pull-request/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-document/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-dotnet-expert/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-eas-store-deploy/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-enchant/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-explain-concept/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-feedback/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-full-cycle/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-generate-bot-icons/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-implement/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-make-discoverable/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-manifest/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-open-session/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-plan/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-present-arcane/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-product-review/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-review/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-review-batch/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-save-idea/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-scope/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-scry/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-security-review/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-ship/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-status/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-suggest-feature/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-summon-venture/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-sync-pull-request/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-test/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-todo/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-verification-ledger/SKILL.md +1 -1
- package/dist/assets/.arcane/governance/development-methodology.md +6 -6
- package/dist/assets/.arcane/governance/git-conventions.md +2 -2
- package/dist/assets/.arcane/governance/portable-bootstrap.md +1 -0
- package/dist/assets/.arcane/governance/product-excellence-standards.md +1 -1
- package/dist/assets/.arcane/governance/spell-authoring-standards.md +9 -1
- package/dist/assets/.arcane/governance/universal-agent-rules.md +5 -3
- package/dist/assets/.arcane/spells/spell-address-review.md +115 -0
- package/dist/assets/.arcane/spells/spell-adopt-docs.md +158 -0
- package/dist/assets/.arcane/spells/spell-arcane-version.md +87 -0
- package/dist/assets/.arcane/spells/spell-architect.md +117 -0
- package/dist/assets/.arcane/spells/spell-brainstorm.md +125 -0
- package/dist/assets/.arcane/spells/spell-bug.md +123 -0
- package/dist/assets/.arcane/spells/spell-bump.md +82 -0
- package/dist/assets/.arcane/spells/spell-check-drift.md +118 -0
- package/dist/assets/.arcane/spells/spell-close-session.md +266 -0
- package/dist/assets/.arcane/spells/spell-commit-work.md +279 -0
- package/dist/assets/.arcane/spells/spell-compliance.md +130 -0
- package/dist/assets/.arcane/spells/spell-create-pull-request.md +224 -0
- package/dist/assets/.arcane/spells/spell-document.md +84 -0
- package/dist/assets/.arcane/spells/spell-dotnet-expert.md +118 -0
- package/dist/assets/.arcane/spells/spell-eas-store-deploy.md +254 -0
- package/dist/assets/.arcane/spells/spell-enchant.md +386 -0
- package/dist/assets/.arcane/spells/spell-explain-concept.md +70 -0
- package/dist/assets/.arcane/spells/spell-feedback.md +138 -0
- package/dist/assets/.arcane/spells/spell-full-cycle.md +253 -0
- package/dist/assets/.arcane/spells/spell-generate-bot-icons.md +85 -0
- package/dist/assets/.arcane/spells/spell-implement.md +109 -0
- package/dist/assets/.arcane/spells/spell-make-discoverable.md +293 -0
- package/dist/assets/.arcane/spells/spell-manifest.md +148 -0
- package/dist/assets/.arcane/spells/spell-open-session.md +154 -0
- package/dist/assets/.arcane/spells/spell-plan.md +160 -0
- package/dist/assets/.arcane/spells/spell-present-arcane.md +189 -0
- package/dist/assets/.arcane/spells/spell-product-review.md +98 -0
- package/dist/assets/.arcane/spells/spell-review-batch.md +113 -0
- package/dist/assets/.arcane/spells/spell-review.md +142 -0
- package/dist/assets/.arcane/spells/spell-save-idea.md +117 -0
- package/dist/assets/.arcane/spells/spell-scope.md +266 -0
- package/dist/assets/.arcane/spells/spell-scry.md +124 -0
- package/dist/assets/.arcane/spells/spell-security-review.md +152 -0
- package/dist/assets/.arcane/spells/spell-ship.md +106 -0
- package/dist/assets/.arcane/spells/spell-status.md +86 -0
- package/dist/assets/.arcane/spells/spell-suggest-feature.md +122 -0
- package/dist/assets/.arcane/spells/spell-summon-venture.md +110 -0
- package/dist/assets/.arcane/spells/spell-sync-pull-request.md +161 -0
- package/dist/assets/.arcane/spells/spell-test.md +88 -0
- package/dist/assets/.arcane/spells/spell-todo.md +166 -0
- package/dist/assets/.arcane/spells/spell-verification-ledger.md +102 -0
- package/dist/assets/.claude/commands/spell-address-review.md +2 -2
- package/dist/assets/.claude/commands/spell-adopt-docs.md +2 -2
- package/dist/assets/.claude/commands/spell-arcane-version.md +2 -2
- package/dist/assets/.claude/commands/spell-architect.md +2 -2
- package/dist/assets/.claude/commands/spell-brainstorm.md +2 -2
- package/dist/assets/.claude/commands/spell-bug.md +2 -2
- package/dist/assets/.claude/commands/spell-bump.md +2 -2
- package/dist/assets/.claude/commands/spell-check-drift.md +2 -2
- package/dist/assets/.claude/commands/spell-close-session.md +2 -2
- package/dist/assets/.claude/commands/spell-commit-work.md +2 -2
- package/dist/assets/.claude/commands/spell-compliance.md +2 -2
- package/dist/assets/.claude/commands/spell-create-pull-request.md +2 -2
- package/dist/assets/.claude/commands/spell-document.md +2 -2
- package/dist/assets/.claude/commands/spell-dotnet-expert.md +2 -2
- package/dist/assets/.claude/commands/spell-eas-store-deploy.md +2 -2
- package/dist/assets/.claude/commands/spell-enchant.md +2 -2
- package/dist/assets/.claude/commands/spell-explain-concept.md +2 -2
- package/dist/assets/.claude/commands/spell-feedback.md +2 -2
- package/dist/assets/.claude/commands/spell-full-cycle.md +2 -2
- package/dist/assets/.claude/commands/spell-generate-bot-icons.md +2 -2
- package/dist/assets/.claude/commands/spell-implement.md +2 -2
- package/dist/assets/.claude/commands/spell-make-discoverable.md +2 -2
- package/dist/assets/.claude/commands/spell-manifest.md +2 -2
- package/dist/assets/.claude/commands/spell-open-session.md +2 -2
- package/dist/assets/.claude/commands/spell-plan.md +2 -2
- package/dist/assets/.claude/commands/spell-present-arcane.md +2 -2
- package/dist/assets/.claude/commands/spell-product-review.md +2 -2
- package/dist/assets/.claude/commands/spell-review-batch.md +2 -2
- package/dist/assets/.claude/commands/spell-review.md +2 -2
- package/dist/assets/.claude/commands/spell-save-idea.md +2 -2
- package/dist/assets/.claude/commands/spell-scope.md +2 -2
- package/dist/assets/.claude/commands/spell-scry.md +2 -2
- package/dist/assets/.claude/commands/spell-security-review.md +2 -2
- package/dist/assets/.claude/commands/spell-ship.md +2 -2
- package/dist/assets/.claude/commands/spell-status.md +2 -2
- package/dist/assets/.claude/commands/spell-suggest-feature.md +2 -2
- package/dist/assets/.claude/commands/spell-summon-venture.md +2 -2
- package/dist/assets/.claude/commands/spell-sync-pull-request.md +2 -2
- package/dist/assets/.claude/commands/spell-test.md +2 -2
- package/dist/assets/.claude/commands/spell-todo.md +2 -2
- package/dist/assets/.claude/commands/spell-verification-ledger.md +2 -2
- package/dist/assets/.github/instructions/agent-output.instructions.md +14 -13
- package/dist/assets/.github/prompts/spell-address-review.prompt.md +1 -107
- package/dist/assets/.github/prompts/spell-adopt-docs.prompt.md +1 -150
- package/dist/assets/.github/prompts/spell-arcane-version.prompt.md +1 -79
- package/dist/assets/.github/prompts/spell-architect.prompt.md +1 -109
- package/dist/assets/.github/prompts/spell-brainstorm.prompt.md +1 -117
- package/dist/assets/.github/prompts/spell-bug.prompt.md +1 -115
- package/dist/assets/.github/prompts/spell-bump.prompt.md +1 -74
- package/dist/assets/.github/prompts/spell-check-drift.prompt.md +1 -110
- package/dist/assets/.github/prompts/spell-close-session.prompt.md +1 -258
- package/dist/assets/.github/prompts/spell-commit-work.prompt.md +1 -270
- package/dist/assets/.github/prompts/spell-compliance.prompt.md +1 -122
- package/dist/assets/.github/prompts/spell-create-pull-request.prompt.md +1 -215
- package/dist/assets/.github/prompts/spell-document.prompt.md +1 -76
- package/dist/assets/.github/prompts/spell-dotnet-expert.prompt.md +1 -110
- package/dist/assets/.github/prompts/spell-eas-store-deploy.prompt.md +1 -246
- package/dist/assets/.github/prompts/spell-enchant.prompt.md +1 -378
- package/dist/assets/.github/prompts/spell-explain-concept.prompt.md +1 -62
- package/dist/assets/.github/prompts/spell-feedback.prompt.md +1 -130
- package/dist/assets/.github/prompts/spell-full-cycle.prompt.md +1 -245
- package/dist/assets/.github/prompts/spell-generate-bot-icons.prompt.md +1 -77
- package/dist/assets/.github/prompts/spell-implement.prompt.md +1 -101
- package/dist/assets/.github/prompts/spell-make-discoverable.prompt.md +1 -285
- package/dist/assets/.github/prompts/spell-manifest.prompt.md +1 -140
- package/dist/assets/.github/prompts/spell-open-session.prompt.md +1 -146
- package/dist/assets/.github/prompts/spell-plan.prompt.md +1 -152
- package/dist/assets/.github/prompts/spell-present-arcane.prompt.md +1 -181
- package/dist/assets/.github/prompts/spell-product-review.prompt.md +1 -90
- package/dist/assets/.github/prompts/spell-review-batch.prompt.md +1 -105
- package/dist/assets/.github/prompts/spell-review.prompt.md +1 -134
- package/dist/assets/.github/prompts/spell-save-idea.prompt.md +1 -109
- package/dist/assets/.github/prompts/spell-scope.prompt.md +1 -258
- package/dist/assets/.github/prompts/spell-scry.prompt.md +1 -116
- package/dist/assets/.github/prompts/spell-security-review.prompt.md +1 -144
- package/dist/assets/.github/prompts/spell-ship.prompt.md +1 -98
- package/dist/assets/.github/prompts/spell-status.prompt.md +1 -78
- package/dist/assets/.github/prompts/spell-suggest-feature.prompt.md +1 -114
- package/dist/assets/.github/prompts/spell-summon-venture.prompt.md +1 -102
- package/dist/assets/.github/prompts/spell-sync-pull-request.prompt.md +1 -152
- package/dist/assets/.github/prompts/spell-test.prompt.md +1 -80
- package/dist/assets/.github/prompts/spell-todo.prompt.md +1 -158
- package/dist/assets/.github/prompts/spell-verification-ledger.prompt.md +1 -94
- package/dist/index.js +1073 -246
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- /package/dist/assets/{.github/prompts → .arcane/spells}/_fragments/tracking-mode-declaration.md +0 -0
|
@@ -6,137 +6,4 @@ argument-hint: PR number, branch name, or file paths to review
|
|
|
6
6
|
agent: agent
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- This prompt performs an adversarial code review — "looks good" is not acceptable.
|
|
12
|
-
- The reviewer must explicitly cover every lens — correctness, security, performance, tests, naming/clarity, architecture — and state "no issues" for any lens that is clean. There is no finding quota: zero findings is a valid outcome on a clean or small diff.
|
|
13
|
-
- Checks architecture compliance, test coverage, security, and coding standards.
|
|
14
|
-
- See [[.arcane/governance/development-methodology|Development Methodology]] for the adversarial review pattern.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
Perform an adversarial review of the specified code changes.
|
|
19
|
-
|
|
20
|
-
Use these files for context:
|
|
21
|
-
|
|
22
|
-
- [governance/development-methodology.md](../../.arcane/governance/development-methodology.md) — Adversarial review requirements
|
|
23
|
-
- [governance/testing-standards.md](../../.arcane/governance/testing-standards.md) — Coverage thresholds to validate
|
|
24
|
-
- [DECISIONS.md](../../DECISIONS.md) — ADRs to check compliance against
|
|
25
|
-
- [security/threat-model.md](../../security/threat-model.md) — Security controls to validate
|
|
26
|
-
- The feature's `architecture.md` — tech decisions that code must follow
|
|
27
|
-
|
|
28
|
-
Workflow:
|
|
29
|
-
|
|
30
|
-
1. **Gather the diff** — get the full set of changes being reviewed:
|
|
31
|
-
- `git diff main...HEAD` for branch reviews.
|
|
32
|
-
- Specific file paths if provided.
|
|
33
|
-
- PR diff if a PR number is given.
|
|
34
|
-
|
|
35
|
-
2. **Architecture compliance** — for each changed file:
|
|
36
|
-
- Does it follow the architecture decisions in architecture.md?
|
|
37
|
-
- Does it respect existing ADRs?
|
|
38
|
-
- Are there unauthorized framework or pattern deviations?
|
|
39
|
-
|
|
40
|
-
3. **Code quality** — check for:
|
|
41
|
-
- Naming conventions (per project standards).
|
|
42
|
-
- Error handling (appropriate, not excessive).
|
|
43
|
-
- Code duplication (DRY violations).
|
|
44
|
-
- Complexity (functions too long, too many parameters).
|
|
45
|
-
- Dead code, commented-out code, debug statements.
|
|
46
|
-
|
|
47
|
-
4. **Test coverage** — validate:
|
|
48
|
-
- New code has corresponding tests.
|
|
49
|
-
- Coverage meets thresholds per testing-standards.md.
|
|
50
|
-
- Edge cases are tested (nulls, empty collections, boundaries).
|
|
51
|
-
- No test stubs or skipped tests without justification.
|
|
52
|
-
|
|
53
|
-
5. **Security review** — check for OWASP Top 10 issues:
|
|
54
|
-
- Injection vulnerabilities (SQL, XSS, command injection).
|
|
55
|
-
- Authentication/authorization gaps.
|
|
56
|
-
- Sensitive data exposure.
|
|
57
|
-
- Insecure dependencies.
|
|
58
|
-
|
|
59
|
-
6. **Generate review report**:
|
|
60
|
-
```markdown
|
|
61
|
-
## Code Review — [Feature/Branch Name]
|
|
62
|
-
|
|
63
|
-
**Reviewer:** [Agent name]
|
|
64
|
-
**Date:** [timestamp]
|
|
65
|
-
|
|
66
|
-
### Coverage Summary
|
|
67
|
-
|
|
68
|
-
One row per coverage lens. Verdict is `PASS` for a clean lens (note "no issues"),
|
|
69
|
-
`WARN` for non-blocking findings, `FAIL` for a blocker. Reference the relevant
|
|
70
|
-
finding IDs (`R1`, `R2`, …) in the Notes column.
|
|
71
|
-
|
|
72
|
-
| Lens | Verdict (PASS/WARN/FAIL) | Notes |
|
|
73
|
-
| --------------- | ------------------------ | ------------------------------------ |
|
|
74
|
-
| Correctness | [PASS/WARN/FAIL] | [no issues / refs to R#] |
|
|
75
|
-
| Security | [PASS/WARN/FAIL] | [no issues / refs to R#] |
|
|
76
|
-
| Performance | [PASS/WARN/FAIL] | [no issues / refs to R#] |
|
|
77
|
-
| Tests | [PASS/WARN/FAIL] | [no issues / refs to R#] |
|
|
78
|
-
| Naming/Clarity | [PASS/WARN/FAIL] | [no issues / refs to R#] |
|
|
79
|
-
| Architecture | [PASS/WARN/FAIL] | [no issues / refs to R#] |
|
|
80
|
-
|
|
81
|
-
### Findings
|
|
82
|
-
|
|
83
|
-
Give each finding a stable ID (`R1`, `R2`, …) so it can be referenced in follow-ups and in `spell-address-review`.
|
|
84
|
-
|
|
85
|
-
#### HIGH Severity
|
|
86
|
-
- **R1** — [Finding with file:line reference]
|
|
87
|
-
|
|
88
|
-
#### MEDIUM Severity
|
|
89
|
-
- **R2** — [Finding with file:line reference]
|
|
90
|
-
|
|
91
|
-
#### LOW Severity
|
|
92
|
-
- **R3** — [Finding with file:line reference]
|
|
93
|
-
|
|
94
|
-
### Architecture Compliance
|
|
95
|
-
- [Compliant / Minor deviation / Major violation]
|
|
96
|
-
|
|
97
|
-
### Test Coverage Assessment
|
|
98
|
-
- [Coverage % and gap analysis]
|
|
99
|
-
|
|
100
|
-
### Security Assessment
|
|
101
|
-
- [OWASP checklist results]
|
|
102
|
-
|
|
103
|
-
### Verdict
|
|
104
|
-
- [ ] APPROVE — no critical issues
|
|
105
|
-
- [ ] REQUEST CHANGES — critical issues found (list blockers)
|
|
106
|
-
- [ ] DEFER — needs human decision on [topic]
|
|
107
|
-
|
|
108
|
-
### Backlog Items
|
|
109
|
-
- [Findings outside scope of this change — track separately]
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
7. **Save report to disk** — write the review report to the feature folder's `assessments/` directory:
|
|
113
|
-
```bash
|
|
114
|
-
FEATURE_FOLDER="features/$(git symbolic-ref --short HEAD | sed 's|.*/feat/||')"
|
|
115
|
-
REPORT_PATH="$FEATURE_FOLDER/assessments/review-$(date +%Y-%m-%d).md"
|
|
116
|
-
mkdir -p "$FEATURE_FOLDER/assessments"
|
|
117
|
-
# Write the full review report to $REPORT_PATH
|
|
118
|
-
```
|
|
119
|
-
If the branch doesn't follow `feat/{id}-{slug}`, ask the operator for the feature folder path.
|
|
120
|
-
Confirm the saved path to the user.
|
|
121
|
-
|
|
122
|
-
8. **Present findings** — show the review to the user with a clear recommendation.
|
|
123
|
-
|
|
124
|
-
9. **Write back to the pull request** — when a PR exists for these changes, sync a short verdict plus a findings summary (verdict + finding counts/IDs + a pointer to the saved report) into the PR body/description. Use provider-agnostic phrasing that works for either GitHub or Azure DevOps. Mark it clearly as a snapshot at review time, and fall back to a top-level PR comment if the description can't be updated.
|
|
125
|
-
|
|
126
|
-
10. **Post the formal round state** (ARC-035 decision 3 — Arcane's own framework decision, cited as plain text, not linked, since this file ships; see `agent-output.instructions.md` → Doc-ID Link Format) — step 9's write-back is a human-readable summary; this is the separate, machine-readable signal the `Review round clear` required check actually reads. Only a confirmed blocker posts a formal review — an `APPROVE` or `DEFER` verdict posts nothing here, preserving the zero-friction path for PRs nobody formally blocks:
|
|
127
|
-
- **REQUEST CHANGES verdict:**
|
|
128
|
-
- GitHub: `gh pr review <n> --request-changes --body "<one-line blocker summary + pointer to the saved report>"`.
|
|
129
|
-
- Azure DevOps: `az repos pr set-vote --id <n> --vote reject` — the same primitive `spell-commit-work.prompt.md`'s author-side self-approval step already uses (`az repos pr set-vote --vote approve`), applied to the reviewer side.
|
|
130
|
-
- **Closing a round you previously blocked** (a later pass confirms the blocker is fixed) — do this explicitly; `dismiss_stale_reviews_on_push` is `false` on this repository's ruleset, so a later push never clears it automatically:
|
|
131
|
-
- GitHub: find the blocking review's ID (`gh api repos/{owner}/{repo}/pulls/<n>/reviews --jq '.[] | select(.state=="CHANGES_REQUESTED") | .id'`), then dismiss it — `gh api -X PUT repos/{owner}/{repo}/pulls/<n>/reviews/<review_id>/dismissals -f event=DISMISS -f message="<why this is now resolved, referencing the fix commit>"`.
|
|
132
|
-
- Azure DevOps: `az repos pr set-vote --id <n> --vote approve` (or reset to no-vote per team convention).
|
|
133
|
-
- Degrade silently if the CLI is unauthenticated or the PR can't be resolved (e.g. no PR exists yet for a local-only review) — never let this step abort a review that otherwise completed; the findings, report, and step 9 write-back still stand on their own.
|
|
134
|
-
- **GitHub refuses a REQUEST CHANGES verdict from the PR's own author** (`GraphQL: Review Can not request changes on your own pull request`, verified live 2026-08-31 — the same restriction as self-approval, just previously untested). When you are reviewing your own authored PR under the same GitHub identity, this call will fail with exactly that error: treat it as expected, not a bug, and fall back to the step 9 write-back as the only signal available — a formal blocking review needs a genuinely distinct reviewer identity (a second collaborator, or a separate bot/service account).
|
|
135
|
-
|
|
136
|
-
Rules:
|
|
137
|
-
- **Cover every dimension, not a finding count.** You MUST explicitly address each lens — correctness, security, performance, tests, naming/clarity, architecture — and state "no issues" for any lens that is clean. There is no minimum number of findings: zero findings is a valid outcome on a clean or small diff. The mandate is coverage of effort, not a count of findings — never fabricate issues to hit a quota.
|
|
138
|
-
- **Never rubber-stamp.** Every review must include substantive analysis across all dimensions.
|
|
139
|
-
- **Classify severity honestly.** Don't inflate LOW findings to pad the report.
|
|
140
|
-
- **Escalate architecture-level flaws.** If the review surfaces deep design or architecture problems (not line-level fixes), recommend routing them to `spell-architect` rather than trying to patch them inline.
|
|
141
|
-
- **Separate concerns.** Don't block a PR for issues unrelated to the current change — add them to backlog.
|
|
142
|
-
- **Check for bias.** If you wrote the code being reviewed, flag the conflict and recommend a different agent review.
|
|
9
|
+
This prompt is the Arcane `spell-review` spell. Read [`.arcane/spells/spell-review.md`](../../.arcane/spells/spell-review.md) and follow it as the complete workflow.
|
|
@@ -6,112 +6,4 @@ argument-hint: The idea itself — a sentence to a couple of paragraphs (e.g., "
|
|
|
6
6
|
agent: agent
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- This spell saves a short idea into `IDEAS.md` at the repo root with a timestamp, so a good thought is not lost between sessions.
|
|
12
|
-
- It is deliberately fast and low-friction: no approval gate, no multi-step proposal — capture and confirm.
|
|
13
|
-
- Use it the moment an idea occurs to you. Triage later with `spell-todo` or `spell-suggest-feature`; in a hub, promote with `spell-manifest`.
|
|
14
|
-
- This is the lightweight counterpart to `spell-document` (which formalizes a whole conversation into polished docs).
|
|
15
|
-
- **In a hub repo:** "save this idea for <venture>" targets that venture's own `IDEAS.md` book instead of the hub root — private by default, including for ventures whose own repo is public.
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
Capture the user's idea into the idea inbox with minimal ceremony.
|
|
20
|
-
|
|
21
|
-
The user's input IS the idea. If no idea text was provided, ask one short question: _"What's the idea?"_ and stop until they answer.
|
|
22
|
-
|
|
23
|
-
## Step 0 — Venture Targeting (Hub Only)
|
|
24
|
-
|
|
25
|
-
Resolve `{BUSINESS_ROOT}` from `.arcane.json`'s `business_root` field (default `ventures/` if unset) before anything below.
|
|
26
|
-
|
|
27
|
-
If the input names a venture ("save this idea for ordo", `--venture <slug>`), resolve it through `{BUSINESS_ROOT}/registry.json`'s aliases first (exact slug → alias → closest match offered — never guessed). Unknown slug:
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
No venture "<slug>" under {BUSINESS_ROOT}/ (closest: ordovica, tidewright).
|
|
31
|
-
1) use <closest> 2) save to hub root IDEAS.md 3) cancel (create the venture first: spell-summon-venture)
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Never silently create a venture folder.
|
|
35
|
-
|
|
36
|
-
If `role` in `.arcane.json` is not `"hub"`, venture-targeting phrasing is refused:
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
Venture targeting works only in the hub repo (role: "hub" in .arcane.json). This repo has no venture books.
|
|
40
|
-
1) save to this repo's IDEAS.md (venture reference removed)
|
|
41
|
-
2) skip — capture it in the hub: spell-save-idea --venture <slug> "<idea>"
|
|
42
|
-
Which? (1/2)
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
If option 1 is chosen and the named venture is a *different* venture than this repo's own, strip that name from the idea text before writing it — a sibling venture's name must never land in a consumer repo's `IDEAS.md`. If it's this repo's own venture, keep the text as given.
|
|
46
|
-
|
|
47
|
-
An idea that only *mentions* a venture, without targeting phrasing, is not redirected — proceed with the hub root and append a non-blocking hint to the Step 3 confirmation instead (speed rule: don't block on a maybe):
|
|
48
|
-
|
|
49
|
-
```
|
|
50
|
-
(mentions ordovica — re-save with --venture ordovica, or route it later with spell-manifest)
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
When targeting a venture book that doesn't exist yet as a file, create it from the venture-template `IDEAS.md` stub (same header convention as the hub root, below) with the venture's name filled in. Tolerate operator YAML frontmatter above either book's header — always append after the final `---` divider, never before it.
|
|
54
|
-
|
|
55
|
-
## Step 1 — Normalize the Idea
|
|
56
|
-
|
|
57
|
-
- Take the user's input verbatim as the core idea.
|
|
58
|
-
- Strip a leading invocation phrase if the user dictated one (e.g., "save this idea —", "note that", "remind me to") — log the idea, not the command to log it.
|
|
59
|
-
- Lightly clean it up: fix obvious typos and capitalization, but **do not** rewrite, expand, or editorialize. The user's phrasing is the record.
|
|
60
|
-
- If the idea is clearly multiple distinct ideas, split them into separate entries (one appended line each).
|
|
61
|
-
- Optionally infer a single short tag (1–2 words, kebab-case) from the content — e.g., `ui`, `infra`, `marketing`, `dx`. If nothing fits cleanly, omit the tag.
|
|
62
|
-
- **If the idea contains a secret** (token, password, API key, connection string), redact it inline (e.g., `[redacted]`) before writing and warn the user in the confirmation. Never write the raw value to `IDEAS.md`.
|
|
63
|
-
|
|
64
|
-
## Step 2 — Append to IDEAS.md
|
|
65
|
-
|
|
66
|
-
Append (never overwrite) an entry to `IDEAS.md` — the repo root, or the resolved venture's own book from Step 0.
|
|
67
|
-
|
|
68
|
-
Entry format:
|
|
69
|
-
|
|
70
|
-
```markdown
|
|
71
|
-
- **[YYYY-MM-DD HH:MM]** [#tag] <the idea, lightly cleaned> <!-- status: new -->
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
- Get the real local date and time from the system (e.g., run `date`) rather than guessing — a wrong timestamp silently corrupts the append-only log.
|
|
75
|
-
- The `status: new` HTML comment lets later triage mark entries as `promoted` / `dropped` without deleting history.
|
|
76
|
-
- Include `[#tag]` only if a tag was inferred; otherwise omit it.
|
|
77
|
-
|
|
78
|
-
If `IDEAS.md` does not exist yet, create it with this header first, then append:
|
|
79
|
-
|
|
80
|
-
```markdown
|
|
81
|
-
# Idea Inbox
|
|
82
|
-
|
|
83
|
-
Fast-capture log of ideas worth keeping. Add with `spell-save-idea`. Triage with `spell-todo`
|
|
84
|
-
(actionable) or `spell-suggest-feature` (product ideas). Entries are append-only; mark status in the
|
|
85
|
-
trailing comment rather than deleting.
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Step 3 — Confirm (one line)
|
|
91
|
-
|
|
92
|
-
Print a single concise confirmation, nothing more:
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
💡 Saved to IDEAS.md — [#tag] <short echo of the idea>
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
- If multiple entries were appended, confirm with one line per entry (or a count, e.g. `💡 Saved 3 ideas to IDEAS.md`).
|
|
99
|
-
- If anything was redacted, append `(secret redacted)` to the confirmation so the user knows.
|
|
100
|
-
|
|
101
|
-
## Step 4 — Offer Promotion (optional, non-blocking)
|
|
102
|
-
|
|
103
|
-
After confirming, add at most one short line offering a next step **only if the idea is obviously
|
|
104
|
-
actionable or product-shaped**:
|
|
105
|
-
|
|
106
|
-
> Want to turn this into a tracked item? Run `spell-todo` (task) or `spell-suggest-feature` (product idea). In a hub, `spell-manifest` promotes it downstream once ready.
|
|
107
|
-
|
|
108
|
-
Do not ask follow-up questions. Do not commit — leave that to `spell-commit-work`.
|
|
109
|
-
|
|
110
|
-
## Rules
|
|
111
|
-
|
|
112
|
-
- Speed over polish. This spell should feel instant.
|
|
113
|
-
- Never overwrite existing entries — always append.
|
|
114
|
-
- Never rewrite the user's idea beyond light cleanup. Preserve their words.
|
|
115
|
-
- No approval gate — write immediately.
|
|
116
|
-
- Never include secrets, tokens, or credentials in an entry.
|
|
117
|
-
- Do not commit the change.
|
|
9
|
+
This prompt is the Arcane `spell-save-idea` spell. Read [`.arcane/spells/spell-save-idea.md`](../../.arcane/spells/spell-save-idea.md) and follow it as the complete workflow.
|
|
@@ -6,261 +6,4 @@ argument-hint: "Path to PRD or paste PRD content (e.g., 'Analyze PRD.md for {BUS
|
|
|
6
6
|
agent: agent
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- This spell takes a PRD of any size and produces an actionable execution plan.
|
|
12
|
-
- It assesses scope, splits into sprint-sized epics, identifies architecture/security decisions needed, and maps agents to work.
|
|
13
|
-
- Use this before `spell-architect` when the PRD is too large for a single Spell Loop cycle. (Formerly `spell-assess`.)
|
|
14
|
-
- Output: `execution-plan.md` — ordered epics with dependency graph, risk flags, ADR candidates, and agent assignments.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
Analyze the provided PRD and produce a scoped execution plan.
|
|
19
|
-
|
|
20
|
-
Use these files for context. Each is optional — if a file is missing, proceed with the stated fallback and note the gap in the output's Open Questions:
|
|
21
|
-
|
|
22
|
-
- [governance/development-methodology.md](../../.arcane/governance/development-methodology.md) — Spell Loop methodology, story sizing rules, and the canonical **ADO Hierarchy Rules**. *Fallback: if missing, use the default sizing of 4–8 right-sized stories per cycle described below and skip external-tracker hierarchy mapping.*
|
|
23
|
-
- [governance/testing-standards.md](../../.arcane/governance/testing-standards.md) — Testing frameworks per stack. *Fallback: if missing, flag test strategy as an open question.*
|
|
24
|
-
- [governance/cicd-standards.md](../../.arcane/governance/cicd-standards.md) — Pipeline requirements. *Fallback: if missing, omit pipeline considerations.*
|
|
25
|
-
- [DECISIONS.md](../../DECISIONS.md) — Existing ADRs to check against. *Fallback: if missing, treat all architecture decisions as new candidates.*
|
|
26
|
-
- [security/threat-model.md](../../security/threat-model.md) — Active threat model. *Fallback: if missing, apply OWASP Top 10 as the baseline.*
|
|
27
|
-
- [agents/agent-policies.md](../../.arcane/governance/agent-policies.md) — Agent roster, power levels, capabilities. *Fallback: if missing, assign work by role label (architecture, backend, frontend, mobile, QA, DevOps, research) instead of named personas.*
|
|
28
|
-
- [naming-conventions.md](../../.arcane/governance/naming-conventions.md) — Agent roster and role-to-persona mapping. *Fallback: if missing, refer to roles by their generic label.*
|
|
29
|
-
- [project.md](../../project.md) — Project goals and business context. *Fallback: if missing, derive context from the PRD itself.*
|
|
30
|
-
- [governance/product-excellence-standards.md](../../.arcane/governance/product-excellence-standards.md) — PRD Quality Scorecard and scoring rubric. *Fallback: if missing, skip the Quality Quick-Check (section 1.5) and note that it was skipped.*
|
|
31
|
-
|
|
32
|
-
> **Roster by reference.** This spell maps work to **roles** (architecture, backend, frontend, mobile, QA, DevOps, research, marketing). Resolve each role to a concrete agent persona via `agents/agent-policies.md` / `naming-conventions.md` at run time — do not assume a fixed set of persona names.
|
|
33
|
-
|
|
34
|
-
> **Placeholder resolution.** `{ADO_ORG}`, `{ADO_PROJECT}`, `{BUSINESS_NAME}`, and any other `{UPPER_SNAKE}` token resolve from `.arcane.json` or the PRD frontmatter; if a value is unset, ask rather than assuming a default.
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## Workflow
|
|
39
|
-
|
|
40
|
-
### 1. PRD Intake
|
|
41
|
-
|
|
42
|
-
Accept the PRD from one of these input sources:
|
|
43
|
-
|
|
44
|
-
| Source | Format | How to fetch |
|
|
45
|
-
|--------|--------|--------------|
|
|
46
|
-
| **File path** | `PRD.md` or any markdown file | Read the file directly |
|
|
47
|
-
| **Pasted content** | Inline text in the prompt | Use as-is |
|
|
48
|
-
| **External tracker work item ID** (external mode) | `#507` or `507` with org name | Detect the provider (see tracking settings below) and fetch the item's title, description, and acceptance criteria via that provider's CLI/API. For ADO: `az boards work-item show --id {id} --org https://dev.azure.com/{ADO_ORG} --output json` and extract `System.Description`, `Microsoft.VSTS.Common.AcceptanceCriteria`, and `System.Title` |
|
|
49
|
-
|
|
50
|
-
If the input is an external work item ID:
|
|
51
|
-
1. Confirm the org/account: `{ADO_ORG}` — resolve from `.arcane.json` / PRD frontmatter; ask if unset.
|
|
52
|
-
2. Fetch the item via the detected provider (for ADO: `az boards work-item show`).
|
|
53
|
-
3. If the work item has child items, fetch those too — they may contain additional requirements.
|
|
54
|
-
4. Combine all content into a single PRD view before proceeding.
|
|
55
|
-
|
|
56
|
-
Resolve tracking settings from PRD frontmatter (preferred) or ask:
|
|
57
|
-
<!-- fragment:tracking-mode-declaration:start -->
|
|
58
|
-
- `tracking_mode: internal | external`
|
|
59
|
-
- `external_provider: ado | github | jira | other`
|
|
60
|
-
<!-- fragment:tracking-mode-declaration:end -->
|
|
61
|
-
|
|
62
|
-
If unset and ADO context already exists, default to `external` + `ado` for backward compatibility.
|
|
63
|
-
|
|
64
|
-
If `tracking_mode=external` and `external_provider=ado`, resolve template/type availability before splitting epics (resolve `{ADO_ORG}` / `{ADO_PROJECT}` from `.arcane.json` / PRD frontmatter; ask if unset):
|
|
65
|
-
```bash
|
|
66
|
-
az devops project show --org https://dev.azure.com/{ADO_ORG} --project {ADO_PROJECT} --query "capabilities.processTemplate.templateName" --output tsv
|
|
67
|
-
az boards work-item-type list --org https://dev.azure.com/{ADO_ORG} --project {ADO_PROJECT} --output json --query "[].name"
|
|
68
|
-
```
|
|
69
|
-
For non-ADO providers, detect the provider from `external_provider` and resolve its equivalent item types instead.
|
|
70
|
-
|
|
71
|
-
Read the full PRD. Extract:
|
|
72
|
-
- **Feature name** and business context
|
|
73
|
-
- **Target repo** and tech stack
|
|
74
|
-
- **Total requirement count** (Must Have / Should Have / Won't Have)
|
|
75
|
-
- **Total acceptance criteria count**
|
|
76
|
-
- **Dependencies** on external services, APIs, or decisions
|
|
77
|
-
|
|
78
|
-
### 1.5. Quality Quick-Check
|
|
79
|
-
|
|
80
|
-
Before proceeding to scope assessment, run a quick quality audit against the PRD Quality Scorecard in `governance/product-excellence-standards.md`. Score each dimension (Requirements, UX, Accessibility, Performance, Security, Responsive, Competitive) as Bronze / Silver / Gold.
|
|
81
|
-
|
|
82
|
-
If any dimension scores **Bronze**, recommend:
|
|
83
|
-
> 💡 **Quality recommendation:** This PRD scores Bronze on [dimensions]. Consider running `spell-enchant` to enhance the PRD before continuing with assessment and architecture. `spell-enchant` will conduct competitive research (research role) and marketing review (marketing role), and proactively add missing quality requirements.
|
|
84
|
-
|
|
85
|
-
This is a recommendation, not a gate — the user decides whether to enchant first or proceed directly. Include the scorecard results in the execution plan output regardless.
|
|
86
|
-
|
|
87
|
-
### 2. Scope Assessment
|
|
88
|
-
|
|
89
|
-
Evaluate the PRD against Spell Loop sizing rules:
|
|
90
|
-
- Each Spell Loop cycle = **1-2 weeks of agent work** = **4-8 right-sized stories**
|
|
91
|
-
- A right-sized story: one file change, one endpoint, one component, one migration
|
|
92
|
-
- Flag anything that violates story sizing: "Build the entire dashboard", "Add authentication", "Refactor the API layer"
|
|
93
|
-
|
|
94
|
-
Classify the PRD:
|
|
95
|
-
|
|
96
|
-
| Classification | Criteria | Action |
|
|
97
|
-
|---------------|----------|--------|
|
|
98
|
-
| **Single cycle** | ≤ 8 stories, no cross-cutting concerns | Proceed directly to `spell-architect` |
|
|
99
|
-
| **Multi-cycle** | 9-30 stories, clear epic boundaries | Split into epics, each gets its own Spell Loop run |
|
|
100
|
-
| **Program-scale** | 30+ stories, multiple subsystems, cross-team concerns | Split into phases with milestone gates between them |
|
|
101
|
-
|
|
102
|
-
### 3. Epic Splitting (if multi-cycle or program-scale)
|
|
103
|
-
|
|
104
|
-
Break the PRD into epics. Each epic must be:
|
|
105
|
-
- **Self-contained** — shippable independently (no half-built features)
|
|
106
|
-
- **Sprint-sized** — 4-8 stories per epic
|
|
107
|
-
- **Dependency-ordered** — infrastructure before API before UI before polish
|
|
108
|
-
|
|
109
|
-
For each epic, define:
|
|
110
|
-
```markdown
|
|
111
|
-
### Epic N: [Name]
|
|
112
|
-
**Stories (estimated):** [count]
|
|
113
|
-
**Dependencies:** [prior epics or external]
|
|
114
|
-
**Tech stack:** [frameworks, platforms]
|
|
115
|
-
**Primary role:** [backend / frontend / mobile / full-stack — resolve to a persona via `agent-policies` / `naming-conventions`]
|
|
116
|
-
**Risk level:** Low / Medium / High
|
|
117
|
-
**Sprint estimate:** [1 or 2 cycles]
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### 3.5. External Tracker Mapping (external mode)
|
|
121
|
-
|
|
122
|
-
Only applies when `tracking_mode=external`. Skip entirely for internal mode.
|
|
123
|
-
|
|
124
|
-
Do **not** inline the work-item-type fallback order or the parent/child linkage rules here — they are the single source of truth in [governance/development-methodology.md](../../.arcane/governance/development-methodology.md), under **Process-Template-Aware ADO Hierarchy Rules** (`external_provider=ado`) or **GitHub Issues Conventions** (`external_provider=github`). Detect the provider from `external_provider`, then apply the matching section's rules. *Fallback: if that doc is missing, record the tracker mapping as an Open Question and proceed without item-type assignment.*
|
|
125
|
-
|
|
126
|
-
Scope-specific delta (the only thing this spell adds on top of those rules): each split **epic** maps to the **Epic-level** logical level — use the `Epic` work item type whenever the resolved provider/template offers it, and record the selected type per epic in `execution-plan.md`. All lower-level and linkage decisions defer to the governance rules above.
|
|
127
|
-
|
|
128
|
-
### 4. Architecture Decision Check
|
|
129
|
-
|
|
130
|
-
Scan the PRD for decisions that need ADRs:
|
|
131
|
-
- New frameworks or libraries not already in the stack
|
|
132
|
-
- New external service integrations (APIs, databases, auth providers)
|
|
133
|
-
- Data model changes that affect multiple subsystems
|
|
134
|
-
- Deployment topology changes
|
|
135
|
-
- New communication patterns (sync vs async, REST vs gRPC vs events)
|
|
136
|
-
|
|
137
|
-
For each candidate:
|
|
138
|
-
```markdown
|
|
139
|
-
#### ADR Candidate: [Title]
|
|
140
|
-
**Trigger:** [What in the PRD requires this decision]
|
|
141
|
-
**Options:** [2-3 alternatives]
|
|
142
|
-
**Recommendation:** [If obvious, state it; otherwise flag for the architecture role]
|
|
143
|
-
**Blocking:** [Which epics are blocked until this is decided]
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### 5. Security Review
|
|
147
|
-
|
|
148
|
-
Check the PRD against the threat model:
|
|
149
|
-
- Does this feature introduce new attack surface? (new endpoints, new auth flows, new data stores)
|
|
150
|
-
- Does it handle PII, payment data, or secrets?
|
|
151
|
-
- Does it change trust boundaries? (new external integrations, new user roles)
|
|
152
|
-
- Are there OWASP Top 10 concerns? (injection points, auth gaps, data exposure)
|
|
153
|
-
|
|
154
|
-
For each concern:
|
|
155
|
-
```markdown
|
|
156
|
-
#### Security Flag: [Title]
|
|
157
|
-
**Threat:** [What could go wrong]
|
|
158
|
-
**Mitigation required:** [What the implementation must include]
|
|
159
|
-
**Blocking:** [yes/no — can the epic proceed without resolving this?]
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### 6. Agent Assignment
|
|
163
|
-
|
|
164
|
-
Map each epic to the right **role**, then resolve each role to a concrete agent persona via `agents/agent-policies.md` / `naming-conventions.md` (fallback: keep the generic role label if the roster files are absent):
|
|
165
|
-
|
|
166
|
-
| Role | When |
|
|
167
|
-
|------|------|
|
|
168
|
-
| Architecture | ADR candidates, cross-epic design decisions |
|
|
169
|
-
| Backend / Full-stack | APIs, databases, server-side logic |
|
|
170
|
-
| Frontend / UI | Web UI, component frameworks |
|
|
171
|
-
| Mobile | Native/cross-platform mobile apps |
|
|
172
|
-
| QA | Test strategy, coverage validation |
|
|
173
|
-
| DevOps | Pipeline creation, deployment config |
|
|
174
|
-
| Research | Unknowns, technology evaluation, competitive analysis |
|
|
175
|
-
| Marketing | User-facing copy, landing pages, SEO |
|
|
176
|
-
|
|
177
|
-
Flag any epics that need **multiple roles** (e.g., a full-stack feature = backend + frontend + QA).
|
|
178
|
-
|
|
179
|
-
### 7. Dependency Graph
|
|
180
|
-
|
|
181
|
-
Produce a Mermaid diagram (per rule 8) showing epic execution order — an agent-authored planning diagram, not the generated-state-diagrams sub-convention ARC-036 covers, since the ordering is this spell's own design output rather than already-computed state:
|
|
182
|
-
|
|
183
|
-
```mermaid
|
|
184
|
-
flowchart LR
|
|
185
|
-
E1[Epic 1: Infrastructure] --> E2[Epic 2: API Layer]
|
|
186
|
-
E2 --> E3[Epic 3: Web UI]
|
|
187
|
-
E2 --> E4[Epic 4: Mobile App]
|
|
188
|
-
E3 --> E5[Epic 5: Integration Tests]
|
|
189
|
-
E4 --> E5
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
Identify:
|
|
193
|
-
- **Critical path** — the longest dependency chain
|
|
194
|
-
- **Parallelizable epics** — epics that can run simultaneously on different branches
|
|
195
|
-
- **Milestone gates** — points where human review is needed before continuing
|
|
196
|
-
|
|
197
|
-
### 8. Execution Plan Output
|
|
198
|
-
|
|
199
|
-
Produce `execution-plan.md` with this structure:
|
|
200
|
-
|
|
201
|
-
```markdown
|
|
202
|
-
# Execution Plan: [Feature Name]
|
|
203
|
-
|
|
204
|
-
## PRD Summary
|
|
205
|
-
- **Source:** [PRD file or inline]
|
|
206
|
-
- **Business:** [which business]
|
|
207
|
-
- **Target repo:** [org/repo]
|
|
208
|
-
- **Classification:** Single cycle / Multi-cycle / Program-scale
|
|
209
|
-
- **Total epics:** [N]
|
|
210
|
-
- **Total estimated stories:** [N]
|
|
211
|
-
- **ADR candidates:** [N]
|
|
212
|
-
- **Security flags:** [N]
|
|
213
|
-
|
|
214
|
-
## Dependency Graph
|
|
215
|
-
[Mermaid diagram]
|
|
216
|
-
|
|
217
|
-
## Epics
|
|
218
|
-
|
|
219
|
-
### Epic 1: [Name]
|
|
220
|
-
- **Stories:** [estimated count]
|
|
221
|
-
- **Agent:** [primary]
|
|
222
|
-
- **Dependencies:** none
|
|
223
|
-
- **Tracking item:** [internal-only OR external provider + type/id]
|
|
224
|
-
- **Risk:** Low/Medium/High
|
|
225
|
-
- **Notes:** [any special considerations]
|
|
226
|
-
|
|
227
|
-
### Epic 2: [Name]
|
|
228
|
-
...
|
|
229
|
-
|
|
230
|
-
## Architecture Decisions Required
|
|
231
|
-
[List of ADR candidates with recommendations]
|
|
232
|
-
|
|
233
|
-
## Security Flags
|
|
234
|
-
[List of security concerns with mitigations]
|
|
235
|
-
|
|
236
|
-
## Recommended Execution Order
|
|
237
|
-
1. Resolve ADR candidates (architecture role)
|
|
238
|
-
2. Epic 1 — spell-full-cycle or spell-architect → spell-implement → spell-ship
|
|
239
|
-
3. Run spell-commit-work to checkpoint major outputs before starting Epic 2
|
|
240
|
-
4. Epic 2 — ...
|
|
241
|
-
5. [milestone gate if needed]
|
|
242
|
-
6. Epic N — ...
|
|
243
|
-
|
|
244
|
-
## Open Questions
|
|
245
|
-
[Anything that needs human decision before execution can start]
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
If `external_provider=jira` or `external_provider=other`, add explicit TODOs in Open Questions for provider-specific type mapping and linkage automation.
|
|
249
|
-
|
|
250
|
-
### 9. Present and Confirm
|
|
251
|
-
|
|
252
|
-
Present the execution plan to the user. Ask:
|
|
253
|
-
1. Does the epic split make sense?
|
|
254
|
-
2. Are the ADR candidates correct? Should any be decided now?
|
|
255
|
-
3. Are there epics that should be deprioritized or cut?
|
|
256
|
-
4. Ready to start with Epic 1?
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## Rules
|
|
261
|
-
|
|
262
|
-
- **Never start implementation from this spell.** This spell produces a plan, not code. The output feeds into `spell-architect` or `spell-full-cycle`.
|
|
263
|
-
- **Be honest about unknowns.** If the PRD references technology or services you don't have context on, flag it as a research item for the research role.
|
|
264
|
-
- **Respect existing ADRs.** If the PRD proposes something that contradicts an existing ADR, flag the conflict — don't silently override.
|
|
265
|
-
- **Conservative estimates.** When in doubt, split smaller. Two small epics are better than one that's too big.
|
|
266
|
-
- **Security is non-negotiable.** If a security flag is blocking, it blocks. No "we'll add auth later."
|
|
9
|
+
This prompt is the Arcane `spell-scope` spell. Read [`.arcane/spells/spell-scope.md`](../../.arcane/spells/spell-scope.md) and follow it as the complete workflow.
|
|
@@ -6,119 +6,4 @@ argument-hint: '<candidate name or term>'
|
|
|
6
6
|
agent: agent
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- This spell clears a candidate name before it ships, checking both the outside world and this
|
|
12
|
-
repository itself.
|
|
13
|
-
- The inward pass runs first and is mandatory, not optional — a real naming decision (ARC-028's
|
|
14
|
-
`workspace`) was nearly settled on a clean external read alone, until a single `grep -ri` found the
|
|
15
|
-
word already load-bearing inside the repository in two other senses.
|
|
16
|
-
- Both passes classify hits with the same taxonomy (same-space / adjacent / out-of-space) and combine
|
|
17
|
-
into one verdict: pass / pass-with-disclosure / kill.
|
|
18
|
-
- `spell ward` is the opposite direction of this same concern — it finds what leaked **in**; this spell
|
|
19
|
-
clears what's about to go **out**. They do not call each other; ward's denylist scanning and scry's
|
|
20
|
-
single-candidate classification are different operations on the same underlying grep primitive.
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
Clear the candidate name given in the prompt argument.
|
|
25
|
-
|
|
26
|
-
## Step 1 — Resolve the candidate
|
|
27
|
-
|
|
28
|
-
Take the term verbatim from the argument. If none was given, ask for it — do not guess a name to check.
|
|
29
|
-
|
|
30
|
-
## Step 2 — Inward pass (mandatory, run first)
|
|
31
|
-
|
|
32
|
-
Grep this repository for the candidate term before doing any outward research:
|
|
33
|
-
|
|
34
|
-
- **Prose**: markdown, comments, documentation.
|
|
35
|
-
- **Identifiers**: variable, function, type, and class names — weight these **above** prose, since
|
|
36
|
-
consumers already depend on code identifiers in a way they never depend on a sentence mentioning a
|
|
37
|
-
word.
|
|
38
|
-
- **Config keys and schema fields**: `.arcane.json` fields, YAML/JSON config keys, any validated schema.
|
|
39
|
-
|
|
40
|
-
Use word-boundary matching (the same principle `spell ward`'s denylist scan uses, expressed here as a
|
|
41
|
-
`grep -w` / IDE-search equivalent over the codebase) — a bare substring match on a short candidate term
|
|
42
|
-
will drown in false positives from unrelated words that merely contain it.
|
|
43
|
-
|
|
44
|
-
**Classify each internal hit with the same taxonomy the outward checks use below:**
|
|
45
|
-
|
|
46
|
-
- **Same-space**: the term is already load-bearing for a closely related concept (a config field, a
|
|
47
|
-
directory name, a class doing adjacent work) — a genuine internal collision.
|
|
48
|
-
- **Adjacent**: the term appears near the concept but for something distinguishable enough that a
|
|
49
|
-
reader would not confuse the two once told them apart.
|
|
50
|
-
- **Out-of-space**: incidental — a comment, an unrelated variable, coincidental substring overlap.
|
|
51
|
-
|
|
52
|
-
**Why this runs first:** a same-space internal collision is often cheaper to find than the outward
|
|
53
|
-
research below, and finding one early can save the effort of a full outward pass on a name that was
|
|
54
|
-
already going to be killed. This is not a formality — the ARC-028 `workspace` incident is the concrete
|
|
55
|
-
case: a clean external read had nearly settled the decision before a single `grep -ri` found the word
|
|
56
|
-
already meaning something else in two other places inside this exact repository.
|
|
57
|
-
|
|
58
|
-
## Step 3 — Outward pass: the four checks
|
|
59
|
-
|
|
60
|
-
Research the candidate term against the outside world:
|
|
61
|
-
|
|
62
|
-
1. **Who coined it** — search for the term's origin and earliest known usage in the relevant space
|
|
63
|
-
(software, apps, AI, games — whichever applies to this candidate).
|
|
64
|
-
2. **Is an estate/trademark holder still trading** — distinguish an actively-used, enforced brand from
|
|
65
|
-
an abandoned or long-defunct one. A defunct mark carries much less collision risk than a live one.
|
|
66
|
-
3. **Same-audience giants** — do major, well-known players who share this candidate's actual target
|
|
67
|
-
audience already use this name saliently? A collision with a giant outside the target audience
|
|
68
|
-
matters far less than one inside it.
|
|
69
|
-
4. **First-association salience per market** — for someone in the target market, what does this term
|
|
70
|
-
bring to mind *first*? If the first association is something else entirely, that is a real cost even
|
|
71
|
-
without a formal trademark conflict.
|
|
72
|
-
|
|
73
|
-
Classify each outward finding with the **same** same-space / adjacent / out-of-space taxonomy as the
|
|
74
|
-
inward pass — never a separate scheme. Cite sources for every outward claim; do not assert a name's
|
|
75
|
-
history or salience from unverified general knowledge alone.
|
|
76
|
-
|
|
77
|
-
## Step 4 — Combine into one verdict
|
|
78
|
-
|
|
79
|
-
A name that clears outward but collides inward is not a clean pass, and the reverse is equally true —
|
|
80
|
-
combine both passes into a single verdict, not two separate reports:
|
|
81
|
-
|
|
82
|
-
- **pass** — no same-space finding, inward or outward; adjacent/out-of-space findings, if any, are
|
|
83
|
-
noted but do not block.
|
|
84
|
-
- **pass-with-disclosure** — a same-space finding exists but is distant, low-traffic, or otherwise minor
|
|
85
|
-
enough that proceeding is reasonable with the collision stated explicitly, not discovered later.
|
|
86
|
-
- **kill** — a genuine, blocking same-space collision, inward or outward. Do not soften this to
|
|
87
|
-
pass-with-disclosure merely because the outward research took effort to produce.
|
|
88
|
-
|
|
89
|
-
## Step 5 — Report
|
|
90
|
-
|
|
91
|
-
```markdown
|
|
92
|
-
## Scry verdict: <candidate> — PASS | PASS-WITH-DISCLOSURE | KILL
|
|
93
|
-
|
|
94
|
-
### Inward pass
|
|
95
|
-
| Hit | Location | Classification |
|
|
96
|
-
|---|---|---|
|
|
97
|
-
| <term usage> | <file:line> | same-space / adjacent / out-of-space |
|
|
98
|
-
|
|
99
|
-
### Outward pass
|
|
100
|
-
| Check | Finding | Classification | Source |
|
|
101
|
-
|---|---|---|---|
|
|
102
|
-
| Who coined it | ... | ... | <url or citation> |
|
|
103
|
-
| Estate still trading | ... | ... | <url or citation> |
|
|
104
|
-
| Same-audience giants | ... | ... | <url or citation> |
|
|
105
|
-
| First-association salience | ... | ... | <url or citation> |
|
|
106
|
-
|
|
107
|
-
### Verdict rationale
|
|
108
|
-
<why this combination of inward + outward findings produced this verdict>
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
## Related Spells
|
|
112
|
-
|
|
113
|
-
- `spell ward` — the opposite direction: finds third-party identifiers that already leaked into the
|
|
114
|
-
repo, rather than clearing a candidate before it ships out.
|
|
115
|
-
|
|
116
|
-
## Rules
|
|
117
|
-
|
|
118
|
-
- **Never skip the inward pass.** It is not optional, and it runs before the outward pass, not after.
|
|
119
|
-
- **Never assert an outward finding without a source.** "Based on general knowledge" is not a citation.
|
|
120
|
-
- **Never use a separate classification scheme for inward vs. outward findings.** Same-space / adjacent
|
|
121
|
-
/ out-of-space applies to both, so a reader can compare them directly.
|
|
122
|
-
- **Never round pass-with-disclosure up to pass, or down to kill, to avoid stating a nuanced verdict.**
|
|
123
|
-
- This spell classifies and reports. It does not rename, alias, or otherwise resolve a collision it
|
|
124
|
-
finds — that decision belongs to whoever asked for the name cleared.
|
|
9
|
+
This prompt is the Arcane `spell-scry` spell. Read [`.arcane/spells/spell-scry.md`](../../.arcane/spells/spell-scry.md) and follow it as the complete workflow.
|