arcane-cli 0.29.3 → 0.29.5

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.
@@ -49,13 +49,15 @@ Agent autonomy is gamified into ascending power levels. Each level grants broade
49
49
  | Magus | Self-merge within approved scope (fast-forward only). |
50
50
  | Archmage | Broadest autonomous authority within an approved repo. |
51
51
 
52
- Assign a default power level per agent × per repo. Human approval and commit governance still apply in interactive sessions.
52
+ Assign a default power level per agent × per repo. **Enforcement: explicitly advisory prose (ARC-023) — no check verifies a level was assigned for every agent × repo pair.** Human approval and commit governance still apply in interactive sessions. **Enforcement: structured spell gate (ARC-023) — `spell-commit-work`'s execution-authority table requires exact operator approval for any interactive-context commit regardless of power level, gated by an approval-fingerprint check before `git commit` runs.**
53
53
 
54
54
  **Notes:**
55
55
 
56
56
  - Repo creation remains Spectator-level (human only), regardless of an agent's assigned power level.
57
57
  - Grant the lowest level that lets an agent do its job; promote only after an autonomous fix-verify loop is validated for that agent.
58
58
 
59
+ **Enforcement: explicitly advisory prose (ARC-023) — both notes are operating conventions with no code check for repo-creation gating or promotion timing.**
60
+
59
61
  ---
60
62
 
61
63
  ## Solo-Operator Delegation Records (No Roster)
@@ -84,19 +86,19 @@ For exactly this case, record the grant explicitly instead, in `.arcane/delegati
84
86
  }
85
87
  ```
86
88
 
87
- - **Explicit:** a structured, git-tracked file — not prose buried in an unrelated document.
89
+ - **Explicit:** a structured, git-tracked file — not prose buried in an unrelated document. **Enforcement: explicitly advisory prose (ARC-023) — nothing prevents an ad hoc delegation from still being written as free prose elsewhere; using this file is a recommended convention, not a checked requirement.**
88
90
  - **Listable:** `spell doctor` reads this file (when present) and reports every active delegation's
89
91
  scope and exclusion list. A missing file is a silent pass — a repo with no ad hoc grants has nothing
90
92
  to report.
91
93
  - **Revocable per repo:** revocation is the git-native act of editing or removing the entry and
92
- committing — set `status` to `"revoked"` or delete the entry outright.
94
+ committing — set `status` to `"revoked"` or delete the entry outright. **Enforcement: executable check (ARC-023) — `checkDelegations` (`src/commands/doctor.ts`) reads `.arcane/delegations.json` and reports only entries with `status === "active"`, so a revoked entry silently drops out of `spell doctor`'s report; it verifies visibility, not the legitimacy of the scope itself.**
93
95
  - **Grants no new authority.** This mechanism does not permit anything `agent-policies.md` didn't
94
96
  already allow in principle (human execution required absent an explicit grant) — it only makes an
95
97
  existing kind of ad hoc grant explicit and discoverable instead of buried.
96
98
  - **No scaffold is shipped.** A delegation record is inherently repo-specific and starts empty for a
97
99
  fresh install — there is nothing generic to seed.
98
100
  - **Does not replace the roster-based matrix.** A repo with an installed roster still uses per-agent
99
- power levels for standing authority; this is the parallel, lighter-weight path for repos without one.
101
+ power levels for standing authority; this is the parallel, lighter-weight path for repos without one. **Enforcement: explicitly advisory prose (ARC-023) — these notes describe the mechanism's scope; `.arcane/delegations.json` is parsed with an unchecked type assertion, not a runtime-validated schema, so nothing constrains a delegation's claimed scope or actions.**
100
102
 
101
103
  ---
102
104
 
@@ -106,7 +108,7 @@ Spawn rights are configured per agent. Use a small number of orchestrators; keep
106
108
 
107
109
  - **Orchestrators** delegate work to specialists and aggregate their results.
108
110
  - **Leaf nodes** perform a single role (development, QA, research, comms) and report results upward; they cannot spawn subagents.
109
- - Promote a leaf to an orchestrator only once its autonomous behavior is validated.
111
+ - Promote a leaf to an orchestrator only once its autonomous behavior is validated. **Enforcement: explicitly advisory prose (ARC-023) — `spawn.can_spawn`/`spawn.spawnable_by` are schema-validated fields (`src/modules/agent-schema.ts`) when an agent definition declares them, but that only checks the declared value's shape; no code in this repo verifies a runtime actually honors the leaf/orchestrator split.**
110
112
 
111
113
  ---
112
114
 
@@ -120,13 +122,13 @@ Agents may integrate external tools and services through MCP (Model Context Prot
120
122
 
121
123
  **Access boundaries:** An agent may be intentionally denied access to one org/service while retaining access to another (a least-privilege split). Verify the split behaves as expected — the denied target should return an unauthorized error.
122
124
 
123
- **MCP change control rule:** Never enable a fully automatic write mode. Adding a new MCP server (new org, new service, new auth pattern) is a **Medium**-risk change — it requires explicit approval and a recorded decision if it changes the agent's reachable network surface.
125
+ **MCP change control rule:** Never enable a fully automatic write mode. Adding a new MCP server (new org, new service, new auth pattern) is a **Medium**-risk change — it requires explicit approval and a recorded decision if it changes the agent's reachable network surface. **Enforcement: explicitly advisory prose (ARC-023) — `spell doctor`'s `checkMcpConfig` only validates that a configured `.mcp.json` server declares a numeric timeout; it does not check write-mode, per-agent scoping, access boundaries, or new-server change-approval.**
124
126
 
125
127
  ---
126
128
 
127
129
  ## Guiding Principle
128
130
 
129
- An agent is operational infrastructure. It executes defined tasks. It does not make business decisions, handle financial transactions without explicit approval, or access systems outside its defined scope.
131
+ An agent is operational infrastructure. It executes defined tasks. It does not make business decisions, handle financial transactions without explicit approval, or access systems outside its defined scope. **Enforcement: explicitly advisory prose (ARC-023) — a framing statement of intent with no independent mechanical check; the specific prohibitions it summarizes are enforced (or not) where they recur below.**
130
132
 
131
133
  ---
132
134
 
@@ -138,7 +140,7 @@ When agents can be driven through remote channels (chat, messaging, CLI, IDE), a
138
140
 
139
141
  - A front-door orchestrator captures and triages remote requests.
140
142
  - A designated privileged executor handles high-risk runtime/config changes.
141
- - The orchestrator may execute low-risk documentation-only updates directly in approved paths.
143
+ - The orchestrator may execute low-risk documentation-only updates directly in approved paths. **Enforcement: explicitly advisory prose (ARC-023) — this role split is an operating convention for remote-channel work with no code that checks it was followed.**
142
144
 
143
145
  ### Required Workflow
144
146
 
@@ -150,8 +152,8 @@ Every remote environment change follows this sequence:
150
152
  4. **Pre-change backup** — snapshot relevant config/artifacts before mutation.
151
153
  5. **Apply** — execute the scoped change (delegate high-risk to the privileged executor).
152
154
  6. **Verify** — run deterministic checks and report results.
153
- 7. **Document** — update canonical docs (policy/runbook/journal/TODO/decisions as needed).
154
- 8. **Commit proposal** — prepare a commit message and request explicit approval.
155
+ 7. **Document** — update canonical docs (policy/runbook/journal/TODO/decisions as needed). **Enforcement: explicitly advisory prose (ARC-023) — steps 1–7 are a general change-management sequence with no dedicated spell or check verifying each step ran.**
156
+ 8. **Commit proposal** — prepare a commit message and request explicit approval. **Enforcement: structured spell gate (ARC-023) — `spell-commit-work` Step 8 computes an approval fingerprint from the staged diff and proposed message and requires an authenticated operator response tied to that fingerprint before `git commit` runs.**
155
157
 
156
158
  ### Risk Classes
157
159
 
@@ -175,14 +177,14 @@ Each completed remote change should preserve traceability by recording:
175
177
  - rollback reference
176
178
  - links to updated docs and the proposed/approved commit
177
179
 
178
- When evidence cannot be captured in a single step, queue a TODO immediately and mark the change as partially complete.
180
+ When evidence cannot be captured in a single step, queue a TODO immediately and mark the change as partially complete. **Enforcement: explicitly advisory prose (ARC-023) — a recommended record-keeping checklist with no code that verifies any of these fields were actually captured.**
179
181
 
180
182
  ### Commit Hygiene for Remote Changes
181
183
 
182
184
  - **Author identity:** commits are authored under the human owner's identity ({OPERATOR_EMAIL}).
183
185
  - **Agent identity:** record the acting agent ({AGENT_NAME}) and the model/provider used.
184
- - Use Conventional Commits format: `type(scope): description`.
185
- - Show the full proposed commit and obtain approval before executing `git commit`.
186
+ - Use Conventional Commits format: `type(scope): description`. **Enforcement: explicitly advisory prose (ARC-023) — these three conventions are generated by `spell-commit-work`'s message-drafting steps, but nothing rejects a commit that skips them; `git-conventions.md` itself notes the format regex is "optional — not enforced by hooks."**
187
+ - Show the full proposed commit and obtain approval before executing `git commit`. **Enforcement: structured spell gate (ARC-023) — the same `spell-commit-work` Step 8 approval-fingerprint gate cited above.**
186
188
 
187
189
  ---
188
190
 
@@ -195,7 +197,7 @@ To reduce friction without weakening security, agents must follow this behavior
195
197
  3. Only request operator clarification after in-scope discovery fails.
196
198
  4. Never probe paths outside approved roots.
197
199
 
198
- **Intent:** fail-closed on boundaries, but avoid unnecessary "no access" responses for already-approved locations.
200
+ **Intent:** fail-closed on boundaries, but avoid unnecessary "no access" responses for already-approved locations. **Enforcement: explicitly advisory prose (ARC-023) — this discovery-before-escalation sequence and the approved-root boundary are behavioral guidance with no check in this repo verifying an agent stayed within them.**
199
201
 
200
202
  ---
201
203
 
@@ -207,11 +209,13 @@ Before meaningful autonomous work in any newly cloned repo, agents must verify c
207
209
  - `CLAUDE.md` and/or `.github/copilot-instructions.md` (agent instruction surface)
208
210
  - Any project-local contribution/architecture guidance docs
209
211
 
212
+ **Enforcement: explicitly advisory prose (ARC-023) — `spell doctor`'s `checkSessionContinuity` verifies a different file set (`TODO.md`, `DECISIONS.md`, `ai-context/system-prompt-context.md`, `journal/.gitkeep`, for `spell-close-session`) and does not check for `README.md`/`CLAUDE.md`/contribution docs, so this bootstrap requirement has no executable backing.**
213
+
210
214
  ---
211
215
 
212
216
  ## Actionable Recommendation Policy
213
217
 
214
- Any recommendation that could lead to a **monetary cost, account creation, subscription, purchase, license, or irreversible action** must follow these guardrails.
218
+ Any recommendation that could lead to a **monetary cost, account creation, subscription, purchase, license, or irreversible action** must follow these guardrails. **Enforcement: explicitly advisory prose (ARC-023) — this entire policy (the classification tiers, the six guardrails below, and the worked examples) depends on model judgment at generation time; no code in this repo checks that a recommendation was flagged, verified, or confirmed.**
215
219
 
216
220
  ### Classification
217
221
 
@@ -261,7 +265,7 @@ Permitted actions are agent- and deployment-specific. As a baseline, an agent ma
261
265
  - Read and write to designated business data directories when explicitly configured.
262
266
  - Read, flag, and queue operational workflows — never execute irreversible actions (fulfillment, publishing, payment) without approval.
263
267
 
264
- Define the concrete permitted-actions list per agent in that agent's configuration.
268
+ Define the concrete permitted-actions list per agent in that agent's configuration. **Enforcement: explicitly advisory prose (ARC-023) — `tools.allowed`/`tools.denied` are schema-validated when present (`src/modules/agent-schema.ts`) but declaring them is optional, and nothing in this repo verifies a runtime actually restricts an agent to its declared list.**
265
269
 
266
270
  ---
267
271
 
@@ -275,6 +279,8 @@ Define the concrete permitted-actions list per agent in that agent's configurati
275
279
  - Modifying security-relevant configuration without human approval.
276
280
  - Using personal Git credentials or SSH keys — agents must use scoped, dedicated credentials.
277
281
 
282
+ **Enforcement: explicitly advisory prose (ARC-023) — this deny list describes deployment/runtime hardening expectations; no check in this repo's own code observes agent process privileges, filesystem access, or credential usage at execution time.**
283
+
278
284
  ---
279
285
 
280
286
  ## Escalation Rules
@@ -286,11 +292,13 @@ If an agent encounters a situation outside its defined parameters, it should:
286
292
  3. Queue for human review.
287
293
  4. Not attempt to resolve ambiguity autonomously.
288
294
 
295
+ **Enforcement: explicitly advisory prose (ARC-023) — a behavioral sequence with no code that verifies an agent actually stopped, logged, or queued for review.**
296
+
289
297
  ---
290
298
 
291
299
  ## Branch Discipline
292
300
 
293
- **Agents must never commit directly to main.** All work happens on topic branches. This prevents collisions when multiple agents or human operators work in parallel.
301
+ **Agents must never commit directly to main. Enforcement: structured spell gate (ARC-023) — `spell-commit-work` Step 1 checks the current branch and stops before staging or committing if `main`/`master` is checked out against a usable remote, requiring a compliant topic branch first.** All work happens on topic branches. This prevents collisions when multiple agents or human operators work in parallel.
294
302
 
295
303
  **Required workflow for all agents:**
296
304
 
@@ -302,7 +310,7 @@ If an agent encounters a situation outside its defined parameters, it should:
302
310
 
303
311
  Example: `lafayette/feat/api-endpoint`, `merlin/docs/architecture-update`
304
312
 
305
- 2. **Commit** with proper attribution (author identity + required trailers per your git conventions).
313
+ 2. **Commit** with proper attribution (author identity + required trailers per your git conventions). **Enforcement: structured spell gate (ARC-023) — `spell-commit-work` Steps 1, 4.5, and 8 gate this: Step 1's branch guard, Step 4.5's loader-validated execution-authority check, and Step 8's approval-fingerprint requirement before `git commit` executes.**
306
314
 
307
315
  3. **Sync with main before opening a PR** — always fetch and rebase on the latest `origin/main` before pushing or creating a PR, even if you think no one else has merged:
308
316
 
@@ -313,21 +321,21 @@ If an agent encounters a situation outside its defined parameters, it should:
313
321
  # If rebase is unrecoverable: git rebase --abort, report to operator
314
322
  ```
315
323
 
316
- **Rule:** Never open a PR against a base that is ahead of your branch. Never push a branch with unresolved conflicts. Resolve locally — the PR must be clean and CI-green before review.
324
+ **Rule:** Never open a PR against a base that is ahead of your branch. Never push a branch with unresolved conflicts. Resolve locally — the PR must be clean and CI-green before review. **Enforcement: structured spell gate (ARC-023) — `spell-create-pull-request` Step 0's mandatory rebase guard (its Step 0.6) and `spell-commit-work` Step 9b both require a clean `git fetch origin && git rebase origin/<target>` before any PR-creation call, stopping for human resolution on conflict.**
317
325
 
318
326
  4. **Push the branch** to origin (after rebase).
319
327
 
320
328
  5. **Merge or queue** based on your power level — and merge by the mechanism your isolation primitive allows (ARC-028 R1):
321
329
  - **Magus+ power level, in the primary checkout:** self-merge via `git merge --ff-only`, push main, delete branch.
322
330
  - **Magus+ power level, in a linked worktree or a clone:** self-merge through the platform's PR merge instead. The authority is identical; only the mechanism changes, because a local ff-merge requires checking out `main` and another working tree already holds it. Power level decides *whether* you may merge without review; the isolation primitive decides *how*.
323
- - **Below Magus:** push the branch, report the branch name, and queue for human merge.
331
+ - **Below Magus:** push the branch, report the branch name, and queue for human merge. **Enforcement: structured spell gate (ARC-023) — `spell-commit-work`'s execution-authority table and its Step 9 merge-authorization gate (and `spell-create-pull-request`'s Authorization Gate) resolve power level and `exec_allowed` through the EF-27 loader-validated roster before permitting self-merge; below-Magus or unresolved authority always downgrades to human completion.**
324
332
 
325
- 6. **Delete the branch** (local and remote) after merge.
333
+ 6. **Delete the branch** (local and remote) after merge. **Enforcement: structured spell gate (ARC-023) — `spell-commit-work` Step 10 and `spell-close-session`'s branch-deletion step both require running the Same-Vantage-Point Check before a worktree-adjacent deletion; the vantage-point determination itself remains a manual judgment call, which `git-conventions.md` discloses as "not a code-level gate."**
326
334
 
327
335
  **Branch naming format:** `{agent-slug}/type/short-description`
328
336
 
329
337
  - The agent-slug prefix makes ownership obvious and prevents naming collisions.
330
- - Use standard commit types: `feat`, `fix`, `docs`, `refactor`, `chore`, etc.
338
+ - Use standard commit types: `feat`, `fix`, `docs`, `refactor`, `chore`, etc. **Enforcement: explicitly advisory prose (ARC-023) — no check in this repo validates an agent branch name against this format (unlike session-branch naming, which `spell-open-session` does check).**
331
339
 
332
340
  **What happens if ff-only fails:** Another actor merged to main first. This should not happen if you followed step 3. If it does, rebase and retry — **from the primary checkout**, since this block checks out `main`:
333
341
 
@@ -350,8 +358,8 @@ When more than one agent may work in the same repository simultaneously:
350
358
  4. **Append-only progress logs.** Never overwrite or truncate `features/{id}-{slug}/progress.txt`. Use `>>`, not `>`.
351
359
  5. **Story ownership.** Only the agent assigned to a feature modifies that feature's `stories.json`. If the assigned agent does not match your slug, halt and report.
352
360
  6. **No cross-repo mutations without coordination.** If a story requires changes in two repos, complete and push one before starting the second. Never hold uncommitted changes across two repos simultaneously.
353
- 7. **Merge window.** When two agents have PRs open for the same repo, the first to merge wins; the second must rebase before merging. The operator coordinates merge order if there are conflicts.
354
- 8. **Working-tree vantage point (EF-33 / ARC-028 R7) — applies even to a solo agent, not only when multiple agents are active.** Listed here because it's the working-tree/multi-primitive dimension ARC-028 R7 defines, not because the hazard requires a second agent: a lone agent working through a bridged/remote mount hits the identical near-miss. All linked worktrees share one physical `.git` and `.git/config` — treat config-mutating operations as fleet-wide, not scoped to the worktree that ran them. Before any `git worktree prune`, `worktree remove`, `gc`, or branch deletion, confirm the target path from the *current process's own filesystem* (not just Git's own report) — a repository or its linked worktrees reached through a bridged/remote mount can report a live, healthy worktree as safe to prune with no error distinguishing "confirmed absent" from "not resolvable from here." See [governance/git-conventions.md](git-conventions.md) Same-Vantage-Point Check section for the full procedure, including how to establish that your own vantage point is trustworthy before relying on it.
361
+ 7. **Merge window.** When two agents have PRs open for the same repo, the first to merge wins; the second must rebase before merging. The operator coordinates merge order if there are conflicts. **Enforcement: explicitly advisory prose (ARC-023) — items 1-7 are multi-agent coordination conventions (branch/folder/story ownership, staleness checks, append-only logs, cross-repo sequencing, merge order) with no code in this repo that checks another agent honored them.**
362
+ 8. **Working-tree vantage point (EF-33 / ARC-028 R7) — applies even to a solo agent, not only when multiple agents are active.** Listed here because it's the working-tree/multi-primitive dimension ARC-028 R7 defines, not because the hazard requires a second agent: a lone agent working through a bridged/remote mount hits the identical near-miss. All linked worktrees share one physical `.git` and `.git/config` — treat config-mutating operations as fleet-wide, not scoped to the worktree that ran them. Before any `git worktree prune`, `worktree remove`, `gc`, or branch deletion, confirm the target path from the *current process's own filesystem* (not just Git's own report) — a repository or its linked worktrees reached through a bridged/remote mount can report a live, healthy worktree as safe to prune with no error distinguishing "confirmed absent" from "not resolvable from here." See [governance/git-conventions.md](git-conventions.md) Same-Vantage-Point Check section for the full procedure, including how to establish that your own vantage point is trustworthy before relying on it. **Enforcement: structured spell gate (ARC-023) — `spell-commit-work` Step 10 and `spell-close-session`'s worktree-deletion step both require running this check before a worktree-adjacent branch/worktree deletion; the vantage-point determination itself stays a manual judgment call, which `git-conventions.md`'s own Same-Vantage-Point Check section calls "a standing operational caution, not a code-level gate."**
355
363
 
356
364
  ---
357
365
 
@@ -370,7 +378,7 @@ When producing planning artifacts (PRD, architecture, stories.json, UX specs), a
370
378
  - The root of a code repo (e.g. alongside `src/`).
371
379
  - Temporary or unversioned locations.
372
380
 
373
- Planning artifacts are the reproducible source of truth — code can be regenerated from them. They must live in a git-tracked, governed location.
381
+ Planning artifacts are the reproducible source of truth — code can be regenerated from them. They must live in a git-tracked, governed location. **Enforcement: explicitly advisory prose (ARC-023) — no check in this repo verifies where a PRD, architecture doc, or `stories.json` was actually written.**
374
382
 
375
383
  ---
376
384
 
@@ -392,6 +400,8 @@ Agents must place artifacts in the correct repository. Misrouting (e.g. code in
392
400
  3. **Delegation must include the target repo.** When an orchestrator delegates work, the delegation message must specify which repo the work targets. If ambiguous, ask the operator before delegating.
393
401
  4. **POC code** without a permanent home should go in an operator-designated repo or a new repo — never in the docs repo by default.
394
402
 
403
+ **Enforcement: explicitly advisory prose (ARC-023) — these routing rules depend on the acting agent's own judgment about repo fit; nothing in this repo checks that an artifact landed in the repo this section prescribes.**
404
+
395
405
  ---
396
406
 
397
407
  ## PR Notification & Hygiene
@@ -404,21 +414,23 @@ Agents creating pull requests must ensure the operator is aware and that PRs do
404
414
  2. **PR title** follows Conventional Commits format: `type(scope): description`.
405
415
  3. **PR description** must include: summary of changes, rationale, verification steps, and any linked work item ID.
406
416
 
417
+ **Enforcement: explicitly advisory prose (ARC-023) — `spell-create-pull-request` generates a title and description in this shape by default, but nothing rejects a PR opened without one.**
418
+
407
419
  ### PR Notification
408
420
 
409
- When an agent creates or updates a PR, notify the operator (routed through the orchestrator) with: repo name, PR link, work item ID (if any), and a one-line summary.
421
+ When an agent creates or updates a PR, notify the operator (routed through the orchestrator) with: repo name, PR link, work item ID (if any), and a one-line summary. **Enforcement: explicitly advisory prose (ARC-023) — no check confirms the operator was actually notified.**
410
422
 
411
423
  ### PR Hygiene Cadence
412
424
 
413
- - **At the start of every session:** list all open PRs across repos; flag PRs older than 3 days as stale.
414
- - **7-day threshold:** PRs open longer than 7 days without activity are flagged for closure. The operator decides whether to merge, update, or abandon.
415
- - **After merge:** the merging actor (agent or human) deletes the source branch (local and remote).
425
+ - **At the start of every session:** list all open PRs across repos; flag PRs older than 3 days as stale. **Enforcement: structured spell gate (ARC-023) — `spell-open-session`'s "Open PRs" step lists open PRs and flags them stale/overdue at these exact thresholds, though only when tracking mode is external/ADO and ADO MCP is available — it is not universal across every provider/session.**
426
+ - **7-day threshold:** PRs open longer than 7 days without activity are flagged for closure. The operator decides whether to merge, update, or abandon. **Enforcement: structured spell gate (ARC-023) — the same `spell-open-session` step above flags PRs older than 7 days as overdue in the same pass.**
427
+ - **After merge:** the merging actor (agent or human) deletes the source branch (local and remote). **Enforcement: structured spell gate (ARC-023) — the same `spell-commit-work` Step 10 / `spell-close-session` branch-deletion mechanism cited under Branch Discipline.**
416
428
 
417
429
  ---
418
430
 
419
431
  ## Hardening Baseline (Policy)
420
432
 
421
- This section defines the minimum hardening policy baseline for production operations. It is normative for runbooks and future automation.
433
+ This section defines the minimum hardening policy baseline for production operations. It is normative for runbooks and future automation. **Enforcement: explicitly advisory prose (ARC-023) — every deny/allow list and hardening principle below describes deployment/runtime configuration for wherever an agent actually executes; this repository's own CLI code does not run agents or observe their runtime privileges, network exposure, or filesystem access, so none of it is independently checked here.**
422
434
 
423
435
  ### Execution Restriction Baseline
424
436
 
@@ -35,8 +35,8 @@ Arcane separates framework-level decisions from org-specific ones using two pref
35
35
 
36
36
  - If the decision would apply to any organization using Arcane, it is `ARC-NNN`.
37
37
  - If the decision is specific to how your organization operates, it is `ADR-NNN`.
38
- - When uncertain, default to `ADR-NNN` in ops; promote to `ARC-NNN` later if the decision proves framework-generic.
39
- - Never renumber existing entries in either sequence.
38
+ - When uncertain, default to `ADR-NNN` in ops; promote to `ARC-NNN` later if the decision proves framework-generic. **Enforcement: explicitly advisory prose (ARC-023) — whether a decision is framework-generic enough for `ARC-NNN` (this rule and the two prefix-scoping rules above) is a judgment call; no script evaluates a decision's content to confirm the chosen prefix.**
39
+ - Never renumber existing entries in either sequence. **Enforcement: explicitly advisory prose (ARC-023) — `scripts/check-distributed-adr-references.ts` only verifies that a bare `ADR-NNN` citation resolves to a heading declared in `framework-decisions.md` (and separately flags certain `ARC-NNN`/`EF-NNN` link forms as cross-repo hazards); it never checks that numbers are sequential, unique, or never reused.**
40
40
 
41
41
  ## Problem Statement
42
42
 
@@ -64,7 +64,7 @@ Arcane separates framework-level decisions from org-specific ones using two pref
64
64
  - Rejected alternatives (2-3 bullets: what was considered but not chosen)
65
65
  - **Deep dive link** (if companion doc exists): `[[path/to/detail-doc|Display Text]]`
66
66
 
67
- **Keep ADRs under 20 lines** (excluding frontmatter). Longer means detail should move to companion doc.
67
+ **Keep ADRs under 20 lines** (excluding frontmatter). Longer means detail should move to companion doc. **Enforcement: explicitly advisory prose (ARC-023) — no script measures ADR entry length in DECISIONS.md; the Quarterly Review checklist below asks a human to check for long ADRs manually.**
68
68
 
69
69
  **Naming Impact Check:** If the decision introduces, changes, or retires a name (repo, project, product, agent, service), the ADR **must** include a "Naming impact" section that:
70
70
 
@@ -72,7 +72,7 @@ Arcane separates framework-level decisions from org-specific ones using two pref
72
72
  2. Confirms no collision with other entities
73
73
  3. Identifies any docs, scripts, or prompts that reference the old name
74
74
 
75
- This check was added after [[governance/rcas/RCA-001-naming-collision|RCA-001]] discovered that ADR-061 named a product without checking whether the ops repo already used that name.
75
+ This check was added after [[governance/rcas/RCA-001-naming-collision|RCA-001]] discovered that ADR-061 named a product without checking whether the ops repo already used that name. **Enforcement: explicitly advisory prose (ARC-023) — no script or spell gate verifies that an ADR introducing a new name actually contains a "Naming impact" section or performed its three checks; `spell-scry` can run the grep-and-collision check manually, but nothing requires it before such an ADR is written.**
76
76
 
77
77
  ### Tier 2: Companion Detail Docs
78
78
 
@@ -243,13 +243,13 @@ Create "Related ADRs" section at the top of every companion doc:
243
243
  - [[DECISIONS#ADR-NNN|Git SSH Authentication decision]]
244
244
  ```
245
245
 
246
- **Rationale:** Creates bidirectional graph edges in Obsidian visualization. Clicking an ADR shows its authentication strategy companion; the companion links back to each related ADR.
246
+ **Rationale:** Creates bidirectional graph edges in Obsidian visualization. Clicking an ADR shows its authentication strategy companion; the companion links back to each related ADR. **Enforcement: explicitly advisory prose (ARC-023) — no script verifies that a companion doc's "Related ADRs" section reciprocates an ADR's "Deep dive" link, or that every companion doc has one at all; the Anti-Patterns section below lists forgetting this link as a known failure mode with no automated catch.**
247
247
 
248
248
  ---
249
249
 
250
250
  ## Index-Free Discovery
251
251
 
252
- **No DECISIONS-INDEX.md required.** Discovery happens via:
252
+ **No DECISIONS-INDEX.md required. Enforcement: explicitly advisory prose (ARC-023) — nothing prevents creating one, and no script verifies that the four discovery methods below actually surface a given decision.** Discovery happens via:
253
253
 
254
254
  1. **Obsidian Graph View:** Visual clusters show related docs
255
255
  2. **Wiki-link navigation:** Click ADR "Deep dive" link → companion doc → "Related ADRs" → back to other ADRs
@@ -287,6 +287,8 @@ Create "Related ADRs" section at the top of every companion doc:
287
287
  - If new companion doc needed, create it first, then add "Deep dive" link in ADR
288
288
  - If existing companion doc covers it, add new section to that doc + update "Related ADRs" list
289
289
 
290
+ **Enforcement: explicitly advisory prose (ARC-023) — none of the editorial steps above (bumping `last_updated`, extracting detail past 20 lines, adding or updating "Deep dive"/"Related ADRs" links) is checked by any script; each depends on the editor remembering to do it.**
291
+
290
292
  ### Quarterly Review
291
293
 
292
294
  Every 3 months:
@@ -296,6 +298,8 @@ Every 3 months:
296
298
  - [ ] Verify Obsidian graph shows connected clusters (no isolated decision nodes)
297
299
  - [ ] Review "Future Considerations" sections in companion docs — any re-evaluation triggers?
298
300
 
301
+ **Enforcement: explicitly advisory prose (ARC-023) — this is a manual checklist; no script detects orphaned companion docs, measures ADR length, verifies Obsidian graph connectivity, or reminds anyone to revisit "Future Considerations" sections.**
302
+
299
303
  ---
300
304
 
301
305
  ## Anti-Patterns (Don't Do This)
@@ -312,6 +316,8 @@ Every 3 months:
312
316
 
313
317
  ❌ **Putting rationale in journals instead of companion docs** — Journals are chronological session logs (narrative). Companion docs are topic-indexed reference (structured). Rationale goes in companion docs, linked from journals.
314
318
 
319
+ **Enforcement: explicitly advisory prose (ARC-023) — no lint or script detects any of the six anti-patterns above (a stray `ADR-NNN-deep-dive.md` file, duplicated content, implementation steps in a companion doc, a companion doc for a simple decision, a missing bidirectional link, or rationale left in a journal); catching them depends on the writer's or a reviewer's judgment.**
320
+
315
321
  ---
316
322
 
317
323
  ## Evolution of This Standard
@@ -324,6 +330,8 @@ Every 3 months:
324
330
  4. Add entry to DECISIONS.md if decision-making process itself changes
325
331
  5. Announce in relevant channels (if the team expands beyond a single operator)
326
332
 
333
+ **Enforcement: explicitly advisory prose (ARC-023) — no script or spell gate enforces this five-step process when this standard itself changes; it depends on the editor following it by discipline.**
334
+
327
335
  **Versioning note:** Per-business decisions follow this pattern — business-only decisions live in `ventures/{name}/DECISIONS.md` (unnumbered or business-prefixed); system/cross-business decisions stay in the root `DECISIONS.md`.
328
336
 
329
337
  ---
@@ -141,9 +141,11 @@ Child linkage rules:
141
141
  3. If the selected fallback type combination cannot be linked as parent/child in that process template, use `Related` links and prefix titles with logical level tags (for example: `[EPIC]`, `[FEATURE]`) to preserve intent.
142
142
  4. Never silently flatten hierarchy. Document fallback/link decisions in `execution-plan.md` notes.
143
143
 
144
+ **Enforcement: explicitly advisory prose (ARC-023) — no script verifies the fallback order was followed or that `execution-plan.md` documents a link decision; compliance depends entirely on the executing agent's judgment.**
145
+
144
146
  ### GitHub Issues Conventions
145
147
 
146
- When `tracking_mode=external` and `external_provider=github`, resolve `{owner}/{repo}` from `git remote get-url origin` (or `.arcane.json`'s `github.repo` field if set) rather than assuming it matches the working directory name.
148
+ When `tracking_mode=external` and `external_provider=github`, **resolve `{owner}/{repo}` from `git remote get-url origin` (or `.arcane.json`'s `github.repo` field if set) rather than assuming it matches the working directory name. Enforcement: explicitly advisory prose (ARC-023) — no script gates this resolution before issue-tracking commands run; a same-principle utility (`parseGitHubRemote` in `src/modules/platform-policy.ts`) exists but serves `doctor`'s branch-policy check, not this workflow.**
147
149
 
148
150
  GitHub Issues has no configurable work-item-type hierarchy the way Azure DevOps does — there is no process-template discovery step, and no equivalent to `az boards work-item-type list`. Use these substitutes instead:
149
151
 
@@ -194,6 +196,8 @@ Without this chain, agents make conflicting decisions across stories (e.g., one
194
196
  3. Check for missing test coverage, architecture violations, security issues
195
197
  4. Defer unrelated findings to a backlog (don't derail the current change)
196
198
 
199
+ **Enforcement: explicitly advisory prose (ARC-023) — no script counts or verifies findings, and `spell-review.prompt.md`'s current Rules section has superseded item 1's minimum with "no finding quota... zero findings is a valid outcome," so this minimum should be read as superseded framing, not current spell behavior.**
200
+
197
201
  ### Append-Only Progress
198
202
 
199
203
  `progress.txt` is never edited, only appended. Each iteration adds:
@@ -248,6 +252,8 @@ The Arcane story schema for autonomous implementation:
248
252
 
249
253
  If the output is missing required tracking fields, `passes`, `assignedTo`, `priority`, or `testEvidence`, it is malformed and must be regenerated.
250
254
 
255
+ **Enforcement: structured spell gate (ARC-023) — `spell-architect` step 5a self-checks every field and must regenerate before outputting if any is missing, and `spell-full-cycle` Phase 2 independently gates on the same schema completeness before proceeding to Phase 3; no external schema-validator script exists, so the check is agent-administered, not tool-verified.**
256
+
251
257
  ### Story Sizing
252
258
 
253
259
  Each story must be small enough to complete in one context window:
@@ -275,7 +281,7 @@ For features that should run end-to-end with minimal human intervention, use `sp
275
281
  spell-full-cycle = spell-plan → [spell-enchant] → spell-architect → [spell-implement → spell-test → spell-review]* → spell-ship
276
282
  ```
277
283
 
278
- The entire pipeline runs autonomously with a single human gate at PR approval. Includes optional PRD enchantment between Plan and Architect (runs automatically if any quality dimension scores Bronze, or if `--enchant` is specified). Requires three inputs: feature description, tracking configuration (`tracking_mode` and optional `external_provider`), and target repo. In ADO mode, include the ADO work item ID; in GitHub mode, include the issue number if one already exists. Each phase has built-in quality gates that halt the pipeline on failure rather than producing garbage for downstream phases.
284
+ The entire pipeline runs autonomously with a single human gate at PR approval. Includes optional PRD enchantment between Plan and Architect (runs automatically if any quality dimension scores Bronze, or if `--enchant` is specified). Requires three inputs: feature description, tracking configuration (`tracking_mode` and optional `external_provider`), and target repo. In ADO mode, include the ADO work item ID; in GitHub mode, include the issue number if one already exists. **Each phase has built-in quality gates that halt the pipeline on failure rather than producing garbage for downstream phases. Enforcement: structured spell gate (ARC-023) — `spell-full-cycle.prompt.md` encodes explicit per-phase `Gate:` steps (e.g., Phase 4: "If coverage is below threshold or any acceptance criterion lacks a test, loop back to Phase 3... Maximum 2 coverage-fix loops before halting"; Phase 5: "If any HIGH severity finding exists, loop back to Phase 3... Maximum 2 review-fix loops before halting") plus a human/authority gate before merge.**
279
285
 
280
286
  See [.github/prompts/spell-full-cycle.prompt.md](../.github/prompts/spell-full-cycle.prompt.md) for the complete prompt.
281
287
 
@@ -299,7 +305,7 @@ spell-plan → [spell-enchant] → spell-scope → [spell-architect → spell-im
299
305
 
300
306
  Each epic then runs through its own Spell Loop cycle (architect → implement → test → review → ship).
301
307
 
302
- Before starting the next epic after a major output checkpoint (execution plan, architecture + stories, full test evidence, or ship recommendation), run `spell-commit-work` to preserve progress and checkpoint branch state.
308
+ **Before starting the next epic after a major output checkpoint (execution plan, architecture + stories, full test evidence, or ship recommendation), run `spell-commit-work` to preserve progress and checkpoint branch state. Enforcement: explicitly advisory prose (ARC-023) — `spell-full-cycle.prompt.md`'s Rules section frames this as a recommendation ("recommend running `spell-commit-work` before starting the next epic"), and nothing blocks epic-start if it is skipped.**
303
309
 
304
310
  See [.github/prompts/spell-scope.prompt.md](../.github/prompts/spell-scope.prompt.md) for the complete prompt.
305
311
 
@@ -323,7 +329,7 @@ When GitHub Copilot, Claude in VS Code, or any other interactive AI tool (not an
323
329
 
324
330
  ### Rule: Interactive tools cannot self-validate
325
331
 
326
- A tool that writes code **must not** also run `spell-review` on that same code. This is the same constraint that prevents Lafayette from marking his own stories as passing. Specifically:
332
+ A tool that writes code **must not also run `spell-review` on that same code. Enforcement: explicitly advisory prose (ARC-023) — no mechanism in this repo can detect that the same agent or session both wrote and reviewed a diff (no session-identity tracking exists); GitHub's own block on self-authored `CHANGES_REQUESTED` reviews operates on GitHub account identity, not agent/session identity, and this repo routinely reuses one account for both.** This is the same constraint that prevents Lafayette from marking his own stories as passing. Specifically:
327
333
 
328
334
  - Copilot sessions count as implementation (`spell-implement` equivalent)
329
335
  - `spell-test` must be run to produce test evidence before review
@@ -15,7 +15,7 @@ Paste this entire file into any AI client (Claude web, ChatGPT, etc.) to give it
15
15
 
16
16
  **Arcane** — Operational documentation for running AI-automated businesses under {LLC_NAME} (owner: {OPERATOR_NAME}). Uses an agent runtime to automate operations across one or more ventures.
17
17
 
18
- **This is a documentation-only repository.** No build commands, test suites, or deployable code. Do not add automation without being asked.
18
+ **This is a documentation-only repository.** No build commands, test suites, or deployable code. **Do not add automation without being asked. Enforcement: explicitly advisory prose (ARC-023) — no check blocks adding scripts, build tooling, or automation to this repo; compliance depends on agent judgment.**
19
19
 
20
20
  ## Environment
21
21
 
@@ -26,6 +26,8 @@ Paste this entire file into any AI client (Claude web, ChatGPT, etc.) to give it
26
26
 
27
27
  ## Non-Negotiable Rules
28
28
 
29
+ **Enforcement note (ARC-023):** these 9 rules are a condensed restatement of `.arcane/governance/universal-agent-rules.md` rules 1-6, 10, 11, and 15 — see that file for each rule's full text and its authoritative enforcement-mode classification; this summary does not duplicate those classifications here, to avoid a second, driftable copy of the same information.
30
+
29
31
  1. **Never access an encrypted or cross-OS volume you are not authorized to touch.** This rule stands as defense-in-depth regardless of encryption status.
30
32
  2. **No root commands** unless explicitly scoped and justified.
31
33
  3. **No secrets on the command line.** Use env vars and `read -s`.
@@ -49,20 +51,20 @@ Paste this entire file into any AI client (Claude web, ChatGPT, etc.) to give it
49
51
 
50
52
  ## Where Documents Live
51
53
 
52
- - **Framework-managed standards:** `.arcane/governance/`. Spells reference this single installed layer; do not create a duplicate root `governance/` tree.
54
+ - **Framework-managed standards:** `.arcane/governance/`. Spells reference this single installed layer; **do not create a duplicate root `governance/` tree. Enforcement: explicitly advisory prose (ARC-023) — no check scans a repo for a duplicate root-level `governance/` directory.**
53
55
  - **Project-owned orientation and continuity:** `README.md`, `project.md`, `TODO.md`, `DECISIONS.md`, `ai-context/`, and `journal/`. Arcane creates missing files once and preserves existing content.
54
56
  - **Project/domain documents:** use explicit descriptive paths such as `docs/`, `security/`, `infrastructure/`, or a configured business root. These add project context alongside framework standards.
55
- - **Overrides are not yet supported:** editing a managed `.arcane/governance/` standard can be replaced by `arcane update`. Additive project documents are safe; overriding a shipped standard requires the open customization/override model.
57
+ - **Overrides are not yet supported:** editing a managed `.arcane/governance/` standard can be replaced by `arcane update`. Additive project documents are safe; **overriding a shipped standard requires the open customization/override model. Enforcement: explicitly advisory prose (ARC-023) — that model is still an open backlog item (not yet built), so nothing currently blocks a direct edit; `arcane update` will just overwrite it silently on the next run.**
56
58
 
57
59
  ## Research Reports
58
60
 
59
61
  Research findings (competitive analysis, technical spikes, feasibility studies — the output of the Research & Backlog Analyst role) live at `docs/research/<topic-slug>.md`, one file per report. No dedicated spell produces these: `spell-document` already proposes a target path from project structure and matches its destination directory's existing conventions — point it at `docs/research/` for investigative content, the same way it already proposes `docs/` or `.arcane/governance/` for other document types. The directory is created on first real report, not pre-seeded on `spell init`.
60
62
 
61
- Use this repo's standard frontmatter (below) plus one addition: `sources` — a list of what was consulted. Every claim in the body traces back to one of these or is explicitly marked speculative. Structure the body summary-first: a short **Summary** with the key findings, then **Findings** with full detail and inline citations, then an optional **Follow-ups** for anything that should become a TODO item — route those via `spell-todo`, which cross-references the report path. Throughout, distinguish **verified facts**, **reasonable inferences**, and **speculation** explicitly; don't let an inference read as a checked fact.
63
+ Use this repo's standard frontmatter (below) plus one addition: `sources` — a list of what was consulted. **Every claim in the body traces back to one of these or is explicitly marked speculative. Enforcement: explicitly advisory prose (ARC-023) — no mechanism reads research-report prose to verify citation coverage or speculation marking.** Structure the body summary-first: a short **Summary** with the key findings, then **Findings** with full detail and inline citations, then an optional **Follow-ups** for anything that should become a TODO item — route those via `spell-todo`, which cross-references the report path. Throughout, distinguish **verified facts**, **reasonable inferences**, and **speculation** explicitly; don't let an inference read as a checked fact.
62
64
 
63
65
  ## Documentation Format
64
66
 
65
- Every doc uses YAML frontmatter: `title`, `audience` (human/ai/both), `last_updated`, `status` (draft/active/deprecated), `tags`. Use wiki-links (`[[filename]]`) for cross-references.
67
+ **Every doc uses YAML frontmatter: `title`, `audience` (human/ai/both), `last_updated`, `status` (draft/active/deprecated), `tags`. Enforcement: explicitly advisory prose (ARC-023) — no schema validates these frontmatter fields on arbitrary docs; `.arcane.json` manifest validation (`src/modules/manifest.ts`) covers only installation-config fields, not document frontmatter.** Use wiki-links (`[[filename]]`) for cross-references.
66
68
 
67
69
  ## Naming Tiers
68
70
 
@@ -25,6 +25,8 @@ Define what "the best version of an app" means across every dimension — UX, ac
25
25
  | **Dependency identification** | External services, APIs, and decisions the feature depends on are listed |
26
26
  | **Open questions documented** | Unresolved items are captured — not ignored or assumed |
27
27
 
28
+ **Enforcement: explicitly advisory prose (ARC-023) — `spell-enchant` scores this dimension and generates enhancement suggestions but never blocks (the user has final say per its Rules section); `spell-scope`'s Quality Quick-Check treats a Bronze score here as a recommendation, not a gate.**
29
+
28
30
  ### 2. User Experience (UX)
29
31
 
30
32
  | Criterion | Description |
@@ -38,6 +40,8 @@ Define what "the best version of an app" means across every dimension — UX, ac
38
40
  | **Consistency** | UI patterns, terminology, and behavior are consistent across features |
39
41
  | **Micro-interactions** | Transitions, hover effects, and subtle animations provide polish without slowing users down |
40
42
 
43
+ **Enforcement: explicitly advisory prose (ARC-023) — `spell-enchant` scores this dimension and generates enhancement suggestions but never blocks (the user has final say per its Rules section); `spell-scope`'s Quality Quick-Check treats a Bronze score here as a recommendation, not a gate.**
44
+
41
45
  ### 3. Accessibility (WCAG 2.1 AA Baseline)
42
46
 
43
47
  | Criterion | Description |
@@ -51,6 +55,8 @@ Define what "the best version of an app" means across every dimension — UX, ac
51
55
  | **Motion sensitivity** | Animations respect `prefers-reduced-motion`; no content-critical motion |
52
56
  | **Text resizing** | UI remains usable at 200% zoom |
53
57
 
58
+ **Enforcement: explicitly advisory prose (ARC-023) — `spell-enchant` scores this dimension and generates enhancement suggestions but never blocks (the user has final say per its Rules section); `spell-scope`'s Quality Quick-Check treats a Bronze score here as a recommendation, not a gate.**
59
+
54
60
  ### 4. Performance
55
61
 
56
62
  | Criterion | Description |
@@ -63,6 +69,8 @@ Define what "the best version of an app" means across every dimension — UX, ac
63
69
  | **Offline / degraded** | Define behavior when network is slow or unavailable (if applicable) |
64
70
  | **Concurrent users** | Target number documented; load testing plan defined for > 100 concurrent |
65
71
 
72
+ **Enforcement: explicitly advisory prose (ARC-023) — `spell-enchant` scores this dimension and generates enhancement suggestions but never blocks (the user has final say per its Rules section); `spell-scope`'s Quality Quick-Check treats a Bronze score here as a recommendation, not a gate.**
73
+
66
74
  ### 5. Security (Beyond OWASP Baseline)
67
75
 
68
76
  | Criterion | Description |
@@ -76,6 +84,8 @@ Define what "the best version of an app" means across every dimension — UX, ac
76
84
  | **Secret handling** | No hardcoded secrets; all credentials via environment variables or secret store |
77
85
  | **Dependency scanning** | Third-party packages audited for known vulnerabilities |
78
86
 
87
+ **Enforcement: explicitly advisory prose (ARC-023) — `spell-enchant` scores this dimension and generates enhancement suggestions but never blocks (the user has final say per its Rules section); `spell-scope`'s Quality Quick-Check treats a Bronze score here as a recommendation, not a gate.**
88
+
79
89
  ### 6. Responsive Design
80
90
 
81
91
  | Criterion | Description |
@@ -85,6 +95,8 @@ Define what "the best version of an app" means across every dimension — UX, ac
85
95
  | **Layout adaptation** | Content reflows appropriately — no horizontal scrolling on mobile |
86
96
  | **Navigation adaptation** | Desktop nav collapses to mobile pattern (hamburger, bottom nav, etc.) |
87
97
 
98
+ **Enforcement: explicitly advisory prose (ARC-023) — `spell-enchant` scores this dimension and generates enhancement suggestions but never blocks (the user has final say per its Rules section); `spell-scope`'s Quality Quick-Check treats a Bronze score here as a recommendation, not a gate.**
99
+
88
100
  ### 7. Competitive Differentiation
89
101
 
90
102
  | Criterion | Description |
@@ -94,6 +106,8 @@ Define what "the best version of an app" means across every dimension — UX, ac
94
106
  | **Table-stakes coverage** | Features that users expect as standard for this category are all present |
95
107
  | **Experience premium** | At least one UX element that makes users think "this is well-made" |
96
108
 
109
+ **Enforcement: explicitly advisory prose (ARC-023) — `spell-enchant` scores this dimension and generates enhancement suggestions but never blocks (the user has final say per its Rules section); `spell-scope`'s Quality Quick-Check treats a Bronze score here as a recommendation, not a gate.**
110
+
97
111
  ---
98
112
 
99
113
  ## Quality Profiles
@@ -160,7 +174,7 @@ If the user does not specify a profile, **Public MVP** is the default. Rationale
160
174
  | **Could-Add** | Current score already meets or exceeds target; enhancement is aspirational |
161
175
  | **Won't-Add** | Explicitly excluded regardless of profile |
162
176
 
163
- **Override:** Security and Accessibility gaps are always at least Should-Add regardless of profile. A Bronze Security score is always Must-Add.
177
+ **Override:** Security and Accessibility gaps are always at least Should-Add regardless of profile. A Bronze Security score is always Must-Add. **Enforcement: explicitly advisory prose (ARC-023) — `spell-enchant`'s own tier-assignment step and Rules section restate this override verbatim, so it is not purely aspirational text, but enforcement is still agent judgment during suggestion generation rather than a mechanical check; the user retains final approval over every addition, security and accessibility included.**
164
178
 
165
179
  ---
166
180
 
@@ -27,14 +27,18 @@ An RCA is **required** when any of these occur:
27
27
  | **Implicit decision detected** | A drift check or session applied a change that had no governing ADR |
28
28
  | **Integration failure from doc mismatch** | A playbook or script failed because docs disagreed with reality |
29
29
 
30
+ **Enforcement: explicitly advisory prose (ARC-023) — no script or drift check detects decision reversals, naming collisions, multi-file corrections, or the other trigger conditions above, or confirms an RCA was opened when one applies; recognizing a trigger and initiating an RCA depends on human or agent judgment.**
31
+
30
32
  An RCA is **recommended** (but optional) for:
31
33
  - Repeated confusion in sessions about the same topic
32
34
  - A TODO item that was deferred and caused downstream problems
33
35
  - Any incident where the operator says "how did we end up here?"
34
36
 
37
+ **Enforcement: explicitly advisory prose (ARC-023) — these are softer signals than the required triggers above; no script detects them, and opening an RCA here is left to human or agent judgment.**
38
+
35
39
  ## RCA Template
36
40
 
37
- Every RCA follows this structure. Artifacts are stored in `governance/rcas/` with the filename `RCA-NNN-short-slug.md` (sequential numbering, matching the related ADR when applicable).
41
+ **Every RCA follows this structure. Artifacts are stored in `governance/rcas/` with the filename `RCA-NNN-short-slug.md` (sequential numbering, matching the related ADR when applicable). Enforcement: explicitly advisory prose (ARC-023) — no script validates RCA filenames, sequential numbering, or template structure.**
38
42
 
39
43
  ```markdown
40
44
  ---
@@ -117,7 +121,7 @@ When a trigger condition is met:
117
121
 
118
122
  - **Corrective actions** fix the immediate problem (e.g., rename the files, revert the change)
119
123
  - **Preventive actions** change the process so the problem can't recur (e.g., add a checklist item, amend a template, update a prompt)
120
- - Every preventive action must reference the specific governance doc, template, or prompt it modifies
124
+ - **Every preventive action must reference the specific governance doc, template, or prompt it modifies. Enforcement: explicitly advisory prose (ARC-023) — no script verifies that a preventive action's Target Doc cites a real, specific governance path.**
121
125
 
122
126
  ### 4. Implement and Verify
123
127
 
@@ -126,8 +130,8 @@ When a trigger condition is met:
126
130
 
127
131
  ### 5. Close
128
132
 
129
- - Set RCA status to `active` (RCAs remain active as reference — they are not "resolved" and deleted)
130
- - Link the RCA from the related ADR using a "Deep dive" wiki-link
133
+ - **Set RCA status to `active` (RCAs remain active as reference — they are not "resolved" and deleted). Enforcement: explicitly advisory prose (ARC-023) — no script checks RCA status fields or blocks deleting an RCA file.**
134
+ - **Link the RCA from the related ADR using a "Deep dive" wiki-link. Enforcement: explicitly advisory prose (ARC-023) — `check-distributed-adr-references.ts` validates ADR-ID references and cross-repo link hazards but does not check for a "Deep dive" backlink from the ADR.**
131
135
  - Record a note in the session journal
132
136
 
133
137
  ## Severity Levels
@@ -138,7 +142,7 @@ RCAs do not have formal severity levels. The trigger conditions above determine
138
142
 
139
143
  - In interactive sessions: the human operator and AI agent collaborate on the RCA
140
144
  - For autonomous agent work: the agent flags the trigger condition and drafts the RCA for human review
141
- - RCAs are never auto-committed — they require human approval (same rule as all interactive commits per [[governance/git-conventions|Git Conventions]])
145
+ - **RCAs are never auto-committed — they require human approval (same rule as all interactive commits per [[governance/git-conventions|Git Conventions]]). Enforcement: structured spell gate (ARC-023) — this restates universal-agent-rules.md rule 10 ("Never auto-commit during interactive sessions"), enforced by `spell-commit-work`'s Step 8, which computes an approval fingerprint over the staged diff and message and halts until an authenticated operator response is tied to it before `git commit` runs.**
142
146
 
143
147
  ## Artifact Location
144
148
 
@@ -153,5 +157,5 @@ governance/
153
157
 
154
158
  ## Maintenance
155
159
 
156
- - Review RCA preventive actions quarterly during `spell-check-drift` runs
157
- - If a preventive action proves ineffective (same class of problem recurs), update the RCA with a "Recurrence" section and strengthen the preventive action
160
+ - **Review RCA preventive actions quarterly during `spell-check-drift` runs. Enforcement: explicitly advisory prose (ARC-023) — `spell-check-drift` has no RCA-specific detector; this cross-reference depends on the operator or agent remembering to do the review by hand.**
161
+ - **If a preventive action proves ineffective (same class of problem recurs), update the RCA with a "Recurrence" section and strengthen the preventive action. Enforcement: explicitly advisory prose (ARC-023) — no script detects recurrence of the same class of problem; recognizing it depends on human or agent judgment.**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arcane-cli",
3
- "version": "0.29.3",
3
+ "version": "0.29.5",
4
4
  "description": "Arcane framework CLI — scaffold and manage governance files in consuming repositories",
5
5
  "keywords": [
6
6
  "arcane",