Перейти к содержимому

Оценка предоставленных QA-данных

Требуется Bee 1.0.0-beta.15 с командой bee qa assess.

Передайте агенту одну оценку уже имеющихся данных, а затем следуйте указанным наблюдениям и следующим проверкам, не открывая заново каждый исходный отчёт. Команда читает локальные файлы и использует Git только для чтения. Она не запускает тесты, генераторы отчётов или вложения, не удостоверяет производителя, не даёт приёмку и не измеряет экономию.

Описанная выше qa assess только диагностирует предоставленные данные. Для текущего checkout bee qa run выполняет явную JSON-спецификацию задачи с критериями и проверками; команды не выводятся из текста. Начните с действующего шаблона спецификации и просмотрите каждый исполняемый файл и аргумент до запуска:

Окно терминала
bee qa run --help --json
bee qa run --root /absolute/checkout --spec /absolute/task.json --json

Спецификация содержит schemaVersion: 1, profile: "change-task", от 1 до 16 критериев и проверок. Критерий задаёт исходные paths и покрывающие их checkIds. Проверка repo-command указывает абсолютный executable, массив аргументов, исходные paths, дополнительные inputs и тайм-аут 1–300 секунд. code-analyze допускает native source/compiled или Roslyn compiled; покрытие тестами из этого не следует. Входы и идентификатор исходников снимаются до и после выполнения. Команда может писать файлы и запускать процессы; это не песочница. Внешний PATH не передаётся: используйте абсолютный интерпретатор или проверенную оболочку.

Код 0 означает verifiedCompletion=true только для объявленных проверок; 1 — repair_required, 4 — неверный вызов/спецификация, 5 — неполные данные или необходимость решения человека. Уровень доверия отчёта — in_process_only: сохранённый JSON не доказывает последующий запуск. Проверьте исходный вывод, качество проверок и субъективные критерии. Полный пример см. в расширенных CLI-сценариях, а отдельный отчёт владельца — в Планах.

Начните в корне репозитория. Выберите локальный базовый коммит и либо текущий закоммиченный HEAD, либо worktree для текущих файлов. Пример фиксирует базу на текущем HEAD и оценивает рабочее дерево; при необходимости замените QA_BASE нужным коммитом сравнения. Если head задан коммитом, он должен совпадать с HEAD репозитория при неизменённых входных файлах. Коммиты не загружаются.

Встроенный профиль bee-cli описывает интеграцию QA CLI для linux-x64. Это не общий профиль для произвольного проекта, другой платформы или всего выпуска. Запуск импортёра на macOS не меняет целевую платформу.

Используйте оболочку с Git и Python 3. Этот код создаёт новый временный пакет вне репозитория и разрешает его физический путь, включая /private/tmp на macOS:

Окно терминала
export QA_ROOT="$(pwd -P)"
export QA_BASE="$(git -C "$QA_ROOT" rev-parse HEAD)"
export QA_HEAD=worktree
export QA_BUNDLE="$(python3 -c 'import pathlib,tempfile; print(pathlib.Path(tempfile.mkdtemp(prefix="bee-qa-demo-")).resolve())')"
bee qa assess --help

В следующих шагах используйте тот же репозиторий и пакет. --root, --base, --head и --profile обязательны; инициализация Bee и подключение к сервисам не нужны.

Окно терминала
qa_exit=0
bee qa assess --root "$QA_ROOT" --base "$QA_BASE" --head "$QA_HEAD" \
--profile bee-cli --limit 5 --budget 16000 --json \
> "$QA_BUNDLE/preview.json" || qa_exit=$?
test "$qa_exit" -eq 5

Продолжайте только при успешной проверке кода выхода. Справка возвращает 0, неверные/неизвестные/повторные опции — 4, а каждая оценка намеренно возвращает 5. Код 5 означает, что диагностическая оценка не даёт приёмку; это не наблюдаемый код выхода тестового процесса и не доказательство падения тестов.

Без --evidence ожидаются decision: collect_evidence, missing_evidence и наблюдения о недостающем охвате. Изучите preview.json перед подготовкой реальных данных. Неразрешённые исходники или исчерпанный бюджет вывода не дают пригодной идентичности исходников.

3 · Подготовьте минимальный корректный пакет

Заголовок раздела «3 · Подготовьте минимальный корректный пакет»

Пример записывает синтетические данные, а не результат запуска теста. Он создаёт один сбой TRX вне профиля с согласованной идентичностью теста и счётчиками. Индекс схемы 1 объявляет точный манифест исходников и политику из предварительного результата, а также фактическую длину файла в байтах и SHA-256. Время завершения и недоступные идентификаторы build/settings/toolchain/environment остаются неизвестными.

Окно терминала
python3 - <<'PY'
import hashlib, json, os
from pathlib import Path
bundle = Path(os.environ["QA_BUNDLE"])
preview = json.loads((bundle / "preview.json").read_text(encoding="utf-8"))
source = preview["source"]["manifestSha256"]
policy = preview["policyFingerprint"]
assert source and policy
trx = b'''<TestRun xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"
id="11111111-1111-4111-8111-111111111111">
<TestDefinitions><UnitTest id="22222222-2222-4222-8222-222222222222">
<TestMethod className="Docs.Synthetic" name="Example"/>
</UnitTest></TestDefinitions>
<Results><UnitTestResult testId="22222222-2222-4222-8222-222222222222"
executionId="33333333-3333-4333-8333-333333333333"
testName="Synthetic example" outcome="Failed"/></Results>
<ResultSummary outcome="Failed"><Counters total="1" executed="1"
passed="0" failed="1" notExecuted="0"/></ResultSummary>
</TestRun>
'''
(bundle / "report.trx").write_bytes(trx)
index = {
"schemaVersion": 1, "runId": "docs-synthetic", "attemptId": "attempt-1",
"completedAt": None,
"bindings": {"source": source, "profile": "bee-cli", "policy": policy},
"acceptanceFingerprint": policy,
"artifacts": [{"kind": "trx", "relativePath": "report.trx",
"sha256": hashlib.sha256(trx).hexdigest(), "bytes": len(trx)}]
}
(bundle / "index.json").write_text(json.dumps(index) + "\n", encoding="utf-8")
print(bundle / "index.json")
PY

runId и attemptId обозначают предоставленный пакет. relativePath отсчитывается от каталога индекса. acceptanceFingerprint — поле привязки к политике; его заполнение не даёт приёмку. Копирование хеша исходников создаёт лишь заявление о содержимом, а вычисление хеша файла не удостоверяет производителя. Не подменяйте хеш исходников старого реального отчёта новым, чтобы скрыть несовпадение.

4 · Выполните оценку и прочитайте наблюдения

Заголовок раздела «4 · Выполните оценку и прочитайте наблюдения»
Окно терминала
qa_exit=0
bee qa assess --root "$QA_ROOT" --base "$QA_BASE" --head "$QA_HEAD" \
--profile bee-cli --evidence "$QA_BUNDLE/index.json" \
--limit 5 --budget 16000 --json > "$QA_BUNDLE/assessment.json" || qa_exit=$?
test "$qa_exit" -eq 5
python3 -m json.tool "$QA_BUNDLE/assessment.json"

При неизменённых исходниках пример даёт sourceAssociation: content_matches_claim, observedHistogram: {"Failed": 1} и decision: collect_evidence. У файла verification: bytes_checked; парсер может иметь статус complete, когда testVerdict равен failed. Обязательный охват профиля всё ещё отсутствует. historical_failure сохраняет синтетическое наблюдение, но неизвестное время завершения и другие привязки не позволяют сделать из него вывод о необходимости исправлять текущие исходники.

Читайте decision, reasonCounts, scopeCounts, artifacts и next вместе. При наличии данных details указывает хеш файла и номер наблюдения, чтобы агент мог затем открыть нужное исходное наблюдение. needs_judgment требует рассмотрения, но не классифицирует дефект автоматически. missing_result и not_executed не становятся успешными тестами. Частичный отчёт может сохранять сбои; некорректный ввод остаётся неубедительным и не устанавливает подтверждённое падение теста.

Все оценки сохраняют mode: diagnostics, trusted: false, acceptance: false и intentJudgment: required, включая пакеты только с успешными результатами. observedProducerExit остаётся null. reportedExit необязательной записи производителя — предоставленное заявление; summarizerExitCode парсера — отдельное значение.

Окно терминала
qa_exit=0
bee qa assess --root "$QA_ROOT" --base "$QA_BASE" --head "$QA_HEAD" \
--profile bee-cli --evidence "$QA_BUNDLE/index.json" \
--limit 200 --budget 65536 --json > "$QA_BUNDLE/expanded.json" || qa_exit=$?
test "$qa_exit" -eq 5

--limit допускает 0–200 подробностей; --budget — 2048–65536 кодовых единиц UTF-16 без завершающего перевода строки. Они ограничивают представление после оценки. Проверяйте counts.returned, counts.omitted и counts.textTruncated: более короткий результат не означает меньше обязательств. Расширенный результат примера показывает пропущенные подробности, не меняя решения.

При output_budget_exceeded повторите запрос с большим бюджетом и тем же evidenceIndexSha256; проверьте также манифест исходников и хеши исходных файлов. Сокращённый ответ может явно опускать типы причин. Если исходники или данные изменились, считайте это новой оценкой, а не продолжением прежней. Это повторное изучение, а не кеш результатов.

Храните индекс и файлы вне репозитория как обычные файлы без символических ссылок и компонентов reparse-point в пути. Используйте переносимые относительные пути без .., абсолютных путей и обратных косых черт. Ввод должен быть строгим UTF-8. Индекс допускает до 1 МиБ и 64 файлов; каждый файл — до 16 МиБ, вместе — до 64 МиБ. У снимка исходников и парсеров есть дополнительные ограничения; общее время команды ограничено десятью секундами. Слишком большой, недоступный или меняющийся ввод остаётся явно отмеченным.

source_mismatch означает несовпадение объявленных исходников со снятым содержимым. stale_evidence означает, что объявленное завершение было более 24 часов назад; отсутствующее время остаётся неизвестным, а будущее требует рассмотрения. Старые или несовпадающие наблюдения о сбоях сохраняются, но не доказывают текущий дефект. Поддерживаемой опции для обхода этих границ и выдачи доверия или приёмки нет. Команда не предоставляет запуск и выбор тестов, мутационное тестирование или дополнительные профили backend, Vue и мобильных приложений.

Справочник команд · Заметки beta.15