arkgate 4.6.4 → 4.6.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +39 -5
  2. package/README.md +6 -5
  3. package/bin/ark-check-runtime.mjs +98 -14
  4. package/bin/ark-mcp-runtime.mjs +18 -30
  5. package/bin/lib/adapter-contract.mjs +13 -9
  6. package/bin/lib/agent-projection-command.mjs +18 -0
  7. package/bin/lib/agent-projection.mjs +2 -2
  8. package/bin/lib/analysis-engine.mjs +5 -5
  9. package/bin/lib/ci-and-commands.mjs +3 -3
  10. package/bin/lib/ci-merge-boundary.mjs +89 -0
  11. package/bin/lib/config-contract.mjs +2 -0
  12. package/bin/lib/diagnostic-catalog.mjs +5 -4
  13. package/bin/lib/doctor-next-actions.mjs +17 -5
  14. package/bin/lib/doctor-plan.mjs +14 -0
  15. package/bin/lib/enforcement-honesty.mjs +2 -0
  16. package/bin/lib/graph-blind.mjs +15 -6
  17. package/bin/lib/install-migrate.mjs +10 -0
  18. package/bin/lib/invariant-coverage.mjs +6 -2
  19. package/bin/lib/managed-upgrade.mjs +8 -3
  20. package/bin/lib/presets.mjs +22 -0
  21. package/bin/lib/remediation.mjs +74 -10
  22. package/bin/lib/skill-install.mjs +2 -0
  23. package/bin/lib/snippet-analysis.mjs +40 -8
  24. package/dist/{configTypes-B8uIcLaG.d.ts → configTypes-l6XiwiC1.d.ts} +7 -0
  25. package/dist/eslint/index.cjs +3 -3
  26. package/dist/eslint/index.d.ts +1 -1
  27. package/dist/eslint/index.js +3 -3
  28. package/dist/index.cjs +26 -26
  29. package/dist/index.d.ts +11 -2
  30. package/dist/index.js +29 -29
  31. package/docs/README.md +3 -2
  32. package/docs/agent-guide.md +10 -0
  33. package/docs/brownfield-adoption.md +7 -1
  34. package/docs/configuration.md +2 -1
  35. package/docs/develop.md +4 -2
  36. package/docs/diagnostics.md +15 -5
  37. package/docs/package-surface.md +3 -2
  38. package/package.json +1 -1
  39. package/schemas/ark.config.schema.json +6 -0
  40. package/server.json +2 -2
  41. package/templates/agent-skills/README.md +1 -1
  42. package/templates/agent-skills/ark-adopt/SKILL.md +7 -0
  43. package/templates/agent-skills/ark-explore/SKILL.md +6 -0
  44. package/templates/agent-skills/ark-place/SKILL.md +11 -4
  45. package/templates/agent-skills/ark-upgrade/SKILL.md +9 -2
  46. package/templates/skills/ark-adopt.md +7 -0
  47. package/templates/skills/ark-explore.md +6 -0
  48. package/templates/skills/ark-place.md +11 -4
  49. package/templates/skills/ark-upgrade.md +9 -2
package/docs/README.md CHANGED
@@ -58,8 +58,9 @@ These are **not** the day-to-day product path. They stay in the repo for evidenc
58
58
  | Field adoption kit (scaffolding, not closed) | [field/](field/) |
59
59
  | Runtime hardening (experimental) | [production-hardening.md](production-hardening.md) |
60
60
 
61
- Current published: [releases/4.6.3.md](releases/4.6.3.md) (`arkgate@4.6.3` on npm `latest`).
62
- Prepared: [releases/4.6.4.md](releases/4.6.4.md) (Codex upgrade activation guidance; not yet published).
61
+ Current: [releases/4.6.5.md](releases/4.6.5.md) (`arkgate@4.6.5`).
62
+ Prior published: [releases/4.6.4.md](releases/4.6.4.md) (`arkgate@4.6.4` on npm `latest` until 4.6.5 lands).
63
+ Prior published: [releases/4.6.3.md](releases/4.6.3.md) (`arkgate@4.6.3`).
63
64
  Prior: [releases/4.6.2.md](releases/4.6.2.md) (`arkgate@4.6.2`).
64
65
  Previous: [releases/4.6.1.md](releases/4.6.1.md) · [releases/4.6.0.md](releases/4.6.0.md) · [releases/4.5.7.md](releases/4.5.7.md) · [releases/4.5.6.md](releases/4.5.6.md) · [releases/4.5.5.md](releases/4.5.5.md) · [releases/4.5.0.md](releases/4.5.0.md) · [releases/4.4.0.md](releases/4.4.0.md) · [releases/4.3.0.md](releases/4.3.0.md) · [releases/4.2.1.md](releases/4.2.1.md) · [releases/4.2.0.md](releases/4.2.0.md) · [releases/4.1.1.md](releases/4.1.1.md).
65
66
  Previous major: [releases/4.0.0.md](releases/4.0.0.md) (`arkgate@4.0.0`).
@@ -86,6 +86,16 @@ npx ark status --json --expected-root /abs/project/root
86
86
  npx ark-check --doctor --json
87
87
  ```
88
88
 
89
+ `--doctor --json` is a stable envelope (4.6.5+): `{ "schemaVersion": "1.0", "envelope": "doctor", "ok": boolean, "doctor": { … } }`.
90
+ Payload lives only under `doctor`. Do not parse sibling root keys as the doctor object.
91
+
92
+ Doctor also writes `.ark/ci-merge-boundary.json` (hook configured-not-fired, per-host writePath,
93
+ CI present-but-not-required, GitHub Free cannot require). Read that file — do not grep `node_modules`.
94
+ Hook green is not tree green (scripted edits bypass PreToolUse).
95
+
96
+ CLI-first: if the local CLI already resolved the project root, identity handshake is optional.
97
+ Do not wait on MCP “still connecting”. The same projection schema is merged into `AGENTS.md` and `CLAUDE.md`.
98
+
89
99
  Product path: [use.md — Session recipe](use.md#session-recipe-agent-turn).
90
100
 
91
101
  ### Multi-project MCP and upgrade honesty (4.5.6)
@@ -41,10 +41,16 @@ regenerate it unasked.
41
41
  | `app/api/**`, `src/app/api/**` | **ApplicationOrchestration** (orchestration shell) |
42
42
  | `pages/api/**`, `src/pages/api/**` | **ApplicationOrchestration** |
43
43
  | UI routes (`app/(…)`, `page.tsx`, `components/**`) | **PresentationAdapters** |
44
+ | Types / constants (`src/**/types/**`, `src/**/constants/**`) | **SharedKernel** |
45
+ | Wiring (`src/**/composition/**`, `src/**/factories/**`, `bootstrap.ts`) | **CompositionRoot** |
46
+ | `src/**/domain/**` | **DomainModel** |
47
+ | Flattened `src/lib/**` bag | **Not** Application as a whole — classify interiors (use-cases → Application; types → SharedKernel). Adopt never dumps bare `src/lib/**` into Application. |
44
48
 
45
49
  Without this split, broad `**/app/**` Presentation patterns push every API handler into UI and
46
50
  create a Presentation→Persistence tsunami. Specificity still wins: more-specific Application
47
- globs beat Presentation. ArkRules stay **opt-in** (not forced on by start/adopt).
51
+ globs beat Presentation. Adopt writes `.ark/golden-pattern.json` (load-bearing for `/ark-place`).
52
+ `ark_place` requires `filePath` (fail-closed — never invents `components/*.tsx` or defaults to Presentation).
53
+ ArkRules stay **opt-in** (not forced on by start/adopt).
48
54
 
49
55
  ### Composition-root / factory modules (optional Application-only)
50
56
 
@@ -90,6 +90,7 @@ Layer fields:
90
90
 
91
91
  - `name`, `patterns`, `exclude`, `description`
92
92
  - `intentPrefixes`, `forbiddenGlobals`, `mayImportInfrastructure`, `optional`
93
+ - `reserved` / `allowEmpty` — future houses whose globs match nothing yet. `--strict-config` does not fail; `CONFIG_LAYER_PATTERN_NO_MATCHES` (typo warning) is skipped. A typo warning fires only when the glob is not reserved.
93
94
  - `capabilities: { deny: [...] }` — opt-in effect walls over the seven capability ids
94
95
  (`network`, `filesystem`, `clock`, `randomness`, `environment`, `process`, `persistence`);
95
96
  `pure: true` is the shorthand that denies all seven. Absence changes no verdict.
@@ -254,7 +255,7 @@ now shows more authors, it shows the **gap** and asks whether to update. `/ark-a
254
255
  writes only after you confirm — it does not invent names or remove entries.
255
256
 
256
257
  ```json
257
- "stewards": ["pedroknigge", "Amarilla-David"]
258
+ "stewards": ["you", "your-co-steward"]
258
259
  ```
259
260
 
260
261
  Law files (`ark.config.json`, `arkrules/*`, `.ark-baseline.json`) are a different change
package/docs/develop.md CHANGED
@@ -106,10 +106,12 @@ Sensors:
106
106
  ```bash
107
107
  npx arkgate-check --plan
108
108
  npx arkgate-check --coverage
109
- npx arkgate-check --doctor --json # improvementCompass (notAScore lenses) + status light
109
+ npx arkgate-check --doctor --json # stable envelope { schemaVersion, envelope:"doctor", ok, doctor }
110
110
  ```
111
111
 
112
- Doctor residual lenses never flip `valid` / strict-merge alone. Product path:
112
+ `--doctor --json` payload lives only under `doctor`. Doctor also writes `.ark/ci-merge-boundary.json`
113
+ (writePath per host, hook configured-not-fired, CI present-but-not-required, GitHub Free cannot
114
+ require). Hook green is not tree green. Doctor residual lenses never flip `valid` / strict-merge alone. Product path:
113
115
  [use.md — Improvement compass](use.md#improvement-compass-not-a-score).
114
116
 
115
117
  Agent reference (tools, skills, dual path): [agent-guide.md](agent-guide.md).
@@ -56,6 +56,7 @@ Link form for agents: `docs/diagnostics.md#RULE_ID` (exact-case HTML anchors bel
56
56
  | [`ATOMIC_PREFLIGHT_UNAVAILABLE`](#ATOMIC_PREFLIGHT_UNAVAILABLE) | preflight | Atomic preflight unavailable |
57
57
  | [`DESIGN_SMELL_REGRESSION`](#DESIGN_SMELL_REGRESSION) | preflight | Design smell regression on base-relative ratchet |
58
58
  | [`ANALYSIS_PARSE_INCOMPLETE`](#ANALYSIS_PARSE_INCOMPLETE) | analysis | Parse incomplete |
59
+ | [`LEXICAL_EVIDENCE_INCOMPLETE`](#LEXICAL_EVIDENCE_INCOMPLETE) | analysis | Lexical evidence incomplete |
59
60
  | [`ANALYSIS_HOST_UNAVAILABLE`](#ANALYSIS_HOST_UNAVAILABLE) | analysis | Analysis host unavailable |
60
61
  | [`ADAPTER_NOT_ALLOWED_FOR_PORT`](#ADAPTER_NOT_ALLOWED_FOR_PORT) | adapter | Adapter not allowed for port |
61
62
  | [`FORBIDDEN_PATTERN`](#FORBIDDEN_PATTERN) | snippet-policy | Forbidden regex pattern |
@@ -89,7 +90,7 @@ Link form for agents: `docs/diagnostics.md#RULE_ID` (exact-case HTML anchors bel
89
90
  **Layer import not allowed**
90
91
 
91
92
  - **Why:** A module import (or re-export) crosses a layer edge that ark.config.json does not allow. The architecture contract forbids that dependency direction so outer infrastructure cannot leak into pure or inner layers.
92
- - **Fix:** Define a port in the source layer, inject the outer-layer implementation, or move/share the type with `import type` when the edge is type-only then preflight again. Do not weaken the layer rule without a hash-bound policy acknowledgement.
93
+ - **Fix:** Branch by import kind: constants/types/pure → adopt into DomainModel or SharedKernel (do not invent a port); kernel/events/bootstrap from Persistence inject a port or move the map to SharedTypes (Persistence must not emit); define a port only when the target is a real use-case. Type-only edges use `import type`. Then preflight again. Do not weaken the layer rule without a hash-bound policy acknowledgement.
93
94
 
94
95
  <a id="LAYER_INTENT_REFERENCE_VIOLATION"></a>
95
96
 
@@ -267,8 +268,8 @@ Link form for agents: `docs/diagnostics.md#RULE_ID` (exact-case HTML anchors bel
267
268
 
268
269
  **Invariant without coverage evidence**
269
270
 
270
- - **Why:** An ArkRules invariant is under contract but no covering test title or declared symbol evidence was found (or coverage is partial).
271
- - **Fix:** Add a test title or declared symbol covering the arkruleId, then preflight again. Missing test globs report partial — never fake green.
271
+ - **Why:** An ArkRules invariant is under contract but no covering test title or declared symbol evidence was found (or coverage is partial). Kind is `never-had-tests` (adopt residual) vs `tests-disappeared` (suite exists).
272
+ - **Fix:** Add a test title or declared symbol covering the arkruleId, then preflight again. Treat never-had-tests as adopt residual; treat tests-disappeared as a regression. Missing test globs report partial — never fake green.
272
273
 
273
274
  ## Atomic preflight and change sets
274
275
 
@@ -379,8 +380,17 @@ Link form for agents: `docs/diagnostics.md#RULE_ID` (exact-case HTML anchors bel
379
380
 
380
381
  **Parse incomplete**
381
382
 
382
- - **Why:** Governed source could not be fully parsed; analysis is partial and must not paint green.
383
- - **Fix:** Fix syntax/parse errors in governed files (or restore a usable TypeScript host), then re-run. Partial never means pass.
383
+ - **Why:** Governed source could not be fully parsed; evidence includes the TypeScript diagnostic (line + message). Incremental mid-edit parse is normal for agents. Contract `exclude` paths skip the write hook.
384
+ - **Fix:** Finish the source or fix the reported syntax error, then re-run `npx arkgate-check`. The write hook does not deny solely on mid-edit parse. Partial never means pass.
385
+
386
+ <a id="LEXICAL_EVIDENCE_INCOMPLETE"></a>
387
+
388
+ ### `LEXICAL_EVIDENCE_INCOMPLETE`
389
+
390
+ **Lexical evidence incomplete**
391
+
392
+ - **Why:** Single-file validation cannot prove project module resolution. The write hook is already the verdict.
393
+ - **Fix:** Re-run `npx arkgate-check --root . --config ark.config.json`, or treat the hook deny as final. Do not call `ark_prepare_change` from a hook deny.
384
394
 
385
395
  <a id="ANALYSIS_HOST_UNAVAILABLE"></a>
386
396
 
@@ -211,8 +211,9 @@ production deployment would need to satisfy; it is not a readiness certification
211
211
  ## Release notes (maintainers)
212
212
 
213
213
  Ship notes for a version live under [releases/](https://github.com/pedroknigge/arkgate/tree/main/docs/releases)
214
- (prepared: [4.6.4.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.6.4.md);
215
- current published: [4.6.3.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.6.3.md);
214
+ (current: [4.6.5.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.6.5.md);
215
+ prior published: [4.6.4.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.6.4.md);
216
+ prior published: [4.6.3.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.6.3.md);
216
217
  prior published: [4.6.2.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.6.2.md), [4.6.1.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.6.1.md), [4.6.0.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.6.0.md), [4.5.7.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.5.7.md), [4.5.6.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.5.6.md), [4.5.0.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.5.0.md), [4.4.0.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.4.0.md), [4.3.0.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.3.0.md),
217
218
  [4.2.1.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.2.1.md);
218
219
  previous: [4.2.0.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.2.0.md),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkgate",
3
- "version": "4.6.4",
3
+ "version": "4.6.5",
4
4
  "description": "One architecture config. One check. One coach.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -723,6 +723,12 @@
723
723
  },
724
724
  "optional": {
725
725
  "type": "boolean"
726
+ },
727
+ "reserved": {
728
+ "type": "boolean"
729
+ },
730
+ "allowEmpty": {
731
+ "type": "boolean"
726
732
  }
727
733
  }
728
734
  },
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/pedroknigge/arkgate",
7
7
  "source": "github"
8
8
  },
9
- "version": "4.6.4",
9
+ "version": "4.6.5",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "arkgate",
14
- "version": "4.6.4",
14
+ "version": "4.6.5",
15
15
  "runtimeHint": "npx",
16
16
  "transport": {
17
17
  "type": "stdio"
@@ -7,7 +7,7 @@
7
7
  This directory is the **Agent Skills–compatible** packaging of the same **13**
8
8
  `/ark-*` skills shipped as flat templates for Ark install. **No new skill names.**
9
9
 
10
- Package version when last generated context: **arkgate@4.6.4**
10
+ Package version when last generated context: **arkgate@4.6.5**
11
11
  Schema: agent-skills package contract `1.0`
12
12
 
13
13
  ## Skills (frozen catalog)
@@ -14,6 +14,13 @@ description: Session 0 — mark the Ark path. Greenfield scaffold or brownfield
14
14
  2. Write `ark.config.json` (and a baseline only for genuine debt) in this turn.
15
15
  3. Re-run doctor. Day-to-day new files: `/ark-place`.
16
16
 
17
+ ## Checklist
18
+
19
+ - Existing tree: propose **SharedKernel** (types/constants) + **CompositionRoot** (wiring) + `src/**/domain/**`. Never dump bare `src/lib/**` into Application.
20
+ - Generate `.ark/golden-pattern.json` (load-bearing for `/ark-place`).
21
+ - Future houses: mark unused layer globs `reserved` / `allowEmpty` so `--strict-config` does not fail.
22
+ - CLI-first: if `arkgate-check` already resolved the root, do not wait on MCP.
23
+
17
24
  Invoking this skill **is** the approval. Write the architecture config in this turn.
18
25
  Greenfield: scaffold like `--recommend`. Brownfield: match **product
19
26
  reality**, freeze only genuine debt. A green check over a wrong config is a **false green**.
@@ -14,6 +14,12 @@ description: Map skill — decision-grade recon of layers + ArkRules opportuniti
14
14
  2. Open the real tree (≥12 files across ≥4 dirs). CLI JSON alone is incomplete.
15
15
  3. Rank leftover work. Hand off to `/ark-autopilot` to apply one refactor. Do not write config or product code here.
16
16
 
17
+ ## Checklist
18
+
19
+ - Doctor #1: if ENFORCE + empty plan A and gates are already installed → **Shape** (`/ark-explore` then `/ark-autopilot`). Do not say install-agent-gates.
20
+ - Distinguish **missing** skills vs **stale** catalog. Installed ≠ stale.
21
+ - Hook green is not tree green (scripted edits bypass PreToolUse).
22
+
17
23
  ## Autonomy contract
18
24
 
19
25
  Invoking this skill **is** the approval to **map**. Open the real tree. CLI JSON alone is
@@ -10,16 +10,23 @@ description: "Where does new code go? Names the layer, directory, and naming for
10
10
 
11
11
  ## Steps
12
12
 
13
- 1. Bind identity if using MCP (`ark_identity` with the exact project root).
14
- 2. Place the file (`ark_place` or read `ark.config.json`).
13
+ 1. CLI-first: if the local CLI already resolved the root, skip waiting on MCP. Identity is optional then.
14
+ 2. Place with **filePath required** (`ark_place` or read `ark.config.json` + `.ark/golden-pattern.json`). Fail-closed without a path — never invent `components/*.tsx` or default to Presentation.
15
15
  3. Write it there. Then `arkgate-check`.
16
16
 
17
+ ## Checklist
18
+
19
+ - `filePath` is known before the call. Description alone is not a path.
20
+ - Golden pattern is load-bearing when present. Adopt generates it.
21
+ - Do not default a repository to Presentation.
22
+
17
23
  ## Autonomy contract
18
24
 
19
25
  Invoking this skill **is** the approval. If the user described an artifact, **write the
20
26
  files** in this turn (prepare-write + scaffold). A path table alone is incomplete.
21
- The CLI is a **sensor and gate**. **CLI budget:** `ark_identity` then `ark_place` (or
22
- read `ark.config.json`); write; `ark-check`. Do not ask which layer they prefer.
27
+ The CLI is a **sensor and gate**. **CLI budget:** `ark_identity` then `ark_place` when using MCP
28
+ (or skip identity if the CLI already resolved the root); otherwise read `ark.config.json`; write;
29
+ `ark-check`. Do not ask which layer they prefer.
23
30
 
24
31
  **Still never:** weaken `ark.config.json`; invent `mechanical-safe` kinds; claim leftover
25
32
  design work is finished because one file landed.
@@ -10,10 +10,17 @@ description: Upgrade ArkGate through a content-identity preview, preserve custom
10
10
 
11
11
  ## Steps
12
12
 
13
- 1. Preview: `arkgate upgrade` (no writes).
14
- 2. Apply in this turn: `arkgate upgrade --apply` (needs `--plan-digest` when applying managed files).
13
+ 1. Preview: `arkgate upgrade` (no writes). Default is **hosts keep** — do not retire other hosts’ skills.
14
+ 2. Apply in this turn: `arkgate upgrade --apply` (installs the bumped package unless `--no-install`). Needs `--plan-digest` when applying managed files.
15
15
  3. Re-run `arkgate-check --doctor`. Customized files stay unless you pass `--accept-conflicts` / `--refresh-skills`.
16
16
 
17
+ ## Checklist
18
+
19
+ - Preview unions `--tools` with hosts already in the repo. Multi-agent trees keep every host.
20
+ - Apply must run the package install of the new pin. Do not skip `npm install` unless `--no-install` is explicit.
21
+ - Refresh AGENTS.md **and** CLAUDE.md (same projection schema).
22
+ - Prefer project `.agents/skills`. Do not duplicate the catalog into `~/.codex/skills`.
23
+
17
24
  The preview is the source of truth. Do not treat a filename or package version as proof of ownership.
18
25
 
19
26
  ## Autonomy contract
@@ -14,6 +14,13 @@ description: Session 0 — mark the Ark path. Greenfield scaffold or brownfield
14
14
  2. Write `ark.config.json` (and a baseline only for genuine debt) in this turn.
15
15
  3. Re-run doctor. Day-to-day new files: `/ark-place`.
16
16
 
17
+ ## Checklist
18
+
19
+ - Existing tree: propose **SharedKernel** (types/constants) + **CompositionRoot** (wiring) + `src/**/domain/**`. Never dump bare `src/lib/**` into Application.
20
+ - Generate `.ark/golden-pattern.json` (load-bearing for `/ark-place`).
21
+ - Future houses: mark unused layer globs `reserved` / `allowEmpty` so `--strict-config` does not fail.
22
+ - CLI-first: if `arkgate-check` already resolved the root, do not wait on MCP.
23
+
17
24
  Invoking this skill **is** the approval. Write the architecture config in this turn.
18
25
  Greenfield: scaffold like `--recommend`. Brownfield: match **product
19
26
  reality**, freeze only genuine debt. A green check over a wrong config is a **false green**.
@@ -14,6 +14,12 @@ description: Map skill — decision-grade recon of layers + ArkRules opportuniti
14
14
  2. Open the real tree (≥12 files across ≥4 dirs). CLI JSON alone is incomplete.
15
15
  3. Rank leftover work. Hand off to `/ark-autopilot` to apply one refactor. Do not write config or product code here.
16
16
 
17
+ ## Checklist
18
+
19
+ - Doctor #1: if ENFORCE + empty plan A and gates are already installed → **Shape** (`/ark-explore` then `/ark-autopilot`). Do not say install-agent-gates.
20
+ - Distinguish **missing** skills vs **stale** catalog. Installed ≠ stale.
21
+ - Hook green is not tree green (scripted edits bypass PreToolUse).
22
+
17
23
  ## Autonomy contract
18
24
 
19
25
  Invoking this skill **is** the approval to **map**. Open the real tree. CLI JSON alone is
@@ -10,16 +10,23 @@ description: "Where does new code go? Names the layer, directory, and naming for
10
10
 
11
11
  ## Steps
12
12
 
13
- 1. Bind identity if using MCP (`ark_identity` with the exact project root).
14
- 2. Place the file (`ark_place` or read `ark.config.json`).
13
+ 1. CLI-first: if the local CLI already resolved the root, skip waiting on MCP. Identity is optional then.
14
+ 2. Place with **filePath required** (`ark_place` or read `ark.config.json` + `.ark/golden-pattern.json`). Fail-closed without a path — never invent `components/*.tsx` or default to Presentation.
15
15
  3. Write it there. Then `arkgate-check`.
16
16
 
17
+ ## Checklist
18
+
19
+ - `filePath` is known before the call. Description alone is not a path.
20
+ - Golden pattern is load-bearing when present. Adopt generates it.
21
+ - Do not default a repository to Presentation.
22
+
17
23
  ## Autonomy contract
18
24
 
19
25
  Invoking this skill **is** the approval. If the user described an artifact, **write the
20
26
  files** in this turn (prepare-write + scaffold). A path table alone is incomplete.
21
- The CLI is a **sensor and gate**. **CLI budget:** `ark_identity` then `ark_place` (or
22
- read `ark.config.json`); write; `ark-check`. Do not ask which layer they prefer.
27
+ The CLI is a **sensor and gate**. **CLI budget:** `ark_identity` then `ark_place` when using MCP
28
+ (or skip identity if the CLI already resolved the root); otherwise read `ark.config.json`; write;
29
+ `ark-check`. Do not ask which layer they prefer.
23
30
 
24
31
  **Still never:** weaken `ark.config.json`; invent `mechanical-safe` kinds; claim leftover
25
32
  design work is finished because one file landed.
@@ -10,10 +10,17 @@ description: Upgrade ArkGate through a content-identity preview, preserve custom
10
10
 
11
11
  ## Steps
12
12
 
13
- 1. Preview: `arkgate upgrade` (no writes).
14
- 2. Apply in this turn: `arkgate upgrade --apply` (needs `--plan-digest` when applying managed files).
13
+ 1. Preview: `arkgate upgrade` (no writes). Default is **hosts keep** — do not retire other hosts’ skills.
14
+ 2. Apply in this turn: `arkgate upgrade --apply` (installs the bumped package unless `--no-install`). Needs `--plan-digest` when applying managed files.
15
15
  3. Re-run `arkgate-check --doctor`. Customized files stay unless you pass `--accept-conflicts` / `--refresh-skills`.
16
16
 
17
+ ## Checklist
18
+
19
+ - Preview unions `--tools` with hosts already in the repo. Multi-agent trees keep every host.
20
+ - Apply must run the package install of the new pin. Do not skip `npm install` unless `--no-install` is explicit.
21
+ - Refresh AGENTS.md **and** CLAUDE.md (same projection schema).
22
+ - Prefer project `.agents/skills`. Do not duplicate the catalog into `~/.codex/skills`.
23
+
17
24
  The preview is the source of truth. Do not treat a filename or package version as proof of ownership.
18
25
 
19
26
  ## Autonomy contract