chore: commit remaining workspace updates

Agent:
- lifecycle: run tracking, middleware hardening, langgraph setup
- tests: agent lifecycle + langgraph setup coverage

Backend:
- async_job_runner: resilience hardening, tests
- agent_conversations: run lifecycle integration
- translate: scheduler + orchestrator SQL adjustments
- schemas/services: agent_lifecycle model extensions

Frontend:
- TaskDrawer: UX improvements
- TaskLogPanel/Viewer: safety hardening, i18n (en/ru)
- FilterBar: report filters contract + tests
- Reports page: layout adjustments

Specs:
- 036-agent-test-stabilization: runs contract, modules, events
- 037-superset-baseline-engine: catalog schema, testing API, modules
- 038-dashboard-scenario-model: scenario schema, capture profile, modules
- 039-dashboard-scenario-ui: screen models, release verification UX, modules
- dashboard-verification-usecases: new cross-cutting spec
This commit is contained in:
2026-07-17 19:11:09 +03:00
parent fdb6541372
commit 31b9a19a0c
65 changed files with 2621 additions and 194 deletions

View File

@@ -105,6 +105,47 @@
# @REJECTED Generate arbitrary Playwright/Python code then scan it — scanners cannot prove semantic safety.
# #endregion ScenarioGraph.PackCompiler.Generate
# #region ScenarioGraph.Capture.Dispatch [C:4] [TYPE Function] [SEMANTICS scenario,capture,screenshot,browser]
# @ingroup ScenarioGraph
# @BRIEF Execute screenshot capture steps through the 036 Evidence.Adapter bridge.
# @PRE CaptureSpec is valid; dashboard and environment are accessible.
# @POST ScreenshotEvidence DraftArtifact registered; evidence_captured event emitted.
# @SIDE_EFFECT Browser capture via existing ScreenshotService; draft storage via AgentRuns.Artifacts.Register.
# @DATA_CONTRACT ScreenshotCaptureSpec + AgentRun -> DraftArtifactRef[]
# @RELATION DEPENDS_ON -> [AgentRuns.Evidence.Adapter]
# @INVARIANT Step output refs link to artifact ids, not filesystem paths.
# @TEST_EDGE capture_timeout -> step marked inconclusive; no artifact registered.
# @TEST_EDGE masking_applied -> two artifacts: original + masked; step output refs masked.
# #endregion ScenarioGraph.Capture.Dispatch
# #region ScenarioGraph.Vlm.Analyze [C:4] [TYPE Function] [SEMANTICS scenario,vlm,analysis,finding]
# @ingroup ScenarioGraph
# @BRIEF Submit a masked screenshot to a configured VLM provider and return typed findings.
# @PRE Screenshot artifact is valid (not invalid); VlmAnalysis profile is registered and current.
# @POST Returns typed VlmFinding[] with model/prompt provenance; raw response stored under redaction.
# @SIDE_EFFECT External VLM API call; raw response persisted as separate DraftArtifact.
# @DATA_CONTRACT DraftArtifactRef + VlmAnalysis -> VlmFinding[]
# @INVARIANT VLM findings are advisory observations, not deterministic assertions; they must not alter metric baseline truth.
# @INVARIANT Prompt template version and hash are recorded per analysis; stale prompts block analysis.
# @TEST_EDGE stale_prompt -> 422 with STALE_PROMPT code.
# @TEST_EDGE vlm_timeout -> step inconclusive; existing findings retained.
# @TEST_EDGE empty_response -> findings array empty; step status inconclusive with reason.
# @RATIONALE Typed findings make VLM output auditable and reviewable; raw text would require parsing and is not reproducible.
# @REJECTED Embedding VLM findings directly as assertion results — they are observations for human review, not deterministic pass/fail.
# #endregion ScenarioGraph.Vlm.Analyze
# #region ScenarioGraph.Human.Disposition [C:3] [TYPE Function] [SEMANTICS scenario,human,checkpoint,disposition]
# @ingroup ScenarioGraph
# @BRIEF Record human disposition on one or more VLM findings.
# @PRE Human checkpoint step is active; finding ids are unresolved.
# @POST Each finding disposition is set exactly once; step transitions according to policy.
# @SIDE_EFFECT Audit record of disposition decision.
# @DATA_CONTRACT HumanDispositionRequest -> ScenarioStep (updated)
# @TEST_EDGE double_disposition -> 409.
# @TEST_EDGE disposition_blank -> accepted for dismiss/inconclusive; confirm requires non-blank comment.
# @INVARIANT Disposition never alters the scenario graph structure or step ordering.
# #endregion ScenarioGraph.Human.Disposition
# #region AgentChat.Tools.ScenarioGraph [C:4] [TYPE Module] [SEMANTICS scenario,agent,tools,compiler]
# @defgroup ScenarioGraph Thin agent tools that submit bounded intent and display compiler/validator results.
# @RELATION DEPENDS_ON -> [ScenarioGraph.Api]