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
Executable checklist for PhotoTux accessibility conformance against 29 — Accessibility, with cross-links to shell, command, theme, and UX specs. Use during feature design, implementation review, and release evidence. Normative keywords follow Requirement Keywords. PhotoTux MUST expose role, name, state, availability, and action semantics for actionable UI; keyboard access MUST cover primary menu operations except inherently continuous gestures that have parameterized command equivalents (00).
How to Use
Mark each item Pass, Fail, N/A, or Deferred with owner and evidence link.
Deferred items require Decision Register rationale and user-visible limitation notes.
Toolkit widgets do not grant a free pass; compare AT-SPI (or host) tree to semantic oracle.
Vendor-neutral: no proprietary screen-reader workflow requirements.
A. Semantic Tree and Identity
ID
Requirement
Evidence
A1
Every actionable control has a semantic node with stable ID derived from owner+role, not widget pointer or coordinates
tree dump
A2
Application → window → workspace → regions hierarchy matches reading order, not construction order
hierarchy fixture
A3
Decorative wrappers/icons excluded unless they convey state
review — layers panel clipping marker carries Accessible.ignored: !clips_to_below; visible: false alone left it in the tree as a zero-sized node named "Clipped to layer below" on layers that were not clipped (2026-09-03)
A4
Virtualized lists expose collection size/position and stable active descendant
layer list — the ListView is Accessible.List, each row Accessible.ListItem, and every row's description ends "N of M". Verified over AT-SPI (2026-09-03)
A5
Hidden/collapsed panels expose expandable representative, not ghost actionable subtrees
panel tests
A6
Critical status remains reachable when visual overflow collapses
status region test
A7
Extension UI contributions provide names/roles/states or are rejected
plugin harness
B. Names, Descriptions, Values
ID
Requirement
Evidence
B1
Name source order: visible label → descriptor → type+sanitized user name → generic fallback
name oracle
B2
Placeholder/hint is not the accessible name
form tests
B3
Tooltip is not sole name
icon button tests
B4
Ambiguous repeats include context (“Visibility, Layer 3”)
layer tree — eye buttons read "Hide Layer 1" / "Layer 2 — hidden with its group"; row descriptions carry kind, visibility, nesting, mask and clipping (2026-09-03)
B5
Descriptions carry consequence/disabled reason/units/shortcut only when useful
spot check
B6
Values expose range, units, text form, mixed/indeterminate, editability
slider/spin
B7
Private paths/hidden metadata not exposed merely for diagnostics
privacy review
B8
Continuous pointer coordinates do not rename canvas at high frequency
Custom concepts use closest standard role + attributes; no mislabeling for phrasing
review
C3
States include enabled, focused, selected, expanded, checked/pressed, busy, invalid, required, read-only, modal, multiselectable, indeterminate as applicable
state matrix
C4
Selected ≠ focused ≠ active edit target; all independently exposed
layer rows expose selected from the object-selection set and focused from the single active layer, separately. AT-SPI over a four-row stack: the active group reads focused, selectable, selected, the rest selectable only (2026-09-03)
C5
Busy/progress exposed for ops >250 ms
job UI
D. Focus
ID
Requirement
Evidence
D1
Exactly one keyboard focus locus per active window
focus audit
D2
Focus indicator visible at 200% scale and high-contrast theme
screenshot + AT
D3
Hover never moves focus
pointer test
D4
Dialog open focuses safe first required/invalid/content control
dialog suite
D5
Dialog close restores invoker or documented fallback
dialog suite
D6
Context menu close restores invoking object
context menu
D7
Deleted focused object falls back sibling→parent→tree policy
layer delete
D8
Async completion never steals focus
export complete
D9
Error summary focus moves only on explicit submit/activation
form validation
D10
Disabled/decorative nodes are not focus landings
tab order
E. Keyboard and Shortcuts
ID
Requirement
Evidence
E1
Every named action reachable via menu or command search
action coverage
E2
Region navigation among menus, tools, canvas, panels, status
Canvas not an unlabeled bitmap; baseline summary includes doc/view identity, size, color/profile, zoom/pan/rotation, tool, targets, selection emptiness/bounds, renderer status
canvas node
G2
Structured canvas explorer provides landmarks without pixel dump
explorer
G3
Pixel inspector on request/coarse interval; privacy respected
inspector
G4
Color values include space/profile/channel/alpha
sample
G5
Numeric alternatives for move/transform/guides/crop/selection/zoom/pan
commands
G6
No false claim that keyboard recreates arbitrary freehand gestures