You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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>