@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/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Manifest } from '@objectstack/sdui-parser';
2
2
  import { Options } from 'ajv';
3
- import { AccessMatrix } 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-Cs64ShwN.cjs';
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_.cjs';
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$E = Record<string, unknown>;
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$E): WidgetBindingFinding[];
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$D = Record<string, unknown>;
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$D): ExprIssue[];
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$C = Record<string, unknown>;
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$C): ListViewModeFinding[];
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
- type AnyRec$B = Record<string, unknown>;
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$B): FlowTriggerReadinessFinding[];
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$A = Record<string, unknown>;
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$A): FlowTemplatePathFinding[];
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$z = Record<string, unknown>;
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$z): ReadonlyFlowWriteFinding[];
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$y = Record<string, unknown>;
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$y): StyleFinding[];
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$x = Record<string, unknown>;
397
- declare function validateJsxPages(stack: AnyRec$x, opts?: {
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$w = Record<string, unknown>;
411
- declare function validateReactPages(stack: AnyRec$w): ReactPageFinding[];
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$v = Record<string, unknown>;
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$v): ReactPropFinding[];
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$u = Record<string, unknown>;
441
- declare function validatePageSourceStyling(stack: AnyRec$u): SourceStyleFinding[];
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$t = Record<string, unknown>;
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$t): RecordTitleFinding[];
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$s = Record<string, unknown>;
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$s): SemanticRoleFinding[];
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$r = Record<string, unknown>;
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$r): FormLayoutFinding[];
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
- /** Always `warning` today — both rules are advisory (see module note). */
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-alias-deprecated`. */
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$q = Record<string, unknown>;
699
+ type AnyRec$r = Record<string, unknown>;
630
700
  /**
631
- * Validate conditional-visibility keys across authored views and pages.
701
+ * Validate conditional-visibility predicates across authored views and pages.
632
702
  *
633
- * Runs on the **pre-parse** (normalized) stack so it can see the deprecated
634
- * `visibleOn` / `visibility` aliases before the schema folds them into
635
- * `visibleWhen`. Returns findings (empty = clean); all advisory (`warning`)
636
- * the caller must never fail the build on these alone.
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
- * alias-deprecated check is layer-agnostic.
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 validateVisibilityPredicates(stack: AnyRec$q, opts?: VisibilityOptions): VisibilityFinding[];
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
- * The walk descends into `filter` / `filters` / `runtimeFilter` subtrees and
1090
- * classifies string values inside them. It deliberately does NOT check
1091
- * navigation `recordId` / `params`, which resolve an additional vocabulary
1092
- * `AppContextSelector` ids such as `{active_package}` that is meaningless in
1093
- * a filter because filters are not evaluated with the sidebar's selector
1094
- * state. Restricting the walk keeps that legitimate usage out of the rule and
1095
- * holds false positives at zero.
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
- * The OBJECT's own `searchableFields` stays existence-only: the runtime's
1312
- * declared branch filters by existence, never by type, so a json or lookup
1313
- * column declared THERE is a choice the engine executes (a `$contains` over
1314
- * the raw column), not a 400. Flagging it would reject metadata the runtime
1315
- * accepts the false finding that makes authors stop trusting the linter
1316
- * (ADR-0072 D1).
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-filtered, never type-filtered), so only
1364
- * existence is checked.
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 covers shapes the props schemas do not yet describe but real
1560
- * pages authored anyway (they pass only because `properties` is unvalidated):
1561
- * `record:details` `sections[].fields[]` and `hideFields[]`, and the record
1562
- * picker's `labelField`. Linting the schema's shape alone would find nothing on
1563
- * the actual corpus.
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): AccessMatrix;
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: AccessMatrix, after: AccessMatrix): string[];
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, VISIBILITY_ALIAS_DEPRECATED, 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, findUnguardedNullableOperands, isSourceAuthoredPage, lintAutonumberFormats, lintDataModel, lintFlowPatterns, lintLegacyOrganizationComposites, lintLivenessProperties, lintUniqueDeclarations, lintUnscopedDeclaredIndexes, lintViewRefs, nearestRegisteredFormat, nullGuardMessage, validateActionBodyWrites, validateActionLocations, validateActionNameRefs, validateAiAgentAuthoring, validateAiSurfaceAffinity, validateAiToolReferences, validateApprovalApprovers, validateCapabilityReferences, validateChartBindings, validateComponentProps, validateDashboardActionRefs, validateFilterTokens, validateFlowNodeWrites, validateFlowTemplatePaths, validateFlowTriggerReadiness, validateFormLayout, validateFunctionalCompleteness, validateHookBodyWrites, validateJsxPages, validateListViewMode, validateNavAccess, validateNavTargetRefs, validateObjectReferences, validateOrgAxisRedLines, validatePageFieldBindings, validatePageSourceStyling, validateReactPageProps, validateReactPages, validateReadonlyFlowWrites, validateRecordTitle, validateReferenceIntegrity, validateResponsiveStyles, validateRlsPredicateEnforceability, validateRuleCompilability, validateRuleSchemaFormats, validateSearchableFields, validateSecurityPosture, validateSeedReplaySafety, validateSeedStateMachine, validateSemanticRoles, validateSharingRuleEnforceability, validateStackExpressions, validateTranslatableSections, validateTranslationReferences, validateViewContainers, validateVisibilityPredicates, validateWidgetBindings, walkPageComponents };
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 };