arcane-cli 0.38.3 → 1.0.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.
Files changed (176) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/.agents/skills/spell-address-review/SKILL.md +6 -0
  3. package/dist/assets/.agents/skills/spell-adopt-docs/SKILL.md +6 -0
  4. package/dist/assets/.agents/skills/spell-arcane-version/SKILL.md +6 -0
  5. package/dist/assets/.agents/skills/spell-architect/SKILL.md +6 -0
  6. package/dist/assets/.agents/skills/spell-brainstorm/SKILL.md +6 -0
  7. package/dist/assets/.agents/skills/spell-bug/SKILL.md +6 -0
  8. package/dist/assets/.agents/skills/spell-bump/SKILL.md +6 -0
  9. package/dist/assets/.agents/skills/spell-check-drift/SKILL.md +6 -0
  10. package/dist/assets/.agents/skills/spell-close-session/SKILL.md +6 -0
  11. package/dist/assets/.agents/skills/spell-commit-work/SKILL.md +6 -0
  12. package/dist/assets/.agents/skills/spell-compliance/SKILL.md +6 -0
  13. package/dist/assets/.agents/skills/spell-create-pull-request/SKILL.md +6 -0
  14. package/dist/assets/.agents/skills/spell-document/SKILL.md +6 -0
  15. package/dist/assets/.agents/skills/spell-dotnet-expert/SKILL.md +6 -0
  16. package/dist/assets/.agents/skills/spell-eas-store-deploy/SKILL.md +6 -0
  17. package/dist/assets/.agents/skills/spell-enchant/SKILL.md +6 -0
  18. package/dist/assets/.agents/skills/spell-explain-concept/SKILL.md +6 -0
  19. package/dist/assets/.agents/skills/spell-feedback/SKILL.md +6 -0
  20. package/dist/assets/.agents/skills/spell-full-cycle/SKILL.md +6 -0
  21. package/dist/assets/.agents/skills/spell-generate-bot-icons/SKILL.md +6 -0
  22. package/dist/assets/.agents/skills/spell-implement/SKILL.md +6 -0
  23. package/dist/assets/.agents/skills/spell-make-discoverable/SKILL.md +6 -0
  24. package/dist/assets/.agents/skills/spell-manifest/SKILL.md +6 -0
  25. package/dist/assets/.agents/skills/spell-open-session/SKILL.md +6 -0
  26. package/dist/assets/.agents/skills/spell-plan/SKILL.md +6 -0
  27. package/dist/assets/.agents/skills/spell-present-arcane/SKILL.md +6 -0
  28. package/dist/assets/.agents/skills/spell-product-review/SKILL.md +6 -0
  29. package/dist/assets/.agents/skills/spell-review/SKILL.md +6 -0
  30. package/dist/assets/.agents/skills/spell-review-batch/SKILL.md +6 -0
  31. package/dist/assets/.agents/skills/spell-save-idea/SKILL.md +6 -0
  32. package/dist/assets/.agents/skills/spell-scope/SKILL.md +6 -0
  33. package/dist/assets/.agents/skills/spell-scry/SKILL.md +6 -0
  34. package/dist/assets/.agents/skills/spell-security-review/SKILL.md +6 -0
  35. package/dist/assets/.agents/skills/spell-ship/SKILL.md +6 -0
  36. package/dist/assets/.agents/skills/spell-status/SKILL.md +6 -0
  37. package/dist/assets/.agents/skills/spell-suggest-feature/SKILL.md +6 -0
  38. package/dist/assets/.agents/skills/spell-summon-venture/SKILL.md +6 -0
  39. package/dist/assets/.agents/skills/spell-sync-pull-request/SKILL.md +6 -0
  40. package/dist/assets/.agents/skills/spell-test/SKILL.md +6 -0
  41. package/dist/assets/.agents/skills/spell-todo/SKILL.md +6 -0
  42. package/dist/assets/.agents/skills/spell-verification-ledger/SKILL.md +6 -0
  43. package/dist/assets/.arcane/governance/development-methodology.md +6 -6
  44. package/dist/assets/.arcane/governance/git-conventions.md +2 -2
  45. package/dist/assets/.arcane/governance/portable-bootstrap.md +1 -0
  46. package/dist/assets/.arcane/governance/product-excellence-standards.md +1 -1
  47. package/dist/assets/.arcane/governance/spell-authoring-standards.md +9 -1
  48. package/dist/assets/.arcane/governance/universal-agent-rules.md +7 -0
  49. package/dist/assets/.arcane/spells/spell-address-review.md +115 -0
  50. package/dist/assets/.arcane/spells/spell-adopt-docs.md +158 -0
  51. package/dist/assets/.arcane/spells/spell-arcane-version.md +87 -0
  52. package/dist/assets/.arcane/spells/spell-architect.md +117 -0
  53. package/dist/assets/.arcane/spells/spell-brainstorm.md +125 -0
  54. package/dist/assets/.arcane/spells/spell-bug.md +123 -0
  55. package/dist/assets/.arcane/spells/spell-bump.md +82 -0
  56. package/dist/assets/.arcane/spells/spell-check-drift.md +118 -0
  57. package/dist/assets/.arcane/spells/spell-close-session.md +266 -0
  58. package/dist/assets/.arcane/spells/spell-commit-work.md +279 -0
  59. package/dist/assets/.arcane/spells/spell-compliance.md +130 -0
  60. package/dist/assets/.arcane/spells/spell-create-pull-request.md +224 -0
  61. package/dist/assets/.arcane/spells/spell-document.md +84 -0
  62. package/dist/assets/.arcane/spells/spell-dotnet-expert.md +118 -0
  63. package/dist/assets/.arcane/spells/spell-eas-store-deploy.md +254 -0
  64. package/dist/assets/.arcane/spells/spell-enchant.md +386 -0
  65. package/dist/assets/.arcane/spells/spell-explain-concept.md +70 -0
  66. package/dist/assets/.arcane/spells/spell-feedback.md +138 -0
  67. package/dist/assets/.arcane/spells/spell-full-cycle.md +253 -0
  68. package/dist/assets/.arcane/spells/spell-generate-bot-icons.md +85 -0
  69. package/dist/assets/.arcane/spells/spell-implement.md +109 -0
  70. package/dist/assets/.arcane/spells/spell-make-discoverable.md +293 -0
  71. package/dist/assets/.arcane/spells/spell-manifest.md +148 -0
  72. package/dist/assets/.arcane/spells/spell-open-session.md +154 -0
  73. package/dist/assets/.arcane/spells/spell-plan.md +160 -0
  74. package/dist/assets/.arcane/spells/spell-present-arcane.md +189 -0
  75. package/dist/assets/.arcane/spells/spell-product-review.md +98 -0
  76. package/dist/assets/.arcane/spells/spell-review-batch.md +113 -0
  77. package/dist/assets/.arcane/spells/spell-review.md +142 -0
  78. package/dist/assets/.arcane/spells/spell-save-idea.md +117 -0
  79. package/dist/assets/.arcane/spells/spell-scope.md +266 -0
  80. package/dist/assets/.arcane/spells/spell-scry.md +124 -0
  81. package/dist/assets/.arcane/spells/spell-security-review.md +152 -0
  82. package/dist/assets/.arcane/spells/spell-ship.md +106 -0
  83. package/dist/assets/.arcane/spells/spell-status.md +86 -0
  84. package/dist/assets/.arcane/spells/spell-suggest-feature.md +122 -0
  85. package/dist/assets/.arcane/spells/spell-summon-venture.md +110 -0
  86. package/dist/assets/.arcane/spells/spell-sync-pull-request.md +161 -0
  87. package/dist/assets/.arcane/spells/spell-test.md +88 -0
  88. package/dist/assets/.arcane/spells/spell-todo.md +166 -0
  89. package/dist/assets/.arcane/spells/spell-verification-ledger.md +102 -0
  90. package/dist/assets/.claude/commands/spell-address-review.md +2 -2
  91. package/dist/assets/.claude/commands/spell-adopt-docs.md +2 -2
  92. package/dist/assets/.claude/commands/spell-arcane-version.md +2 -2
  93. package/dist/assets/.claude/commands/spell-architect.md +2 -2
  94. package/dist/assets/.claude/commands/spell-brainstorm.md +2 -2
  95. package/dist/assets/.claude/commands/spell-bug.md +2 -2
  96. package/dist/assets/.claude/commands/spell-bump.md +2 -2
  97. package/dist/assets/.claude/commands/spell-check-drift.md +2 -2
  98. package/dist/assets/.claude/commands/spell-close-session.md +2 -2
  99. package/dist/assets/.claude/commands/spell-commit-work.md +2 -2
  100. package/dist/assets/.claude/commands/spell-compliance.md +2 -2
  101. package/dist/assets/.claude/commands/spell-create-pull-request.md +2 -2
  102. package/dist/assets/.claude/commands/spell-document.md +2 -2
  103. package/dist/assets/.claude/commands/spell-dotnet-expert.md +2 -2
  104. package/dist/assets/.claude/commands/spell-eas-store-deploy.md +2 -2
  105. package/dist/assets/.claude/commands/spell-enchant.md +2 -2
  106. package/dist/assets/.claude/commands/spell-explain-concept.md +2 -2
  107. package/dist/assets/.claude/commands/spell-feedback.md +2 -2
  108. package/dist/assets/.claude/commands/spell-full-cycle.md +2 -2
  109. package/dist/assets/.claude/commands/spell-generate-bot-icons.md +2 -2
  110. package/dist/assets/.claude/commands/spell-implement.md +2 -2
  111. package/dist/assets/.claude/commands/spell-make-discoverable.md +2 -2
  112. package/dist/assets/.claude/commands/spell-manifest.md +2 -2
  113. package/dist/assets/.claude/commands/spell-open-session.md +2 -2
  114. package/dist/assets/.claude/commands/spell-plan.md +2 -2
  115. package/dist/assets/.claude/commands/spell-present-arcane.md +2 -2
  116. package/dist/assets/.claude/commands/spell-product-review.md +2 -2
  117. package/dist/assets/.claude/commands/spell-review-batch.md +2 -2
  118. package/dist/assets/.claude/commands/spell-review.md +2 -2
  119. package/dist/assets/.claude/commands/spell-save-idea.md +2 -2
  120. package/dist/assets/.claude/commands/spell-scope.md +2 -2
  121. package/dist/assets/.claude/commands/spell-scry.md +2 -2
  122. package/dist/assets/.claude/commands/spell-security-review.md +2 -2
  123. package/dist/assets/.claude/commands/spell-ship.md +2 -2
  124. package/dist/assets/.claude/commands/spell-status.md +2 -2
  125. package/dist/assets/.claude/commands/spell-suggest-feature.md +2 -2
  126. package/dist/assets/.claude/commands/spell-summon-venture.md +2 -2
  127. package/dist/assets/.claude/commands/spell-sync-pull-request.md +2 -2
  128. package/dist/assets/.claude/commands/spell-test.md +2 -2
  129. package/dist/assets/.claude/commands/spell-todo.md +2 -2
  130. package/dist/assets/.claude/commands/spell-verification-ledger.md +2 -2
  131. package/dist/assets/.github/instructions/agent-output.instructions.md +14 -13
  132. package/dist/assets/.github/prompts/spell-address-review.prompt.md +1 -107
  133. package/dist/assets/.github/prompts/spell-adopt-docs.prompt.md +1 -150
  134. package/dist/assets/.github/prompts/spell-arcane-version.prompt.md +1 -79
  135. package/dist/assets/.github/prompts/spell-architect.prompt.md +1 -109
  136. package/dist/assets/.github/prompts/spell-brainstorm.prompt.md +1 -117
  137. package/dist/assets/.github/prompts/spell-bug.prompt.md +1 -115
  138. package/dist/assets/.github/prompts/spell-bump.prompt.md +1 -74
  139. package/dist/assets/.github/prompts/spell-check-drift.prompt.md +1 -110
  140. package/dist/assets/.github/prompts/spell-close-session.prompt.md +1 -258
  141. package/dist/assets/.github/prompts/spell-commit-work.prompt.md +1 -270
  142. package/dist/assets/.github/prompts/spell-compliance.prompt.md +1 -122
  143. package/dist/assets/.github/prompts/spell-create-pull-request.prompt.md +1 -215
  144. package/dist/assets/.github/prompts/spell-document.prompt.md +1 -76
  145. package/dist/assets/.github/prompts/spell-dotnet-expert.prompt.md +1 -110
  146. package/dist/assets/.github/prompts/spell-eas-store-deploy.prompt.md +1 -246
  147. package/dist/assets/.github/prompts/spell-enchant.prompt.md +1 -378
  148. package/dist/assets/.github/prompts/spell-explain-concept.prompt.md +1 -62
  149. package/dist/assets/.github/prompts/spell-feedback.prompt.md +1 -130
  150. package/dist/assets/.github/prompts/spell-full-cycle.prompt.md +1 -245
  151. package/dist/assets/.github/prompts/spell-generate-bot-icons.prompt.md +1 -77
  152. package/dist/assets/.github/prompts/spell-implement.prompt.md +1 -101
  153. package/dist/assets/.github/prompts/spell-make-discoverable.prompt.md +1 -285
  154. package/dist/assets/.github/prompts/spell-manifest.prompt.md +1 -140
  155. package/dist/assets/.github/prompts/spell-open-session.prompt.md +1 -146
  156. package/dist/assets/.github/prompts/spell-plan.prompt.md +1 -152
  157. package/dist/assets/.github/prompts/spell-present-arcane.prompt.md +1 -181
  158. package/dist/assets/.github/prompts/spell-product-review.prompt.md +1 -90
  159. package/dist/assets/.github/prompts/spell-review-batch.prompt.md +1 -105
  160. package/dist/assets/.github/prompts/spell-review.prompt.md +1 -134
  161. package/dist/assets/.github/prompts/spell-save-idea.prompt.md +1 -109
  162. package/dist/assets/.github/prompts/spell-scope.prompt.md +1 -258
  163. package/dist/assets/.github/prompts/spell-scry.prompt.md +1 -116
  164. package/dist/assets/.github/prompts/spell-security-review.prompt.md +1 -144
  165. package/dist/assets/.github/prompts/spell-ship.prompt.md +1 -98
  166. package/dist/assets/.github/prompts/spell-status.prompt.md +1 -78
  167. package/dist/assets/.github/prompts/spell-suggest-feature.prompt.md +1 -114
  168. package/dist/assets/.github/prompts/spell-summon-venture.prompt.md +1 -102
  169. package/dist/assets/.github/prompts/spell-sync-pull-request.prompt.md +1 -152
  170. package/dist/assets/.github/prompts/spell-test.prompt.md +1 -80
  171. package/dist/assets/.github/prompts/spell-todo.prompt.md +1 -158
  172. package/dist/assets/.github/prompts/spell-verification-ledger.prompt.md +1 -94
  173. package/dist/index.js +195 -49
  174. package/dist/index.js.map +1 -1
  175. package/package.json +4 -4
  176. /package/dist/assets/{.github/prompts → .arcane/spells}/_fragments/tracking-mode-declaration.md +0 -0
@@ -0,0 +1,152 @@
1
+ ---
2
+ name: Spell — Security Review
3
+ description: OWASP Top 10 and AI/agent (LLM) security audit plus dependency vulnerability check for any project
4
+ claude_description: Use PROACTIVELY before shipping any change that introduces new attack surface, handles sensitive data, or changes trust boundaries.
5
+ argument-hint: Project path, PR, or specific security concern (e.g., "auth flow in the API")
6
+ agent: agent
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ - This prompt runs a security-focused review against OWASP Top 10 and dependency vulnerabilities.
12
+ - No dedicated security agent needed — any agent loads this spell for security context (ADR-049).
13
+ - Covers code-level vulnerabilities, dependency audit, secrets detection, and infrastructure security.
14
+ - Includes an AI/agent (LLM) security pass — prompt injection, excessive agency, and secrets-in-context — since Arcane drives AI agents.
15
+ - See [[security/threat-model|Threat Model]] for the project's security baseline.
16
+
17
+ ---
18
+
19
+ Perform a security review of the specified code, project, or PR.
20
+
21
+ Use these files for context:
22
+
23
+ - [security/threat-model.md](../../security/threat-model.md) — Project threat model and security controls. If absent, proceed against a generic OWASP Top 10 + AI/agent baseline rather than assuming the file exists.
24
+ - [security/hardening-checklist.md](../../security/hardening-checklist.md) — Infrastructure hardening status
25
+ - [DECISIONS.md](../../DECISIONS.md) — Security-related ADRs
26
+
27
+ Workflow:
28
+
29
+ 1. **Scope the review** — determine what's being reviewed:
30
+ - Specific PR or branch diff
31
+ - Full project audit
32
+ - Particular area of concern (auth, payments, data handling)
33
+
34
+ 1a. **Map trust boundaries and data flow** — before running the checklists below, sketch how data crosses trust zones (external actors, the auth boundary, internal services, data stores). This is agent-authored analysis under rule 8 (`.arcane/governance/universal-agent-rules.md`), not the generated-state-diagrams sub-convention ARC-036 covers — there is no already-computed trust-boundary state to read back, only the agent's own reasoning about the code. Use a Mermaid flowchart with a subgraph per trust zone:
35
+
36
+ ```mermaid
37
+ flowchart LR
38
+ subgraph External [Untrusted]
39
+ User[User / Client]
40
+ end
41
+ subgraph Boundary [Trust Boundary: Auth]
42
+ API[API Layer]
43
+ end
44
+ subgraph Internal [Trusted]
45
+ DB[(Data Store)]
46
+ end
47
+ User -->|request| API
48
+ API -->|authenticated query| DB
49
+ ```
50
+
51
+ Skip this step when the review scope doesn't cross any trust boundary — a single internal utility with no new external interaction, no new data store, and no new auth flow has nothing to diagram.
52
+
53
+ 2. **OWASP Top 10 checklist** — check each category:
54
+
55
+ | # | Category | Check |
56
+ | --- | ------------------------- | ------------------------------------------------------------------------------------------- |
57
+ | A01 | Broken Access Control | Role checks, authorization on every endpoint, CORS config |
58
+ | A02 | Cryptographic Failures | TLS enforcement, password hashing (bcrypt/Argon2), no hardcoded keys |
59
+ | A03 | Injection | SQL parameterization, XSS output encoding, command injection prevention |
60
+ | A04 | Insecure Design | Threat modeling, rate limiting, abuse case coverage |
61
+ | A05 | Security Misconfiguration | Default credentials, debug mode off, error messages sanitized |
62
+ | A06 | Vulnerable Components | Dependency audit (`npm audit`, `dotnet list package --vulnerable`) |
63
+ | A07 | Auth Failures | MFA support, session management, credential storage |
64
+ | A08 | Data Integrity Failures | CI/CD pipeline integrity, deserialization safety, update verification |
65
+ | A09 | Logging Failures | Security events logged, no sensitive data in logs, log injection prevention |
66
+ | A10 | SSRF | URL validation, allowlists for external calls, no user-controlled URLs to internal services |
67
+
68
+ 3. **AI / Agent security** (OWASP LLM-aligned — critical for agent-driven repos):
69
+
70
+ | Risk | Check |
71
+ | ---- | ----- |
72
+ | Prompt injection (direct & indirect) | Is untrusted content (files, web, tool output, PR/issue text, user data) ever treated as instructions rather than data? Flag anywhere fetched or user-supplied content is concatenated into agent instructions or tool arguments without delimiting or validation. |
73
+ | Insecure output handling | Is model/agent output used to build shell commands, SQL, file paths, or HTML without validation or escaping? Flag any execute-from-model-output path that isn't sandboxed or checked. |
74
+ | Excessive agency / over-broad tools | Do agents or tool profiles grant more capability or autonomy than the task needs? Check power levels and tool scopes against least privilege; verify destructive tools are gated behind approval (see `agents/agent-policies.md`). |
75
+ | Secrets in context | Are secrets, tokens, or credentials placed into prompts, agent memory, journals, or tool arguments? Verify SecretRef-style indirection is used and secrets are never echoed into logs or model context. |
76
+ | Sensitive-data exposure via tools | Could the agent exfiltrate PII or secrets by sending them to external tools, MCP servers, or web endpoints? Check what crosses the trust boundary. |
77
+ | Untrusted tools / MCP supply chain | Are connected tools, MCP servers, and model endpoints trusted and pinned? Flag unverified or arbitrary tool sources. |
78
+
79
+ Align findings with the project threat model and agent policies.
80
+
81
+ 4. **Dependency audit**:
82
+ - Run `npm audit` (Node.js) or `dotnet list package --vulnerable` (.NET).
83
+ - Check for known CVEs in direct and transitive dependencies.
84
+ - Flag any dependency more than 2 major versions behind.
85
+
86
+ 5. **Secrets detection**:
87
+ - Scan for API keys, tokens, passwords, connection strings in code.
88
+ - Check `.env` files are in `.gitignore`.
89
+ - Verify secrets management approach (environment variables, Key Vault, SecretRef).
90
+
91
+ 6. **Infrastructure security** (if applicable):
92
+ - Terraform security (Checkov scan).
93
+ - Network exposure (is anything public that shouldn't be?).
94
+ - IAM/RBAC configuration (least privilege).
95
+
96
+ 7. **Generate security report**:
97
+ ```markdown
98
+ ## Security Review — [Project/Feature]
99
+
100
+ **Reviewer:** [Agent name]
101
+ **Date:** [timestamp]
102
+ **Scope:** [What was reviewed]
103
+
104
+ ### Trust Boundary / Data Flow
105
+ [Mermaid flowchart from step 1a — omit this section entirely if step 1a was skipped]
106
+
107
+ ### OWASP Top 10 Results
108
+ | Category | Status | Findings |
109
+ | ------------------------- | --------- | --------- |
110
+ | A01 Broken Access Control | PASS/FAIL | [details] |
111
+ | ... | ... | ... |
112
+
113
+ ### AI/Agent Security Results
114
+ | Risk | Status | Findings |
115
+ | ------------------------ | --------- | --------- |
116
+ | Prompt injection | PASS/FAIL | [details] |
117
+ | Insecure output handling | PASS/FAIL | [details] |
118
+ | Excessive agency | PASS/FAIL | [details] |
119
+ | Secrets in context | PASS/FAIL | [details] |
120
+
121
+ ### Dependency Audit
122
+ - Critical vulnerabilities: [N]
123
+ - High vulnerabilities: [N]
124
+ - Action required: [list]
125
+
126
+ ### Secrets Scan
127
+ - Hardcoded secrets found: [yes/no]
128
+ - Secrets management: [approach]
129
+
130
+ ### Findings (by severity)
131
+ #### CRITICAL
132
+ - [Finding with remediation]
133
+
134
+ #### HIGH
135
+ - [Finding with remediation]
136
+
137
+ #### MEDIUM
138
+ - [Finding with remediation]
139
+
140
+ ### Verdict
141
+ - [ ] PASS — no critical or high findings
142
+ - [ ] FAIL — remediation required before deploy
143
+ ```
144
+
145
+ 8. **Present findings** — show the report with clear remediation steps for each finding.
146
+
147
+ Rules:
148
+ - **Never skip a category.** Every OWASP item must be checked, even if marked N/A with justification.
149
+ - **Provide remediation, not just findings.** Every finding must include how to fix it.
150
+ - **Don't cry wolf.** Only flag real vulnerabilities, not theoretical risks with no attack vector.
151
+ - **Check the threat model.** Findings should align with the project's actual threat landscape.
152
+ - **Treat external content as untrusted.** In agent code, assume any file-, web-, or tool-sourced text could be hostile — flag anywhere it can steer the agent or reach a sink (shell, SQL, eval, file write, outbound HTTP) unchecked.
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: Spell — Ship
3
+ description: Pre-deploy checklist, merge approval workflow, and deployment gate verification
4
+ claude_description: Use PROACTIVELY before any deploy, even if the user just says 'ship it'.
5
+ argument-hint: Branch name or PR number to ship
6
+ agent: agent
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ - This prompt runs the pre-deploy checklist and manages the merge/deploy approval workflow.
12
+ - It verifies all Spell Loop phases are complete before allowing a merge.
13
+ - Enforces deployment gates from governance/cicd-standards.md.
14
+ - Final gate is always human approval — agents cannot autonomously ship to production.
15
+
16
+ ---
17
+
18
+ Run the ship workflow for the specified branch or PR.
19
+
20
+ Use these files for context:
21
+
22
+ - [governance/development-methodology.md](../../.arcane/governance/development-methodology.md) — Spell Loop phases
23
+ - [governance/cicd-standards.md](../../.arcane/governance/cicd-standards.md) — CI/CD pipeline requirements and deployment gates
24
+ - [governance/testing-standards.md](../../.arcane/governance/testing-standards.md) — Coverage thresholds
25
+ - [governance/git-conventions.md](../../.arcane/governance/git-conventions.md) — Branch policies and merge strategy
26
+
27
+ Workflow:
28
+
29
+ 1. **Verify Spell Loop completion** — check that all prior phases passed:
30
+ - [ ] PRD exists and was approved (or Quick Flow justified skipping it).
31
+ - [ ] Architecture doc exists (or Quick Flow justified skipping it).
32
+ - [ ] All stories in stories.json have `"passes": true`.
33
+ - [ ] Test evidence exists with passing thresholds.
34
+ - [ ] Code review completed with APPROVE verdict.
35
+
36
+ 2. **Sync with the target branch** — actually perform the sync, do not just assert it:
37
+ - Run `git fetch origin` to get the latest refs.
38
+ - Merge the target branch into the current branch (e.g. `git merge origin/<target>`).
39
+ - **On merge conflicts:** STOP and ask the user to resolve them, or run `spell-sync-pull-request` — it handles exactly this case, with a recoverable ref and an explicit mechanical-vs-ambiguous conflict boundary. Do not attempt to auto-resolve here.
40
+ - After a clean merge (or once the user has resolved conflicts), re-run the full test suite and confirm it passes.
41
+ - Push the synced branch (e.g. `git push`).
42
+
43
+ 3. **Run pre-deploy checklist**:
44
+ - [ ] All CI pipeline checks pass (build, test, lint, security scan).
45
+ - [ ] Branch synced with target (fetch + merge completed in step 2, no outstanding conflicts).
46
+ - [ ] No secrets or credentials in the diff.
47
+ - [ ] DECISIONS.md updated if new ADRs were created.
48
+ - [ ] Documentation updated for user-facing changes.
49
+ - [ ] **Package version bumped** (if `package.json` exists): run `npm view <package-name> version` to get the last published version, then confirm `package.json` `version` field is higher. BLOCK the ship if the version has not been incremented — the pipeline will skip publishing an already-published version, so a bump is required to actually release.
50
+
51
+ 4. **Ensure a PR exists** — before declaring the branch ready to ship, verify that a pull request exists for it. If none exists, STOP and direct the user to run `spell-create-pull-request` to open one. The ship checklist cannot complete without an open PR.
52
+
53
+ 5. **Deployment gate verification** — per cicd-standards.md:
54
+ - **Staging:** CI green + code review approved.
55
+ - **Production:** Staging validated + human approval + rollback plan documented.
56
+ - **Terraform:** Plan output reviewed + human approval for any destroy operations.
57
+
58
+ 6. **Generate ship report**:
59
+ ```markdown
60
+ ## Ship Report — [Feature/Branch]
61
+
62
+ **Date:** [timestamp]
63
+ **Target:** [main / release branch]
64
+
65
+ ### Spell Loop Status
66
+ | Phase | Status | Evidence |
67
+ | --------- | --------- | ------------------------------------ |
68
+ | Plan | PASS/SKIP | [PRD link or justification] |
69
+ | Architect | PASS/SKIP | [Architecture link or justification] |
70
+ | Implement | PASS | [N stories complete] |
71
+ | Test | PASS | [Coverage %, test count] |
72
+ | Review | PASS | [Review link, verdict] |
73
+
74
+ ### Pre-Deploy Checklist
75
+ - [x/- for each item above]
76
+
77
+ ### Deployment Gate
78
+ - Target environment: [staging/production]
79
+ - Gate requirements met: [yes/no]
80
+ - Rollback plan: [documented/not needed]
81
+
82
+ ### Recommendation
83
+ - APPROVE for merge and deploy
84
+ - OR: BLOCK — [reason]
85
+ ```
86
+
87
+ 7. **Request human approval** — present the ship report and wait for explicit approval.
88
+
89
+ 8. **Execute merge** (after approval):
90
+ - Merge using the project's merge strategy as defined in [governance/git-conventions.md](../../.arcane/governance/git-conventions.md). **Do NOT squash** — squash merges are prohibited because they collapse per-commit attribution. Prefer rebase and fast-forward.
91
+ - Verify CI passes on the target branch post-merge.
92
+ - Tag release if applicable.
93
+
94
+ 9. **Post-merge branch cleanup** (after the PR merges) — the merge was the human gate, so cleanup is automatic:
95
+ - **First, which primitive are you in?** `git rev-parse --path-format=absolute --git-common-dir` vs `--git-dir` — equal means primary checkout, different means linked worktree. (`--path-format=absolute` is required; without it the two differ from any subdirectory and every primary checkout reads as a worktree.) **In a linked worktree, skip the two steps below** (ARC-028 R1/R8): `git checkout main` fails when another working tree holds `main`, and it fails *first*, so the rest of this cleanup block never runs and the remote branch deletion below is left half-done. Report the worktree path for removal from another vantage point instead, and go straight to the remote-branch and prune steps.
96
+ - Switch to the main branch (e.g. `git checkout main`).
97
+ - Pull the latest (e.g. `git pull`).
98
+ - Delete the merged topic branch locally (e.g. `git branch -d <branch>`) — if the repository or its linked worktrees might be reached through more than one filesystem view, run the same-vantage-point check first (EF-33 / ARC-028 R7, [governance/git-conventions.md](../../.arcane/governance/git-conventions.md) Same-Vantage-Point Check section).
99
+ - Delete the merged topic branch on the remote (e.g. `git push origin --delete <branch>`); tolerate an already-deleted remote branch.
100
+ - Prune stale remote-tracking refs (e.g. `git fetch --prune` or `git remote prune origin`).
101
+
102
+ Rules:
103
+ - **Never merge without human approval.** This spell always ends with a human gate.
104
+ - **Never skip the checklist.** Every item must be verified, not assumed.
105
+ - **Block on failures.** If any checklist item fails, the ship is blocked until fixed.
106
+ - **Document what shipped.** The ship report is the audit trail.
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: Spell — Status
3
+ description: Show a fast, read-only snapshot of the current session — branch, git working state, open TODO count, decision count, and last journal date. Text or JSON.
4
+ claude_description: Use PROACTIVELY when asked for a quick snapshot of session/repo state — branch, TODOs, decisions, last journal.
5
+ argument-hint: Optional flags — e.g., --verbose --format json
6
+ agent: agent
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ - This spell prints a quick state snapshot for the current repo. It never modifies files.
12
+ - It reads local git state plus arcane session files (`TODO.md`, `DECISIONS.md`, `journal/`).
13
+ - Use it any time mid-session to re-orient without running the full `spell-open-session` pass.
14
+
15
+ ---
16
+
17
+ Show the current session status for this repository. This is a read-only spell.
18
+
19
+ ## Inputs
20
+
21
+ - Optional `--verbose` — include changed-file paths and the first few open TODOs.
22
+ - Optional `--format text|json` — default is `text`.
23
+
24
+ If no flags are given, use default text mode.
25
+
26
+ ## Steps
27
+
28
+ 0. Confirm this is a git repository (e.g., `git rev-parse --is-inside-work-tree`). If it is not, skip the git steps and set `branch`, `unpushedCommits`, `staged`, `unstaged`, and `untracked` to `unknown` (text) / `null` (JSON); still report the file-based counts in steps 4–6 if those files exist. Note `not a git repository` in the output.
29
+ 1. Run `git branch --show-current` and capture the branch name. If it returns empty, you are in **detached HEAD** — report the branch as `detached@{short-sha}` (use `git rev-parse --short HEAD`).
30
+ 2. Run `git rev-list --count @{upstream}..HEAD` for unpushed commit count. If there is no upstream (no tracking branch, or detached HEAD), set this to `unknown` (text) / `null` (JSON). Do not treat the absence of an upstream as `0`.
31
+ 3. Run `git status --short` and compute counts: staged, unstaged, untracked. A clean tree is `0`/`0`/`0`.
32
+ 4. Count open TODOs in `TODO.md` (unchecked `- [ ]` items). If the file is missing, count `0`.
33
+ 5. Count decision entries in `DECISIONS.md` — count one per decision-record heading (the `ADR-NNN` / `ARC-NNN` entry headings, e.g. `## ARC-012 ...`). Do not count cross-reference table rows or inline mentions, and de-duplicate repeated IDs. If the file is missing, count `0`.
34
+ 6. Determine the last session date from the most recent file in `journal/` (filenames follow `YYYY-MM-DD-topic-slug.md`; sort by the leading date, not file mtime). If `journal/` is missing or contains no dated entries, report `none` (text) / `null` (JSON).
35
+
36
+ ## Output
37
+
38
+ ### Text mode (default)
39
+
40
+ One concise line:
41
+
42
+ ```
43
+ [{branch}] ↑{unpushed} | {staged}● {unstaged}✎ {untracked}? | {openTodos} TODOs | {decisions} ADRs | last session: {date}
44
+ ```
45
+
46
+ Glyph key: `↑` unpushed commits, `●` staged, `✎` unstaged, `?` untracked. Render `unknown` / `none` literally in the slot when a value cannot be determined (e.g. `↑unknown`, `last session: none`). When not a git repo, prefix the line with `not a git repository — ` and show `unknown` for all git-derived slots.
47
+
48
+ If `--verbose`, also print:
49
+
50
+ - a short bullet list of changed file paths from `git status --short`
51
+ - the first 5 open TODO lines
52
+
53
+ ### JSON mode (`--format json`)
54
+
55
+ ```json
56
+ {
57
+ "branch": "main",
58
+ "isGitRepo": true,
59
+ "detachedHead": false,
60
+ "unpushedCommits": 0,
61
+ "staged": 0,
62
+ "unstaged": 0,
63
+ "untracked": 0,
64
+ "openTodos": 0,
65
+ "decisions": 0,
66
+ "lastSessionDate": "YYYY-MM-DD",
67
+ "modifiedFiles": []
68
+ }
69
+ ```
70
+
71
+ Field conventions (keep JSON consistent with the text shape):
72
+
73
+ - `branch` — string; `detached@{short-sha}` when in detached HEAD; `null` when not a git repo.
74
+ - `isGitRepo` — boolean. When `false`, all git-derived fields (`unpushedCommits`, `staged`, `unstaged`, `untracked`, `branch`) are `null`.
75
+ - `detachedHead` — boolean.
76
+ - `unpushedCommits` — integer, or `null` when there is no upstream / detached HEAD (the JSON analogue of text `unknown`). Never silently `0`.
77
+ - `lastSessionDate` — `YYYY-MM-DD` string, or `null` when no dated journal entry exists (the analogue of text `none`).
78
+ - `modifiedFiles` — populated only when `--verbose` is set; otherwise `[]`.
79
+
80
+ ## Rules
81
+
82
+ - Read-only — never edit, create, stage, or commit any file. Use only inspection commands (`git status`, `git rev-list`, `git branch`, file reads).
83
+ - Prefer exact values from local git and files; do not estimate.
84
+ - Never fail the whole snapshot because one source is unavailable. A missing count file is `0`; an undeterminable git value is `unknown` (text) / `null` (JSON); a non-git directory still reports file-based counts.
85
+ - Counts vs. unknowns are distinct: a real `0` (clean tree, empty TODO) is not the same as `unknown`/`null` (could not determine). Do not collapse one into the other.
86
+ - Keep text output to a single line unless `--verbose` is set.
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: Spell — Suggest Feature
3
+ description: Capture a feature suggestion from smoke testing or usage — assesses impact, files a tracker item (provider-aware), and adds to backlog
4
+ claude_description: Use PROACTIVELY when smoke testing or usage surfaces a feature gap worth tracking.
5
+ argument-hint: Feature idea (e.g., "Settings page to change instance name and gateway URL")
6
+ agent: agent
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ - This prompt captures feature suggestions discovered during smoke testing or regular use.
12
+ - It creates a structured user story, assesses impact, and files a tracker item using whatever provider the repo is configured for (respects `tracking_mode`; ADO is one option, not an assumption).
13
+ - Output is a tracked backlog item ready for future `spell-plan` invocation (or `spell-scope` for large, multi-feature suggestions).
14
+ - See [[.arcane/governance/development-methodology|Development Methodology]] for the full Spell Loop reference and tracker-provider specifics.
15
+
16
+ ---
17
+
18
+ Capture and document the described feature suggestion.
19
+
20
+ Use these files for context:
21
+
22
+ - [governance/development-methodology.md](../../.arcane/governance/development-methodology.md) — Spell Loop methodology
23
+ - [project.md](../../project.md) — Project goals and priorities
24
+ - [DECISIONS.md](../../DECISIONS.md) — Existing ADRs to check for overlap
25
+ - [TODO.md](../../TODO.md) — Current backlog items
26
+
27
+ Workflow:
28
+
29
+ 1. **Capture the suggestion** — gather these details from the user (ask if missing):
30
+
31
+ | Field | Description |
32
+ |-------|-------------|
33
+ | **Title** | Short descriptive name for the feature |
34
+ | **User story** | "As a [role], I want [capability], so that [benefit]" |
35
+ | **Discovery context** | What were you doing when you noticed this gap? |
36
+ | **Affected area** | Page, component, workflow, or system |
37
+ | **Priority suggestion** | Must-have / Should-have / Nice-to-have |
38
+
39
+ 2. **Check for duplicates** — before creating a work item:
40
+ - Search `TODO.md` for related items.
41
+ - Search `DECISIONS.md` for ADRs that already cover this.
42
+ - Check the relevant PRD at `{PRD_PATH}` for existing must-haves (resolve from `.arcane.json` or the active feature/PRD frontmatter; if unset, ask the user — or skip this check if the repo has no PRD).
43
+ - If the feature is already planned, note which must-have (MH-XX) it maps to and skip to Step 6.
44
+
45
+ 3. **Assess impact** — quick evaluation:
46
+
47
+ | Dimension | Assessment |
48
+ |-----------|------------|
49
+ | **Who benefits?** | Which users/personas are affected |
50
+ | **Effort estimate** | S (< 1 day) / M (1-3 days) / L (3+ days) |
51
+ | **Dependencies** | What must exist first? Other features, infrastructure, ADRs? |
52
+ | **Risk** | Low / Medium / High — any security, UX, or architecture implications? |
53
+ | **Phase recommendation** | Which phase should this land in? (current, next, future) |
54
+
55
+ 4. **Resolve tracking mode** — before creating a tracker item:
56
+ - Read `tracking_mode` / `external_provider` from `.arcane.json` or the active PRD frontmatter if available.
57
+ - If missing, ask the user:
58
+ <!-- fragment:tracking-mode-declaration:start -->
59
+ - `tracking_mode: internal | external`
60
+ - `external_provider: ado | github | jira | other`
61
+ <!-- fragment:tracking-mode-declaration:end -->
62
+ - (`external_provider` is required only for external mode)
63
+ - If ADO context is already active and no explicit choice is provided, default to `external` + `ado` for backward compatibility.
64
+
65
+ 5. **Create tracker item (conditional)**:
66
+ - If `tracking_mode=external` and `external_provider=ado`, create a work item:
67
+ ```bash
68
+ az boards work-item create \
69
+ --type "User Story" \
70
+ --title "{title}" \
71
+ --description "{formatted user story + impact assessment}" \
72
+ --org https://dev.azure.com/{org} \
73
+ --project {project} \
74
+ --output json
75
+ ```
76
+ Extract the work item ID from the response.
77
+ - If `tracking_mode=external` and `external_provider=github`, create an issue:
78
+ ```bash
79
+ gh issue create \
80
+ --title "{title}" \
81
+ --body "{formatted user story + impact assessment}" \
82
+ --label enhancement
83
+ ```
84
+ `gh issue create` prints the created issue's URL; extract the trailing number as the issue ID. `--label` names must exist in the repo already (`gh label list`) — omit it rather than guessing a label that isn't there.
85
+ - If `tracking_mode=internal`, skip external item creation and track in `TODO.md` only.
86
+ - If `external_provider=jira` or `other`, add a TODO note for provider-specific automation and continue with `TODO.md` tracking.
87
+ - The ADO and GitHub commands above are illustrative; for the authoritative per-provider creation steps and field mappings, see [[.arcane/governance/development-methodology|Development Methodology]].
88
+
89
+ 6. **Update backlog** — add a line to `TODO.md`:
90
+ ```markdown
91
+ - [ ] {Title} — {one-line description} (tracking: {internal|provider#{id}|provider TODO}, {priority}, {effort})
92
+ ```
93
+ If the feature maps to an existing must-have, note the mapping instead of creating a duplicate entry.
94
+
95
+ 7. **Present summary** — show the user what was captured:
96
+ ```markdown
97
+ ## Feature Suggestion: {Title}
98
+
99
+ **User Story:** As a {role}, I want {capability}, so that {benefit}.
100
+ **Discovery:** {context}
101
+ **Impact:** {who benefits} | Effort: {S/M/L} | Phase: {recommendation}
102
+ **Tracking:** {internal-only | ado #{workItemId} | jira/other TODO + TODO.md}
103
+ **Dependencies:** {list or "None"}
104
+ **Duplicates/Overlaps:** {existing MH-XX or "None found"}
105
+ ```
106
+
107
+ Rules:
108
+ - Do not implement the feature — this spell only captures and tracks it.
109
+ - If the suggestion overlaps with an existing planned feature, make the connection explicit rather than creating a duplicate.
110
+ - The user decides priority — recommendations are just that.
111
+ - Present the `TODO.md` edit for approval before saving.
112
+ - If multiple related suggestions come in at once, capture each as a separate work item but note the relationship.
113
+
114
+ ## Related Spells
115
+
116
+ This spell sits at the front of the Spell Loop — it captures and tracks; it does not plan or build. Hand off downstream:
117
+
118
+ - **Feeds into [[spell-plan|spell-plan]]** — a captured suggestion is the input to planning. Once tracked here, invoke `spell-plan` to turn it into an implementation plan.
119
+ - **Feeds into [[spell-scope|spell-scope]]** for large or multi-feature suggestions — if the impact assessment lands on **L** effort (or the idea spans several features), route it to `spell-scope` first to break it down before planning.
120
+ - **Consumes from usage/testing** — there is no upstream spell; suggestions originate from smoke testing or regular use (e.g. while running `spell-test`).
121
+
122
+ See [[.arcane/governance/development-methodology|Development Methodology]] for the canonical Spell Loop hand-off flow.
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: Spell — Summon Venture
3
+ description: Create a new venture in a hub repo — folder, overview/config/legal docs, idea and todo books, and a registry entry — in one hub-gated move.
4
+ claude_description: Use PROACTIVELY in a hub repo when creating a new venture from scratch.
5
+ argument-hint: Venture Name | Venture Type | One-line description
6
+ agent: agent
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ - This prompt creates a new venture in a **hub** repo: the venture folder, its starter docs, its two idea/todo books, and its registry entry — one operation instead of several manual steps.
12
+ - **Hub-gated:** requires `role: "hub"` in `.arcane.json`. Refuses cleanly in a consumer repo, pointing at the right place to capture the idea instead.
13
+ - Use this when starting a new venture (business, product, or personal project) that the hub should track.
14
+ - Input format is: `Venture Name | Venture Type | Description` — prompt will ask for missing fields.
15
+ - Renamed from `spell-bootstrap-business` — venture books and the registry didn't exist when that spell was named. Clean rename, no compatibility alias, per ARC-008's precedent (cited as plain text, not linked — this file ships; see `agent-output.instructions.md` → Doc-ID Link Format).
16
+
17
+ ---
18
+
19
+ ## Step 0 — Hub Gate
20
+
21
+ Read `.arcane.json`. If `role` is not `"hub"`, stop and report:
22
+
23
+ > `spell-summon-venture` runs only in a hub repo (`role: "hub"` in `.arcane.json`). This repo is a consumer. If you're capturing an idea for a venture that should exist, save it in the hub instead — ask there for `spell-save-idea --venture <new-slug> "<idea>"`, which offers to scaffold the venture book if the slug doesn't exist yet.
24
+
25
+ Do not create anything. Do not infer hub status from a `ventures/` directory existing — that directory can legitimately exist in a consumer repo too (this exact spell creates it there in non-hub contexts under the old model; the gate is what changed).
26
+
27
+ If `role` is `"hub"`, resolve `{BUSINESS_ROOT}` from `.arcane.json`'s `business_root` field (default `ventures/`) and continue.
28
+
29
+ ## Step 1 — Gather Venture Details
30
+
31
+ Parse the prompt argument as:
32
+ `<Venture Name> | <Venture Type> | <One-line Description>`
33
+
34
+ If any required value is missing, ask only for missing fields. Additionally ask for **ownership** if not stated or inferable from context: `llc` (company-owned), `co-venture` (shared with an external partner), or `personal` (non-commercial, no co-owner) — never guess this; it's load-bearing for the registry and for later idea-lifecycle disclosure decisions.
35
+
36
+ Use these files first (each is optional — if missing, proceed as noted):
37
+
38
+ - [playbooks/new-business-setup.md](../../playbooks/new-business-setup.md) — setup playbook. If `playbooks/` doesn't exist, skip and derive steps from the venture-type checklist below.
39
+ - [naming-conventions.md](../../.arcane/governance/naming-conventions.md) — slug/file naming rules. If missing, default to lowercase-with-dashes slugs.
40
+ - `{BUSINESS_ROOT}/_template/overview.md` — overview template. If missing, generate a minimal overview from the fields below.
41
+ - [.arcane/templates/venture-template/IDEAS.md](../../.arcane/templates/venture-template/IDEAS.md) and [.arcane/templates/venture-template/TODO.md](../../.arcane/templates/venture-template/TODO.md) — book stubs. If missing, use the header format from [[spell-save-idea|spell-save-idea]] / [[spell-todo|spell-todo]].
42
+ - [README.md](../../README.md) — repo navigation. If missing, skip cross-linking.
43
+ - [project.md](../../project.md) — project context. If missing, skip.
44
+
45
+ ## Step 2 — Create the Venture
46
+
47
+ 1. Create `{BUSINESS_ROOT}/<slug>/` using existing repo style (lowercase with dashes). If `{BUSINESS_ROOT}` doesn't exist yet, create it.
48
+ 2. Create these files:
49
+ - `overview.md` from template, filled with provided venture details and current date.
50
+ - `config.md` with placeholders for `{PLATFORM_NAME}` configuration, data paths, and platform integrations. (`{PLATFORM_NAME}` is the org's operating platform — resolve from `.arcane.json`/frontmatter; ask if unset.)
51
+ - `legal.md` with baseline legal checklist and links to relevant repo docs.
52
+ - `IDEAS.md` from the venture-template stub, with the venture name filled in.
53
+ - `TODO.md` from the venture-template stub, with the venture name filled in.
54
+ 3. Add a startup checklist tailored to the venture type (`e-commerce`, `app`, `protocol`, `service`, or `personal`).
55
+
56
+ ## Step 3 — Register the Venture
57
+
58
+ Open (or create, with the standard header — see `{BUSINESS_ROOT}/registry.json`'s own `_comment` field for the expected shape) `{BUSINESS_ROOT}/registry.json` and append an entry keyed by the slug:
59
+
60
+ ```json
61
+ "<slug>": {
62
+ "name": "<Venture Name>",
63
+ "aliases": [],
64
+ "status": "idea",
65
+ "visibility": "private",
66
+ "ownership": "<llc|co-venture|personal>",
67
+ "tracking": "none",
68
+ "repos": []
69
+ }
70
+ ```
71
+
72
+ `status` starts `"idea"` and `tracking` starts `"none"` — this spell only creates the hub-side folder, it does not provision a code repo or tracker project. Update the `repos[]` array separately once a real repo exists. `visibility` defaults to `"private"`; only change it if the operator states the venture is public-facing at creation time.
73
+
74
+ ## Step 4 — Cross-Links and Summary
75
+
76
+ Add cross-links only when appropriate:
77
+
78
+ - Update [README.md](../../README.md) only if there is a clear place for venture navigation.
79
+ - Update [TODO.md](../../TODO.md) (hub root) only with concrete, actionable next tasks — venture-specific tasks belong in the new venture's own `TODO.md`, not here.
80
+
81
+ Return a ready-to-start summary.
82
+
83
+ Output format:
84
+
85
+ ## Created
86
+
87
+ - File and folder paths created, including the `{BUSINESS_ROOT}/registry.json` entry.
88
+
89
+ ## Defaults Applied
90
+
91
+ - Slug, ownership, naming decisions, and template assumptions used.
92
+
93
+ ## Immediate Next Actions
94
+
95
+ 1. Action one.
96
+ 2. Action two.
97
+ 3. Action three.
98
+ 4. Action four.
99
+ 5. Action five.
100
+
101
+ ## Questions To Finalize
102
+
103
+ - Up to 3 targeted questions, or `None`.
104
+
105
+ Rules:
106
+
107
+ - Follow repository frontmatter conventions.
108
+ - Do not create Azure resources directly; document steps only.
109
+ - Keep generated docs editable and operational, not verbose.
110
+ - Never run outside a hub repo. Never infer hub status — only `role: "hub"` counts.