Files
set50-system/docs/engineering-log.md
2026-08-23 12:38:17 +07:00

3.4 KiB

Engineering Log — SET50 Alternative Data Platform

Current status

Milestone Status Evidence Next action
M0 repo foundation complete Flask API, Vue/Vite shell keep research/paper guardrails
M1 BOT Tourism adapter complete 18 tests, live BOT fetch, raw/snapshot persistence validate multiple vintages
M2 vintage collector complete 25 tests, manifest idempotency, live collector and point-in-time API collect independent releases
M2.3 event-study gate complete/blocked 30 tests, pure engine and truthful 409 readiness API add point-in-time price provider
M2.4 price snapshot adapter complete/blocked 38 tests, live 9-symbol Yahoo snapshot, revised-history gate evaluate point-in-time price source
Tourism deterministic signal complete live foreign-arrivals YoY surprise add occupancy/airport metric
Internal paper ledger complete POST/readback through live API persist in PostgreSQL later
Dashboard complete Vite build + served source check with live-sign copy visual browser capture after permission is available
LLM analysis deferred intentionally no LLM dependency in M0 add after signal lineage is stable
Webhook receiver deferred contract only, no external receiver choose after core app is usable
MT5 bridge deferred not started paper bridge after webhook decision

Guardrails

  • Research and paper modes only.
  • No live orders, external webhook receiver, broker credentials, or MT5 connection.
  • Deterministic signal is authoritative; LLM will remain downstream.
  • Fixture and provisional BOT sources are explicitly labelled; neither is investment-ready without validation.
  • target_weight is recorded in the internal paper ledger; it is not an order.

Verification

  • Backend: 38 unittest tests pass.
  • Independent M1 review: PASSED; no concrete security or logic blockers.
  • Reviewer suggestions: set PAPER_COOKIE_SECURE=1 outside local HTTP; replace in-memory sessions before multi-worker deployment.
  • M1 reviewer backlog: add schema-drift, duplicate/reordered-row, and malformed-vintage regression fixtures.
  • Frontend: npm run build passes with Vite.
  • Backend health endpoint returns HTTP 200 JSON.
  • Dashboard served HTML contains the current title, Vue mount point and Vite entry.
  • Paper ledger POST and readback work through the live API.
  • BOT source live fetch parsed 138 monthly periods and persisted raw HTML plus normalized snapshot.
  • Data-health reports source_mode=bot, status=provisional, and replayable=true.
  • Live vintage replay returned the same theme surprise as the current dashboard summary.
  • Vintage collector preserved one live vintage_id with seen_count=4 and point-in-time API excluded it before published_at.
  • Independent M2 review: PASSED; no concrete security or logic blockers.
  • Event-study readiness gate correctly returns HTTP 409 with 1/12 independent vintages; no backtest result is fabricated.
  • Independent M2.3 review: PASSED; no concrete security or logic blockers.
  • Price snapshot normalized 9 symbols with adjusted close and provider-derived trading dates; quality is explicitly revised_vendor_history and point_in_time=false.
  • Backtest gate requires both independent vintages and point-in-time prices.
  • Independent M2.4 review: PASSED; no concrete security or logic blockers.
  • Browser visual capture was blocked by Chrome remote-debugging permission; no permission dialog was clicked.