Skip to content

feat(core): мигрировать PairLabel на приватный appearance-граф (#307) - #310

Merged
lemone112 merged 1 commit into
mainfrom
agent/appearance-graph-shadow
Jul 12, 2026
Merged

feat(core): мигрировать PairLabel на приватный appearance-граф (#307)#310
lemone112 merged 1 commit into
mainfrom
agent/appearance-graph-shadow

Conversation

@lemone112

@lemone112 lemone112 commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator

Closes #307. Owner: #298.

Root

Production resolve_pair_label вручную собирал derived-поверхность; физическая топология не была объявлена.

Что сделано

  • Приватный appearance-граф (appearance.rs, pub(crate)): атомарный compile (валидация → канонизация по typed ID → детерминированный topo), fail-closed evaluate (bindings, NaN/∞/α-домен через SSOT-валидатор), единственный композитор alpha::composite_over_srgb8, replayable-сертификат (α через to_bits), trace-счётчики. Клиентских имён в графе нет.
  • Production resolve_pair_label — compatibility-адаптер над одним статическим компонентом (OnceLock); foreground решается из возвращённого occurrence-источника (resolve_hued_anchor_from_encoded_source).
  • Старый путь заморожен как test-only differential oracle.

RED → GREEN

Структурный RED: E0583 file not found for module appearance (intentional, воспроизведён до реализации). Все тесты RED-файла GREEN без ослабления.

Proof ledger

  • Differential-матрица: 5 семей × 4 режима × 6 фонов (each с подписанным происхождением) + property (произвольные source/context/α/fraction/floor/mode) — production == frozen oracle по всем полям Resolved, включая замороженные публичные тексты отказов невалидной α.
  • Fail-closed юниты на каждый класс GraphError; replay-сертификат property; identity-edge witness; PairFill ≠ поверхность PairLabel (санитарный witness BUG/PAIR: PairFill Ink расходится с фактическим nested polarity law #305).
  • 4 targeted mutation-пробы убиты (swap source/backdrop; occurrence→page; подмена identity; пропуск ребра).
  • appearance.rs добавлен в mutation examine_globs.

Public drift

Нет: goldens/fingerprint/WASM JSON/CSS vars/adaptive trace byte-identical (полный workspace, npm 105/105, release:verify, headless Chrome 12/12 — локально зелёные).

Docs

Убрано ложное ребро PairFill→PairLabel из README/whitepaper/semantic/config; verification-map получила graph-секцию; UI_FLOOR из SSOT (Floor::AaUi), 1e-9 удалён из затронутых утверждений.

Rollback

Revert одного squash-коммита; публичные байты не менялись.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Новые возможности

    • Улучшено вычисление контраста подписей на цветных бейджах: теперь оно учитывает фактически отображаемую локальную поверхность.
    • Добавлена более детерминированная обработка вложенных цветовых композиций.
  • Исправления

    • Повышена стабильность результатов для разных цветовых сочетаний и тем.
    • Некорректные значения прозрачности теперь обрабатываются предсказуемо и безопасно.
  • Документация

    • Обновлены описания правил контраста, цветовых рецептов и проверок корректности.

Production-путь PairLabel больше не собирает derived-поверхность вручную:
компонент «opaque source + локальный контекст + объявленная альфа → exact
encoded-sRGB8 source-over → derived surface → foreground occurrence» объявлен
приватным appearance-графом (compile: валидация/канонизация/topo; evaluate:
fail-closed bindings, единственный композитор — alpha::composite_over_srgb8,
replayable-сертификат, trace-счётчики). Граф не знает клиентских имён.

Старая ручная реализация заморожена как test-only differential oracle;
матрица 5 семей × 4 режима × 6 фонов + property-тесты доказывают
байт-идентичность, включая публичные типизированные отказы. Ложное ребро
PairFill → PairLabel убрано из README/whitepaper/доков; UI-пол в тестах взят
из SSOT Floor::AaUi без локальной копии и 1e-9; appearance.rs включён в
mutation-скоуп.

Public API/эмиссия/fingerprint не изменены (differential + полный workspace
зелёные).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f154623f-4d70-4ad9-8783-c9edb768ec06

📥 Commits

Reviewing files that changed from the base of the PR and between 52d7895 and d8d6ea7.

📒 Files selected for processing (11)
  • .cargo/mutants.toml
  • README.md
  • crates/labcolors-core/src/alpha.rs
  • crates/labcolors-core/src/appearance.rs
  • crates/labcolors-core/src/appearance_graph_tests.rs
  • crates/labcolors-core/src/config.rs
  • crates/labcolors-core/src/lib.rs
  • crates/labcolors-core/src/pair_label_tests.rs
  • crates/labcolors-core/src/semantic.rs
  • docs/verification-map.md
  • docs/whitepaper.md

Walkthrough

Добавлен приватный appearance-граф с типизированными декларациями, детерминированной компиляцией, точной source-over-композицией и сертификатами. Production-путь PairLabel переведён на derived-поверхность графа, а тесты фиксируют эквивалентность legacy-результатов и корректность зависимостей.

Changes

Миграция appearance-графа

Layer / File(s) Summary
Контракты графа и SSOT-композитор
crates/labcolors-core/src/alpha.rs, crates/labcolors-core/src/appearance.rs
Добавлены typed handles, описания поверхностей и occurrences, типизированные ошибки, общий валидатор alpha, bindings, execution trace и replayable source-over certificates.
Компиляция и исполнение графа
crates/labcolors-core/src/appearance.rs
Граф канонизирует декларации, проверяет ссылки и циклы, строит topological order и вычисляет derived-поверхности через composite_over_srgb8.
Подключение PairLabel
crates/labcolors-core/src/semantic.rs, crates/labcolors-core/src/config.rs, crates/labcolors-core/src/lib.rs
PairLabel использует compiled appearance-граф, разрешает foreground против derived tint-поверхности и сохраняет legacy oracle для сравнений.
Контрактные тесты и документация миграции
crates/labcolors-core/src/appearance_graph_tests.rs, crates/labcolors-core/src/pair_label_tests.rs, README.md, docs/*, .cargo/mutants.toml
Добавлены проверки зависимостей, fail-closed ошибок, alpha-домена, certificate replay и differential-эквивалентности production с legacy-путём; обновлены документация и mutation scope.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant PairLabel
  participant AppearanceGraph
  participant Alpha
  participant HuedAnchor
  PairLabel->>AppearanceGraph: evaluate bindings
  AppearanceGraph->>Alpha: composite_over_srgb8
  Alpha-->>AppearanceGraph: derived surface RGB
  AppearanceGraph-->>PairLabel: resolved foreground occurrence
  PairLabel->>HuedAnchor: resolve against derived surface
  HuedAnchor-->>PairLabel: resolved PairLabel
Loading

Possibly related issues

Possibly related PRs

  • Labpics-Team/lab-colors#269 — изменяет общий alpha/source-over API, который используется новым appearance-графом.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/appearance-graph-shadow

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ARCH/GRAPH: migrate one atomic derived-surface foreground component

1 participant