feat(adapters): platform/release closure for the atomic operation (#296-C3) - #325
Conversation
… FFI (#296-C3, part 1) Compiler-крейт и labcolors-ffi включают protocol-фичу wcag22-explicit-selection и экспортируют зеркальное трио (evaluate/max-bytes/envelope-too-large) с теми же законами, что у feasibility. npm: evaluateWcag22ExplicitSelection с hostile- preflight, полная TS-поверхность, повекторный реплей 15 закоммиченных векторов через реальный собранный WASM, wasm32-паритет compiler-крейта. CI-гейт топологии перевёрнут: каждый protocol-потребитель обязан резолвить операцию; runtime остаётся protocol-free. Clean-consumer smoke прогоняет обе операции во всех четырёх точках. Документация приведена к C3-реальности. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
swift-foundation JSONEncoder не сохраняет порядок вставки ключей (Darwin и Linux одинаково); байт-точность serde-порядка пинуется сырым FFI-реплеем в тесте (a), а Codable-паритет сверяется нормализацией обеих сторон одним sortedKeys-сериализатором + обратным decode. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@coderabbitai review |
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 55 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
WalkthroughДобавлена атомарная операция ChangesПубликация explicit-selection V1
Estimated code review effort: 4 (Complex) | ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
✅ Action performedReview finished.
|
…-record Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
.github/workflows/ci.yml (1)
351-364: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winwasm32-специфичная проверка не покрывает protocol-фичу explicit-selection.
Для
compiler_tree(targetwasm32-unknown-unknown) проверяется толькоlabcolors-core feature "wcag22-explicit-feasibility", но неlabcolors-protocol feature "wcag22-explicit-selection"— хотя именно wasm32-таргет собирается в публикуемый npm-адаптер. Это симметрично со старой проверкой feasibility (строки 361-362), так что не регрессия, но раз PR фокусируется на публикации через WASM, стоит закрыть и этот путь явной проверкой protocol-фичи, чтобы поймать дрейф feature unification специфично для wasm32.♻️ Предложение усилить проверку
if 'labcolors-core feature "wcag22-explicit-feasibility"' not in compiler_tree: raise SystemExit("compiler role lacks the published explicit capability") + if 'labcolors-protocol feature "wcag22-explicit-selection"' not in compiler_tree: + raise SystemExit("compiler role lacks the published explicit-selection protocol feature (wasm32)")🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/ci.yml around lines 351 - 364, Extend the wasm32 compiler_tree validation around the existing wcag22 feature checks to require labcolors-protocol feature "wcag22-explicit-selection" as well. Preserve the current labcolors-wasm rejection and feasibility checks, and fail with a clear message when the protocol feature is absent.conformance/README.md (1)
14-22: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winРаздел «Версионирование» противоречит обновлённой строке таблицы (55) в этом же файле.
Здесь (строки 19-22) утверждается: «семейство воспроизводится только внутри conformance-крейта — ни один публикуемый adapter (compiler WASM, UniFFI/Swift) его не читает, их поверхность остаётся feasibility-only». Это прямо противоречит обновлённой строке таблицы (55): «воспроизводится нативно и обоими адаптерами», и противоречит CHANGELOG.md, где явно зафиксировано, что после
#296-C3«семейство воспроизводят нативный reference runner и оба публикуемых адаптера... побайтно». Раздел «Версионирование» нужно синхронизировать с фактическим состоянием после#296-C3, иначе документ содержит взаимоисключающие утверждения об одном и том же факте.📝 Предлагаемая правка
семейство `wcag22-explicit-selection`: канонические request/outcome JSON атомарной операции `wcag22-explicit-selection-v1`. Байты семи прежних - семейств сохранены; семейство воспроизводится только внутри - conformance-крейта — ни один публикуемый adapter (compiler WASM, - UniFFI/Swift) его не читает, их поверхность остаётся feasibility-only. + семейств сохранены; после `#296-C3` семейство воспроизводится нативным + reference runner и обоими публикуемыми адаптерами (compiler WASM/npm, + UniFFI/Swift) побайтно.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@conformance/README.md` around lines 14 - 22, Синхронизируй раздел «Версионирование» с фактическим состоянием после `#296-C3`: обнови утверждение о семействе wcag22-explicit-selection-v1, указав, что его побайтно воспроизводят нативный reference runner и оба публикуемых адаптера, включая compiler WASM и UniFFI/Swift. Удали устаревшее утверждение о conformance-only воспроизведении и feasibility-only поверхности адаптеров, сохранив остальные сведения о версии и прежних семействах.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/verify-package-release.mjs`:
- Around line 1259-1273: Выровняйте wcag22ExplicitSelectionSmokeFixture с
wcag22FeasibilitySmokeFixture: перед поиском canonical case вызовите
validateWcag22FeasibilityFamily или соответствующий валидатор explicit-selection
family. Сохраните текущий выбор caseId и ошибку при его отсутствии, чтобы
функция возвращала данные только после проверки целостности и схемы семейства.
---
Outside diff comments:
In @.github/workflows/ci.yml:
- Around line 351-364: Extend the wasm32 compiler_tree validation around the
existing wcag22 feature checks to require labcolors-protocol feature
"wcag22-explicit-selection" as well. Preserve the current labcolors-wasm
rejection and feasibility checks, and fail with a clear message when the
protocol feature is absent.
In `@conformance/README.md`:
- Around line 14-22: Синхронизируй раздел «Версионирование» с фактическим
состоянием после `#296-C3`: обнови утверждение о семействе
wcag22-explicit-selection-v1, указав, что его побайтно воспроизводят нативный
reference runner и оба публикуемых адаптера, включая compiler WASM и
UniFFI/Swift. Удали устаревшее утверждение о conformance-only воспроизведении и
feasibility-only поверхности адаптеров, сохранив остальные сведения о версии и
прежних семействах.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 37164871-c53a-435d-88dd-c6508798be56
📒 Files selected for processing (22)
.github/workflows/ci.ymlCHANGELOG.mdbindings/swift/.gitignorebindings/swift/Package.swiftbindings/swift/Sources/LabColors/Wcag22ExplicitSelectionProtocol.swiftbindings/swift/Sources/LabColors/Wcag22FeasibilityProtocol.swiftbindings/swift/Tests/LabColorsConformanceTests/ConformanceTests.swiftconformance/README.mdcrates/labcolors-compiler/Cargo.tomlcrates/labcolors-compiler/src/lib.rscrates/labcolors-compiler/tests/wasm_parity.rscrates/labcolors-ffi/Cargo.tomlcrates/labcolors-ffi/src/lib.rsdocs/verification-map.mdpackages/colors/README.mdpackages/colors/compiler.d.tspackages/colors/compiler.jspackages/colors/test/compiler-boundary.test.mjspackages/colors/test/release-contract.test.mjspackages/colors/test/wcag22-explicit-selection.test.mjspackages/colors/test/wcag22-feasibility.test.mjsscripts/verify-package-release.mjs
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/colors/bench/wcag22-feasibility-boundary.bench.mjs`:
- Around line 43-47: Resolve the missing V5 golden artifact in the benchmark
flow: either add the expected wcag22-feasibility-wasm-boundary-v5.json artifact
and update the related boundary test to consistently use V5, or revert
defaultMeasurementPath and MEASUREMENT_ARTIFACT_ID to the existing V4 artifact
references so --verify no longer targets a missing file.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 658f6c15-1942-48f2-b2e2-3357a4b24fa9
📒 Files selected for processing (1)
packages/colors/bench/wcag22-feasibility-boundary.bench.mjs
…aw, budget V6 Hostile-ревью: (1) TS-контракт source:feasibility недотипизирован — закоммиченный вектор error-feasibility-priority-over-policy был непредставим; добавлен Wcag22ExplicitFeasibilityCoreErrorV1 с explicit invalid-кодами, представимость пинуется в type-smoke упакованного потребителя. (2) Swift-валидатор не проверял канонический порядок relations/adjacent (candidates проверялись) — добавлен validateCanonicalRelations в оба терминальных пути. Архитектурное ревью: D2 (type-smoke без новых типов) закрыт, D3/D4 стейл-формулировки сняты. Size-бюджет V6: runtime-измерение байт-идентично C1 (454385/8cd65f00), compiler C3 = 229658/34e2a561 (canonical Linux, learn-прогон 29447057635), zero headroom, цепочка V1..V5 immutable. TS-правка не меняет байты WASM (проверено локальной пересборкой: sha идентичен). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ability Волна V6 была случайно снята cleanup-ом ревью-агента до попадания в 4dcf558 (сообщение того коммита ошибочно заявляло V6). Повторная выкладка с дважды подтверждёнными каноническими значениями (learn-прогоны 29447057635 и 29450518198, байт-в-байт): runtime 454385/8cd65f00 (= C1), compiler 229658/34e2a561 (C3-capability), цепочка V1..V5 immutable, файл V6 детерминированно регенерирован (sha 761af605 подтверждён). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
V5 (97cb5478db09) записан на каноническом linux-x64 throwaway-веткой и закоммичен verify-only: биндит admission V5, pack 129158d2, бюджет V6 и новый exact compiler-WASM 229658/34e2a561 (published capability). Проекция V5 == V4; история V1–V4 нетронута. ci.yml/npm-пины → V5, имена шагов → #296-C3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…xture CodeRabbit: паритет с feasibility-фикстурой — форма каждого вектора, уникальные caseId, парсинг вложенного JSON и selected-инвариант канонического кейса. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/verify-package-release.mjs`:
- Around line 1271-1289: Validate that each vector in the family is a non-null
object before calling Object.keys or accessing caseId, and route invalid values
including null through the existing fail(...) schema-drift handling. Add a
negative test containing null in the family to verify strict decoding remains
controlled.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 80dd1ac7-9228-4e7b-bcb5-0ffba5c42477
📒 Files selected for processing (8)
.github/workflows/ci.ymlpackages/colors/bench/wasm-size-budget-v6.jsonpackages/colors/bench/wcag22-feasibility-boundary.bench.mjspackages/colors/bench/wcag22-feasibility-wasm-boundary-v5.jsonpackages/colors/test/release-contract.test.mjspackages/colors/test/wcag22-feasibility-boundary.test.mjsscripts/check-wasm-size-budget.mjsscripts/verify-package-release.mjs
…xture CodeRabbit: Object.keys(null) кидал бы необработанный TypeError вместо контролируемого fail() на strict-пути верификатора. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Scope
#296-C3: проекция замороженных байтов атомарной операции
wcag22-explicit-selection-v1параллельно через compiler-WASM/npm и UniFFI/Swift; один pack/release manifest; clean-consumer smoke обеих операций. Завершает #296.Adapters
evaluateWcag22ExplicitSelection+wcag22ExplicitSelectionMaxBytesв@labpics/colors/compilerс тем же hostile-preflight (тип/oversize/detached до избегаемой ABI-копии); полная TS-поверхность операции; повекторный реплей всех 15 закоммиченных векторов через реальный собранный WASM; wasm32-паритет compiler-крейта (family + envelope ceiling).Топология и release
wcag22-explicit-selection; runtime-роль остаётся protocol-free (byte-identical WASM).Closes #296 (после зелёного exact-head и merge).
🤖 Generated with Claude Code
Summary by CodeRabbit
...MaxBytes()иevaluate..., включая корректный отказ при oversize.wcag22-explicit-selection(векторы).