"""Unit: phase-66 text pins — the History tab describes the auto-save model, not the retired Save button. House pattern (``test_stale_ui_copy.py``): read ``frontend/history.html`` as text and assert substrings — no browser. The browser-visible layer is gated by the dedicated story suite (``tests/e2e/test_history_copy.py``); these pins catch a silent regression in the template without it. Locked decision (owner-locked A3, 2026-09-01): every conversation saves itself automatically — there is NO Save button (retired phase 55, owner- locked A2, pinned by ``test_save_share_ux.py::test_anonymous_auto_save``), so no user-visible History-tab string may name one. """ from __future__ import annotations import re from pathlib import Path FRONTEND = Path(__file__).resolve().parents[2] / "frontend" # --- the locked auto-save copy (owner-locked A3) ----------------------- META = "Saved chats — every conversation is saved automatically, one click back." PAGE_SUB = ( "Every conversation is saved automatically — newest activity first. " "Click a title to return to that chat." ) EMPTY_ROW = "No saved chats yet — start a conversation and it will be saved automatically." # --- the retired manual-save copy (must be nowhere) -------------------- OLD_META = "every conversation you saved" OLD_PAGE_SUB = "you pressed Save" OLD_EMPTY_ROW = "press Save in the chat" # --- state-language survivors (must STAY — "saved" is a state, not a # button; their absence would prove over-deletion) ------------------ STATE_STRINGS = ( "