New:Socket for Asana Is Now Available.Learn more
Sign In

arkgate

Package Overview
Dependencies
Maintainers
1
Versions
68
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

arkgate - npm Package Compare versions

Comparing version
4.7.2
to
4.7.3
+1
-1
bin/lib/html-report-depth.mjs

@@ -231,3 +231,3 @@ /**

case 'repair':
return 'Hard write hook with repair payload — best co-pilot path for the active host.';
return 'Hard write hook with repair payload — best write path for the active host.';
case 'reject-only':

@@ -234,0 +234,0 @@ return 'Hard write boundary without repair payload; edits can be blocked without guided re-entry.';

@@ -8,2 +8,20 @@ # Changelog

## 4.7.3 — 2026-08-25
**Patch** over **4.7.2**. Remaining first-contact copy: README H1, below-fold headings,
product-voice lexicon, live site pages, and doctor HTML strings. Same deny.
**No required config migration.** Does not close Z09 / K01.
**Status: prepared** (not on npm `latest` until publish; see `docs/releases/4.7.3.md`).
### Changed
- **README H1** is the deny, not “Architecture Co-pilot”. Below the fold: two kinds of
rules (not “two planes”); required CI is the hard line (not “merge gate”).
- **Product voice** North star and lexicon prefer rules file / the write is rejected /
doctor. Allowlist wins.
- **npm keywords** drop `co-pilot` / `write-gate`.
- **Doctor HTML** strings drop co-pilot. ADR 0001 product title unchanged. Historical
4.6.2 three-beat line stays in that release note.
## 4.7.2 — 2026-08-25

@@ -16,4 +34,3 @@

**Status: prepared** (see `docs/releases/4.7.2.md`). npm `latest` remains **4.7.1** until
this patch is published.
**Status: published** (on npm `latest`; see `docs/releases/4.7.2.md`).

@@ -20,0 +37,0 @@ ### Changed

@@ -33,3 +33,3 @@ # Gating AI Agents with ArkGate

Everything below uses the same `ark.config.json` as `arkgate-check` / `ark-check` (CI) — one
contract shared by every surface. From **4.0**, optional **ArkRules** (`arkRules` map +
rules file shared by every surface. From **4.0**, optional **ArkRules** (`arkRules` map +
`arkrules/*.json`) ride the **same** write path, doctor, and CI adapter; absence of ArkRules

@@ -36,0 +36,0 @@ does not change inter-layer verdicts. Label residual **`[Layer]`** vs **`[ArkRules]`**. See

@@ -21,3 +21,3 @@ # Develop with ArkGate

Make the architecture check a **required** merge **status context** (GitHub/GitLab/etc.). The CLI
Make the import-rules check a **required** merge **status context** (GitHub/GitLab/etc.). The CLI
command is `arkgate-check --strict-merge` / `ark-check --strict-merge` — the hard boundary is

@@ -32,3 +32,3 @@ requiring that job’s status, not merely adding a workflow file:

Generated workflows also gate `--fail-on-new-smells --base-ref` so a first push with an all-zero
`github.event.before` still runs the full merge gate without a broken delta (see
`github.event.before` still runs the full required CI check without a broken delta (see
[ai-gates.md](ai-gates.md#ci-backstop)).

@@ -40,9 +40,9 @@

Local write hardness **differs by host**. CI required status is the shared hard merge gate.
Local write hardness **differs by host**. CI required status is the shared hard merge line.
| Host | Local write | MCP | Merge |
|------|-------------|-----|-------|
| Claude · Grok · Antigravity | Pre-write block when installed + trusted | Advisory | Required status context |
| Cursor | Pre-write block for Write/StrReplace when `.cursor/hooks.json` is trusted | Advisory | Required status context |
| Codex CLI · local Desktop/App Server | Pre-write block for complete `apply_patch` when `.codex/hooks.json` is trusted | Advisory | Required status context |
| Claude · Grok · Antigravity | Hook rejects the write when installed + trusted | Advisory | Required status context |
| Cursor | Hook rejects Write/StrReplace when `.cursor/hooks.json` is trusted | Advisory | Required status context |
| Codex CLI · local Desktop/App Server | Hook rejects complete `apply_patch` when `.codex/hooks.json` is trusted | Advisory | Required status context |
| OpenCode | Warning only (not blocked) | Advisory | Required status context |

@@ -49,0 +49,0 @@

@@ -1,2 +0,2 @@

# ArkGate — Architecture Co-pilot (enthusiast track)
# ArkGate — enthusiast track

@@ -17,16 +17,16 @@ If the AI writes an illegal import, the write is rejected. The same check fails the pull

**Operating mode** — what Ark is doing right now (one contract underneath):
**Operating mode** — what Ark is doing right now (one rules file underneath):
| Mode | Meaning |
|------|---------|
| **Suggest** | Propose an application shape and install a starter contract. |
| **Adapt** | Match the contract to your real layout / raise governed coverage. |
| **Enforce** | The contract covers the real code and checked edges are clean; host/CI guarantees remain separate. |
| **Suggest** | Propose an application shape and install a starter rules file. |
| **Adapt** | Match the rules file to your real layout / raise governed coverage. |
| **Enforce** | The rules cover the real code and checked edges are clean; host/CI guarantees remain separate. |
`ark start` and `ark-check --plan` will not claim "everything is guarded" while governed coverage is near zero. On Nest/Next/express starters, init also merges **framework filename conventions** into the layer globs so day-one coverage is real.
### Two planes (4.0 — optional second plane)
### Two kinds of rules (4.0 — optional extra)
| Plane | Plain English |
|-------|---------------|
| Kind | Plain English |
|------|---------------|
| **Layers** | Who may import whom (always on after start) |

@@ -33,0 +33,0 @@ | **ArkRules** (optional) | Habits *inside* a layer — structure and named invariants as data |

@@ -69,3 +69,3 @@ # ArkGate package surface policy

| **Config JSON Schema** | `arkgate/schema` or `arkgate/schema/ark.config.schema.json` | Stable package resource subpaths for editor completion and contract tooling. |
| **Agent skills** | `/ark-*` templates; install via `--install-agent-gates` (often `--skills-only` on top of compact) **or** Agent Skills ecosystem path | **Day zero** is the compact router from `ark start` / `start --apply` + doctor control plane — not the full skill pack. Skill *names* (frozen **13**) and the guided expert path (`/ark-autopilot` after pack install) are stable; internal skill prose may evolve. **4.0:** all skills except experimental `/ark-runtime` integrate **layers + ArkRules** and must label residual `[Layer]` vs `[ArkRules]`. **4.2:** repo catalogs are content-idempotent; the optional shared Codex home catalog is monotonic across 4.2.0+ installers. Pre-4.2 writers are outside that protocol and must be upgraded first. A durable pending-catalog journal preserves the floor across an interrupted install and is cleared only by its owning same/newer recovery. **4.3:** Agent Skills–compatible layout at `templates/agent-skills/<name>/SKILL.md` (1:1 with flat `templates/skills/*.md`); install via `npx skills add ./node_modules/arkgate/templates/agent-skills` (or the GitHub tree). Domain `ARK_SKILL_NAMES` + `validateAgentSkillsPackage`; drift `npm run check:agent-skills`. Skills never enforce. |
| **Agent skills** | `/ark-*` templates; install via `--install-agent-gates` (often `--skills-only` on top of compact) **or** Agent Skills ecosystem path | **Day zero** is the compact router from `ark start` / `start --apply` + doctor — not the full skill pack. Skill *names* (frozen **13**) and the guided expert path (`/ark-autopilot` after pack install) are stable; internal skill prose may evolve. **4.0:** all skills except experimental `/ark-runtime` integrate **layers + ArkRules** and must label residual `[Layer]` vs `[ArkRules]`. **4.2:** repo catalogs are content-idempotent; the optional shared Codex home catalog is monotonic across 4.2.0+ installers. Pre-4.2 writers are outside that protocol and must be upgraded first. A durable pending-catalog journal preserves the floor across an interrupted install and is cleared only by its owning same/newer recovery. **4.3:** Agent Skills–compatible layout at `templates/agent-skills/<name>/SKILL.md` (1:1 with flat `templates/skills/*.md`); install via `npx skills add ./node_modules/arkgate/templates/agent-skills` (or the GitHub tree). Domain `ARK_SKILL_NAMES` + `validateAgentSkillsPackage`; drift `npm run check:agent-skills`. Skills never enforce. |
| **ESLint subpath** | `arkgate/eslint` | Config-driven layer/import/purity rules plus ArkRun import/`new` envelope (`ark/no-arkrun-kernel-in-domain`, `ark/no-arkrun-direct-new`, `ark/no-arkrun-transport-bypass`) when `arkRun` is on; loads consumer `ark.config.json`. Absence of the extra is silent. Missing-root and undeclared-* stay CLI/MCP. |

@@ -218,4 +218,4 @@ | **GitHub Action** | `pedroknigge/arkgate` (see `action.yml`) | The `uses:` tag/SHA selects the checker source; `version` remains an optional exact npm compatibility override. |

Ship notes for a version live under [releases/](https://github.com/pedroknigge/arkgate/tree/main/docs/releases)
(current tree: [4.7.2.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.7.2.md);
current published: [4.7.1.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.7.1.md);
(current tree: [4.7.3.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.7.3.md);
current published: [4.7.2.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.7.2.md);
prior published: [4.7.0.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.7.0.md);

@@ -222,0 +222,0 @@ prior published: [4.6.7.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.6.7.md);

@@ -111,24 +111,24 @@ # ArkGate product voice

- **Checkpoint side (write checkpoint — deny / pass; not a Gateway):** architecture
config (`ark.config.json`) + pre-write block where the host supports it + required CI.
Deterministic. Don’t show green if we could not verify.
Two planes: **import rules** (who may import whom) always; **ArkRules** (structure rules
inside a layer) opt-in. Third extra: **ArkRun** (kernel usage + declarations) via companion
`@arkgate/runtime` — not a durability claim.
- **Coach side:** where code belongs, who talks to whom, how; fix imports first, then leftover
design work; one small refactor at a time; never silent auto-reshape; never weaken the config.
- **Five-door autonomy:** invoking `/ark-adopt`, `/ark-place`, `/ark-autopilot`, `/ark-explore`,
or `/ark-upgrade` **is** the approval. The agent writes or maps in that turn. CLI/MCP are
sensor + checkpoint. Silent reshape from the compact router (unasked) stays forbidden.
- **Team parliament:** the architecture file is a **constitution**. A product change must not
amend it. Stewards own loosen and baseline-grow. The ratchet is **new vs the branch you
- **Reject the write. Fail the PR.** Rules file (`ark.config.json`) + the hook rejects listed
writes where the host supports it + required CI. Deterministic. Don’t show green if we could
not verify. Two kinds of rules: **import rules** (who may import whom) always; **ArkRules**
(extra rules inside a layer) opt-in. Optional extra: **ArkRun** (kernel usage + declarations)
via companion `@arkgate/runtime` — not a durability claim. Not a Gateway.
- **Where code belongs:** who talks to whom, and how; fix illegal imports first, then leftover
design work; one small refactor at a time; never silent auto-reshape; never weaken the rules
file.
- **Five doors:** invoking `/ark-adopt`, `/ark-place`, `/ark-autopilot`, `/ark-explore`,
or `/ark-upgrade` **is** the approval. The agent writes or maps in that turn. CLI/MCP check;
they do not silently rewrite. Silent reshape from the compact router (unasked) stays forbidden.
- **Team:** the rules file is a different change type than product code. A product change must
not amend it. Stewards own loosen and baseline-grow. The ratchet is **new vs the branch you
merge to**, not only the file on this checkout. A small PR pays `--changed --base`, not
the whole tree. Humans who never hit the write hook are allowed to ignore Ark.
- **Agent contract surface (4.3.0):** agents read **guardrail catalogs** and **scan** evidence;
they **process** (judge / coach) outside the package. Projection and skills never become the
pass/fail gate.
- **Improvement compass (4.4.0):** residual architecture work is named as **lenses** (SoC, DIP,
- **Agent surface (4.3.0):** agents read **guardrail catalogs** and **scan** evidence;
they **judge** outside the package. Projection and skills never become the
pass/fail check.
- **Improvement compass (4.4.0):** leftover architecture work is named as **lenses** (SoC, DIP,
domain alignment, …) projected from existing sensors — **never** a 0–10 score or Excellent/Good
rank. Out-of-scope lenses (perf, app security tooling, full resilience) stay honest.
- **Vibe-coder dual depth:** human doctor and skills lead with plain outcomes and one next move;
- **Dual depth:** human doctor and skills lead with plain outcomes and one next move;
experts keep full JSON. Full-AI workflows get the same single door — not a skill menu exam.

@@ -170,8 +170,8 @@ - **False done is forbidden:** “Rules on” ≠ elegant design. Leftover design work must not

|----------------|------------|---------|
| **architecture config** | contract | `ark.config.json` layers, rules, include. Never the first noun. Without the checkpoint, this reader hears **manifesto** |
| **manifesto** (honesty only) | advisory-only / no required CI | What the file is until a write checkpoint binds it. Never the product name |
| **rules file** (`ark.config.json`) | contract / architecture config | Layers, rules, include. Never the first noun. Without required CI, this reader hears **manifesto** |
| **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 |
| **import rules** / **allowed dependencies** | Layers plane / edges | Who may import whom; placement, purity, isolation |
| **ArkRules** (opt-in; gloss: structure rules inside a layer) | ArkRules | Intra-layer sensors + domain invariant catalogs (`arkrules/*`) |
| **ArkRun** (opt-in; gloss: kernel usage + complete declarations) | arkRun | Extra plane on the gate; companion kernel is `@arkgate/runtime`; factory `createStrictArkKernel` (per instance, no singleton). Never a score. |
| **advisory ArkRules** | advisory ArkRules | Default sensor mode — **not** merge teeth; does not fail CI/merge alone |
| **ArkRules** (opt-in; gloss: extra rules inside a layer) | ArkRules | Structure sensors + domain invariant catalogs (`arkrules/*`). Off unless you turn it on. |
| **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. |
| **advisory ArkRules** | advisory ArkRules | Default sensor mode — does not fail CI/merge alone |
| **extra merge checks** | extraMergeTeeth | Only when enforced structure/invariant rules exist **and** classification is honest |

@@ -181,5 +181,5 @@ | **label `[Layer]` vs `[ArkRules]`** | dual-plane residual | Never blur import-rule findings with ArkRules findings |

| **type-only import debt** | type-only placement debt | `import type` on the violations list with `failsStrict:false` |
| **write checkpoint** | gate (as first noun) | Pass/fail boundary: pre-write block + required CI. **Not** Fowler Gateway, not a resource wrapper, not a layer in the app |
| **pre-write block** | hard write | Host actually blocks listed edit ops (installed + trusted) |
| **warning only (not blocked)** | advisory write | MCP/rules coach; not a hard block |
| **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 |
| **the hook rejects the write** | hard write / pre-write block | Host actually blocks listed edit ops (installed + trusted) |
| **warning only (not blocked)** | advisory write | MCP/rules warn; not a hard block |
| **import graph** | edges | Allowed imports (fix these first) |

@@ -190,3 +190,3 @@ | **baseline** | baseline | Frozen known debt; does not make a wrong config honest |

| **shape / leftover design work** | **design-weak** / residual | Imports clean under Enforce, but design smells remain — not “done” |
| **coach** | co-pilot | Guidance that proposes order without silent auto-reshape |
| **doctor** / **next step** | coach / co-pilot | Guidance that proposes order without silent auto-reshape |
| **don’t show green if unverified** | fail-closed | Incomplete analysis or unproven enforcement never looks green |

@@ -197,3 +197,3 @@ | **honest coverage** | honest coverage | Governed % and empty scope that cannot false-green |

| **five doors** | skill menu of 13 | adopt · place · autopilot · explore · upgrade — other names are shortcuts |
| **law / constitution** | contract + baseline + ArkRules files | `ark.config.json`, `arkrules/*`, `.ark-baseline.json` — a different change type than product |
| **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 |
| **steward** | contract owner | GitHub handle or email in `stewards`; only they may loosen the law or grow the baseline |

@@ -215,3 +215,3 @@ | **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 |

| **check (tool)** | scan | Deterministic engine / CLI / MCP. Same inputs → same verdict. No LLM. |
| **coaching / your judgment** | process | Skill- or agent-side. **Never** package pass/fail |
| **your judgment** | process / coaching | Skill- or agent-side. **Never** package pass/fail |
| **diagnostic code** / **ruleId** | ruleId | Stable public violation id — catalog-linked ([diagnostics.md](diagnostics.md)) |

@@ -274,3 +274,3 @@ | **agent summary** | agent projection | Version-matched AGENTS/CLAUDE block; **non-authoritative** |

| CLI / MCP / CI | “Scan found…”, “Checked edges…”, “Verdict: pass/fail/incomplete” | “The model decided…”, “AI validated architecture” |
| Skills / doctor coach | “Process next: one pilot…”, “Judgment: Shape door…” | “Process mode enforces…”, “Skill pass/fail” |
| Skills / doctor | “Next: one small refactor…”, “Judgment: Shape door…” | “Process mode enforces…”, “Skill pass/fail” |
| Catalog / codes | “ruleId from the diagnostic catalog”, “closed capability set” | Open-ended “any rule string”, free-generated sensors |

@@ -284,3 +284,3 @@ | Projection / AGENTS.md | “Agent-facing summary; not the gate” | “Follow AGENTS.md to pass CI” |

| 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.” |
| Name manifesto only when teeth are off | “No required merge status — the architecture file is advisory (a manifesto). Next: require `arkgate-check --strict-merge`.” |
| Name manifesto only when teeth are off | “No required merge status — the rules file is advisory (a manifesto). Next: require `arkgate-check --strict-merge`.” |
| 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.” |

@@ -290,6 +290,6 @@ | Rank one primary door under residual | Doctor **Primary next action** #1; **Also** only for secondary |

| 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.” |
| Soft/unverified write ≠ unfinished project | “Architecture config ready; this host operation is advisory or unverified.” Keep environment residual in evidence; reserve **Not finished** for config/project debt. |
| 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. |
| Keep Suggest on start → doctor | New-here primary is finish `start`, not a competing recommend/architect curriculum |
| Qualify import-clean under leftover design | “None on checked imports … leftover design work remains. Not healthy finished.” |
| Prefer unverified-as-not-green | Incomplete analysis, unobserved hooks, and soft MCP never paint as a hard green pre-write block |
| Prefer unverified-as-not-green | Incomplete analysis, unobserved hooks, and soft MCP never paint as a hard green “write rejected” |
| 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.” |

@@ -301,3 +301,3 @@ | Keep inventory claims evidence-bound | “Possible rule candidate in the configured Application layer.” A filename or technical constant alone is not Domain evidence. |

| Name the check before coaching | “Check: two layer import violations. Next: fix the Application→Domain import first.” |
| Label projection non-enforcing | “Regenerated agent contract for this package version. Enforcement remains ark-check / hooks / required CI.” |
| Label projection non-enforcing | “Regenerated agent summary for this package version. The check remains ark-check / hooks / required CI.” |
| Keep status counts honest | “Inventory and residual counts are evidence — not a health score.” |

@@ -315,4 +315,4 @@ | Prefer deep modules | “Small interface, hide the complexity. Name the seam; test at the public interface.” |

| Bare “gate” as the first unexplained noun on README / use / hub / first-run | They load Fowler Gateway / API Gateway / facade |
| Calling ArkGate a Gateway, facade, adapter, or “abstraction layer” | A Gateway wraps a resource; this checkpoint denies the write |
| “Access resources”, “extend without touching what it represents” | Wrapper-family verbs. The architecture file is law, not a port |
| Calling ArkGate a Gateway, facade, adapter, or “abstraction layer” | A Gateway wraps a resource; this check rejects the write |
| “Access resources”, “extend without touching what it represents” | Wrapper-family verbs. The rules file is not a port |
| Calling `ark.config.json` a **contract** as the first noun | Old-school SE hears manifesto — intent with no consequence |

@@ -354,6 +354,6 @@ | “Our architecture manifesto” as product copy | Insult when teeth exist; a lie when they do not. Honesty case = advisory-only |

1. **One primary path** — newcomer does not skill-shop among thirteen `/ark-*` skills.
2. **Doctor is the control plane** — one status light, one next action (human-grade + technical).
2. **Doctor shows what's wrong and what to do first** — one status light, one next action (human-grade + technical).
3. **Compact router / default install first** — full skill pack is **expert depth**, not onboarding UI.
4. **Post-green shape** is a first-class single door when edges are clean but residual remains.
5. **Day-to-day** — place + gate protect; guided organize via `/ark-autopilot` when needed.
5. **Day-to-day** — place + check protect; guided organize via `/ark-autopilot` when needed.

@@ -380,6 +380,6 @@ ```text

- One small refactor at a time. Pattern bets are never auto-applied.
- Doctor is the control plane: status light + next action.
- The check is deterministic. Coaching is judgment. Only the gate decides pass/fail.
- Doctor shows what's wrong and what to do first: status light + next action.
- The check is deterministic. Your judgment is not. Only the check decides pass/fail.
- Guardrails are a catalog, not free generation.
- Agent docs summarize the config; they never replace the gate.
- Agent docs summarize the rules file; they never replace the check.
- **ArkGate** and **ArkRules** are product names — gloss them; don’t invent a second brand.

@@ -479,3 +479,3 @@

**Still never:** weaken the architecture config; invent `mechanical-safe` kinds; claim finished
**Still never:** weaken the rules file; invent `mechanical-safe` kinds; claim finished
while leftover design work remains; batch every Shape bet in one turn.

@@ -490,3 +490,3 @@

- [ ] No false done under design-weak / incomplete analysis.
- [ ] Technical terms present (architecture config, import rules, ArkGate, ArkRules) without slang.
- [ ] Technical terms present (rules file, import rules, ArkGate, ArkRules) without slang.
- [ ] Leftover design work is never called “done”.

@@ -499,3 +499,3 @@ - [ ] Expert skills are labeled expert — not the default curriculum.

- [ ] First-contact sentence would not read as Fowler Gateway, a folder linter, or a manifesto of intent.
- [ ] Bare “gate” is glossed as write checkpoint / pre-write block / required CI on first use.
- [ ] Bare “gate” is glossed as the write is rejected / the hook rejects the write / required CI on first use.
- [ ] “Contract” never appears as the first noun; without required CI, the file is named a manifesto.

@@ -24,3 +24,3 @@ # ArkGate documentation

|-----|------------|
| [use.md](use.md) | One flow: install → doctor (+ improvement compass) → day-to-day |
| [use.md](use.md) | One flow: install → doctor → day-to-day |
| [enthusiast/](enthusiast/README.md) | Tutorials and plain-language track |

@@ -64,5 +64,5 @@ | [demos/](demos/) | Short end-to-end demos |

Current tree: [releases/4.7.2.md](releases/4.7.2.md) (`arkgate@4.7.2`, prepared).
Current published: [releases/4.7.1.md](releases/4.7.1.md) (`arkgate@4.7.1` on npm `latest`).
Prior: [releases/4.7.0.md](releases/4.7.0.md) · [4.6.7](releases/4.6.7.md) · [4.6.6](releases/4.6.6.md) · [4.6.5](releases/4.6.5.md) · [4.6.4](releases/4.6.4.md) · [4.6.3](releases/4.6.3.md) · [4.6.2](releases/4.6.2.md) · [4.6.1](releases/4.6.1.md) · [4.6.0](releases/4.6.0.md).
Current tree: [releases/4.7.3.md](releases/4.7.3.md) (`arkgate@4.7.3`).
Current published: [releases/4.7.2.md](releases/4.7.2.md) (`arkgate@4.7.2` on npm `latest`).
Prior: [releases/4.7.1.md](releases/4.7.1.md) · [4.7.0](releases/4.7.0.md) · [4.6.7](releases/4.6.7.md) · [4.6.6](releases/4.6.6.md) · [4.6.5](releases/4.6.5.md) · [4.6.4](releases/4.6.4.md) · [4.6.3](releases/4.6.3.md) · [4.6.2](releases/4.6.2.md) · [4.6.1](releases/4.6.1.md) · [4.6.0](releases/4.6.0.md).
Older notes: [releases/](releases/). Config: [configuration.md](configuration.md).

@@ -69,0 +69,0 @@

@@ -59,4 +59,4 @@ # Use ArkGate

**Cursor:** pre-write block for Write/StrReplace when `.cursor/hooks.json` is trusted.
**Codex CLI / local Desktop:** pre-write block for a complete `apply_patch` when
**Cursor:** the hook rejects Write/StrReplace when `.cursor/hooks.json` is trusted.
**Codex CLI / local Desktop:** the hook rejects a complete `apply_patch` when
`.codex/hooks.json` is trusted and the operation is observed. Hosted/specialized paths,

@@ -70,6 +70,6 @@ shell/direct writes, and incomplete patches still rely on CI. **OpenCode:** local write stays

### Planes (you choose)
### Two kinds of rules (you choose)
| Plane | Plain English | Config | Enforces |
|-------|---------------|--------|----------|
| Kind | Plain English | Config | Enforces |
|------|---------------|--------|----------|
| **Layers** | Who may talk to whom | `layers[]` + `rules[]` | Import direction, purity, forbidden globals, capabilities, peer isolation |

@@ -88,3 +88,3 @@ | **ArkRules** (optional extra) | Habits *inside* a layer + named policies | `arkRules` + `arkrules/<Layer>.json` | Structure **heuristics** (module shape); invariant **catalog + coverage evidence** (not full business proof) |

**Touch the contract only when** you invent a new boundary (new layer or allow/deny edge), leave an
**Touch the rules file only when** you invent a new boundary (new layer or allow/deny edge), leave an
ungoverned path under `include`, or need a capability / forbidden-global exception. Optional ArkRules

@@ -91,0 +91,0 @@ `appliesTo` globs narrow invariants inside a layer; empty `appliesTo: []` fails closed. Full field

{
"name": "arkgate",
"version": "4.7.2",
"version": "4.7.3",
"description": "If the AI writes an illegal import, the write is rejected. The same check fails the pull request.",

@@ -203,3 +203,3 @@ "type": "module",

"mcp",
"write-gate",
"import-check",
"hexagonal",

@@ -211,3 +211,2 @@ "clean-architecture",

"boundaries",
"co-pilot",
"governance",

@@ -214,0 +213,0 @@ "typescript",

+17
-17
<div align="center">
# ArkGate — Architecture Co-pilot for AI TypeScript
# ArkGate — illegal imports rejected at write and at merge

@@ -21,8 +21,8 @@ **If the AI writes an illegal import, the write is rejected. The same check fails the pull request.**

> **ArkGate 4.7.2** is prepared. npm `latest` remains **4.7.1** until this patch is published.
> **ArkGate 4.7.3** (tree). npm `latest` remains **4.7.2** until this patch publishes.
> If the AI writes an illegal import, the write is rejected. Optional **ArkRun** extra on schema `1.2`.
> A tree is **adopted** only with a required GitHub status running `arkgate-check --strict-merge`,
> or `.ark/adoption-stance.json` `stance: "advisory-only"`. Doctor is compact (`--doctor --all`
> for Details). [4.7.2 notes](docs/releases/4.7.2.md) · [4.7.1](docs/releases/4.7.1.md) ·
> [4.7.0](docs/releases/4.7.0.md) · [Docs hub](docs/README.md) · [Product voice](docs/product-voice.md)
> for Details). [4.7.3 notes](docs/releases/4.7.3.md) · [4.7.2](docs/releases/4.7.2.md) ·
> [4.7.1](docs/releases/4.7.1.md) · [Docs hub](docs/README.md) · [Product voice](docs/product-voice.md)

@@ -80,6 +80,6 @@ ---

### Two planes (4.0)
### Two kinds of rules (4.0)
| Plane | What it guards | Config |
|-------|----------------|--------|
| Kind | What it guards | Config |
|------|----------------|--------|
| **Layers** (always) | Who may import whom — imports, placement, purity, isolation | `ark.config.json` layers + rules |

@@ -117,3 +117,3 @@ | **ArkRules** (opt-in; structure rules inside a layer) | Habits *inside* a layer — structure sensors + domain invariants as data | `arkRules` → `arkrules/<Layer>.json` |

| **Enforce** | Honest import edges, and no new UI business-rule files vs merge-base | Keep write path + CI |
| **Enforce · design-weak** | Edges clean; design residual remains | Shape residual — not “done” |
| **Enforce · leftover design work** | Edges clean; leftover design work remains | Shape residual — not “done” |

@@ -145,3 +145,3 @@ Details: [docs/use.md](docs/use.md).

#### Why the hard guarantee lives at the merge gate
#### Why required CI is the hard line

@@ -152,12 +152,12 @@ The split above is a deliberate trade-off, not a gap. ArkGate validates at the earliest boundary

Codex’s complete local `apply_patch`) deny their listed write operations at write time; advisory
surfaces (MCP, rules, OpenCode plugins) coach the agent while it works. But any local boundary can
surfaces (MCP, rules, OpenCode plugins) warn the agent while it works. But any local boundary can
be routed around — another tool, a hosted/specialized path, a direct filesystem write, or a human
edit — so the only guarantee ArkGate claims for every path is the
`arkgate-check --strict-merge` check, and only when the repository makes that status required.
Local checks optimize feedback speed; the merge gate owns correctness.
Local checks optimize feedback speed; required CI owns correctness.
A useful consequence: the contract doubles as a pressure sensor. Recurring violations or baseline
A useful consequence: the rules file doubles as a pressure sensor. Recurring violations or baseline
exceptions concentrated on one layer edge are evidence that the current design stopped fitting the
code — a reason to reshape the contract deliberately (start with `/ark-explore`), never to weaken
the gate.
code — a reason to reshape the rules deliberately (start with `/ark-explore`), never to weaken
the check.

@@ -180,3 +180,3 @@ Setup per host: [docs/ai-gates.md](docs/ai-gates.md) · Develop path: [docs/develop.md](docs/develop.md)

| Hard-block AI writes on supported hosts | ✅ | ❌ |
| Project-bound contract agents can read (`ark_manifest`) | ✅ | ❌ |
| Project-bound rules agents can read (`ark_manifest`) | ✅ | ❌ |
| Placement + preflight for multi-file changes | ✅ | ❌ |

@@ -243,4 +243,4 @@ | Honest governed % + dual plan (edges vs shape) | ✅ | ❌ |

| Security | [SECURITY.md](SECURITY.md) |
| Current tree (4.7.2 prepared) | [docs/releases/4.7.2.md](docs/releases/4.7.2.md) · [CHANGELOG](CHANGELOG.md) |
| Current published (4.7.1 on npm `latest`) | [docs/releases/4.7.1.md](docs/releases/4.7.1.md) |
| Current tree (4.7.3) | [docs/releases/4.7.3.md](docs/releases/4.7.3.md) · [CHANGELOG](CHANGELOG.md) |
| Current published (4.7.2 on npm `latest`) | [docs/releases/4.7.2.md](docs/releases/4.7.2.md) |
| Prior published (4.7.0) | [docs/releases/4.7.0.md](docs/releases/4.7.0.md) |

@@ -247,0 +247,0 @@ | Prior published (4.6.7) | [docs/releases/4.6.7.md](docs/releases/4.6.7.md) |

@@ -9,3 +9,3 @@ {

},
"version": "4.7.2",
"version": "4.7.3",
"packages": [

@@ -15,3 +15,3 @@ {

"identifier": "arkgate",
"version": "4.7.2",
"version": "4.7.3",
"runtimeHint": "npx",

@@ -18,0 +18,0 @@ "transport": {

@@ -10,3 +10,3 @@ # ArkGate Agent Skills package

Package version when last generated context: **arkgate@4.7.2**
Package version when last generated context: **arkgate@4.7.3**
Schema: agent-skills package contract `1.0`

@@ -13,0 +13,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display