@objectstack/lint 17.0.0-rc.4 → 17.0.0-rc.6
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 +1428 -0
- package/dist/index.cjs +1787 -624
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +324 -123
- package/dist/index.d.ts +324 -123
- package/dist/index.js +1765 -610
- package/dist/index.js.map +1 -1
- package/dist/{runtime-Cs64ShwN.d.cts → runtime-B50yywI_.d.cts} +49 -4
- package/dist/{runtime-Cs64ShwN.d.ts → runtime-B50yywI_.d.ts} +49 -4
- package/dist/runtime.cjs +1214 -428
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.d.cts +1 -1
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js +1204 -407
- package/dist/runtime.js.map +1 -1
- package/package.json +6 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Manifest } from '@objectstack/sdui-parser';
|
|
2
2
|
import { Options } from 'ajv';
|
|
3
|
-
import {
|
|
4
|
-
export { A as AUTHORING_COMMANDS, a as AUTHORING_RULES, b as AUTHORING_SURFACES, c as AuthoringCommand, d as AuthoringFinding, e as AuthoringRule, f as AuthoringRuleContext, g as AuthoringRuleInputTier, h as AuthoringRuleRun, i as AuthoringRuleTier, j as AuthoringSeverity, k as AuthoringSurface, E as EXPRESSION_INVALID, R as RuntimeGateResult, l as RuntimeStackContext, m as authoringRulesFor, r as runAuthoringRules, n as runRuntimeAuthoringRules, o as runtimeAuthoringRulesFor, p as runtimeGatedTypes, s as splitBySeverity, q as stackKeyForType } from './runtime-
|
|
3
|
+
import { AccessMatrixParsed } from '@objectstack/spec/security';
|
|
4
|
+
export { A as AUTHORING_COMMANDS, a as AUTHORING_RULES, b as AUTHORING_SURFACES, c as AuthoringCommand, d as AuthoringFinding, e as AuthoringRule, f as AuthoringRuleContext, g as AuthoringRuleInputTier, h as AuthoringRuleRun, i as AuthoringRuleTier, j as AuthoringSeverity, k as AuthoringSurface, E as EXPRESSION_INVALID, R as RuntimeGateResult, l as RuntimeStackContext, m as authoringRulesFor, r as runAuthoringRules, n as runRuntimeAuthoringRules, o as runtimeAuthoringRulesFor, p as runtimeGatedTypes, s as splitBySeverity, q as stackKeyForType } from './runtime-B50yywI_.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Build-time dashboard widget binding diagnostics (issues #1719, #1721).
|
|
@@ -98,7 +98,7 @@ interface WidgetBindingFinding {
|
|
|
98
98
|
/** How to fix (or deliberately suppress) it. */
|
|
99
99
|
hint: string;
|
|
100
100
|
}
|
|
101
|
-
type AnyRec$
|
|
101
|
+
type AnyRec$F = Record<string, unknown>;
|
|
102
102
|
/**
|
|
103
103
|
* Validate every dashboard widget's dataset binding. Returns the list of
|
|
104
104
|
* findings (empty = clean). Caller decides how to surface them: `error`
|
|
@@ -106,7 +106,7 @@ type AnyRec$E = Record<string, unknown>;
|
|
|
106
106
|
* should fail validate/build; `warning` findings are advisory and must
|
|
107
107
|
* never fail the build on their own.
|
|
108
108
|
*/
|
|
109
|
-
declare function validateWidgetBindings(stack: AnyRec$
|
|
109
|
+
declare function validateWidgetBindings(stack: AnyRec$F): WidgetBindingFinding[];
|
|
110
110
|
|
|
111
111
|
interface ExprIssue {
|
|
112
112
|
where: string;
|
|
@@ -119,12 +119,12 @@ interface ExprIssue {
|
|
|
119
119
|
*/
|
|
120
120
|
severity?: 'error' | 'warning';
|
|
121
121
|
}
|
|
122
|
-
type AnyRec$
|
|
122
|
+
type AnyRec$E = Record<string, unknown>;
|
|
123
123
|
/**
|
|
124
124
|
* Validate every predicate in the stack. Returns the list of issues (empty =
|
|
125
125
|
* clean). Caller decides how to surface / whether to fail the build.
|
|
126
126
|
*/
|
|
127
|
-
declare function validateStackExpressions(stack: AnyRec$
|
|
127
|
+
declare function validateStackExpressions(stack: AnyRec$E): ExprIssue[];
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
130
|
* The corrective sentence, lifted **verbatim** from `unevaluableRuleError` in
|
|
@@ -204,6 +204,95 @@ type NullGuardOutcome =
|
|
|
204
204
|
*/
|
|
205
205
|
declare function nullGuardMessage(subject: string, objectName: string | undefined, finding: NullGuardFinding, outcome?: NullGuardOutcome): string;
|
|
206
206
|
|
|
207
|
+
/**
|
|
208
|
+
* A verdict about an open capability vocabulary, recorded during a phase in
|
|
209
|
+
* which a plugin can still contribute to it.
|
|
210
|
+
*/
|
|
211
|
+
declare const STARTUP_OPEN_VOCABULARY_VERDICT = "startup-open-vocabulary-verdict";
|
|
212
|
+
/**
|
|
213
|
+
* The diagnostic at such a site asserts a terminal outcome about a world that
|
|
214
|
+
* has not finished forming. Emitted only where
|
|
215
|
+
* {@link STARTUP_OPEN_VOCABULARY_VERDICT} already fired.
|
|
216
|
+
*/
|
|
217
|
+
declare const STARTUP_VERDICT_ASSERTIVE_WORDING = "startup-verdict-assertive-wording";
|
|
218
|
+
/**
|
|
219
|
+
* Accessors that read a capability vocabulary a plugin can still extend.
|
|
220
|
+
*
|
|
221
|
+
* Each entry names WHY the answer is not final; the note travels into the
|
|
222
|
+
* finding so the author reads the consequence rather than a rule id.
|
|
223
|
+
*
|
|
224
|
+
* Matched on the accessor NAME rather than on a `this.<registry>` property,
|
|
225
|
+
* which is what lets a consumer in another package be seen at all — the CI
|
|
226
|
+
* gate's Rule B is keyed on the two property names the owning class uses, so a
|
|
227
|
+
* caller that reaches the same vocabulary through its public accessor is
|
|
228
|
+
* invisible to it. Keyed lookups that ask about ONE item and dispatch on the
|
|
229
|
+
* answer (`registry.get(type)`, `registry.has(type)`) are deliberately absent:
|
|
230
|
+
* that is how the runtime legitimately resolves work, and reading it as a
|
|
231
|
+
* startup verdict is exactly the false-positive class that gets a rule switched
|
|
232
|
+
* off.
|
|
233
|
+
*/
|
|
234
|
+
declare const OPEN_VOCABULARY_PROBES: ReadonlyMap<string, string>;
|
|
235
|
+
/**
|
|
236
|
+
* Lifecycle phases that run BEFORE the vocabulary can be considered closed, with
|
|
237
|
+
* the reason each one is still open.
|
|
238
|
+
*
|
|
239
|
+
* `start` is the phase this rule exists for. The CI gate stops at `init`, on the
|
|
240
|
+
* sound reasoning that every plugin's `init()` has completed by then — true of
|
|
241
|
+
* the SERVICE registry, and false of an open capability vocabulary: ADR-0018
|
|
242
|
+
* executors are registered from `start()` too, and sibling plugins' `start()`
|
|
243
|
+
* have not all run. That is literally where #4771 sat.
|
|
244
|
+
*/
|
|
245
|
+
declare const PRE_SEAL_PHASES: ReadonlyMap<string, string>;
|
|
246
|
+
/**
|
|
247
|
+
* Identifier fragments whose presence in the scope means the code ASKED whether
|
|
248
|
+
* the vocabulary is closed before judging it — the third sanctioned cure.
|
|
249
|
+
* Matched as a case-insensitive substring of an identifier so
|
|
250
|
+
* `nodeTypeVocabularySealed`, `sealNodeTypeVocabulary` and a host's own
|
|
251
|
+
* `vocabularySeal` all count.
|
|
252
|
+
*/
|
|
253
|
+
declare const SEAL_MARKERS: readonly string[];
|
|
254
|
+
type StartupRegistryVerdictSeverity = 'warning';
|
|
255
|
+
interface StartupRegistryVerdictFinding {
|
|
256
|
+
/** Always `warning` — this rule advises, it never gates (see module note). */
|
|
257
|
+
severity: StartupRegistryVerdictSeverity;
|
|
258
|
+
/** Diagnostic rule id. */
|
|
259
|
+
rule: string;
|
|
260
|
+
/** Human-readable location, e.g. `AutomationServicePlugin.start()`. */
|
|
261
|
+
where: string;
|
|
262
|
+
/** Source path, e.g. `plugin.ts:412`. */
|
|
263
|
+
path: string;
|
|
264
|
+
/** What is wrong. */
|
|
265
|
+
message: string;
|
|
266
|
+
/** How to fix it. */
|
|
267
|
+
hint: string;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* The prescription every finding carries. It names the three cures in the order
|
|
271
|
+
* AGENTS.md ranks them, and each by the change that actually shipped, so the
|
|
272
|
+
* reader can go and read one.
|
|
273
|
+
*
|
|
274
|
+
* It states no verdict of its own about whether the site is broken at runtime —
|
|
275
|
+
* asserting a terminal outcome about a world that has not finished forming is
|
|
276
|
+
* the mistake this rule exists to remove, and a hint that did it would be the
|
|
277
|
+
* defect wearing the rule's own badge.
|
|
278
|
+
*/
|
|
279
|
+
declare const STARTUP_VERDICT_HINT: string;
|
|
280
|
+
interface StartupRegistryVerdictOptions {
|
|
281
|
+
/**
|
|
282
|
+
* Label for the source under check — a path, a package name, whatever the
|
|
283
|
+
* caller can point at. Prefixes every finding's `path`.
|
|
284
|
+
*/
|
|
285
|
+
file?: string;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Find startup open-vocabulary verdicts in one TypeScript/JavaScript source.
|
|
289
|
+
*
|
|
290
|
+
* Pure: parses, never executes, never type-checks, touches no filesystem. An
|
|
291
|
+
* unparseable source yields no findings rather than throwing — this advises on
|
|
292
|
+
* source someone else owns, and refusing to parse is not a verdict about them.
|
|
293
|
+
*/
|
|
294
|
+
declare function findStartupRegistryVerdicts(source: string, options?: StartupRegistryVerdictOptions): StartupRegistryVerdictFinding[];
|
|
295
|
+
|
|
207
296
|
type ListViewModeSeverity = 'error' | 'warning';
|
|
208
297
|
interface ListViewModeFinding {
|
|
209
298
|
severity: ListViewModeSeverity;
|
|
@@ -216,7 +305,7 @@ interface ListViewModeFinding {
|
|
|
216
305
|
hint: string;
|
|
217
306
|
}
|
|
218
307
|
declare const LIST_VIEW_FILTERS_IN_VIEWS_MODE = "list-view-filters-in-views-mode";
|
|
219
|
-
type AnyRec$
|
|
308
|
+
type AnyRec$D = Record<string, unknown>;
|
|
220
309
|
/**
|
|
221
310
|
* Flag ADR-0047 "views" mode violations on an object's built-in named views or a
|
|
222
311
|
* `defineView` default `list` / named `listViews`: `quickFilters`, or a `tabs`
|
|
@@ -226,7 +315,7 @@ type AnyRec$C = Record<string, unknown>;
|
|
|
226
315
|
*
|
|
227
316
|
* Feed the PRE-parse stack (normalizeStackInput output) — see file header.
|
|
228
317
|
*/
|
|
229
|
-
declare function validateListViewMode(stack: AnyRec$
|
|
318
|
+
declare function validateListViewMode(stack: AnyRec$D): ListViewModeFinding[];
|
|
230
319
|
|
|
231
320
|
type FunctionalCompletenessSeverity = 'error' | 'warning';
|
|
232
321
|
interface FunctionalCompletenessFinding {
|
|
@@ -287,7 +376,30 @@ declare const FLOW_TIME_RELATIVE_DESCRIPTOR_INVALID = "flow-time-relative-descri
|
|
|
287
376
|
* there is no runtime channel at all for it to be moved earlier from.
|
|
288
377
|
*/
|
|
289
378
|
declare const FLOW_TIME_RELATIVE_DESCRIPTOR_UNROUTABLE = "flow-time-relative-descriptor-unroutable";
|
|
290
|
-
|
|
379
|
+
/**
|
|
380
|
+
* #6637 — a `type: 'record_change'` flow whose start-node `triggerType` the
|
|
381
|
+
* engine routes to NO trigger at all, so the flow is silently demoted to a
|
|
382
|
+
* manual one. Widened by #7215 to also cover the token being ABSENT
|
|
383
|
+
* entirely — the omission shape is exactly as dead at runtime as the
|
|
384
|
+
* contradiction shape this id originally caught, so one id and one severity
|
|
385
|
+
* cover both (see 1f for the history of why the widening waited).
|
|
386
|
+
*
|
|
387
|
+
* A separate id from `flow-trigger-unknown-event`, on the same distinction that
|
|
388
|
+
* separates the two `timeRelative` ids: whether the engine ROUTES the value.
|
|
389
|
+
* The two partition the declared-but-dead tokens and can never both fire on one
|
|
390
|
+
* value, because being `record-`-prefixed is exactly what routes a token:
|
|
391
|
+
*
|
|
392
|
+
* - `record-`-prefixed but off-grammar (`record-after-updated`) — the engine
|
|
393
|
+
* ROUTES it to the record-change trigger, which maps it to zero hook events
|
|
394
|
+
* and says so in a bind-time warn. That is `…-UNKNOWN-EVENT`, and this rule
|
|
395
|
+
* file moves that warn earlier.
|
|
396
|
+
* - anything else (`onCreate`, `on_update`, `''`, `['onCreate']`, or the key
|
|
397
|
+
* absent entirely) — the engine routes it NOWHERE. That is this id, and
|
|
398
|
+
* there is no runtime channel to move earlier from: see 1f for the three
|
|
399
|
+
* call sites that each skip it.
|
|
400
|
+
*/
|
|
401
|
+
declare const FLOW_TRIGGER_UNROUTABLE = "flow-trigger-unroutable";
|
|
402
|
+
type AnyRec$C = Record<string, unknown>;
|
|
291
403
|
/**
|
|
292
404
|
* Validate auto-launched flow trigger wiring against the stack definition.
|
|
293
405
|
*
|
|
@@ -296,7 +408,7 @@ type AnyRec$B = Record<string, unknown>;
|
|
|
296
408
|
* owns the `timeRelative` descriptor's contract, which is the point: the rule
|
|
297
409
|
* ASKS that schema rather than restating it.
|
|
298
410
|
*/
|
|
299
|
-
declare function validateFlowTriggerReadiness(stack: AnyRec$
|
|
411
|
+
declare function validateFlowTriggerReadiness(stack: AnyRec$C): FlowTriggerReadinessFinding[];
|
|
300
412
|
|
|
301
413
|
type FlowTemplatePathSeverity = 'error' | 'warning';
|
|
302
414
|
interface FlowTemplatePathFinding {
|
|
@@ -311,12 +423,12 @@ interface FlowTemplatePathFinding {
|
|
|
311
423
|
}
|
|
312
424
|
declare const FLOW_TEMPLATE_UNKNOWN_FIELD = "flow-template-unknown-field";
|
|
313
425
|
declare const FLOW_TEMPLATE_LOOKUP_TRAVERSAL = "flow-template-lookup-traversal";
|
|
314
|
-
type AnyRec$
|
|
426
|
+
type AnyRec$B = Record<string, unknown>;
|
|
315
427
|
/**
|
|
316
428
|
* Validate `{record.<path>}` template references across every record-change
|
|
317
429
|
* flow. Pure and dependency-free; safe on pre- or post-parse stacks.
|
|
318
430
|
*/
|
|
319
|
-
declare function validateFlowTemplatePaths(stack: AnyRec$
|
|
431
|
+
declare function validateFlowTemplatePaths(stack: AnyRec$B): FlowTemplatePathFinding[];
|
|
320
432
|
|
|
321
433
|
type ReadonlyFlowWriteSeverity = 'error' | 'warning';
|
|
322
434
|
interface ReadonlyFlowWriteFinding {
|
|
@@ -331,12 +443,12 @@ interface ReadonlyFlowWriteFinding {
|
|
|
331
443
|
}
|
|
332
444
|
declare const FLOW_UPDATE_READONLY_FIELD = "flow-update-readonly-field";
|
|
333
445
|
declare const FLOW_UPDATE_READONLY_WHEN_FIELD = "flow-update-readonly-when-field";
|
|
334
|
-
type AnyRec$
|
|
446
|
+
type AnyRec$A = Record<string, unknown>;
|
|
335
447
|
/**
|
|
336
448
|
* Validate flow `update_record` writes against target-object readonly
|
|
337
449
|
* declarations. Pure and dependency-free; safe on pre- or post-parse stacks.
|
|
338
450
|
*/
|
|
339
|
-
declare function validateReadonlyFlowWrites(stack: AnyRec$
|
|
451
|
+
declare function validateReadonlyFlowWrites(stack: AnyRec$A): ReadonlyFlowWriteFinding[];
|
|
340
452
|
|
|
341
453
|
type ViewContainerSeverity = 'error' | 'warning';
|
|
342
454
|
interface ViewContainerFinding {
|
|
@@ -373,14 +485,14 @@ declare const STYLE_CLASSNAME_TAILWIND = "style-classname-tailwind";
|
|
|
373
485
|
declare const STYLE_RESPONSIVE_NO_BASE = "style-responsive-no-base";
|
|
374
486
|
declare const STYLE_UNKNOWN_CSS_PROPERTY = "style-unknown-css-property";
|
|
375
487
|
declare const STYLE_UNKNOWN_TOKEN = "style-unknown-token";
|
|
376
|
-
type AnyRec$
|
|
488
|
+
type AnyRec$z = Record<string, unknown>;
|
|
377
489
|
/**
|
|
378
490
|
* Validate every page's component tree for SDUI styling correctness (ADR-0065).
|
|
379
491
|
* Returns findings (empty = clean). `error` findings describe styles that are
|
|
380
492
|
* silently dropped and should fail validate/build; `warning` findings are
|
|
381
493
|
* advisory (typos, drift, footguns).
|
|
382
494
|
*/
|
|
383
|
-
declare function validateResponsiveStyles(stack: AnyRec$
|
|
495
|
+
declare function validateResponsiveStyles(stack: AnyRec$z): StyleFinding[];
|
|
384
496
|
|
|
385
497
|
type JsxPageSeverity = 'error' | 'warning';
|
|
386
498
|
interface JsxPageFinding {
|
|
@@ -393,8 +505,8 @@ interface JsxPageFinding {
|
|
|
393
505
|
message: string;
|
|
394
506
|
hint: string;
|
|
395
507
|
}
|
|
396
|
-
type AnyRec$
|
|
397
|
-
declare function validateJsxPages(stack: AnyRec$
|
|
508
|
+
type AnyRec$y = Record<string, unknown>;
|
|
509
|
+
declare function validateJsxPages(stack: AnyRec$y, opts?: {
|
|
398
510
|
manifest?: Manifest;
|
|
399
511
|
}): JsxPageFinding[];
|
|
400
512
|
|
|
@@ -407,8 +519,8 @@ interface ReactPageFinding {
|
|
|
407
519
|
message: string;
|
|
408
520
|
hint: string;
|
|
409
521
|
}
|
|
410
|
-
type AnyRec$
|
|
411
|
-
declare function validateReactPages(stack: AnyRec$
|
|
522
|
+
type AnyRec$x = Record<string, unknown>;
|
|
523
|
+
declare function validateReactPages(stack: AnyRec$x): ReactPageFinding[];
|
|
412
524
|
|
|
413
525
|
type ReactPropSeverity = 'error' | 'warning';
|
|
414
526
|
interface ReactPropFinding {
|
|
@@ -419,13 +531,13 @@ interface ReactPropFinding {
|
|
|
419
531
|
message: string;
|
|
420
532
|
hint: string;
|
|
421
533
|
}
|
|
422
|
-
type AnyRec$
|
|
534
|
+
type AnyRec$w = Record<string, unknown>;
|
|
423
535
|
declare const REACT_CHART_FIELD_UNKNOWN = "react-chart-field-unknown";
|
|
424
536
|
declare const REACT_CHART_AGGREGATE_INVALID = "react-chart-aggregate-invalid";
|
|
425
537
|
declare const REACT_CHART_AXIS_UNKNOWN = "react-chart-axis-unknown";
|
|
426
538
|
declare const REACT_CHART_DRILLDOWN_INVALID = "react-chart-drilldown-invalid";
|
|
427
539
|
declare const REACT_BLOCK_NEEDS_RECORD_CONTEXT = "react-block-needs-record-context";
|
|
428
|
-
declare function validateReactPageProps(stack: AnyRec$
|
|
540
|
+
declare function validateReactPageProps(stack: AnyRec$w): ReactPropFinding[];
|
|
429
541
|
|
|
430
542
|
type SourceStyleSeverity = 'error' | 'warning';
|
|
431
543
|
interface SourceStyleFinding {
|
|
@@ -437,8 +549,8 @@ interface SourceStyleFinding {
|
|
|
437
549
|
hint: string;
|
|
438
550
|
}
|
|
439
551
|
declare const PAGE_SOURCE_CLASSNAME = "page-source-className-tailwind";
|
|
440
|
-
type AnyRec$
|
|
441
|
-
declare function validatePageSourceStyling(stack: AnyRec$
|
|
552
|
+
type AnyRec$v = Record<string, unknown>;
|
|
553
|
+
declare function validatePageSourceStyling(stack: AnyRec$v): SourceStyleFinding[];
|
|
442
554
|
|
|
443
555
|
/**
|
|
444
556
|
* Build-time record-title diagnostics (ADR-0079).
|
|
@@ -482,14 +594,14 @@ interface RecordTitleFinding {
|
|
|
482
594
|
/** How to fix it. */
|
|
483
595
|
hint: string;
|
|
484
596
|
}
|
|
485
|
-
type AnyRec$
|
|
597
|
+
type AnyRec$u = Record<string, unknown>;
|
|
486
598
|
/**
|
|
487
599
|
* Validate every object's record-title declaration. Returns the list of
|
|
488
600
|
* findings (empty = clean). Both rules are advisory (`warning`): the caller
|
|
489
601
|
* must never fail the build on them alone — auto-provision + the `Record #<id>`
|
|
490
602
|
* floor guarantee a resolvable title at runtime.
|
|
491
603
|
*/
|
|
492
|
-
declare function validateRecordTitle(stack: AnyRec$
|
|
604
|
+
declare function validateRecordTitle(stack: AnyRec$u): RecordTitleFinding[];
|
|
493
605
|
|
|
494
606
|
declare const FIELD_GROUP_UNDECLARED = "field-group-undeclared";
|
|
495
607
|
declare const FIELD_GROUP_EMPTY = "field-group-empty";
|
|
@@ -510,38 +622,14 @@ interface SemanticRoleFinding {
|
|
|
510
622
|
/** How to fix it. */
|
|
511
623
|
hint: string;
|
|
512
624
|
}
|
|
513
|
-
type AnyRec$
|
|
625
|
+
type AnyRec$t = Record<string, unknown>;
|
|
514
626
|
/**
|
|
515
627
|
* Validate every object's semantic-role pointers. Returns the list of
|
|
516
628
|
* findings (empty = clean). Advisory only — the caller must never fail the
|
|
517
629
|
* build on these alone.
|
|
518
630
|
*/
|
|
519
|
-
declare function validateSemanticRoles(stack: AnyRec$
|
|
631
|
+
declare function validateSemanticRoles(stack: AnyRec$t): SemanticRoleFinding[];
|
|
520
632
|
|
|
521
|
-
/**
|
|
522
|
-
* Build-time form-layout diagnostics (#2578).
|
|
523
|
-
*
|
|
524
|
-
* Authored form views carry field references and column-layout hints that are
|
|
525
|
-
* Zod-valid but can be silently wrong at render time — the "parsed, unmarked,
|
|
526
|
-
* silently inert" shape ADR-0078 prohibits. This lint catches the two that
|
|
527
|
-
* matter for multi-column, AI-authored forms, uniformly for `os build` /
|
|
528
|
-
* `os validate`, MCP authoring and hand authors (ADR-0019).
|
|
529
|
-
*
|
|
530
|
-
* Both rules are warnings, not errors — nothing is fully broken (an unknown
|
|
531
|
-
* field name is skipped; an over-wide colSpan is clamped) — but each is almost
|
|
532
|
-
* certainly an authoring mistake worth surfacing at author time:
|
|
533
|
-
*
|
|
534
|
-
* - `form-field-unknown` — a section references a field that is not on the
|
|
535
|
-
* form's bound object, so the field silently does not render.
|
|
536
|
-
* - `absolute-colspan-discouraged` — a field uses the absolute `colSpan`. Under
|
|
537
|
-
* a per-surface DERIVED column count (mobile 1 / modal 2 / page 3-4) a fixed
|
|
538
|
-
* span only lines up at the one width the author imagined; the renderer
|
|
539
|
-
* clamps it. The robust primitive is the relative `span: 'full'`.
|
|
540
|
-
*
|
|
541
|
-
* Scope: top-level form `views` (a `sections` array). Forms embedded inside
|
|
542
|
-
* page component trees are a follow-up — the walker deliberately stays shallow
|
|
543
|
-
* so it never guesses at an arbitrary component's object binding.
|
|
544
|
-
*/
|
|
545
633
|
declare const FORM_FIELD_UNKNOWN = "form-field-unknown";
|
|
546
634
|
declare const FORM_COLSPAN_ABSOLUTE = "absolute-colspan-discouraged";
|
|
547
635
|
type FormLayoutSeverity = 'error' | 'warning';
|
|
@@ -550,56 +638,33 @@ interface FormLayoutFinding {
|
|
|
550
638
|
severity: FormLayoutSeverity;
|
|
551
639
|
/** Diagnostic rule id, e.g. `form-field-unknown`. */
|
|
552
640
|
rule: string;
|
|
553
|
-
/** Human-readable location, e.g. `view "contract_form"`. */
|
|
641
|
+
/** Human-readable location, e.g. `view "contract_form" · formViews.create`. */
|
|
554
642
|
where: string;
|
|
555
|
-
/** Config path, e.g. `views[2].sections[0].fields[3]`. */
|
|
643
|
+
/** Config path, e.g. `views[2].formViews.create.sections[0].fields[3]`. */
|
|
556
644
|
path: string;
|
|
557
645
|
/** What is wrong. */
|
|
558
646
|
message: string;
|
|
559
647
|
/** How to fix it. */
|
|
560
648
|
hint: string;
|
|
561
649
|
}
|
|
562
|
-
type AnyRec$
|
|
650
|
+
type AnyRec$s = Record<string, unknown>;
|
|
563
651
|
/**
|
|
564
652
|
* Validate authored form-view layout. Returns findings (empty = clean).
|
|
565
653
|
* Advisory only — the caller must never fail the build on these alone.
|
|
566
654
|
*/
|
|
567
|
-
declare function validateFormLayout(stack: AnyRec$
|
|
568
|
-
|
|
569
|
-
/**
|
|
570
|
-
* Build-time conditional-visibility diagnostics (ADR-0089 D3b).
|
|
571
|
-
*
|
|
572
|
-
* ADR-0089 unifies the conditional-visibility predicate under the single
|
|
573
|
-
* canonical key **`visibleWhen`** across data fields, view form sections/fields,
|
|
574
|
-
* and page components. The deprecated spellings — `visibleOn` (view form) and
|
|
575
|
-
* `visibility` (page component) — stay accepted and are folded into `visibleWhen`
|
|
576
|
-
* at the schema boundary (a zod `.transform()`). Because that fold happens during
|
|
577
|
-
* `parse()`, the aliases are gone from the *parsed* stack — so this rule runs on
|
|
578
|
-
* the **pre-parse** (normalized) stack, exactly like `validate-list-view-mode`,
|
|
579
|
-
* to see what the author actually wrote.
|
|
580
|
-
*
|
|
581
|
-
* Two advisory rules (both `warning` — nothing is broken, the alias still works
|
|
582
|
-
* and a mis-rooted predicate just never matches):
|
|
583
|
-
*
|
|
584
|
-
* - `visibility-alias-deprecated` — a `visibleOn` / `visibility` key in authored
|
|
585
|
-
* source. Autofix intent: rename the key to `visibleWhen` (same value).
|
|
586
|
-
* - `visibility-root-mislayered` — a visibility predicate whose binding root does
|
|
587
|
-
* not match its layer (ADR-0089 D3, §Context). The check is **bidirectional**:
|
|
588
|
-
* - **runtime** view/page surfaces (`*.view.ts` / `*.page.ts`) bind
|
|
589
|
-
* `record` + `current_user` (pages also expose `page.<var>`), so a `data.`-rooted
|
|
590
|
-
* predicate here is a wrong-layer paste that silently never matches; and
|
|
591
|
-
* - **metadata-editing** forms (`*.form.ts` — the row under edit) bind `data`, so
|
|
592
|
-
* a `record.`-rooted predicate there is the same bug in the other direction.
|
|
593
|
-
* The layer is supplied by the caller (`opts.layer`, default `'runtime'`): the
|
|
594
|
-
* app-lint path (`os validate` / `compile`) always lints runtime surfaces, while a
|
|
595
|
-
* file-aware caller linting a `*.form.ts` passes `layer: 'metadata'`.
|
|
596
|
-
*
|
|
597
|
-
* Scope: `views` (form `sections` / legacy `groups`, and their `fields`) and
|
|
598
|
-
* `pages` (`regions[].components[]`). Data-field `visibleWhen` is already covered
|
|
599
|
-
* by `validate-expressions` and is not re-checked here.
|
|
600
|
-
*/
|
|
601
|
-
declare const VISIBILITY_ALIAS_DEPRECATED = "visibility-alias-deprecated";
|
|
655
|
+
declare function validateFormLayout(stack: AnyRec$s): FormLayoutFinding[];
|
|
656
|
+
|
|
602
657
|
declare const VISIBILITY_ROOT_MISLAYERED = "visibility-root-mislayered";
|
|
658
|
+
declare const VISIBILITY_BARE_IDENTIFIER = "visibility-bare-identifier";
|
|
659
|
+
declare const VISIBILITY_PREDICATE_SYNTAX = "visibility-predicate-syntax";
|
|
660
|
+
/**
|
|
661
|
+
* Valid CEL that overruns a `DEFAULT_LIMITS` parse bound (`maxAstNodes` 256,
|
|
662
|
+
* `maxDepth` 32, `maxListElements` 64, …) — #7217. A separate id from
|
|
663
|
+
* {@link VISIBILITY_PREDICATE_SYNTAX} for the reason `rls-predicate-over-budget`
|
|
664
|
+
* is a separate id from `rls-predicate-unparseable` (#6778 / PR #6831): the
|
|
665
|
+
* consequence is identical, the FIX is not, and `--json` consumers key on the id.
|
|
666
|
+
*/
|
|
667
|
+
declare const VISIBILITY_PREDICATE_OVER_BUDGET = "visibility-predicate-over-budget";
|
|
603
668
|
type VisibilitySeverity = 'error' | 'warning';
|
|
604
669
|
/**
|
|
605
670
|
* Which binding environment the linted surface belongs to (ADR-0089 §Context):
|
|
@@ -613,9 +678,14 @@ interface VisibilityOptions {
|
|
|
613
678
|
layer?: VisibilityLayer;
|
|
614
679
|
}
|
|
615
680
|
interface VisibilityFinding {
|
|
616
|
-
/**
|
|
681
|
+
/**
|
|
682
|
+
* `warning` for the ADR-0089 D3b advisory (`visibility-root-mislayered`);
|
|
683
|
+
* `error` for the three rules that gate — `visibility-predicate-syntax`,
|
|
684
|
+
* `visibility-predicate-over-budget` and `visibility-bare-identifier` (see
|
|
685
|
+
* module note).
|
|
686
|
+
*/
|
|
617
687
|
severity: VisibilitySeverity;
|
|
618
|
-
/** Diagnostic rule id, e.g. `visibility-
|
|
688
|
+
/** Diagnostic rule id, e.g. `visibility-root-mislayered`. */
|
|
619
689
|
rule: string;
|
|
620
690
|
/** Human-readable location, e.g. `view "contact_form"`. */
|
|
621
691
|
where: string;
|
|
@@ -626,22 +696,84 @@ interface VisibilityFinding {
|
|
|
626
696
|
/** How to fix it. */
|
|
627
697
|
hint: string;
|
|
628
698
|
}
|
|
629
|
-
type AnyRec$
|
|
699
|
+
type AnyRec$r = Record<string, unknown>;
|
|
630
700
|
/**
|
|
631
|
-
* Validate conditional-visibility
|
|
701
|
+
* Validate conditional-visibility predicates across authored views and pages.
|
|
632
702
|
*
|
|
633
|
-
*
|
|
634
|
-
*
|
|
635
|
-
* `
|
|
636
|
-
* the
|
|
703
|
+
* Every rule here judges the predicate's **VALUE**, which survives both the
|
|
704
|
+
* ADR-0087 D2 alias fold and the Zod parse intact — so the registered
|
|
705
|
+
* `normalized` tier sees exactly what a `parsed` one would. (It is registered
|
|
706
|
+
* `normalized` for the tier's surviving reason, not the retired one: a
|
|
707
|
+
* normalized-tier finding still reaches the author when an unrelated schema
|
|
708
|
+
* error elsewhere would have stopped the parse. See `AuthoringRuleInputTier`.)
|
|
709
|
+
*
|
|
710
|
+
* Returns findings (empty = clean). `visibility-root-mislayered` is advisory
|
|
711
|
+
* (`warning`); `visibility-predicate-syntax` (#6253),
|
|
712
|
+
* `visibility-predicate-over-budget` (#7217) and `visibility-bare-identifier`
|
|
713
|
+
* (#6128) are `error` and the caller is expected to fail the build on them.
|
|
637
714
|
*
|
|
638
715
|
* The binding-root check is layer-directional (ADR-0089 D3): pass
|
|
639
716
|
* `opts.layer = 'metadata'` when linting a `*.form.ts` metadata-editing form (so a
|
|
640
717
|
* `record.`-rooted predicate is flagged), or leave it at the `'runtime'` default for
|
|
641
718
|
* `*.view.ts` / `*.page.ts` surfaces (so a `data.`-rooted predicate is flagged). The
|
|
642
|
-
*
|
|
719
|
+
* syntax and bare-identifier checks are layer-agnostic.
|
|
720
|
+
*/
|
|
721
|
+
declare function validateVisibilityPredicates(stack: AnyRec$r, opts?: VisibilityOptions): VisibilityFinding[];
|
|
722
|
+
|
|
723
|
+
declare const PREDICATE_PATH_UNRESOLVED = "predicate-path-unresolved";
|
|
724
|
+
declare const PREDICATE_PATH_UNROOTED = "predicate-path-unrooted";
|
|
725
|
+
/** Both rules GATE — see the module note for why each is safe at `error`. */
|
|
726
|
+
type PredicatePathSeverity = 'error' | 'warning';
|
|
727
|
+
interface PredicatePathFinding {
|
|
728
|
+
severity: PredicatePathSeverity;
|
|
729
|
+
/** Diagnostic rule id — `predicate-path-unresolved` / `predicate-path-unrooted`. */
|
|
730
|
+
rule: string;
|
|
731
|
+
/** Human-readable location, e.g. `view "object" · schema form "object"`. */
|
|
732
|
+
where: string;
|
|
733
|
+
/** Config path, e.g. `views[0].sections[1].fields[0].fields[21].visibleWhen`. */
|
|
734
|
+
path: string;
|
|
735
|
+
/** What is wrong — always names the unresolvable path. */
|
|
736
|
+
message: string;
|
|
737
|
+
/** How to fix it. */
|
|
738
|
+
hint: string;
|
|
739
|
+
}
|
|
740
|
+
/** Options for {@link validatePredicatePathRefs}. */
|
|
741
|
+
interface PredicatePathOptions {
|
|
742
|
+
/**
|
|
743
|
+
* Schema oracle: `schemaId` → the Zod schema of the row under edit. Defaults
|
|
744
|
+
* to the canonical `getMetadataTypeSchema` registry
|
|
745
|
+
* (`packages/spec/src/kernel/metadata-type-schemas.ts`), which is the same
|
|
746
|
+
* entry `saveMetaItem` validates against — so this rule can never disagree
|
|
747
|
+
* with the parse that judges the saved row. Injectable so a test can pin the
|
|
748
|
+
* traversal against a small schema, and so a future caller holding a richer
|
|
749
|
+
* registry (runtime `/meta/types`, a package-declared type) can supply it
|
|
750
|
+
* without this file growing a second lookup path.
|
|
751
|
+
*/
|
|
752
|
+
resolveSchema?: (schemaId: string) => unknown;
|
|
753
|
+
}
|
|
754
|
+
type AnyRec$q = Record<string, unknown>;
|
|
755
|
+
/**
|
|
756
|
+
* Refuse a metadata-form predicate that names a path the target schema does not
|
|
757
|
+
* declare (#7010).
|
|
758
|
+
*
|
|
759
|
+
* Walks `views[]` through the shared {@link formViewSites} ladder — the entry
|
|
760
|
+
* itself (the bare `defineForm` shape every `*.form.ts` uses), the container's
|
|
761
|
+
* default `form`, and each `formViews.<key>` — and judges only the sites whose
|
|
762
|
+
* data source is `{ provider: 'schema', schemaId }`, resolving `schemaId`
|
|
763
|
+
* through `opts.resolveSchema` (the canonical metadata-type registry by
|
|
764
|
+
* default). A site bound to an ObjectQL object, or naming a `schemaId` no schema
|
|
765
|
+
* resolves, is skipped: see the module note for why the `record.*` layer is out
|
|
766
|
+
* of scope rather than merely unimplemented.
|
|
767
|
+
*
|
|
768
|
+
* Both rules emit `error` and the caller is expected to fail the build on them.
|
|
769
|
+
* The corpus measurement behind that severity is on the PR for #7010: over the
|
|
770
|
+
* shipped `METADATA_FORM_REGISTRY` (17 forms, 46 predicates) the count is **0**
|
|
771
|
+
* for both, and 16 for `predicate-path-unrooted` once #6254's pre-fix
|
|
772
|
+
* `object.form.ts` is restored.
|
|
773
|
+
*
|
|
774
|
+
* Returns findings (empty = clean).
|
|
643
775
|
*/
|
|
644
|
-
declare function
|
|
776
|
+
declare function validatePredicatePathRefs(stack: AnyRec$q, opts?: PredicatePathOptions): PredicatePathFinding[];
|
|
645
777
|
|
|
646
778
|
declare const CAPABILITY_REFERENCE_UNKNOWN = "capability-reference-unknown";
|
|
647
779
|
type CapabilityRefSeverity = 'error' | 'warning';
|
|
@@ -923,6 +1055,8 @@ declare function validateSharingRuleEnforceability(stack: unknown): SharingRuleE
|
|
|
923
1055
|
declare const RLS_PREDICATE_UNENFORCEABLE = "rls-predicate-unenforceable";
|
|
924
1056
|
/** A predicate that does not parse as CEL even after the legacy SQL bridge. */
|
|
925
1057
|
declare const RLS_PREDICATE_UNPARSEABLE = "rls-predicate-unparseable";
|
|
1058
|
+
/** Valid CEL that overruns a platform parse bound (`maxAstNodes`, `maxDepth`, …). */
|
|
1059
|
+
declare const RLS_PREDICATE_OVER_BUDGET = "rls-predicate-over-budget";
|
|
926
1060
|
type RlsPredicateSeverity = 'error' | 'warning';
|
|
927
1061
|
interface RlsPredicateFinding {
|
|
928
1062
|
severity: RlsPredicateSeverity;
|
|
@@ -1086,13 +1220,16 @@ declare function validateDashboardActionRefs(stack: AnyRec$k): DashboardActionRe
|
|
|
1086
1220
|
*
|
|
1087
1221
|
* ## Scope — filter subtrees only
|
|
1088
1222
|
*
|
|
1089
|
-
*
|
|
1090
|
-
*
|
|
1091
|
-
*
|
|
1092
|
-
* `
|
|
1093
|
-
*
|
|
1094
|
-
*
|
|
1095
|
-
*
|
|
1223
|
+
* Finding those subtrees is `filter-walk.ts`'s job since #5330 gave the same
|
|
1224
|
+
* traversal a second consumer; this file owns only the judgement on the strings
|
|
1225
|
+
* inside them. The shared walk descends into `filter` / `filters` /
|
|
1226
|
+
* `runtimeFilter` and deliberately does NOT check navigation `recordId` /
|
|
1227
|
+
* `params`, which resolve an additional vocabulary — `AppContextSelector` ids
|
|
1228
|
+
* such as `{active_package}` — that is meaningless in a filter because filters
|
|
1229
|
+
* are not evaluated with the sidebar's selector state. Restricting the walk
|
|
1230
|
+
* keeps that legitimate usage out of the rule and holds false positives at
|
|
1231
|
+
* zero. The seven surfaces below stay THIS rule's declaration, not the walk's:
|
|
1232
|
+
* a shared surface list would let another rule's widening land here silently.
|
|
1096
1233
|
*
|
|
1097
1234
|
* Only whole-string placeholders are considered (`'{token}'` / `'${token}'`,
|
|
1098
1235
|
* anchored). A value that merely contains braces is left alone.
|
|
@@ -1122,6 +1259,35 @@ interface FilterTokenFinding {
|
|
|
1122
1259
|
*/
|
|
1123
1260
|
declare function validateFilterTokens(stack: Record<string, unknown> | undefined | null): FilterTokenFinding[];
|
|
1124
1261
|
|
|
1262
|
+
/** A literal `$and: []` / `$or: []` / `$not: {}` — a combinator with no operands. */
|
|
1263
|
+
declare const FILTER_EMPTY_COMBINATOR = "filter-empty-combinator";
|
|
1264
|
+
/** A literal `{}` where a filter node is authored — the whole filter, or a branch. */
|
|
1265
|
+
declare const FILTER_EMPTY_NODE = "filter-empty-node";
|
|
1266
|
+
type EmptyCombinatorSeverity = 'error' | 'warning';
|
|
1267
|
+
interface EmptyCombinatorFinding {
|
|
1268
|
+
/** Always `error` — see the severity note in this module's header. */
|
|
1269
|
+
severity: EmptyCombinatorSeverity;
|
|
1270
|
+
/** Diagnostic rule id (`filter-empty-combinator` / `filter-empty-node`). */
|
|
1271
|
+
rule: string;
|
|
1272
|
+
/** Human-readable location, e.g. `dashboard "sales" · widget "my_deals"`. */
|
|
1273
|
+
where: string;
|
|
1274
|
+
/** Config path, e.g. `dashboards[0].widgets[2].filter.$or`. */
|
|
1275
|
+
path: string;
|
|
1276
|
+
/** What is wrong. */
|
|
1277
|
+
message: string;
|
|
1278
|
+
/** How to fix it. */
|
|
1279
|
+
hint: string;
|
|
1280
|
+
}
|
|
1281
|
+
/**
|
|
1282
|
+
* Reject literal empty combinators across an authored stack.
|
|
1283
|
+
*
|
|
1284
|
+
* Pure `(stack) => Finding[]`; no I/O. Tolerates both authoring tiers — a
|
|
1285
|
+
* filter subtree survives the Zod parse unchanged, and no filter key in the
|
|
1286
|
+
* spec carries a `.default({})`, so a `{}` seen here was authored, never filled
|
|
1287
|
+
* in by a schema.
|
|
1288
|
+
*/
|
|
1289
|
+
declare function validateEmptyCombinators(stack: Record<string, unknown> | undefined | null): EmptyCombinatorFinding[];
|
|
1290
|
+
|
|
1125
1291
|
declare const OBJECT_REFERENCE_UNKNOWN = "object-reference-unknown";
|
|
1126
1292
|
declare const OBJECT_REFERENCE_UNREGISTERED_PLATFORM = "object-reference-unregistered-platform";
|
|
1127
1293
|
type ObjectRefSeverity = 'error' | 'warning';
|
|
@@ -1308,12 +1474,25 @@ declare function validateNavTargetRefs(stack: unknown): NavTargetRefFinding[];
|
|
|
1308
1474
|
* linter, gate and engine cannot drift apart (the same one-source move
|
|
1309
1475
|
* #4254 made between gate and engine).
|
|
1310
1476
|
*
|
|
1311
|
-
*
|
|
1312
|
-
*
|
|
1313
|
-
*
|
|
1314
|
-
*
|
|
1315
|
-
*
|
|
1316
|
-
*
|
|
1477
|
+
* 3. VIRTUALITY, on EVERY surface — the object's own set included
|
|
1478
|
+
* (`searchable-field-unsearchable`, #6674): a `formula` entry names a real
|
|
1479
|
+
* field, so check 1 passes it, and the runtime's declared branch admitted
|
|
1480
|
+
* it verbatim — but the value is computed on read with no stored column, so
|
|
1481
|
+
* the scan looks at nothing. Measured 0 rows on driver-memory and 0 rows
|
|
1482
|
+
* WITH NO ERROR on driver-sql. Since #6674 the spec resolution drops such
|
|
1483
|
+
* an entry and both enforcement faces refuse it by name.
|
|
1484
|
+
*
|
|
1485
|
+
* The OBJECT's own `searchableFields` stays existence-only OTHERWISE, and the
|
|
1486
|
+
* dividing line is STORAGE, not search quality: the runtime's declared branch
|
|
1487
|
+
* filters by existence and scannability, never by type taste, so a json or
|
|
1488
|
+
* lookup column declared THERE is a choice the engine executes (a `$contains`
|
|
1489
|
+
* over the stored JSON text / the stored foreign key) — narrow, rarely useful,
|
|
1490
|
+
* but a scan that CAN match, so it is neither a 400 nor a finding. Flagging
|
|
1491
|
+
* those would reject metadata the runtime accepts — the false finding that
|
|
1492
|
+
* makes authors stop trusting the linter (ADR-0072 D1). A virtual entry is the
|
|
1493
|
+
* opposite case: no column exists on any driver, so admitting it is the
|
|
1494
|
+
* fail-open #4254 closed one axis over, surviving on the known-but-virtual
|
|
1495
|
+
* axis.
|
|
1317
1496
|
*
|
|
1318
1497
|
* Three skips keep false positives near zero (ADR-0072 D1):
|
|
1319
1498
|
*
|
|
@@ -1360,8 +1539,9 @@ interface SearchableFieldFinding {
|
|
|
1360
1539
|
* Which runtime judgment applies to the declaration being checked:
|
|
1361
1540
|
*
|
|
1362
1541
|
* - `'canonical'` — the object's own `searchableFields`. The runtime honors
|
|
1363
|
-
* any entry that exists (existence-
|
|
1364
|
-
* existence
|
|
1542
|
+
* any entry that exists and has a stored column to scan (existence- and
|
|
1543
|
+
* scannability-filtered, never type-filtered), so existence and virtuality
|
|
1544
|
+
* are checked and nothing else (#6674).
|
|
1365
1545
|
* - `'narrowing'` — a list view's `searchableFields` (metadata or react
|
|
1366
1546
|
* surface). Clients echo it as the `$searchFields` override, which the
|
|
1367
1547
|
* #4254 ingress gate intersects with the object's allowed set — entries the
|
|
@@ -1556,11 +1736,14 @@ declare function walkPageComponents(page: AnyRec$f, pagePath: string): WalkedCom
|
|
|
1556
1736
|
* authored in the wild. The table below names the field-bearing props
|
|
1557
1737
|
* explicitly; an unknown component type is SKIPPED silently, never flagged.
|
|
1558
1738
|
*
|
|
1559
|
-
* The table also
|
|
1560
|
-
* pages authored anyway (
|
|
1561
|
-
* `record
|
|
1562
|
-
*
|
|
1563
|
-
*
|
|
1739
|
+
* The table once also covered shapes the props schemas did not describe but
|
|
1740
|
+
* real pages authored anyway (`record:details` `sections[].fields[]` /
|
|
1741
|
+
* `hideFields[]`, the record picker's `labelField`). #5611 and #5775 settled
|
|
1742
|
+
* those the other way — the delivered shape got declared — so today every prop
|
|
1743
|
+
* this table names is a live (non-retired) key on its `ComponentPropsMap`
|
|
1744
|
+
* schema, and `component-field-specs-liveness.test.ts` pins that: a future
|
|
1745
|
+
* retirement that forgets this table turns that test red instead of leaving a
|
|
1746
|
+
* tombstoned key listed here as if it were still-valid spelling (#6629).
|
|
1564
1747
|
*
|
|
1565
1748
|
* ── Shared with the react page surface ──────────────────────────────────
|
|
1566
1749
|
*
|
|
@@ -1945,8 +2128,26 @@ declare function validateAiToolReferences(stack: AnyRec$9): AiToolRefFinding[];
|
|
|
1945
2128
|
* that names the runtime consequence is honest for both readers; the runtime
|
|
1946
2129
|
* is what actually gates. Deliberately NOT a Zod refine — an existing stack
|
|
1947
2130
|
* must keep parsing (ADR-0078 non-goal #1).
|
|
2131
|
+
*
|
|
2132
|
+
* ## The value half (issue #6041)
|
|
2133
|
+
*
|
|
2134
|
+
* The rule above catches a stack that *declares* a withdrawn agent record.
|
|
2135
|
+
* It never looked at `app.defaultAgent` — a plain
|
|
2136
|
+
* `SnakeCaseIdentifierSchema` string, so any snake_case value parses, builds,
|
|
2137
|
+
* and passes `os:check` even when it names nothing the runtime will ever
|
|
2138
|
+
* resolve. #5985 measured the blind spot directly: replaying the bad example
|
|
2139
|
+
* `defaultAgent: 'sales_copilot'` left `check:skill-examples` at 208 green,
|
|
2140
|
+
* EXIT=0. `app.defaultAgent` silently falls back to the platform default at
|
|
2141
|
+
* runtime (ADR-0063 §1) instead of crashing, which is why this limb is
|
|
2142
|
+
* **warning**, not error, same as the rule above — the maintainer ruling on
|
|
2143
|
+
* #6041 (2026-08-07, reaffirmed 2026-08-09) is option A: add the value check
|
|
2144
|
+
* at warning tier, reusing `PLATFORM_AGENT_NAMES` rather than narrowing the
|
|
2145
|
+
* schema to an enum (a breaking authoring change ADR-0063 already walked
|
|
2146
|
+
* back once).
|
|
1948
2147
|
*/
|
|
1949
2148
|
declare const AGENT_AUTHORING_WITHDRAWN = "agent-authoring-withdrawn";
|
|
2149
|
+
/** `app.defaultAgent` names something outside the platform agent roster. */
|
|
2150
|
+
declare const DEFAULT_AGENT_OUTSIDE_ROSTER = "default-agent-outside-roster";
|
|
1950
2151
|
type AiAgentAuthoringSeverity = 'error' | 'warning';
|
|
1951
2152
|
interface AiAgentAuthoringFinding {
|
|
1952
2153
|
/** Always `warning` — the runtime is the gate; this is the authoring-time signal. */
|
|
@@ -2176,12 +2377,12 @@ declare function validateFlowNodeWrites(stack: AnyRec$5): FlowNodeWriteFinding[]
|
|
|
2176
2377
|
|
|
2177
2378
|
type AnyRec$4 = Record<string, unknown>;
|
|
2178
2379
|
/** Build the sorted access matrix for a normalized stack. */
|
|
2179
|
-
declare function buildAccessMatrix(stack: AnyRec$4):
|
|
2380
|
+
declare function buildAccessMatrix(stack: AnyRec$4): AccessMatrixParsed;
|
|
2180
2381
|
/**
|
|
2181
2382
|
* Semantic diff between two matrices — human-review lines, empty = identical.
|
|
2182
2383
|
* Ordered: removals, additions, then per-entry bit/scope changes.
|
|
2183
2384
|
*/
|
|
2184
|
-
declare function diffAccessMatrix(before:
|
|
2385
|
+
declare function diffAccessMatrix(before: AccessMatrixParsed, after: AccessMatrixParsed): string[];
|
|
2185
2386
|
|
|
2186
2387
|
interface FlowLintFinding {
|
|
2187
2388
|
where: string;
|
|
@@ -2412,4 +2613,4 @@ declare function lintLegacyOrganizationComposites(objects: any[]): LintIssue[];
|
|
|
2412
2613
|
*/
|
|
2413
2614
|
declare function lintDataModel(objects: any[]): LintIssue[];
|
|
2414
2615
|
|
|
2415
|
-
export { ACTION_BODY_WRITE_EXCLUSIONS, ACTION_BODY_WRITE_PATTERNS, ACTION_BODY_WRITE_PATTERN_IDS, ACTION_BODY_WRITE_UNKNOWN_FIELD, ACTION_NAME_UNDEFINED, ACTION_NO_PLACEMENT, ACTION_RECORD_WRITE_DISCARDED, ACTION_RECORD_WRITE_PATTERNS, ACTION_RECORD_WRITE_PATTERN_IDS, AGENT_AUTHORING_WITHDRAWN, AI_SKILL_SURFACE_MISMATCH, AI_SKILL_TOOL_UNRESOLVED, APPROVAL_APPROVERS_MAY_RESOLVE_EMPTY, APPROVAL_APPROVER_CROSS_ORG_UNSUPPORTED, APPROVAL_APPROVER_NOT_MEMBERSHIP_TIER, APPROVAL_APPROVER_TYPE_DEPRECATED, APPROVAL_APPROVER_TYPE_UNKNOWN, APPROVAL_APPROVER_TYPE_UNSUPPORTED, APPROVAL_DECISION_OUTPUTS_RESERVED, APPROVAL_ESCALATION_REASSIGN_NO_TARGET, APPROVAL_EXPRESSION_INVALID, APPROVAL_EXPRESSION_NO_EMPTY_POLICY, AUTONUMBER_LITERAL_TOKEN, AUTONUMBER_OPTIONAL_FIELD, AUTONUMBER_SELF_REFERENCE, AUTONUMBER_UNKNOWN_FIELD, type ActionBodyWriteExclusion, type ActionBodyWriteFinding, type ActionBodyWriteSeverity, type ActionLocationsFinding, type ActionLocationsSeverity, type ActionNameRefFinding, type ActionNameRefSeverity, type AiAgentAuthoringFinding, type AiAgentAuthoringSeverity, type AiSurfaceAffinityFinding, type AiSurfaceAffinitySeverity, type AiToolRefFinding, type AiToolRefSeverity, type ApprovalApproverFinding, type ApprovalApproverSeverity, type AutonumberLintFinding, type BodyWritePatternExclusion, CAPABILITY_REFERENCE_UNKNOWN, CHART_AXIS_NOT_SELECTED, CHART_CONFIG_MISSING, CHART_DATASET_UNKNOWN, CHART_DIMENSION_UNKNOWN, CHART_FIELD_UNKNOWN, CHART_MEASURE_UNKNOWN, COMPONENT_PROPS_INVALID, COMPONENT_PROPS_UNKNOWN_KEY, type CapabilityRefFinding, type CapabilityRefSeverity, type ChartBindingFinding, type ChartBindingSeverity, type ComponentPropsFinding, type ComponentPropsSeverity, DASHBOARD_ACTION_ROUTE_UNRESOLVED, DASHBOARD_ACTION_TARGET_UNDEFINED, DASHBOARD_FILTER_FIELD_UNKNOWN, type DashboardActionRefFinding, type DashboardActionRefSeverity, type ExprIssue, type ExtractedHookBodyWrite, type ExtractedHookBodyWriteSet, FIELD_GROUP_EMPTY, FIELD_GROUP_SHADOWED, FIELD_GROUP_UNDECLARED, FILTER_TOKEN_UNKNOWN, FLOW_APPROVAL_REVISE_DEAD_END, FLOW_APPROVAL_REVISE_DISABLED, FLOW_APPROVAL_REVISE_TARGET_NOT_SERVICE_OWNED, FLOW_APPROVAL_REVISE_UNMARKED_BACKEDGE, FLOW_BARE_DOLLAR_REF, FLOW_BRANCH_LABEL_UNMATCHED, FLOW_DATE_EQUALITY_FILTER, FLOW_DECISION_UNCONDITIONAL_BRANCH, FLOW_DEFAULT_EDGE_WITH_CONDITION, FLOW_DOUBLE_BRACE_INTERP, FLOW_DRAFT_STATUS_AMBIGUOUS, FLOW_ERROR_LABEL_NOT_FAULT, FLOW_INERT_NODE_CONDITION, FLOW_MULTIPLE_DEFAULT_EDGES, FLOW_MULTI_WRITE_UNFILTERED, FLOW_NODE_WRITE_UNKNOWN_FIELD, FLOW_PHANTOM_AGGREGATION, FLOW_RUNAS_UNSCOPED, FLOW_TEMPLATE_LOOKUP_TRAVERSAL, FLOW_TEMPLATE_UNKNOWN_FIELD, FLOW_TIME_RELATIVE_ANTIPATTERN, FLOW_TIME_RELATIVE_DESCRIPTOR_INVALID, FLOW_TIME_RELATIVE_DESCRIPTOR_UNROUTABLE, FLOW_TRIGGER_UNKNOWN_EVENT, FLOW_TRIGGER_UNKNOWN_OBJECT, FLOW_UPDATE_READONLY_FIELD, FLOW_UPDATE_READONLY_WHEN_FIELD, FLOW_WRITE_NODE_TYPES, FLOW_WRITE_NODE_TYPES_DEFERRED, FORM_COLSPAN_ABSOLUTE, FORM_FIELD_UNKNOWN, type FilterTokenFinding, type FilterTokenSeverity, type FlowLintFinding, type FlowNodeWriteFinding, type FlowNodeWriteSeverity, type FlowTemplatePathFinding, type FlowTemplatePathSeverity, type FlowTriggerReadinessFinding, type FlowTriggerReadinessSeverity, type FlowWriteNodeDeferral, type FormLayoutFinding, type FormLayoutSeverity, type FunctionalCompletenessFinding, type FunctionalCompletenessSeverity, HOOK_BODY_WRITE_EXCLUSIONS, HOOK_BODY_WRITE_PATTERNS, HOOK_BODY_WRITE_PATTERN_IDS, HOOK_BODY_WRITE_UNKNOWN_FIELD, type HookBodyWriteFinding, type HookBodyWritePattern, type HookBodyWriteSeverity, type JsxPageFinding, type JsxPageSeverity, LIST_VIEW_FILTERS_IN_VIEWS_MODE, LIVENESS_DEAD_PROPERTY, LIVENESS_EXPERIMENTAL_PROPERTY, type LintIssue, type ListViewModeFinding, type ListViewModeSeverity, type LivenessLintFinding, MAX_SCHEMA_WALK_DEPTH, MEASURE_AGGREGATE_INCOHERENT, NAV_OBJECT_UNGRANTED, NAV_TARGET_UNRESOLVED, NULL_GUARD_HINT, type NavAccessFinding, type NavAccessSeverity, type NavTargetRefFinding, type NavTargetRefSeverity, type NullGuardFinding, type NullGuardOptions, OBJECT_REFERENCE_UNKNOWN, OBJECT_REFERENCE_UNREGISTERED_PLATFORM, ORG_AXIS_CROSS_ORG_BU_GRANT, ORG_AXIS_PERMISSION_INHERITANCE, type ObjectRefFinding, type ObjectRefSeverity, type OrgAxisFinding, type OrgAxisSeverity, PAGE_FIELD_UNKNOWN, PAGE_SOURCE_CLASSNAME, type PageFieldFinding, type PageFieldSeverity, REACT_BLOCK_NEEDS_RECORD_CONTEXT, REACT_CHART_AGGREGATE_INVALID, REACT_CHART_AXIS_UNKNOWN, REACT_CHART_DRILLDOWN_INVALID, REACT_CHART_FIELD_UNKNOWN, REFERENCE_INTEGRITY_RULES, RLS_PREDICATE_UNENFORCEABLE, RLS_PREDICATE_UNPARSEABLE, RUNTIME_AJV_OPTIONS, type ReactPageFinding, type ReactPageSeverity, type ReactPropFinding, type ReactPropSeverity, type ReadonlyFlowWriteFinding, type ReadonlyFlowWriteSeverity, type RecordTitleFinding, type RecordTitleSeverity, type ReferenceIntegrityFinding, type ReferenceIntegrityRule, type ReferenceIntegritySeverity, type RlsPredicateFinding, type RlsPredicateSeverity, type RuleCompilabilityFinding, type RuleCompilabilitySeverity, type RuleSchemaFormatFinding, type RuleSchemaFormatSeverity, SEARCHABLE_FIELD_UNKNOWN, SEARCHABLE_FIELD_UNSEARCHABLE, SECURITY_ANCHOR_HIGH_PRIVILEGE, SECURITY_BOOK_AUDIENCE_UNKNOWN_SET, SECURITY_DELEGATION_MISSING_REASON, SECURITY_EXTERNAL_WIDER, SECURITY_FLS_UNQUALIFIED_KEY, SECURITY_GRANT_EXPIRED_AT_AUTHORING, SECURITY_MASTER_DETAIL_UNGRANTED, SECURITY_OWD_ALIAS, SECURITY_OWD_UNSET, SECURITY_PRIVATE_NO_READSCOPE, SECURITY_ROLE_WORD, SECURITY_WILDCARD_VAMA, SEED_INSERT_MODE_DUPLICATES_ON_REPLAY, SEED_VALUE_OUTSIDE_STATE_MACHINE, SEMANTIC_ROLE_FIELD_UNKNOWN, SHARING_RULE_RUNTIME_VARIABLE_CONDITION, SHARING_RULE_UNLOWERABLE_CONDITION, STYLE_CLASSNAME_TAILWIND, STYLE_NODE_MISSING_ID, STYLE_RESPONSIVE_NO_BASE, STYLE_UNKNOWN_CSS_PROPERTY, STYLE_UNKNOWN_TOKEN, type SearchableFieldFinding, type SearchableFieldRole, type SearchableFieldSeverity, type SecurityFinding, type SecuritySeverity, type SeedReplaySafetyFinding, type SeedReplaySafetySeverity, type SeedStateMachineFinding, type SeedStateMachineSeverity, type SemanticRoleFinding, type SemanticRoleSeverity, type Severity, type SharingRuleEnforceabilityFinding, type SharingRuleEnforceabilitySeverity, type SourceStyleFinding, type SourceStyleSeverity, type StyleFinding, type StyleSeverity, TABLE_COUNT_ONLY, TITLE_FORMAT_RETIRED, TITLE_UNRESOLVABLE, TRANSLATION_OPTION_KEY_UNKNOWN, TRANSLATION_SECTION_NAME_MISSING, TRANSLATION_TARGET_UNKNOWN, type TranslatableSectionFinding, type TranslatableSectionSeverity, type TranslationRefFinding, type TranslationRefSeverity, UNIQUE_DOUBLE_DECLARATION, UNIQUE_LEGACY_ORGANIZATION_COMPOSITE, UNIQUE_UNSCOPED_DECLARED_INDEX, VALIDATION_RULE_REGEX_UNCOMPILABLE, VALIDATION_RULE_SCHEMA_UNCOMPILABLE, VALIDATION_RULE_SCHEMA_UNKNOWN_FORMAT, VIEW_CONTAINER_SHAPE, VIEW_KEY_COLLISION, VIEW_REF_FORM_TARGET_KIND, VIEW_REF_FORM_TARGET_MISSING,
|
|
2616
|
+
export { ACTION_BODY_WRITE_EXCLUSIONS, ACTION_BODY_WRITE_PATTERNS, ACTION_BODY_WRITE_PATTERN_IDS, ACTION_BODY_WRITE_UNKNOWN_FIELD, ACTION_NAME_UNDEFINED, ACTION_NO_PLACEMENT, ACTION_RECORD_WRITE_DISCARDED, ACTION_RECORD_WRITE_PATTERNS, ACTION_RECORD_WRITE_PATTERN_IDS, AGENT_AUTHORING_WITHDRAWN, AI_SKILL_SURFACE_MISMATCH, AI_SKILL_TOOL_UNRESOLVED, APPROVAL_APPROVERS_MAY_RESOLVE_EMPTY, APPROVAL_APPROVER_CROSS_ORG_UNSUPPORTED, APPROVAL_APPROVER_NOT_MEMBERSHIP_TIER, APPROVAL_APPROVER_TYPE_DEPRECATED, APPROVAL_APPROVER_TYPE_UNKNOWN, APPROVAL_APPROVER_TYPE_UNSUPPORTED, APPROVAL_DECISION_OUTPUTS_RESERVED, APPROVAL_ESCALATION_REASSIGN_NO_TARGET, APPROVAL_EXPRESSION_INVALID, APPROVAL_EXPRESSION_NO_EMPTY_POLICY, AUTONUMBER_LITERAL_TOKEN, AUTONUMBER_OPTIONAL_FIELD, AUTONUMBER_SELF_REFERENCE, AUTONUMBER_UNKNOWN_FIELD, type ActionBodyWriteExclusion, type ActionBodyWriteFinding, type ActionBodyWriteSeverity, type ActionLocationsFinding, type ActionLocationsSeverity, type ActionNameRefFinding, type ActionNameRefSeverity, type AiAgentAuthoringFinding, type AiAgentAuthoringSeverity, type AiSurfaceAffinityFinding, type AiSurfaceAffinitySeverity, type AiToolRefFinding, type AiToolRefSeverity, type ApprovalApproverFinding, type ApprovalApproverSeverity, type AutonumberLintFinding, type BodyWritePatternExclusion, CAPABILITY_REFERENCE_UNKNOWN, CHART_AXIS_NOT_SELECTED, CHART_CONFIG_MISSING, CHART_DATASET_UNKNOWN, CHART_DIMENSION_UNKNOWN, CHART_FIELD_UNKNOWN, CHART_MEASURE_UNKNOWN, COMPONENT_PROPS_INVALID, COMPONENT_PROPS_UNKNOWN_KEY, type CapabilityRefFinding, type CapabilityRefSeverity, type ChartBindingFinding, type ChartBindingSeverity, type ComponentPropsFinding, type ComponentPropsSeverity, DASHBOARD_ACTION_ROUTE_UNRESOLVED, DASHBOARD_ACTION_TARGET_UNDEFINED, DASHBOARD_FILTER_FIELD_UNKNOWN, DEFAULT_AGENT_OUTSIDE_ROSTER, type DashboardActionRefFinding, type DashboardActionRefSeverity, type EmptyCombinatorFinding, type EmptyCombinatorSeverity, type ExprIssue, type ExtractedHookBodyWrite, type ExtractedHookBodyWriteSet, FIELD_GROUP_EMPTY, FIELD_GROUP_SHADOWED, FIELD_GROUP_UNDECLARED, FILTER_EMPTY_COMBINATOR, FILTER_EMPTY_NODE, FILTER_TOKEN_UNKNOWN, FLOW_APPROVAL_REVISE_DEAD_END, FLOW_APPROVAL_REVISE_DISABLED, FLOW_APPROVAL_REVISE_TARGET_NOT_SERVICE_OWNED, FLOW_APPROVAL_REVISE_UNMARKED_BACKEDGE, FLOW_BARE_DOLLAR_REF, FLOW_BRANCH_LABEL_UNMATCHED, FLOW_DATE_EQUALITY_FILTER, FLOW_DECISION_UNCONDITIONAL_BRANCH, FLOW_DEFAULT_EDGE_WITH_CONDITION, FLOW_DOUBLE_BRACE_INTERP, FLOW_DRAFT_STATUS_AMBIGUOUS, FLOW_ERROR_LABEL_NOT_FAULT, FLOW_INERT_NODE_CONDITION, FLOW_MULTIPLE_DEFAULT_EDGES, FLOW_MULTI_WRITE_UNFILTERED, FLOW_NODE_WRITE_UNKNOWN_FIELD, FLOW_PHANTOM_AGGREGATION, FLOW_RUNAS_UNSCOPED, FLOW_TEMPLATE_LOOKUP_TRAVERSAL, FLOW_TEMPLATE_UNKNOWN_FIELD, FLOW_TIME_RELATIVE_ANTIPATTERN, FLOW_TIME_RELATIVE_DESCRIPTOR_INVALID, FLOW_TIME_RELATIVE_DESCRIPTOR_UNROUTABLE, FLOW_TRIGGER_UNKNOWN_EVENT, FLOW_TRIGGER_UNKNOWN_OBJECT, FLOW_TRIGGER_UNROUTABLE, FLOW_UPDATE_READONLY_FIELD, FLOW_UPDATE_READONLY_WHEN_FIELD, FLOW_WRITE_NODE_TYPES, FLOW_WRITE_NODE_TYPES_DEFERRED, FORM_COLSPAN_ABSOLUTE, FORM_FIELD_UNKNOWN, type FilterTokenFinding, type FilterTokenSeverity, type FlowLintFinding, type FlowNodeWriteFinding, type FlowNodeWriteSeverity, type FlowTemplatePathFinding, type FlowTemplatePathSeverity, type FlowTriggerReadinessFinding, type FlowTriggerReadinessSeverity, type FlowWriteNodeDeferral, type FormLayoutFinding, type FormLayoutSeverity, type FunctionalCompletenessFinding, type FunctionalCompletenessSeverity, HOOK_BODY_WRITE_EXCLUSIONS, HOOK_BODY_WRITE_PATTERNS, HOOK_BODY_WRITE_PATTERN_IDS, HOOK_BODY_WRITE_UNKNOWN_FIELD, type HookBodyWriteFinding, type HookBodyWritePattern, type HookBodyWriteSeverity, type JsxPageFinding, type JsxPageSeverity, LIST_VIEW_FILTERS_IN_VIEWS_MODE, LIVENESS_DEAD_PROPERTY, LIVENESS_EXPERIMENTAL_PROPERTY, type LintIssue, type ListViewModeFinding, type ListViewModeSeverity, type LivenessLintFinding, MAX_SCHEMA_WALK_DEPTH, MEASURE_AGGREGATE_INCOHERENT, NAV_OBJECT_UNGRANTED, NAV_TARGET_UNRESOLVED, NULL_GUARD_HINT, type NavAccessFinding, type NavAccessSeverity, type NavTargetRefFinding, type NavTargetRefSeverity, type NullGuardFinding, type NullGuardOptions, OBJECT_REFERENCE_UNKNOWN, OBJECT_REFERENCE_UNREGISTERED_PLATFORM, OPEN_VOCABULARY_PROBES, ORG_AXIS_CROSS_ORG_BU_GRANT, ORG_AXIS_PERMISSION_INHERITANCE, type ObjectRefFinding, type ObjectRefSeverity, type OrgAxisFinding, type OrgAxisSeverity, PAGE_FIELD_UNKNOWN, PAGE_SOURCE_CLASSNAME, PREDICATE_PATH_UNRESOLVED, PREDICATE_PATH_UNROOTED, PRE_SEAL_PHASES, type PageFieldFinding, type PageFieldSeverity, type PredicatePathFinding, type PredicatePathOptions, type PredicatePathSeverity, REACT_BLOCK_NEEDS_RECORD_CONTEXT, REACT_CHART_AGGREGATE_INVALID, REACT_CHART_AXIS_UNKNOWN, REACT_CHART_DRILLDOWN_INVALID, REACT_CHART_FIELD_UNKNOWN, REFERENCE_INTEGRITY_RULES, RLS_PREDICATE_OVER_BUDGET, RLS_PREDICATE_UNENFORCEABLE, RLS_PREDICATE_UNPARSEABLE, RUNTIME_AJV_OPTIONS, type ReactPageFinding, type ReactPageSeverity, type ReactPropFinding, type ReactPropSeverity, type ReadonlyFlowWriteFinding, type ReadonlyFlowWriteSeverity, type RecordTitleFinding, type RecordTitleSeverity, type ReferenceIntegrityFinding, type ReferenceIntegrityRule, type ReferenceIntegritySeverity, type RlsPredicateFinding, type RlsPredicateSeverity, type RuleCompilabilityFinding, type RuleCompilabilitySeverity, type RuleSchemaFormatFinding, type RuleSchemaFormatSeverity, SEAL_MARKERS, SEARCHABLE_FIELD_UNKNOWN, SEARCHABLE_FIELD_UNSEARCHABLE, SECURITY_ANCHOR_HIGH_PRIVILEGE, SECURITY_BOOK_AUDIENCE_UNKNOWN_SET, SECURITY_DELEGATION_MISSING_REASON, SECURITY_EXTERNAL_WIDER, SECURITY_FLS_UNQUALIFIED_KEY, SECURITY_GRANT_EXPIRED_AT_AUTHORING, SECURITY_MASTER_DETAIL_UNGRANTED, SECURITY_OWD_ALIAS, SECURITY_OWD_UNSET, SECURITY_PRIVATE_NO_READSCOPE, SECURITY_ROLE_WORD, SECURITY_WILDCARD_VAMA, SEED_INSERT_MODE_DUPLICATES_ON_REPLAY, SEED_VALUE_OUTSIDE_STATE_MACHINE, SEMANTIC_ROLE_FIELD_UNKNOWN, SHARING_RULE_RUNTIME_VARIABLE_CONDITION, SHARING_RULE_UNLOWERABLE_CONDITION, STARTUP_OPEN_VOCABULARY_VERDICT, STARTUP_VERDICT_ASSERTIVE_WORDING, STARTUP_VERDICT_HINT, STYLE_CLASSNAME_TAILWIND, STYLE_NODE_MISSING_ID, STYLE_RESPONSIVE_NO_BASE, STYLE_UNKNOWN_CSS_PROPERTY, STYLE_UNKNOWN_TOKEN, type SearchableFieldFinding, type SearchableFieldRole, type SearchableFieldSeverity, type SecurityFinding, type SecuritySeverity, type SeedReplaySafetyFinding, type SeedReplaySafetySeverity, type SeedStateMachineFinding, type SeedStateMachineSeverity, type SemanticRoleFinding, type SemanticRoleSeverity, type Severity, type SharingRuleEnforceabilityFinding, type SharingRuleEnforceabilitySeverity, type SourceStyleFinding, type SourceStyleSeverity, type StartupRegistryVerdictFinding, type StartupRegistryVerdictOptions, type StartupRegistryVerdictSeverity, type StyleFinding, type StyleSeverity, TABLE_COUNT_ONLY, TITLE_FORMAT_RETIRED, TITLE_UNRESOLVABLE, TRANSLATION_OPTION_KEY_UNKNOWN, TRANSLATION_SECTION_NAME_MISSING, TRANSLATION_TARGET_UNKNOWN, type TranslatableSectionFinding, type TranslatableSectionSeverity, type TranslationRefFinding, type TranslationRefSeverity, UNIQUE_DOUBLE_DECLARATION, UNIQUE_LEGACY_ORGANIZATION_COMPOSITE, UNIQUE_UNSCOPED_DECLARED_INDEX, VALIDATION_RULE_REGEX_UNCOMPILABLE, VALIDATION_RULE_SCHEMA_UNCOMPILABLE, VALIDATION_RULE_SCHEMA_UNKNOWN_FORMAT, VIEW_CONTAINER_SHAPE, VIEW_KEY_COLLISION, VIEW_REF_FORM_TARGET_KIND, VIEW_REF_FORM_TARGET_MISSING, VISIBILITY_BARE_IDENTIFIER, VISIBILITY_PREDICATE_OVER_BUDGET, VISIBILITY_PREDICATE_SYNTAX, VISIBILITY_ROOT_MISLAYERED, type ViewContainerFinding, type ViewContainerSeverity, type ViewRefFinding, type VisibilityFinding, type VisibilityLayer, type VisibilityOptions, type VisibilitySeverity, WIDGET_DATASET_UNKNOWN, WIDGET_DIMENSION_UNKNOWN, WIDGET_LEGACY_ANALYTICS_SHAPE, WIDGET_LEGACY_ANALYTICS_UNRENDERABLE, WIDGET_MEASURE_UNKNOWN, type WalkedComponent, type WalkedValidationRule, type WidgetBindingFinding, type WidgetBindingSeverity, buildAccessMatrix, diffAccessMatrix, extractHookBodyWriteSet, extractHookBodyWrites, findStartupRegistryVerdicts, findUnguardedNullableOperands, isSourceAuthoredPage, lintAutonumberFormats, lintDataModel, lintFlowPatterns, lintLegacyOrganizationComposites, lintLivenessProperties, lintUniqueDeclarations, lintUnscopedDeclaredIndexes, lintViewRefs, nearestRegisteredFormat, nullGuardMessage, validateActionBodyWrites, validateActionLocations, validateActionNameRefs, validateAiAgentAuthoring, validateAiSurfaceAffinity, validateAiToolReferences, validateApprovalApprovers, validateCapabilityReferences, validateChartBindings, validateComponentProps, validateDashboardActionRefs, validateEmptyCombinators, validateFilterTokens, validateFlowNodeWrites, validateFlowTemplatePaths, validateFlowTriggerReadiness, validateFormLayout, validateFunctionalCompleteness, validateHookBodyWrites, validateJsxPages, validateListViewMode, validateNavAccess, validateNavTargetRefs, validateObjectReferences, validateOrgAxisRedLines, validatePageFieldBindings, validatePageSourceStyling, validatePredicatePathRefs, validateReactPageProps, validateReactPages, validateReadonlyFlowWrites, validateRecordTitle, validateReferenceIntegrity, validateResponsiveStyles, validateRlsPredicateEnforceability, validateRuleCompilability, validateRuleSchemaFormats, validateSearchableFields, validateSecurityPosture, validateSeedReplaySafety, validateSeedStateMachine, validateSemanticRoles, validateSharingRuleEnforceability, validateStackExpressions, validateTranslatableSections, validateTranslationReferences, validateViewContainers, validateVisibilityPredicates, validateWidgetBindings, walkPageComponents };
|