@starci/eslint-canon-fe 8.0.4 → 8.0.5

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
+ ## 8.0.5 - 2026-10-01
4
+
5
+ - Changed: bundled slots.yaml, sonar-gate.yaml and canon-pins.
6
+
3
7
  ## 8.0.4 - 2026-10-01
4
8
 
5
9
  - Changed: the bundled runtime copy of knowledge/hfs/canon-pins.yaml pins @starci/test-world 1.0.3. No rule or command changed.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starci/eslint-canon-fe",
3
- "version": "8.0.4",
3
+ "version": "8.0.5",
4
4
  "description": "The StarCi front-end lint canon: every rule its laws publish, gathered as one flat-config plugin and attached by one factory.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -16,6 +16,13 @@ purpose: >-
16
16
  pins:
17
17
  # --- @starci packages. Every @starci package is a PUBLISHED npm package (install: registry): a product repository
18
18
  # installs the exact pinned version from the npm registry in the root and every workspace package.json, never `file:`.
19
+ '@starci/heroicons':
20
+ version: 0.3.1
21
+ group: starci
22
+ install: registry
23
+ side: fe
24
+ source: packages/heroicons/package.json
25
+ 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
26
  '@starci/grammar':
20
27
  version: 0.8.1
21
28
  group: starci
@@ -24,14 +31,14 @@ pins:
24
31
  source: packages/grammar/package.json
25
32
  why: nivo-fe pins 0.4.11 and 0.5.0 in one workspace, starci-next-fe 0.5.1, miamia-fe 0.5.0; the runtime source is 0.8.0 (the brand layer sets `--font-sans` and `--font-mono`; the grammar reads them; 0.7.2 added the Input tel kind and IconButton disclosure props).
26
33
  '@starci/eslint-canon-be':
27
- version: 3.0.4
34
+ version: 3.0.5
28
35
  group: starci
29
36
  install: registry
30
37
  side: be
31
38
  source: packages/eslint/be/package.json
32
39
  why: '3.0.3: its bundled canon-pins copy pins stylelint-canon 2.0.2 and hfs 4.0.3; no rule changed. 3.0.2: its bundled runtime copies (slots, canon-pins, failure codes, the architecture machine) put .starcistacks and .sops.yaml at the app root (app.starcistacks, app.sops) and pin hfs 4.0.2. 3.0.1: its bundled canon-pins copy pins hfs 4.0.1. 3.0.0: `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; the project graph is built per side. 2.0.0 (C0 release): starciBeConfig({ hfs: loadHfs(import.meta.url) }) typed factory and the BE-CONVENTION laws.'
33
40
  '@starci/eslint-canon-fe':
34
- version: 8.0.4
41
+ version: 8.0.5
35
42
  group: starci
36
43
  install: registry
37
44
  side: fe
@@ -57,12 +64,12 @@ pins:
57
64
  side: both
58
65
  source: packages/prettier-config/package.json
59
66
  '@starci/jest-preset':
60
- version: 2.2.1
67
+ version: 2.2.2
61
68
  group: starci
62
69
  install: registry
63
70
  side: be
64
71
  source: packages/jest-preset/package.json
65
- why: '2.2.0: the integration, e2e and contract projects run every spec file in a worker process of its own (world-runner.cjs), so a process-global framework registry (@nestjs/graphql type metadata) never leaks between e2e files; 2.1.0: four projects on the test world, the unit kit (mockEntityManager, fakeTransaction, fakeIds, FakeClock, Outcome matchers) and the recordingOutbox claim side.'
72
+ why: '2.2.2: the unit run writes the lcov Sonar and Codecov import (services only); 2.2.0: the integration, e2e and contract projects run every spec file in a worker process of its own (world-runner.cjs), so a process-global framework registry (@nestjs/graphql type metadata) never leaks between e2e files; 2.1.0: four projects on the test world, the unit kit (mockEntityManager, fakeTransaction, fakeIds, FakeClock, Outcome matchers) and the recordingOutbox claim side.'
66
73
  '@starci/test-world':
67
74
  version: 1.0.3
68
75
  group: starci
@@ -71,7 +78,7 @@ pins:
71
78
  source: packages/test-world/package.json
72
79
  why: '1.0.3: the globalSetup registers the path aliases as TypeScript resolves them (the extends chain, paths from the config that declares them, the effective baseUrl), so a tests tsconfig that only extends the side config loads the declaration. 1.0.2: every path a declaration names (`stack`, seeds, the realm, Dockerfiles) resolves from the app root (the directory of hfs.json), where .starcistacks lives, never from the be side. The shared e2e library of every back end (R47, R48): the warm stack behind toxiproxy, the network-edge fakes, the Nest boot, the typed useTestWorld handle, useSandbox for contract specs, the outage lock and the starci-test-stack bin behind the managed test:stack script; a devDependency of every back end. 1.0.1: world.keycloak.events/sessions (the user events of the realm and live sessions through the admin API) and world.infra.postgresql.connection(name) (the database of one connection down while the others serve, under the outage lock).'
73
80
  '@starci/hfs':
74
- version: 4.0.4
81
+ version: 4.0.5
75
82
  group: starci
76
83
  install: registry
77
84
  side: both
@@ -246,7 +246,7 @@ slots:
246
246
  rules: [HFS_TOOL_CONFIG_LOCAL]
247
247
  - id: app.quality-config
248
248
  profiles: [app]
249
- path: sonar-project.properties
249
+ path: "{sonar-project.properties,codecov.yml}"
250
250
  presence: required
251
251
  tracked: tracked
252
252
  tier: none
@@ -373,7 +373,7 @@ slots:
373
373
  tracked: external
374
374
  tier: none
375
375
  tests: none
376
- goesTo: "D:/starci-lanes/<project>/<lane>/ (outside every repository) for a lane; a runtime op worktree (.starciwork/worktrees/<op>) is git-excluded, never tracked, and removed when its op settles"
376
+ goesTo: "D:/starci-lanes/<project>/<lane>/ (outside every repository) for a lane; a Kernel workflow's worktree is created and owned by Orca outside the app checkout, never tracked, and removed by the runtime's host-side controller once the workflow's finish marked it release-pending"
377
377
  - id: app.plaintext-env
378
378
  profiles: [app]
379
379
  path: "{.env,.env.*,.secrets/,**/*.pem,**/*.key}"
@@ -387,12 +387,12 @@ slots:
387
387
  # ----- side root (both sides): what the old standalone repository root held, less the app-root files ----------
388
388
  - id: repo.side-root-forbidden
389
389
  profiles: [be, fe]
390
- path: "{package.json,package-lock.json,hfs.json,README.md,.gitignore,.gitattributes,.husky/,.github/,.starciwork/,.starcistacks/,.sops.yaml,sonar-project.properties,.prettierrc,.prettierignore,scripts/}"
390
+ path: "{package.json,package-lock.json,hfs.json,README.md,.gitignore,.gitattributes,.husky/,.github/,.starciwork/,.starcistacks/,.sops.yaml,sonar-project.properties,codecov.yml,.prettierrc,.prettierignore,scripts/}"
391
391
  presence: forbidden
392
392
  tracked: external
393
393
  tier: none
394
394
  tests: none
395
- goesTo: "the app root: one package.json, lockfile, hfs.json, README, git and CI files, hooks, formatter, Sonar configuration, scripts/, .starciwork, .starcistacks and .sops.yaml per app"
395
+ goesTo: "the app root: one package.json, lockfile, hfs.json, README, git and CI files, hooks, formatter, Sonar and Codecov configuration, scripts/, .starciwork, .starcistacks and .sops.yaml per app"
396
396
  - id: be.tool-config
397
397
  profiles: [be]
398
398
  # Managed files (hfs sync renders them, hfs check compares them): the whole tool configuration of a back end. Each is
@@ -8,16 +8,24 @@ purpose: |
8
8
  conditions and selects it for the project, and (2) judges an op's slice - the lines it changed - against
9
9
  the same numbers. Code-writing ops cannot settle done while the slice is red
10
10
  (scripts/kernel/sonar-settle.mjs). Changing a number here changes every repository on the next scan.
11
- The gate has two parts: `newCode` (the recent work: duplication, blocker/critical issues, hotspots) and
12
- `overall` (the whole code: no imported HFS, ESLint or stylelint finding, no duplicated-lines excess, no cognitive-
13
- complexity issue). The one Sonar mechanism of the HFS canon is packages/hfs/README.md section "Sonar".
11
+ The gate has two parts: `newCode` (the recent work: coverage, duplication, blocker/critical issues, hotspots) and
12
+ `overall` (the whole code: coverage, no imported HFS, ESLint or stylelint finding, no bug, code smell or
13
+ vulnerability, every hotspot reviewed, no duplicated-lines excess, no cognitive-complexity issue). The one Sonar
14
+ mechanism of the HFS canon is packages/hfs/README.md section "Sonar".
14
15
  gate:
15
16
  name: starci-new-code
16
17
  # A project with no new-code baseline judges the whole project as new code (nivo inc-f92febebbb64); a fixed
17
18
  # window keeps "new code" the recent work on main, so the server gate is passable on a healthy main.
18
19
  newCodePeriod: {type: NUMBER_OF_DAYS, value: 30}
19
20
  newCode:
20
- # Sonar holds NO coverage condition: unit coverage is the runner's job (jest per-file 100 on `*.service.ts`), never an lcov import.
21
+ # Coverage of the services only. The be unit run writes coverage/lcov.info (@starci/jest-preset coverageReporters lcov) and the
22
+ # managed sonar-project.properties imports it (sonar.javascript.lcov.reportPaths=be/coverage/lcov.info) with
23
+ # sonar.coverage.inclusions=be/src/**/*.service.ts, the one scope rendered by hfs sync from the preset's COVERAGE_SOURCES (codecov.yml
24
+ # is rendered from the same constant). A handler, resolver, controller, module, config file or test is not a coverage target and
25
+ # fe/ is outside coverage entirely, so coverage on these conditions is the services' coverage alone.
26
+ coverage:
27
+ metric: new_coverage
28
+ minPercent: 100
21
29
  # SonarQube's ignoreSmallChanges: fewer changed lines than this are not held to duplication.
22
30
  ignoreBelowChangedLines: 20
23
31
  duplication:
@@ -49,6 +57,19 @@ overall:
49
57
  metric: violations
50
58
  max: 0
51
59
  engines: [starci-hfs, eslint, stylelint]
60
+ # The dashboard counts (`sonar-local dashboard`): each type of open issue, each held at `max`.
61
+ types: {bugs: BUG, code_smells: CODE_SMELL, vulnerabilities: VULNERABILITY}
62
+ # Every security hotspot of the whole code is reviewed (the dashboard's "hotspots reviewed").
63
+ hotspots:
64
+ metric: security_hotspots_reviewed
65
+ minReviewedPercent: 100
66
+ # The services' coverage (see newCode.coverage), overall and per file: with the inclusions in place each `*.service.ts` is its
67
+ # own measure, so one service below 100 fails the slice verdict (sonar-local evaluateSlice) and the dashboard verdict
68
+ # (sonar-local dashboard) although the project average may round to 100. A file outside the inclusions is never read.
69
+ coverage:
70
+ metric: coverage
71
+ minPercent: 100
72
+ perFile: true
52
73
  # HFS_DUPLICATE_CODE (R21): duplicated lines density of the whole project, the Sonar enforcer of the machine's clone check.
53
74
  # SonarJS runs its own token-based detection (sonar.cpd.* minimums are not read for TypeScript), so ruleParams.<profile>.duplicateBlock
54
75
  # is enforced by the machine and imported as starci-hfs issues, and this density is the Sonar-side backstop.
@@ -70,8 +91,10 @@ enforcedOps: [backend.implement, interface.implement, code.refactor]
70
91
  reasoning: |
71
92
  Chosen against the four projects the local server holds on 2026-09-29 (whole-project duplicated lines
72
93
  1.6 / 2.1 / 1.7 / 0.0 percent), so new code that meets them is at or below what main already carries.
73
- no coverage condition: the unit project fails below its per-file 100 threshold on `*.service.ts`, so Sonar never
74
- imports an lcov report and never judges coverage.
94
+ coverage 100 on services, overall and new code (owner 2026-10-01): the unit project already fails below its per-file
95
+ 100 threshold on `*.service.ts`; Sonar imports the same run's lcov with the same scope, so the dashboard, the slice
96
+ verdict and the server gate show the number the runner enforces, file by file. Only services count: business logic
97
+ lives there, the thin layers are covered through them, and the front end has no unit tests.
75
98
  duplication 3: the Sonar way value; the worst project today is 2.1, so 3 rejects a real copy-paste block and
76
99
  passes ordinary work.
77
100
  blocker/critical 0: the two severities that are defects, not style. main carries old debt of both kinds