{"ok":true,"report":{"generated_at":"2026-11-10T16:32:24.006Z","build":"hub_stage_F6_system_hardening_qa_v1","stage_key":"F6-safe-v1","stage_title":"System Hardening / Diagnostics / QA Layer","baseline_from":"hub_stage_F5_transition_audit_safe_v1","overall_status":"danger","issue_count":1,"data_mutation":false,"schema_changes":false,"api_contract_changes":false,"visual_changes":false,"next_recommended_stage":"F7-safe-v1 — Global Visual System Unification после ручного smoke-теста F6.","sections":{"upstream_audits":{"key":"upstream_audits","label":"Upstream Audit Availability","status":"ok","total_count":2,"ok_count":2,"warning_count":0,"error_count":0,"checks":[{"key":"qa-upstream-hardening","label":"Hardening summary доступен","ok":true,"severity":"error","detail":"Hardening status: warn, issues: 1","meta":null},{"key":"qa-upstream-transition","label":"Transition audit доступен","ok":true,"severity":"warn","detail":"Transition status: ready, issues: 1","meta":null}],"hardening_summary":{"overall_status":"warn","issue_count":1},"transition_audit":{"overall_status":"ready","issue_count":1,"stage_key":"F5-safe-v1"}},"qa_endpoints":{"key":"qa_endpoints","label":"F6 Endpoint Readiness","status":"ok","total_count":5,"ok_count":5,"warning_count":0,"error_count":0,"checks":[{"key":"qa-endpoint:health","label":"Health endpoint (GET /health)","ok":true,"severity":"error","detail":"Критические зависимости endpoint-а доступны.","meta":null},{"key":"qa-endpoint:integrations-diagnostics","label":"Integration diagnostics (GET /api/integrations/diagnostics)","ok":true,"severity":"error","detail":"Критические зависимости endpoint-а доступны.","meta":null},{"key":"qa-endpoint:hardening-report","label":"Hardening report (GET /api/system/hardening/report)","ok":true,"severity":"error","detail":"Критические зависимости endpoint-а доступны.","meta":null},{"key":"qa-endpoint:transition-audit","label":"Transition audit (GET /api/system/transition-audit)","ok":true,"severity":"error","detail":"Критические зависимости endpoint-а доступны.","meta":null},{"key":"qa-endpoint:qa-report","label":"F6 QA report (GET /api/system/qa-report)","ok":true,"severity":"error","detail":"Критические зависимости endpoint-а доступны.","meta":null}],"endpoint_count":5},"protected_flows":{"key":"protected_flows","label":"Protected Flow Guards","status":"ok","total_count":6,"ok_count":6,"warning_count":0,"error_count":0,"checks":[{"key":"qa-flow:ai-triage-manual-apply","label":"AI Triage: run/apply разделены","ok":true,"severity":"error","detail":"AI-run и AI-apply остаются отдельными функциями; применение только вручную.","meta":null},{"key":"qa-flow:ai-workbench-manual-apply","label":"AI Workbench: run/apply разделены","ok":true,"severity":"error","detail":"AI Workbench не должен автоматически менять запись после run.","meta":null},{"key":"qa-flow:ai-review-manual-apply","label":"AI Review: run/apply разделены","ok":true,"severity":"error","detail":"AI Review / Resurfacing остаётся ручным apply-flow.","meta":null},{"key":"qa-flow:planner-controlled-export","label":"Planner Bridge: controlled export","ok":true,"severity":"error","detail":"Передача в Planner запускается только явным действием пользователя.","meta":null},{"key":"qa-flow:settings-server-truth","label":"Settings: server-truth save flow","ok":true,"severity":"error","detail":"Настройки читаются и сохраняются через серверные функции, без удаления старого flow.","meta":null},{"key":"qa-flow:page-guard","label":"Page-level render guard","ok":true,"severity":"error","detail":"Если страница падает при render, общий shell должен оставаться доступным.","meta":null}],"protected_flow_count":6},"route_coverage":{"key":"route_coverage","label":"Route Coverage Manifest","status":"ok","total_count":7,"ok_count":7,"warning_count":0,"error_count":0,"checks":[{"key":"qa-route-group:core_routes","label":"Route group: core_routes","ok":true,"severity":"warn","detail":"Маршрутов в группе: 5.","meta":{"routes":["/home","/inbox","/hub","/workbench","/review"]}},{"key":"qa-route-group:studio_routes","label":"Route group: studio_routes","ok":true,"severity":"warn","detail":"Маршрутов в группе: 6.","meta":{"routes":["/topic-workbench","/workbench/topic","/ai-triage","/ai-workbench","/ai-review","/ai-resurfacing"]}},{"key":"qa-route-group:secondary_routes","label":"Route group: secondary_routes","ok":true,"severity":"warn","detail":"Маршрутов в группе: 7.","meta":{"routes":["/relations","/outputs","/output","/gtd","/gtd-operational","/planner-bridge","/planner"]}},{"key":"qa-route-group:system_routes","label":"Route group: system_routes","ok":true,"severity":"warn","detail":"Маршрутов в группе: 7.","meta":{"routes":["/settings","/system","/auth","/health","/api/system/hardening/report","/api/system/transition-audit","/api/system/qa-report"]}},{"key":"qa-route-group:legacy_routes","label":"Route group: legacy_routes","ok":true,"severity":"warn","detail":"Маршрутов в группе: 16.","meta":{"routes":["/control","/today","/types","/hub-notes","/board","/focus","/reviews","/sources","/collections","/archive","/materials","/dashboard","/ai-control","/themes","/center","/analytics"]}},{"key":"qa-route-duplicates","label":"Дубли в route manifest","ok":true,"severity":"warn","detail":"Дублей в manifest нет.","meta":null},{"key":"qa-route-qa-report-listed","label":"F6 QA route listed","ok":true,"severity":"warn","detail":"F6 endpoint добавлен в system route manifest.","meta":null}],"route_count":41,"route_group_count":5,"duplicate_routes":[]},"client_markers":{"key":"client_markers","label":"Client Marker QA","status":"danger","total_count":6,"ok_count":5,"warning_count":0,"error_count":1,"checks":[{"key":"qa-client-renderer:settings-client-hardening","label":"Settings client hardening markers — renderer","ok":true,"severity":"error","detail":"Renderer доступен.","meta":null},{"key":"qa-client-markers:settings-client-hardening","label":"Settings client hardening markers — markers","ok":false,"severity":"error","detail":"Не хватает маркеров: function setModularStatus, function normalizeInterfaceModeForSave","meta":{"path":"/settings","html_length":345297,"missing_markers":["function setModularStatus","function normalizeInterfaceModeForSave"]}},{"key":"qa-client-renderer:system-diagnostics-links","label":"System diagnostics links — renderer","ok":true,"severity":"warn","detail":"Renderer доступен.","meta":null},{"key":"qa-client-markers:system-diagnostics-links","label":"System diagnostics links — markers","ok":true,"severity":"warn","detail":"Все критические client-маркеры найдены.","meta":{"path":"/system","html_length":2639,"missing_markers":[]}},{"key":"qa-client-renderer:drawer-client-markers","label":"Drawer client markers — renderer","ok":true,"severity":"warn","detail":"Renderer доступен.","meta":null},{"key":"qa-client-markers:drawer-client-markers","label":"Drawer client markers — markers","ok":true,"severity":"warn","detail":"Все критические client-маркеры найдены.","meta":{"path":"/today","html_length":421240,"missing_markers":[]}}],"marker_results":[{"key":"settings-client-hardening","path":"/settings","ok":false,"html_length":345297,"missing_markers":["function setModularStatus","function normalizeInterfaceModeForSave"]},{"key":"system-diagnostics-links","path":"/system","ok":true,"html_length":2639,"missing_markers":[]},{"key":"drawer-client-markers","path":"/today","ok":true,"html_length":421240,"missing_markers":[]}],"summary_only":false}},"summary_only":false,"manual_smoke_tests":[{"key":"home","path":"/home","expected":"Command Center открывается, карточки и очереди не ломают shell."},{"key":"inbox","path":"/inbox","expected":"Quick Capture, новые входящие и triage-очереди доступны."},{"key":"hub","path":"/hub","expected":"Библиотека записей открывается, фильтры не ломают список."},{"key":"workbench","path":"/workbench","expected":"Studio Workbench открывается без влияния на AI Workbench."},{"key":"topic-workbench","path":"/topic-workbench","expected":"Topic Workbench открывается, route alias /workbench/topic сохраняется."},{"key":"review","path":"/review","expected":"Review System открывается, legacy /reviews остаётся доступным."},{"key":"relations","path":"/relations","expected":"Relations Layer открывается, legacy themes не удалены."},{"key":"outputs","path":"/outputs","expected":"Output Layer открывается, candidates можно просматривать."},{"key":"gtd","path":"/gtd","expected":"GTD Operational Layer открывается, bucket/context filters доступны."},{"key":"planner-bridge","path":"/planner-bridge","expected":"Экспорт не запускается автоматически."},{"key":"ai-triage","path":"/ai-triage","expected":"AI Triage работает в ручном apply-flow."},{"key":"ai-workbench","path":"/ai-workbench","expected":"AI Workbench остаётся изолированным экраном."},{"key":"ai-review","path":"/ai-review","expected":"AI Review / Resurfacing открывается и не применяет изменения автоматически."},{"key":"settings","path":"/settings","expected":"Settings открываются, сохранение modular settings не падает."},{"key":"system","path":"/system","expected":"System открывается, hardening JSON и transition audit доступны."},{"key":"transition-audit-api","path":"/api/system/transition-audit","expected":"Возвращает JSON baseline-аудита F5."},{"key":"hardening-api","path":"/api/system/hardening/report?mode=summary","expected":"Возвращает summary hardening-аудита без изменения данных."},{"key":"qa-report-api","path":"/api/system/qa-report?mode=summary","expected":"Возвращает F6 QA-readiness report без изменения данных."}],"protected_rules":["Не удалять legacy routes без прямого разрешения.","Не менять D1 schema в F5.","Не менять API-контракты в F5.","Не менять AI apply-flow в F5.","Не менять Planner Bridge export semantics в F5.","Не менять settings save flow в F5."]},"build":"hub_stage_F6_system_hardening_qa_v1"}