Drop the eight legacy columns SP8 left behind
Migrations 66 to 73 drop `actions.index`, `variants`, `variant_index`, `variant_count`, `state_before`, and `world_state_before`, plus `adventures.memory_cursor` and `summary_cursor`. `index` is a keyword in SQLite, so migration 71 quotes it. Nothing outside the migrations read these. `models.py`, `schemas.py`, and `ACTION_LIST_COLUMNS` lose the same eight fields, `Adventure.actions` orders by `id`, and `attempts.renumber`, `context.history.max_action_index`, and `nodes.next_index` are deleted. Two changes keep the migration replayable on a `create_all` database: - `_split_variants_into_siblings` wrote through the live ORM table, so it stopped compiling once migration 66 removed five of its columns. It now writes through `_ACTIONS_AT_60`, a frozen `Table` with its own `MetaData`. - Five data passes read columns these migrations drop. Each now calls `_has_columns` and returns early when the columns are absent. `bootstrap` takes a `through` version so a migration test can stop at the schema it asserts on. 555 tests pass, up from 549. Eight of the new cases assert each column is gone after a real schema-45 database migrates all the way. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0198qDK3gmgSo7EtQ4GTPqqK
This commit is contained in:
committed by
Parth
co-authored by
Claude Opus 5
parent
e0bf2b61d9
commit
f1bebe18d0
@@ -64,7 +64,6 @@ def make_branch(db, adventure, parent=None, fork_depth=None):
|
||||
def add_node(db, adventure, branch, depth, label, index=None):
|
||||
action = models.Action(
|
||||
adventure_id=adventure.id,
|
||||
index=depth if index is None else index,
|
||||
branch_id=branch.id,
|
||||
depth=depth,
|
||||
type="start" if depth == 0 else ("ai" if depth % 2 else "do"),
|
||||
@@ -328,13 +327,16 @@ def test_a_node_written_without_a_branch_is_placed_anyway(forked):
|
||||
"""
|
||||
db, adventure, ids = forked
|
||||
written = models.Action(
|
||||
adventure_id=adventure.id, index=99, type="do", text="C8"
|
||||
adventure_id=adventure.id, type="do", text="C8"
|
||||
)
|
||||
db.add(written)
|
||||
db.commit()
|
||||
assert written.branch_id == ids["c"]
|
||||
assert written.depth == 99
|
||||
assert adventure.head_depth == 99
|
||||
# The node lands one step past the tip of C. SP8 dropped `index`, which is
|
||||
# where a caller used to name its own depth, so an unplaced node now always
|
||||
# follows the head.
|
||||
assert written.depth == adventure.head_depth
|
||||
assert adventure.head_depth == 8
|
||||
assert labels(history.tail(adventure, 2)) == ["C7", "C8"]
|
||||
|
||||
|
||||
@@ -362,7 +364,7 @@ def test_placing_a_flush_of_nodes_reads_the_branch_once(forked, emitted_sql):
|
||||
emitted_sql.clear()
|
||||
for i in range(50):
|
||||
db.add(models.Action(
|
||||
adventure_id=adventure.id, index=500 + i, type="do", text=f"bulk {i}"
|
||||
adventure_id=adventure.id, type="do", text=f"bulk {i}"
|
||||
))
|
||||
db.commit()
|
||||
branch_reads = [s for s in emitted_sql if s.startswith("SELECT") and "FROM branches" in s]
|
||||
|
||||
Reference in New Issue
Block a user