@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 +6 -0
- package/README.md +4 -4
- package/config.mjs +2 -2
- package/index.d.ts +4 -4
- package/index.mjs +1 -1
- package/package.json +23 -15
- package/runtime/knowledge/hfs/canon-pins.yaml +18 -19
- package/runtime/scripts/hfs/rule-catalog.mjs +2 -2
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-
|
|
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 `
|
|
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-
|
|
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-
|
|
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 {
|
|
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 }) =>
|
|
9
|
+
export const offsetPopGrammarConfig = ({ hfs }) => coreGrammarConfig({ hfs, family: "offset-pop" })
|
package/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
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-
|
|
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
|
|
16
|
-
}): ReturnType<typeof
|
|
15
|
+
hfs: Parameters<typeof coreGrammarConfig>[0]["hfs"]
|
|
16
|
+
}): ReturnType<typeof coreGrammarConfig>
|
package/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starci/eslint-grammar-offset-pop",
|
|
3
|
-
"version": "0.
|
|
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-
|
|
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.
|
|
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.
|
|
40
|
+
version: 3.4.57
|
|
41
41
|
group: starci
|
|
42
42
|
install: registry
|
|
43
43
|
side: be
|
|
44
|
-
source: packages/eslint
|
|
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.
|
|
47
|
+
version: 9.2.0
|
|
48
48
|
group: starci
|
|
49
49
|
install: registry
|
|
50
50
|
side: fe
|
|
51
|
-
source: packages/eslint
|
|
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-
|
|
54
|
-
version: 0.
|
|
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
|
|
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.
|
|
61
|
+
version: 0.13.0
|
|
62
62
|
group: starci
|
|
63
63
|
install: registry
|
|
64
64
|
side: fe
|
|
65
|
-
source: packages/eslint
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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'). */
|