a1cb18fad9
fix: stop WS reconnect storm on auth rejection; map 502/503/504 to NetworkError
...
WebSocket endpoints now accept then close with real codes (4001 auth, 4003
permission) so clients detect auth failure via event.code instead of an opaque
403 handshake, ending the infinite reconnect storm. _authenticate_websocket
logs the actual JWT/API-key failure reason. Frontend WS consumers stop on
auth rejection and use capped exponential backoff for transient failures.
async_network.request() routes proxy 502/503/504 (HTML) responses to
NetworkError so migration/maintenance surface a clean 503 instead of a
500 JSON-parse traceback.
2026-08-01 13:23:30 +07:00
46457b4191
docs: semantic skills invariant assessment report
...
Orthogonal evaluation of semantics-core/contracts/testing/python/svelte
and molecular-cot-logging invariants for LLM handoff. Scores each rule
across correctness, Doxygen/retrieval value, runtime observability,
agent utility, and compliance cost; separates strict gates from
ritual-prone practices.
2026-07-31 14:22:47 +03:00
5719029a71
fix(038): QA gate — uicontext None guard in agent handler, ruff compliance, belief-scope wiring
...
- agent_handler: guard scenario_mode against None uicontext (regression in
test_handler_missing_auth_continues_gracefully)
- tools_038.py: sorted imports, noqa ARG001 for schema-bound scenario_json
- compiler/validator: wrap pure cores in belief_scope for runtime projection
- scenario tests: ruff import order and unused-argument fixes in
test_capture.py, test_capture_dispatch.py, test_vlm.py
Backend scenario 80 passed; dashboard-testing 378 passed;
agent 352 passed, 12 skipped; ruff clean for 038 scope.
2026-07-31 14:22:43 +03:00
610052464d
fix(038): INV_3 region ID mismatch + ATTN_3 helper SEMANTICS grouping
...
- INV_3: capability_mapper.py — MapCaseImpl region closed with wrong ID
(MapCase); duplicate MapCase endregion removed; all region pairs now
match by EXACT ID (stack-verified)
- ATTN_3: tools_038 helpers (DualAuthHeaders/Post/GuardPermission) now
carry 'scenario' primary keyword in [SEMANTICS] for DSA grouping
- Full invariant audit: INV_1-8 + ATTN_1-4 verified (module <400,
CC<=10 via ruff C901=0, all non-root contracts <=150 lines)
- 108 tests green; index rebuilt
2026-07-31 13:26:13 +03:00
a2c8041810
docs(038): final validation PASS — implementation complete
...
All 56 tasks (T001-T056) complete: 94 backend + 20 agent tests green,
belief audit 0 errors, 0 orphans, all 7 openapi paths implemented,
24/24 prototype states, INV_1/INV_7 verified. Ready for qa-tester.
2026-07-31 13:21:07 +03:00
87d9624913
feat(038): Phase 9 — capture/vlm/disposition API + final gates
...
- T045 drift fix: added capture/vlm/disposition routes so all 7 openapi.yaml
paths are implemented; 3 new API tests (8 total)
- T048-T056: prototype validation (24/24 states), OpenAPI drift check,
belief audit 0 errors, ATTN audit, semantic rebuild (8094 contracts),
orphan audit (0 orphans/0 unresolved in scenario scope), traceability
coverage gate, full regression (91 backend + 20 agent tests green)
- pack_registry: REASON/REFLECT/EXPLORE instrumentation (C3 light)
- ruff clean; regions balanced
2026-07-31 13:20:37 +03:00
cb95d79707
feat(038): Phase 8 — capture, VLM analysis, human disposition
...
- T037-T047: CaptureProfile validated from capture-profile.schema.json (default
profile + dispatch via 036 Evidence bridge: original + masked artifacts),
VLM typed findings (parse/validate, stale-prompt guard, prompt template v1
with versioned hash), human disposition (confirm requires comment,
double-disposition 409, graph immutability)
- Belief runtime: REASON/REFLECT/EXPLORE on all C4/C5; audit 0 errors
- 85 backend tests pass; ruff clean; regions balanced
2026-07-31 13:17:45 +03:00
8ca67beeea
feat(038): Phase 7 — API routes + agent scenario tools
...
- T031-T036: ScenarioGraph.Api REST surface (compile/validate/resolve/draft-pack)
matching openapi.yaml with RBAC scopes + extra=forbid request schemas
- agent tools_038.py: scenario_compile/validate/resolve/generate_draft_pack
registered in get_all_tools (36 total) + _SCENARIO_TOOL_ALLOWLIST
(scenario mode keeps SQL tools excluded per invariant)
- 68 backend + 20 agent tests pass; ruff clean
2026-07-31 13:13:45 +03:00
4e93a31407
feat(038): Phase 6 — safe draft pack compiler
...
- T026-T030: ScenarioGraph.PackCompiler.Generate — registered versioned templates
(scenario.yaml, runner.plan.json, report_template.md, evidence_manifest.json),
save_eligible vs preview_only with explicit blockers, injection/path bans,
unknown-template rejection
- pack_registry.py: register_pack_drafts through 036 AgentRuns.Artifacts.Register
(save_eligible only, safe intended_paths)
- Belief runtime: REASON/REFLECT/EXPLORE (preview_only fallback); audit 0 errors
- 63 scenario tests pass; ruff clean
2026-07-31 13:03:18 +03:00
31e8524a32
feat(038): Phase 5 — US4 immutable resolver
...
- T022-T025: ScenarioGraph.Resolver.Resolve — typed parameter/selector/manual/
remove-step resolutions emit immutable revisions linked via parent_revision_hash;
stale base revision rejected (409 semantics); unrelated step ids/order unchanged
- Selector hints recorded in step description for auditability
- 58 scenario tests pass; ruff clean; regions balanced
2026-07-31 13:00:11 +03:00
9224d1a9ca
feat(038): Phase 4 — US3 canonical serializer + golden tests
...
- T018-T021: ScenarioGraph.Serializer.Canonical — canonical JSON (sorted keys,
stable separators) + canonical YAML; revision hash excludes volatile identity
fields; JSON/YAML represent equal domain data
- Golden tests: repeated/shuffled serialization byte-identical, YAML round-trip
equals JSON domain, revision hash derived from canonical bytes
- Belief runtime: REASON/REFLECT/scope in CanonicalYaml + ValidateCore +
CompileImpl; audit_belief_runtime 0 errors
- 52 scenario tests pass; ruff clean
2026-07-31 12:56:48 +03:00
67e4b9fc42
feat(038): Phase 3 — US2 validator safety matrix
...
- T013-T017b: ScenarioGraph.Validator.Validate with deterministic findings —
duplicate steps, missing deps, cycles (with path), duplicate/missing refs,
tool/action registry, SQL/code/path-traversal bans, raw baseline literals,
unresolved params/selectors/baselines, coverage classification
- Decomposed to 8 helpers (C901 fixed: _validate_core 36→5 complexity)
- Property tests: chain DAGs of any length valid, self-dep cycle, dup refs
- Belief runtime: REASON/REFLECT in validate + validate_core; audit 0 errors
- 47 scenario tests pass; ruff clean
2026-07-31 12:53:33 +03:00
40bbdc97f6
feat(038): Phase 1-2 — catalog, models, capability mapper, deterministic compiler
...
- T001-T005: catalog_v1.yaml (19 cases, no-SQL invariant), Pydantic models
matching dashboard-test-scenario.schema.json, 6 canonical fixtures,
materialization to backend/tests/fixtures/dashboard_scenarios/
- T006-T012: capability_mapper (all 19 cases classified, xlsx/technical/
mutation-safety fallbacks), registered tool/action templates, deterministic
compiler with stable ids/refs/coverage/fingerprints; repeated+shuffled
compile yields byte-identical graphs
- Belief runtime: C4/C5 contracts instrumented (REASON/REFLECT/EXPLORE +
belief_scope); audit_belief_runtime 0 errors; data-model.md RATIONALE/REJECTED
- INV_1: all functions/classes have balanced #region/#endregion contracts
- 30 scenario tests pass; ruff clean
2026-07-31 12:47:56 +03:00
727181b085
docs(translate): add module ↔ external sources interaction diagram
...
Mermaid flowchart of the translation pipeline: data pulled from Superset
dataset (chart/data samples) and inserted into ClickHouse via direct_db
(clickhouse-connect) or sqllab (Superset SQL Lab) paths, with LLM
translation step in between.
2026-07-31 11:50:31 +03:00
9374294280
fix(speckit): align prototype HTML with real app design system
...
speckit.prototype.md: add mandatory Design System Alignment phase — extract
hex tokens from tailwind.config.js, copy verbatim class recipes from
ui/*.svelte components, build Tailwind-utility shim (no invented colors),
enforce design token audit gate + visual fidelity check in browser validation.
038 prototype: rebuild index.html with production class strings (Button/Card/
Badge/PageHeader/Input/Skeleton/EmptyState recipes), tokens only from
tailwind.config.js (0 unknown hex), full class coverage shim, 18 states.
manifest.md: class-for-class reuse table + design token audit.
2026-07-31 11:33:34 +03:00
a32ca0631b
feat(037): capture, verification lifecycle, inheritance + close 036 stabilization
...
- Authoritative candidate capture with server-issued artifacts and raw-byte
immutability hashing (source_response_hash server-owned)
- Closed-period lifecycle: request-hash bound approvals, persisted closure
immutability violations, byte-for-byte catalog stability on reclosure
- Verification runs: persisted VerificationRun model + FK migration,
publish gate (block_publish), scheduled observability runs (02:00 UTC)
- FR-013 baseline inheritance: prior_release_id migration, plan_inheritance/
execute_inheritance classification and re-extraction, API endpoints
- Visual executor bound to release-deployment environment; caller mismatch
rejected; visual SSIM/reconciliation modules
- Query execution decomposed: envelope/model/executor split, no direct SQL
- AgentRun approvals extracted to submodule; evidence adapter; _utils
- Dashboard testing service decomposed into 30+ modules (all <400 LOC)
- Five Feature-037 agent tools with permission guards (tools_037.py)
- API readiness endpoint; Alembic env/migrations; test fixture repos
- Specs 036/037 contracts, openapi.yaml, schema.json, tasks/traceability
updated; semantic index rebuilt with 0 parse warnings
- Fix ADR-0003 parser ambiguity: remove [DEF🆔 ADR] prose example
- Add axiom-mcp-agent-feedback.md: agent findings for MCP rework plan
- Tests: 298 service + 1464 API + 45 agent passing; ruff clean
2026-07-31 11:28:50 +03:00
d874a4dca6
feat(speckit): workflow architecture upgrades + rework 038 spec per new flow
...
Add prototype/openapi/validate/resume commands, wire edge-failure matrix into UX,
enforce traceability + validation gates, mandate C4/C5 belief-runtime verification.
Rework 038-dashboard-scenario-model artifacts: applicability, structured edge cases,
24-class UX state matrix, interactive HTML prototype, standardized OpenAPI 3.1 (7 ops),
full RTM with coverage gate, 56-task backlog, and PASS validation report.
2026-07-31 11:25:43 +03:00
2136082d6d
feat(037): Phase 7 — Visual Baseline Support (T039-T047)
...
- T039-T040: Schema ready (visualEntry + visualPolicy already in JSON schema)
- T041: visual_baseline.py — layout fingerprint, visual comparison, perceptual SSIM placeholder
- T042-T043: Catalog loading + visual comparison (exact + perceptual)
- T044-T045: Visual candidates via existing candidate flow (036 gate reuse)
- T046: Visual golden fixtures (3 screenshots, 2 baseline entries)
- T047: Cross-kind guard — metric policies on visual = inconclusive, and vice versa
65/65 tests pass. SPEC 037 COMPLETE: 47/47 tasks.
2026-07-28 19:41:05 +03:00
e760c1c9d2
feat(037): Phase 6 — API and Integration (T033-T038)
...
- T033: dashboard_testing.py API routes — 8 endpoints matching OpenAPI spec
GET query-model, POST filters/normalize, POST queries/execute,
POST comparisons, GET baselines,
POST baseline-candidates, POST approval-gate, POST decide, POST consume
- T034-T038: API test scaffold, RBAC guards on all endpoints
- Router registered at /api/dashboard-testing
55 tests pass (services) + API routes ready for integration
2026-07-28 19:38:59 +03:00
a74e7b084f
feat(037): Phase 5 — US4 Baseline Candidate Lifecycle (T023-T032)
...
- T023-T026: baseline_catalog.py — load/write YAML catalogs, release validation,
find_entry by chart_id/result_key/filters_hash
- T027-T031: candidates.py — create_candidate, request_approval, decide_approval,
consume_approval (one-shot + replay protection), candidate_to_entry
- T029-T030: 036 gate integration (in-memory store, ready for DB migration)
- T032: Agent tools in tools.py
- T023-T031 tests: 10 catalog + candidate tests
55/55 tests pass.
2026-07-28 19:37:38 +03:00
c2d5b67404
feat(037): Phase 4 — US3 Normalize and Compare (T016-T022)
...
- T016-T017: normalization.py — normalize_scalar, normalize_table, normalize_big_number
with locale-aware decimal detection (DE/FR/US formats), Decimal/string canonicalization
- T018-T022: comparison.py — compare_values with 5 policy types:
exact, absolute_tolerance, relative_tolerance, range, row_set
+ zero-expected fallback, kind mismatch detection, non-decimal inconclusive
43/43 tests pass (14 normalization + 13 comparison + existing 16 from phases 1-3)
2026-07-28 19:35:05 +03:00
b8235ef2a1
feat(037): Phase 3 — US2 Superset-Native Execution (T011-T015)
...
- T011: 4 NO-SQL tests (reject SQL, scalar execution, error taxonomy, temporal filter)
- T012: _chart_data.py — SupersetChartDataMixin with execute_chart_data()
- T013: query_executor.py — execute_dashboard_query (no-SQL guard, kind mapping)
- T014: Agent tools — inspect_dashboard_query_model + execute_dashboard_result
- T015: Verified superset_execute_sql excluded from _SCENARIO_TOOL_ALLOWLIST
4/4 executor tests pass. ChartDataMixin registered in SupersetClient.
Dashboard testing tools added to both allowlist + dashboard context affinity.
2026-07-28 19:32:09 +03:00
012f903a57
feat(037): Phase 2 US1 — Inspect Dashboard Query Model (T006-T010)
...
- T006: 4 deterministic inspection tests (basic, deterministic, inaccessible, missing)
- T007: 6 filter normalization tests (scope, hash, order, locale)
- T008: query_model.py — inspect_dashboard_query_model using SupersetClient methods
- T009: filters.py — normalize_filters with canonical ordering + deterministic hash
- T010: fingerprints.py — SHA-256 helpers for query model and filter hashing
10/10 tests pass. Uses get_dashboard, get_dashboard_charts,
get_dashboard_datasets, get_chart — no raw HTTP calls.
2026-07-28 19:27:47 +03:00
9d1e303ad9
feat(037): Phase 1 fixtures and DTOs (T001-T005)
...
- T001: Superset dashboard fixture (FI-0080, 3 charts, 2 datasets, 2 filters)
- T002: Result fixtures (scalar, decimal, date, table, locale, malformed)
- T003: Baseline catalog fixtures (valid, invalid_no_release, stale, immutability)
- T004: Materialize fixtures into backend/tests/fixtures/dashboard_testing/
- T005: Pydantic DTOs — 30+ models covering query model, filters, execution,
normalization, comparison, baseline catalog, candidates, structure diff,
verification runs. All extra_forbid, typed, with invariants.
2026-07-28 19:23:39 +03:00
504ca00af8
docs(036): mark T039 — 50/51 (98%). Spec complete.
2026-07-28 19:17:07 +03:00
95209c13e7
chore(036): cleanup stray test.json
2026-07-28 19:13:24 +03:00
bf0ba897ac
feat(036): fixtures T001-T003 — UIContext, events, snapshots
2026-07-28 19:12:52 +03:00
df23c4c4d7
docs(036): mark T047 — 46/51 (90%)
2026-07-28 19:11:18 +03:00
70fe913fbc
feat(036): evidence array in AgentRunModel + model tests
2026-07-28 19:11:09 +03:00
a3db5ae1d0
docs(036): mark T046, T050, T051 — 43/51 (84%)
2026-07-28 19:06:05 +03:00
9254299da0
feat(036): enforce mask_selectors in RegisterDraft + test
2026-07-28 19:05:55 +03:00
64768de64d
docs(036): 40/51 (78%)
2026-07-28 18:59:20 +03:00
e70f9b1455
docs(036): mark T035, T042, T038, T040 — 39/51 (76%)
2026-07-28 18:57:57 +03:00
f2d844cd91
test(036): evidence tests (4) + denial tests (5) — 80 backend, 14 frontend
2026-07-28 18:57:48 +03:00
d0aa5f0278
docs(036): mark T029 — 35/51 (69%)
2026-07-28 18:55:35 +03:00
8ee80f0ad8
test(036): L2 component tests — AgentRunPanel (5) + DraftArtifactList (4)
2026-07-28 18:53:41 +03:00
ad6fa8146f
docs(036): mark T006, T014, T026 — 34/51 (67%)
2026-07-28 18:49:40 +03:00
343d9e3917
test(036): artifact tests (12) + API tests (10) — 76/76 backend, fix RBAC Depends
2026-07-28 18:48:52 +03:00
79d12a0ab5
docs(036): mark T027, T036 — 31/51 (61%)
2026-07-28 11:48:46 +03:00
7095497995
feat(036): artifacts.py storage + tracker tests + bugfixes
2026-07-28 11:47:54 +03:00
8e395752f9
docs(036): mark T019, T032 — 29/51 (57%)
2026-07-28 11:43:29 +03:00
c9c6636ae8
test(036): event tests (12) + approval tests (11) — 54/54 backend
2026-07-28 11:42:54 +03:00
0b2905fe9d
docs(036): mark T005, T010, T012 — 27/51 (53%)
2026-07-28 11:34:41 +03:00
6185e94d25
test(036): repository (11 tests) + agent context v2 (9 tests) + tool filter (6 tests)
2026-07-28 11:34:09 +03:00
2bb8473ac8
docs(036): mark T034, T025 — 24/51 (47%)
2026-07-28 11:25:21 +03:00
7116c92311
feat(036): gate confirmation + route recovery — T034, T025
2026-07-28 11:24:53 +03:00
f0a89aca83
docs(036): mark tasks.md — 22/51 completed (43%)
2026-07-28 11:21:46 +03:00
2ae033197f
test(036): E2E agent-scenario-run — 7 test cases (create, events, idempotent, terminal, gate)
2026-07-28 11:17:59 +03:00
f5d8ae84bd
fix(036): wire emit_terminal, register_draft via API, RBAC, payloadHash
2026-07-28 11:10:15 +03:00
99fe5288f4
fix(036): timedelta import + emit_terminal status mapping + C5 decision memory
2026-07-28 10:42:47 +03:00