Releases: lukoplt/easel
Releases · lukoplt/easel
Release list
v0.1.6
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>
v0.1.5
fix: address full code review findings (#1) Preserve YAML during symbol renames, make analysis scope-aware, harden secret detection and cancellation, and prevent partial public releases. Add regression coverage for the corrected edge cases.
v0.1.4
ci(release): fix parallel upload race + wrong repo URL - Release binaries: build each platform as an artifact, then a single release job uploads them all at once. Prevents the concurrent-write race in action-gh-release (osx-arm64 failed with "Not Found", fail-fast then cancelled win-x64). Add fail-fast: false so one platform failure never cancels the others. - Fix placeholder repo URL easel/easel -> lukoplt/easel across manifests, docs, SARIF informationUri and package metadata. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v0.1.3
build: change NuGet PackageId Easel.Tool -> EaselCli Easel.Tool returns 409 Conflict on push for every version (ID reserved/taken on nuget.org, not owned by this account). Switch the package id to EaselCli (the CLI command stays `easel`). Updates README, GitHub Action, Azure DevOps task and docs; winget keeps its dotted identifier (separate registry, not affected). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v0.1.2
docs: attribution — Made with <3 by Lukáš Oplt - README + LICENSE tagline. - LICENSE copyright holder and package Authors set to Lukáš Oplt. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v0.1.1
ci(release): harden NuGet publish per security review
- Pass the Trusted-Publishing key via env instead of inline ${{ }} in run:
(avoids secret exposure on the command line and expression injection).
- Pin third-party actions to full commit SHAs: NuGet/login (v1) and
softprops/action-gh-release (v2).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v0.1.0
refactor: rename tool and projects pacheck -> easel Rebrand the tool and CLI command to "easel" and the solution projects to Easel.*: - Namespaces PaCheck.* -> Easel.*; project folders/csproj + solution renamed. - CLI command, AssemblyName and PackageId: pacheck/PaCheck.Tool -> easel/Easel.Tool. - Config file .pacheck.yml -> .easel.yml; baseline .pacheck-baseline.json -> .easel-baseline.json; SARIF fingerprint key pacheck/v1 -> easel/v1; temp dir, env vars (EASEL_*), docs, CI workflows, GitHub Action, Azure DevOps task and winget/Homebrew manifests all updated. - Rule ids (PAxxxx/PFxxxx) unchanged — they denote Power Apps, not the tool name. Build clean (0 warnings), 91 tests pass, verified end-to-end incl. real .msapp. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>