@starci/eslint-grammar-offset-pop 0.12.13 → 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.
Files changed (43) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +4 -4
  3. package/config.mjs +2 -2
  4. package/index.d.ts +4 -4
  5. package/index.mjs +1 -1
  6. package/package.json +23 -15
  7. package/runtime/engine/by-code-unit.mjs +12 -0
  8. package/runtime/engine/config.mjs +461 -0
  9. package/runtime/engine/invalid-config.mjs +15 -0
  10. package/runtime/engine/model-config.mjs +90 -0
  11. package/runtime/engine/orca-config.mjs +29 -0
  12. package/runtime/engine/release-config.mjs +28 -0
  13. package/runtime/engine/removed-vocabulary.mjs +26 -0
  14. package/runtime/engine/resources-config.mjs +52 -0
  15. package/runtime/engine/secrets.mjs +134 -0
  16. package/runtime/engine/sonar-config.mjs +21 -0
  17. package/runtime/knowledge/hfs/canon-pins.yaml +19 -20
  18. package/runtime/modules/kernel/removed-vocabulary.yaml +458 -0
  19. package/runtime/modules/models/registry.yaml +221 -0
  20. package/runtime/modules/models/runtimes.yaml +556 -0
  21. package/runtime/modules/models/tiers.yaml +66 -0
  22. package/runtime/scripts/hfs/declaration-shape.mjs +157 -0
  23. package/runtime/scripts/hfs/declaration-slots.mjs +86 -0
  24. package/runtime/scripts/hfs/edition-slots.mjs +77 -0
  25. package/runtime/scripts/hfs/manifest-shape.mjs +435 -0
  26. package/runtime/scripts/hfs/param-names.mjs +18 -0
  27. package/runtime/scripts/hfs/rule-catalog.mjs +362 -0
  28. package/runtime/scripts/hfs/rule-params-shape.mjs +80 -0
  29. package/runtime/scripts/hfs/slot-app-view.mjs +102 -0
  30. package/runtime/scripts/hfs/slot-classify.mjs +65 -0
  31. package/runtime/scripts/hfs/slot-errors.mjs +11 -0
  32. package/runtime/scripts/hfs/slot-imports.mjs +91 -0
  33. package/runtime/scripts/hfs/slot-manifest-shape.mjs +73 -0
  34. package/runtime/scripts/hfs/slot-match.mjs +153 -0
  35. package/runtime/scripts/hfs/slot-path.mjs +8 -0
  36. package/runtime/scripts/hfs/slot-required.mjs +89 -0
  37. package/runtime/scripts/hfs/slot-semantic-problems.mjs +149 -0
  38. package/runtime/scripts/hfs/slot-side-problems.mjs +28 -0
  39. package/runtime/scripts/lib/i18n.mjs +85 -0
  40. package/runtime/scripts/lib/json-clone.mjs +61 -0
  41. package/runtime/scripts/lib/list.mjs +31 -0
  42. package/runtime/scripts/lib/regex.mjs +4 -0
  43. package/runtime/scripts/lib/yaml-cached.mjs +14 -0
@@ -0,0 +1,458 @@
1
+ # Every spelling the runtime refuses by name, each with what replaced it. engine/removed-vocabulary.mjs reads this file:
2
+ # the config and routing-bias refusals take their names and replacements from it, and the `removed-vocabulary` self-check
3
+ # refuses any of these spellings in text an agent or the owner reads, outside this file, CHANGELOG.md and a block marked
4
+ # `[removed-list]` (CONTRIBUTING.md, "Removing or renaming a spelling").
5
+ # Fields: id; kind (config-key | bias-field | verb | flag | code | vocabulary | file; a file is named by its base name); name (the removed spelling); use (the
6
+ # replacement, worded to finish the sentence "<name> is removed (<use>)"); since (the release that removed it);
7
+ # match (optional regular expression the scan uses instead of the literal name); scan (false when the name is too common
8
+ # a word to scan for).
9
+ kinds: [config-key, bias-field, verb, flag, code, vocabulary, file]
10
+ removed:
11
+ - id: fe-landmark-branch-inventory
12
+ kind: vocabulary
13
+ name: LANDMARK_BRANCHES
14
+ use: 'the selected Grammar lint package owns its component vocabulary; the universal FE canon exposes no component inventory'
15
+ since: 1.0.0-alpha.31
16
+ - id: fe-grammar-rule-namespace
17
+ kind: vocabulary
18
+ name: starci-fe Grammar component rules
19
+ match: 'starci-fe/(?:app-shell-frame|no-shell-bottom-tabs|navbar-control-size|navbar-cluster|no-navbar-create|no-raw-structural-element|no-heading-tag-outside-heading-component|status-text-uses-soft-foreground|vendor-primitive-has-named-owner|no-vendor-icon-outside-icon-leaf|heroicons-is-the-glyph-vendor|no-off-scale-glyph-size|no-icon-size-class|destructive-menu-entry-needs-danger-tone|no-decorative-icon-in-metric-cell|no-inline-svg-outside-brand-mark-leaf|no-fractional-step|no-hand-rolled-heading|no-unresolved-token-class|slot-status-through-slotview)\b'
20
+ use: 'the same rule id under starci-grammar/ from the selected Grammar lint package; FE-RULE-OWNERSHIP governs placement'
21
+ since: 1.0.0-alpha.31
22
+ - id: offset-pop-toaster-content-guidance
23
+ kind: vocabulary
24
+ name: toaster-clear-of-the-dock
25
+ use: 'toaster-clear-of-content in the Offset Pop playbook'
26
+ since: 1.0.0-alpha.31
27
+ - id: cut-seam-command
28
+ kind: flag
29
+ name: cut-seam --command
30
+ match: 'cut-seam[^\n]*--command\b'
31
+ use: 'cut-seam --reconcile reads the commands and selection from --checks-file'
32
+ since: 1.0.0-alpha.31
33
+ - id: cut-set-closing-check
34
+ kind: vocabulary
35
+ name: closingCheck
36
+ use: 'modules/kernel/check-policy.yaml#regression owns integration checks after job merges; closingOrdinal identifies only the final open ordinal'
37
+ since: 1.0.0-alpha.31
38
+ - id: verb-guard-input
39
+ kind: verb
40
+ name: starci guard input
41
+ use: 'the reference-transaction hook reads prepared ref updates directly in its shell loop'
42
+ since: 1.0.0-alpha.31
43
+ - id: hook-input-timeout-ms
44
+ kind: config-key
45
+ name: hook-input.timeoutMs
46
+ use: 'modules/kernel/hook-input.yaml declares the input window as minInputWindowMs'
47
+ since: 1.0.0-alpha.31
48
+ - id: bias-require
49
+ kind: bias-field
50
+ name: require
51
+ use: 'a requirement is now `only`, which keeps just the named members of the tier chain: write each as "<agent>", "<agent>/<model>" or a {pool, provider, model} selector, e.g. {"only":["claude"]}'
52
+ since: 1.0.0-alpha.6
53
+ match: '\brequire\s*:\s*[\[{]|"require"\s*:|\brequire bias\b|\bbias[^\n.]{0,30}`require`'
54
+ - id: config-models-pools
55
+ kind: config-key
56
+ name: models.pools
57
+ use: 'tiers are ordered member chains in modules/models/tiers.yaml; override one with models.tiers'
58
+ since: 1.0.0-alpha.6
59
+ - id: config-models-nonoperation
60
+ kind: config-key
61
+ name: models.nonOperation
62
+ use: 'planner, validator and kernelManager take the frontier tier (modules/models/tiers.yaml seats); remap with models.seats'
63
+ since: 1.0.0-alpha.6
64
+ - id: config-models-selection
65
+ kind: config-key
66
+ name: models.selection
67
+ use: 'selection is always quota-aware; there is no key'
68
+ since: 1.0.0-alpha.6
69
+ - id: config-allocation-shares
70
+ kind: config-key
71
+ name: allocation.shares
72
+ use: 'the picker balances by models.balance (maxStreak, maxSharePercent); there are no per-provider weights'
73
+ since: 1.0.0-alpha.6
74
+ match: 'allocation[. ]shares'
75
+ - id: config-allocation-windowhours
76
+ kind: config-key
77
+ name: allocation.windowHours
78
+ use: 'balance reads the recent picks of one tier (models.balance); there is no window'
79
+ since: 1.0.0-alpha.6
80
+ - id: config-allocation-preferredprovider
81
+ kind: config-key
82
+ name: allocation.preferredProvider
83
+ use: 'an owner preference is a goal routing bias (prefer <agent>)'
84
+ since: 1.0.0-alpha.6
85
+ match: 'preferredProvider'
86
+ - id: config-allocation-policy
87
+ kind: config-key
88
+ name: allocation.policy
89
+ use: 'the picker is the one policy; there is no key'
90
+ since: 1.0.0-alpha.6
91
+ - id: config-allocation-mode
92
+ kind: config-key
93
+ name: allocation.mode
94
+ use: 'allocation holds grants only'
95
+ since: 1.0.0-alpha.6
96
+ - id: config-kernel-group
97
+ kind: config-key
98
+ name: kernel.group
99
+ use: 'the Kernel takes the high tier; pin with kernel.agent / kernel.model (an `only` bias)'
100
+ since: 1.0.0-alpha.6
101
+ - id: config-supervisor-kernel-group
102
+ kind: config-key
103
+ name: supervisor.kernel.group
104
+ use: 'the Supervisor takes the frontier tier; pin with supervisor.kernel.agent / .model (an `only` bias)'
105
+ since: 1.0.0-alpha.6
106
+ - id: config-coredebug
107
+ kind: config-key
108
+ name: coreDebug
109
+ use: 'the debug watcher is a /loop of the calling chat, not a seat; the cadence and the worktree alert limit are debugLoop.interval and debugLoop.worktreeLimit'
110
+ since: 1.0.0-alpha.6
111
+ - id: config-debug
112
+ kind: config-key
113
+ name: debug
114
+ use: 'the debug watcher is started by the /starci skill in the calling chat; there is no switch (debugLoop.interval sets its cadence)'
115
+ since: 1.0.0-alpha.6
116
+ scan: false
117
+ - id: vocabulary-sol-opus
118
+ kind: vocabulary
119
+ name: sol-opus
120
+ use: 'a pool of two providers is a tier chain of members (modules/models/tiers.yaml)'
121
+ since: 1.0.0-alpha.6
122
+ - id: seat-core-debug
123
+ kind: vocabulary
124
+ name: core-debug seat
125
+ use: 'the debug watcher is a /loop of the calling chat running `starci debug digest`'
126
+ since: 1.0.0-alpha.6
127
+ match: '\bcore-debug\s+(?:seat|watcher|worker|pass)\b'
128
+ - id: verb-debug-pass
129
+ kind: verb
130
+ name: debug pass
131
+ use: '`starci debug digest` (read-only) and `starci debug run <probe>`'
132
+ since: 1.0.0-alpha.6
133
+ match: '(?<![\w-])debug pass\b'
134
+ - id: flag-land-no-push
135
+ kind: flag
136
+ name: --no-push
137
+ use: 'a land never pushes, so there is nothing to leave unpushed'
138
+ since: 1.0.0-alpha.7
139
+ - id: code-landed-push-owed
140
+ kind: code
141
+ name: landed-push-owed
142
+ use: 'a land has no push step; the outcome is landed'
143
+ since: 1.0.0-alpha.7
144
+ - id: flag-caller-agent
145
+ kind: flag
146
+ name: --caller-agent
147
+ use: 'the debug digest runs in the calling chat; it takes no caller flag'
148
+ since: 1.0.0-alpha.6
149
+ - id: flag-caller-model
150
+ kind: flag
151
+ name: --caller-model
152
+ use: 'the debug digest runs in the calling chat; it takes no caller flag'
153
+ since: 1.0.0-alpha.6
154
+ - id: flag-caller-effort
155
+ kind: flag
156
+ name: --caller-effort
157
+ use: 'the debug digest runs in the calling chat; it takes no caller flag'
158
+ since: 1.0.0-alpha.6
159
+ - id: code-workflow-debug-not-ready
160
+ kind: code
161
+ name: workflow-debug-not-ready
162
+ use: 'there is no debug seat to be ready; the digest reads the ledger directly'
163
+ since: 1.0.0-alpha.6
164
+ - id: file-core-debug
165
+ kind: file
166
+ name: core-debug.mjs
167
+ use: 'the debug watcher is a /loop of the calling chat running `starci debug digest`; the core-watch probe is scripts/reconciler/core-watch.mjs'
168
+ since: 1.0.0-alpha.6
169
+ match: '(?<![\w-])core-debug\.mjs\b'
170
+ - id: file-debug-pass
171
+ kind: file
172
+ name: debug-pass.mjs
173
+ use: '`starci debug digest` (read-only)'
174
+ since: 1.0.0-alpha.6
175
+ match: '(?<![\w-])debug-pass\.mjs\b'
176
+ - id: file-caller-context
177
+ kind: file
178
+ name: caller-context.mjs
179
+ use: 'there is no declared caller context; the debug digest runs in the calling chat'
180
+ since: 1.0.0-alpha.6
181
+ match: '(?<![\w-])caller-context\b'
182
+ - id: file-host-maintenance
183
+ kind: file
184
+ name: host-maintenance.md
185
+ use: 'skills/starci/references/host-startup.md'
186
+ since: 1.0.0-alpha.6
187
+ match: '(?<![\w-])host-maintenance\b'
188
+ - id: config-drawloop-critic
189
+ kind: config-key
190
+ name: allocation.drawLoop.critic
191
+ use: 'the Critic is picked from its tier (modules/models/tiers.yaml seats.critic, modules/kernel/critic.yaml) with provider independence as a hard filter; its wall bound is allocation.drawLoop.criticTimeoutMs'
192
+ since: 1.0.0-alpha.9
193
+ match: 'allocation\.drawLoop\.critic(?![A-Za-z])'
194
+ - id: config-drawloop-criticwhendrawer
195
+ kind: config-key
196
+ name: allocation.drawLoop.criticWhenDrawer
197
+ use: 'the Critic tier holds a member of every provider and the picker removes the provider of the maker; there is no per-drawer table'
198
+ since: 1.0.0-alpha.9
199
+ match: 'criticWhenDrawer'
200
+ - id: registry-critic-coverage-define-architecture
201
+ kind: vocabulary
202
+ name: critic-coverage-define-architecture
203
+ use: 'the edge-case registry entry is critic-coverage-decision-legs'
204
+ since: 1.0.0-alpha.9
205
+ - id: supervisor-grammar-release
206
+ kind: vocabulary
207
+ name: grammarRelease
208
+ use: 'the owner publishes @starci/grammar through starci release publish; the Supervisor changes no runtime code'
209
+ since: 1.0.0-alpha.9
210
+ - id: supervise-yaml-worker-land-blocks
211
+ kind: vocabulary
212
+ name: supervise.yaml workers
213
+ use: 'the Supervisor spawns no fix workers and lands nothing: it answers its menu (starci supervisor status) and records runtime defects for Debug'
214
+ since: 1.0.0-alpha.9
215
+ match: 'supervise\.yaml\s+(?:workers|landGate)\b|supervise\.yaml\s+kernelSeat/workers'
216
+ - id: supervisor-fixes-through-lanes
217
+ kind: vocabulary
218
+ name: the Supervisor fixes through lanes
219
+ use: 'the Supervisor records a runtime defect (starci supervisor actions record --item runtime-defect:<cause>) and Debug changes .claude'
220
+ since: 1.0.0-alpha.9
221
+ match: 'Supervisor[^\n.]{0,60}\bfix(?:es)?\s+through\s+(?:its\s+own\s+)?(?:staged\s+)?lanes?\b'
222
+ - id: kernel-ranked-actions
223
+ kind: vocabulary
224
+ name: ranked actions
225
+ use: "the Kernel's menu: the Decide section of starci kernel status, answered with starci kernel decide"
226
+ since: 1.0.0-alpha.9
227
+ match: '[Ww]ork the ranked actions|[Ff]irst rca\.actions entry'
228
+ - id: kernel-run-next-actions
229
+ kind: vocabulary
230
+ name: run nextActions
231
+ use: "the Kernel answers the items of its menu; the runtime performs the mechanical next actions"
232
+ since: 1.0.0-alpha.9
233
+ match: 'run nextActions|run each\s+in order and never choose'
234
+ - id: event-op-reported
235
+ kind: vocabulary
236
+ name: op-reported
237
+ use: 'the event a filed report records is report-filed; no event named op-reported was ever emitted'
238
+ since: 1.0.0-alpha.9
239
+ match: '(?<![\w-])op-reported(?![\w-])'
240
+ - id: file-sonar-secrets-keys
241
+ kind: file
242
+ name: KEYS.md
243
+ use: 'secret.env.example lists the names of the host secrets; ext/sonar/README.md describes the stack'
244
+ since: 1.0.0-alpha.7
245
+ match: '(?<![\w/.-])secrets/KEYS\.md'
246
+ - id: vocab-example-sonar-token-member
247
+ kind: vocabulary
248
+ name: per-example Sonar token custody
249
+ use: 'the examples are analysed on SonarCloud with the SONAR_TOKEN of the runtime secret.env (runtimeSecrets in their services.sonar declaration)'
250
+ since: 1.0.0-alpha.7
251
+ match: 'sonarqube-(?:lite-app|shape-slot|starci-ecommerce-app)-token'
252
+ - id: vocab-menu-kinds-moved-to-controllers
253
+ kind: vocabulary
254
+ name: the menu kinds of the origins the controllers now move
255
+ use: 'the Job controller enqueues a red node, a stale proof or attempt, the asset leg and the credential ask itself (scripts/kernel/next-moves.mjs); the Kernel menu keeps leg-ready, draw-redraw, seam-duty and move-unbuilt'
256
+ since: 1.0.0-alpha.9
257
+ match: '(?<![\w-])(?:node-rework|stale-redispatch|enqueue-asset-leg|enqueue-credential-ask|rework-node)(?![\w-])'
258
+ - id: vocab-sonar-stack-sealed-members
259
+ kind: vocabulary
260
+ name: ext/sonar secrets custody
261
+ use: 'the stack secrets are the secret.env variables SONARQUBE_DB_PASSWORD, SONARQUBE_ADMIN_PASSWORD, SONARQUBE_ADMIN_TOKEN and CLOUDFLARE_TUNNEL_TOKEN, passed by starci gate sonar up; ext/sonar tracks no sealed member'
262
+ since: 1.0.0-alpha.9
263
+ match: 'ext/sonar/secrets/(?:sonarqube-(?:db|admin|analysis)-(?:password|token)|cloudflare-starci-local-services-tunnel-token)'
264
+ - id: vocab-ecommerce-sealed-demo-secrets
265
+ kind: vocabulary
266
+ name: ecommerce sealed demo secrets
267
+ use: 'the ecommerce example carries demo-only defaults in its compose files and declares no sealed secret (secrets: [])'
268
+ since: 1.0.0-alpha.9
269
+ match: '(?<![\w-])(?:keycloak|minio)-env(?:\.enc)?(?![\w-])'
270
+ - id: vocab-handover-step-mechanical-pending
271
+ kind: vocabulary
272
+ name: the handover-step menu mode mechanical-pending and its choice rerun-handover-review
273
+ use: 'the Job controller enqueues handover.review itself when the handover is due or its ask was answered approve or question (next action handover-review, scripts/kernel/handover-move.mjs); the handover-step item holds only the typed routing of a reported defect'
274
+ since: 1.0.0-alpha.9
275
+ match: '(?<![\w-])(?:mechanical-pending|rerun-handover-review)(?![\w-])'
276
+ - id: vocab-card-delivery-bound
277
+ kind: vocabulary
278
+ name: the agent card delivery keys maxInlineChars, fileName and fileDirectory
279
+ use: 'one bound, one directory and one cleanup serve every card: allocation.promptFile in modules/models/runtimes.yaml (scripts/agent/prompt-file.mjs); a card keeps delivery.mode and delivery.prompt'
280
+ since: 1.0.0-alpha.9
281
+ match: '(?<![\w-])(?:maxInlineChars|fileDirectory)(?![\w-])'
282
+ - id: vocab-backoff-factor-keys
283
+ kind: vocabulary
284
+ name: the growth factor of allocation.dispatchRefusal and of the backoff of modules/reconciler/host.yaml
285
+ use: 'every backoff is the one retry budget (scripts/lib/retry-budget.mjs), which doubles its interval up to a cap: declare baseMs/capMs or minMs/maxMs only'
286
+ since: 1.0.0-alpha.9
287
+ match: '(?<![\w-])(?:dispatchRefusal|backoff):\s*\{[^}\n]*\bfactor\b'
288
+ - id: vocab-wake-terminal-bound
289
+ kind: vocabulary
290
+ name: the independent wake character bound
291
+ use: 'allocation.promptFile.maxChars is the terminal bound owned by scripts/agent/prompt-file.mjs'
292
+ since: 1.0.0-alpha.9
293
+ match: '(?<![\w-])(?:allocation\.)?wake\.maxChars|\bwake:\s*\{\s*maxChars\b'
294
+ - id: vocab-draft-probe-mutations
295
+ kind: vocabulary
296
+ name: draft probe mutation fields
297
+ use: 'probeDraft reads only and returns verdict, draft and sends; a foreign draft receives no keys'
298
+ since: 1.0.0-alpha.9
299
+ match: '\b(?:draftProbe|probeDraft)\.(?:restore|restored|removed|after)\b'
300
+ - id: code-fe-db-result-typed
301
+ kind: code
302
+ name: FE_DB_RESULT_TYPED
303
+ use: 'the front end reads no data through Supabase (R217, auth only in fe.modules.auth); reads are GraphQL queries of modules/api wrapped by hooks/swr, typed by graphql-codegen (R52 FE_WIRE_GENERATED)'
304
+ since: 1.0.0-alpha.13
305
+ - id: code-fe-db-error-handled
306
+ kind: code
307
+ name: FE_DB_ERROR_HANDLED
308
+ use: 'a failure arrives as the GraphQLResponse envelope of modules/api/graphql/types.ts and is never collapsed into empty data (R51 FE_HTTP_STATUS_COLLAPSE)'
309
+ since: 1.0.0-alpha.13
310
+ - id: code-fe-auth-session-trust
311
+ kind: code
312
+ name: FE_AUTH_SESSION_TRUST
313
+ use: 'the front end runs no server code that trusts a session (R243 FE_SERVER_ACTION_FORBIDDEN); the back end verifies the access token against the JWKS (R219 BE_SUPABASE_JWT_VERIFIED)'
314
+ since: 1.0.0-alpha.13
315
+ - id: code-fe-db-write-shape
316
+ kind: code
317
+ name: FE_DB_WRITE_SHAPE
318
+ use: 'a write is a GraphQL mutation of modules/api wrapped by a useMutate<X>Swr hook and reported by modules/toast; Server Actions are refused (R243 FE_SERVER_ACTION_FORBIDDEN)'
319
+ since: 1.0.0-alpha.13
320
+ - id: slot-fe-modules-db
321
+ kind: vocabulary
322
+ name: fe.modules.db
323
+ use: 'the front end reads and writes through the back end GraphQL API in fe.modules.api, wrapped by hooks/swr; Supabase on the front end is fe.modules.auth only (owner ruling 2026-10-13)'
324
+ since: 1.0.0-alpha.13
325
+ match: '\bfe\.modules\.db\b'
326
+ - id: slot-fe-package-db
327
+ kind: vocabulary
328
+ name: fe.package.db
329
+ use: 'a shared front-end data client is fe.package.api (Apollo clients and the GraphQLResponse union); Supabase on the front end is fe.modules.auth only'
330
+ since: 1.0.0-alpha.13
331
+ match: '\bfe\.package\.db\b'
332
+ - id: slot-be-feature-realtime-supabase
333
+ kind: vocabulary
334
+ name: be.feature.realtime.supabase
335
+ use: 'both editions push through the socket.io gateway be.feature.realtime.websocket; lite runs it in the api process'
336
+ since: 1.0.0-alpha.13
337
+ match: '\bbe\.feature\.realtime\.supabase\b'
338
+ - id: slot-key-anonymous-actions
339
+ kind: vocabulary
340
+ name: anonymousActions
341
+ use: 'the front end holds no Server Action (R243 FE_SERVER_ACTION_FORBIDDEN), so no slot lists anonymous ones'
342
+ since: 1.0.0-alpha.13
343
+ - id: verb-test-affected
344
+ kind: verb
345
+ name: starci test affected
346
+ use: 'the runtime has no specs of its own (owner ruling no-runtime-specs): `starci runtime verify` runs the check, `starci release clean-test --base <ref>` and `starci release scaffold-e2e`'
347
+ since: 1.0.0-alpha.19
348
+ match: '\bstarci test affected\b'
349
+ - id: verb-test-run
350
+ kind: verb
351
+ name: starci test run
352
+ use: 'the L1 to L4 spec ladder is gone with the runtime specs; `starci runtime verify` proves a change, CI runs the release rows'
353
+ since: 1.0.0-alpha.19
354
+ match: '\bstarci test run\b'
355
+ - id: verb-gate-runtime-coverage
356
+ kind: verb
357
+ name: starci gate runtime-coverage
358
+ use: 'the runtime measures no coverage of its own; the example apps keep their Codecov flags'
359
+ since: 1.0.0-alpha.19
360
+ match: '\bgate runtime-coverage\b'
361
+ - id: verb-release-env-test
362
+ kind: verb
363
+ name: starci release env-test
364
+ use: 'the release rows are the package clean-test (`starci release clean-test`), the scaffold e2e (`starci release scaffold-e2e`) and the runtime check'
365
+ since: 1.0.0-alpha.19
366
+ match: '\brelease env-test\b'
367
+ - id: config-specs-harness
368
+ kind: config-key
369
+ name: specs.harness
370
+ use: 'the runtime has no specs of its own (owner ruling no-runtime-specs); specs.unit and specs.e2e switch the product workflow tests'
371
+ since: 1.0.0-alpha.19
372
+ match: '\bspecs\.harness\b'
373
+ - id: file-supabase-queues-topic
374
+ kind: file
375
+ name: supabase-queues.yaml
376
+ use: 'the queue is BullMQ on Redis in both editions (ruling:R212/case-10): knowledge/patterns/be/queues.yaml owns the adapter, and each pattern topic''s liteAdapter says what lite uses with and without its declared backing service'
377
+ since: 1.0.0-alpha.31
378
+ match: '(?<![\w-])supabase-queues(?:\.yaml)?\b'
379
+ - id: code-rt-gate-loosening
380
+ kind: code
381
+ name: RT_GATE_LOOSENING
382
+ use: 'the tree is judged as it stands, never by its history: RT_LOOSENING_STATE (the loosening-state self-check) with the design-truths manifest knowledge/hfs/design-truths.yaml'
383
+ since: 1.0.0-alpha.31
384
+ - id: vocabulary-gate-loosening
385
+ kind: vocabulary
386
+ name: gate-loosening
387
+ use: 'the diff-based detector and its table are gone: the loosening-state self-check (scripts/checks/check-loosening-state.mjs) reads the tree as it stands against knowledge/hfs/design-truths.yaml'
388
+ since: 1.0.0-alpha.31
389
+ match: 'gate-loosening|gateLoosening|loosensReleased|looseningsOf|check-code-loosening'
390
+ - id: verb-runtime-benchmark-snapshot
391
+ kind: verb
392
+ name: starci runtime benchmark-snapshot
393
+ use: 'routing evidence is read live from the ledgers: `starci machine op-metrics --by op` and the ledger view v_model_scorecard (modules/models/registry.yaml costPolicy)'
394
+ since: 1.0.0-alpha.31
395
+ match: '(?<![\w-])benchmark-snapshot(?![\w-])'
396
+ - id: vocab-benchmark-scorecard
397
+ kind: vocabulary
398
+ name: the benchmark/ model-pool scorecard
399
+ use: 'routing evidence is read live from the ledgers: `starci machine op-metrics --by op` and the ledger view v_model_scorecard (modules/models/registry.yaml costPolicy)'
400
+ since: 1.0.0-alpha.31
401
+ match: '(?<![\w./-])benchmark/(?:README\.md|expectations\.yaml|snapshots\b|findings\b)|benchmark-expectations@1'
402
+ - id: slot-runtime-benchmark
403
+ kind: vocabulary
404
+ name: runtime.benchmark
405
+ use: 'the runtime tree has no benchmark slot; routing evidence is read live from the ledgers (modules/models/registry.yaml costPolicy)'
406
+ since: 1.0.0-alpha.31
407
+ match: '\bruntime\.benchmark\b'
408
+ - id: config-release-tagmatchesversion
409
+ kind: config-key
410
+ name: release.tagMatchesVersion
411
+ use: 'the release tag is always <release.tagPrefix><package.json version>; delete the key'
412
+ since: 1.0.0-alpha.31
413
+ match: '\btagMatchesVersion\b'
414
+
415
+ - id: grammar-surfacecard-manual-layer
416
+ kind: vocabulary
417
+ name: SurfaceCard manual depth and unpainted frame
418
+ use: 'SurfaceCard derives its depth from the painted parent surface; use an unpainted layout container for grouping and a bounded SurfaceCard for a painted face'
419
+ since: 1.0.0-alpha.31
420
+ match: 'SurfaceCard[^\r\n>]*\s(?:depth=|frame="frameless")'
421
+ - id: grammar-dropdown-negative-tone
422
+ kind: vocabulary
423
+ name: DropdownMenuItem negative tone
424
+ use: 'DropdownMenuItem.tone uses neutral or danger; destructive commands use danger'
425
+ since: 1.0.0-alpha.31
426
+ match: 'DropdownMenuItem(?:Tone|\.tone)[^\r\n]*["'']negative["'']'
427
+
428
+ - id: code-release-receipt-missing
429
+ kind: code
430
+ name: RELEASE_RECEIPT_MISSING
431
+ use: 'the push of main asks for a fast-forward and a clean secret scan; a release tag asks for no receipt'
432
+ since: 1.0.0-alpha.31.1
433
+ - id: code-release-receipt-incomplete
434
+ kind: code
435
+ name: RELEASE_RECEIPT_INCOMPLETE
436
+ use: 'the push of main asks for a fast-forward and a clean secret scan; CI judges the full suite'
437
+ since: 1.0.0-alpha.31.1
438
+ - id: code-release-suite-mode
439
+ kind: code
440
+ name: RELEASE_SUITE_MODE
441
+ use: 'release.suite chooses whether the cut also runs the L4 rows; no record or gate reads the mode'
442
+ since: 1.0.0-alpha.31.1
443
+ - id: code-release-version-unchanged
444
+ kind: code
445
+ name: RELEASE_VERSION_UNCHANGED
446
+ use: 'main is pushed without a version move; RELEASE_VERSION_NOT_NEXT judges the version of a tag against the v* tags'
447
+ since: 1.0.0-alpha.31.1
448
+ - id: code-release-remote-head-unknown
449
+ kind: code
450
+ name: RELEASE_REMOTE_HEAD_UNKNOWN
451
+ use: 'a release tag is judged against the v* tags, not against the remote main head'
452
+ since: 1.0.0-alpha.31.1
453
+ - id: config-release-candidate-blocking
454
+ kind: config-key
455
+ name: candidate.blocking
456
+ use: 'the runtime cut has no candidate step; the ci, examples and sonar workflows judge each push to main (suite.ci.workflows)'
457
+ since: 1.0.0-alpha.31.1
458
+ match: 'candidate\.blocking\b'