@starci/eslint-canon-be 3.2.16 → 3.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.2.17 - 2026-10-13
4
+
5
+ - Changed: the bundled canon-pins copy carries `@heroicons/react` 2.2.0 and `@starci/heroicons` 0.3.3 in place of `@phosphor-icons/react` (the heroicons family is the one icon set, owner ruling 2026-10-13) and the pins of eslint-canon-fe 8.2.16, HFS 4.2.15 and CLI 1.2.15. ESLint rule implementations are unchanged.
6
+
3
7
  ## 3.2.16 - 2026-10-13
4
8
 
5
9
  - Changed: republish of 3.2.15 with the same rules; the release resumed after a partial publish, so the bundled canon-pins copy moves with the packages published after it (release-plan bundling rule).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starci/eslint-canon-be",
3
- "version": "3.2.16",
3
+ "version": "3.2.17",
4
4
  "description": "The StarCi back-end lint canon: every rule its laws publish, gathered as one flat-config plugin.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -14,8 +14,13 @@ purpose: >-
14
14
  pins:
15
15
  # --- @starci packages. Every @starci package is a PUBLISHED npm package (install: registry): a product repository
16
16
  # installs the exact pinned version from the npm registry in the root and every workspace package.json, never `file:`.
17
- # @starci/heroicons has no pin since 1.0.0-alpha.13: the application icon set is @phosphor-icons/react (fe-stack.yaml
18
- # icons) and eslint-canon-fe one-icon-set refuses every other glyph catalogue, so no product repository installs it.
17
+ '@starci/heroicons':
18
+ version: 0.3.4
19
+ group: starci
20
+ install: registry
21
+ side: fe
22
+ source: packages/heroicons/package.json
23
+ why: 'StarCi custom Heroicons-compatible cuts; eslint-canon-fe (icon.mjs) admits @starci/heroicons/24/outline and /16/solid as icon sources, so an app that uses them gets this exact version.'
19
24
  '@starci/grammar':
20
25
  version: 0.9.14
21
26
  group: starci
@@ -24,14 +29,14 @@ pins:
24
29
  source: packages/grammar/package.json
25
30
  why: 'the grammar front ends read: the brand layer sets `--font-sans` and `--font-mono` and the grammar reads them; it carries the Input tel kind, the copyable and read-only Input, the IconButton disclosure props and count badge, ChatBubble, FillViewport, Textarea mentions and Enter-to-send, the leading PrimaryRailLayout rail, the plate-less Image, ListRow, the soft Alert, Progress steps, the floating primary IconButton, FlowGraph, the STATE-8 loading views and the bordered selectable TagGroup chips. The runtime source version wins for a @starci package.'
26
31
  '@starci/eslint-canon-be':
27
- version: 3.2.16
32
+ version: 3.2.17
28
33
  group: starci
29
34
  install: registry
30
35
  side: be
31
36
  source: packages/eslint/be/package.json
32
37
  why: 'the back-end ESLint canon: `loadHfs(import.meta.url)` of be/eslint.config.mjs finds the app-root hfs.json (kind app) and gives every linted file the view of the be side, and the project graph is built per side; its bundled runtime copies (slots, canon-pins, failure codes, the architecture machine) put .starcistacks and .sops.yaml at the app root; `starciBeConfig({ hfs: loadHfs(import.meta.url) })` is the typed factory and the BE-CONVENTION laws are its rules.'
33
38
  '@starci/eslint-canon-fe':
34
- version: 8.2.15
39
+ version: 8.2.16
35
40
  group: starci
36
41
  install: registry
37
42
  side: fe
@@ -71,14 +76,14 @@ pins:
71
76
  source: packages/test-world/package.json
72
77
  why: 'the shared e2e library of every back end (R47, R48), a devDependency of every back end: the warm stack behind toxiproxy, the network-edge fakes, the Nest boot, the typed useTestWorld handle, useSandbox for contract specs and the outage lock. Kafka is real own infra (the one digest-pinned apache/kafka KRaft image, a broker listener and proxy per slot, slot-prefixed topics, consumer groups and client ids) and Postgres is schema-per-context (a schema and a login role per context in a shared database). Each worker has its own data slot (<ns>_w<k>) with its own databases, Keycloak realm, leased Redis DB, bucket/collection/topic prefixes, fakes host, toxiproxy proxies and outage lock; a run provisions min(jest workers, workers cap, default 2) slots, and state file protocol 2 pairs exactly with @starci/jest-preset (TEST_WORLD_PAIR_MISMATCH otherwise). A modules world boots real peer apps beside its modules, world.apps.<name>.during(fn) is the outage of a peer app, w.keycloak.clientSecret(client) answers the run-generated secret of a confidential realm client, world.keycloak.events/sessions read the realm user events and live sessions, world.infra.postgresql.connection(name) takes one database connection down while the others serve, and world.resolve and scope.resolve take any Nest token. Every path a declaration names (`stack`, seeds, the realm, Dockerfiles) resolves from the app root (the directory of hfs.json); the globalSetup registers the path aliases as TypeScript resolves them. Its CLI main is exported at ./cli for starci app stack.'
73
78
  '@starci/cli':
74
- version: 1.2.14
79
+ version: 1.2.15
75
80
  group: starci
76
81
  install: registry
77
82
  side: both
78
83
  source: packages/cli/package.json
79
84
  why: 'the only StarCi command package; product repositories install it for starci app, while @starci/hfs remains its pinned transitive implementation.'
80
85
  '@starci/hfs':
81
- version: 4.2.14
86
+ version: 4.2.15
82
87
  group: starci
83
88
  install: registry
84
89
  side: both
@@ -360,11 +365,11 @@ pins:
360
365
  group: framework
361
366
  side: fe
362
367
  why: 'the fan-out emitter behind the socket side-effect component (fe-stack realtime); version read from the starci-academy package-lock on 2026-10-13.'
363
- '@phosphor-icons/react':
364
- version: 2.1.10
368
+ '@heroicons/react':
369
+ version: 2.2.0
365
370
  group: ui
366
371
  side: fe
367
- why: 'the one application icon set (fe-stack icons); version read from the starci-academy package-lock on 2026-10-13.'
372
+ why: 'the base of the one application icon set (fe-stack icons, with @starci/heroicons for the glyphs it lacks); eslint-canon-fe (icon.mjs) admits @heroicons/react/24/outline and /16/solid.'
368
373
  'next-themes':
369
374
  version: 0.4.6
370
375
  group: ui
@@ -99,11 +99,14 @@ concerns:
99
99
  why: the grammar renderers over HeroUI and Tailwind; no second UI kit and no CSS-in-JS.
100
100
  - id: icons
101
101
  tier: core
102
- packages: ['@phosphor-icons/react']
102
+ packages: ['@heroicons/react', '@starci/heroicons']
103
103
  home: [fe.components]
104
104
  pattern: FE-ICON
105
- forbids: [react-icons, lucide-react, '@iconify/react', '@gravity-ui/icons', '@tabler/icons-react', '@fortawesome/react-fontawesome']
106
- why: one application icon set.
105
+ forbids: ['@phosphor-icons/react', react-icons, lucide-react, '@iconify/react', '@gravity-ui/icons', '@tabler/icons-react', '@fortawesome/react-fontawesome']
106
+ why: >-
107
+ one application icon set, the heroicons family (owner ruling 2026-10-13), on the 24/outline and 16/solid cuts. @heroicons/react
108
+ is the base set and is used first; @starci/heroicons holds only the glyphs heroicons lacks (brand or domain glyphs drawn in
109
+ heroicons style), never duplicates a heroicons glyph, and a missing glyph is added to it.
107
110
  - id: theme
108
111
  tier: core
109
112
  packages: [next-themes]
@@ -987,13 +987,13 @@ rules:
987
987
  - {kind: eslint-fe, id: component-purity}
988
988
  - id: R93
989
989
  code: "FE_VENDOR_BOUNDARY"
990
- law: "Vendor primitives and icons reach components only through their named owner: the one icon set of knowledge/hfs/fe-stack.yaml through the icon leaf at the glyph scale, every vendor primitive behind a named owner; the Grammar package is imported only through its selected code and style entry and keeps its declared contract."
990
+ law: "Vendor primitives and icons reach components only through their named owner: the one icon set of knowledge/hfs/fe-stack.yaml (the heroicons family) through the icon leaf at the glyph scale, every vendor primitive behind a named owner; the Grammar package is imported only through its selected code and style entry and keeps its declared contract."
991
991
  kinds: [lint, codemod]
992
992
  gates: [pre-commit, pre-push, settle, land, ci]
993
993
  failureCodes: ["FE_VENDOR_BOUNDARY", "ARCH_GRAMMAR_CONTRACT_INVALID", "ARCH_GRAMMAR_EXPORT_BYPASS"]
994
994
  enforcers:
995
995
  - {kind: eslint-fe, id: no-vendor-icon-outside-icon-leaf}
996
- - {kind: eslint-fe, id: one-icon-set}
996
+ - {kind: eslint-fe, id: heroicons-is-the-glyph-vendor}
997
997
  - {kind: eslint-fe, id: no-off-scale-glyph-size}
998
998
  - {kind: eslint-fe, id: no-decorative-icon-in-metric-cell}
999
999
  - {kind: eslint-fe, id: vendor-primitive-has-named-owner}
@@ -309,8 +309,3 @@ removed:
309
309
  name: anonymousActions
310
310
  use: 'the front end holds no Server Action (R243 FE_SERVER_ACTION_FORBIDDEN), so no slot lists anonymous ones'
311
311
  since: 1.0.0-alpha.13
312
- - id: lint-heroicons-is-the-glyph-vendor
313
- kind: vocabulary
314
- name: heroicons-is-the-glyph-vendor
315
- use: 'the eslint-fe rule is one-icon-set: the application icon set is @phosphor-icons/react (knowledge/hfs/fe-stack.yaml icons), imported only by the Icon leaf; the grammar Icon takes whatever glyph the app supplies'
316
- since: 1.0.0-alpha.13