@akanjs/cli 3.0.0-alpha.6 → 3.0.0-alpha.7

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 (47) hide show
  1. package/.build-stamp +1 -1
  2. package/{agent.command-b0fcx3r2.js → agent.command-pggr92jj.js} +6 -6
  3. package/{application.command-cezdnvtq.js → application.command-692yap1d.js} +4 -4
  4. package/buildBatch.proc.js +1 -1
  5. package/{capacitorApp-jaksw4cy.js → capacitorApp-p0z5yab2.js} +2 -2
  6. package/{cloud.command-6xvsd487.js → cloud.command-wqfsyzv2.js} +7 -7
  7. package/{context.command-ajn1b683.js → context.command-9bxtdn0w.js} +13 -13
  8. package/{guideline.command-9ew6aqhm.js → guideline.command-nfqahxex.js} +3 -3
  9. package/incrementalBuilder.proc.js +1 -1
  10. package/{index-m4kpmmtj.js → index-2c3e2xh8.js} +1 -1
  11. package/{index-hrwzz2wf.js → index-4hek879p.js} +1 -1
  12. package/{index-r7nqv8qj.js → index-5dw57f0d.js} +4 -4
  13. package/{index-c94nq3c1.js → index-5pmx7bkg.js} +3 -3
  14. package/{index-jkynkyfk.js → index-6rhabeev.js} +1 -1
  15. package/{index-qp089jp0.js → index-7myvn0f0.js} +1 -1
  16. package/{index-exhpp31y.js → index-a1e0j63x.js} +2 -2
  17. package/{index-meh7mmz9.js → index-azv0xjb5.js} +2 -2
  18. package/{index-pfrt7qwh.js → index-bz2sfzzt.js} +4 -4
  19. package/{index-nfxq39kj.js → index-gex7c8kd.js} +4 -4
  20. package/{index-wrrb8rxk.js → index-gmy45vz2.js} +3 -3
  21. package/{index-zr2wvx69.js → index-js368gk9.js} +5 -5
  22. package/{index-jn9vfpwz.js → index-mssqn2sq.js} +2 -2
  23. package/{index-zbx0jheb.js → index-p3f4q532.js} +3 -3
  24. package/{index-47qxw1tz.js → index-vg0sj9nc.js} +1 -1
  25. package/{index-60a3jfcz.js → index-vtj3zps1.js} +5 -5
  26. package/{index-vkqxw0ek.js → index-w6wbb612.js} +11 -11
  27. package/{index-hk9rbcsz.js → index-xhgtkekh.js} +1 -1
  28. package/{index-6npsfpxr.js → index-ztpw544k.js} +3 -3
  29. package/index.js +18 -18
  30. package/{library.command-aa1g8nsa.js → library.command-md9715jz.js} +3 -3
  31. package/{localRegistry.command-jha3sn50.js → localRegistry.command-exkbamyj.js} +6 -6
  32. package/{module.command-b1zzgqde.js → module.command-w5aaddxk.js} +6 -6
  33. package/{package.command-9qv6vr9s.js → package.command-yfkrcy0z.js} +3 -3
  34. package/package.json +2 -2
  35. package/{page.command-k16pw244.js → page.command-echbavp4.js} +3 -3
  36. package/{primitive.command-s60dn1ae.js → primitive.command-9fbhspw2.js} +7 -7
  37. package/{quality.command-p3vaze52.js → quality.command-3pnt9yep.js} +4 -17
  38. package/{repair.command-mfv749ha.js → repair.command-carj4vax.js} +5 -5
  39. package/{routeSourceValidator-cncd92fv.js → routeSourceValidator-e4jmbfcx.js} +2 -38
  40. package/{scalar.command-hs3nwzv1.js → scalar.command-51ryzypc.js} +5 -5
  41. package/templates/workspaceRoot/.cursor/rules/lint-enforced-rules.mdc.template +3 -2
  42. package/templates/workspaceRoot/.cursor/rules/module-file-playbook.mdc.template +1 -0
  43. package/templates/workspaceRoot/.cursor/rules/scalar-modeling.mdc.template +41 -0
  44. package/templates/workspaceRoot/AGENTS.md.template +2 -1
  45. package/templates/workspaceRoot/biome.json.template +6 -1
  46. package/{workflow.command-z0e0fk0z.js → workflow.command-91wmvm8k.js} +10 -10
  47. package/{workspace.command-3ydyy991.js → workspace.command-wa10mfd9.js} +19 -19
package/.build-stamp CHANGED
@@ -1 +1 @@
1
- 474303da5b9e0b19ac13326096bbf0527aa6a2ed71915d1eb65c33af084338b4
1
+ 7e53f9980ed629762c149212472004d3e97479ef84329a8316470ebfddbfb52d
@@ -1,15 +1,15 @@
1
1
  // @bun
2
2
  import {
3
3
  AgentScript
4
- } from "./index-nfxq39kj.js";
5
- import"./index-jn9vfpwz.js";
6
- import"./index-m4kpmmtj.js";
7
- import"./index-qp089jp0.js";
4
+ } from "./index-gex7c8kd.js";
5
+ import"./index-mssqn2sq.js";
6
+ import"./index-2c3e2xh8.js";
7
+ import"./index-7myvn0f0.js";
8
8
  import {
9
9
  Workspace,
10
10
  command
11
- } from "./index-jkynkyfk.js";
12
- import"./index-47qxw1tz.js";
11
+ } from "./index-6rhabeev.js";
12
+ import"./index-vg0sj9nc.js";
13
13
  import"./index-mxvakhsm.js";
14
14
  import"./index-xys926f2.js";
15
15
  import"./index-67546d0j.js";
@@ -4,21 +4,21 @@ import {
4
4
  } from "./index-0wae5ebk.js";
5
5
  import {
6
6
  ApplicationScript
7
- } from "./index-r7nqv8qj.js";
7
+ } from "./index-5dw57f0d.js";
8
8
  import {
9
9
  getMobileTargetChoices
10
10
  } from "./index-76rn3g2c.js";
11
- import"./index-exhpp31y.js";
11
+ import"./index-a1e0j63x.js";
12
12
  import {
13
13
  App,
14
14
  Exec,
15
15
  Sys,
16
16
  Workspace,
17
17
  command
18
- } from "./index-jkynkyfk.js";
18
+ } from "./index-6rhabeev.js";
19
19
  import"./index-fgc8r6dj.js";
20
20
  import"./index-bjpxzr6s.js";
21
- import"./index-47qxw1tz.js";
21
+ import"./index-vg0sj9nc.js";
22
22
  import"./index-mxvakhsm.js";
23
23
  import"./index-67546d0j.js";
24
24
  import"./index-r24hmh0q.js";
@@ -12,7 +12,7 @@ import"./index-bjpxzr6s.js";
12
12
  import {
13
13
  AppExecutor,
14
14
  WorkspaceExecutor
15
- } from "./index-47qxw1tz.js";
15
+ } from "./index-vg0sj9nc.js";
16
16
  import"./index-mxvakhsm.js";
17
17
  import"./index-67546d0j.js";
18
18
  import"./index-r24hmh0q.js";
@@ -25,9 +25,9 @@ import {
25
25
  selectLocalDevHost,
26
26
  sortIosRunTargets,
27
27
  writeRootCapacitorConfig
28
- } from "./index-hk9rbcsz.js";
28
+ } from "./index-xhgtkekh.js";
29
29
  import"./index-76rn3g2c.js";
30
- import"./index-47qxw1tz.js";
30
+ import"./index-vg0sj9nc.js";
31
31
  import"./index-mxvakhsm.js";
32
32
  import"./index-67546d0j.js";
33
33
  import"./index-r24hmh0q.js";
@@ -1,22 +1,22 @@
1
1
  // @bun
2
2
  import {
3
3
  CloudScript
4
- } from "./index-zr2wvx69.js";
5
- import"./index-zbx0jheb.js";
6
- import"./index-meh7mmz9.js";
4
+ } from "./index-js368gk9.js";
5
+ import"./index-p3f4q532.js";
6
+ import"./index-azv0xjb5.js";
7
7
  import {
8
8
  GlobalConfig
9
9
  } from "./index-0cj2zxbm.js";
10
- import"./index-r7nqv8qj.js";
10
+ import"./index-5dw57f0d.js";
11
11
  import"./index-76rn3g2c.js";
12
- import"./index-exhpp31y.js";
12
+ import"./index-a1e0j63x.js";
13
13
  import {
14
14
  Workspace,
15
15
  command
16
- } from "./index-jkynkyfk.js";
16
+ } from "./index-6rhabeev.js";
17
17
  import"./index-fgc8r6dj.js";
18
18
  import"./index-bjpxzr6s.js";
19
- import"./index-47qxw1tz.js";
19
+ import"./index-vg0sj9nc.js";
20
20
  import"./index-mxvakhsm.js";
21
21
  import"./index-46tjzh6s.js";
22
22
  import"./index-67546d0j.js";
@@ -1,25 +1,25 @@
1
1
  // @bun
2
2
  import {
3
3
  ContextScript
4
- } from "./index-vkqxw0ek.js";
5
- import"./index-6npsfpxr.js";
6
- import"./index-c94nq3c1.js";
7
- import"./index-pfrt7qwh.js";
8
- import"./index-60a3jfcz.js";
9
- import"./index-hrwzz2wf.js";
10
- import"./index-wrrb8rxk.js";
4
+ } from "./index-w6wbb612.js";
5
+ import"./index-ztpw544k.js";
6
+ import"./index-5pmx7bkg.js";
7
+ import"./index-bz2sfzzt.js";
8
+ import"./index-vtj3zps1.js";
9
+ import"./index-4hek879p.js";
10
+ import"./index-gmy45vz2.js";
11
11
  import"./index-ss469dec.js";
12
- import"./index-hk9rbcsz.js";
12
+ import"./index-xhgtkekh.js";
13
13
  import"./index-0cj2zxbm.js";
14
- import"./index-jn9vfpwz.js";
15
- import"./index-m4kpmmtj.js";
16
- import"./index-qp089jp0.js";
14
+ import"./index-mssqn2sq.js";
15
+ import"./index-2c3e2xh8.js";
16
+ import"./index-7myvn0f0.js";
17
17
  import"./index-76rn3g2c.js";
18
18
  import {
19
19
  Workspace,
20
20
  command
21
- } from "./index-jkynkyfk.js";
22
- import"./index-47qxw1tz.js";
21
+ } from "./index-6rhabeev.js";
22
+ import"./index-vg0sj9nc.js";
23
23
  import"./index-mxvakhsm.js";
24
24
  import"./index-xys926f2.js";
25
25
  import"./index-67546d0j.js";
@@ -4,16 +4,16 @@ import {
4
4
  } from "./index-0cj2zxbm.js";
5
5
  import {
6
6
  Prompter
7
- } from "./index-qp089jp0.js";
7
+ } from "./index-7myvn0f0.js";
8
8
  import {
9
9
  Workspace,
10
10
  command,
11
11
  runner,
12
12
  script
13
- } from "./index-jkynkyfk.js";
13
+ } from "./index-6rhabeev.js";
14
14
  import {
15
15
  getDirname
16
- } from "./index-47qxw1tz.js";
16
+ } from "./index-vg0sj9nc.js";
17
17
  import"./index-mxvakhsm.js";
18
18
  import {
19
19
  FileSys
@@ -16,7 +16,7 @@ import {
16
16
  import {
17
17
  AppExecutor,
18
18
  WorkspaceExecutor
19
- } from "./index-47qxw1tz.js";
19
+ } from "./index-vg0sj9nc.js";
20
20
  import"./index-mxvakhsm.js";
21
21
  import"./index-67546d0j.js";
22
22
  import"./index-r24hmh0q.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  AppExecutor,
4
4
  LibExecutor
5
- } from "./index-47qxw1tz.js";
5
+ } from "./index-vg0sj9nc.js";
6
6
 
7
7
  // pkgs/@akanjs/devkit/workflow/utils.ts
8
8
  var jsonText = (value, { trailingNewline = true } = {}) => `${JSON.stringify(value, null, 2)}${trailingNewline ? `
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-jkynkyfk.js";
5
+ } from "./index-6rhabeev.js";
6
6
 
7
7
  // pkgs/@akanjs/cli/page/page.runner.ts
8
8
  class PageRunner extends runner("page") {
@@ -4,11 +4,11 @@ import {
4
4
  } from "./index-76rn3g2c.js";
5
5
  import {
6
6
  LibraryScript
7
- } from "./index-exhpp31y.js";
7
+ } from "./index-a1e0j63x.js";
8
8
  import {
9
9
  runner,
10
10
  script
11
- } from "./index-jkynkyfk.js";
11
+ } from "./index-6rhabeev.js";
12
12
  import {
13
13
  HmrWatcher,
14
14
  WatchRootResolver
@@ -18,7 +18,7 @@ import {
18
18
  LibExecutor,
19
19
  PkgExecutor,
20
20
  WorkspaceExecutor
21
- } from "./index-47qxw1tz.js";
21
+ } from "./index-vg0sj9nc.js";
22
22
  import {
23
23
  __require
24
24
  } from "./index-r24hmh0q.js";
@@ -1900,7 +1900,7 @@ function openBrowser(url) {
1900
1900
  // pkgs/@akanjs/cli/application/application.runner.ts
1901
1901
  var loadBuildRunner = async () => (await import("./applicationBuildRunner-ha3y8ew8.js")).ApplicationBuildRunner;
1902
1902
  var loadReleasePackager = async () => (await import("./applicationReleasePackager-gg8ccbeh.js")).ApplicationReleasePackager;
1903
- var loadCapacitorApp = async () => (await import("./capacitorApp-jaksw4cy.js")).CapacitorApp;
1903
+ var loadCapacitorApp = async () => (await import("./capacitorApp-p0z5yab2.js")).CapacitorApp;
1904
1904
  var loadAbstractCompactor = async () => (await import("./abstractCompactor-e5yq60qz.js")).AbstractCompactor;
1905
1905
  var loadPrompts = async () => await import("@inquirer/prompts");
1906
1906
 
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  AkanContextAnalyzer
4
- } from "./index-jn9vfpwz.js";
4
+ } from "./index-mssqn2sq.js";
5
5
  import {
6
6
  WorkflowExecutor,
7
7
  compactWorkflowInputs,
@@ -23,10 +23,10 @@ import {
23
23
  workflowCommandsForPlan,
24
24
  workflowPlanApproval,
25
25
  writeWorkflowRunArtifact
26
- } from "./index-m4kpmmtj.js";
26
+ } from "./index-2c3e2xh8.js";
27
27
  import {
28
28
  runner
29
- } from "./index-jkynkyfk.js";
29
+ } from "./index-6rhabeev.js";
30
30
 
31
31
  // pkgs/@akanjs/cli/workflow/workflow.runner.ts
32
32
  import { mkdir, readFile, writeFile } from "fs/promises";
@@ -7,7 +7,7 @@ import {
7
7
  PkgExecutor,
8
8
  WorkspaceExecutor,
9
9
  getDirname
10
- } from "./index-47qxw1tz.js";
10
+ } from "./index-vg0sj9nc.js";
11
11
  import {
12
12
  FileSys
13
13
  } from "./index-67546d0j.js";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  getDirname
4
- } from "./index-47qxw1tz.js";
4
+ } from "./index-vg0sj9nc.js";
5
5
 
6
6
  // pkgs/@akanjs/devkit/prompter.ts
7
7
  import fsPromise from "fs/promises";
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-jkynkyfk.js";
5
+ } from "./index-6rhabeev.js";
6
6
  import {
7
7
  LibExecutor
8
- } from "./index-47qxw1tz.js";
8
+ } from "./index-vg0sj9nc.js";
9
9
 
10
10
  // pkgs/@akanjs/cli/semver.ts
11
11
  function parseVersion(version) {
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-jkynkyfk.js";
5
+ } from "./index-6rhabeev.js";
6
6
  import {
7
7
  PkgExecutor
8
- } from "./index-47qxw1tz.js";
8
+ } from "./index-vg0sj9nc.js";
9
9
  import {
10
10
  TypeScriptDependencyScanner
11
11
  } from "./index-46tjzh6s.js";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  ModuleScript
4
- } from "./index-60a3jfcz.js";
4
+ } from "./index-vtj3zps1.js";
5
5
  import {
6
6
  addFieldUiPolicyForType,
7
7
  coerceFieldDefault,
@@ -34,15 +34,15 @@ import {
34
34
  sourceFile,
35
35
  validationCommandsForTarget,
36
36
  viaBuilderParameterName
37
- } from "./index-m4kpmmtj.js";
37
+ } from "./index-2c3e2xh8.js";
38
38
  import {
39
39
  script
40
- } from "./index-jkynkyfk.js";
40
+ } from "./index-6rhabeev.js";
41
41
  import {
42
42
  AppExecutor,
43
43
  LibExecutor,
44
44
  ModuleExecutor
45
- } from "./index-47qxw1tz.js";
45
+ } from "./index-vg0sj9nc.js";
46
46
 
47
47
  // pkgs/@akanjs/cli/primitive/primitive.script.ts
48
48
  import { capitalize } from "akanjs/common";
@@ -1,14 +1,14 @@
1
1
  // @bun
2
2
  import {
3
3
  AkanContextAnalyzer
4
- } from "./index-jn9vfpwz.js";
4
+ } from "./index-mssqn2sq.js";
5
5
  import {
6
6
  Prompter
7
- } from "./index-qp089jp0.js";
7
+ } from "./index-7myvn0f0.js";
8
8
  import {
9
9
  runner,
10
10
  script
11
- } from "./index-jkynkyfk.js";
11
+ } from "./index-6rhabeev.js";
12
12
  import {
13
13
  AGENT_BLOCK_END,
14
14
  AGENT_BLOCK_START,
@@ -16,7 +16,7 @@ import {
16
16
  LibExecutor,
17
17
  renderRecipeEntries,
18
18
  upsertAgentBlock
19
- } from "./index-47qxw1tz.js";
19
+ } from "./index-vg0sj9nc.js";
20
20
  import {
21
21
  collectRecipeSources,
22
22
  scanRecipes
@@ -9,14 +9,14 @@ import {
9
9
  createPassedPrimitiveReport,
10
10
  generatedFilesForSync,
11
11
  scalarChangedFiles
12
- } from "./index-m4kpmmtj.js";
12
+ } from "./index-2c3e2xh8.js";
13
13
  import {
14
14
  Prompter
15
- } from "./index-qp089jp0.js";
15
+ } from "./index-7myvn0f0.js";
16
16
  import {
17
17
  runner,
18
18
  script
19
- } from "./index-jkynkyfk.js";
19
+ } from "./index-6rhabeev.js";
20
20
 
21
21
  // pkgs/@akanjs/cli/scalar/scalar.prompt.ts
22
22
  import { input } from "@inquirer/prompts";
@@ -1,10 +1,10 @@
1
1
  // @bun
2
2
  import {
3
3
  CloudRunner
4
- } from "./index-zbx0jheb.js";
4
+ } from "./index-p3f4q532.js";
5
5
  import {
6
6
  PackageScript
7
- } from "./index-meh7mmz9.js";
7
+ } from "./index-azv0xjb5.js";
8
8
  import {
9
9
  AiSession,
10
10
  CloudApi,
@@ -12,13 +12,13 @@ import {
12
12
  } from "./index-0cj2zxbm.js";
13
13
  import {
14
14
  ApplicationScript
15
- } from "./index-r7nqv8qj.js";
15
+ } from "./index-5dw57f0d.js";
16
16
  import {
17
17
  script
18
- } from "./index-jkynkyfk.js";
18
+ } from "./index-6rhabeev.js";
19
19
  import {
20
20
  PkgExecutor
21
- } from "./index-47qxw1tz.js";
21
+ } from "./index-vg0sj9nc.js";
22
22
 
23
23
  // pkgs/@akanjs/cli/cloud/cloud.script.ts
24
24
  import { Logger } from "akanjs/common";
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  workflowRunArtifactPath,
4
4
  workflowSyncDir
5
- } from "./index-m4kpmmtj.js";
5
+ } from "./index-2c3e2xh8.js";
6
6
  import {
7
7
  AppExecutor,
8
8
  LibExecutor,
9
9
  appRootAllowedDirs,
10
10
  appRootAllowedFiles,
11
11
  isScannedAppRootEntry
12
- } from "./index-47qxw1tz.js";
12
+ } from "./index-vg0sj9nc.js";
13
13
  import {
14
14
  collectRecipeSources,
15
15
  findInlineRecipeDuplicates,
@@ -7,14 +7,14 @@ import {
7
7
  } from "./index-0cj2zxbm.js";
8
8
  import {
9
9
  openBrowser
10
- } from "./index-r7nqv8qj.js";
10
+ } from "./index-5dw57f0d.js";
11
11
  import {
12
12
  runner
13
- } from "./index-jkynkyfk.js";
13
+ } from "./index-6rhabeev.js";
14
14
  import {
15
15
  AppExecutor,
16
16
  WorkspaceExecutor
17
- } from "./index-47qxw1tz.js";
17
+ } from "./index-vg0sj9nc.js";
18
18
 
19
19
  // pkgs/@akanjs/cli/cloud/cloud.runner.ts
20
20
  import path from "path";
@@ -2485,7 +2485,7 @@ class SysExecutor extends Executor {
2485
2485
  class AppExecutor extends SysExecutor {
2486
2486
  static #routeSourceValidator = null;
2487
2487
  static async#getRouteSourceValidator() {
2488
- AppExecutor.#routeSourceValidator ??= (await import("./routeSourceValidator-cncd92fv.js")).RouteSourceValidator;
2488
+ AppExecutor.#routeSourceValidator ??= (await import("./routeSourceValidator-e4jmbfcx.js")).RouteSourceValidator;
2489
2489
  return AppExecutor.#routeSourceValidator;
2490
2490
  }
2491
2491
  dist;
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  PageScript
4
- } from "./index-hrwzz2wf.js";
4
+ } from "./index-4hek879p.js";
5
5
  import {
6
6
  pluralizeName
7
7
  } from "./index-ss469dec.js";
@@ -15,17 +15,17 @@ import {
15
15
  generatedFilesForSync,
16
16
  moduleSourcePaths,
17
17
  sourceFile
18
- } from "./index-m4kpmmtj.js";
18
+ } from "./index-2c3e2xh8.js";
19
19
  import {
20
20
  Prompter
21
- } from "./index-qp089jp0.js";
21
+ } from "./index-7myvn0f0.js";
22
22
  import {
23
23
  runner,
24
24
  script
25
- } from "./index-jkynkyfk.js";
25
+ } from "./index-6rhabeev.js";
26
26
  import {
27
27
  ModuleExecutor
28
- } from "./index-47qxw1tz.js";
28
+ } from "./index-vg0sj9nc.js";
29
29
  import {
30
30
  FileSys
31
31
  } from "./index-67546d0j.js";
@@ -1,22 +1,22 @@
1
1
  // @bun
2
2
  import {
3
3
  RepairRunner
4
- } from "./index-6npsfpxr.js";
4
+ } from "./index-ztpw544k.js";
5
5
  import {
6
6
  WorkflowRunner
7
- } from "./index-c94nq3c1.js";
7
+ } from "./index-5pmx7bkg.js";
8
8
  import {
9
9
  PrimitiveScript
10
- } from "./index-pfrt7qwh.js";
10
+ } from "./index-bz2sfzzt.js";
11
11
  import {
12
12
  ModuleScript
13
- } from "./index-60a3jfcz.js";
13
+ } from "./index-vtj3zps1.js";
14
14
  import {
15
15
  ScalarScript
16
- } from "./index-wrrb8rxk.js";
16
+ } from "./index-gmy45vz2.js";
17
17
  import {
18
18
  isPlaceholderAppId
19
- } from "./index-hk9rbcsz.js";
19
+ } from "./index-xhgtkekh.js";
20
20
  import {
21
21
  AkanContextAnalyzer,
22
22
  akanMcpInstallConfigPaths,
@@ -27,17 +27,17 @@ import {
27
27
  renderDoctorText,
28
28
  resourceList,
29
29
  upsertCodexMcpServerBlock
30
- } from "./index-jn9vfpwz.js";
30
+ } from "./index-mssqn2sq.js";
31
31
  import {
32
32
  buildAkanModuleContextIndex,
33
33
  createWorkflowBaselineSummary,
34
34
  createWorkflowStepRegistry,
35
35
  jsonText,
36
36
  toolingRolloutGate
37
- } from "./index-m4kpmmtj.js";
37
+ } from "./index-2c3e2xh8.js";
38
38
  import {
39
39
  Prompter
40
- } from "./index-qp089jp0.js";
40
+ } from "./index-7myvn0f0.js";
41
41
  import {
42
42
  getMobileTargets
43
43
  } from "./index-76rn3g2c.js";
@@ -45,10 +45,10 @@ import {
45
45
  CommandContainer,
46
46
  runner,
47
47
  script
48
- } from "./index-jkynkyfk.js";
48
+ } from "./index-6rhabeev.js";
49
49
  import {
50
50
  AppExecutor
51
- } from "./index-47qxw1tz.js";
51
+ } from "./index-vg0sj9nc.js";
52
52
 
53
53
  // pkgs/@akanjs/cli/context/context.script.ts
54
54
  import { Logger } from "akanjs/common";
@@ -5,7 +5,7 @@ import {
5
5
  } from "./index-76rn3g2c.js";
6
6
  import {
7
7
  CommandExecutionError
8
- } from "./index-47qxw1tz.js";
8
+ } from "./index-vg0sj9nc.js";
9
9
 
10
10
  // pkgs/@akanjs/devkit/capacitorApp.ts
11
11
  import { cp, mkdir, readFile, rm, writeFile } from "fs/promises";
@@ -1,17 +1,17 @@
1
1
  // @bun
2
2
  import {
3
3
  AkanContextAnalyzer
4
- } from "./index-jn9vfpwz.js";
4
+ } from "./index-mssqn2sq.js";
5
5
  import {
6
6
  createRepairReport,
7
7
  generatedFilePathsForTarget,
8
8
  renderRepairReport,
9
9
  writeGeneratedSyncState,
10
10
  writeWorkflowRunArtifact
11
- } from "./index-m4kpmmtj.js";
11
+ } from "./index-2c3e2xh8.js";
12
12
  import {
13
13
  runner
14
- } from "./index-jkynkyfk.js";
14
+ } from "./index-6rhabeev.js";
15
15
 
16
16
  // pkgs/@akanjs/cli/repair/repair.runner.ts
17
17
  var commandForShell = (command) => command.startsWith("akan ") ? `bun run ${command}` : command;
package/index.js CHANGED
@@ -4,8 +4,8 @@ import {
4
4
  getTargetCommandNames,
5
5
  getTargetMetas,
6
6
  runCommands
7
- } from "./index-jkynkyfk.js";
8
- import"./index-47qxw1tz.js";
7
+ } from "./index-6rhabeev.js";
8
+ import"./index-vg0sj9nc.js";
9
9
  import"./index-mxvakhsm.js";
10
10
  import"./index-67546d0j.js";
11
11
  import {
@@ -17,22 +17,22 @@ import path from "path";
17
17
 
18
18
  // pkgs/@akanjs/cli/commandModules.ts
19
19
  var commandModules = {
20
- workspace: async () => (await import("./workspace.command-3ydyy991.js")).WorkspaceCommand,
21
- agent: async () => (await import("./agent.command-b0fcx3r2.js")).AgentCommand,
22
- application: async () => (await import("./application.command-cezdnvtq.js")).ApplicationCommand,
23
- library: async () => (await import("./library.command-aa1g8nsa.js")).LibraryCommand,
24
- localRegistry: async () => (await import("./localRegistry.command-jha3sn50.js")).LocalRegistryCommand,
25
- package: async () => (await import("./package.command-9qv6vr9s.js")).PackageCommand,
26
- module: async () => (await import("./module.command-b1zzgqde.js")).ModuleCommand,
27
- page: async () => (await import("./page.command-k16pw244.js")).PageCommand,
28
- context: async () => (await import("./context.command-ajn1b683.js")).ContextCommand,
29
- cloud: async () => (await import("./cloud.command-6xvsd487.js")).CloudCommand,
30
- guideline: async () => (await import("./guideline.command-9ew6aqhm.js")).GuidelineCommand,
31
- scalar: async () => (await import("./scalar.command-hs3nwzv1.js")).ScalarCommand,
32
- primitive: async () => (await import("./primitive.command-s60dn1ae.js")).PrimitiveCommand,
33
- quality: async () => (await import("./quality.command-p3vaze52.js")).QualityCommand,
34
- repair: async () => (await import("./repair.command-mfv749ha.js")).RepairCommand,
35
- workflow: async () => (await import("./workflow.command-z0e0fk0z.js")).WorkflowCommand
20
+ workspace: async () => (await import("./workspace.command-wa10mfd9.js")).WorkspaceCommand,
21
+ agent: async () => (await import("./agent.command-pggr92jj.js")).AgentCommand,
22
+ application: async () => (await import("./application.command-692yap1d.js")).ApplicationCommand,
23
+ library: async () => (await import("./library.command-md9715jz.js")).LibraryCommand,
24
+ localRegistry: async () => (await import("./localRegistry.command-exkbamyj.js")).LocalRegistryCommand,
25
+ package: async () => (await import("./package.command-yfkrcy0z.js")).PackageCommand,
26
+ module: async () => (await import("./module.command-w5aaddxk.js")).ModuleCommand,
27
+ page: async () => (await import("./page.command-echbavp4.js")).PageCommand,
28
+ context: async () => (await import("./context.command-9bxtdn0w.js")).ContextCommand,
29
+ cloud: async () => (await import("./cloud.command-wqfsyzv2.js")).CloudCommand,
30
+ guideline: async () => (await import("./guideline.command-nfqahxex.js")).GuidelineCommand,
31
+ scalar: async () => (await import("./scalar.command-51ryzypc.js")).ScalarCommand,
32
+ primitive: async () => (await import("./primitive.command-9fbhspw2.js")).PrimitiveCommand,
33
+ quality: async () => (await import("./quality.command-3pnt9yep.js")).QualityCommand,
34
+ repair: async () => (await import("./repair.command-carj4vax.js")).RepairCommand,
35
+ workflow: async () => (await import("./workflow.command-91wmvm8k.js")).WorkflowCommand
36
36
  };
37
37
  var commandModuleIds = Object.keys(commandModules);
38
38
 
@@ -1,13 +1,13 @@
1
1
  // @bun
2
2
  import {
3
3
  LibraryScript
4
- } from "./index-exhpp31y.js";
4
+ } from "./index-a1e0j63x.js";
5
5
  import {
6
6
  Lib,
7
7
  Workspace,
8
8
  command
9
- } from "./index-jkynkyfk.js";
10
- import"./index-47qxw1tz.js";
9
+ } from "./index-6rhabeev.js";
10
+ import"./index-vg0sj9nc.js";
11
11
  import"./index-mxvakhsm.js";
12
12
  import"./index-67546d0j.js";
13
13
  import"./index-r24hmh0q.js";
@@ -2,27 +2,27 @@
2
2
  import {
3
3
  CloudRunner,
4
4
  getNpmRegistryUrl
5
- } from "./index-zbx0jheb.js";
5
+ } from "./index-p3f4q532.js";
6
6
  import {
7
7
  PackageScript
8
- } from "./index-meh7mmz9.js";
8
+ } from "./index-azv0xjb5.js";
9
9
  import"./index-0cj2zxbm.js";
10
10
  import {
11
11
  ApplicationScript
12
- } from "./index-r7nqv8qj.js";
12
+ } from "./index-5dw57f0d.js";
13
13
  import"./index-76rn3g2c.js";
14
- import"./index-exhpp31y.js";
14
+ import"./index-a1e0j63x.js";
15
15
  import {
16
16
  Workspace,
17
17
  command,
18
18
  runner,
19
19
  script
20
- } from "./index-jkynkyfk.js";
20
+ } from "./index-6rhabeev.js";
21
21
  import"./index-fgc8r6dj.js";
22
22
  import"./index-bjpxzr6s.js";
23
23
  import {
24
24
  PkgExecutor
25
- } from "./index-47qxw1tz.js";
25
+ } from "./index-vg0sj9nc.js";
26
26
  import"./index-mxvakhsm.js";
27
27
  import"./index-46tjzh6s.js";
28
28
  import"./index-67546d0j.js";
@@ -1,20 +1,20 @@
1
1
  // @bun
2
2
  import {
3
3
  ModuleScript
4
- } from "./index-60a3jfcz.js";
5
- import"./index-hrwzz2wf.js";
4
+ } from "./index-vtj3zps1.js";
5
+ import"./index-4hek879p.js";
6
6
  import"./index-ss469dec.js";
7
7
  import"./index-0cj2zxbm.js";
8
8
  import {
9
9
  renderPrimitiveReport
10
- } from "./index-m4kpmmtj.js";
11
- import"./index-qp089jp0.js";
10
+ } from "./index-2c3e2xh8.js";
11
+ import"./index-7myvn0f0.js";
12
12
  import {
13
13
  Module,
14
14
  Sys,
15
15
  command
16
- } from "./index-jkynkyfk.js";
17
- import"./index-47qxw1tz.js";
16
+ } from "./index-6rhabeev.js";
17
+ import"./index-vg0sj9nc.js";
18
18
  import"./index-mxvakhsm.js";
19
19
  import"./index-67546d0j.js";
20
20
  import"./index-r24hmh0q.js";
@@ -1,13 +1,13 @@
1
1
  // @bun
2
2
  import {
3
3
  PackageScript
4
- } from "./index-meh7mmz9.js";
4
+ } from "./index-azv0xjb5.js";
5
5
  import {
6
6
  Pkg,
7
7
  Workspace,
8
8
  command
9
- } from "./index-jkynkyfk.js";
10
- import"./index-47qxw1tz.js";
9
+ } from "./index-6rhabeev.js";
10
+ import"./index-vg0sj9nc.js";
11
11
  import"./index-mxvakhsm.js";
12
12
  import"./index-46tjzh6s.js";
13
13
  import"./index-67546d0j.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/cli",
3
- "version": "3.0.0-alpha.6",
3
+ "version": "3.0.0-alpha.7",
4
4
  "sourceType": "module",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -34,7 +34,7 @@
34
34
  "@langchain/openai": "^1.4.6",
35
35
  "@tailwindcss/node": "^4.3.0",
36
36
  "@trapezedev/project": "^7.1.4",
37
- "akanjs": "3.0.0-alpha.6",
37
+ "akanjs": "3.0.0-alpha.7",
38
38
  "chalk": "^5.6.2",
39
39
  "commander": "^14.0.3",
40
40
  "dayjs": "^1.11.20",
@@ -1,13 +1,13 @@
1
1
  // @bun
2
2
  import {
3
3
  PageScript
4
- } from "./index-hrwzz2wf.js";
4
+ } from "./index-4hek879p.js";
5
5
  import {
6
6
  App,
7
7
  Module,
8
8
  command
9
- } from "./index-jkynkyfk.js";
10
- import"./index-47qxw1tz.js";
9
+ } from "./index-6rhabeev.js";
10
+ import"./index-vg0sj9nc.js";
11
11
  import"./index-mxvakhsm.js";
12
12
  import"./index-67546d0j.js";
13
13
  import"./index-r24hmh0q.js";
@@ -1,20 +1,20 @@
1
1
  // @bun
2
2
  import {
3
3
  PrimitiveScript
4
- } from "./index-pfrt7qwh.js";
5
- import"./index-60a3jfcz.js";
6
- import"./index-hrwzz2wf.js";
4
+ } from "./index-bz2sfzzt.js";
5
+ import"./index-vtj3zps1.js";
6
+ import"./index-4hek879p.js";
7
7
  import"./index-ss469dec.js";
8
8
  import"./index-0cj2zxbm.js";
9
9
  import {
10
10
  renderPrimitiveReport
11
- } from "./index-m4kpmmtj.js";
12
- import"./index-qp089jp0.js";
11
+ } from "./index-2c3e2xh8.js";
12
+ import"./index-7myvn0f0.js";
13
13
  import {
14
14
  Workspace,
15
15
  command
16
- } from "./index-jkynkyfk.js";
17
- import"./index-47qxw1tz.js";
16
+ } from "./index-6rhabeev.js";
17
+ import"./index-vg0sj9nc.js";
18
18
  import"./index-mxvakhsm.js";
19
19
  import"./index-67546d0j.js";
20
20
  import"./index-r24hmh0q.js";
@@ -7,11 +7,11 @@ import {
7
7
  command,
8
8
  runner,
9
9
  script
10
- } from "./index-jkynkyfk.js";
10
+ } from "./index-6rhabeev.js";
11
11
  import {
12
12
  appRootAllowedFiles,
13
13
  libFacetRootAllowedFiles
14
- } from "./index-47qxw1tz.js";
14
+ } from "./index-vg0sj9nc.js";
15
15
  import"./index-mxvakhsm.js";
16
16
  import"./index-67546d0j.js";
17
17
  import"./index-r24hmh0q.js";
@@ -20,6 +20,7 @@ import"./index-r24hmh0q.js";
20
20
  import { createHash } from "crypto";
21
21
  import { readdir, readFile, stat } from "fs/promises";
22
22
  import path from "path";
23
+ import { RESERVED_ROUTE_CONFIG_EXPORTS } from "akanjs/common";
23
24
  import ignore from "ignore";
24
25
  import ts2 from "typescript";
25
26
 
@@ -415,20 +416,6 @@ var CONVENTION_SUFFIXES = [
415
416
  ".signal.ts",
416
417
  ".store.ts"
417
418
  ];
418
- var PAGE_RESERVED_EXPORTS = new Set([
419
- "pageConfig",
420
- "head",
421
- "metadata",
422
- "generateHead",
423
- "generateMetadata",
424
- "fonts",
425
- "manifest",
426
- "theme",
427
- "reconnect",
428
- "wsConnect",
429
- "layoutStyle",
430
- "gaTrackingId"
431
- ]);
432
419
  var RULE_FIXES = {
433
420
  "akan.global.duplicate-exported-function-name": "Rename one of the exports, or if they are the same thing, extract it into one shared module and import it in both places.",
434
421
  "akan.global.duplicate-exported-function-body": "Extract the shared implementation into a single exported helper and import it, instead of copying the body.",
@@ -911,7 +898,7 @@ function isRestrictedInternalKind(kind) {
911
898
  function isAllowedComponentExport(declaration, isPage) {
912
899
  if (isComponentValueKind(declaration.kind) && isPascalCaseName(declaration.name))
913
900
  return true;
914
- return isPage && PAGE_RESERVED_EXPORTS.has(declaration.name);
901
+ return isPage && RESERVED_ROUTE_CONFIG_EXPORTS.has(declaration.name);
915
902
  }
916
903
  function isPascalCaseName(name) {
917
904
  return /^[A-Z]/.test(name) && !/^[A-Z0-9_]+$/.test(name);
@@ -1,15 +1,15 @@
1
1
  // @bun
2
2
  import {
3
3
  RepairRunner
4
- } from "./index-6npsfpxr.js";
5
- import"./index-jn9vfpwz.js";
6
- import"./index-m4kpmmtj.js";
4
+ } from "./index-ztpw544k.js";
5
+ import"./index-mssqn2sq.js";
6
+ import"./index-2c3e2xh8.js";
7
7
  import {
8
8
  Workspace,
9
9
  command,
10
10
  script
11
- } from "./index-jkynkyfk.js";
12
- import"./index-47qxw1tz.js";
11
+ } from "./index-6rhabeev.js";
12
+ import"./index-vg0sj9nc.js";
13
13
  import"./index-mxvakhsm.js";
14
14
  import"./index-xys926f2.js";
15
15
  import"./index-67546d0j.js";
@@ -2,49 +2,13 @@
2
2
  import"./index-r24hmh0q.js";
3
3
 
4
4
  // pkgs/@akanjs/devkit/routeSourceValidator.ts
5
+ import { getRouteExports } from "akanjs/common";
5
6
  import ts from "typescript";
6
7
 
7
8
  class RouteSourceValidator {
8
- static #pageExports = new Set([
9
- "default",
10
- "pageConfig",
11
- "head",
12
- "metadata",
13
- "generateHead",
14
- "generateMetadata",
15
- "Loading"
16
- ]);
17
- static #rootLayoutExports = new Set([
18
- "default",
19
- "pageConfig",
20
- "head",
21
- "metadata",
22
- "generateHead",
23
- "generateMetadata",
24
- "fonts",
25
- "manifest",
26
- "theme",
27
- "reconnect",
28
- "layoutStyle",
29
- "gaTrackingId",
30
- "Loading",
31
- "NotFound",
32
- "Error"
33
- ]);
34
- static #layoutExports = new Set([
35
- "default",
36
- "pageConfig",
37
- "head",
38
- "metadata",
39
- "generateHead",
40
- "generateMetadata",
41
- "Loading",
42
- "NotFound",
43
- "Error"
44
- ]);
45
9
  static validateRouteSourceExports(source, filePath, kind, options = {}) {
46
10
  const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
47
- const allowed = kind === "page" ? RouteSourceValidator.#pageExports : options.rootLayout ? RouteSourceValidator.#rootLayoutExports : RouteSourceValidator.#layoutExports;
11
+ const allowed = getRouteExports(kind, { rootLayout: options.rootLayout });
48
12
  const exported = new Set;
49
13
  const assertExport = (name) => {
50
14
  if (!allowed.has(name)) {
@@ -1,18 +1,18 @@
1
1
  // @bun
2
2
  import {
3
3
  ScalarScript
4
- } from "./index-wrrb8rxk.js";
4
+ } from "./index-gmy45vz2.js";
5
5
  import"./index-ss469dec.js";
6
6
  import"./index-0cj2zxbm.js";
7
7
  import {
8
8
  renderPrimitiveReport
9
- } from "./index-m4kpmmtj.js";
10
- import"./index-qp089jp0.js";
9
+ } from "./index-2c3e2xh8.js";
10
+ import"./index-7myvn0f0.js";
11
11
  import {
12
12
  Sys,
13
13
  command
14
- } from "./index-jkynkyfk.js";
15
- import"./index-47qxw1tz.js";
14
+ } from "./index-6rhabeev.js";
15
+ import"./index-vg0sj9nc.js";
16
16
  import"./index-mxvakhsm.js";
17
17
  import"./index-67546d0j.js";
18
18
  import"./index-r24hmh0q.js";
@@ -7,11 +7,12 @@ alwaysApply: true
7
7
 
8
8
  Enforced by `biome.json` and the Akan grit plugins registered in `biome.json`. Several of them produce output that looks wrong; do not "fix" it back.
9
9
 
10
- - **Never hand-order Tailwind classes.** `nursery/useSortedClasses` is an error and also sorts the string arguments to `clsx()` and `cva()`. Sorter output such as `font-bold text-2xl text-base-content` or `border-base-content/5 border-t` is correct. Write the classes in any order, run the formatter, leave the result.
11
- - **Never `throw new Error`.** Throw `new Err("<module>.error.<key>")` and register the key as `[en, ko]` in that module's dictionary `.error({})`. Import `Err` from `"../dict"` on the server and from `"@libs/<lib>/client"` or `"@apps/<app>/client"` in UI. `no-throw-raw-error.grit` exempts `*.test.ts`, `*.spec.ts`, `*.constant.ts`, and `common/**` — `common/` has no legal `Err` import path, so keep throwing code out of it.
10
+ - **Never hand-order Tailwind classes.** `nursery/useSortedClasses` is an error and also sorts the string arguments to `cn()`. Sorter output such as `font-bold text-2xl text-base-content` or `border-base-content/5 border-t` is correct. Write the classes in any order, run the formatter, leave the result.
11
+ - **Never `throw new Error`.** Throw `new Err("<module>.error.<key>")` and register the key as `[en, ko]` in that module's dictionary `.error({})`. Import `Err` from `"../dict"` on the server and from `"@libs/<lib>/client"` or `"@apps/<app>/client"` in UI. `no-throw-raw-error.grit` exempts `*.test.ts`, `*.spec.ts`, `*.constant.ts`, `common/**`, and `apps/akan/env/**` — `common/` and `env/` have no legal `Err` import path, so keep throwing code out of them.
12
12
  - **Never import a third-party package** from `page/**`, from any barrel, or from any `*.{constant,dictionary,document,service,signal,store}.ts` / `*.{Template,Unit,Util,View,Zone}.tsx` (`no-import-external-library.grit`). Re-export the symbol through a lib first. One-line re-export shims such as `libs/<lib>/base/<pkg>.ts` and `libs/<lib>/webkit/<hook>.ts` exist for exactly this reason — they are load-bearing, not cruft. Do not delete them.
13
13
  - **`#private` is banned in exactly four file suffixes:** `*.constant.ts`, `*.document.ts`, `*.service.ts`, and `*.store.ts` (`no-js-private-class-method.grit`). The rule is scoped by file path, not by class shape, so `#private` remains the house style everywhere under `srvkit/`, including `adapt()` adapter classes.
14
14
  - **No `console.log` / `console.debug`.** Only `assert`, `error`, `info`, and `warn` are allowed. Server code uses the injected `this.logger.*` or `new Logger("ClassName")`.
15
+ - **Never return a value from a store action** (`no-return-in-store-action.grit`). Every method of a `store(...)` class dispatches through `st.do.<action>()`, which is typed `void` / `Promise<void>`, so the value is unreachable — write it into state with `this.set({ ... })`. A bare `return;` guard, a `return` inside a nested callback, a getter, and a `static` helper are all still fine.
15
16
  - **Never redeclare a generated CRUD endpoint name** in `*.signal.ts` (`no-redeclare-predefined-endpoint.grit`).
16
17
  - **No deep imports past a barrel** (`no-deep-internal-import.grit`). Cross-module constant references such as `../map/map.constant` are the sanctioned exception.
17
18
  - **Server-component discipline** is enforced on `page/**`, `*.Unit.tsx`, and `*.View.tsx` (`no-import-client-functions.grit`, `no-use-client-in-server.grit`, `non-scalar-props-restricted.grit`).
@@ -45,6 +45,7 @@ Fixed order: `XFilter extends from(...)` → `X extends by(...)` → `XModel ext
45
45
  - The body is three lines: `await fetch.X` → `this.setX(...)` → toast. The optimistic shape is mutate the client model, `void fetch.*`, then commit.
46
46
  - Use `this.pick(...)` when the value must exist, `this.get()` when it may not, and `this.set({...})` to write.
47
47
  - Mutate lists through the collection API (`this.set({ xList: xList.set(x).save() })`), not array spread.
48
+ - An action returns nothing — `st.do.<action>()` is typed `void` / `Promise<void>`, so hand the result to `this.set({...})` rather than returning it (`no-return-in-store-action.grit`); a bare `return;` guard stays fine.
48
49
  - **Never `import type { RootStore } from "../st"`** — it crashes `akan build` with a Bun SSR segfault.
49
50
  - Store actions do not `try/catch`; let the framework toast the `Err`.
50
51
 
@@ -56,3 +56,44 @@ alwaysApply: false
56
56
  - Declare an image/file field as a relation to `File`: `image: field(File).optional()` for one, `images: field([File])` for many (see `libs/shared/lib/user/user.constant.ts`, `libs/shared/lib/banner/banner.constant.ts`).
57
57
  - The store then auto-generates an `upload<Field>On<Model>(fileList)` action that calls the framework upload mutation and polls file status until it leaves `"uploading"` (`pkgs/akanjs/store/action.ts`).
58
58
  - Storage is wired through the `StorageAdaptor` DI role (default `BlobStorage`, `pkgs/akanjs/service/predefinedAdaptor/storage.adaptor.ts`); the reference implementation is the `file` lib (`libs/shared/lib/file/*`). Do not hand-roll data-URL fallbacks.
59
+
60
+ ### Cascade Remove — the `cascade` option
61
+
62
+ **The value names the direction, and getting it wrong is a data loss.** The two actions can sit on the same field
63
+ shape, so `cascade` never means "related" — it means one of exactly these:
64
+
65
+ - `removeRef` — *when I am removed, remove what this field points at.* Declared on the relation the owner holds:
66
+ `image: field(File, { cascade: "removeRef" })`, arrays included. Only a relation accepts it; a primitive, a bare
67
+ `ID`, and a scalar each fail the class build, because none of them names a document to remove.
68
+ - `removeWith` — *when what this field points at is removed, remove me.* Declared on the child's own reference to
69
+ its owner, so the owner never learns about its children and a lib model can be extended by an app's. Three forms:
70
+ a relation (`agentSession: field(AgentSession, { cascade: "removeWith" })`), an id with `ref`
71
+ (`field(ID, { ref: "agentSession", cascade: "removeWith" })`), or a polymorphic id with `refPath`
72
+ (`field(ID, { refPath: "parentType", cascade: "removeWith" })`). An array, a Map, `ref` together with `refPath`,
73
+ and a field naming no owner each fail the class build.
74
+ - **A `refPath` must name an `enumOf` field.** A free-form owner type is unknowable at build time, so every model's
75
+ removal would have to sweep the polymorphic table on the chance it is the owner. The enum names the candidates and
76
+ the reverse index reaches only them.
77
+ - **A cascade goes through the target's service, never its model** — unless it provably makes no difference. The
78
+ service path is what runs the target's `_postRemove`, which is where a module puts the side effect the removal has
79
+ to carry (`FileService._postRemove` deletes the stored blob there).
80
+ - **Bulk is decided at boot, per target model, for both directions.** When the target has no `remove` schema hook, no
81
+ `_pre`/`_postRemove` (its own or a lib's), no cascade of its own, and no children, one `removeManyByQuery` leaves
82
+ exactly the rows the loop would, so the framework takes it. Adding a `_postRemove` to that model silently flips it
83
+ back to one document at a time — the boot log (`info` summary, `verbose` per edge) is the only place that shows.
84
+ - **The plan is sealed after every service is live**, so a `listenPost("remove")` registered in `onInit` still counts
85
+ and a `removeRef` target the app never mounted fails the boot rather than the first removal. An unmounted
86
+ `removeWith` owner fails the boot too; an unmounted `refPath` candidate only warns, since that list spans optional
87
+ modules by design.
88
+ - **Nothing checks whether another document still references the same target.** `File` in particular is deduped by
89
+ `origin`, so two parents can share one row; declaring `removeRef` says the field owns its target exclusively, and
90
+ that judgement is the declaring model's to make.
91
+ - Removal is soft (`removedAt`) but the storage delete a `_postRemove` performs is not — a cascade is not
92
+ restorable, and reviving the owner does not revive what went with it.
93
+ - A `removeWith` declaration **auto-creates its index** (`{ removedAt, fk }`, or `{ removedAt, typeKey, fk }` when
94
+ polymorphic). Every non-base field lives in the `_doc` JSON column, so the lookup would otherwise scan the table
95
+ on every owner removal.
96
+ - **Query-level removes fire no hooks and therefore no cascade.** `removeManyByQuery` / `updateManyByQuery`, the generated `remove<Filter>` / `update<Filter>`, and the facade's `removeById` / `updateById` stamp
97
+ `removedAt` in one atomic UPDATE, so nothing downstream runs. Remove one document at a time when it cascades.
98
+ - Cascades are **idempotent**: `removedAt IS NULL` is ANDed into every query-level write, so a retry after a partial
99
+ failure re-stamps nothing. Cycles are cut by a visited set carried down the whole chain, with a depth cap of 16.
@@ -261,7 +261,8 @@ final fallback when no CLI command covers the change.
261
261
  | Use JS `#private` in `*.constant.ts`, `*.document.ts`, `*.service.ts`, or `*.store.ts` | `no-js-private-class-method.grit` bans `#private` in exactly those four file suffixes. The rule is scoped by file path, not class shape — `#private` stays the house style under `srvkit/`, including `adapt()` classes. | `private _methodName()` in those four files; `#methodName()` in `srvkit/` |
262
262
  | Use `console.log()` | Biome lint forbids `console.log`. Only `console.error`, `console.info`, `console.warn` are allowed. | Use one of the three allowed console methods, or `this.logger.*` / `new Logger("ClassName")` on the server |
263
263
  | Write a `//!` marker in `ui/`, `webkit/`, `common/`, `page/**/*.tsx`, `*.constant.ts`, `*.store.ts`, or a module component file | `no-bang-comment-in-client.grit` bans it. Bun classifies `//!` and `/*!` as legal comments and keeps them through minification, so the note ships to every visitor. | `// FIXME:` in browser-reachable code; `//!` stays legal in server, `srvkit/`, and CLI files |
264
- | `throw new Error("...")` | `no-throw-raw-error.grit` bans raw errors outside tests, `*.constant.ts`, and `common/`. Raw errors carry no dictionary key, so they cannot be localized or toasted. | `throw new Err("task.error.<key>")` plus an `[en, ko]` entry in the module dictionary's `.error({})` |
264
+ | `return` a value from a store action | `no-return-in-store-action.grit` bans it. Every method of a `store(...)` class dispatches through `st.do.<action>()`, which is typed `void` / `Promise<void>`, so the value never reaches the caller. | `this.set({ ... })` with the result; a bare `return;` guard, a `return` inside a nested callback, a getter, and a `static` helper all stay legal |
265
+ | `throw new Error("...")` | `no-throw-raw-error.grit` bans raw errors outside tests, `*.constant.ts`, `common/`, and `apps/akan/env/`. Raw errors carry no dictionary key, so they cannot be localized or toasted. | `throw new Err("task.error.<key>")` plus an `[en, ko]` entry in the module dictionary's `.error({})` |
265
266
  | Hand-order Tailwind classes, or reorder them to "fix" a diff | `useSortedClasses` is an error and also sorts the string arguments to `cn()`. Sorter output like `font-bold text-2xl` looks wrong but is correct. | Write classes in any order and let `akan lint` sort them |
266
267
  | A colour outside the semantic vocabulary — `bg-red-500`, `bg-[#3b82f6]`, `btn-primary`, `text-base-content`, `style={{ color: "#fff" }}` | The theme closes the vocabulary, so these produce **no CSS at all** — the element renders unstyled, and without the lint rules there is no error and no warning either. Raw-palette, arbitrary-colour, daisyUI-legacy and inline-colour rules all catch this. | Semantic tokens: `bg-primary`, `text-foreground/70`, `border-border`. A genuinely fixed colour takes a `// biome-ignore lint/plugin: <reason>` |
267
268
  | `import` a third-party package inside a page, a barrel, or a module file | `no-import-external-library.grit` covers `page/**`, all barrels, and every `*.{constant,dictionary,document,service,signal,store}.ts` and `*.{Template,Unit,Util,View,Zone}.tsx`. | Re-export the symbol from a one-line shim in `base/`, `webkit/`, or `ui/` first, then import that |
@@ -143,7 +143,8 @@
143
143
  "!**/*.spec.ts",
144
144
  "!**/*.spec.tsx",
145
145
  "!**/*.constant.ts",
146
- "!**/common/**"
146
+ "!**/common/**",
147
+ "!apps/akan/env/**"
147
148
  ],
148
149
  "plugins": ["./node_modules/@akanjs/devkit/lint/no-throw-raw-error.grit"]
149
150
  },
@@ -162,6 +163,10 @@
162
163
  "includes": ["**/*.constant.ts", "**/*.document.ts", "**/*.service.ts", "**/*.store.ts"],
163
164
  "plugins": ["./node_modules/@akanjs/devkit/lint/no-js-private-class-method.grit"]
164
165
  },
166
+ {
167
+ "includes": ["**/*.store.ts"],
168
+ "plugins": ["./node_modules/@akanjs/devkit/lint/no-return-in-store-action.grit"]
169
+ },
165
170
  {
166
171
  "includes": ["**/*.signal.ts"],
167
172
  "plugins": ["./node_modules/@akanjs/devkit/lint/no-redeclare-predefined-endpoint.grit"]
@@ -1,30 +1,30 @@
1
1
  // @bun
2
2
  import {
3
3
  WorkflowRunner
4
- } from "./index-c94nq3c1.js";
4
+ } from "./index-5pmx7bkg.js";
5
5
  import {
6
6
  PrimitiveScript
7
- } from "./index-pfrt7qwh.js";
7
+ } from "./index-bz2sfzzt.js";
8
8
  import {
9
9
  ModuleScript
10
- } from "./index-60a3jfcz.js";
11
- import"./index-hrwzz2wf.js";
10
+ } from "./index-vtj3zps1.js";
11
+ import"./index-4hek879p.js";
12
12
  import {
13
13
  ScalarScript
14
- } from "./index-wrrb8rxk.js";
14
+ } from "./index-gmy45vz2.js";
15
15
  import"./index-ss469dec.js";
16
16
  import"./index-0cj2zxbm.js";
17
- import"./index-jn9vfpwz.js";
17
+ import"./index-mssqn2sq.js";
18
18
  import {
19
19
  createWorkflowStepRegistry
20
- } from "./index-m4kpmmtj.js";
21
- import"./index-qp089jp0.js";
20
+ } from "./index-2c3e2xh8.js";
21
+ import"./index-7myvn0f0.js";
22
22
  import {
23
23
  Workspace,
24
24
  command,
25
25
  script
26
- } from "./index-jkynkyfk.js";
27
- import"./index-47qxw1tz.js";
26
+ } from "./index-6rhabeev.js";
27
+ import"./index-vg0sj9nc.js";
28
28
  import"./index-mxvakhsm.js";
29
29
  import"./index-xys926f2.js";
30
30
  import"./index-67546d0j.js";
@@ -1,48 +1,48 @@
1
1
  // @bun
2
2
  import {
3
3
  ContextScript
4
- } from "./index-vkqxw0ek.js";
5
- import"./index-6npsfpxr.js";
6
- import"./index-c94nq3c1.js";
7
- import"./index-pfrt7qwh.js";
8
- import"./index-60a3jfcz.js";
9
- import"./index-hrwzz2wf.js";
4
+ } from "./index-w6wbb612.js";
5
+ import"./index-ztpw544k.js";
6
+ import"./index-5pmx7bkg.js";
7
+ import"./index-bz2sfzzt.js";
8
+ import"./index-vtj3zps1.js";
9
+ import"./index-4hek879p.js";
10
10
  import {
11
11
  CloudScript
12
- } from "./index-zr2wvx69.js";
12
+ } from "./index-js368gk9.js";
13
13
  import {
14
14
  getLatestPackageVersion,
15
15
  getNpmRegistryUrl
16
- } from "./index-zbx0jheb.js";
16
+ } from "./index-p3f4q532.js";
17
17
  import {
18
18
  PackageScript
19
- } from "./index-meh7mmz9.js";
20
- import"./index-wrrb8rxk.js";
19
+ } from "./index-azv0xjb5.js";
20
+ import"./index-gmy45vz2.js";
21
21
  import"./index-ss469dec.js";
22
- import"./index-hk9rbcsz.js";
22
+ import"./index-xhgtkekh.js";
23
23
  import {
24
24
  GlobalConfig
25
25
  } from "./index-0cj2zxbm.js";
26
26
  import {
27
27
  AgentScript
28
- } from "./index-nfxq39kj.js";
29
- import"./index-jn9vfpwz.js";
30
- import"./index-m4kpmmtj.js";
31
- import"./index-qp089jp0.js";
28
+ } from "./index-gex7c8kd.js";
29
+ import"./index-mssqn2sq.js";
30
+ import"./index-2c3e2xh8.js";
31
+ import"./index-7myvn0f0.js";
32
32
  import {
33
33
  ApplicationScript
34
- } from "./index-r7nqv8qj.js";
34
+ } from "./index-5dw57f0d.js";
35
35
  import"./index-76rn3g2c.js";
36
36
  import {
37
37
  LibraryScript
38
- } from "./index-exhpp31y.js";
38
+ } from "./index-a1e0j63x.js";
39
39
  import {
40
40
  Exec,
41
41
  Workspace,
42
42
  command,
43
43
  runner,
44
44
  script
45
- } from "./index-jkynkyfk.js";
45
+ } from "./index-6rhabeev.js";
46
46
  import"./index-fgc8r6dj.js";
47
47
  import {
48
48
  ThemeValidator,
@@ -59,7 +59,7 @@ import {
59
59
  collectScopeRecipeSources,
60
60
  extractAgentBlock,
61
61
  renderScopeAgentBlock
62
- } from "./index-47qxw1tz.js";
62
+ } from "./index-vg0sj9nc.js";
63
63
  import"./index-mxvakhsm.js";
64
64
  import {
65
65
  collectRecipeSources,