fix(chat): keep rectification sessions findable and keep the delivery card
Independent Staging Quality Gate / validate (push) Failing after 6m45s
Independent Staging Quality Gate / publish (push) Skipped

Rectification answers now advance chat_sessions.updated_at (BUG-704).
A ?c= id missing from the loaded page is fetched before anyone may call
it deleted (BUG-705). The range card no longer has a post-card tie-break
button; live questions leave the card visible with adopt locked
(BUG-706/708). Spoken copy bans 相对支持度 (BUG-709).

Task docs assigned 700-704; qizheng already took 700-703.
This commit is contained in:
jesse-ux
2026-09-15 17:10:53 +08:00
parent d3a2c48ba5
commit f51e494c5a
37 changed files with 799 additions and 177 deletions
@@ -1547,3 +1547,22 @@ test("host-fallback phase migration is forward-only and does not rewrite the fro
/answer\.host_fallback/,
);
});
test("rectification activity touches chat_sessions.updated_at without a metadata PATCH", () => {
const filename = "20260915010000_rectification_touch_chat_session.sql";
const touch = readFileSync(
new URL(`../supabase/migrations/${filename}`, import.meta.url),
"utf8",
);
assert.match(touch, /^begin;[\s\S]*^commit;$/m);
assert.equal(
existsSync(fileURLToPath(new URL(`../db/migrations/${filename}`, import.meta.url))),
false,
"business migration must not be copied into frontend/db/migrations (BUG-127/BUG-144)",
);
assert.match(touch, /rectification_touch_chat_session_requires_schema_owner/);
assert.match(touch, /touch_chat_session_from_rectification_case/);
assert.match(touch, /after update of last_activity_at/);
assert.match(touch, /session_type = 'birth_time_rectification'/);
assert.doesNotMatch(touch, /persistSession/);
});