arkgate 4.7.4 → 4.7.6

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.
@@ -1,485 +1,175 @@
1
1
  # ArkGate product voice
2
2
 
3
- Canonical English for public product surfaces: README, doctor/CLI human output, compact
4
- router, skill frontmatter, release notes, and agent-facing first-run copy.
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
- **Who this is for:** anyone writing or reviewing user-visible ArkGate text.
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
- ## Canonical misreader (old-school engineer)
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
- **Cause:** bare “gate” as the first unexplained noun; or verbs from the wrapper family:
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
- A Gateway **lets traffic through and translates**. ArkGate **decides whether the write
39
- enters**. It is not a layer in the app. It does not wrap Stripe, a database, or HTTP.
14
+ When the agent writes a bad import, the write doesn’t land.
15
+ The same check fails the pull request.
40
16
 
41
- ### Misread C “not a contract, a manifesto”
17
+ **ArkGate** is import rules for AI-written TypeScript. Always on once you adopt it.
42
18
 
43
- **Cause:** calling `ark.config.json` a **contract** (or leading with the file) before the
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
- They are right whenever the checkpoint is off. A contract in this reader’s dictionary has
48
- two parties and a consequence. Ours is: the host blocks the write; required CI blocks the
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
- Advisory-only adoption (`stance: "advisory-only"`, or no required merge status) is the
54
- honest manifesto case. Say so. Do not dress it as a binding contract.
55
-
56
- ### First-contact order (required)
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
- The 4.6.2 line `One architecture config. One check. One coach.` is **historical**. Do not
68
- lead with it. First-run CLI help stays under the AL04 noun budget.
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
- ADR 0001 keeps the product title **ArkGate Architecture Co-pilot for AI TypeScript**.
71
- That identity line is not a substitute for the deny.
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
- ## Common language (allowlist)
41
+ ## Locked first-contact
76
42
 
77
- First-contact copy (README hero, use/develop/hub openings, site home / start / how-it-works
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
- | Say | Do not say on first contact |
81
- |-----|-----------------------------|
82
- | illegal import / import rules / who may import whom | architecture config, contract, constitution, law |
83
- | the write is rejected / the hook rejects the write | write checkpoint, write gate, write firewall, pre-write block |
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
- **Categorical brands** (do not hide, do not replace with a synonym): **ArkGate**, **ArkRules**
92
- (opt-in extra rules inside a layer), **ArkRun** (opt-in; not required). Gloss once. Then the
93
- common word.
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
- **Command names stay command names:** `arkgate`, `arkgate-check --doctor`, `--strict-merge`.
96
- Do not nickname them.
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
- ## North star
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
- ## Sentence template
141
-
142
- Prefer three beats when a line teaches:
64
+ Three beats when a line teaches:
143
65
 
144
66
  ```text
145
- [plain fact]. [precise term + implication]. [one next action].
67
+ [plain fact]. [what it means]. [one next action].
146
68
  ```
147
69
 
148
- Examples:
149
-
150
- | Bad | Good |
151
- |-----|------|
152
- | Ship it 🚀 your architecture is crushed! | Import rules check out. Leftover design smells mean the tree is still messy. Next: `/ark-explore` shape-focus. |
153
- | You don’t need to understand anything. | Doctor reports one status light and one primary next action. Run `ark-check --doctor`. |
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
- ## Lexicon (prefer) 4.6 common words
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
- ```text
260
- scan → deterministic contract graph + host activation evidence
261
- process skills / human / host agent choose pilots and wording
262
- gate → same binary verdict on every parity-capable adapter
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
- | Surface | Language to use | Language to avoid |
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
- ## Progressive disclosure (product rule)
93
+ ## Still true (do not dilute)
341
94
 
342
- 1. **One primary path** — newcomer does not skill-shop among thirteen `/ark-*` skills.
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
- ```text
349
- npx arkgate start start --apply ark-check --doctor
350
- (optional) install skill pack /ark-autopilot
351
- ```
352
-
353
- Skills table in docs = **escapes / expert**, not a second onboarding track.
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
- ## Hero phrases (approved)
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
- ## Doctor / deny microcopy models
111
+ ## Status (CLI: `--doctor`)
390
112
 
391
- ### Status light (operating mode)
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
- Each model line follows the sentence template: **plain fact · term · next action**.
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
- | Light | Model line |
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]. [Rule or evidence id]. Next: [one fix path — /ark-autopilot, /ark-place, or /ark-adopt].
127
+ [What failed in plain terms]. [ruleId]. Next: [one fix].
411
128
  ```
412
129
 
413
- Never: mock the user, imply the gate is optional, or suggest disabling rules to “finish.”
414
- Never: tell an agent to edit `ark.config.json` to clear a product-PR red. That is a **contract
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
- ## Skill description model
444
-
445
- | Skill role | Frontmatter tone |
446
- |------------|------------------|
447
- | `/ark-adopt` | Session 0 write the path (greenfield + brownfield) |
448
- | `/ark-place` | New feature place **and write** |
449
- | `/ark-autopilot` | Apply A + one Shape refactor; invoke = approval |
450
- | `/ark-explore` | Map / dual-plan **seed** only |
451
- | `/ark-upgrade` | Preview then apply in-turn |
452
- | Others | Shortcut to a door above |
453
-
454
- Autonomy contract on every door. Never claim silent full-tree reshape from the compact router.
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
- ## Autonomy contract (skills)
154
+ ## Progressive disclosure
459
155
 
460
- Invoking a five-door skill **is** the approval. Write or map in the same turn.
461
-
462
- **CLI budget:** identity only if using MCP; one doctor / recommend / upgrade preview; then work;
463
- then check. Forbidden as the deliverable: dumping `--plan` JSON, “approve?”, or
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
- **Still never:** weaken the rules file; invent `mechanical-safe` kinds; claim finished
467
- while leftover design work remains; batch every Shape bet in one turn.
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
- - [ ] Status light is not a mode picker.
475
- - [ ] No false done under design-weak / incomplete analysis.
476
- - [ ] Technical terms present (rules file, import rules, ArkGate, ArkRules) without slang.
477
- - [ ] Leftover design work is never calleddone”.
478
- - [ ] Expert skills are labeled expert not the default curriculum.
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.