arcane-cli 0.29.1 → 0.29.3
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-approved-paths.md +10 -10
- package/dist/assets/.arcane/governance/agent-work-queue-model.md +2 -0
- package/dist/assets/.arcane/governance/authentication-strategy.md +13 -0
- package/dist/assets/.arcane/governance/cicd-standards.md +16 -16
- package/dist/assets/.arcane/governance/compliance-standards.md +12 -28
- package/dist/assets/.arcane/governance/external-verification-standards.md +6 -6
- package/dist/assets/.arcane/governance/hardening-checklist.md +2 -0
- package/dist/assets/.arcane/governance/mobile-release-standards.md +14 -30
- package/dist/assets/.arcane/governance/naming-conventions.md +5 -4
- package/dist/assets/.arcane/governance/new-business-setup.md +12 -0
- package/dist/assets/.arcane/governance/poc-management-pattern.md +7 -7
- package/dist/assets/.arcane/governance/records-conventions.md +10 -10
- package/dist/assets/.arcane/governance/spell-authoring-standards.md +44 -20
- package/dist/assets/.arcane/governance/testing-standards.md +15 -7
- package/dist/assets/.arcane/governance/threat-model.md +6 -6
- package/dist/assets/.arcane/governance/universal-agent-rules.md +24 -24
- package/dist/assets/.arcane/governance/web-discoverability-standards.md +16 -16
- package/package.json +1 -1
|
@@ -38,6 +38,8 @@ Have the following ready:
|
|
|
38
38
|
|
|
39
39
|
## Phase 1 — Project & Repo Setup
|
|
40
40
|
|
|
41
|
+
**Every step in this phase is performed by hand in your version-control host's UI. Enforcement: explicitly advisory prose (ARC-023) — project, repo, and template creation happen entirely on the external VCS host, which no script or CI check in this repo observes or verifies.**
|
|
42
|
+
|
|
41
43
|
### Step 1.1 — Create the Project
|
|
42
44
|
|
|
43
45
|
1. Open your version-control host's project organization
|
|
@@ -82,6 +84,8 @@ In your docs/ops repo, copy `ventures/_template/` to `ventures/{venture}/` as a
|
|
|
82
84
|
|
|
83
85
|
## Phase 2 — Infrastructure & Security
|
|
84
86
|
|
|
87
|
+
**The security checklist and docs-repo clone in this phase are unverified operator actions. Enforcement: explicitly advisory prose (ARC-023) — no script or CI check in this repo confirms these steps were completed or completed correctly.**
|
|
88
|
+
|
|
85
89
|
### Step 2.1 — Confirm Security Baseline
|
|
86
90
|
|
|
87
91
|
Before running the agent runtime for any new business, verify:
|
|
@@ -101,6 +105,8 @@ git clone <docs-repo-url> ~/code/{repo}
|
|
|
101
105
|
|
|
102
106
|
## Phase 3 — Agent Runtime Configuration
|
|
103
107
|
|
|
108
|
+
**Steps 3.1, 3.2, and 3.4 (runtime install, configuration, and the dry-run test) are manual operator actions. Enforcement: explicitly advisory prose (ARC-023) — no script or CI check in this repo verifies the agent runtime was installed, configured, or dry-run tested before live use.**
|
|
109
|
+
|
|
104
110
|
### Step 3.1 — Install the Agent Runtime (if not already installed)
|
|
105
111
|
|
|
106
112
|
See [[agents/installation|Runtime Installation]].
|
|
@@ -113,6 +119,8 @@ See [[agents/installation|Runtime Installation]].
|
|
|
113
119
|
|
|
114
120
|
### Step 3.3 — Agent Git Identity Setup
|
|
115
121
|
|
|
122
|
+
**Registering an agent's persona, Git identity, and `.mailmap` entry, and running the verify command below, are self-administered. Enforcement: explicitly advisory prose (ARC-023) — no script or CI check validates `.mailmap` entries or roster registration; the verify command is a manual smoke test, distinct from `spell-commit-work`'s Step 8 gate, which governs the commit action itself, not agent registration.**
|
|
123
|
+
|
|
116
124
|
Every agent that will produce commits for this business must have a registered Git identity **before making its first commit**. See [[git-conventions#agent-attribution-model|Git Conventions — Agent Attribution]].
|
|
117
125
|
|
|
118
126
|
For each agent assigned to this business:
|
|
@@ -141,6 +149,8 @@ Run the agent runtime in dry-run / observation mode first. Do not let it execute
|
|
|
141
149
|
|
|
142
150
|
## Phase 4 — Legal Baseline
|
|
143
151
|
|
|
152
|
+
**Every step in this phase happens outside Arcane — entity structuring, tax registration, and ToS review. Enforcement: explicitly advisory prose (ARC-023) — these are legal and tax determinations on external systems that no script or CI check in this repo can observe or verify.**
|
|
153
|
+
|
|
144
154
|
### Step 4.1 — Business Entity
|
|
145
155
|
|
|
146
156
|
- Confirm operations run under {LLC_NAME}
|
|
@@ -161,6 +171,8 @@ Run the agent runtime in dry-run / observation mode first. Do not let it execute
|
|
|
161
171
|
|
|
162
172
|
## Phase 5 — First Launch Checklist
|
|
163
173
|
|
|
174
|
+
**This launch checklist is self-attested against external systems (the selling platform, the agent runtime's monitoring). Enforcement: explicitly advisory prose (ARC-023) — no script or CI check in this repo confirms any item below; the operator marks each complete by judgment.**
|
|
175
|
+
|
|
164
176
|
- [ ] At least 10 product listings live (or equivalent for non-e-commerce)
|
|
165
177
|
- [ ] Order/fulfillment workflow tested end-to-end
|
|
166
178
|
- [ ] The agent runtime running and monitored (see `agents/monitoring.md`)
|
|
@@ -34,7 +34,7 @@ ventures/ Prototypes features/ business repo
|
|
|
34
34
|
|
|
35
35
|
#### Concept (`ventures/<name>/`)
|
|
36
36
|
|
|
37
|
-
The permanent record of every idea — good, bad, or deferred. Ideas are **never deleted**. Frontmatter `status` tracks where each idea is in its lifecycle.
|
|
37
|
+
The permanent record of every idea — good, bad, or deferred. Ideas are **never deleted**. **Enforcement: explicitly advisory prose (ARC-023) — no code in this repo checks for or blocks deletion of files under `ventures/<name>/`; this depends on human/agent discipline.** Frontmatter `status` tracks where each idea is in its lifecycle.
|
|
38
38
|
|
|
39
39
|
**Required files:**
|
|
40
40
|
- `overview.md` — What is it? Why does it matter? Who is it for? (Minimum viable concept doc.)
|
|
@@ -45,7 +45,7 @@ The permanent record of every idea — good, bad, or deferred. Ideas are **never
|
|
|
45
45
|
- `stories.json` — If architecture produced story breakdown
|
|
46
46
|
- Screenshots in `assets/screenshots/YYYY-MM-DD/` (linked from docs)
|
|
47
47
|
|
|
48
|
-
**What does NOT belong here:** Code files (`.js`, `.ts`, `.py`, `.html`, `.css`, etc.). The docs repo is a documentation-only repository.
|
|
48
|
+
**What does NOT belong here:** Code files (`.js`, `.ts`, `.py`, `.html`, `.css`, etc.). The docs repo is a documentation-only repository. **Enforcement: explicitly advisory prose (ARC-023) — [[governance/agent-policies|Agent Policies]]'s repo-routing rule states the general version of this restriction; this file restates it for the docs repo specifically rather than asserting independent enforcement, and no lint/CI check here rejects code file extensions.**
|
|
49
49
|
|
|
50
50
|
#### Prototype (Prototypes repo)
|
|
51
51
|
|
|
@@ -57,7 +57,7 @@ Small, self-contained, throwaway code that demonstrates a concept. Prototypes ar
|
|
|
57
57
|
|
|
58
58
|
**Folder convention:** `<name>/` at repo root (e.g., `magic-prompt/`, `self-healing-poc/`)
|
|
59
59
|
|
|
60
|
-
**No governance overhead:** No PRs required, no work items, no branch policies. This is a sandbox. Commit directly to main.
|
|
60
|
+
**No governance overhead:** No PRs required, no work items, no branch policies. This is a sandbox. Commit directly to main. **Enforcement: explicitly advisory prose (ARC-023) — this is a deliberate low-ceremony policy choice, not a constraint with a pass/fail check to enforce.**
|
|
61
61
|
|
|
62
62
|
#### Feature (`features/{id}-{slug}/`)
|
|
63
63
|
|
|
@@ -116,7 +116,7 @@ Ideas evolve. Track iterations without complex versioning:
|
|
|
116
116
|
|
|
117
117
|
2. **Screenshots:** Save evidence of each meaningful state to `assets/screenshots/YYYY-MM-DD/` per [[assets/screenshots/README|screenshot conventions]]. Link from the changelog.
|
|
118
118
|
|
|
119
|
-
3. **Git history is the version control.** Don't create `v1/`, `v2/` folders. The idea folder is a living document — git tracks every change.
|
|
119
|
+
3. **Git history is the version control.** Don't create `v1/`, `v2/` folders. The idea folder is a living document — git tracks every change. **Enforcement: explicitly advisory prose (ARC-023) — no check inspects idea folders for `v1/`/`v2/`-style version directories; this depends on human/agent discipline.**
|
|
120
120
|
|
|
121
121
|
---
|
|
122
122
|
|
|
@@ -128,10 +128,10 @@ No formal gate. If someone (human or agent) wants to see the idea running, gener
|
|
|
128
128
|
|
|
129
129
|
### Concept/Prototype → Feature
|
|
130
130
|
|
|
131
|
-
All of these must be true:
|
|
131
|
+
All of these must be true: **Enforcement: explicitly advisory prose (ARC-023) — no spell checks these four criteria before a `status: promoted` transition; `spell-plan` satisfies only the fourth criterion (a PRD exists) and does not gate the others, and `spell-manifest`'s promotion flow uses a separate idea-book status marker, not this file's ventures frontmatter.**
|
|
132
132
|
- [ ] A tracker work item exists (User Story or Feature)
|
|
133
133
|
- [ ] A business track owns it (maps to a `ventures/<name>/` folder or a project)
|
|
134
|
-
- [ ] A target code repo exists (or needs to be created; repo creation is human-only)
|
|
134
|
+
- [ ] A target code repo exists (or needs to be created; repo creation is human-only) **Enforcement: explicitly advisory prose (ARC-023) — [[governance/agent-policies|Agent Policies]] is the canonical statement of this rule (Spectator-level, human-only); this restates it rather than asserting independent enforcement, and no code under `src/commands/` implements repo creation for a check to gate in the first place.**
|
|
135
135
|
- [ ] The idea has at least a PRD (`spell-plan` output)
|
|
136
136
|
|
|
137
137
|
When promoted: update the idea's frontmatter to `status: promoted` with `promoted_to` metadata. The idea folder stays in arcane forever as the historical record.
|
|
@@ -166,7 +166,7 @@ In the vibe coding era, a well-written spec can regenerate a prototype in minute
|
|
|
166
166
|
|---|---|
|
|
167
167
|
| [[governance/development-methodology\|Spell Loop]] | Ideas enter the loop at `spell-plan`. Concept stage is pre-loop exploration. |
|
|
168
168
|
| Repo routing | Code → code repos. Docs → the docs repo. Prototypes → Prototypes repo. |
|
|
169
|
-
| Repo governance | Repo creation is human-only. Prototypes repo is a single shared repo, not per-POC. |
|
|
169
|
+
| Repo governance | Repo creation is human-only. **Enforcement: explicitly advisory prose (ARC-023) — [[governance/agent-policies\|Agent Policies]] is the canonical statement of this rule; this table restates it rather than asserting independent enforcement.** Prototypes repo is a single shared repo, not per-POC. |
|
|
170
170
|
| Feature folders | Feature planning artifacts live in the target code repo under `features/`. |
|
|
171
171
|
| `ventures/<name>/` | Business-level docs for shipped products. Ideas that graduate here are fully promoted. |
|
|
172
172
|
|
|
@@ -64,16 +64,16 @@ superseded_by: path/to/replacement.md
|
|
|
64
64
|
|
|
65
65
|
Rules:
|
|
66
66
|
|
|
67
|
-
-
|
|
67
|
+
- **`superseded_by` is required. Enforcement: explicitly advisory prose (ARC-023) — no script checks a superseded document's frontmatter for this field.** A tombstone that does not say what replaced it is
|
|
68
68
|
worse than no tombstone: it tells the reader to stop without telling them
|
|
69
69
|
where to go.
|
|
70
|
-
- If a document was superseded by *several* documents, list all of them.
|
|
71
|
-
- If a document was retired without replacement, say so explicitly
|
|
72
|
-
(`superseded_by: none — <reason>`), rather than leaving the field off.
|
|
73
|
-
- Do not delete the original content. The tombstone is a header, not a
|
|
70
|
+
- **If a document was superseded by *several* documents, list all of them. Enforcement: explicitly advisory prose (ARC-023) — no script cross-checks the list against the document's actual replacements.**
|
|
71
|
+
- **If a document was retired without replacement, say so explicitly
|
|
72
|
+
(`superseded_by: none — <reason>`), rather than leaving the field off. Enforcement: explicitly advisory prose (ARC-023) — no script distinguishes this explicit form from an omitted field.**
|
|
73
|
+
- **Do not delete the original content. Enforcement: explicitly advisory prose (ARC-023) — no diff check runs when a tombstone is added, so nothing confirms the body underneath is untouched.** The tombstone is a header, not a
|
|
74
74
|
replacement for the body.
|
|
75
|
-
- **Add the reverse link on the replacement
|
|
76
|
-
discoverable from either end. A reader who finds only the current document
|
|
75
|
+
- **Add the reverse link on the replacement, so the relationship is
|
|
76
|
+
discoverable from either end. Enforcement: explicitly advisory prose (ARC-023) — no script checks that a `supersedes` field exists on the named replacement.** A reader who finds only the current document
|
|
77
77
|
should still be able to see what it replaced:
|
|
78
78
|
|
|
79
79
|
```yaml
|
|
@@ -91,7 +91,7 @@ Supersession and deletion are different decisions and must not be conflated.
|
|
|
91
91
|
Marking a document superseded is a routine editorial act. Deleting it is not.
|
|
92
92
|
|
|
93
93
|
**Deletion is prohibited without an explicit, recorded decision when any of the
|
|
94
|
-
following is true
|
|
94
|
+
following is true. Enforcement: explicitly advisory prose (ARC-023) — none of the four conditions below is checked by a script; `content_sensitivity`'s value is schema-validated, but nothing gates deletion on it.**
|
|
95
95
|
|
|
96
96
|
- The document records a decision, agreement, or obligation that other parties
|
|
97
97
|
relied on.
|
|
@@ -101,8 +101,8 @@ following is true:**
|
|
|
101
101
|
- The repository is marked `content_sensitivity: sensitive` and the document's
|
|
102
102
|
own existence is part of the record.
|
|
103
103
|
|
|
104
|
-
When deletion *is* approved, record it: what was deleted, when, on whose
|
|
105
|
-
authority, and why. A deletion nobody can account for later is indistinguishable
|
|
104
|
+
**When deletion *is* approved, record it: what was deleted, when, on whose
|
|
105
|
+
authority, and why. Enforcement: explicitly advisory prose (ARC-023) — no script checks that a deletion record exists after the fact.** A deletion nobody can account for later is indistinguishable
|
|
106
106
|
from data loss.
|
|
107
107
|
|
|
108
108
|
**Arcane does not ship a retention schedule.** Retention periods are
|
|
@@ -21,22 +21,26 @@ wiki-link** (corrected 2026-08-31, BC-06) — this file ships to consumer repos,
|
|
|
21
21
|
`DECISIONS.md` does not: `src/assets/DECISIONS.md` (what consumers actually receive via
|
|
22
22
|
`spell init`) is an empty starter template for the *consumer's own* decisions, so a
|
|
23
23
|
same-repo wiki-link to a specific ARC id would resolve to the wrong document once
|
|
24
|
-
installed, not simply fail to resolve.
|
|
24
|
+
installed, not simply fail to resolve. **Enforcement: explicitly advisory prose (ARC-023)
|
|
25
|
+
— depends on editorial judgment; no mechanical check verifies citation style in this file.**
|
|
25
26
|
|
|
26
27
|
## The Spell Quality Rubric
|
|
27
28
|
|
|
28
29
|
Eight dimensions. Each is scored **Bronze (1) / Silver (2) / Gold (3)**. A spell's **overall score is
|
|
29
30
|
its weakest dimension** (same weakest-link rule as the PRD scorecard) — a Gold workflow with a Bronze
|
|
30
|
-
safety rail is a Bronze spell.
|
|
31
|
+
safety rail is a Bronze spell. **Enforcement: explicitly advisory prose (ARC-023) — self-graded during
|
|
32
|
+
spell audit; no coded scorer computes or verifies this aggregation.**
|
|
31
33
|
|
|
32
34
|
Two dimensions are **hard gates**: **D2 Distributability** and **D7 Safety** must be **≥ Silver** for a
|
|
33
|
-
spell to ship, regardless of overall target.
|
|
35
|
+
spell to ship, regardless of overall target. **Enforcement: explicitly advisory prose (ARC-023) — self-graded
|
|
36
|
+
during spell audit; only D2's Bronze floor (literal org-name detection) is mechanically checked today, so
|
|
37
|
+
this broader ≥ Silver gate is not fully verified by any coded scorer or workflow gate.**
|
|
34
38
|
|
|
35
39
|
### D1 — Front-matter & invocation contract
|
|
36
40
|
|
|
37
41
|
| Tier | Bar |
|
|
38
42
|
| --- | --- |
|
|
39
|
-
| Bronze | Front-matter complete: `name`, `description`, `argument-hint`, `agent`. |
|
|
43
|
+
| Bronze | Front-matter complete: `name`, `description`, `argument-hint`, `agent`. Enforcement: explicitly advisory prose (ARC-023) — self-graded during spell audit; a CI check (`npm run check:spell-catalog`, running `scripts/spell-catalog.ts`) incidentally validates only the `name`/`description` fields as a side effect of catalog generation, not the full front-matter set this bar requires. |
|
|
40
44
|
| Silver | + an accurate **Executive Summary** stating purpose, when to use it, and what it produces. |
|
|
41
45
|
| Gold | + explicitly disambiguates itself from sibling spells a user might confuse it with. |
|
|
42
46
|
|
|
@@ -44,17 +48,17 @@ spell to ship, regardless of overall target.
|
|
|
44
48
|
|
|
45
49
|
| Tier | Bar |
|
|
46
50
|
| --- | --- |
|
|
47
|
-
| Bronze | No real organization, person, venture, or machine names. Org-specific values use `{UPPER_SNAKE}` placeholders. |
|
|
48
|
-
| Silver | + every placeholder has an inline resolution note: *"resolve from `.arcane.json` / frontmatter; ask if unset."* |
|
|
51
|
+
| Bronze | No real organization, person, venture, or machine names. Org-specific values use `{UPPER_SNAKE}` placeholders. Enforcement: executable check (ARC-023) — `scripts/org-token-lint.ts` scans `.github/prompts/*.prompt.md` against the `ARCANE_ORG_TOKENS` denylist and runs automatically as part of `npm run build`, failing the build on a match; `spell ward --gate` (`src/commands/ward.ts`) runs the same denylist-scanning engine standalone but is not currently wired into CI as its own gate. |
|
|
52
|
+
| Silver | + every placeholder has an inline resolution note: *"resolve from `.arcane.json` / frontmatter; ask if unset."* Enforcement: explicitly advisory prose (ARC-023) — part of the D2 hard gate by name, but this specific bar is self-graded; no check verifies a placeholder carries an inline resolution note. |
|
|
49
53
|
| Gold | + no hard assumption of a specific tracker, agent roster, or directory layout — the spell works in a vanilla consuming repo with no Arcane context files present. |
|
|
50
54
|
|
|
51
|
-
> A **Bronze on D2 is OSS-blocking** and must be fixed before release. See **Distributability conventions** below.
|
|
55
|
+
> A **Bronze on D2 is OSS-blocking** and must be fixed before release. **Enforcement: executable check (ARC-023) — same mechanism as the D2 Bronze bar above: the `org-token-lint` build gate fails `npm run build` automatically; `spell ward --gate` provides the same scan standalone but is not yet wired into CI.** See **Distributability conventions** below.
|
|
52
56
|
|
|
53
57
|
### D3 — Context-file robustness
|
|
54
58
|
|
|
55
59
|
| Tier | Bar |
|
|
56
60
|
| --- | --- |
|
|
57
|
-
| Bronze | Context files the spell reads are listed. |
|
|
61
|
+
| Bronze | Context files the spell reads are listed. Enforcement: explicitly advisory prose (ARC-023) — self-graded during spell audit; no coded scorer verifies this dimension. |
|
|
58
62
|
| Silver | + each optional file has a fallback: *"if missing, proceed with X."* |
|
|
59
63
|
| Gold | + the spell degrades gracefully end-to-end when **no** context files exist. |
|
|
60
64
|
|
|
@@ -62,7 +66,7 @@ spell to ship, regardless of overall target.
|
|
|
62
66
|
|
|
63
67
|
| Tier | Bar |
|
|
64
68
|
| --- | --- |
|
|
65
|
-
| Bronze | The happy path is fully specified with clear, ordered steps. |
|
|
69
|
+
| Bronze | The happy path is fully specified with clear, ordered steps. Enforcement: explicitly advisory prose (ARC-023) — self-graded during spell audit; no coded scorer verifies this dimension. |
|
|
66
70
|
| Silver | + edge and failure cases handled: missing/invalid input, a required tool unavailable, an empty result. |
|
|
67
71
|
| Gold | + re-run safety (idempotency) and recovery from partial failure. |
|
|
68
72
|
|
|
@@ -70,7 +74,7 @@ spell to ship, regardless of overall target.
|
|
|
70
74
|
|
|
71
75
|
| Tier | Bar |
|
|
72
76
|
| --- | --- |
|
|
73
|
-
| Bronze | The output is named. |
|
|
77
|
+
| Bronze | The output is named. Enforcement: explicitly advisory prose (ARC-023) — self-graded during spell audit; no coded scorer verifies this dimension. |
|
|
74
78
|
| Silver | + the output's structure or a template is given. |
|
|
75
79
|
| Gold | + a user-verifiable **acceptance checklist** — how to know the spell did its job. |
|
|
76
80
|
|
|
@@ -78,7 +82,7 @@ spell to ship, regardless of overall target.
|
|
|
78
82
|
|
|
79
83
|
| Tier | Bar |
|
|
80
84
|
| --- | --- |
|
|
81
|
-
| Bronze | Related spells are mentioned. |
|
|
85
|
+
| Bronze | Related spells are mentioned. Enforcement: explicitly advisory prose (ARC-023) — self-graded during spell audit; no coded scorer verifies this dimension. |
|
|
82
86
|
| Silver | + correct hand-off direction (consumes-from X, feeds-into Y). |
|
|
83
87
|
| Gold | + bidirectional and consistent with the flow in [[development-methodology]]. |
|
|
84
88
|
|
|
@@ -86,25 +90,29 @@ spell to ship, regardless of overall target.
|
|
|
86
90
|
|
|
87
91
|
| Tier | Bar |
|
|
88
92
|
| --- | --- |
|
|
89
|
-
| Bronze | A `Rules` section exists. |
|
|
90
|
-
| Silver | + required arguments are validated or requested; the spell refuses to proceed on clearly invalid input. |
|
|
93
|
+
| Bronze | A `Rules` section exists. Enforcement: explicitly advisory prose (ARC-023) — part of the D7 hard gate by name, but this specific bar is self-graded; no check verifies a spell prompt contains a `Rules` section. |
|
|
94
|
+
| Silver | + required arguments are validated or requested; the spell refuses to proceed on clearly invalid input. Enforcement: explicitly advisory prose (ARC-023) — part of the D7 hard gate by name, but this specific bar is self-graded; no check verifies input-validation behavior across spell prompts. |
|
|
91
95
|
| Gold | + every destructive or outward-facing action (delete, force-push, publish, external post) is explicitly gated behind confirmation. |
|
|
92
96
|
|
|
93
97
|
### D8 — Conciseness & non-duplication
|
|
94
98
|
|
|
95
99
|
| Tier | Bar |
|
|
96
100
|
| --- | --- |
|
|
97
|
-
| Bronze | No dead or contradictory text. |
|
|
101
|
+
| Bronze | No dead or contradictory text. Enforcement: explicitly advisory prose (ARC-023) — self-graded during spell audit; no coded scorer verifies this dimension. |
|
|
98
102
|
| Silver | + shared logic is **referenced**, not copy-pasted (e.g. point to a governance doc rather than inlining it). |
|
|
99
103
|
| Gold | + tight and single-responsibility — the spell does one job well. |
|
|
100
104
|
|
|
101
105
|
## Scoring & target
|
|
102
106
|
|
|
103
|
-
- **Overall = lowest dimension score.**
|
|
104
|
-
|
|
107
|
+
- **Overall = lowest dimension score.** Enforcement: explicitly advisory prose (ARC-023) — self-graded
|
|
108
|
+
during spell audit; no coded scorer computes or verifies this aggregation.
|
|
109
|
+
- **Hard gates:** D2 and D7 must each be **≥ Silver**. Enforcement: explicitly advisory prose (ARC-023) —
|
|
110
|
+
self-graded during spell audit; only D2's Bronze floor is mechanically checked today, so this broader
|
|
111
|
+
gate is not fully verified by any coded scorer or workflow gate.
|
|
105
112
|
- **Authoring target:** every shipped spell reaches **Silver overall, Gold on D2.** Gold-everywhere is
|
|
106
113
|
aspirational, not required — chasing it on a mature spell usually adds bloat, not value. A short spell
|
|
107
|
-
that meets every gate at Silver is **done**; do not pad it.
|
|
114
|
+
that meets every gate at Silver is **done**; do not pad it. Enforcement: explicitly advisory prose
|
|
115
|
+
(ARC-023) — self-graded during spell audit; no coded scorer verifies overall attainment.
|
|
108
116
|
|
|
109
117
|
## Distributability conventions (D2)
|
|
110
118
|
|
|
@@ -112,20 +120,33 @@ Arcane spells ship to other repositories and, eventually, open source. Keep them
|
|
|
112
120
|
|
|
113
121
|
- **Never hard-code** an org name, person, venture, product, or machine name. Use a documented
|
|
114
122
|
`{UPPER_SNAKE}` placeholder: `{ADO_ORG}`, `{ADO_PROJECT}`, `{BUSINESS_NAME}`, `{OPERATOR_NAME}`.
|
|
123
|
+
Enforcement: executable check (ARC-023) — same mechanism as D2 Bronze above: the `org-token-lint`
|
|
124
|
+
build gate (`scripts/org-token-lint.ts`) fails `npm run build` automatically; `spell ward --gate`
|
|
125
|
+
(`src/commands/ward.ts`) runs the same scan standalone but is not yet wired into CI.
|
|
115
126
|
- **Resolution rule:** a placeholder resolves from `.arcane.json` or the feature/PRD frontmatter; if it
|
|
116
|
-
is unset, the spell **asks** rather than assuming a default.
|
|
127
|
+
is unset, the spell **asks** rather than assuming a default. Enforcement: explicitly advisory prose
|
|
128
|
+
(ARC-023) — depends on each spell's own runtime judgment; no check exercises a spell's unset-placeholder
|
|
129
|
+
behavior.
|
|
117
130
|
- **Roster by reference, not by name:** when a spell needs the concept of an agent role, reference
|
|
118
131
|
[[agent-policies]] / [[naming-conventions]] as context (with a fallback) instead of naming personas
|
|
119
|
-
inline.
|
|
132
|
+
inline. Enforcement: explicitly advisory prose (ARC-023) — self-graded during spell audit; no coded
|
|
133
|
+
scorer verifies this convention.
|
|
120
134
|
- **Trackers are optional:** never assume Azure DevOps (or any single provider). Respect
|
|
121
135
|
`tracking_mode` (internal/external) and detect the provider; the shared rules live in
|
|
122
|
-
[[development-methodology]] — point to them rather than re-inlining ADO logic.
|
|
136
|
+
[[development-methodology]] — point to them rather than re-inlining ADO logic. Enforcement: explicitly
|
|
137
|
+
advisory prose (ARC-023) — self-graded during spell audit; no lint scans spell prompts for a
|
|
138
|
+
hard-coded tracker assumption.
|
|
123
139
|
|
|
124
140
|
> **Maintainer-internal exemption.** A few spells operate *on the Arcane framework itself*
|
|
125
141
|
> (e.g. `spell-bump`, `spell-arcane-version`) and legitimately reference repo internals like
|
|
126
142
|
> `registry.ts`, `src/assets/`, or the `arcane-cli` package name. Such
|
|
127
143
|
> **framework-self-referential** references do **not** count as a D2 violation. The exemption covers
|
|
128
144
|
> only the framework's own internals — never a consuming org's venture, person, machine, or tracker names.
|
|
145
|
+
> **Enforcement: explicitly advisory prose (ARC-023) — depends on an auditor's judgment about what
|
|
146
|
+
> counts as framework-self-reference; `org-token-lint`'s denylist is derived only from package
|
|
147
|
+
> author/repository identity plus the operator-supplied `ARCANE_ORG_TOKENS` list, so these terms were
|
|
148
|
+
> never candidates for that scan regardless of this clause, and no check specifically verifies the
|
|
149
|
+
> carve-out itself.**
|
|
129
150
|
|
|
130
151
|
## How to audit a spell
|
|
131
152
|
|
|
@@ -133,3 +154,6 @@ For each dimension, score Bronze/Silver/Gold with one line of evidence. Record t
|
|
|
133
154
|
score and flag any D2/D7 below Silver as **must-fix**. When elevating, prefer **additive** changes
|
|
134
155
|
(add a fallback, an edge case, an acceptance line, a cross-reference); preserve the spell's intent and
|
|
135
156
|
working prose, and treat any change to *behavior* (not just coverage) as requiring explicit sign-off.
|
|
157
|
+
**Enforcement: explicitly advisory prose (ARC-023) — this audit process, including the must-fix flag
|
|
158
|
+
and the sign-off convention, is self-graded during spell-enchant's review; no coded scorer or
|
|
159
|
+
workflow gate verifies it.**
|
|
@@ -12,10 +12,10 @@ Framework selection, coverage thresholds, and test evidence requirements across
|
|
|
12
12
|
|
|
13
13
|
## Executive Summary
|
|
14
14
|
|
|
15
|
-
- Every tech stack has a designated test framework — no ambiguity.
|
|
15
|
+
- Every tech stack has a designated test framework — no ambiguity. **Enforcement: explicitly advisory prose (ARC-023) — no script or CI step verifies that code for a given stack was tested with its designated framework; the mapping is a team convention enforced only by code review.**
|
|
16
16
|
- New code requires 80% unit test coverage; critical paths require 95%.
|
|
17
|
-
- Lince (QA Lead) must sign off on test evidence before any ticket moves to "Resolved."
|
|
18
|
-
- Test evidence is required in every PR: results, coverage report, known limitations.
|
|
17
|
+
- Lince (QA Lead) must sign off on test evidence before any ticket moves to "Resolved." **Enforcement: explicitly advisory prose (ARC-023) — a tracker-workflow convention Arcane's own tooling has no visibility into and cannot mechanically verify.**
|
|
18
|
+
- Test evidence is required in every PR: results, coverage report, known limitations. **Enforcement: explicitly advisory prose (ARC-023) — no CI step or PR template parses PR descriptions for these sections; `check:review-round` verifies review-approval state only, not test-evidence content.**
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
@@ -46,8 +46,8 @@ Framework selection, coverage thresholds, and test evidence requirements across
|
|
|
46
46
|
|
|
47
47
|
| Category | Minimum Coverage | Examples |
|
|
48
48
|
|----------|-----------------|----------|
|
|
49
|
-
| **Standard code** | 80% | Business logic, data access, UI components, API handlers |
|
|
50
|
-
| **Critical paths** | 95% | Authentication, payment processing, IoT firmware commands, calibration protocols, encryption/signing |
|
|
49
|
+
| **Standard code** | 80% | Business logic, data access, UI components, API handlers. Enforcement: executable check (ARC-023) — vitest.config.ts configures a global 80% lines/branches/functions/statements threshold under `coverage.thresholds`, but ci.yml's build-test Test step runs `npm test` (bare `vitest run`), not `npm run test:coverage`, so it is never evaluated in CI. |
|
|
50
|
+
| **Critical paths** | 95% | Authentication, payment processing, IoT firmware commands, calibration protocols, encryption/signing. Enforcement: executable check (ARC-023) — vitest.config.ts overrides this to 95% for src/modules/copier.ts, manifest.ts, merger.ts, registry.ts, and src/config/profiles.ts (manifest.ts's branches override is 90%, not 95%), but the same CI gap applies: `npm test` runs bare `vitest run`, not `npm run test:coverage`, so these overrides are never evaluated in CI. |
|
|
51
51
|
|
|
52
52
|
### What Counts as "Critical"
|
|
53
53
|
|
|
@@ -101,6 +101,8 @@ Every PR must include:
|
|
|
101
101
|
|
|
102
102
|
### Unit Tests (Required)
|
|
103
103
|
|
|
104
|
+
**Enforcement: executable check (ARC-023) — ci.yml's build-test job's Test step runs `npm test` (`vitest run`), which fails the job on any failing unit test; `.husky/pre-commit` runs only `lint` and `typecheck`, not tests, so the "every commit" portion of this rule is not locally enforced.**
|
|
105
|
+
|
|
104
106
|
- Test individual functions/methods in isolation
|
|
105
107
|
- Mock external dependencies (DB, API, hardware)
|
|
106
108
|
- Fast execution (< 1 second per test)
|
|
@@ -108,18 +110,24 @@ Every PR must include:
|
|
|
108
110
|
|
|
109
111
|
### Integration Tests (Recommended)
|
|
110
112
|
|
|
113
|
+
**Enforcement: explicitly advisory prose (ARC-023) — self-labeled Recommended rather than Required, and ci.yml runs a single `npm test` step with no distinct integration-test job or gate.**
|
|
114
|
+
|
|
111
115
|
- Test component interactions (API → DB, mobile → backend)
|
|
112
116
|
- Use real dependencies where practical (in-memory DB, test containers)
|
|
113
117
|
- Run in CI on PR creation and merge
|
|
114
118
|
|
|
115
119
|
### End-to-End Tests (For UI Stories)
|
|
116
120
|
|
|
121
|
+
**Enforcement: explicitly advisory prose (ARC-023) — no Playwright or other end-to-end job exists in ci.yml, and Arcane's own repository is a CLI tool with no UI for this rule to apply to.**
|
|
122
|
+
|
|
117
123
|
- Test complete user workflows
|
|
118
124
|
- Use browser automation (Playwright for web, Flutter integration_test for mobile)
|
|
119
125
|
- Run in CI on merge to main (not on every commit — too slow)
|
|
120
126
|
|
|
121
127
|
### Firmware Tests ({BUSINESS_NAME}-Specific)
|
|
122
128
|
|
|
129
|
+
**Enforcement: explicitly advisory prose (ARC-023) — Arcane's own repository has no firmware or hardware target; this is template guidance for consuming projects that Arcane's own tooling does not verify.**
|
|
130
|
+
|
|
123
131
|
- Host-based unit tests via PlatformIO Unity (no hardware required)
|
|
124
132
|
- Hardware-in-the-loop tests for calibration validation (requires physical device)
|
|
125
133
|
- BLE protocol tests via mock transport
|
|
@@ -130,14 +138,14 @@ Every PR must include:
|
|
|
130
138
|
|
|
131
139
|
Adapt the ticket lifecycle policy to your tracker:
|
|
132
140
|
|
|
133
|
-
The **Code Review → QA** transition now requires:
|
|
141
|
+
The **Code Review → QA** transition now requires: **Enforcement: explicitly advisory prose (ARC-023) — a tracker-workflow gate Arcane's own tooling cannot observe or enforce; items 1 and 2 below (tests passing, coverage thresholds) are independently verified by CI, but the transition itself is not.**
|
|
134
142
|
|
|
135
143
|
1. All unit tests pass (CI green)
|
|
136
144
|
2. Coverage meets thresholds (80% standard / 95% critical)
|
|
137
145
|
3. No HIGH-severity review findings unresolved
|
|
138
146
|
4. Lince signs off with test evidence linked to the work item
|
|
139
147
|
|
|
140
|
-
The **QA → Resolved** transition requires:
|
|
148
|
+
The **QA → Resolved** transition requires: **Enforcement: explicitly advisory prose (ARC-023) — a tracker-workflow gate Arcane's own tooling cannot observe or enforce, the same gap ARC-023 identifies for the Lince sign-off rule above.**
|
|
141
149
|
|
|
142
150
|
1. Integration tests pass (if applicable)
|
|
143
151
|
2. Manual verification for UI stories (screenshot or recording)
|
|
@@ -50,7 +50,7 @@ See also: [Hardening Checklist](hardening-checklist.md), [Authentication Strateg
|
|
|
50
50
|
| Supply chain (package installs) | **Mitigated** | Global package installs use a user-owned directory, not a system directory. No `sudo` during install. |
|
|
51
51
|
| Inter-machine communication | **Mitigated** | Encrypted mesh tunnel/VPN. No direct unencrypted LAN communication. |
|
|
52
52
|
| Token/credential exposure (at rest) | **Mitigated** | Token stored as an env var in a `.env` file. Config uses a secret reference, not plaintext. State directory is mode `700`. |
|
|
53
|
-
| Credential committed to version control | **Not mitigated** | Storage conventions are documented (secret references, `.gitignore` entries for `.env`/`*.pem`/`*.key`) but **no detection exists** — no scanner runs on the commit path, the push path, or in CI, and nothing verifies the conventions were followed. `spell-security-review`'s secrets step is an on-demand agent read, not a control. Treat every credential that reaches a commit as compromised and rotate it — history, existing clones, and remote backups all survive deleting the file (EF-35). |
|
|
53
|
+
| Credential committed to version control | **Not mitigated** | Storage conventions are documented (secret references, `.gitignore` entries for `.env`/`*.pem`/`*.key`) but **no detection exists** — no scanner runs on the commit path, the push path, or in CI, and nothing verifies the conventions were followed. `spell-security-review`'s secrets step is an on-demand agent read, not a control. **Treat every credential that reaches a commit as compromised and rotate it — history, existing clones, and remote backups all survive deleting the file (EF-35). Enforcement: explicitly advisory prose (ARC-023) — rotating a leaked credential happens at the third-party provider that issued it; no Arcane mechanism can perform or verify that a specific credential was actually rotated.** |
|
|
54
54
|
|
|
55
55
|
---
|
|
56
56
|
|
|
@@ -94,11 +94,11 @@ This policy defines which collaborators can access which project data. Enforce b
|
|
|
94
94
|
|
|
95
95
|
### Enforcement
|
|
96
96
|
|
|
97
|
-
- Project-level isolation is the primary boundary: each business is a separate project with its own access control.
|
|
98
|
-
- A partner's access is limited to a single business's project, through a dedicated org only.
|
|
99
|
-
- An operations co-owner receives access only to their business's project and relevant platform accounts — not to infrastructure configs.
|
|
100
|
-
- System-level and multi-business reference documentation stays private to the owner unless explicitly shared.
|
|
101
|
-
- New collaborator access requires an explicit entry in this table and an entry in the security audit log.
|
|
97
|
+
- **Project-level isolation is the primary boundary: each business is a separate project with its own access control. Enforcement: explicitly advisory prose (ARC-023) — isolation depends on the owner actually configuring separate platform projects/repos with distinct access control; `spell doctor`'s `checkPlatformBranchPolicy` (src/modules/platform-policy.ts) verifies only branch merge-method policy and `checkDelegations` (src/commands/doctor.ts) verifies only agent power-level delegations, so no Arcane check queries collaborator or team membership to verify a given business's project is actually isolated.**
|
|
98
|
+
- **A partner's access is limited to a single business's project, through a dedicated org only. Enforcement: explicitly advisory prose (ARC-023) — depends on the owner correctly scoping the partner's platform account to a single org; no Arcane check inspects collaborator or team membership to verify a partner's actual access is so limited.**
|
|
99
|
+
- **An operations co-owner receives access only to their business's project and relevant platform accounts — not to infrastructure configs. Enforcement: explicitly advisory prose (ARC-023) — depends on the owner correctly scoping platform-account grants; no Arcane check inspects collaborator permissions to verify infrastructure configs are actually excluded.**
|
|
100
|
+
- **System-level and multi-business reference documentation stays private to the owner unless explicitly shared. Enforcement: explicitly advisory prose (ARC-023) — depends on the owner's manual sharing decisions; no Arcane check inspects document visibility or sharing state to verify this boundary holds.**
|
|
101
|
+
- **New collaborator access requires an explicit entry in this table and an entry in the security audit log. Enforcement: explicitly advisory prose (ARC-023) — a manual documentation discipline; no Arcane check verifies this table was updated or that a corresponding security audit log entry exists, and the security audit log itself is a manual record referenced across governance docs, not a system Arcane reads or writes.**
|
|
102
102
|
|
|
103
103
|
---
|
|
104
104
|
|
|
@@ -15,59 +15,59 @@ See also: [[README]], [[DECISIONS]], [[governance/git-conventions|Git Convention
|
|
|
15
15
|
|
|
16
16
|
## Non-Negotiable Safety Rules
|
|
17
17
|
|
|
18
|
-
1. **Never access an encrypted or cross-OS volume you are not authorized to touch.** Do not suggest, execute, or recommend any action that would mount, read, or probe a drive outside the agent's authorized environment. This rule stands as defense-in-depth regardless of encryption status.
|
|
18
|
+
1. **Never access an encrypted or cross-OS volume you are not authorized to touch. Enforcement: explicitly advisory prose (ARC-023) — depends on agent judgment about authorization boundaries; no script scans proposed commands for drive or volume access before execution.** Do not suggest, execute, or recommend any action that would mount, read, or probe a drive outside the agent's authorized environment. This rule stands as defense-in-depth regardless of encryption status.
|
|
19
19
|
|
|
20
|
-
2. **No root commands without justification.** Do not generate or suggest commands that run as root unless explicitly scoped and justified. The agent runtime should run as a dedicated non-root user by design. See [[security/hardening-checklist|Hardening Checklist]].
|
|
20
|
+
2. **No root commands without justification. Enforcement: explicitly advisory prose (ARC-023) — depends on judgment about what justifies root scope; no script inspects generated commands for root usage before they run.** Do not generate or suggest commands that run as root unless explicitly scoped and justified. The agent runtime should run as a dedicated non-root user by design. See [[security/hardening-checklist|Hardening Checklist]].
|
|
21
21
|
|
|
22
|
-
3. **No secrets on the command line.** Never pass API keys, tokens, or secrets on the command line, in chat, or in config files. Use SecretRef (env vars) and `read -s` for interactive input.
|
|
22
|
+
3. **No secrets on the command line. Enforcement: explicitly advisory prose (ARC-023) — no secret-scanner exists in this repo yet (tracked as future work, BC-30), so no mechanical check catches a violation.** Never pass API keys, tokens, or secrets on the command line, in chat, or in config files. Use SecretRef (env vars) and `read -s` for interactive input.
|
|
23
23
|
|
|
24
|
-
4. **This is a production system.** No "fix it later" shortcuts. No experimental changes without rollback plans.
|
|
24
|
+
4. **This is a production system. Enforcement: explicitly advisory prose (ARC-023) — the no-shortcuts and rollback-plan requirements depend on engineering judgment; no check evaluates whether a rollback plan exists.** No "fix it later" shortcuts. No experimental changes without rollback plans.
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
28
|
## Documentation Rules
|
|
29
29
|
|
|
30
|
-
5. **Update `last_updated` frontmatter
|
|
30
|
+
5. **Update `last_updated` frontmatter. Enforcement: explicitly advisory prose (ARC-023) — no lint validates frontmatter fields or verifies `last_updated` was bumped when a document changes.** whenever you edit a document. Every document must have YAML frontmatter with `audience`, `status`, `last_updated`, and `tags`.
|
|
31
31
|
|
|
32
|
-
6. **Log significant decisions in [[DECISIONS]].** Use the next sequential ADR number. Format: Date, Status, Context, Decision, Reasoning, Rejected alternatives.
|
|
32
|
+
6. **Log significant decisions in [[DECISIONS]]. Enforcement: explicitly advisory prose (ARC-023) — whether a decision is "significant" enough to log is a judgment call; `check:adr-references` verifies that ADR citations resolve, not that decisions get logged in the first place.** Use the next sequential ADR number. Format: Date, Status, Context, Decision, Reasoning, Rejected alternatives.
|
|
33
33
|
|
|
34
|
-
7. **Use wiki-links for cross-references
|
|
34
|
+
7. **Use wiki-links for cross-references. Enforcement: explicitly advisory prose (ARC-023) — no link-checker validates wiki-link usage or resolution across this repo's docs.** (e.g., `[[DECISIONS#ADR-NNN|Short Title]]`, `[[journal/YYYY-MM-DD-topic-slug|Session Label]]`). This enables knowledge graph visualization.
|
|
35
35
|
|
|
36
|
-
8. **Use Mermaid for diagrams
|
|
36
|
+
8. **Use Mermaid for diagrams. Enforcement: explicitly advisory prose (ARC-023) — no lint validates diagram block type or the generated-state-diagrams determinism convention.** (` ```mermaid ` blocks) for all flow charts, architecture diagrams, and sequence diagrams. Directory trees stay as plain code blocks. Spell output describing state the spell already computed — not authored, freehand explanatory content — additionally follows the **generated state diagrams** convention ([ARC-036](https://github.com/codemagicianhq/arcane/blob/main/DECISIONS.md#arc-036--generated-state-diagrams-deterministic-mermaid-for-computed-spell-state)): a deterministic, data-derived Mermaid diagram built only from values already in scope, never modeled or invented. Skip it for one-line outputs, speed-rule spells, or any state with only a single reading — the diagram exists to make relationships between multiple already-computed values legible, not to decorate simple output.
|
|
37
37
|
|
|
38
|
-
9. **Journal files use date-prefix naming
|
|
38
|
+
9. **Journal files use date-prefix naming. Enforcement: explicitly advisory prose (ARC-023) — `checkSessionContinuity` only verifies `journal/.gitkeep` exists, not that individual journal filenames follow the date-prefix pattern.** `journal/YYYY-MM-DD-topic-slug.md` for chronological sorting.
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
42
|
## Git Rules
|
|
43
43
|
|
|
44
|
-
10. **Never auto-commit during interactive sessions.** Stage changes and present the proposed commit message for human approval before executing `git commit`. This applies to Copilot, Claude Code, Codex, and any other interactive AI tool. The human decides when to commit. Exception: autonomous agents at Magus+ power level may self-commit within approved scope.
|
|
44
|
+
10. **Never auto-commit during interactive sessions. Enforcement: structured spell gate (ARC-023) — `spell-commit-work`'s Step 8 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.** Stage changes and present the proposed commit message for human approval before executing `git commit`. This applies to Copilot, Claude Code, Codex, and any other interactive AI tool. The human decides when to commit. Exception: autonomous agents at Magus+ power level may self-commit within approved scope.
|
|
45
45
|
|
|
46
|
-
11. **Use Conventional Commits format
|
|
46
|
+
11. **Use Conventional Commits format. Enforcement: explicitly advisory prose (ARC-023) — no commitlint or equivalent hook validates commit message format.** for all commit messages: `type(scope): description`. See [[governance/git-conventions|Git Conventions]] for types, scopes, and examples.
|
|
47
47
|
|
|
48
|
-
12. **Agent attribution trailers
|
|
48
|
+
12. **Agent attribution trailers. Enforcement: explicitly advisory prose (ARC-023) — `spell-commit-work`'s Step 7 documents the required trailers, but no hook or CI check verifies they are actually present on a given commit.** are required on agent-authored commits (`Agent`, `Model`, `Model-Source`, `Provider`). `Persona`/`Role` are conditional — present only when a roster exists and one was assigned, never guessed. See [[governance/git-conventions#agent-attribution-model|Attribution Model]].
|
|
49
49
|
|
|
50
|
-
13. **For runtime config changes
|
|
50
|
+
13. **For runtime config changes. Enforcement: structured spell gate (ARC-023), hedged — `spell-commit-work`'s Step 8 operator-approval gate covers this commit like any other before it can be made, though it verifies diff/message approval rather than a dedicated confirmation that testing occurred.** (anything touching the agent runtime's config files or service restarts): do NOT commit supporting docs until the user has confirmed the change is working. Stage and present — but wait for explicit approval after testing.
|
|
51
51
|
|
|
52
|
-
14. **Never commit directly to main.** All work — human or agent — happens on topic branches. Humans use `type/short-description`; agents use `{agent-slug}/type/short-description`. Main receives changes only through PR completion, not local direct merges. See [[governance/git-conventions#branch-discipline|Branch Discipline]].
|
|
52
|
+
14. **Never commit directly to main. Enforcement: explicitly advisory prose (ARC-023) — `spell doctor`'s `checkPlatformBranchPolicy` verifies only the platform's merge-method policy (squash disallowed), not that direct pushes/commits to main are blocked.** All work — human or agent — happens on topic branches. Humans use `type/short-description`; agents use `{agent-slug}/type/short-description`. Main receives changes only through PR completion, not local direct merges. See [[governance/git-conventions#branch-discipline|Branch Discipline]].
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
56
56
|
## Spell Lifecycle
|
|
57
57
|
|
|
58
|
-
22. **Lifecycle operations run through their spell when one is installed.** Committing, opening a PR, opening or closing a session, reviewing code, and shipping each have a dedicated spell (`spell-commit-work`, `spell-create-pull-request`, `spell-open-session`/`spell-close-session`, `spell-review`, `spell-ship`). When the installed component set includes the matching spell, invoke it for that operation rather than improvising the workflow from general knowledge — even when the user does not name the spell explicitly. The intent→spell routing table injected into each client's L1 instruction file (`CLAUDE.md`, `.github/copilot-instructions.md`, `AGENTS.md`) is normative for this mapping, not illustrative.
|
|
58
|
+
22. **Lifecycle operations run through their spell when one is installed. Enforcement: explicitly advisory prose (ARC-023) — invoking the correct spell instead of improvising depends on agent judgment; no check verifies that a matching spell was actually invoked for a given operation.** Committing, opening a PR, opening or closing a session, reviewing code, and shipping each have a dedicated spell (`spell-commit-work`, `spell-create-pull-request`, `spell-open-session`/`spell-close-session`, `spell-review`, `spell-ship`). When the installed component set includes the matching spell, invoke it for that operation rather than improvising the workflow from general knowledge — even when the user does not name the spell explicitly. The intent→spell routing table injected into each client's L1 instruction file (`CLAUDE.md`, `.github/copilot-instructions.md`, `AGENTS.md`) is normative for this mapping, not illustrative.
|
|
59
59
|
|
|
60
60
|
---
|
|
61
61
|
|
|
62
62
|
## Recommendation Guardrails (ADR-034)
|
|
63
63
|
|
|
64
|
-
15. **Flag actionable recommendations.** Any recommendation that could lead to a purchase, subscription, account creation, or irreversible action must: (a) be flagged explicitly, (b) use verified current information — never assume or fabricate, (c) present free/no-cost alternatives when they exist, (d) state confidence level if based on general knowledge. For >$50 or contracts, require explicit confirmation. See [[agents/agent-policies#actionable-recommendation-policy-adr-034|Full Policy]].
|
|
64
|
+
15. **Flag actionable recommendations. Enforcement: explicitly advisory prose (ARC-023) — whether a recommendation is flagged, sourced, and confidence-rated depends on judgment; no automated check evaluates response content against this policy.** Any recommendation that could lead to a purchase, subscription, account creation, or irreversible action must: (a) be flagged explicitly, (b) use verified current information — never assume or fabricate, (c) present free/no-cost alternatives when they exist, (d) state confidence level if based on general knowledge. For >$50 or contracts, require explicit confirmation. See [[agents/agent-policies#actionable-recommendation-policy-adr-034|Full Policy]].
|
|
65
65
|
|
|
66
66
|
---
|
|
67
67
|
|
|
68
68
|
## Screenshot Curation
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
24. **Curate screenshots — not every screenshot needs saving. Enforcement: explicitly advisory prose (ARC-023) — which screenshots to keep is a judgment call; no check evaluates screenshot-retention decisions.** Use these heuristics:
|
|
71
71
|
- **Save** when it shows a completed setup, config state, UI result, or evidence of a problem/fix.
|
|
72
72
|
- **Save** when the user explicitly says "save this" or "add this to docs."
|
|
73
73
|
- **Save key decision points and final states** in multi-step flows; skip intermediate steps.
|
|
@@ -80,7 +80,7 @@ See also: [[README]], [[DECISIONS]], [[governance/git-conventions|Git Convention
|
|
|
80
80
|
|
|
81
81
|
## Sensitive Repositories
|
|
82
82
|
|
|
83
|
-
21. **Reference, don't transcribe, when the repository is marked sensitive.** If
|
|
83
|
+
21. **Reference, don't transcribe, when the repository is marked sensitive. Enforcement: explicitly advisory prose (ARC-023) — whether written output cites versus transcribes sensitive content depends on judgment; no check scans agent output for this distinction.** If
|
|
84
84
|
`.arcane.json` has `content_sensitivity: "sensitive"`, the repository's own
|
|
85
85
|
documents are the sensitive material — not just credentials inside them. In
|
|
86
86
|
that mode:
|
|
@@ -106,7 +106,7 @@ See also: [[README]], [[DECISIONS]], [[governance/git-conventions|Git Convention
|
|
|
106
106
|
|
|
107
107
|
## Naming Conventions
|
|
108
108
|
|
|
109
|
-
16. **Three naming tiers — never mix them
|
|
109
|
+
16. **Three naming tiers — never mix them. Enforcement: explicitly advisory prose (ARC-023) — `spell ward` and `org-token-lint` scan for denylisted org/venture/customer names, not for adherence to this tier taxonomy; no check verifies tier consistency.**
|
|
110
110
|
|
|
111
111
|
| Tier | What | Style | Examples |
|
|
112
112
|
|------|------|-------|---------|
|
|
@@ -114,19 +114,19 @@ See also: [[README]], [[DECISIONS]], [[governance/git-conventions|Git Convention
|
|
|
114
114
|
| AI Agents | Autonomous agents | Persona name + role title | Merlin — CTO, Kellar — Product Ops |
|
|
115
115
|
| Systems/Services | DBs, APIs, tools | Functional `[slug]-[function]` | `inventory-api`, `orders-worker` |
|
|
116
116
|
|
|
117
|
-
17. **Projects and repos follow a consistent naming convention.** Pick one (TitleCase or kebab-case) and apply it uniformly across your org.
|
|
117
|
+
17. **Projects and repos follow a consistent naming convention. Enforcement: explicitly advisory prose (ARC-023) — no check verifies TitleCase/kebab-case consistency across projects and repos.** Pick one (TitleCase or kebab-case) and apply it uniformly across your org.
|
|
118
118
|
|
|
119
119
|
---
|
|
120
120
|
|
|
121
121
|
## Operational Rules
|
|
122
122
|
|
|
123
|
-
18. **TODO.md is a scratchpad.** Resolved items move to the relevant doc, then get deleted from TODO.md.
|
|
123
|
+
18. **TODO.md is a scratchpad. Enforcement: explicitly advisory prose (ARC-023) — `checkSessionContinuity` verifies TODO.md exists, not that resolved items are removed from it.** Resolved items move to the relevant doc, then get deleted from TODO.md.
|
|
124
124
|
|
|
125
|
-
19. **After any onboarding or config wizard
|
|
125
|
+
19. **After any onboarding or config wizard. Enforcement: explicitly advisory prose (ARC-023) — no wizard or check re-validates authentication and network-exposure settings after configuration changes.**, re-validate authentication and network-exposure settings — wizards can silently downgrade security settings.
|
|
126
126
|
|
|
127
|
-
20. **For repo path requests
|
|
127
|
+
20. **For repo path requests. Enforcement: explicitly advisory prose (ARC-023) — performing read-only discovery before claiming no access depends on agent judgment; no check verifies this behavior occurred.**, perform read-only discovery before claiming "no access." Use [[agents/agent-approved-paths|Agent Approved Paths Registry]].
|
|
128
128
|
|
|
129
|
-
23. **Diff before deleting a "duplicate."
|
|
129
|
+
23. **Diff before deleting a "duplicate." Enforcement: explicitly advisory prose (ARC-023) — the branch-specific case this generalizes from has a structured procedure (git-conventions.md's Content-Verified Branch Deletion), but no equivalent structured check exists for arbitrary documents, configs, or data files.** When housekeeping surfaces two blocks of content that look
|
|
130
130
|
like duplicates — in a document, a config, a data file — compare them in full before removing
|
|
131
131
|
either. A near-identical pair is usually a **drifted copy carrying unique content in one and not the
|
|
132
132
|
other**, not byte-identical redundancy; deleting on sight can destroy the unique content silently.
|