@starci/eslint-grammar-offset-pop 0.12.14 → 0.13.0

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,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.13.0 - 2026-10-27
4
+
5
+ - Changed: versioned together with Grammar 0.13.0; `@starci/eslint-grammar-core` 0.13.0 is a peer dependency, installed by the app beside this package. Offset Pop is unchanged and refuses `core`.
6
+ - Changed: the package lives in github.com/starci183/starci-harness under `packages/` and publishes from there; its bundled `runtime/` is committed source, edited in place (no generator, no `prepack`/`pretest` hook).
7
+
8
+
3
9
  ## 0.12.14 - 2026-10-27
4
10
 
5
11
  - Fixed: the bundled runtime copy now carries the static import closure of its slot view, so the slot modules it imports are present.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # @starci/eslint-grammar-offset-pop
2
2
 
3
- Offset Pop composes the Common renderers and types. This package inherits their checks from the exact matching `@starci/eslint-grammar-starci` release; the rule implementations and shared infrastructure have one owner. Offset Pop has no additional component API rules yet. Its visual choices belong to its DNA and packaged stylesheet.
3
+ Offset Pop composes the Common renderers and types. This package inherits their checks from the exact matching `@starci/eslint-grammar-core` release; the rule implementations and shared infrastructure have one owner. Offset Pop has no additional component API rules yet. Its visual choices belong to its DNA and packaged stylesheet.
4
4
 
5
- Rule ownership follows `FE-RULE-OWNERSHIP` in `knowledge/patterns/fe/index.yaml`. The family's inheritance is declared in `knowledge/grammars/offset-pop/family.yaml`; the app-shell law is `knowledge/ui/composition/app-shell.yaml`.
5
+ Rule ownership follows `FE-RULE-OWNERSHIP` in `contexts/code/fe/README.md` of the StarCi harness. The family's inheritance is declared in `contexts/grammars/offset-pop.md`; the app-shell law is `contexts/ui/composition.md`.
6
6
 
7
7
  The managed `fe/eslint.config.mjs` consumes the universal canon and the selected family:
8
8
 
@@ -18,13 +18,13 @@ The inherited rule IDs use the `starci-grammar` prefix. `rules`, `recommended`,
18
18
 
19
19
  ## Migrating from @starci/eslint-canon-fe 8.x
20
20
 
21
- The pinned canon-fe release moved the twenty Grammar component rules (listed in the `@starci/eslint-grammar-starci`
21
+ The pinned canon-fe release moved the twenty Grammar component rules (listed in the `@starci/eslint-grammar-core`
22
22
  README and the pinned canon-fe changelog) out of the universal canon. An Offset Pop app receives them
23
23
  through this package under the `starci-grammar/` namespace with unchanged IDs, codes and severity.
24
24
 
25
25
  1. Set `sides.fe.grammar` to `offset-pop` in `hfs.json`; no family is inferred.
26
26
  2. Install this package at its canon-pins version beside `@starci/eslint-canon-fe` 9 in the app
27
- root `devDependencies`; it brings the matching `@starci/eslint-grammar-starci`. `starci app check`
27
+ root `devDependencies`; it brings the matching `@starci/eslint-grammar-core`. `starci app check`
28
28
  refuses canon-fe 9 without it (`FE_STACK_FAMILY_LINT_MISSING`).
29
29
  3. Compose `starciFeConfig({ hfs })` first and `offsetPopGrammarConfig({ hfs })` second (the block
30
30
  above); `starci app sync` renders that managed `fe/eslint.config.mjs`.
package/config.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { starciGrammarConfig } from "@starci/eslint-grammar-starci"
1
+ import { coreGrammarConfig } from "@starci/eslint-grammar-core"
2
2
 
3
3
  /**
4
4
  * Attach the inherited Common API laws for a front end selecting Offset Pop.
@@ -6,4 +6,4 @@ import { starciGrammarConfig } from "@starci/eslint-grammar-starci"
6
6
  * @param {{ hfs: object }} input - The front-end HFS view from the universal canon's loadHfs.
7
7
  * @returns {Array<object>} Family rules at error under the shared starci-grammar namespace.
8
8
  */
9
- export const offsetPopGrammarConfig = ({ hfs }) => starciGrammarConfig({ hfs, family: "offset-pop" })
9
+ export const offsetPopGrammarConfig = ({ hfs }) => coreGrammarConfig({ hfs, family: "offset-pop" })
package/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { starciGrammarConfig } from "@starci/eslint-grammar-starci"
1
+ import type { coreGrammarConfig } from "@starci/eslint-grammar-core"
2
2
 
3
3
  export {
4
4
  default,
@@ -8,9 +8,9 @@ export {
8
8
  lawOwners,
9
9
  ruleDeclarations,
10
10
  why,
11
- } from "@starci/eslint-grammar-starci"
11
+ } from "@starci/eslint-grammar-core"
12
12
 
13
13
  /** Attach the inherited Common API checks for the selected Offset Pop family. */
14
14
  export declare function offsetPopGrammarConfig(input: {
15
- hfs: Parameters<typeof starciGrammarConfig>[0]["hfs"]
16
- }): ReturnType<typeof starciGrammarConfig>
15
+ hfs: Parameters<typeof coreGrammarConfig>[0]["hfs"]
16
+ }): ReturnType<typeof coreGrammarConfig>
package/index.mjs CHANGED
@@ -7,5 +7,5 @@ export {
7
7
  lawOwners,
8
8
  ruleDeclarations,
9
9
  why,
10
- } from "@starci/eslint-grammar-starci"
10
+ } from "@starci/eslint-grammar-core"
11
11
  export { offsetPopGrammarConfig } from "./config.mjs"
package/package.json CHANGED
@@ -1,9 +1,26 @@
1
1
  {
2
2
  "name": "@starci/eslint-grammar-offset-pop",
3
- "version": "0.12.14",
3
+ "version": "0.13.0",
4
4
  "description": "Offset Pop Grammar lint: the inherited Common component contract over its own visual family.",
5
+ "keywords": [
6
+ "eslint",
7
+ "eslintplugin",
8
+ "starci",
9
+ "grammar",
10
+ "offset-pop"
11
+ ],
5
12
  "type": "module",
6
13
  "license": "MIT",
14
+ "author": "starci183",
15
+ "homepage": "https://github.com/starci183/starci-harness/tree/main/packages/eslint-grammar-offset-pop#readme",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/starci183/starci-harness.git",
19
+ "directory": "packages/eslint-grammar-offset-pop"
20
+ },
21
+ "bugs": {
22
+ "url": "https://github.com/starci183/starci-harness/issues"
23
+ },
7
24
  "private": false,
8
25
  "main": "./index.mjs",
9
26
  "types": "./index.d.ts",
@@ -28,30 +45,21 @@
28
45
  },
29
46
  "peerDependencies": {
30
47
  "eslint": ">=9",
31
- "typescript": ">=5.9"
32
- },
33
- "dependencies": {
34
- "@starci/eslint-grammar-starci": "0.12.14"
48
+ "typescript": ">=5.9",
49
+ "@starci/eslint-grammar-core": "0.13.0"
35
50
  },
36
51
  "devDependencies": {
52
+ "@starci/eslint-canon-fe": "file:../eslint-canon-fe",
53
+ "@starci/eslint-grammar-core": "file:../eslint-grammar-core",
37
54
  "@typescript-eslint/parser": "8.71.0",
38
55
  "eslint": "9.39.5",
39
56
  "eslint-plugin-react-hooks": "7.1.1",
40
57
  "typescript": "5.9.3"
41
58
  },
42
59
  "scripts": {
43
- "prepack": "node ../../hfs/prep-runtime.mjs",
44
- "pretest": "node ../../hfs/prep-runtime.mjs",
45
60
  "test": "node --test \"*.spec.mjs\""
46
61
  },
47
62
  "publishConfig": {
48
63
  "access": "public"
49
- },
50
- "keywords": [
51
- "eslint",
52
- "eslintplugin",
53
- "starci",
54
- "grammar",
55
- "offset-pop"
56
- ]
64
+ }
57
65
  }
@@ -21,7 +21,7 @@ pins:
21
21
  install: registry
22
22
  side: fe
23
23
  source: packages/heroicons/package.json
24
- why: 'StarCi custom Heroicons-compatible cuts; eslint-grammar-starci (icon.mjs) admits @starci/heroicons/24/outline and /16/solid as icon sources, so an app that uses them gets this exact version.'
24
+ why: 'StarCi custom Heroicons-compatible cuts; eslint-grammar-core (icon.mjs) admits @starci/heroicons/24/outline and /16/solid as icon sources, so an app that uses them gets this exact version.'
25
25
  '@starci/event-stream':
26
26
  version: 0.1.0
27
27
  group: starci
@@ -30,61 +30,61 @@ pins:
30
30
  source: packages/event-stream/package.json
31
31
  why: 'the one server-sent-events client of every front end (fe-stack event-stream, owner:event-stream-package): the transport client layer (modules/api/sse/clients) creates one instance for the app with the bearer token source and the stream operations follow on it; it carries Last-Event-ID resume, the capped doubling backoff, the heartbeat timeout, the single 401 renewal and the useSWRSubscription adapter, so no app keeps a hand-written reader.'
32
32
  '@starci/grammar':
33
- version: 0.12.14
33
+ version: 0.13.0
34
34
  group: starci
35
35
  install: registry
36
36
  side: fe
37
37
  source: packages/grammar/package.json
38
38
  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.'
39
39
  '@starci/eslint-canon-be':
40
- version: 3.4.56
40
+ version: 3.4.57
41
41
  group: starci
42
42
  install: registry
43
43
  side: be
44
- source: packages/eslint/be/package.json
44
+ source: packages/eslint-canon-be/package.json
45
45
  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.'
46
46
  '@starci/eslint-canon-fe':
47
- version: 9.1.10
47
+ version: 9.2.0
48
48
  group: starci
49
49
  install: registry
50
50
  side: fe
51
- source: packages/eslint/fe/package.json
51
+ source: packages/eslint-canon-fe/package.json
52
52
  why: 'the front-end ESLint canon: `loadHfs(import.meta.url)` of fe/eslint.config.mjs finds the app-root hfs.json (kind app) and gives every linted file the view of the fe 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; the front end has no tests (FE_NO_TESTS R97 in hfs) and no-vietnamese-in-source (R91) applies.'
53
- '@starci/eslint-grammar-starci':
54
- version: 0.12.14
53
+ '@starci/eslint-grammar-core':
54
+ version: 0.13.0
55
55
  group: starci
56
56
  install: registry
57
57
  side: fe
58
- source: packages/eslint/grammar-starci/package.json
58
+ source: packages/eslint-grammar-core/package.json
59
59
  why: 'the StarCi Grammar component API lint, versioned with @starci/grammar; front ends compose this family package with the universal FE canon.'
60
60
  '@starci/eslint-grammar-offset-pop':
61
- version: 0.12.14
61
+ version: 0.13.0
62
62
  group: starci
63
63
  install: registry
64
64
  side: fe
65
- source: packages/eslint/grammar-offset-pop/package.json
65
+ source: packages/eslint-grammar-offset-pop/package.json
66
66
  why: 'the Offset Pop Grammar component API lint, versioned with @starci/grammar; its shared component contract comes from the StarCi family lint without copying rules.'
67
67
  '@starci/stylelint-canon':
68
- version: 2.0.13
68
+ version: 2.1.0
69
69
  group: starci
70
70
  install: registry
71
71
  side: fe
72
- source: packages/stylelint/package.json
72
+ source: packages/stylelint-canon/package.json
73
73
  why: 'the front-end stylelint canon: no-class-selector refuses a compound class selector (`div.card`); the brand layer accepts `--font-sans` and `--font-mono`; status-contrast measures the HeroUI soft pairs per theme; brand-layer-shape reads the shared :root,.light,.dark block and the info soft pair; appTokens come from loadAppTokens(import.meta.url) for the managed one-line stylelint.config.mjs.'
74
74
  '@starci/tsconfig':
75
- version: 2.0.7
75
+ version: 2.0.8
76
76
  group: starci
77
77
  install: registry
78
78
  side: both
79
79
  source: packages/tsconfig/package.json
80
80
  '@starci/prettier-config':
81
- version: 1.0.4
81
+ version: 1.0.5
82
82
  group: starci
83
83
  install: registry
84
84
  side: both
85
85
  source: packages/prettier-config/package.json
86
86
  '@starci/jest-preset':
87
- version: 2.3.6
87
+ version: 2.3.7
88
88
  group: starci
89
89
  install: registry
90
90
  side: be
@@ -102,10 +102,9 @@ pins:
102
102
  group: starci
103
103
  install: registry
104
104
  side: both
105
- source: packages/cli/package.json
106
105
  why: 'the only StarCi command package; product repositories install it for starci app, while @starci/hfs remains its pinned transitive implementation.'
107
106
  '@starci/hfs':
108
- version: 4.7.47
107
+ version: 4.8.0
109
108
  group: starci
110
109
  install: registry
111
110
  side: both
@@ -406,7 +405,7 @@ pins:
406
405
  version: 2.2.0
407
406
  group: ui
408
407
  side: fe
409
- why: 'the base of the one application icon set (fe-stack icons, with @starci/heroicons for the glyphs it lacks); eslint-grammar-starci (icon.mjs) admits @heroicons/react/24/outline and /16/solid.'
408
+ why: 'the base of the one application icon set (fe-stack icons, with @starci/heroicons for the glyphs it lacks); eslint-grammar-core (icon.mjs) admits @heroicons/react/24/outline and /16/solid.'
410
409
  '@dicebear/core':
411
410
  version: 10.4.0
412
411
  group: ui
@@ -12,7 +12,7 @@ import { fail } from './slot-errors.mjs';
12
12
 
13
13
  const HFS_RULES_FILE = 'knowledge/hfs/rules.yaml';
14
14
  const RULE_GATES = Object.freeze(['pre-commit', 'pre-push', 'settle', 'land', 'ci', 'sonar', 'runtime']);
15
- const ENFORCER_FAMILIES = Object.freeze(['eslint-be', 'eslint-fe', 'eslint-grammar-starci', 'stylelint', 'machine', 'hfs', 'work-validate', 'sonar', 'runtime']);
15
+ const ENFORCER_FAMILIES = Object.freeze(['eslint-be', 'eslint-fe', 'eslint-grammar-core', 'stylelint', 'machine', 'hfs', 'work-validate', 'sonar', 'runtime']);
16
16
  const RULE_KINDS = Object.freeze(['codemod', 'lint', 'check', 'design']);
17
17
  const FINDING_CODE = /^[A-Z][A-Z0-9]*(_[A-Z0-9]+)+$/;
18
18
  const ENFORCER_ID = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
@@ -346,7 +346,7 @@ export function loadRuleCatalog({ root = skillRoot, file = path.join(root, HFS_R
346
346
  /** The catalogued why code of a lint finding's rule id (`starci-be/<id>`, `starci-fe/<id>`), or undefined. */
347
347
  lintCode: (ruleId) => {
348
348
  const [plugin, id] = String(ruleId ?? '').split('/');
349
- const kind = (plugin === 'starci-be' && 'eslint-be') || (plugin === 'starci-fe' && 'eslint-fe') || (plugin === 'starci-grammar' && 'eslint-grammar-starci') || null;
349
+ const kind = (plugin === 'starci-be' && 'eslint-be') || (plugin === 'starci-fe' && 'eslint-fe') || (plugin === 'starci-grammar' && 'eslint-grammar-core') || null;
350
350
  return kind ? list.find((rule) => rule.enforcers.some((enforcer) => enforcer.kind === kind && enforcer.id === id))?.code : undefined;
351
351
  },
352
352
  /** The rules one enforcer judges, e.g. forEnforcer('eslint-be', 'error-home'). */