73 lines
3.4 KiB
Rust
73 lines
3.4 KiB
Rust
//! # round2-candidatekit — Packet 2B-0: the candidate-neutral apparatus, and
|
|
//! **nothing else**.
|
|
//!
|
|
//! `spec/CONTRACT_EDITOR_T4_SPIKE.md` Round 2 scores criterion 3 (text) via
|
|
//! the five checks `spec/ANALYSIS_TEXT_RUN_PRIMITIVES.md` (W3) §5 names.
|
|
//! Packet 2A built every piece of candidate-neutral apparatus those checks
|
|
//! are measured against (fixtures, the hit-test probe table, the reference
|
|
//! rasters and D4 regions, the accessibility oracle). This crate is Packet
|
|
//! 2B-0: it is what the two Round 2 candidates — **C1** (egui + lyon) and
|
|
//! **C2** (vello) — both depend on, so that neither one re-derives fixture
|
|
//! loading, and neither one gets to define the scoring rule for itself.
|
|
//!
|
|
//! ## The neutrality boundary — this is the point of the crate
|
|
//!
|
|
//! The user's ruling, verbatim: **"Share only neutral fixture/oracle
|
|
//! loading. Rendering, hit testing, and accessibility integration remain
|
|
//! candidate-owned."**
|
|
//!
|
|
//! This crate **MAY** contain:
|
|
//!
|
|
//! - Loading and validating fixtures, the probe table, the reference
|
|
//! rasters and region files, and the a11y expectations
|
|
//! ([`inputs::load_all`]).
|
|
//! - The shared *report* data shape both candidates emit, and its
|
|
//! serialization ([`report::CandidateReport`] and its constituent types).
|
|
//! - The scoring rule that turns per-check outcomes into the criterion cell
|
|
//! ([`scoring::criterion_cell`], [`scoring::is_eligible`]).
|
|
//!
|
|
//! This crate **MUST NOT** contain:
|
|
//!
|
|
//! - Any rendering, rasterization, path/outline conversion, or
|
|
//! tessellation.
|
|
//! - Any hit-test *resolution* — i.e. nothing that answers "which byte
|
|
//! offset does this device point select". Loading the expected answers
|
|
//! ([`round2_textkit::hittest::HitTestProbeFile`]) is neutral; computing
|
|
//! them is the candidate's job and the thing check 4 measures. This crate
|
|
//! only carries the *shape* of a recorded comparison
|
|
//! ([`report::HitTestProbeResult`]) — it never resolves one.
|
|
//! - Any accessibility node construction or platform-adapter code. This
|
|
//! crate only carries the *shape* of observed evidence
|
|
//! ([`report::A11yEvidence`]) against the precommitted oracle
|
|
//! ([`round2_textkit::a11y`]) — it never builds a tree.
|
|
//!
|
|
//! `tests/dependency_deny_list.rs` enforces what code review can miss: it
|
|
//! reads this crate's own `Cargo.toml` at test time and fails if `egui`,
|
|
//! `eframe`, `egui-wgpu`, `lyon`, `lyon_path`, `lyon_tessellation`, `vello`,
|
|
//! `wgpu`, `winit`, `accesskit`, `accesskit_winit`, `tiny-skia`, `resvg`, or
|
|
//! `usvg` is ever named in `[dependencies]`.
|
|
//!
|
|
//! ## What this crate does not decide
|
|
//!
|
|
//! [`scoring::criterion_cell`] implements the contract's outcome rule; it
|
|
//! does not implement W3 §5 itself, and it is not the place check 3's
|
|
//! `NOT RUN` ruling was *made* — that ruling is `ROUND2_TEXT_RECIPE.md`
|
|
//! §1.2, and this crate only encodes and enforces its consequences.
|
|
|
|
pub mod inputs;
|
|
pub mod outcome;
|
|
pub mod report;
|
|
pub mod scoring;
|
|
|
|
pub use inputs::{load_all, NeutralInputs, ReferenceFixture};
|
|
pub use outcome::CheckOutcome;
|
|
pub use report::{
|
|
A11yEvidence, AdapterStatus, BusUnreachableEvidence, CandidateReport, CostRecord,
|
|
DependencyDelta, DiffReportRecord, HitTestProbeResult, IntegrationOwnership, LocByPart,
|
|
RegionMassRecord, ReportPart,
|
|
};
|
|
pub use scoring::{
|
|
criterion_cell, is_eligible, CellOutcome, CHECK_3_RULING, DISQUALIFYING_CHECKS,
|
|
ROUND0_READBACK_EVIDENCE, ROUND_PLATFORM,
|
|
};
|