Skip to content

v0.1.6

Latest

Choose a tag to compare

@github-actions github-actions released this 22 Jul 20:11
feat(rules): formula correctness checks (PF0002-PF0005) + PA1029-PA1031

Static substitutes for the App checker's formula (binding) errors, built
without live binding:

- PF0002 unknown-navigation-target: Navigate/SetFocus to a name defined
  nowhere in the app (error)
- PF0003 possible-typo: identifier one edit away from a defined symbol
  ("txtFiltr - did you mean txtFilter?")
- PF0004 wrong-argument-count: curated catalog of ~150 built-in function
  signatures; functions outside the catalog are never flagged (error)
- PF0005 unknown-function: not a built-in, not user-defined; configurable
  allow list

New quality rules:
- PA1029 large-media: embedded asset above max-kb (default 300)
- PA1030 low-contrast: Color vs Fill below WCAG AA 4.5:1, only for opaque
  RGBA literal pairs - never guesses inherited colors
- PA1031 unused-datasource: bound but never referenced; Studio sample
  sources (ComboBoxSample etc.) exempt
- PA1001 also detects the in/exactin operator in queries over data sources

False-positive engineering, verified against two real production apps:
new FxNameClassifier (Easel.Fx) distinguishes structural references
(dotted base, bare name outside record scope) from entity-column mentions
(bare inside Filter/LookUp scope, DataSourceInfo-style column arguments),
shared by PF0003 and PA1019; singular/plural pairs (Operator/Operators)
exempt from typo detection. Result on both real apps: zero false PF
findings, PA1019/PA1031 reduced to genuine hits only.

Fix procedures added for PF0002-PF0005. Docs and README updated;
203/203 tests pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>