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.
- package/dist/assets/.arcane/governance/agent-policies.md +42 -30
- package/dist/assets/.arcane/governance/decision-documentation-standard.md +14 -6
- package/dist/assets/.arcane/governance/development-methodology.md +10 -4
- package/dist/assets/.arcane/governance/portable-bootstrap.md +7 -5
- package/dist/assets/.arcane/governance/product-excellence-standards.md +15 -1
- package/dist/assets/.arcane/governance/rca-process-standard.md +11 -7
- package/package.json +1 -1
|
@@ -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
|
|
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.**
|