Skip to content

fix(profile): воспроизводить измерения и проверять полный протокол - #454

Closed
lemone112 wants to merge 15 commits into
mainfrom
work/motion-profile-foundation-20260930
Closed

lemone112 wants to merge 15 commits into
mainfrom
work/motion-profile-foundation-20260930

Conversation

@lemone112

@lemone112 lemone112 commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Пользовательский результат

PROFILE больше не принимает записанные exitCode: 0 и названия сценариев вместо измерений. Проба сохраняет настоящий размерный вектор, а validator заново собирает источник и сравнивает результат. Хеш покрывает точные байты JSON, включая отступы и конечный LF.

Контракт

Протокол полностью сравнивается с одним глубоко неизменяемым PROFILE_01. Подмена, потеря и лишние поля отвергаются. Identity size-gate принадлежит одному полю productBase.sizeGateBlob; зарегистрированные потолки проверяются против исполняемого scripts/size-gate.mjs.

Baseline закреплён на снимке 7d3ed42e5b054a06e4f6ca7f0c2efc02484e20fd. Его отличие от прежнего 667cfad1 — только две записи диапазона одного security override, без изменений resolved dependencies или runtime. Допуск ограничен OLD-VECTOR-ONLY: timing, A/A, устройства и GPU не подтверждаются.

Доказательство

  • Подделка из имён сценариев и exit 0, подмена чисел и provenance отвергаются. Полная проверка протокола сохраняет полезную JSON-копию и отвергает изменения на каждой глубине.
  • Настоящая Git-fixture проверяет clean/dirty/untracked, blob bytes, diff, ancestry и ошибки. В отдельном clean clone без инструментов old-vector сохраняет отказ; внешний validator подтверждает только recorded-refusal-only.
  • Существующий reusable workflow выполняет настоящий probe/replay и запускает внешний validator на трёх копиях raw с подменой числа, identity и неизмеренных клеток. Проверяется предметная причина отказа; исходный raw сохраняется.
  • На 22b5f430: полный Linux suite — 337 файлов / 4686 тестов PASS; static, реальный probe/replay и три workflow mutations PASS. Независимый reviewer повторил 118 целевых тестов, probe/replay и три подмены: PASS.
  • На текущем d20d0e42d66eec13668066cef244ccd88acdd611: 118 целевых тестов, новый probe/replay и независимое review provenance delta PASS. Старый raw отвергается по несовпадению preregistration.
  • Полный Windows-прогон прежнего baseline выявил portability/timing RED. Исправления runtime-ветки рассматриваются отдельно в feat(behaviors): доводка sheet и carousel через compositor #456; Linux-результат не выдаётся за Windows full PASS.

Архитектура

Сборка и provenance принадлежат bench/compare/provenance.mjs, измерения и потолки — scripts/size-gate.mjs. Публичные API, exports и runtime сохранены. Протокол — потребляемый вход измерителя; lifecycle и ход исследования остаются в agents-config.

Производительность

profile_baseline=true в ручном запуске существующего ci.yml вызывает reusable profile-01.yml. Обычный PR сохраняет обязательный граф и единственный join. Baseline не обязан совпадать с произвольным runtime-кандидатом; машина GitHub CI не заменяет физическое устройство.

Риски и не-цели

Продолжает #449. Размерная проверка не завершает PROFILE/r11. Merge, npm release и deploy требуют отдельного действующего допуска r11.

Документация и выпуск

Комментарии и описания по-русски. Изменения API или версии пакета нет. CHANGELOG не затрагивается.

Гейты

  • Да: локальные проверки, настоящий размерный вектор и повторное измерение, независимые ревью функциональности и provenance delta.
  • Да: PR CI 36715912274 и manual PROFILE 36715911731 завершились SUCCESS для head d20d0e42. PR проверял синтетический merge 898f6d2f с базой 7d3ed42; manual запуск проверял checkout d20d0e42. Архив 11095896741: SHA256 df62b8636d7c3b32dd4da744a1951016167487f2687ae2a709b583df7d7391ed.
  • Содержательный ответ CodeRabbit не нашёл новых блокирующих замечаний в delta a000aca1 → d20d0e42. Формальное approval остаётся открытым: GitHub сохраняет CHANGES_REQUESTED.
  • После этих запусков main перешёл на 0b6f537e: добавлены только transform benchmark, его тесты и документация. Проверка совместного кандидата с этой новой базой ещё не выполнена; прежнее evidence остаётся привязанным к своим исходникам.
  • Слияние и полная готовность плана не заявляются.

@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Warning

Review limit reached

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available. Your 144 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Team
  • Run ID: acd5196f-3732-400f-861a-dfcdb91657d1
📥 Commits

Reviewing files that changed from the base of the PR and between a000aca and 73d9660.

📒 Files selected for processing (9)
  • .github/workflows/ci.yml
  • .github/workflows/profile-01.yml
  • bench/profile/probe-profile-01.mjs
  • bench/profile/profile-01-preregistration.mjs
  • bench/profile/profile-git-proof.mjs
  • bench/profile/profile-measurement.mjs
  • bench/profile/validate-profile-01.mjs
  • test/ci-workflow-contract.test.ts
  • test/profile-measurement.test.ts

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Team

Run ID: 6695fbcf-d7c4-42c4-9a4b-5e7f0beb2050

📥 Commits

Reviewing files that changed from the base of the PR and between 1dd2e14 and a000aca.

📒 Files selected for processing (8)
  • .github/workflows/ci.yml
  • .github/workflows/profile-01.yml
  • bench/profile/probe-profile-01.mjs
  • bench/profile/profile-01-preregistration.mjs
  • bench/profile/profile-git-proof.mjs
  • bench/profile/validate-profile-01.mjs
  • test/ci-workflow-contract.test.ts
  • test/profile-measurement.test.ts

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.


📝 Walkthrough

Walkthrough

Добавлены контракт preregistration PROFILE-01, probe для измерения old-vector и валидатор raw-артефактов. Ручной workflow запускает probe, проверяет JSON и сохраняет raw-артефакты при любом исходе. Отдельно обновлены overrides для двух зависимостей.

Changes

PROFILE-01: измерение и проверка

Layer / File(s) Summary
Контракт preregistration и Git provenance
bench/profile/profile-01-preregistration.mjs, bench/profile/profile-git-proof.mjs, test/profile-measurement.test.ts
Добавлены замороженный контракт PROFILE-01, его проверка и digest, список разрешённых путей, Git-проверки и тесты контракта и неизмеренных клеток.
Измерение и повторная проверка old-vector
bench/profile/profile-measurement.mjs, test/profile-measurement.test.ts
Добавлены измерение через size-gate и проверка повторного результата, включая структурированные измерения и provenance. Тесты проверяют сверку результатов.
Probe и формирование raw-артефакта
bench/profile/probe-profile-01.mjs
Probe проверяет preregistration и Git provenance. Режим old-vector записывает результат или отказ в JSON. Режимы aa и ab завершаются отказом из-за отсутствия browser-калибровки.
Валидация артефактов и запуск workflow
bench/profile/validate-profile-01.mjs, .github/workflows/profile-01.yml, .github/workflows/ci.yml, test/profile-measurement.test.ts, test/ci-workflow-contract.test.ts
Валидатор проверяет raw-артефакт и повторно измеряет cost vector при OLD-VECTOR-ONLY. Ручной workflow запускает probe только при явном запросе, проверяет созданные JSON и сохраняет артефакты. Тесты проверяют workflow-контракт и raw-артефакт.

Обновление dependency overrides

Layer / File(s) Summary
Версии overrides
pnpm-workspace.yaml
Для brace-expansion изменены порог и целевая версия. Для fast-uri обновлена целевая версия.

Priority: ⬇️ Low

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

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant Workflow as GitHub Actions
  participant Probe as probe-profile-01.mjs
  participant Prereg as profile-01-preregistration.mjs
  participant Git as profile-git-proof.mjs
  participant Measurement as profile-measurement.mjs
  participant Artifact as Raw JSON
  participant Validator as validate-profile-01.mjs
  Workflow->>Probe: Запускает old-vector для all клеток
  Probe->>Prereg: Проверяет preregistration и digest
  Probe->>Git: Проверяет ancestry, blob и изменённые пути
  Probe->>Measurement: Запускает измерение old-vector
  Measurement-->>Probe: Возвращает cost vector и exit code
  Probe->>Artifact: Записывает результат или отказ
  Workflow->>Validator: Проверяет каждый созданный JSON
  Validator->>Measurement: Повторно измеряет cost vector при OLD-VECTOR-ONLY
Loading

Merge Risk: ⚪ Minimal · up to a000a

The PROFILE workflow remains explicitly opt-in, and uncalibrated browser modes remain refused. No concrete blocker remains; merge after normal required checks pass.


Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore

❌ Failed checks (1 error, 2 warnings)

Check name Status Explanation Resolution
тесты ❌ Error Тесты не доказывают весь новый функционал PROFILE-01. test/profile-measurement.test.ts проверяет verifyPreregistration, validateReplayedVector, unmeasuredCells и только отказной `probe --mode … Добавить функциональные тесты для makeGit (clean/dirty checkout, blob, diff, ancestry и ошибки), measureOldVector, успешного и отказного old-vector, а также независимый запуск validate-profile-01.mjs на валидном артефакте и на мутац…
архитектура ⚠️ Warning В PR нарушено правило единственного владельца контракта и правило типизированных ошибок. OLD_COST_VECTOR_GZIP_BYTES зарегистрирован в bench/profile/profile-01-preregistration.mjs:32-79, но `profil… Определите один источник для frozen blob и cost vector. Экспортируйте эти значения из одного контракта и используйте их в probe, measurement и validator; удалите комментарийные и локальные копии. Либо удалите зарегистрированный численный ve…
промежуточные документы (напр. планы) ⚠️ Warning В PR добавлен промежуточный исследовательский документ bench/profile/profile-01-preregistration.mjs. Файл отсутствовал в base и появился в head. Он фиксирует план исследования: roster, сцены, контро… Перенести канонический PROFILE-01 preregistration и исследовательский план в agents-config. Удалить их копию из репозитория продукта и устранить зависимость от этой копии. В репозитории продукта оставить только необходимые окончательные и…
✅ Passed checks (6 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
краткие русские документации ✅ Passed Проверка пройдена. Новые комментарии, названия шагов workflow, описания входов и сообщения ошибок написаны на русском языке. Английские фрагменты ограничены идентификаторами, командами и устоявшимися …
Diataxis ✅ Passed Проверка пройдена. В точном diff PR нет изменений в README, docs/, CHANGELOG, ADR или других самостоятельных документационных файлах. Добавленные комментарии и подписи шагов описывают причины, огранич…
Title check ✅ Passed Заголовок кратко и точно описывает основные изменения: воспроизведение измерений и проверку полного протокола. Основная часть заголовка написана по-русски; технический префикс и идентификатор profile …
Description check ✅ Passed Описание содержит основные разделы шаблона: пользовательский результат, контракт, доказательство, архитектуру, производительность, риски, выпуск и гейты. Оно фиксирует ограничения, результаты проверок…
Full details: архитектура

Explanation

В PR нарушено правило единственного владельца контракта и правило типизированных ошибок. OLD_COST_VECTOR_GZIP_BYTES зарегистрирован в bench/profile/profile-01-preregistration.mjs:32-79, но profile-measurement.mjs:19-26 измеряет по scripts/size-gate.mjs; probe-profile-01.mjs:113-115 проверяет только имена сценариев. Численные значения зарегистрированного вектора не участвуют в проверке. Один и тот же frozen blob scripts/size-gate.mjs также задан комментарием в preregistration, литералом в probe-profile-01.mjs:91 и отдельным SIZE_GATE_FROZEN в validate-profile-01.mjs:54. Эти источники могут рассинхронизироваться. Дополнительно profile-git-proof.mjs:55-61 преобразует любую ошибку git merge-base в false, поэтому ошибка Git неотличима от корректного результата «не является предком». Это скрывает тип ошибки, даже если вызывающий код затем завершает работу в fail-closed режиме.

Resolution

Определите один источник для frozen blob и cost vector. Экспортируйте эти значения из одного контракта и используйте их в probe, measurement и validator; удалите комментарийные и локальные копии. Либо удалите зарегистрированный численный vector, если он не является проверяемым контрактом. Разделите результат merge-base: возвращайте отдельный результат для «не предок», а ошибки выполнения Git передавайте как типизированную ошибку с исходной причиной. Добавьте тесты на рассинхронизацию blob/vector и на отказ Git.

Full details: тесты

Explanation

Тесты не доказывают весь новый функционал PROFILE-01. test/profile-measurement.test.ts проверяет verifyPreregistration, validateReplayedVector, unmeasuredCells и только отказной probe --mode aa; этот режим завершается до ветки old-vector. Нет тестов для makeGit, measureOldVector, успешного old-vector и CLI validate-profile-01.mjs. В test/ci-workflow-contract.test.ts мутации проверяют только модель графа CI, а не выполнение измерителя и валидатора. Есть доказанный контрпример. PR изменяет pnpm-lock.yaml и pnpm-workspace.yaml, но PREREG_OWN_PATHS в bench/profile/profile-git-proof.mjs содержит только preregistration-пути и не содержит эти два файла. Поэтому probe-profile-01.mjs на old-vector добавляет их в foreign и завершается отказом до измерения. Ни один добавленный тест не выполняет эту ветку и не обнаруживает несовпадение allowlist. Проверка workflow подтверждает только workflow_call, а не команды и поведение profile-01.yml. Следовательно, критичный тестовый контур не закрывает классы отказов и допускает целевой дефект.

Resolution

Добавить функциональные тесты для makeGit (clean/dirty checkout, blob, diff, ancestry и ошибки), measureOldVector, успешного и отказного old-vector, а также независимый запуск validate-profile-01.mjs на валидном артефакте и на мутациях head, baseProof, diffPaths, sizeGateBlob, costVector, cellsUnproven, cellsMeasured, rejection, времени и seed. Добавить тест, который сопоставляет изменённые в PR пути с PREREG_OWN_PATHS и падает на текущем контрпримере с pnpm-lock.yaml и pnpm-workspace.yaml. Затем исправить политику: либо включить эти файлы в доказанный allowlist и покрыть их provenance, либо исключить изменения зависимостей из old-vector PR. Для критичных веток выполнить deliberate sabotage или mutation production-кода и зафиксировать, что новые тесты его обнаруживают.

Full details: промежуточные документы (напр. планы)

Explanation

В PR добавлен промежуточный исследовательский документ bench/profile/profile-01-preregistration.mjs. Файл отсутствовал в base и появился в head. Он фиксирует план исследования: roster, сцены, контрольные измерения, MDE, sample size, stopping rule, observation policy и calibration. Файл используется как источник истины в probe, validator, workflow и тестах. Это не Diataxis-документация продукта, а preregistration работы над продуктом в репозитории продукта.

Resolution

Перенести канонический PROFILE-01 preregistration и исследовательский план в agents-config. Удалить их копию из репозитория продукта и устранить зависимость от этой копии. В репозитории продукта оставить только необходимые окончательные исполняемые артефакты измерения и валидации либо сгенерированный зафиксированный артефакт без исследовательского плана. Не создавать вторую независимую точку истины.

✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pre-merge checks failed. Please resolve the failing checks before merging.

@lemone112 lemone112 changed the title fix(profile): replay baseline measurements from exact source fix(profile): воспроизводить измерения и проверять полный протокол Sep 30, 2026
@lemone112

Copy link
Copy Markdown
Contributor Author

@coderabbitai Замечания разобраны в f56da5e17dedd47f1fff247f9de365436a2bf007.

  1. Подтверждено: частичная verifyPreregistration пропускала изменения reason, acceptance, A/A, sampleSize, failClosed и mutable browsers. Семь RED-проверок воспроизвели дефекты. Теперь PROFILE_01 глубоко неизменяем; isDeepStrictEqual сравнивает весь вход с этим единственным контрактом. Проверки подмены, удаления и лишних полей на каждой глубине, а также полезной JSON-копии проходят.
  2. Исправлены английские описательные фрагменты, workflow name, русский заголовок и структура PR по шаблону.
  3. Предложение удалить preregistration как промежуточный документ не применимо к этому артефакту. Это исполняемый вход probe/validator: из него берутся exact productBase, сценарии, набор неизмеренных клеток и digest, проверяемый при воспроизведении. Он не содержит task status, handoff или хронику исследования. Плановый lifecycle остаётся в agents-config; удаление потребляемого контракта уничтожило бы проверяемую привязку к версии. Дублирующие литералы validator удалены.
  4. GitHub подтвердил, что workflow_dispatch нового файла недоступен до регистрации в default branch. Добавлен обычный pull_request trigger того же workflow с checkout точного head, read-only permissions и прежним size-gate; no-merge граница сохраняется.

На exact SHA 21 PROFILE + 32 provenance теста PASS, два Windows platform skips; настоящая probe и независимая повторная сборка/сверка PASS; actionlint PASS. Изолированный reviewer самостоятельно проверил 394 подмены и полную заморозку: PASS. Просьба повторно оценить изменённый delta и pre-merge checks. Override не используется.

@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -u
git rev-parse HEAD
git show --format=fuller --stat f56da5e17dedd47f1fff247f9de365436a2bf007
git show --format= --no-ext-diff f56da5e17dedd47f1fff247f9de365436a2bf007 -- bench/profile/profile-01-preregistration.mjs bench/profile/validate-profile-01.mjs .github/workflows/profile-01.yml test/profile-measurement.test.ts
ast-grep outline bench/profile/profile-01-preregistration.mjs --items all
ast-grep outline bench/profile/validate-profile-01.mjs --items all
gh pr view 454 --repo Labpics-Team/lab-motion --json title,body,headRefOid,mergeStateStatus,reviewDecision,statusCheckRollup
gh api repos/Labpics-Team/lab-motion/commits/f56da5e17dedd47f1fff247f9de365436a2bf007/check-runs --paginate --jq '.check_runs[] | {name,status,conclusion,head_sha,details_url}'
gh api repos/Labpics-Team/lab-motion/commits/f56da5e17dedd47f1fff247f9de365436a2bf007/status --jq '{state,statuses:[.statuses[] | {context,state,target_url}]}'

Length of output: 35936


🏁 Script executed:

#!/bin/bash
set -u
ast-grep outline bench/profile/probe-profile-01.mjs --items all
ast-grep outline bench/profile/profile-git-proof.mjs --items all
git show --format= --no-ext-diff f56da5e17dedd47f1fff247f9de365436a2bf007 -- bench/profile/probe-profile-01.mjs bench/profile/profile-git-proof.mjs
sed -n '1,230p' bench/profile/profile-01-preregistration.mjs
sed -n '1,180p' bench/profile/validate-profile-01.mjs
sed -n '1,190p' bench/profile/probe-profile-01.mjs
sed -n '1,120p' bench/profile/profile-git-proof.mjs
cat -n .github/workflows/profile-01.yml
gh run view 36701446858 --repo Labpics-Team/lab-motion --job 109841581146 --log-failed
gh run view 36701446319 --repo Labpics-Team/lab-motion --job 109841577882 --log | tail -n 100

Length of output: 184838


@lemone112, проверил delta на f56da5e17dedd47f1fff247f9de365436a2bf007 и журналы GitHub Actions. Проверка контракта исправлена. Pre-merge checks пока не проходят.

Оценка изменений

  1. deepFreeze обходит вложенные объекты и массивы, включая browsers. verifyPreregistration сравнивает весь вход через isDeepStrictEqual с PROFILE_01. Добавленные тесты покрывают подмену, удаление, лишние поля и независимую JSON-копию. GitHub CI подтверждает PASS всех 21 теста PROFILE.
  2. Русский заголовок, структура описания PR и изменения описательных фрагментов подтверждены.
  3. Предложение удалить bench/profile/profile-01-preregistration.mjs отзываю. Это исполняемый контракт, который потребляют probe и validator, а не промежуточный плановый документ. Спасибо за уточнение границы с agents-config.
  4. Workflow получает точный PR head, проверяет SHA и использует contents: read без сохранения credentials. Журнал подтверждает успешную повторную сборку и результат independent-size-remeasurement. Артефакт опубликован. Допуск остаётся OLD-VECTOR-ONLY.

Блокирующий результат CI

Добавление pull_request в .github/workflows/profile-01.yml конфликтует с действующим контрактом графа CI.

В test/ci-workflow-contract.test.ts, Line 282, assertNativeGraph ожидает единственный candidate workflow — ci.yml. Теперь проверка получает:

Expected: ['ci.yml']
Received: ['ci.yml', 'profile-01.yml']

Из-за этого job test · fuzz завершился отказом: 50 failed, 4591 passed. Все 50 отказов находятся в test/ci-workflow-contract.test.ts. Итоговый CI также имеет FAILURE.

Размерные/package checks, mutation, Chromium/Firefox/WebKit и потребители Node 22/24 прошли. Статус CodeRabbit — SUCCESS, но GitHub сохраняет CHANGES_REQUESTED и BLOCKED.

Следующий шаг: согласовать запуск PROFILE с контрактом графа CI. Не следует просто отключать проверку или безусловно разрешать дополнительные candidate workflows. После изменения нужны полный CI и PROFILE replay на новом точном SHA. В pre-merge проверке это остаётся открытым блокером.

Код репозитория в sandbox я не запускал. Выводы основаны на статическом просмотре и журналах GitHub Actions. Отдельную проверку 394 подмен самостоятельно не повторял.

Запускаю повторное автоматическое ревью изменённого delta.


✏️ Learnings added
Learnt from: lemone112
URL: https://github.com/Labpics-Team/lab-motion/pull/454

Timestamp: 2026-09-30T10:21:36.933Z
Learning: В Labpics-Team/lab-motion файл bench/profile/profile-01-preregistration.mjs — исполняемый JavaScript ESM-контракт PROFILE_01, потребляемый bench/profile/probe-profile-01.mjs и bench/profile/validate-profile-01.mjs. Контракт задаёт точный productBase, сценарии, неизмеренные клетки и preregistration digest для replay. Его нельзя считать удаляемым промежуточным плановым документом; плановый lifecycle ведётся в agents-config.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@lemone112

Copy link
Copy Markdown
Contributor Author

@coderabbitai Коррекция к предыдущему ответу: дополнительный PR-trigger в f56da5e нарушил существующий native CI graph contract. Он удалён; исключение из правила не добавлялось.

Текущий a000aca вызывает единственный reusable profile-01.yml только по явному profile_baseline=true в workflow_dispatch существующего ci.yml. Все шесть прежних jobs и mandatory join побайтно сохранены. Дополнительные контрпримеры запрещают второй PR-trigger, безусловный baseline и ручной запуск без флага. Независимый CI/provenance review: PASS.

Полный Linux suite: 337 файлов / 4683 теста PASS. В отдельном Windows full run найден aggregate timeout:40 Bash subprocess делили один5s testdeadline. Те же5×8 случаев теперь it.each с прежним5000ms на процесс;94 CI contract testsPASS, independentreviewPASS. Другие Windows baseline failures сохранены и исправляются отдельно в runtime-ветке; thresholds не менялись.

На точном a000aca probe + независимая повторная сборка/validator PASS. Штатный ручной запуск принят GitHub: https://github.com/Labpics-Team/lab-motion/actions/runs/36706218847. Обязательный PR CI проверяет тот же SHA. Требуется содержательное повторное review после исправлений; override не применялся.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pre-merge checks failed. Please resolve the failing checks before merging.

@coderabbitai

coderabbitai Bot commented Sep 30, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -u
git rev-parse HEAD
git show --stat --oneline a000aca1
git diff f56da5e17dedd47f1fff247f9de365436a2bf007..a000aca1 -- .github/workflows/ci.yml .github/workflows/profile-01.yml test/ci-workflow-contract.test.ts bench/profile/profile-git-proof.mjs
ast-grep outline test/ci-workflow-contract.test.ts --items all
cat -n .github/workflows/ci.yml
cat -n .github/workflows/profile-01.yml
gh pr view 454 --repo Labpics-Team/lab-motion --json headRefOid,mergeStateStatus,reviewDecision,statusCheckRollup
gh run view 36706218847 --repo Labpics-Team/lab-motion --json headSha,event,status,conclusion,jobs,url

Length of output: 52652


🏁 Script executed:

#!/bin/bash
set -u
sed -n '279,380p' test/ci-workflow-contract.test.ts
sed -n '385,440p' test/ci-workflow-contract.test.ts
sed -n '480,550p' test/ci-workflow-contract.test.ts
gh run view 36706223065 --repo Labpics-Team/lab-motion --json headSha,event,status,conclusion,url
gh run view 36706218847 --repo Labpics-Team/lab-motion --job 109856989305 --log | grep -E 'HEAD is now|a000aca|admission|verification|independent-size|OLD-VECTOR|digest|Artifact.*(upload|URL)|UNPROVEN'
gh run view 36706223065 --repo Labpics-Team/lab-motion --job 109856996222 --log | grep -E 'ci-workflow-contract.test|profile-measurement.test|Test Files|Tests '
git diff --name-status f56da5e17dedd47f1fff247f9de365436a2bf007..a000aca1

Length of output: 18640


@lemone112, повторно проверил delta на a000aca1ed201002dba990a3dd210ca192dc0ea7, контракт CI и журналы GitHub Actions. Прежний блокер native CI graph contract устранён. Новых блокирующих замечаний в проверенном delta не обнаружил.

Оценка исправлений

  • .github/workflows/profile-01.yml теперь имеет только workflow_call. Второй PR-trigger удалён.
  • .github/workflows/ci.yml вызывает PROFILE только при workflow_dispatch и inputs.profile_baseline=true. Значение по умолчанию — false.
  • Diff подтверждает сохранение шести прежних jobs, включая mandatory join CI. Его зависимости и shell-проверки не изменены.
  • assertNativeGraph по-прежнему требует единственный candidate workflow — ci.yml. Общее разрешение дополнительных candidate workflows не добавлено.
  • Новые контрпримеры запрещают PR-trigger PROFILE, безусловный вызов PROFILE и ручной вызов без флага.
  • Параметризация shell-проверок сохраняет все 5 × 8 случаев, timeout: 5000 на процесс и прежнее условие успеха. Она устраняет общий test deadline для 40 последовательных процессов, а не ослабляет проверку.
  • PREREG_OWN_PATHS расширен двумя конкретными путями: ci.yml и его contract test. Размерные потолки в этом delta не изменены.

Подтверждённые результаты

Обязательный PR CI завершился SUCCESS. GitHub указывает тот же head SHA.

  • Полный Linux suite: 337 файлов / 4683 теста PASS.
  • CI contract: 94 теста PASS.
  • PROFILE: 21 тест PASS.
  • Отдельный finiteness fuzz: 111 тестов PASS.
  • Size/package, mutation, Chromium/Firefox/WebKit и consumer checks Node 22.0.0/24: SUCCESS.
  • profile-baseline в PR корректно имеет SKIPPED.

Ручной запуск не только принят, но и завершился SUCCESS. Журнал подтверждает checkout точного a000aca1…, успешную probe и результат validator:

{"valid":true,"mode":"old-vector","admission":"OLD-VECTOR-ONLY","verification":"independent-size-remeasurement"}

Raw-артефакт опубликован.

Границы вывода

Допуск остаётся OLD-VECTOR-ONLY. Эти результаты не доказывают timing, A/A, device/GPU cells или полный PROFILE.

Windows full run и отдельный independent review я не воспроизводил. Проверка основана на статическом просмотре delta и журналах GitHub Actions. Код репозитория в sandbox не запускал.

GitHub пока показывает CHANGES_REQUESTED / BLOCKED, несмотря на успешные checks. Поэтому этот ответ не означает approval, разрешение merge или release.

Спасибо за уточнение границы между обязательным candidate CI и явно запрошенным PROFILE baseline.


✏️ Learnings added
Learnt from: lemone112
URL: https://github.com/Labpics-Team/lab-motion/pull/454

Timestamp: 2026-09-30T11:12:48.841Z
Learning: В Labpics-Team/lab-motion обязательный native CI graph contract в test/ci-workflow-contract.test.ts требует, чтобы .github/workflows/ci.yml оставался единственным workflow с candidate triggers. Размерный PROFILE baseline запускается отдельно: job profile-baseline в ci.yml вызывает reusable .github/workflows/profile-01.yml только при workflow_dispatch и boolean-входе profile_baseline=true, по умолчанию false. PROFILE baseline не входит в mandatory join candidate CI; его успешный replay даёт только OLD-VECTOR-ONLY, а не полный PROFILE admission.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

You are interacting with an AI system.

@lemone112

Copy link
Copy Markdown
Contributor Author

@coderabbitai Замечания pre-merge о функциональном доказательстве разобраны на d20d0e4.

Добавлены настоящая Git-fixture (clean/dirty/untracked, bytes, diff, ancestry, ошибки) и процессный old-vector в clean clone без инструментов: сохраняется NOT-GRANTED, а отдельный validator удостоверяет только записанный отказ. Существующий reusable workflow теперь проверяет три мутации копий успешного raw через внешний validator, с точными причинами отказа. Happy path сохраняется и проходит независимую повторную сборку.

Оба exact-head запуска зелёные: PR CI https://github.com/Labpics-Team/lab-motion/actions/runs/36715912274 и manual PROFILE https://github.com/Labpics-Team/lab-motion/actions/runs/36715911731. Последний выполнил probe, независимое повторное измерение и все три отказных контроля. Raw artifact11095896741, archive SHA256 df62b8636d7c3b32dd4da744a1951016167487f2687ae2a709b583df7d7391ed.

Frozen sizeGateBlob теперь принадлежит единственному полю productBase; полный зарегистрированный численный вектор проверяется против действующего size-gate. Это версия preregistration-снимка, а не второй исполняемый владелец потолков. Смысл исполняемого протокола и предыдущий отзыв замечания о промежуточном документе сохранены.

После upstream security PR455 baseline привязан к actual main7d3ed42. Resolved dependencies/runtime неизменны; различаются только две эквивалентные записи security override. Старый raw корректно отвергается по digest. Независимые functional/provenance review прошли. OLD-VECTOR-ONLY и запрет merge/release/deploy r11 сохраняются. Просьба содержательно перепроверить текущий delta и соответствующие pre-merge checks; override не используется.

@coderabbitai

coderabbitai Bot commented Sep 30, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -u
git rev-parse HEAD
git diff --stat a000aca1ed201002dba990a3dd210ca192dc0ea7..d20d0e42d66eec13668066cef244ccd88acdd611
git diff --name-status a000aca1ed201002dba990a3dd210ca192dc0ea7..d20d0e42d66eec13668066cef244ccd88acdd611
git diff a000aca1ed201002dba990a3dd210ca192dc0ea7..d20d0e42d66eec13668066cef244ccd88acdd611 -- .github/workflows/profile-01.yml bench/profile/profile-01-preregistration.mjs bench/profile/profile-git-proof.mjs bench/profile/probe-profile-01.mjs bench/profile/validate-profile-01.mjs bench/profile/profile-measurement.mjs test/profile-measurement.test.ts pnpm-workspace.yaml
fd -i 'profile.*test|profile.*control'
ast-grep outline bench/profile --items all
ast-grep outline test/profile-measurement.test.ts --items all
gh pr view 454 --repo Labpics-Team/lab-motion --json headRefOid,mergeStateStatus,reviewDecision,statusCheckRollup
gh run view 36715912274 --repo Labpics-Team/lab-motion --json headSha,event,status,conclusion,jobs,url
gh run view 36715911731 --repo Labpics-Team/lab-motion --json headSha,event,status,conclusion,jobs,url

Length of output: 66002


🏁 Script executed:

#!/bin/bash
set -u
cat -n bench/profile/profile-git-proof.mjs
cat -n bench/profile/profile-measurement.mjs
sed -n '1,165p' bench/profile/probe-profile-01.mjs
sed -n '1,150p' bench/profile/validate-profile-01.mjs
sed -n '1,95p' bench/profile/profile-01-preregistration.mjs
sed -n '175,235p' bench/profile/profile-01-preregistration.mjs
sed -n '1,125p' .github/workflows/profile-01.yml
git diff 667cfad1d0de2c4db1cf95074d1c43161308bb35..7d3ed42e5b054a06e4f6ca7f0c2efc02484e20fd --stat
git diff 667cfad1d0de2c4db1cf95074d1c43161308bb35..7d3ed42e5b054a06e4f6ca7f0c2efc02484e20fd -- pnpm-lock.yaml pnpm-workspace.yaml
git diff 7d3ed42e5b054a06e4f6ca7f0c2efc02484e20fd..HEAD --name-only
git rev-parse 7d3ed42e5b054a06e4f6ca7f0c2efc02484e20fd:scripts/size-gate.mjs HEAD:scripts/size-gate.mjs
gh run view 36715912274 --repo Labpics-Team/lab-motion --job 109888653130 --log | grep -E 'HEAD is now|profile-measurement.test|ci-workflow-contract.test|Test Files|Tests '
gh run view 36715911731 --repo Labpics-Team/lab-motion --job 109888660630 --log | grep -E 'HEAD is now|rawDigest|admission|verification|ожидаемый предметный отказ|Artifact.*(upload|URL)|digest'
gh api repos/Labpics-Team/lab-motion/actions/artifacts/11095896741 --jq '{id,name,size_in_bytes,expired,digest,workflow_run}'
archive=$(mktemp)
if gh api repos/Labpics-Team/lab-motion/actions/artifacts/11095896741/zip > "$archive"; then
  sha256sum "$archive"
  python - "$archive" <<'PY'
import sys, zipfile, json
with zipfile.ZipFile(sys.argv[1]) as archive:
    for name in archive.namelist():
        if name.endswith('.json'):
            value=json.loads(archive.read(name))
            print(json.dumps({k:value.get(k) for k in ('head','preregistrationDigest','admission','mode','cellsMeasured','cellsUnproven')}, ensure_ascii=False))
PY
fi
rm -f "$archive"

Length of output: 37554


@lemone112, проверил delta a000aca1… → d20d0e42d66eec13668066cef244ccd88acdd611, код функциональных проверок, журналы CI и опубликованный архив. В проверенном delta новых блокирующих замечаний не обнаружил. Функциональные проверки теперь покрывают заявленные ветви.

Функциональное доказательство

  • Git-fixture использует настоящий Git. Тест проверяет clean checkout, изменения tracked-файла, untracked-файл, blob исходных байтов, diff и ancestry в обоих направлениях. Ошибки получения доказательств приводят к отказу.
  • Процессный тест запускает old-vector в отдельном clean clone без установленных инструментов. Тест требует exit code 1, NOT-GRANTED, непустую причину отказа и costVector: null. Тест также сверяет digest записанных raw-байтов.
  • Отдельный процесс validator проверяет сохранённый отказ. Результат recorded-refusal-only не выдаёт размерный допуск и не подтверждает историческую причину отказа независимым измерением.
  • Workflow проверяет три подмены копий настоящего успешного raw. Каждая проверка требует exit code 1 и соответствующую причину: изменение gzBytes, несогласованный head и удалённые cellsUnproven. Timeout или произвольное падение validator не удовлетворяют этим проверкам.
  • Успешная ветвь сохраняет независимую повторную сборку. Validator сравнивает структурированные измерения и provenance.

Контракт и baseline

probe и validator теперь получают frozen blob из PROFILE_01.productBase.sizeGateBlob. Дублирующие литералы удалены.

Новый тест сверяет зарегистрированный численный вектор с экспортами действующего scripts/size-gate.mjs. Снимок протокола не стал вторым исполняемым владельцем потолков.

Сравнение прежнего baseline 667cfad1… с 7d3ed42… показывает только две замены selector для security override: в workspace и lock-файле. Разрешённые зависимости и runtime-файлы не изменены. Blob scripts/size-gate.mjs совпадает у нового baseline и текущего HEAD.

При оценке использовал ранее уточнённые границы исполняемого preregistration-контракта и отдельного PROFILE baseline. .github/workflows/ci.yml и его contract test в текущем delta не изменены.

Pre-merge checks

Оба запуска имеют headSha = d20d0e42… и итог SUCCESS.

Проверка Подтверждённый результат
PR CI Все обязательные jobs и mandatory join прошли
Полный Linux suite 337 файлов / 4686 тестов PASS
CI contract / PROFILE 94 / 24 теста PASS
Отдельный finiteness fuzz 111 тестов PASS
Manual PROFILE Probe, независимое повторное измерение и три отказных контроля прошли

Уточнение про exact HEAD: PR run связан с d20d0e42…, но журнал checkout показывает merge commit 898f6d2f…, который объединяет этот head с 7d3ed42…. Manual PROFILE действительно выполнялся на checkout d20d0e42…. Поэтому два запуска не следует описывать как два исполнения одного checkout SHA.

Архив 11095896741 скачал и отдельно вычислил SHA-256. Он совпадает с указанным:

df62b8636d7c3b32dd4da744a1951016167487f2687ae2a709b583df7d7391ed

Границы вывода

Допуск остаётся OLD-VECTOR-ONLY. Raw сохраняет все восемь неизмеренных timing/device/GPU-клеток. Полный PROFILE, merge, release и deploy этим результатом не разрешены.

Код репозитория в sandbox не запускал. Независимые functional/provenance review и прогон старого raw самостоятельно не повторял. Отказ старого raw по изменившемуся digest подтверждается логикой validator, а не отдельным запуском с моей стороны.

GitHub сейчас показывает CHANGES_REQUESTED / BEHIND. Успешные checks не заменяют approval и проверку актуальности относительно нового base.

Спасибо за уточнение роли preregistration-снимка.


✏️ Learnings added
Learnt from: lemone112
URL: https://github.com/Labpics-Team/lab-motion/pull/454

Timestamp: 2026-09-30T13:00:02.866Z
Learning: В Labpics-Team/lab-motion PROFILE_01.oldCostVectorGzipBytes в bench/profile/profile-01-preregistration.mjs является версионированным снимком зарегистрированных потолков, а не вторым исполняемым владельцем бюджетов. Исполняемые потолки принадлежат scripts/size-gate.mjs; test/profile-measurement.test.ts сверяет с его экспортами полный зарегистрированный численный вектор. Frozen blob хранится в PROFILE_01.productBase.sizeGateBlob и потребляется bench/profile/probe-profile-01.mjs и bench/profile/validate-profile-01.mjs.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: lemone112
URL: https://github.com/Labpics-Team/lab-motion/pull/454

Timestamp: 2026-09-30T11:12:48.991Z
Learning: В Labpics-Team/lab-motion обязательный native CI graph contract в test/ci-workflow-contract.test.ts требует, чтобы .github/workflows/ci.yml оставался единственным workflow с candidate triggers. Размерный PROFILE baseline запускается отдельно: job profile-baseline в ci.yml вызывает reusable .github/workflows/profile-01.yml только при workflow_dispatch и boolean-входе profile_baseline=true, по умолчанию false. PROFILE baseline не входит в mandatory join candidate CI; его успешный replay даёт только OLD-VECTOR-ONLY, а не полный PROFILE admission.

Learnt from: lemone112
URL: https://github.com/Labpics-Team/lab-motion/pull/454

Timestamp: 2026-09-30T10:21:37.064Z
Learning: В Labpics-Team/lab-motion файл bench/profile/profile-01-preregistration.mjs — исполняемый JavaScript ESM-контракт PROFILE_01, потребляемый bench/profile/probe-profile-01.mjs и bench/profile/validate-profile-01.mjs. Контракт задаёт точный productBase, сценарии, неизмеренные клетки и preregistration digest для replay. Его нельзя считать удаляемым промежуточным плановым документом; плановый lifecycle ведётся в agents-config.

You are interacting with an AI system.

@lemone112

Copy link
Copy Markdown
Contributor Author

Закрываю как поглощённое предложение после доставки #471 в main: ee78df3fcc3f9ff44c8f3ed717b3ee3767f2f121 (дерево 38dbe02a6a098e28bf6737667238ee319e1f20a5). Независимая проверка сопоставила актуальный head этого PR 73d9660d6007d4c67c55f099c53227e19b34c47d с доставленными файлами.

  • Из 9 изменённых файлов profile workflow и profile-measurement.mjs совпадают побайтно. Остальные изменения прослежены до текущего probe/validator/Git proof и contract tests.
  • Сохраняются независимое повторное измерение old-vector, отказ aa/ab без калибровки, raw digest фактических bytes, полный frozen protocol и неизмеренные клетки.
  • Последующие изменения добавляют проверку CLI операндов до файловых эффектов, --no-renames для Git proof, корректную фикстуру зарегистрированного baseline и реальный native-clock source check.
  • Сравнение старых бюджетов через toMatchObject сохраняет каждый зарегистрированный ключ и точный потолок, допуская отдельные новые opt-in клетки.

Это подтверждает перенос исходников и проверок. Нативные измерения, runtime admission и незавершённые узлы r13 сохраняют отдельные условия приёмки. Исходная ветка сохранена.

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.

1 participant