NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Continuous accessibility-compliance engine for Flutter. Pure-Dart rules that map findings to WCAG and EN 301 549 success criteria, with CI baseline gating.
Last release 2 months ago
17 Jul 2026
Too new to tell
only 2 release windows
Nearly every release is documented
notes for 11 of 11 stable releases
Nothing withdrawn
no release was ever pulled
3 months old
11 releases · first in 2026
One column per month.
Track finding-count trends across runs
Track finding-count trends across runs
RunSummary (a run's totals and per-severity
counts), TrendLog (an append-only, length-capped history that round-trips to
JSON) and RunDelta (the change since the previous run). summarizeRun builds
a summary straight from a GateResult. This is the model behind the CLI's new
--history flag, letting a project see its accessibility debt move over time
rather than only pass/fail one run.Attach ready-to-paste fix snippets to findings
Attach ready-to-paste fix snippets to findings
codeExample: a
ready-to-paste Dart snippet showing the fix as a // Before / // After
pair (missing accessible name, image alt, field label, adjustable value,
heading, exposed state). It is copy-and-adapt guidance, not an edit attest
applies for you — a runtime audit has the offending file:line but not the
source AST, so auto-applied fixes are deliberately out of scope. The snippet
is optional (null for geometric/visual findings) and rides through JSON and
the SARIF result properties.FlowAnalysis diffs an ordered sequence of audit reports — the output of tester.auditFlow — so each step's introduced and resolved findings are explici
FlowAnalysis diffs an ordered sequence of audit reports — the output of
tester.auditFlow — so each step's introduced and resolved findings are
explicit. Instead of "here are N reports" it says "opening the dialog
introduced these two issues", matching by the stable fingerprint so a pure
layout shift between steps is not counted as a change.
introducedByInteractions excludes the initial screen's own findings.
This makes interaction-aware auditing actionable — it names the interaction
responsible. Releases attest 1.7.0 (FlowAnalysis, StepDelta) and attest_flutter
1.2.1 (requires it, documents FlowAnalysis in the flow section); attest_cli is
unchanged.
FlowAnalysis and StepDelta: diff an ordered sequence of audit reports —
typically tester.auditFlow output — so each step's introduced and
resolved findings are explicit. It pinpoints the interaction that caused a
barrier ("opening the dialog introduced these two issues"), matching by the
stable fingerprint. Experimental, part of the flow API.attest/generic-link-text flags links whose whole accessible name is a generic phrase — "read more", "click here", "here", "learn more" and the like —
attest/generic-link-text flags links whose whole accessible name is a generic
phrase — "read more", "click here", "here", "learn more" and the like — that
tells a screen-reader user nothing about the destination, which matters most
when they pull up an out-of-context list of links.
WCAG 2.4.4 allows the purpose to be clear from surrounding context, so this is
a heuristic: a suppressible warning, scoped to actual links (not buttons), with
a declared precision bar of 0.9. It moves 2.4.4 from manual to partial in the
coverage matrix. Ships with rule fixtures, nine corpus cases (precision and
recall 1.0), and its heuristic-contract entry.
Fifteen bundled rules; corpus at 137 cases. Releases attest 1.6.0 and
attest_flutter 1.1.2 (dep bump + docs); attest_cli is unaffected.
attest/generic-link-text (WCAG 2.4.4, heuristic): flags links whose whole
accessible name is a generic phrase ("read more", "click here") that does not
describe the destination. Scoped to links and shipped as a suppressible
warning, so false positives stay near zero. This moves 2.4.4 from manual to
partial in the coverage matrix. Fifteen bundled rules now.attest/adjustable-value flags adjustable controls — sliders, steppers — that respond to the increase or decrease action but expose no current value. A
attest/adjustable-value flags adjustable controls — sliders, steppers — that
respond to the increase or decrease action but expose no current value. A
screen reader lets the user change the setting yet cannot announce what it is,
and a visible label ("Volume") is not the value. This is the Value leg of
Name, Role, Value that the existing rules did not cover.
Deterministic, tree-only, so no Flutter-side change: the builder already
captures increase/decrease actions. Ships with rule fixtures, ten corpus cases
(precision and recall 1.0), and its entry in the coverage matrix under 4.1.2.
Fourteen bundled rules; corpus at 128 cases.
Releases attest 1.5.0 and attest_flutter 1.1.1 (which just requires the new
core and refreshes its docs); attest_cli is unaffected.
attest/adjustable-value (WCAG 4.1.2): flags adjustable controls — sliders,
steppers — that respond to increase/decrease but expose no current value, so a
screen reader can change the setting yet cannot announce it. A visible label is
not the value. Fourteen bundled rules now.ConformanceReport: a machine-readable, clause-by-clause conformance document for a standard pack — every criterion with its coverage status, guidance
ConformanceReport: a machine-readable, clause-by-clause conformance document
for a standard pack — every criterion with its coverage status, guidance and
the findings mapped to it. Built with ConformanceReport.build; it is the
stable substrate a dashboard or VPAT / accessibility statement consumes, with
a schemaVersion bumped only on a breaking shape change.CoverageMatrix.renderTable() now prints each criterion's guidance note under it, so the text output — and attest coverage — is an actionable checklist
CoverageMatrix.renderTable() now prints each criterion's guidance note under
it, so the text output — and attest coverage — is an actionable checklist
rather than just a list of clause numbers.The coverage matrix: WcagRegistry (the single source of truth mapping every WCAG Level A/AA success criterion to automated / partial / manual coverage
WcagRegistry (the single source of truth mapping every
WCAG Level A/AA success criterion to automated / partial / manual coverage,
with an own-words note per clause), CriterionCoverage, CoverageStatus, and
CoverageMatrix.forStandard. It states, per pack, exactly what attest verifies
automatically and what needs human review — no new detection, no
false-positive risk. A consistency test keeps it aligned with the bundled
rules.attest/non-text-contrast (WCAG 1.4.11): icons and other non-text glyphs are held to the flat 3:1 minimum instead of the text minimum. ContrastSample g
attest/non-text-contrast (WCAG 1.4.11): icons and other non-text glyphs are
held to the flat 3:1 minimum instead of the text minimum. ContrastSample
gained an isNonText flag; the contrast rule now skips non-text samples.First stable release. The public API is frozen (see below) and the rules ship with measured, published precision and recall against a validation corpu
First stable release. The public API is frozen (see below) and the rules ship with measured, published precision and recall against a validation corpus.
SemanticsNodeData.identifier and Finding.identifier, carrying the
developer-assigned semantics identifier (SemanticsProperties.identifier). A
finding resolves to the offending node's identifier, or its nearest ancestor's.ContrastSample.identifier, so a contrast finding is anchored to the sampled
text node the same way tree-rule findings are.package:attest/corpus.dart): CorpusCase,
ExpectedFinding and CorpusCategory, the labelled ground-truth types the
precision/recall harness measures each rule against.MetricsHarness and CorpusMetrics: run the corpus, compute per-rule
precision, recall and false-positive-on-clean rate, and evaluate a CI gate
(deterministic precision must be 1.0, zero false positives on clean cases,
heuristics must meet a declared threshold, and recall must not regress against
a committed baseline).declaredHeuristicPrecision: an explicit precision bar (0.9) for each of the
four heuristic rules, enforced by the metrics gate. A contract test verifies
every heuristic declares a bar, tags its findings heuristic, and is
suppressible in one line via RuleConfig.disabledRules.package:attest/attest.dart is stable within a major, with two documented
exceptions annotated @experimental (free to change in minors, always
changelogged): the validation-corpus library (package:attest/corpus.dart)
and TranscriptGenerator, whose announcement wording awaits cross-validation
against real screen readers.attest/state-exposed now fires on a group of two or more custom controls (down from three), catching small segmented/toggle pairs that expose no selec
attest/state-exposed now fires on a group of two or more custom controls
(down from three), catching small segmented/toggle pairs that expose no
selected state.Your coding agent can read these notes before it upgrades. Set up the MCP server →