arkgate 4.8.16 → 4.8.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/README.md CHANGED
@@ -73,7 +73,7 @@ These are **not** the day-to-day product path. They stay in the repo for evidenc
73
73
  | Field adoption kit (scaffolding, not closed) | [field/](field/) |
74
74
  | Runtime hardening (experimental) | [production-hardening.md](production-hardening.md) |
75
75
 
76
- Prepared: [CHANGELOG](../CHANGELOG.md) (`arkgate@4.8.16`; not published until `publish-npm` for `v4.8.16`).
76
+ Prepared: [CHANGELOG](../CHANGELOG.md) (`arkgate@4.8.17`; not published until `publish-npm` for `v4.8.17`).
77
77
  Current published: [releases/4.8.11.md](releases/4.8.11.md) (`arkgate@4.8.11` on npm `latest`; does not close `K01`).
78
78
  Prior published: [releases/4.8.10.md](releases/4.8.10.md) (`arkgate@4.8.10`).
79
79
  Prior published: [releases/4.8.9.md](releases/4.8.9.md) (`arkgate@4.8.9`).
@@ -1347,7 +1347,7 @@ The server exposes these thirteen tools. Every tool accepts the additive
1347
1347
  | `ark_manifest` | No non-project args: return the machine-readable architecture contract with an authoritative binding after the identity handshake. |
1348
1348
  | `validate_code` | `{ source, layer?, filePath? }`: validate one snippet; infer the layer from `filePath` when possible; return an error result when invalid. |
1349
1349
  | `ark_check` | `{ strict?, baseline? }`: run the full project architecture check. `verdict` separates `identity`, `completeness`, `graph`, `coverage`, `gates`, and `overallOk`; no individual green fact substitutes for the combined verdict. |
1350
- | `ark_policy_delta` | `{ baseConfig, candidateConfig?, acknowledgement? }`: classify a complete contract transition; never edits the contract. |
1350
+ | `ark_policy_delta` | `{ baseConfig, candidateConfig?, acknowledgement? }`: classify a complete contract transition; never edits the contract. Weakening / new layer / new allow edge needs `adrPath` on the acknowledgement. |
1351
1351
  | `ark_coverage` | No args: report per-layer counts, every unclassified file, unmatched layers, and missing rule edges. |
1352
1352
  | `ark_place` | `{ filePath?, description? }`: resolve or propose a governed home and return its import/global constraints. |
1353
1353
  | `ark_prepare_write` | `{ source, filePath?, description?, layer? }`: compose placement and snippet validation, with hashes and a mechanical-safe patch when available. |
@@ -457,12 +457,15 @@ JSON artifact passed with `--policy-ack`:
457
457
  "basePolicyHash": "fnv1a-...",
458
458
  "candidatePolicyHash": "fnv1a-...",
459
459
  "findingIds": ["weakening:$.dynamicImportAllowlist:added"],
460
- "reason": "Temporary loader while the static registry is migrated."
460
+ "reason": "Temporary loader while the static registry is migrated.",
461
+ "adrPath": "docs/adr/0001-temporary-loader.md"
461
462
  }
462
463
  ```
463
464
 
464
- The acknowledgement must list every blocking finding exactly. It is not a permanent allowlist:
465
- changing either contract changes its hash and invalidates the acknowledgement.
465
+ The acknowledgement must list every blocking finding exactly and name a short
466
+ decision note as `adrPath` (under `docs/adr/` or `docs/decisions/`). A reason
467
+ alone is not enough. It is not a permanent allowlist: changing either contract
468
+ changes its hash and invalidates the acknowledgement.
466
469
 
467
470
  ## Team parliament (law vs feature)
468
471
 
@@ -52,7 +52,9 @@ unclassified source files therefore remain red.
52
52
  If gates are required and the tree has no short decision note yet (`docs/adr/` or
53
53
  `docs/decisions/`), `--require-gates` and doctor point at that path. Soft hint —
54
54
  not a fail, and silent when `--require-gates` is off. Not every change needs a
55
- note; use one when you loosen a rule or add a real gate.
55
+ note; use one when you loosen a rule or add a real gate. When `--policy-ack`
56
+ is required (weaken, new layer, or new allow edge), put that note's path on
57
+ the acknowledgement as `adrPath`.
56
58
 
57
59
  Doctor JSON includes `writePath.mode` plus `enforcementLadder`: support, installation, observed
58
60
  evidence, covered operations, bypassability, and CI honesty. MCP registration stays advisory.
@@ -75,7 +75,7 @@ hardening guide remains repository-hosted rather than duplicated in the gate tar
75
75
  | **Package pin dual-truth (4.0)** | doctor JSON `packageVersionTruth`; upgrade JSON/human note when pin behind CLI | Additive, advisory. Surfaces after `upgrade --no-install` when managed CLI is ahead of package.json. |
76
76
  | **Managed upgrade self-service honesty (4.5 / DF05)** | `ark upgrade [--json]` → `selfService` (+ human “Self-service honesty” lines) | Additive, advisory. Answers without a maintainer: write-path activation labels per selected host (`hard`\|`advisory`\|`unavailable`) and customized content-identity preserve (`customizedPaths` / `customizedContentPreserved`). Soft hosts never hard; upgrade never invents `hardWriteActive` from disk alone. Always `notAScore: true`. Not a gate input; not part of `planDigest`. |
77
77
  | **Product honesty readiness split (4.1.1)** | doctor JSON `productHonesty` | Additive. `unfinished` / `headline` / `primaryNextAction` / `reasonIds` remain; EH adds `contractReadiness` (`ready`\|`partial`\|`not-ready`), `localWriteBoundary` (`advisory`\|`hard`\|`unverified`\|`unknown`), `architectureReasonIds`, `environmentResidualIds` / `environmentResiduals`. Soft-write hosts stay in evidence without alone forcing global **Not finished**. `notAScore: true` always. |
78
- | **Policy transition analysis (3.1.0)** | `analyzePolicyDelta(...)`; MCP `ark_policy_delta`; CLI `--policy-base` / `--policy-base-ref` / `--policy-ack`; check JSON `policyDelta` | Additive schema `1.0`. Classifications and finding ids are deterministic. Weakening/judgment requires an acknowledgement bound to both policy hashes and the exact blocking finding set. |
78
+ | **Policy transition analysis (3.1.0)** | `analyzePolicyDelta(...)`; MCP `ark_policy_delta`; CLI `--policy-base` / `--policy-base-ref` / `--policy-ack`; check JSON `policyDelta` | Additive schema `1.0`. Classifications and finding ids are deterministic. Weakening/judgment requires an acknowledgement bound to both policy hashes and the exact blocking finding set. A new layer or new allow edge is `judgment-required`. On the CLI/MCP policy-ack plane, `adrPath` must name a short note under `docs/adr/` or `docs/decisions/` (`policyDelta.adrNote`). Domain hash match stays I/O-free. |
79
79
  | **Team parliament (law vs feature)** | Optional `stewards` on `ark.config.json` (GitHub handle or email); CLI `--local` / `--changed` / `--against` / `--base` / `--contract-diff` / `--contract-session` / `--persona` / `--author`; check JSON `teamParliament`; `ark status --vs`; write-gate mixed-batch deny | Additive. Law files must not mix with product source. Loosen / baseline-grow are steward-only when `stewards` is set. `--against` ratchets vs the base-ref baseline. `--changed` scans touched sources plus their import closure. `--local` (or `ARK_CHECK_LOCAL=1`) is the same cheap path and stays per `--root`; it cannot combine with `--strict-merge`. Check JSON may add `local`, `scope: "changed"`, `analysisRoot`. `stewards`, `layers[].description`, `layers[].trustBoundary`, and `layers[].owners` are excluded from policy hash. `requireLayerOwners` stays in the hash. Identity is handle or email, not git `user.name`. No org plane. |
80
80
  | **Atomic change preflight (3.1.0)** | `preflightChange(...)`; CLI `ark preflight --changes <file> --json`; MCP `ark_prepare_change` | Additive schema `1.0`. One complete governed production-source `{path,content}` / `{path,delete:true}` batch; read-only; returns operation, content/tree/policy/compiler fingerprints and stable graph findings. MCP availability alone is advisory. |
81
81
  | **Architecture change map (3.1.0)** | `arkgate/schema/change-map` or `arkgate/schema/ark.change-map.schema.json`; CLI `ark preflight --change-map <file>`; MCP `ark_prepare_change.changeMap` | Optional strict schema `1.0`. Canonical planned paths + operations + resolved Ark layers + dependencies between planned files. Preflight returns `changeMapHash`; absence is normal and adds no project file. Structural intent only, never behavioral completion. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkgate",
3
- "version": "4.8.16",
3
+ "version": "4.8.17",
4
4
  "description": "When the agent writes a bad import, the write doesn’t land. The same check fails the pull request.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
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.8.16",
9
+ "version": "4.8.17",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "arkgate",
14
- "version": "4.8.16",
14
+ "version": "4.8.17",
15
15
  "runtimeHint": "npx",
16
16
  "transport": {
17
17
  "type": "stdio"
@@ -9,7 +9,7 @@ closed `/ark-*` catalog shipped as flat templates for Ark install.
9
9
  **Closed catalog** (`ARK_SKILL_NAMES`) — first-class doors plus one-release
10
10
  redirect stubs. Add a name only with a live ROADMAP item.
11
11
 
12
- Package version when last generated context: **arkgate@4.8.16**
12
+ Package version when last generated context: **arkgate@4.8.17**
13
13
  Schema: agent-skills package contract `1.0`
14
14
 
15
15
  ## Skills (closed catalog)
@@ -168,8 +168,10 @@ When gates are required (`--require-gates` / `--strict-merge` / required merge
168
168
  status) and there is no short decision-note home yet, doctor may ask for one
169
169
  under `docs/adr/` or `docs/decisions/`. Write a note when you loosen a rule or
170
170
  add a real gate — not on every file. Absence is silent unless that demand is
171
- on. The hint does not fail the check. Do **not** invent `/ark-adr`. Policy
172
- weaken still uses `--policy-ack`; this is only a place to write the why.
171
+ on. The home hint does not fail the check. Do **not** invent `/ark-adr`.
172
+ When `--policy-ack` is required (weaken, new layer, or new allow edge), put
173
+ that note's path on the acknowledgement as `adrPath`. A free-floating reason
174
+ is not enough on the policy-ack plane.
173
175
 
174
176
  ## States and transitions (process)
175
177
 
@@ -24,7 +24,9 @@ one bounded decision needs 2–3 enforceable options.
24
24
  - Doctor #1: if ENFORCE + empty plan A and gates are already installed → **Shape** (`/ark-explore` then `/ark-autopilot`). Do not say install-agent-gates.
25
25
  - When `--require-gates` / adopted-strict is on and doctor JSON has `adrPresence`,
26
26
  the next step is a short note under `docs/adr/` (or `docs/decisions/`). Soft.
27
- Not every change. Off when require-gates is off. No `/ark-adr`.
27
+ Not every change. Off when require-gates is off. No `/ark-adr`. When
28
+ `policyDelta` needs `--policy-ack` (weaken, new layer, or new allow edge),
29
+ the ack must name that note as `adrPath` — a reason alone is not enough.
28
30
  - When doctor JSON has `statesTransitions` or `statusTransitionCatalog`, the
29
31
  next step is a short states → transitions table (or one link) on the domain
30
32
  doc already in play. Use catalog names when present. Soft. Silent when that
@@ -168,8 +168,10 @@ When gates are required (`--require-gates` / `--strict-merge` / required merge
168
168
  status) and there is no short decision-note home yet, doctor may ask for one
169
169
  under `docs/adr/` or `docs/decisions/`. Write a note when you loosen a rule or
170
170
  add a real gate — not on every file. Absence is silent unless that demand is
171
- on. The hint does not fail the check. Do **not** invent `/ark-adr`. Policy
172
- weaken still uses `--policy-ack`; this is only a place to write the why.
171
+ on. The home hint does not fail the check. Do **not** invent `/ark-adr`.
172
+ When `--policy-ack` is required (weaken, new layer, or new allow edge), put
173
+ that note's path on the acknowledgement as `adrPath`. A free-floating reason
174
+ is not enough on the policy-ack plane.
173
175
 
174
176
  ## States and transitions (process)
175
177
 
@@ -24,7 +24,9 @@ one bounded decision needs 2–3 enforceable options.
24
24
  - Doctor #1: if ENFORCE + empty plan A and gates are already installed → **Shape** (`/ark-explore` then `/ark-autopilot`). Do not say install-agent-gates.
25
25
  - When `--require-gates` / adopted-strict is on and doctor JSON has `adrPresence`,
26
26
  the next step is a short note under `docs/adr/` (or `docs/decisions/`). Soft.
27
- Not every change. Off when require-gates is off. No `/ark-adr`.
27
+ Not every change. Off when require-gates is off. No `/ark-adr`. When
28
+ `policyDelta` needs `--policy-ack` (weaken, new layer, or new allow edge),
29
+ the ack must name that note as `adrPath` — a reason alone is not enough.
28
30
  - When doctor JSON has `statesTransitions` or `statusTransitionCatalog`, the
29
31
  next step is a short states → transitions table (or one link) on the domain
30
32
  doc already in play. Use catalog names when present. Soft. Silent when that