arkgate 4.7.3 → 4.7.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/CHANGELOG.md +39 -1
- package/README.md +76 -52
- package/bin/lib/first-run-help.mjs +6 -4
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/docs/README.md +11 -9
- package/docs/agent-guide.md +6 -7
- package/docs/ai-gates.md +2 -1
- package/docs/develop.md +5 -2
- package/docs/enthusiast/README.md +5 -4
- package/docs/package-surface.md +12 -9
- package/docs/product-voice.md +112 -422
- package/docs/use.md +19 -19
- package/package.json +2 -2
- package/server.json +3 -3
- package/templates/agent-skills/README.md +1 -1
package/docs/product-voice.md
CHANGED
|
@@ -1,485 +1,175 @@
|
|
|
1
1
|
# ArkGate product voice
|
|
2
2
|
|
|
3
|
-
Canonical English for
|
|
4
|
-
|
|
3
|
+
Canonical English for README, CLI first-run copy, skills, and release notes.
|
|
4
|
+
When this file disagrees with shipped strings, **fix the strings**.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
**Who this is not for:** internal ADR drafts, ROADMAP engineering notes, or pure code comments.
|
|
8
|
-
|
|
9
|
-
When this document disagrees with shipped UI strings, **fix the strings** (or update this doc
|
|
10
|
-
deliberately in the same change). Voice is product surface, not marketing decoration.
|
|
6
|
+
Internal ADRs, the implementation queue, and code comments are not this file.
|
|
11
7
|
|
|
12
8
|
---
|
|
13
9
|
|
|
14
|
-
##
|
|
15
|
-
|
|
16
|
-
First-contact copy has a **named test reader**: a senior who learned Fowler, ESLint, and CI
|
|
17
|
-
quality gates — and does not live in agent hosts. If they can walk away with any of the
|
|
18
|
-
three documented misreads, the line failed. Rewrite it. Do not argue the config at them.
|
|
19
|
-
|
|
20
|
-
This reader is not a junior to educate and not a vibe-coder to simplify for. They are why
|
|
21
|
-
“gate”, “contract”, and “architecture config” in the first sentence lose the room.
|
|
22
|
-
|
|
23
|
-
### Misread A — “file structure keeper for TypeScript”
|
|
24
|
-
|
|
25
|
-
**Cause:** the first sentence is folders, layers, `ark.config.json`, or “who may import whom.”
|
|
26
|
-
**They hear:** eslint-plugin-boundaries, dependency-cruiser, Nx tags.
|
|
27
|
-
|
|
28
|
-
The layer plane *is* import rules. That is not the product. The product is **when** those
|
|
29
|
-
rules fire: the host blocks the write; required CI blocks the merge.
|
|
30
|
-
|
|
31
|
-
### Misread B — “a Gateway”
|
|
10
|
+
## Mission
|
|
32
11
|
|
|
33
|
-
**
|
|
34
|
-
access, wrap, abstract, “extend without touching what it represents.”
|
|
35
|
-
**They hear:** Fowler Gateway / API Gateway / facade — an intermediate object that talks
|
|
36
|
-
to a resource so callers do not.
|
|
12
|
+
**Write. Check. Ship.**
|
|
37
13
|
|
|
38
|
-
|
|
39
|
-
|
|
14
|
+
When the agent writes a bad import, the write doesn’t land.
|
|
15
|
+
The same check fails the pull request.
|
|
40
16
|
|
|
41
|
-
|
|
17
|
+
**ArkGate** is import rules for AI-written TypeScript. Always on once you adopt it.
|
|
42
18
|
|
|
43
|
-
**
|
|
44
|
-
deny is visible.
|
|
45
|
-
**They hear:** Agile Manifesto, a principles doc, AGENTS.md — intent you hope people follow.
|
|
19
|
+
**ArkRules** is optional policies inside a layer.
|
|
46
20
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
merge. Without that, the file **is** a manifesto. Do not win the argument by repeating
|
|
50
|
-
“it is a contract.” Show the teeth. Human copy already prefers **architecture config**
|
|
51
|
-
over contract; **law / constitution** only after the checkpoint is named.
|
|
21
|
+
**ArkRun** is an optional runtime (`@arkgate/runtime`). Experimental. In-memory.
|
|
22
|
+
Not Postgres.
|
|
52
23
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
On README, `docs/use.md`, develop, enthusiast, the docs hub, and the product site, use
|
|
59
|
-
**common software English**. Do not invent a synonym and then explain it.
|
|
60
|
-
|
|
61
|
-
**Locked sentences:**
|
|
62
|
-
|
|
63
|
-
1. **Deny:** `If the AI writes an illegal import, the write is rejected. The same check fails the pull request.`
|
|
64
|
-
2. **Not-that (one line):** `Not an API Gateway. Not a folder linter. If the check is not required on the PR, the rules file is just documentation.`
|
|
65
|
-
3. **How:** `One rules file. One check. One next step.`
|
|
24
|
+
```text
|
|
25
|
+
Write. the agent writes
|
|
26
|
+
Check. bad imports don’t land — same check on the PR
|
|
27
|
+
Ship. required GitHub check, then merge
|
|
28
|
+
```
|
|
66
29
|
|
|
67
|
-
|
|
68
|
-
|
|
30
|
+
```text
|
|
31
|
+
ArkGate always import rules (write + required CI)
|
|
32
|
+
ArkRules optional policies inside a layer
|
|
33
|
+
ArkRun optional experimental runtime — in-memory, not Postgres
|
|
34
|
+
```
|
|
69
35
|
|
|
70
|
-
|
|
71
|
-
|
|
36
|
+
Status first (`arkgate-check --doctor`). One next step. CLI flag `--doctor` stays;
|
|
37
|
+
human copy says **status**.
|
|
72
38
|
|
|
73
39
|
---
|
|
74
40
|
|
|
75
|
-
##
|
|
41
|
+
## Locked first-contact
|
|
76
42
|
|
|
77
|
-
|
|
78
|
-
heroes, npm description, `llms.txt` lede) may use **only** these kinds of words:
|
|
43
|
+
On README, use, develop, the docs hub, and the product site:
|
|
79
44
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
| required CI check / fails the pull request / required GitHub status | merge gate, extra merge teeth |
|
|
85
|
-
| rules file (`ark.config.json`) | the contract, the manifesto (except the one honest “just documentation” line) |
|
|
86
|
-
| `arkgate-check --doctor` — shows what's wrong and what to do first | doctor is the control plane, coach, co-pilot |
|
|
87
|
-
| warning, not blocked | advisory write |
|
|
88
|
-
| extra rules inside a layer | dual plane, intra-layer sensors |
|
|
89
|
-
| optional extra (off unless you turn it on) | third extra, gated complement |
|
|
45
|
+
1. **Verbs:** `Write. Check. Ship.`
|
|
46
|
+
2. **Deny:** `When the agent writes a bad import, the write doesn’t land. The same check fails the pull request.`
|
|
47
|
+
3. **Not-that (below the fold, one line):** `Not an API Gateway. Not a folder linter. If the check is not required on the PR, the config is just documentation.`
|
|
48
|
+
4. **Nouns (once, below the deny):** ArkGate is import rules. ArkRules is optional policies. ArkRun is an optional experimental runtime.
|
|
90
49
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
50
|
+
Do not lead with folders, `ark.config.json`, “contract”, “gate”, “house”, or “doctor”
|
|
51
|
+
as the first noun. Historical: `If the AI writes an illegal import, the write is rejected`
|
|
52
|
+
and `One architecture config. One check. One coach.` — never first.
|
|
94
53
|
|
|
95
|
-
**
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
If a term is not on this allowlist and is not a brand or a command, **cut it** or move it
|
|
99
|
-
below the fold (develop docs, JSON field names, ADRs).
|
|
100
|
-
|
|
101
|
-
Where we cannot use a common word — because the thing is ours — **one sentence, no hedging:**
|
|
102
|
-
“ArkRules is optional. It is extra rules inside a layer. It is off unless you turn it on.”
|
|
54
|
+
H1 may be **ArkGate — Write. Check. Ship.** npm description stays the deny.
|
|
55
|
+
ADR 0001 keeps the public name **ArkGate**.
|
|
103
56
|
|
|
104
57
|
---
|
|
105
58
|
|
|
106
|
-
##
|
|
107
|
-
|
|
108
|
-
A track so simple a newcomer enters, so strict a senior trusts — and the AI ships faster
|
|
109
|
-
because the design space is small and honest.
|
|
110
|
-
|
|
111
|
-
- **Reject the write. Fail the PR.** Rules file (`ark.config.json`) + the hook rejects listed
|
|
112
|
-
writes where the host supports it + required CI. Deterministic. Don’t show green if we could
|
|
113
|
-
not verify. Two kinds of rules: **import rules** (who may import whom) always; **ArkRules**
|
|
114
|
-
(extra rules inside a layer) opt-in. Optional extra: **ArkRun** (kernel usage + declarations)
|
|
115
|
-
via companion `@arkgate/runtime` — not a durability claim. Not a Gateway.
|
|
116
|
-
- **Where code belongs:** who talks to whom, and how; fix illegal imports first, then leftover
|
|
117
|
-
design work; one small refactor at a time; never silent auto-reshape; never weaken the rules
|
|
118
|
-
file.
|
|
119
|
-
- **Five doors:** invoking `/ark-adopt`, `/ark-place`, `/ark-autopilot`, `/ark-explore`,
|
|
120
|
-
or `/ark-upgrade` **is** the approval. The agent writes or maps in that turn. CLI/MCP check;
|
|
121
|
-
they do not silently rewrite. Silent reshape from the compact router (unasked) stays forbidden.
|
|
122
|
-
- **Team:** the rules file is a different change type than product code. A product change must
|
|
123
|
-
not amend it. Stewards own loosen and baseline-grow. The ratchet is **new vs the branch you
|
|
124
|
-
merge to**, not only the file on this checkout. A small PR pays `--changed --base`, not
|
|
125
|
-
the whole tree. Humans who never hit the write hook are allowed to ignore Ark.
|
|
126
|
-
- **Agent surface (4.3.0):** agents read **guardrail catalogs** and **scan** evidence;
|
|
127
|
-
they **judge** outside the package. Projection and skills never become the
|
|
128
|
-
pass/fail check.
|
|
129
|
-
- **Improvement compass (4.4.0):** leftover architecture work is named as **lenses** (SoC, DIP,
|
|
130
|
-
domain alignment, …) projected from existing sensors — **never** a 0–10 score or Excellent/Good
|
|
131
|
-
rank. Out-of-scope lenses (perf, app security tooling, full resilience) stay honest.
|
|
132
|
-
- **Dual depth:** human doctor and skills lead with plain outcomes and one next move;
|
|
133
|
-
experts keep full JSON. Full-AI workflows get the same single door — not a skill menu exam.
|
|
134
|
-
- **False done is forbidden:** “Rules on” ≠ elegant design. Leftover design work must not
|
|
135
|
-
read as “healthy finished.” Empty ArkRules inventory is not a score. MCP configuration on
|
|
136
|
-
disk is not proof that the current process belongs to this project.
|
|
59
|
+
## How it sounds
|
|
137
60
|
|
|
138
|
-
|
|
61
|
+
Short. Product nouns. Scene English (Vercel / Supabase / GitHub Checks).
|
|
62
|
+
The check is the product — not a metaphor.
|
|
139
63
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
Prefer three beats when a line teaches:
|
|
64
|
+
Three beats when a line teaches:
|
|
143
65
|
|
|
144
66
|
```text
|
|
145
|
-
[plain fact]. [
|
|
67
|
+
[plain fact]. [what it means]. [one next action].
|
|
146
68
|
```
|
|
147
69
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
|
151
|
-
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
| Become an architect in 60 seconds. | Install pins `ark.config.json` and a short agent router. Full guided cleanup is `/ark-autopilot` after skills install. |
|
|
155
|
-
|
|
156
|
-
---
|
|
70
|
+
| Yes | No |
|
|
71
|
+
|-----|----|
|
|
72
|
+
| The agent imported Infrastructure from Domain. The write didn’t land. Next: `/ark-place`. | Ship it 🚀 crush the spaghetti |
|
|
73
|
+
| Import rules pass. The tree still needs a refactor. Next: one small change. | You don’t need to understand anything |
|
|
74
|
+
| ArkRun is experimental. In-memory. Data is gone on restart. | The kernel is production-ready |
|
|
75
|
+
| Status: one light, one next step. | Become an architect in 60 seconds |
|
|
157
76
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
**Brands (keep):** **ArkGate** (product / npm `arkgate`), **ArkRules** (opt-in structure rules
|
|
161
|
-
inside a layer), and **ArkRun** (opt-in kernel-usage extra + companion `@arkgate/runtime`). Gloss
|
|
162
|
-
on first mention; do not rebrand. Branding ArkRun is not a durability claim.
|
|
163
|
-
|
|
164
|
-
Human copy prefers the **common** column. JSON field names (`designWeak`, `ruleId`, MCP tools)
|
|
165
|
-
stay stable unless a change explicitly adds an alias.
|
|
166
|
-
|
|
167
|
-
| Prefer (human) | Was / JSON | Use for |
|
|
168
|
-
|----------------|------------|---------|
|
|
169
|
-
| **rules file** (`ark.config.json`) | contract / architecture config | Layers, rules, include. Never the first noun. Without required CI, this reader hears **manifesto** |
|
|
170
|
-
| **manifesto** (honesty only) | advisory-only / no required CI | What the file is until the write is rejected and CI is required. Never the product name |
|
|
171
|
-
| **import rules** / **allowed dependencies** | Layers plane / edges | Who may import whom; placement, purity, isolation |
|
|
172
|
-
| **ArkRules** (opt-in; gloss: extra rules inside a layer) | ArkRules | Structure sensors + domain invariant catalogs (`arkrules/*`). Off unless you turn it on. |
|
|
173
|
-
| **ArkRun** (opt-in; gloss: kernel usage + complete declarations) | arkRun | Optional extra; companion kernel is `@arkgate/runtime`; factory `createStrictArkKernel` (per instance, no singleton). Never a score. |
|
|
174
|
-
| **advisory ArkRules** | advisory ArkRules | Default sensor mode — does not fail CI/merge alone |
|
|
175
|
-
| **extra merge checks** | extraMergeTeeth | Only when enforced structure/invariant rules exist **and** classification is honest |
|
|
176
|
-
| **label `[Layer]` vs `[ArkRules]`** | dual-plane residual | Never blur import-rule findings with ArkRules findings |
|
|
177
|
-
| **ArkRules counts** | rulesUnderContract | Doctor/inventory counts — **never a score** |
|
|
178
|
-
| **type-only import debt** | type-only placement debt | `import type` on the violations list with `failsStrict:false` |
|
|
179
|
-
| **the write is rejected** / **required CI check** | write checkpoint / gate (as first noun) | Pass/fail: hook rejects the write + required CI. **Not** Fowler Gateway, not a resource wrapper, not a layer in the app |
|
|
180
|
-
| **the hook rejects the write** | hard write / pre-write block | Host actually blocks listed edit ops (installed + trusted) |
|
|
181
|
-
| **warning only (not blocked)** | advisory write | MCP/rules warn; not a hard block |
|
|
182
|
-
| **import graph** | edges | Allowed imports (fix these first) |
|
|
183
|
-
| **baseline** | baseline | Frozen known debt; does not make a wrong config honest |
|
|
184
|
-
| **fix** | remediation | Fixing violations against the config |
|
|
185
|
-
| **one small refactor** | pilot | One extraction / reshape cluster at a time |
|
|
186
|
-
| **shape / leftover design work** | **design-weak** / residual | Imports clean under Enforce, but design smells remain — not “done” |
|
|
187
|
-
| **doctor** / **next step** | coach / co-pilot | Guidance that proposes order without silent auto-reshape |
|
|
188
|
-
| **don’t show green if unverified** | fail-closed | Incomplete analysis or unproven enforcement never looks green |
|
|
189
|
-
| **honest coverage** | honest coverage | Governed % and empty scope that cannot false-green |
|
|
190
|
-
| **safe to auto-apply** | mechanical-safe | Deterministic auto-apply class only |
|
|
191
|
-
| **your judgment** | judgment | Human/agent design work; invoke of an apply door is the approval — not silent compact-router reshape |
|
|
192
|
-
| **five doors** | skill menu of 13 | adopt · place · autopilot · explore · upgrade — other names are shortcuts |
|
|
193
|
-
| **rules file + ArkRules files** (different change type than product) | law / constitution / contract + baseline | `ark.config.json`, `arkrules/*`, `.ark-baseline.json` — a product PR must not amend them |
|
|
194
|
-
| **steward** | contract owner | GitHub handle or email in `stewards`; only they may loosen the law or grow the baseline |
|
|
195
|
-
| **several hands** | multi-author / CODEOWNERS | Doctor asks for stewards or shows list drift; empty `stewards[]` is unfinished ENFORCE (not Adapt); adopt proposes handles or emails, never invents names |
|
|
196
|
-
| **contract session** | `--contract-session` | Explicit “this diff is a law change”; required to loosen or grow the baseline even with an empty steward list; still never mixed with product files |
|
|
197
|
-
| **vs the base branch** | `--against` / `--changed --base` / `status --vs` | Ratchet and honesty against the ref you merge to |
|
|
198
|
-
| **doctor** | doctor | Status light + next action |
|
|
199
|
-
| **short agent router** | compact router | Default onboarding agent instructions (not the full skill pack) |
|
|
200
|
-
| **right project?** | matched binding / project identity | Live MCP answered for this exact project root (+ id). `ark_identity` |
|
|
201
|
-
| **authoritative config read** | authoritative manifest | `ark_manifest` after a matched identity handshake |
|
|
202
|
-
| **compatibility manifest** | `ark://manifest` | Always unverified — request cannot carry a project expectation |
|
|
203
|
-
| **configured on disk** | configured on disk | Host files name an Ark MCP command; not proof of the live process |
|
|
204
|
-
| **runtime observed** | runtime observed | A live `ark_identity` matched this workspace |
|
|
205
|
-
| **required CI status** | required CI / status context | Merge hard boundary: required GitHub status running `arkgate-check --strict-merge` |
|
|
206
|
-
| **config ready** | contract ready | Project/import-rules/ArkRules honesty clear — not the same as a local pre-write block |
|
|
207
|
-
| **host limitation** | environment residual | Soft-write or uncovered host path (e.g. OpenCode, hosted/specialized tools) — do not paint the whole project unfinished |
|
|
208
|
-
| **allowed rule ids** | guardrail catalog | Closed vocabulary of sensors, capabilities, `ruleId`s, skill roles |
|
|
209
|
-
| **check (tool)** | scan | Deterministic engine / CLI / MCP. Same inputs → same verdict. No LLM. |
|
|
210
|
-
| **your judgment** | process / coaching | Skill- or agent-side. **Never** package pass/fail |
|
|
211
|
-
| **diagnostic code** / **ruleId** | ruleId | Stable public violation id — catalog-linked ([diagnostics.md](diagnostics.md)) |
|
|
212
|
-
| **agent summary** | agent projection | Version-matched AGENTS/CLAUDE block; **non-authoritative** |
|
|
213
|
-
| **finding id** | finding ref | Stable id (ruleId + target key) across turns |
|
|
214
|
-
| **status snapshot** | status snapshot | `ark status --json`: identity, activation, last check, leftover counts — not a score |
|
|
215
|
-
| **shared agent skills (home)** | Codex/Claude/Grok home catalog | Machine floor: always latest additive; never downgrade |
|
|
216
|
-
| **session recipe** | Agent loop: bind identity → read status → act on residual / findingRef; run doctor when status compass mode is not `full` |
|
|
217
|
-
| **compass mode** | Status honesty label for the projected residual map: `full` \| `subset` \| `unavailable` — never invent green residual |
|
|
218
|
-
| **improvement compass** | Closed projection of residual architecture work across fixed **lenses** (aligned to 15 common principles). Always `notAScore`. Never a gate input. |
|
|
219
|
-
| **lens** | One named principle dimension (`soc`, `dip`, `domain`, …) with status `ok` / `residual` / `not-instrumented` / `out-of-scope` and evidence refs from existing sensors |
|
|
220
|
-
| **topResidual** | Deterministic short list of residual lens ids — what to improve next, not a ranking score |
|
|
221
|
-
| **out-of-scope lens** | Principle Ark does not instrument (e.g. scalability APM, SAST) — say so; do not invent residual |
|
|
222
|
-
| **AI-easy architecture** | Small, pure, placeable modules and a golden pattern so the next agent turn stays ordered under the contract |
|
|
223
|
-
| **self-service upgrade honesty** | After managed upgrade, consumers can see write-path activation labels and customized-content preserve without asking a maintainer |
|
|
224
|
-
| **module** | Anything with a surface callers depend on and an implementation behind it (function, package, slice) — not only a TypeScript `module` keyword |
|
|
225
|
-
| **interface** (product sense) | Everything a caller must know: types, invariants, errors, ordering, config — not only a TypeScript `interface` keyword |
|
|
226
|
-
| **depth** / **deep module** | Much behavior behind a **small interface** (deep) vs interface almost as complex as the body (shallow). Prefer deep modules. **Never** a 0–10 depth score |
|
|
227
|
-
| **seam** | Place where behavior can be swapped or tested without editing callers (port boundary). Name seams when proposing ports/adapters or Shape pilots |
|
|
228
|
-
| **adapter** | Concrete thing that satisfies an interface at a seam |
|
|
229
|
-
| **leverage** | Capability callers get per unit of interface they must learn |
|
|
230
|
-
| **locality** | Change, bugs, and verification concentrate in one place |
|
|
231
|
-
| **deletion test** | Process heuristic before extracting “just for tests”: if you delete the module and complexity *vanishes*, it was mostly pass-through; if complexity *reappears* across many callers, it was earning its keep. One adapter → seam still hypothetical; two real adapters → seam justified |
|
|
232
|
-
| **test at the public interface** | Prefer verifying behavior through the seam’s public surface, not through private pass-through layers or extraction-for-test-only modules |
|
|
233
|
-
| **hot path** (advisory) | Repo-relative path with elevated **recent change volume** (heuristic from git history when available). Advisory residual only — never a gate input; omit or mark unavailable when history is missing |
|
|
234
|
-
| **deepening candidate** (advisory) | Shape residual card projected only from **existing** smells / cohesion / compass evidence — locality/leverage intent; never invents candidates without evidence; never flips the verdict |
|
|
235
|
-
| **domain glossary** | Optional consumer file of product terms (common roots: `CONTEXT.md`, `docs/glossary.md`, `docs/domain.md`, `docs/ubiquitous-language.md`). Prefer terms for layer/slice/pilot naming when present. Missing glossary is normal — no warning spam; never enforces |
|
|
236
|
-
| **two-axis done** | (1) architecture residual via status/doctor/compass (scan); (2) feature/ticket residual outside the package (process). **Enforce green ≠ feature done** |
|
|
237
|
-
|
|
238
|
-
## Public docs are product-only (from 4.4.0)
|
|
239
|
-
|
|
240
|
-
Consumer-facing prose (README, use/develop/agent-guide, skills, compact router, doctor/CLI human
|
|
241
|
-
lines, CHANGELOG user bullets, release notes bodies) explains **what ArkGate does and how to use
|
|
242
|
-
it**. It does **not** explain features by roadmap item codes, phase numbers, or internal queue
|
|
243
|
-
jargon (`IC02`, `ACS08`, `Z09`, `RB-11`, “Phase X shipped…”).
|
|
244
|
-
|
|
245
|
-
| Put here | Not here (for consumers) |
|
|
246
|
-
|----------|---------------------------|
|
|
247
|
-
| Commands, lenses, gates, skills, honest limits | Roadmap ids as the story |
|
|
248
|
-
| Stable API names (`ruleId`, JSON fields) | Ticket dumps in CHANGELOG |
|
|
249
|
-
| `ROADMAP.md` / `docs/plans/` / archive (maintainers) | Required reading of epic codes to use the product |
|
|
250
|
-
|
|
251
|
-
Historical maintainer files may keep engineering ids. **Do not regress** public lanes with new
|
|
252
|
-
id-heavy narrative after 4.4.0.
|
|
253
|
-
|
|
254
|
-
## Scan vs process (dual depth)
|
|
255
|
-
|
|
256
|
-
Borrow the harness *shape* (scan facts, then process with judgment) without shipping an LLM
|
|
257
|
-
verdict in core:
|
|
77
|
+
**Brands, then the common word:** ArkGate, ArkRules, ArkRun. Gloss once.
|
|
258
78
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
79
|
+
| Say | Do not say on first contact |
|
|
80
|
+
|-----|-----------------------------|
|
|
81
|
+
| the write doesn’t land / blocked | write firewall, write checkpoint, co-pilot, the house stays up |
|
|
82
|
+
| required CI check / fails the pull request | merge teeth, extra plane |
|
|
83
|
+
| **config** (`ark.config.json`; alias: **rules file**) | the contract, the constitution, the manifesto (except the honest “just documentation” line) |
|
|
84
|
+
| `arkgate-check --doctor` — **status**, one next step | control plane, coach, doctor as the product name |
|
|
85
|
+
| optional policies inside a layer | dual plane, intra-layer sensors, Saturday tidy |
|
|
86
|
+
| experimental runtime / in-memory / not Postgres | production kernel, durable runtime, training wheels |
|
|
264
87
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
| CLI / MCP / CI | “Scan found…”, “Checked edges…”, “Verdict: pass/fail/incomplete” | “The model decided…”, “AI validated architecture” |
|
|
268
|
-
| Skills / doctor | “Next: one small refactor…”, “Judgment: Shape door…” | “Process mode enforces…”, “Skill pass/fail” |
|
|
269
|
-
| Catalog / codes | “ruleId from the diagnostic catalog”, “closed capability set” | Open-ended “any rule string”, free-generated sensors |
|
|
270
|
-
| Projection / AGENTS.md | “Agent-facing summary; not the gate” | “Follow AGENTS.md to pass CI” |
|
|
271
|
-
|
|
272
|
-
## Do (product copy)
|
|
273
|
-
|
|
274
|
-
| Do | Example |
|
|
275
|
-
|----|---------|
|
|
276
|
-
| Lead first-contact with the deny, then not-that | “If the AI writes an illegal import, the write is rejected. The same check fails the pull request. Not an API Gateway. Not a folder linter.” |
|
|
277
|
-
| Name manifesto only when teeth are off | “No required merge status — the rules file is advisory (a manifesto). Next: require `arkgate-check --strict-merge`.” |
|
|
278
|
-
| Name the status light + plain fact + next action | “Enforce · leftover design work. Import rules check out; design smells remain. Next: one Shape door — explore → plan B → autopilot with OK.” |
|
|
279
|
-
| Rank one primary door under residual | Doctor **Primary next action** #1; **Also** only for secondary |
|
|
280
|
-
| Label expert skills as escapes | “Install skill pack only when doctor or a STOP handoff names a skill.” |
|
|
281
|
-
| State host write honesty | “Cursor blocks trusted Write/StrReplace. Codex blocks complete trusted local `apply_patch` after runtime observation. Required GitHub status covers every path.” |
|
|
282
|
-
| Soft/unverified write ≠ unfinished project | “Rules file ready; this host operation is a warning, not a block, or unverified.” Keep environment residual in evidence; reserve **Not finished** for config/project debt. |
|
|
283
|
-
| Keep Suggest on start → doctor | New-here primary is finish `start`, not a competing recommend/architect curriculum |
|
|
284
|
-
| Qualify import-clean under leftover design | “None on checked imports … leftover design work remains. Not healthy finished.” |
|
|
285
|
-
| Prefer unverified-as-not-green | Incomplete analysis, unobserved hooks, and soft MCP never paint as a hard green “write rejected” |
|
|
286
|
-
| State project binding before verdict | “Ark MCP matched this workspace; `ark_manifest` evidence is for this project.” Otherwise: “Ark MCP is configured, but we have not proven this is the right project. Restart and call `ark_identity` with the exact project root.” |
|
|
287
|
-
| Keep inventory claims evidence-bound | “Possible rule candidate in the configured Application layer.” A filename or technical constant alone is not Domain evidence. |
|
|
288
|
-
| Honesty clear ≠ architecture healthy | `productHonesty.finished` means residual **architecture** honesty sensors are clear — not a green graph score. Open blocking violations, ADAPT/SUGGEST with debt, dual-truth pin, or design residual keep `unfinished: true`. Permanent soft-write alone does **not**. |
|
|
289
|
-
| Separate CI runtime from provider policy | Successful CI run ≠ required status; GitHub Free plan 403 → `unavailable-plan`, not “CI never ran.” |
|
|
290
|
-
| Prefer catalog language for agent DX | “Stable `ruleId` with why/fix anchors.” Not a free-form list of “things that might be wrong.” |
|
|
291
|
-
| Name the check before coaching | “Check: two layer import violations. Next: fix the Application→Domain import first.” |
|
|
292
|
-
| Label projection non-enforcing | “Regenerated agent summary for this package version. The check remains ark-check / hooks / required CI.” |
|
|
293
|
-
| Keep status counts honest | “Inventory and residual counts are evidence — not a health score.” |
|
|
294
|
-
| Prefer deep modules | “Small interface, hide the complexity. Name the seam; test at the public interface.” |
|
|
295
|
-
| Apply the deletion test | “If deleting this extract would vanish the complexity, skip the pass-through; if callers re-absorb it, keep the module.” |
|
|
296
|
-
| Two-axis done | “Edges green and residual lenses quiet is architecture residual; ticket acceptance is a separate axis — Enforce green ≠ feature done.” |
|
|
297
|
-
| Glossary when present | “Prefer `CONTEXT.md` / product glossary terms for pilot and layer names; missing glossary is fine.” |
|
|
298
|
-
|
|
299
|
-
## Avoid
|
|
300
|
-
|
|
301
|
-
| Avoid | Why |
|
|
302
|
-
|-------|-----|
|
|
303
|
-
| Leading first-contact with folders, layers, or `ark.config.json` | Old-school SE hears “file structure keeper” |
|
|
304
|
-
| Bare “gate” as the first unexplained noun on README / use / hub / first-run | They load Fowler Gateway / API Gateway / facade |
|
|
305
|
-
| Calling ArkGate a Gateway, facade, adapter, or “abstraction layer” | A Gateway wraps a resource; this check rejects the write |
|
|
306
|
-
| “Access resources”, “extend without touching what it represents” | Wrapper-family verbs. The rules file is not a port |
|
|
307
|
-
| Calling `ark.config.json` a **contract** as the first noun | Old-school SE hears manifesto — intent with no consequence |
|
|
308
|
-
| “Our architecture manifesto” as product copy | Insult when teeth exist; a lie when they do not. Honesty case = advisory-only |
|
|
309
|
-
| vibes, “crush it,” emoji rain | Cheap; seniors dismiss it |
|
|
310
|
-
| “eh amigo,” fake familiarity | Condescension |
|
|
311
|
-
| “you don’t need to understand anything” | Lies about the product |
|
|
312
|
-
| “auto-refactor your whole app” / magic codemod claims | We never silent-apply plan B |
|
|
313
|
-
| “modes you pick” for Suggest/Adapt/Enforce | Those are **status lights**, not settings |
|
|
314
|
-
| Skill-shopping lists as the default curriculum | Progressive disclosure: one door first |
|
|
315
|
-
| “Healthy / done” while leftover design work remains | False done |
|
|
316
|
-
| “Honesty clear” as “architecture finished” | Honesty clear only means residual honesty sensors are quiet; graph/mode debt is separate |
|
|
317
|
-
| “Not finished” solely because a host hook is unverified or one host path is advisory | Environment residual is not architecture debt; do not paint a green whole-tree project as unfinished architecture |
|
|
318
|
-
| “MCP installed / active” because a config file exists | Say **configured on disk · runtime unverified** until `ark_identity` matches the expected root |
|
|
319
|
-
| Treating an unverified legacy MCP call as authoritative | Compatibility is not proof; require `binding.status: "matched"` and `authoritative: true` |
|
|
320
|
-
| “Handler means controller” / “every constant is a business rule” | ArkRules inventory uses configured layer context and suppresses narrow technical/test evidence; candidates remain prompts for judgment |
|
|
321
|
-
| Conflating CLI name with required status | `ark-check` is the command; the hard boundary is the GitHub required **status context** |
|
|
322
|
-
| “ArkRules prove business correctness” | They enforce *declared* structure/coverage evidence, not arbitrary logic or full semantic proof |
|
|
323
|
-
| “Structure enforced = Domain extraction done” | Structure sensors are **heuristics**; extraction is judgment (`/ark-fix` / pilot) |
|
|
324
|
-
| “Covered invariant = E2E business tests” | Coverage = symbol/test evidence for a named policy, not a runtime test runner |
|
|
325
|
-
| “Max arkRules packs = merge fails structure” | **Advisory ArkRules ≠ merge teeth.** Only `mode: "enforced"` can add teeth, and only after honest classification (FG-ARKRULES-ADVISORY-ONLY) |
|
|
326
|
-
| “Type-only volume means the gate is broken” | High type-only count is placement debt (behavior OK); group under plan A type-only, offer SharedTypes starter |
|
|
327
|
-
| Blurring import edges with invariants | Always label **`[Layer]`** vs **`[ArkRules]`** |
|
|
328
|
-
| “Ark uses AI to decide pass/fail” / package “process verdict” | Package is zero-LLM; process is agent-side judgment only |
|
|
329
|
-
| Inventing new skill **names** or preset packs as product copy filler | 4.3.0 freeze: deepen + package the 13; no new names/presets without ROADMAP promotion |
|
|
330
|
-
| Treating AGENTS.md / projection / skills as the write gate | Advisory surface; hard path is hooks / MCP prepare / required CI |
|
|
331
|
-
| Free-generated sensor or rule ids outside the catalog | Guardrail catalog is closed; unknown codes are a bug, not creativity |
|
|
332
|
-
| Numeric “architecture health” or trust score in status JSON | Counts and residuals yes; scored trust no |
|
|
333
|
-
| Depth score / “deepness rank” / Excellent module bands | Depth is vocabulary for process judgment, not a score surface |
|
|
334
|
-
| Extract “just for tests” without a deletion test | Pass-through modules add interface without locality or leverage |
|
|
335
|
-
| Treat hot paths or deepening candidates as gate failures | Advisory residual only; missing git never invents hot paths |
|
|
336
|
-
| Claim feature done solely because Enforce is green | Two-axis done: architecture residual and ticket residual are separate |
|
|
88
|
+
Command names stay command names (`--doctor` is a flag). If a word is not here,
|
|
89
|
+
cut it or put it below the fold (develop, JSON, ADRs).
|
|
337
90
|
|
|
338
91
|
---
|
|
339
92
|
|
|
340
|
-
##
|
|
93
|
+
## Still true (do not dilute)
|
|
341
94
|
|
|
342
|
-
|
|
343
|
-
2. **Doctor shows what's wrong and what to do first** — one status light, one next action (human-grade + technical).
|
|
344
|
-
3. **Compact router / default install first** — full skill pack is **expert depth**, not onboarding UI.
|
|
345
|
-
4. **Post-green shape** is a first-class single door when edges are clean but residual remains.
|
|
346
|
-
5. **Day-to-day** — place + check protect; guided organize via `/ark-autopilot` when needed.
|
|
95
|
+
These are product law, not vibe:
|
|
347
96
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
97
|
+
- **Write. Check. Ship.** ArkGate is the wedge. ArkRules and ArkRun never determine the `arkgate` package shape.
|
|
98
|
+
- The check is deterministic. No LLM pass/fail. Skills and `AGENTS.md` never replace the check.
|
|
99
|
+
- No numeric architecture / trust / depth score. Lights and counts, never Excellent/Good.
|
|
100
|
+
- Green imports ≠ elegant design. Leftover design work is **needs a refactor**, not “done”.
|
|
101
|
+
- No silent auto-reshape. Invoke of a command is the approval.
|
|
102
|
+
- A weaker config needs an explicit, hash-bound yes.
|
|
103
|
+
- Host write hardness differs. Required CI is the shared hard line.
|
|
104
|
+
- ArkRun stores are **in-memory**. Not production durability. Do not imply otherwise.
|
|
105
|
+
- Absence of ArkRules or ArkRun is silent. Label leftovers **`[Layer]`** vs **`[ArkRules]`**.
|
|
356
106
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
- If the AI writes an illegal import, the write is rejected. The same check fails the pull request.
|
|
360
|
-
- Not an API Gateway. Not a folder linter. If the check is not required on the PR, the rules file is just documentation.
|
|
361
|
-
- One rules file. One check. One next step.
|
|
362
|
-
- One architecture config. One check. One coach. *(historical 4.6.2 — never the first sentence)*
|
|
363
|
-
- Green must mean something real.
|
|
364
|
-
- You arrive at Enforce; you never turn it on.
|
|
365
|
-
- Enforce does not mean the design is elegant — only that checked imports are honest.
|
|
366
|
-
- A clean import check is not “architecture healthy” when leftover design work remains.
|
|
367
|
-
- One small refactor at a time. Pattern bets are never auto-applied.
|
|
368
|
-
- Doctor shows what's wrong and what to do first: status light + next action.
|
|
369
|
-
- The check is deterministic. Your judgment is not. Only the check decides pass/fail.
|
|
370
|
-
- Guardrails are a catalog, not free generation.
|
|
371
|
-
- Agent docs summarize the rules file; they never replace the check.
|
|
372
|
-
- **ArkGate** and **ArkRules** are product names — gloss them; don’t invent a second brand.
|
|
373
|
-
|
|
374
|
-
## Hero phrases (forbidden)
|
|
375
|
-
|
|
376
|
-
- Become an architect in 60 seconds.
|
|
377
|
-
- You don’t need to understand architecture.
|
|
378
|
-
- We auto-fix everything safely.
|
|
379
|
-
- Ship it 🚀 / crush the spaghetti with vibes.
|
|
380
|
-
- The AI validated your architecture / model pass/fail.
|
|
381
|
-
- Follow AGENTS.md to pass the architecture gate.
|
|
382
|
-
- Keep your file structure / folders clean.
|
|
383
|
-
- An abstraction layer over your architecture.
|
|
384
|
-
- A Gateway for your architecture / resources.
|
|
385
|
-
- Our architecture manifesto / the contract file.
|
|
107
|
+
Full engineering queue: [ROADMAP.md](../ROADMAP.md). Do not narrate phase ids in consumer copy.
|
|
386
108
|
|
|
387
109
|
---
|
|
388
110
|
|
|
389
|
-
##
|
|
111
|
+
## Status (CLI: `--doctor`)
|
|
390
112
|
|
|
391
|
-
|
|
113
|
+
| Light (JSON) | Human | Line |
|
|
114
|
+
|--------------|-------|------|
|
|
115
|
+
| **Suggest** | **Setup** | New or thin tree. Finish `start`, then status again. |
|
|
116
|
+
| **Adapt** | **In progress** | Not fully protected yet. Do action **#1**. |
|
|
117
|
+
| **Enforce** | **Ready** | Import rules pass. Keep the write path and required CI. |
|
|
118
|
+
| **Enforce · leftover design work** | **Ready · needs a refactor** | Import rules pass; leftover design work remains. Next: one small change. |
|
|
392
119
|
|
|
393
|
-
|
|
120
|
+
Print **All checks passed** only when merge is a **required** status running
|
|
121
|
+
`arkgate-check --strict-merge`, there is no leftover design work, and no open
|
|
122
|
+
top action. Advisory-only is honest. It is not that string.
|
|
394
123
|
|
|
395
|
-
|
|
396
|
-
|-------|------------|
|
|
397
|
-
| **Suggest** | Thin or new tree. Architecture config is not yet in charge. Next: `ark start` preview, then `--apply`; re-run doctor. |
|
|
398
|
-
| **Adapt** | Config and tree still disagree, or debt is open. The write path does not fully protect you yet. Next: doctor top action #1. |
|
|
399
|
-
| **Enforce** | Honest coverage and clean checked imports. Keep the host write path + required CI. |
|
|
400
|
-
| **Enforce · leftover design work** | Import rules check out; design smells remain. Green is not elegant design. Next: map (`/ark-explore` shape-focus) then apply one small refactor with `/ark-autopilot` (invoke = apply). |
|
|
401
|
-
|
|
402
|
-
### Primary next action
|
|
403
|
-
|
|
404
|
-
- Lead with the **outcome**, then the **skill or command**, then the **constraint** (never mechanical-safe / never skill-shop).
|
|
405
|
-
- When leftover design work remains, rank the single Shape path first; do not list explore / coverage / think as equal first choices.
|
|
406
|
-
|
|
407
|
-
### Deny / gate failure
|
|
124
|
+
Deny:
|
|
408
125
|
|
|
409
126
|
```text
|
|
410
|
-
[What failed in plain terms]. [
|
|
127
|
+
[What failed in plain terms]. [ruleId]. Next: [one fix].
|
|
411
128
|
```
|
|
412
129
|
|
|
413
|
-
Never
|
|
414
|
-
|
|
415
|
-
session** for a steward — split the PR.
|
|
416
|
-
|
|
417
|
-
```text
|
|
418
|
-
This change mixes the constitution with product files. Next: split the PR, or run a steward
|
|
419
|
-
--contract-session that touches only ark.config / arkrules / .ark-baseline.json.
|
|
420
|
-
```
|
|
421
|
-
|
|
422
|
-
### Healthy finished
|
|
423
|
-
|
|
424
|
-
Print “Healthy — nothing to do” **only** when the merge boundary is adopted as a **required**
|
|
425
|
-
GitHub status running `arkgate-check --strict-merge`, there is no leftover design work, and no
|
|
426
|
-
open top actions. An explicit `.ark/adoption-stance.json` `stance: "advisory-only"` ack is
|
|
427
|
-
adopted for honesty, but it is not this Healthy string. Workflow files on disk are not adopted.
|
|
428
|
-
|
|
429
|
-
---
|
|
430
|
-
|
|
431
|
-
## Compact router model
|
|
432
|
-
|
|
433
|
-
Keep short. Five doors only:
|
|
434
|
-
|
|
435
|
-
1. Point at **doctor** as status.
|
|
436
|
-
2. Session 0: **`/ark-adopt`**. Day-to-day new files: **`/ark-place`**.
|
|
437
|
-
3. Apply / leftover design: **`/ark-explore`** then **`/ark-autopilot`** (invoke = apply one refactor).
|
|
438
|
-
4. Bump: **`/ark-upgrade`**.
|
|
439
|
-
5. Full skill pack is optional expert depth — not a 13-name exam.
|
|
130
|
+
Never mock. Never “disable the rules to finish.” Never mix the config into
|
|
131
|
+
a product PR — that is an owner `--contract-session` (config change).
|
|
440
132
|
|
|
441
133
|
---
|
|
442
134
|
|
|
443
|
-
##
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
135
|
+
## Avoid (short)
|
|
136
|
+
|
|
137
|
+
- Fowler Gateway / API Gateway / facade / “abstraction layer” as the first sentence
|
|
138
|
+
- Leading with folders or the config before Write. Check. Ship. / the deny
|
|
139
|
+
- “Contract” as the first noun (without required CI the file is documentation — say so)
|
|
140
|
+
- Emoji rain, crush-it, fake amigo, “you don’t need to understand”
|
|
141
|
+
- Auto-fix-everything / magic codemod
|
|
142
|
+
- Suggest / Adapt / Enforce as settings you pick — they are lights (Setup / In progress / Ready)
|
|
143
|
+
- Skill-shopping thirteen names as onboarding
|
|
144
|
+
- “Healthy / done” while leftover design work remains
|
|
145
|
+
- “MCP is active” because a file exists
|
|
146
|
+
- Package AI decided pass/fail
|
|
147
|
+
- Depth scores, trust scores, Excellent module bands
|
|
148
|
+
- ArkRun as Postgres, an outbox, or Temporal
|
|
149
|
+
- New skill *names* without a live queue item
|
|
150
|
+
- “the house stays up” / “training wheels” / “mimo” on first contact
|
|
455
151
|
|
|
456
152
|
---
|
|
457
153
|
|
|
458
|
-
##
|
|
154
|
+
## Progressive disclosure
|
|
459
155
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
`STOP — invoke /ark-X` for work that door absorbs.
|
|
156
|
+
```text
|
|
157
|
+
npx arkgate start → start --apply → arkgate-check
|
|
158
|
+
→ (optional) skill pack → one command
|
|
159
|
+
```
|
|
465
160
|
|
|
466
|
-
|
|
467
|
-
|
|
161
|
+
Five commands, not a menu exam: adopt · place · autopilot · explore · upgrade.
|
|
162
|
+
Invoking a command **is** the approval. CLI checks; it does not silently rewrite.
|
|
468
163
|
|
|
469
164
|
---
|
|
470
165
|
|
|
471
166
|
## Checklist before shipping copy
|
|
472
167
|
|
|
168
|
+
- [ ] **Write. Check. Ship.** is on first-contact.
|
|
169
|
+
- [ ] Deny is `When the agent writes a bad import, the write doesn’t land.`
|
|
473
170
|
- [ ] One next action is obvious.
|
|
474
|
-
- [ ]
|
|
475
|
-
- [ ]
|
|
476
|
-
- [ ]
|
|
477
|
-
- [ ]
|
|
478
|
-
- [ ]
|
|
479
|
-
- [ ] Scan vs process is not blurred with package LLM pass/fail.
|
|
480
|
-
- [ ] Codes, sensors, and capabilities stay inside the guardrail catalog.
|
|
481
|
-
- [ ] Projection / AGENTS.md never claimed as enforcement.
|
|
482
|
-
- [ ] Seniors would not be embarrassed to paste the line into a PR.
|
|
483
|
-
- [ ] First-contact sentence would not read as Fowler Gateway, a folder linter, or a manifesto of intent.
|
|
484
|
-
- [ ] Bare “gate” is glossed as the write is rejected / the hook rejects the write / required CI on first use.
|
|
485
|
-
- [ ] “Contract” never appears as the first noun; without required CI, the file is named a manifesto.
|
|
171
|
+
- [ ] ArkGate / ArkRules / ArkRun are import rules / policies / experimental runtime.
|
|
172
|
+
- [ ] ArkRun is never implied durable / Postgres.
|
|
173
|
+
- [ ] Status lights read Setup / In progress / Ready to humans.
|
|
174
|
+
- [ ] No score, no false done, no Gateway as the first sentence, no “disable the rules”.
|
|
175
|
+
- [ ] A senior would paste the line into a PR without cringing.
|