arkgate 4.8.15 → 4.8.16

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 (63) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +7 -5
  3. package/bin/ark-shared.mjs +2 -0
  4. package/bin/ark.mjs +17 -8
  5. package/bin/lib/analysis-engine.mjs +5 -5
  6. package/bin/lib/architecture-scan.mjs +17 -0
  7. package/bin/lib/baseline-key.mjs +2 -0
  8. package/bin/lib/config-contract.mjs +1 -1
  9. package/bin/lib/diagnostic-catalog.mjs +2 -0
  10. package/bin/lib/doctor-advisories.mjs +26 -0
  11. package/bin/lib/doctor-green-cite.mjs +139 -0
  12. package/bin/lib/doctor-human.mjs +98 -63
  13. package/bin/lib/doctor-next-actions.mjs +9 -0
  14. package/bin/lib/doctor-plan.mjs +6 -3
  15. package/bin/lib/field-install.mjs +47 -7
  16. package/bin/lib/first-run-help.mjs +1 -0
  17. package/bin/lib/improvement-compass-doctor.mjs +3 -1
  18. package/bin/lib/improvement-compass-map.mjs +3 -1
  19. package/bin/lib/invariant-coverage.mjs +121 -0
  20. package/bin/lib/invariant-tests-path.mjs +212 -0
  21. package/bin/lib/package-manager.mjs +8 -0
  22. package/bin/lib/prototype-shortcuts.mjs +224 -0
  23. package/bin/lib/remediation.mjs +11 -0
  24. package/bin/lib/start-preview.mjs +20 -1
  25. package/dist/{configTypes-Dt3DpVbd.d.ts → configTypes-VD0qcubY.d.ts} +2 -1
  26. package/dist/{diagnosticCatalog-BEg85XlE.d.ts → diagnosticCatalog-KWvGLI1U.d.ts} +24 -3
  27. package/dist/eslint/index.cjs +4 -4
  28. package/dist/eslint/index.d.ts +1 -1
  29. package/dist/eslint/index.js +4 -4
  30. package/dist/index.cjs +31 -31
  31. package/dist/index.d.ts +5 -5
  32. package/dist/index.js +31 -31
  33. package/dist/nestjs/index.cjs +1 -1
  34. package/dist/nestjs/index.d.ts +3 -3
  35. package/dist/nestjs/index.js +1 -1
  36. package/dist/runtime/index.cjs +10 -10
  37. package/dist/runtime/index.d.ts +6 -6
  38. package/dist/runtime/index.js +10 -10
  39. package/dist/{types-TBiv0WHL.d.ts → types-BSzRy2X1.d.ts} +1 -1
  40. package/dist/{types-CN9tVMPz.d.ts → types-D5GT5ZT8.d.ts} +1 -1
  41. package/docs/README.md +1 -1
  42. package/docs/agent-guide.md +2 -0
  43. package/docs/configuration.md +11 -3
  44. package/docs/develop.md +3 -1
  45. package/docs/diagnostics.md +25 -1
  46. package/docs/package-surface.md +1 -1
  47. package/docs/use.md +5 -3
  48. package/package.json +1 -1
  49. package/schemas/ark.config.schema.json +1 -1
  50. package/server.json +2 -2
  51. package/templates/agent-skills/README.md +1 -1
  52. package/templates/agent-skills/ark-adopt/SKILL.md +15 -0
  53. package/templates/agent-skills/ark-autopilot/SKILL.md +6 -1
  54. package/templates/agent-skills/ark-coverage/SKILL.md +1 -1
  55. package/templates/agent-skills/ark-explain/SKILL.md +2 -1
  56. package/templates/agent-skills/ark-explore/SKILL.md +19 -0
  57. package/templates/agent-skills/ark-place/SKILL.md +4 -0
  58. package/templates/skills/ark-adopt.md +15 -0
  59. package/templates/skills/ark-autopilot.md +6 -1
  60. package/templates/skills/ark-coverage.md +1 -1
  61. package/templates/skills/ark-explain.md +2 -1
  62. package/templates/skills/ark-explore.md +19 -0
  63. package/templates/skills/ark-place.md +4 -0
package/CHANGELOG.md CHANGED
@@ -96,6 +96,45 @@ in the immutable pre-2.0 archive linked below.
96
96
  Existing configs keep whatever URL they already have. Editor completion
97
97
  matches the 4.x line you just installed.
98
98
 
99
+ ## 4.8.16 — 2026-09-16
100
+
101
+ **Patch** over **4.8.15**. Daily accumulate of the five ships that landed
102
+ after 4.8.15 published: invariant tests path
103
+ ([#255](https://github.com/pedroknigge/arkgate/pull/255)), doctor green
104
+ cites ([#256](https://github.com/pedroknigge/arkgate/pull/256)),
105
+ coverageRoots when enforced
106
+ ([#257](https://github.com/pedroknigge/arkgate/pull/257)),
107
+ `start --apply` install honesty
108
+ ([#259](https://github.com/pedroknigge/arkgate/pull/259)), and prototype
109
+ shortcuts ([#260](https://github.com/pedroknigge/arkgate/pull/260)).
110
+ **Write. Check. Ship.** **No required config migration.** No
111
+ `schemaVersion` bump. Does not close `K01` / `Z09`. This mother
112
+ `ark.config.json` still does **not** turn `arkOrder` on.
113
+
114
+ **Status: prepared** (npm `latest` remains **4.8.15** until Actions `publish-npm`
115
+ runs with `tag=v4.8.16` and `dry_run=false`).
116
+
117
+ ### Added
118
+ - Adopted trees with domain invariants must name a real tests path, so
119
+ coverage cannot certify a test no runner runs
120
+ ([#255](https://github.com/pedroknigge/arkgate/pull/255)).
121
+ - Doctor green / healthy lines now cite a file, config key, or test — an
122
+ uncited line cannot look healthy
123
+ ([#256](https://github.com/pedroknigge/arkgate/pull/256)).
124
+ - When a domain invariant is enforced, `coverage.coverageRoots` is
125
+ required. Test globs alone are not enough
126
+ ([#257](https://github.com/pedroknigge/arkgate/pull/257)).
127
+ - Soft residual when SQLite, a JSON-file store, or admin literals stand
128
+ in for Persistence or Domain
129
+ ([#260](https://github.com/pedroknigge/arkgate/pull/260)).
130
+
131
+ ### Changed
132
+ - `start --apply` fails closed if the package install fails, and names
133
+ the exact command to recover
134
+ ([#259](https://github.com/pedroknigge/arkgate/pull/259)).
135
+ - Pack ceilings remeasured on the IT01 CI pack (run 34848276803).
136
+ ≥10% headroom. No new product surface.
137
+
99
138
  ## 4.8.15 — 2026-09-13
100
139
 
101
140
  **Patch** over **4.8.14**. Pre-adoption ship bar: opt-in `--local` /
package/README.md CHANGED
@@ -39,7 +39,7 @@ Works with Cursor, Claude, Codex, and Grok.
39
39
 
40
40
  </div>
41
41
 
42
- > **ArkGate 4.8.15** is prepared on this tree; npm `latest` remains **4.8.14** until `publish-npm` for `v4.8.15`.
42
+ > **ArkGate 4.8.16** is prepared on this tree; npm `latest` remains **4.8.15** until `publish-npm` for `v4.8.16`.
43
43
  > Write. Check. Ship. Adopted = required GitHub
44
44
  > status running `arkgate-check --strict-merge`, or an explicit `advisory-only` stance.
45
45
  > Status is compact (`arkgate-check --doctor`; `--all` for Details). Optional **ArkRun**
@@ -47,7 +47,7 @@ Works with Cursor, Claude, Codex, and Grok.
47
47
  > (`arkgate/order`) stops rewriting a big product choice — like the billing plan —
48
48
  > as if it were a seat count. Change those choices through a valve, not a generic update.
49
49
  > `@arkgate/runtime` is deprecated.
50
- > [4.8.15 prepared](CHANGELOG.md) · [4.8.11 published](docs/releases/4.8.11.md) · [4.8.10](docs/releases/4.8.10.md) · [4.8.9](docs/releases/4.8.9.md) · [4.8.8](docs/releases/4.8.8.md) · [4.8.7](docs/releases/4.8.7.md) · [4.8.6](docs/releases/4.8.6.md) · [4.8.5](docs/releases/4.8.5.md) · [4.8.4](docs/releases/4.8.4.md) · [4.8.3](docs/releases/4.8.3.md) · [4.8.2](docs/releases/4.8.2.md) · [4.8.1](docs/releases/4.8.1.md) · [4.8.0](docs/releases/4.8.0.md) · [Docs hub](docs/README.md) · [Voice](docs/product-voice.md)
50
+ > [4.8.16 prepared](CHANGELOG.md) · [4.8.11 published](docs/releases/4.8.11.md) · [4.8.10](docs/releases/4.8.10.md) · [4.8.9](docs/releases/4.8.9.md) · [4.8.8](docs/releases/4.8.8.md) · [4.8.7](docs/releases/4.8.7.md) · [4.8.6](docs/releases/4.8.6.md) · [4.8.5](docs/releases/4.8.5.md) · [4.8.4](docs/releases/4.8.4.md) · [4.8.3](docs/releases/4.8.3.md) · [4.8.2](docs/releases/4.8.2.md) · [4.8.1](docs/releases/4.8.1.md) · [4.8.0](docs/releases/4.8.0.md) · [Docs hub](docs/README.md) · [Voice](docs/product-voice.md)
51
51
 
52
52
  ---
53
53
 
@@ -69,10 +69,12 @@ Full map: **[docs/README.md](docs/README.md)**
69
69
  npm install -D arkgate typescript
70
70
  npx arkgate start # preview files + commands
71
71
  npx arkgate start --apply # compact config + host router + CI plan
72
- npx arkgate-check --doctor # status — one next step
73
- npx arkgate-check --doctor --all # full details
72
+ npx --package=arkgate arkgate-check --doctor # status — one next step
73
+ npx --package=arkgate arkgate-check --doctor --all # full details
74
74
  ```
75
75
 
76
+ `arkgate-check` is a command in the `arkgate` package, not its own npm package. After a local install, `npx arkgate-check --doctor` also works.
77
+
76
78
  `start --apply` refuses when projected governed coverage is below 50% or
77
79
  shape confidence is weak (below 0.6 with coverage under 80%). That lock is
78
80
  deliberate. Lock the shape with `--archetype <id>`, `--preset <name>`, or
@@ -342,7 +344,7 @@ Compact starters leave the extra off. Details: [ArkOrder](docs/arkorder.md).
342
344
  | Config · package surface · TS | [configuration](docs/configuration.md) · [package-surface](docs/package-surface.md) · [typescript-support](docs/typescript-support.md) |
343
345
  | Brownfield | [docs/brownfield-adoption.md](docs/brownfield-adoption.md) |
344
346
  | Security | [SECURITY.md](SECURITY.md) |
345
- | Prepared (4.8.15; not published) | [CHANGELOG](CHANGELOG.md) |
347
+ | Prepared (4.8.16; not published) | [CHANGELOG](CHANGELOG.md) |
346
348
  | Current published (4.8.11 on npm `latest`) | [docs/releases/4.8.11.md](docs/releases/4.8.11.md) · [CHANGELOG](CHANGELOG.md) |
347
349
  | Prior published (4.8.10) | [docs/releases/4.8.10.md](docs/releases/4.8.10.md) · [CHANGELOG](CHANGELOG.md) |
348
350
  | Prior published (4.8.9) | [docs/releases/4.8.9.md](docs/releases/4.8.9.md) · [CHANGELOG](CHANGELOG.md) |
@@ -22,6 +22,7 @@ import {
22
22
  normalizeArkgateInstallSpec,
23
23
  packageInstallArgv,
24
24
  installDevHint,
25
+ arkPackageRecoveryCommand,
25
26
  } from './lib/package-manager.mjs';
26
27
 
27
28
  /**
@@ -674,6 +675,7 @@ export {
674
675
  normalizeArkgateInstallSpec,
675
676
  packageInstallArgv,
676
677
  installDevHint,
678
+ arkPackageRecoveryCommand,
677
679
  };
678
680
 
679
681
  // FX01–FX02: registry-aware skip lives in upgrade-package-decision (injectable probe).
package/bin/ark.mjs CHANGED
@@ -22,7 +22,12 @@ import {
22
22
  } from './ark-shared.mjs';
23
23
  import { pinArkgateDevDependency, FALSE_GREEN_GAP_ID } from './lib/field-install.mjs';
24
24
  import { validateHardWriteRequest } from './lib/enforcement-profiles.mjs';
25
- import { applyStartPreview, planStart, renderStartPreview } from './lib/start-preview.mjs';
25
+ import {
26
+ applyStartPreview,
27
+ formatStartPackageInstallFailure,
28
+ planStart,
29
+ renderStartPreview,
30
+ } from './lib/start-preview.mjs';
26
31
  import { runUpgradeCommand } from './lib/upgrade-command.mjs';
27
32
  import { detectActiveAgentHost } from './lib/skill-install.mjs';
28
33
  import { loadArkConfigContract } from './lib/config-contract.mjs';
@@ -489,7 +494,8 @@ async function start(args) {
489
494
  const skip = shouldSkipArkgateInstall(args.root, cliVersion());
490
495
  if (!skip.skip) {
491
496
  const [command, commandArgs] = packageInstallArgv(args.root, `^${cliVersion()}`);
492
- if (!args.json) console.log(`Installing package: ${command} ${commandArgs.join(' ')}`);
497
+ const installCommand = `${command} ${commandArgs.join(' ')}`;
498
+ if (!args.json) console.log(`Installing package: ${installCommand}`);
493
499
  // Keep stdout clean for --json consumers (package managers are chatty on stdout).
494
500
  const status = args.json
495
501
  ? (spawnSync(command, commandArgs, {
@@ -498,10 +504,9 @@ async function start(args) {
498
504
  encoding: 'utf8',
499
505
  }).status ?? 1)
500
506
  : runCommand(command, commandArgs, args.root);
501
- if (status !== 0 && !args.json) {
502
- console.log(
503
- `Package manager exited ${status}. package.json is pinned; run the install command when online.`
504
- );
507
+ if (status !== 0) {
508
+ console.error(formatStartPackageInstallFailure({ exitStatus: status, installCommand }));
509
+ return status;
505
510
  }
506
511
  }
507
512
  }
@@ -568,8 +573,12 @@ async function start(args) {
568
573
  if (pinned.changed) {
569
574
  console.log(` Pinned arkgate@${pinned.version} in package.json devDependencies.`);
570
575
  if (installStatus !== null && installStatus !== 0) {
571
- console.log(
572
- ` Package manager install exited ${installStatus} — package.json is still pinned; run install when online.`
576
+ const [command, commandArgs] = packageInstallArgv(root, pinned.version);
577
+ console.error(
578
+ formatStartPackageInstallFailure({
579
+ exitStatus: installStatus,
580
+ installCommand: `${command} ${commandArgs.join(' ')}`,
581
+ })
573
582
  );
574
583
  }
575
584
  } else if (pinned.reason === 'already-present') {