wip(394): steps 6+7 — backend path and instruction surfaces
This commit is contained in:
@@ -513,7 +513,7 @@ def _rule_version_rows(rows) -> list[dict]:
|
||||
"id": rv.id, "rule_id": rv.rule_id, "user_id": rv.user_id,
|
||||
"title": rv.title, "statement": rv.statement, "why": rv.why,
|
||||
"how_to_apply": rv.how_to_apply, "when_to_apply": rv.when_to_apply,
|
||||
"tier": rv.tier, "kind": rv.kind, "verify_with": rv.verify_with,
|
||||
"kind": rv.kind, "verify_with": rv.verify_with,
|
||||
"expires_when": rv.expires_when,
|
||||
"created_at": rv.created_at.isoformat(),
|
||||
}
|
||||
@@ -529,7 +529,7 @@ def _rulebook_rows(rows) -> list[dict]:
|
||||
return [
|
||||
{
|
||||
"id": rb.id, "owner_user_id": rb.owner_user_id, "title": rb.title,
|
||||
"description": rb.description, "always_on": rb.always_on,
|
||||
"description": rb.description,
|
||||
"created_at": rb.created_at.isoformat(),
|
||||
"updated_at": rb.updated_at.isoformat(),
|
||||
}
|
||||
@@ -575,7 +575,7 @@ def _rule_rows(rows) -> list[dict]:
|
||||
"id": r.id, "topic_id": r.topic_id, "project_id": r.project_id,
|
||||
"title": r.title, "statement": r.statement, "why": r.why,
|
||||
"how_to_apply": r.how_to_apply, "order_index": r.order_index,
|
||||
"when_to_apply": r.when_to_apply, "tier": r.tier, "kind": r.kind,
|
||||
"when_to_apply": r.when_to_apply, "kind": r.kind,
|
||||
"verify_with": r.verify_with, "expires_when": r.expires_when,
|
||||
"verified_at": r.verified_at.isoformat() if r.verified_at else None,
|
||||
"arose_from_id": r.arose_from_id,
|
||||
@@ -1238,7 +1238,6 @@ async def _restore_v2(data: dict) -> dict:
|
||||
owner_user_id=mapped_uid,
|
||||
title=rb_data.get("title", ""),
|
||||
description=rb_data.get("description", ""),
|
||||
always_on=rb_data.get("always_on", False),
|
||||
created_at=_dt(rb_data.get("created_at")),
|
||||
updated_at=_dt(rb_data.get("updated_at")),
|
||||
)
|
||||
@@ -1279,10 +1278,14 @@ async def _restore_v2(data: dict) -> dict:
|
||||
why=r_data.get("why") or None,
|
||||
how_to_apply=r_data.get("how_to_apply") or None,
|
||||
when_to_apply=r_data.get("when_to_apply") or None,
|
||||
# A file written before migration 0088 has no tier. always_on
|
||||
# A file written before milestone 394 carries `tier` and
|
||||
# `always_on`; neither is read. Dropping a field the schema
|
||||
# no longer has is the tolerant direction — an archive
|
||||
# records what WAS, and refusing it because it remembers a
|
||||
# deleted column would make every pre-394 backup
|
||||
# unrestorable. Previously: always_on
|
||||
# is the pre-0088 behaviour, so an old backup restores rules
|
||||
# that bind exactly as they did when it was taken.
|
||||
tier=r_data.get("tier") or "always_on",
|
||||
# Same shape, same reason: a file written before 0098 has no
|
||||
# kind, and every rule in it was a rule. Defaulting the other
|
||||
# way would restore an old backup with things that had always
|
||||
@@ -1427,7 +1430,6 @@ async def _restore_v2(data: dict) -> dict:
|
||||
why=rv.get("why"),
|
||||
how_to_apply=rv.get("how_to_apply"),
|
||||
when_to_apply=rv.get("when_to_apply"),
|
||||
tier=rv.get("tier"),
|
||||
# NOT defaulted, unlike the rule above. A version records what
|
||||
# was; absent means nobody wrote it down, and inventing "rule"
|
||||
# here would put an artifact where a measurement belongs.
|
||||
|
||||
Reference in New Issue
Block a user