PackageTrack
Sign in Get early access

attest

Continuous accessibility-compliance engine for Flutter. Pure-Dart rules that map findings to WCAG and EN 301 549 success criteria, with CI baseline gating.

1.11.0 sahland/attest

What this package is like to depend on

Last release 1 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

1 months old

11 releases · first in 2026

11 releases in the last 12 months

see the full history below

Release timeline

11 releases · Jul 2026 to Jul 2026
Release Pre-release

Releases

latest 11
  1. 1.11.0 17 Jul 2026
    Release notes

    Track finding-count trends across runs

    Open source →
    Release notes

    Added

    • Trend tracking 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.
    Open source →
  2. 1.10.0 15 Jul 2026
    Release notes

    Attach ready-to-paste fix snippets to findings

    Open source →
    Release notes

    Added

    • Findings from the deterministic rules now carry a 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.
    Open source →
  3. 1.7.0 05 Jul 2026
    Release notes

    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.

    Open source →
    Release notes

    Added

    • 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.
    Open source →
  4. 1.6.0 05 Jul 2026
    Release notes

    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.

    Open source →
    Release notes

    Added

    • 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.
    Open source →
  5. 1.5.0 05 Jul 2026
    Release notes

    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.

    Open source →
    Release notes

    Added

    • 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.
    Open source →
  6. 1.4.0 03 Jul 2026
    Release notes

    Added

    • 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.
    Open source →
  7. 1.3.0 03 Jul 2026
    Release notes

    Added

    • 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.
    Open source →
  8. 1.2.0 02 Jul 2026
    Release notes

    Added

    • The coverage matrix: 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.
    Open source →
  9. 1.1.0 02 Jul 2026
    Release notes

    Added

    • 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.

    Fixed

    • A small icon rendered below 4.5:1 but at or above 3:1 is no longer reported as a text-contrast failure. Icons are non-text content (governed by 1.4.11), so holding them to the text minimum was a false positive.
    Open source →
  10. 1.0.0 02 Jul 2026
    Release notes

    First stable release. The public API is frozen (see below) and the rules ship with measured, published precision and recall against a validation corpus.

    Added

    • 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.
    • The validation-corpus API (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.
    • Determinism and performance guarantees are now regression-tested: identical input produces byte-identical output regardless of rule registration order, a pure layout translation leaves every fingerprint unchanged while a genuine violation change moves exactly one, and a 2000-node screen must audit within an explicit per-screen time budget.

    Changed

    • The public API is frozen for 1.0. Everything exported from 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.
    • Stated the version-support policy: Dart SDK ≥ 3.6 (a tooling floor, not a language-feature requirement — documented in the pubspec), and toolkit-wide support for the current and previous three stable Flutter releases.
    Open source →
  11. 0.9.0 01 Jul 2026
    Release notes

    Changed

    • 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.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive