Co oznacza to kryterium
Powtarzane mechanizmy nawigacji na wielu stronach jednego zbioru zachowują kolejność względem siebie, chyba że zmianę zainicjuje użytkownik. Można dodać podmenu albo usunąć niepotrzebną pozycję, jeśli wspólne elementy nie zamieniają się miejscami. Samo otwarcie kolejnej strony nie jest prośbą o przestawienie menu.
Dobór potrzeb wynika z opisanych barier:
| Potrzeba | Bariera w scenariuszu |
|---|---|
cognitive — Pamięć i koncentracja |
Zapamiętana pozycja Start prowadzi w nowym porządku do innego celu; trzeba ponownie szukać. |
low-vision — Słabowidzenie |
Przy oglądaniu fragmentu ekranu nagle przesunięta pozycja utrudnia lokalizację. |
blindness — Niewidzenie |
Nawigacja odczytywana sekwencyjnie traci przewidywalny porządek. |
Nie przypisano automatycznie słuchu, rozróżniania barw ani motoryki. Oględziny AI i drzewo nie są badaniem doświadczenia tych grup.
Przykłady błędów i poprawek
Pracownia ma rzeczywisty zbiór WWW: odrębne odpowiedzi HTTP i treści dla Startu, Zamówień, Kontaktu oraz Szczegółów. Syntetyczne P-104 oznacza dwa kubki do odbioru; to własna demonstracja, nie znalezisko w aplikacji klienta. Good i bad zachowują nazwy, cele i treść. Różni je automatyczne sortowanie menu według aktywnej strony.
Problem: bad zaczyna Start → Zamówienia → Kontakt, lecz po zwykłym wejściu w Zamówienia ustawia Zamówienia → Start → Kontakt. Para Start/Zamówienia odwraca relację w DOM i prezentacji. Skutek: zapamiętana pozycja prowadzi do innego celu, użytkownik ponownie szuka nawigacji. Poprawka: wspólny model zachowuje Start → Zamówienia → Kontakt na każdej stronie, bez sortowania według aktywnego celu.
| Wariant | Start | Zamówienia | Ocena badanej kolejności WWW |
|---|---|---|---|
| good | Start → Zamówienia → Kontakt | Start → Zamówienia → Kontakt | Wspólne pozycje zachowują porządek. |
| bad | Start → Zamówienia → Kontakt | Zamówienia → Start → Kontakt | Inwersja bez żądania użytkownika odtwarza błąd. |
| control | Start → Zamówienia → Kontakt | Start → Zamówienia → Szczegóły P-104 → Kontakt | Dodatkowy link nie odwraca wspólnego porządku. |

2026-10-04, Codex IAB/macOS, surowy JPEG. Po zwykłym przejściu z Startu wspólny porządek jest zachowany. DOM, URI, geometria i treści potwierdzają kolejność oraz cel; sam kadr nie ustala zbioru.

Bad po wejściu w Zamówienia zmienia relację Start/Zamówienia. To własne odtworzenie warunku F66 w rzeczywistym zbiorze WWW, bez preferencji przestawienia menu przez użytkownika.
Dodatkowy link bez zamiany wspólnych pozycji
Control dodaje „Szczegóły P-104” między Zamówieniami i Kontaktem. Kliknięcie otwiera „P-104: dwa kubki. Zabierz numer zamówienia.” Kontakt nadal prowadzi do adresu i syntetycznego e-maila. Na Starcie dodatkowa pozycja znika. Przesunięcie Kontaktu i treści w dół nie odwraca wspólnych par; porównanie bezwzględnych indeksów lub ramek dawałoby fałszywy alarm.

Control zachowuje Start → Zamówienia → Kontakt. Jest kontrolą wstawienia pozycji, a nie wykonaniem wyjątku przestawienia przez użytkownika.

Kliknięcie dodatkowego linku otworzyło właściwą treść. Kadr i zapis przejścia potwierdzają działający cel; nie zastępują pełnej oceny wszystkich stron zbioru.
Mobilna analogia dobrej praktyki
Flutter/Cupertino pokazuje tę samą różnicę porządku wewnątrz jednego programu. Good zachowuje kolejność, bad ją przestawia. Nie jest to normatywny FAIL WCAG2ICT 3.2.3: widoki jednej aplikacji nie tworzą przez to zbioru programów. XCTest potwierdza zwykłe tapnięcia i odczyt natywnych kontrolek; nie kwalifikuje zbioru ani nie potwierdza VoiceOver.

iPhone 17 Simulator / iOS 26.5, 2026-10-04. Stały porządek wewnętrznego menu pokazuje dobrą praktykę jednego programu; nie potwierdza spełnienia warunku zbioru WCAG2ICT.

Ta sama mobilna analogia przestawia dwie pozycje. Natywne etykiety i ramki potwierdzają różnicę; nie raportujemy jej jako normatywnego FAIL 3.2.3 dla zbioru programów.
Kiedy obowiązuje i gdzie są wyjątki
WWW wymaga rzeczywistych stron jednego zbioru: wspólnego celu i autora/grupy/organizacji. W tej demonstracji są odrębne odpowiedzi HTTP dla /home.html, /orders.html, /contact.html i /details.html, różne URI oraz treści wspólnej Pracowni. Panele przy jednym URI same nie dowodzą zbioru. Różne wersje językowe mogą tworzyć osobne zbiory; nie utożsamiaj dowolnych stron jednej domeny ze wspólnym zbiorem.
„Względna” oznacza porządek wspólnych elementów, bez wymogu identycznych współrzędnych i liczby pozycji. Oceniaj prezentację wizualną oraz porządek źródłowy. Układ responsywny, dłuższy nagłówek lub dodane podmenu mogą przesunąć elementy bez naruszenia. Podmiana kolejności wyłącznie CSS nie naprawia niespójnego źródła.
Wyjątek obejmuje rzeczywistą zmianę zainicjowaną przez użytkownika, np. preferencję kolejności, świadome przestawienie lub adaptacyjny user agent. Kliknięcie Zamówienia prosi o stronę zamówień, nie o przestawienie menu. W kontrolnym wariancie nie korzystamy z tego wyjątku: dodatkowy link zachowuje porządek wspólnych pozycji. Ustawienia reorder/adaptive UA są opisane, lecz NOT-RUN.
G61 jest techniką wystarczającą, pomocniczą: porównuje powtarzane komponenty względem siebie oraz linki/odwołania wewnątrz nawigacji; dopuszcza wstawienia i usunięcia. Opisane stałe komponenty WWW to marka → nawigacja → treść → narzędzia; callbacki wariantu/resetu są narzędziami researchu poza menu. F66 opisuje domyślną zmianę porządku linków na co najmniej dwóch stronach, z uwzględnieniem podnawigacji. Materiały pomocnicze nie zastępują normy ani nie stanowią danych o częstości usterek.
PDF14 (nagłówki/stopki) i PDF17 (numeracja stron) są w Understanding wskazówkami dodatkowymi. Mogą pomagać orientacji, lecz nie dowodzą kolejności linków między dokumentami; tych technik nie wykonano. W katalogu ACT sprawdzonym 2026-10-04 brak reguły dla 3.2.3. Formalny silnik ACT: NOT-RUN; własny checker nie staje się ACT.
Platformy
Ocena AI z 2026-10-04. Stan zastosowania, podstawa i test to osobne informacje; tabela nie rozstrzyga obowiązków prawnych. Nie oceniano EN 301 549 i nie przeniesiono jej wyłączeń do WCAG2ICT.
| ID / środowisko | Podstawa / kryterium | Stan, warunek i adaptacja | Zakres wykonania |
|---|---|---|---|
web — WWW, także przeglądarka telefonu |
WCAG 2.2, 3.2.3 | Dotyczy warunkowo: powtórzenie mechanizmu na wielu stronach jednego zbioru; bez adaptacji. | Rzeczywisty zbiór WWW, desktopowa przeglądarka Codex/macOS. Mobilne WWW NOT-RUN. |
mobile — Aplikacje mobilne |
WCAG2ICT 2.2, Group Note 2025-12-11, 3.2.3 | Dotyczy warunkowo, z adaptacją do zbioru programów. Widoki naszego pojedynczego programu nie spełniają tego warunku; przykład pokazuje dobrą praktykę. | Flutter/Cupertino na iOS Simulator; zbiór programów NOT-RUN. |
desktop — Aplikacje desktopowe |
Ta sama WCAG2ICT, 3.2.3 | Dotyczy warunkowo, analogicznie do zbioru programów; nie każdy ekran jest osobnym programem. | NOT-RUN. |
document — Dokumenty cyfrowe |
Ta sama WCAG2ICT, 3.2.3 | Dotyczy warunkowo, z adaptacją do zbioru dokumentów. | Dokumenty i odbiornik NOT-RUN. |
other — Oprogramowanie kiosku z menu |
WCAG 2.2 dla WWW; ta sama WCAG2ICT dla części natywnej, 3.2.3 | Dotyczy warunkowo: odpowiednio zbiór stron lub programów. Sprzęt i closed functionality wymagają osobnej oceny. | NOT-RUN; nie klasyfikowano wszystkich urządzeń. |
WCAG2ICT jest wskazówką interpretacyjną. Zbiór programów wymaga wspólnego celu/autora, wspólnej dystrybucji, niezależnego uruchamiania/używania i wzajemnego przechodzenia między wszystkimi członkami stałą metodą. Takie zbiory są bardzo rzadkie. Zbiór dokumentów ma wspólny cel/autora, wspólną publikację i wzajemne odniesienia; samo późniejsze zebranie plików nie wystarcza. Powtarzanie wewnątrz pojedynczego programu lub dokumentu pozostaje dobrą praktyką, nie normatywnym FAIL 3.2.3 za brak zbioru.
Rozwiązania w technologiach
Wspólny uporządkowany model i jeden komponent nawigacji zapobiegają przypadkowemu sortowaniu według aktywnej strony. W natywnych fragmentach poniżej chodzi o dobrą praktykę wewnątrz aplikacji; w rzeczywistym zbiorze programów trzeba dodatkowo zapewnić działające przejścia między programami. Sam fragment wewnętrznego menu nie tworzy takiego zbioru. Callback open musi otwierać właściwą treść, bez zmiany listy.
Flutter / Dart
import 'package:flutter/cupertino.dart';
Widget workshopNavigation(void Function(String) open) {
const items = [('home', 'Start'), ('orders', 'Zamówienia'),
('contact', 'Kontakt')];
return Column(children: [
for (final item in items)
CupertinoButton(onPressed: () => open(item.$1), child: Text(item.$2)),
]);
}Osadź we wspólnym scaffoldzie; nie sortuj items według bieżącego widoku. Działająca implementacja w kodzie demo obejmuje celowy bad, dodatkowy control i reset. Fragment edukacyjny nie był osobno kompilowany; pełna demonstracja ma analizę/build i rzeczywisty przebieg. SDK Flutter 3.44.9 / Dart 3.12.2. Przegląd oficjalnych Column/CupertinoButton i lokalnego SDK: 2026-10-04.
iOS / SwiftUI
import SwiftUI
struct WorkshopNavigation: View {
let open: (String) -> Void
private let items = ["home", "orders", "contact"]
private let labels = ["home": "Start", "orders": "Zamówienia", "contact": "Kontakt"]
var body: some View {
VStack {
ForEach(items, id: \.self) { id in
Button(labels[id]!) { open(id) }
}
}
}
}Jeden komponent ma stały model i stabilne ID. Oficjalne ForEach, VStack i Button sprawdzono 2026-10-04, także przez wersję Markdown po braku treści HTML. Kompilacja i runtime fragmentu SwiftUI NOT-RUN; XCTest driver jest Swiftem, ale nie uruchamia tego widoku. Nie przypisano nieużytej wersji SwiftUI.
Android / Jetpack Compose
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
@Composable
fun WorkshopNavigation(open: (String) -> Unit) {
val items = listOf("home" to "Start", "orders" to "Zamówienia", "contact" to "Kontakt")
Column {
items.forEach { (id, label) ->
TextButton(onClick = { open(id) }) { Text(label) }
}
}
}Column zachowuje pionową listę, a onClick otwiera właściwy cel. Wybrany cel nie zmienia kolejności. Oficjalna dokumentacja layoutów i TextButton sprawdzona 2026-10-04. Kompilacja i runtime Compose/Kotlin, Android NOT-RUN; bez nowej aplikacji i zależności.
React Native
import { Pressable, Text, View } from 'react-native';
const items = [
{ id: 'home', label: 'Start' },
{ id: 'orders', label: 'Zamówienia' },
{ id: 'contact', label: 'Kontakt' },
];
export function WorkshopNavigation({ open }: { open: (id: string) => void }) {
return (
<View>
{items.map((item) => (
<Pressable
key={item.id}
accessibilityRole="button"
onPress={() => open(item.id)}
style={{ padding: 16 }}
>
<Text>{item.label}</Text>
</Pressable>
))}
</View>
);
}Stała lista wyznacza kolejność; stabilny key identyfikuje element, lecz sam nie naprawia sortowania. Przegląd oficjalnego Pressable i renderowania list React: 2026-10-04. Typecheck, build i runtime RN/TS NOT-RUN, bez deklaracji użytej wersji.
HTML / CSS
<nav aria-label="Pracownia">
<ul>
<li><a href="home.html">Start</a></li>
<li><a href="orders.html">Zamówienia</a></li>
<li><a href="contact.html">Kontakt</a></li>
</ul>
</nav>
<style>
nav ul {
display: flex;
flex-direction: column;
gap: 8px;
}
</style>Powtarzaj ten wspólny fragment na właściwych stronach zbioru. Bieżący link może mieć aria-current="page"; nie przestawiaj go za pomocą DOM, order lub odwrócenia flex. Specyfikację nav i cel linków sprawdzono 2026-10-04. Fragment uproszczony nie był osobno uruchamiany; rzeczywisty server renderuje pełny odpowiednik i trzy warianty. Nie ma buildu frameworka WWW; wykonano normalne HTTP i przeglądarkę.
Jak sprawdzić
- Wyznacz zbiór i powtarzane mechanizmy; zanotuj autora, cel i URI, a poza WWW sprawdź właściwą definicję zbioru. Brak tego kontekstu oznacza niewystarczające dane.
- Otwórz Start, zapisz aktualną prezentację, kolejność źródła/odczytu i cele. Zwykłym linkiem przejdź do Zamówień, potem Kontaktu i wróć. Sprawdź faktyczne treści, nie tylko nazwę aktywnej pozycji.
- Dopasuj wspólne elementy według celu i znaczenia. Porównaj pary „A przed B” w źródle oraz prezentacji. Uwzględnij dodatkowe/usunięte podmenu i preferencje użytkownika; nie porównuj samych absolutnych indeksów lub pikseli.
- W demonstracji użyj Zmień wariant: good → bad → control → good. Control: otwórz szczegóły. Reset wraca do początkowego good i Start. Nieznana trasa/variant daje good.
- Oczekiwane dla WWW: good i control zachowują wspólną kolejność; bad ujawnia odwrócenie Start/Zamówienia po zwykłym wejściu. Dla iOS oczekiwany jest taki sam pomiar analogii, bez normatywnej kwalifikacji FAIL.
Obserwacje w surowych odczytach iOS i WWW zawierają faktyczne etykiety, kolejność, ramki i treści. XCTest odczytuje publiczny typ elementu, label, hittability i frame; nie eksportuje modelu Dart. CUA odczytuje DOM/AX, URI i geometrie; pasywny JS rejestruje isTrusted, nie ustawia nawigacji. Oczekiwania i nazwy wariantów nie są wejściem zaślepionego walidatora.
Wyniki źródłowych prób — 2026-10-04
| Sprawdzenie | Rzeczywisty wynik 2026-10-04 |
|---|---|
| Analiza Flutter | PASS, brak problemów. |
| Istniejąca host suite | PASS, 67 testów z wyłączeniem Androida. To regresja istniejących demonstracji, nie test iOS 3.2.3. |
| Build aplikacji iOS | PASS, ukończony przed instalacją. |
| iOS v1 | FAIL, 5,454 s XCTest / 17,750 s orkiestracja. UInt rawValue odczytywano jako Int; 1 STATE/TREE/INPUT/PNG przed asercją. |
| iOS v2 | FAIL, crash po pierwszym stanie: CGFloat rzutowany na Double; orkiestracja 22,846 s. 1 STATE/TREE/INPUT/PNG. Wtórny pusty suite „0 tests passed” nie oznacza udanego badanego testu. |
| iOS v3 | PASS, 42,079 s XCTest / 48,968 s orkiestracja; 15 STATE/TREE/INPUT, 8 PNG. Pełne działające cele, fallback, cykl i reset. |
| WWW | 15 DOM/AX, 14 działań po otwarciu (13 kliknięć, 1 Enter), 15 zdarzeń trusted (Enter + wynikowy click to dwa zdarzenia jednego działania), 8 surowych JPEG. Faktyczne treści i wspólny porządek good/control oraz odwrócenie bad. |
| Kontrola zapisanej demonstracji | PASS kontroli zapisanych danych; checker zna demonstrację i nie jest niezależnym benchmarkiem. |
| Oględziny | AI obejrzało wszystkie końcowe oraz oba historyczne PNG i wszystkie JPEG; hashe i status w metadanych. |
Flutter 3.44.9 / Dart 3.12.2, Xcode 27.0 / SDK 27.0, iPhone 17 Simulator / runtime iOS 26.5. Ramka aplikacji 402 × 874 pt, PNG 1206 × 2622 px. Nie zmieniano ustawień OS; jasny wygląd nie dowodzi całego zestawu ustawień dostępności. WWW: 1280 × 720 CSS px / DPR 1 i JPEG 1280 × 720; wersja silnika nieustalona.
Każda próba iOS miała odrębny driver, bundle ID i marker, z manifestami źródeł, buildów oraz instalacji. Produkt pozostawał ten sam. V1 FAIL wynikał z odczytu UInt rawValue jako Int; V2 FAIL z rzutowania CGFloat na Double. Poprawki dotyczyły wyłącznie drivera; V3 PASS obejmował działające cele, fallback, cykl i reset. Wtórny pusty suite „0 tests passed” po crashu V2 nie zalicza testu.
Pierwszy checker również FAIL: porównywał UUID ścieżki kontenera drivera. Xcode ponownie instalował driver pod inną ścieżką przy identycznych pełnych manifestach plików. Końcowy checker porównuje treść i hashe; obie ścieżki pozostały w dowodach, bez nowej sesji UI po uzasadnionym PASS.
Weryfikacja i ograniczenia
Deterministyczne porównanie par wymaga wcześniej ustalonego zbioru, odpowiadających celów i kontekstu zmiany. Checker opisanej demonstracji zna trasy i oczekiwania; sprawdza zachowane odczyty oraz integralność, nie uruchamia AT ani niezależnego walidatora. Obserwacje zapisano przed asercjami. Pasywny JS rejestrował isTrusted, nie ustawiał nawigacji; XCTest odczytywał natywny typ, etykietę, hittability i frame, bez eksportowania modelu Dart.
Drzewo przybliża kolejność odczytu, lecz nie potwierdza wypowiedzi ani przechodzenia VoiceOver. Obraz nie dowodzi DOM, działania celu, preferencji użytkownika lub granic zbioru. Różne nazwy albo URI mogą oznaczać ten sam cel, a te same nazwy — inne cele. Dopasowanie wyłącznie po indeksie jest niewystarczające. CSS, responsywność, ukryte menu, dodatkowe albo usunięte pozycje oraz różne role użytkownika wymagają kontekstu. Brak danych lub niewykrycie inwersji nie daje PASS kryterium.
Przegląd człowieka oraz zaślepiony walidator pozostają NOT-RUN. Nie wykonano AT, fizycznego iPhone’a, Androida, innych frameworków i desktop native, zbioru programów, dokumentów, kiosku ani stron webowych w telefonie. Powiększenie, ciemny motyw, duży tekst, orientacja, preferencje reorder i adaptacyjny user agent również NOT-RUN. Brak tych prób nie wyłącza platform. Nie przygotowano filmu ani audio; sekwencja trwałych stanów nie jest pomiarem animacji lub czasu.
Jak sprawdza Clearship
Clearship zbiera dowody wspólnej nawigacji w stanach odczytanych przez przejście P0: nazwy pozycji, ich kolejność i stany po dotknięciu. Deterministyczna metoda set-evidence-1 wskazuje człowiekowi pozycje przestawione i występujące tylko na części stron. Wstawienie dodatkowej pozycji nie musi odwracać wspólnej kolejności.
Wynik zawsze wymaga człowieka. Kandydat na zbiór powstaje ze stanów jednego tytułu; metoda nie kwalifikuje normatywnego zbioru stron lub programów, nie wychodzi poza własną aplikację i nie potwierdza funkcji każdego celu. Ekrany jednej aplikacji nie stają się zbiorem programów tylko dlatego, że mają wspólne menu. Kwalifikację zbioru, preferencje użytkownika i ocenę znaczenia rozstrzyga człowiek.
Tryb zbierania dowodów z 8 października 2026 r. na Androidzie i z 9 października na iOS wskazał po 7/8 przypadków: Flutter 4/4, natywna aplikacja 3/4. To liczby wskazań do oceny, bez progu skuteczności i bez pomiaru kontrolnego. Natywna bieżąca pozycja może wypaść z porównania, gdy P0 dotknęło jej tylko na własnej stronie bez zmiany stanu. Bez obserwacji po dotknięciu w tym samym widoku pakiet może zawierać jedną stronę; brak kandydata nie potwierdza zgodności. Rzeczywiste AT i treść WWW pozostają poza potwierdzonym wykonaniem tej metody.