rebuild(stage-11): deliver deterministic heaven workflows

This commit is contained in:
leefer
2026-07-30 07:08:13 +08:00
parent aa3f02bd59
commit 35ae079de7
49 changed files with 7208 additions and 39 deletions
@@ -0,0 +1,53 @@
from __future__ import annotations
import sqlite3
from backend.database.migrations.runner import Migration
def upgrade(connection: sqlite3.Connection) -> None:
connection.execute(
"""
CREATE TABLE heaven_readings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
mode TEXT NOT NULL CHECK (mode IN ('trend', 'fortune', 'heart')),
reading_date TEXT NOT NULL,
subject_key TEXT NOT NULL DEFAULT '',
result_json TEXT NOT NULL,
interpretation TEXT NOT NULL DEFAULT '',
interpretation_status TEXT NOT NULL DEFAULT 'pending' CHECK (
interpretation_status IN ('pending', 'complete', 'stopped', 'error')
),
request_id TEXT REFERENCES llm_requests(id) ON DELETE SET NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
)
"""
)
connection.execute(
"""
CREATE INDEX heaven_readings_scope_idx
ON heaven_readings(user_id, mode, reading_date, id)
"""
)
connection.execute(
"""
CREATE UNIQUE INDEX heaven_fortune_daily_idx
ON heaven_readings(user_id, reading_date)
WHERE mode = 'fortune'
"""
)
def downgrade(connection: sqlite3.Connection) -> None:
connection.execute("DROP TABLE heaven_readings")
MIGRATION = Migration(
version=9,
name="create_heaven_readings",
signature="heaven:v2:account-readings-unique-daily-fortune",
upgrade=upgrade,
downgrade=downgrade,
)
@@ -6,6 +6,7 @@ from backend.database.migrations.m0005_market_insights import MIGRATION as MARKE
from backend.database.migrations.m0006_watchlists import MIGRATION as WATCHLISTS
from backend.database.migrations.m0007_screener import MIGRATION as SCREENER
from backend.database.migrations.m0008_mentor_llm import MIGRATION as MENTOR_LLM
from backend.database.migrations.m0009_heaven import MIGRATION as HEAVEN
from backend.database.migrations.runner import Migration
MIGRATIONS: tuple[Migration, ...] = (
@@ -17,4 +18,5 @@ MIGRATIONS: tuple[Migration, ...] = (
WATCHLISTS,
SCREENER,
MENTOR_LLM,
HEAVEN,
)