Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 20 additions & 30 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -306,30 +306,20 @@ jobs:
raise SystemExit(
f"{consumer} did not resolve protocol-owned wcag22-feasibility"
)
# #296-C2: атомарная explicit-операция protocol существует за
# non-default фичей. До #296-C3 её резолвит ТОЛЬКО нативный
# conformance-генератор; публикуемые adapters (compiler, ffi)
# обязаны оставаться feasibility-only.
if consumer == "labcolors-conformance":
if (
'labcolors-protocol feature "wcag22-explicit-selection"'
not in feature_tree
):
raise SystemExit(
"labcolors-conformance must resolve the native-only "
"explicit-selection protocol feature"
)
if (
'labcolors-core feature "wcag22-explicit-feasibility"'
not in feature_tree
):
raise SystemExit(
"labcolors-conformance must resolve the explicit-domain "
"capability for pack generation"
)
elif 'labcolors-core feature "wcag22-explicit-feasibility"' in feature_tree:
# #296-C3: атомарная explicit-операция опубликована. Каждый
# protocol-потребитель (compiler, ffi, conformance) обязан
# резолвить её через одну non-default protocol-фичу; прямых
# core-фич у потребителей по-прежнему нет.
if (
'labcolors-protocol feature "wcag22-explicit-selection"'
not in feature_tree
):
raise SystemExit(
f"{consumer} resolved the pre-C3 native-only explicit capability"
f"{consumer} must resolve the explicit-selection protocol feature"
)
if 'labcolors-core feature "wcag22-explicit-feasibility"' not in feature_tree:
raise SystemExit(
f"{consumer} did not resolve the explicit-domain capability"
)

runtime_dependencies = packages["labcolors-wasm"]["dependencies"]
Expand Down Expand Up @@ -370,8 +360,8 @@ jobs:
raise SystemExit("compiler role resolved the theme/runtime engine")
if 'labcolors-core feature "wcag22-feasibility"' not in compiler_tree:
raise SystemExit("compiler role lacks protocol-owned wcag22-feasibility")
if 'labcolors-core feature "wcag22-explicit-feasibility"' in compiler_tree:
raise SystemExit("compiler role resolved the Core-only explicit capability")
if 'labcolors-core feature "wcag22-explicit-feasibility"' not in compiler_tree:
raise SystemExit("compiler role lacks the published explicit capability")

print("core capability projection: PASS")
PY
Expand Down Expand Up @@ -639,11 +629,11 @@ jobs:
node-version: ${{ env.NODE_TOOLCHAIN }}
cache: npm
cache-dependency-path: packages/colors/package-lock.json
- name: verify committed #296-C2 canonical whole-call compiler evidence
- name: verify committed #296-C3 canonical whole-call compiler evidence
working-directory: packages/colors
run: >-
node bench/wcag22-feasibility-boundary.bench.mjs
--verify bench/wcag22-feasibility-wasm-boundary-v4.json
--verify bench/wcag22-feasibility-wasm-boundary-v5.json
- name: independently fingerprint both execution-role WASM artifacts
run: |
for artifact in \
Expand All @@ -654,13 +644,13 @@ jobs:
sha256="$(sha256sum "$artifact" | cut -d ' ' -f1)"
echo "canonical candidate artifact=${artifact} raw=${bytes}B sha256=${sha256}"
done
sha256sum packages/colors/bench/wcag22-feasibility-wasm-boundary-v4.json
- name: upload exact #296-C2 whole-call evidence
sha256sum packages/colors/bench/wcag22-feasibility-wasm-boundary-v5.json
- name: upload exact #296-C3 whole-call evidence
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: wcag22-feasibility-wasm-boundary-${{ github.sha }}-attempt-${{ github.run_attempt }}
path: |
packages/colors/bench/wcag22-feasibility-wasm-boundary-v4.json
packages/colors/bench/wcag22-feasibility-wasm-boundary-v5.json
packages/colors/pkg/labcolors_bg.wasm
packages/colors/compiler/labcolors_compiler_bg.wasm
if-no-files-found: error
Expand Down
18 changes: 11 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ Migration-note: [exact alpha / typed Glow](docs/migrations/exact-alpha-glow.md),

### Added

- #296-C3 публикует атомарную операцию в обоих адаптерах: compiler-WASM/npm
(`evaluateWcag22ExplicitSelection`, `wcag22ExplicitSelectionMaxBytes` в
`@labpics/colors/compiler` с тем же hostile-preflight, что у feasibility) и
UniFFI/Swift (`evaluate_wcag22_explicit_selection_raw_v1` + типизированная
Codable-проекция исхода). Оба адаптера повекторно реплеят conformance-family;
clean-consumer smoke упакованного пакета прогоняет обе операции. Runtime-роль
по-прежнему не резолвит protocol; топология фич проверяется CI-гейтом.
- Атомарная операция `wcag22-explicit-selection-v1` (#296-C2): Core-функция
`evaluate_and_select` исполняет `feasibility → полная валидация политики →
selection → финальная перепроверка` за один вызов. Ошибка A-фазы приоритетна;
Expand All @@ -33,17 +40,14 @@ Migration-note: [exact alpha / typed Glow](docs/migrations/exact-alpha-glow.md),
кодирует реальный запрос ровно в это число байтов,
строгий декодер с typed-ошибками для неизвестных schema/domain/profile/policy
kind, фазовая атрибуция дефектов конструирования и исходы без `Deserialize`.
Ни один публикуемый adapter (compiler WASM, UniFFI/Swift, npm) не рекламирует
capability до #296-C3.
До #296-C3 capability не рекламировалась; C3 публикует её в обеих ролях.
- Conformance pack 6.0.0 добавляет ровно одно семейство
`wcag22-explicit-selection.json` (15 векторов: четыре законных терминала,
opposite-order пара с байт-идентичным feasibility-поддеревом, policy-ошибки
после каждого успешного A-терминала, приоритет A-ошибки, unsupported policy
kind, unicode-идентичности). Повекторный replay семейства владеет нативный
reference runner conformance-крейта; wasm32-паритет сверяет только счётчики
манифеста, а ни один публикуемый adapter семейство не читает и не
рекламирует. Прежние семь семейств byte-identical, npm/Swift реплеят
прежние семь.
kind, unicode-идентичности). Прежние семь семейств byte-identical. После
#296-C3 семейство воспроизводят нативный reference runner и оба публикуемых
адаптера (compiler WASM/npm и UniFFI/Swift) — побайтно.
- Versioned `evaluate_wcag22_srgb8` / `evaluate_wcag22_hex` и эквивалентные
WASM/TypeScript/UniFFI границы. Criterion всегда объявляет клиент; verdict
возвращает точное terminal evidence без epsilon или округлённого ratio.
Expand Down
5 changes: 3 additions & 2 deletions bindings/swift/.gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# Сгенерированные UniFFI-биндинги — производный артефакт, генерируется в CI
# (uniffi-bindgen) ПЕРЕД `swift test`. Единственный отслеживаемый Swift-source
# ниже — hand-written protocol consumer.
# (uniffi-bindgen) ПЕРЕД `swift test`. Отслеживаемые Swift-sources ниже —
# hand-written protocol consumers.
Sources/LabColors/*.swift
!Sources/LabColors/Wcag22FeasibilityProtocol.swift
!Sources/LabColors/Wcag22ExplicitSelectionProtocol.swift
Sources/labcolorsFFI/*.h
Sources/labcolorsFFI/module.modulemap
Sources/labcolorsFFI/*.modulemap
Expand Down
7 changes: 4 additions & 3 deletions bindings/swift/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
// Swift-контейнере на Linux x86_64; ручной macOS/arm64 path не является
// достигнутой аттестацией. Файлы в `Sources/LabColors` и
// `Sources/labcolorsFFI` генерирует uniffi-bindgen ПЕРЕД `swift test` (см.
// .github/workflows/native-conformance.yml). Единственный hand-written source
// в `Sources/LabColors` — exhaustive protocol wrapper
// `Wcag22FeasibilityProtocol.swift`; сгенерированное не коммитится.
// .github/workflows/native-conformance.yml). Hand-written sources в
// `Sources/LabColors` — exhaustive protocol wrappers
// `Wcag22FeasibilityProtocol.swift` и `Wcag22ExplicitSelectionProtocol.swift`;
// сгенерированное не коммитится.
import PackageDescription

let package = Package(
Expand Down
Loading
Loading