fix(as-S6): the operator's rulings — sentence tagline, no side stripe, matte dot, stripe on ::before
Operator, 2026-09-28: "go with your recommendations".
- Tagline: 'held for review · wipes in {ttl}h unless kept', mono, muted,
12px, sentence case ("ephemeral" goes, as agreed with booth-dev).
- 'Needs you' rows lose the 3px side stripe; the '? N OPEN' stamp says it.
The flagged filmstrip frame keeps its bottom stripe.
- The brand dot is matte (glow = live power; a live bench keeps its glow).
- Wipe now and the armed bulk delete carry the hazard stripe on a 3px
::before, so the button's own background is honestly what sits under its
text; the stripe renders as before.
Contract: as_antislop S6. Falsifiers: antislop.toml 49/49 proved (S1-S4, S6);
all 12 tables 329/329 proved on this tree.
This commit is contained in:
@@ -329,3 +329,49 @@ file = "booth/templates/base.html"
|
||||
test = "tests/test_antislop_browser.py::test_doc_headings_step_by_size"
|
||||
old = """.markdown-body h3{font-size:1.2em;font-weight:600}"""
|
||||
new = """.markdown-body h3{font-size:1.08em;font-weight:600}"""
|
||||
|
||||
# ---- S6: the operator's rulings
|
||||
|
||||
[[mutation]]
|
||||
label = "S6 the old tagline copy"
|
||||
file = "booth/templates/base.html"
|
||||
test = "tests/test_antislop.py::test_the_tagline_is_a_sentence"
|
||||
old = """ <span class="tagline">held for review · wipes in {{ ttl_hours }}h unless kept</span>"""
|
||||
new = """ <span class="tagline">ephemeral media · auto-wipes {{ ttl_hours }}h · kept boards don't</span>"""
|
||||
|
||||
[[mutation]]
|
||||
label = "S6 the tagline in tracked capitals again"
|
||||
file = "booth/templates/base.html"
|
||||
test = "tests/test_antislop.py::test_the_tagline_is_a_sentence"
|
||||
old = """ .tagline{font-family:var(--font-mono);font-size:var(--size-caption);font-weight:500;color:var(--text-muted)}"""
|
||||
new = """ .tagline{font-family:var(--font-mono);font-size:var(--size-caption);font-weight:500;text-transform:uppercase;color:var(--text-muted)}"""
|
||||
|
||||
[[mutation]]
|
||||
label = "S6 the needs-you side stripe back"
|
||||
file = "booth/templates/base.html"
|
||||
test = "tests/test_antislop.py::test_needs_you_rows_carry_no_side_stripe"
|
||||
old = """ .desk-row.is-needs{box-shadow:var(--shadow-sm)}"""
|
||||
new = """ .desk-row.is-needs{box-shadow:inset 3px 0 0 var(--warning),var(--shadow-sm)}"""
|
||||
|
||||
[[mutation]]
|
||||
label = "S6 the brand dot glows again"
|
||||
file = "booth/templates/base.html"
|
||||
test = "tests/test_antislop.py::test_the_brand_dot_is_matte"
|
||||
old = """ .brand .dot{width:8px;height:8px;border-radius:var(--radius-pill);background:var(--accent)}"""
|
||||
new = """ .brand .dot{width:8px;height:8px;border-radius:var(--radius-pill);background:var(--accent);box-shadow:var(--glow-armed)}"""
|
||||
|
||||
[[mutation]]
|
||||
label = "S6 Wipe now paints the stripe on its own background again"
|
||||
file = "booth/templates/base.html"
|
||||
test = "tests/test_antislop_browser.py::test_the_hazard_stripe_is_a_pseudo_element"
|
||||
old = """ position:relative;overflow:hidden;background:transparent;
|
||||
border:1px solid var(--danger);color:var(--danger-text);-webkit-backdrop-filter:none;backdrop-filter:none}"""
|
||||
new = """ position:relative;overflow:hidden;background:var(--hazard-stripe) top / 100% 3px no-repeat,transparent;
|
||||
border:1px solid var(--danger);color:var(--danger-text);-webkit-backdrop-filter:none;backdrop-filter:none}"""
|
||||
|
||||
[[mutation]]
|
||||
label = "S6 the stripe layer lost (no ::before)"
|
||||
file = "booth/templates/base.html"
|
||||
test = "tests/test_antislop_browser.py::test_the_hazard_stripe_is_a_pseudo_element"
|
||||
old = """ .wipe-lg button::before,.board-del-sel:not(:disabled)::before{content:"";position:absolute;"""
|
||||
new = """ .wipe-lg button::after,.board-del-sel:not(:disabled)::after{content:"";position:absolute;"""
|
||||
|
||||
@@ -283,3 +283,26 @@ def test_the_ask_tag_meets_the_label_floor():
|
||||
i = js.index('".bk-ask-tag{')
|
||||
m = re.search(r"font:\d+ (\d+(?:\.\d+)?)px", js[i:i + 400])
|
||||
assert m and float(m.group(1)) >= 11, m and m.group(0)
|
||||
|
||||
|
||||
|
||||
# ---- S6: the operator's rulings ------------------------------------------------------
|
||||
|
||||
def test_the_tagline_is_a_sentence(client):
|
||||
c, data = client
|
||||
html = c.get("/").text
|
||||
m = re.search(r'<span class="tagline">(.*?)</span>', html, flags=re.S)
|
||||
assert m and _text(m.group(1)) == "held for review · wipes in 24h unless kept", m and m.group(1)
|
||||
# the BASE rule (the phone rule `body.page-stage .topbar .tagline` is S3's)
|
||||
decl = re.search(r"\n\s*\.tagline\{([^}]*)\}", (_T / "base.html").read_text()).group(1)
|
||||
assert "uppercase" not in decl and _px(decl) >= 12, decl
|
||||
|
||||
|
||||
def test_needs_you_rows_carry_no_side_stripe():
|
||||
decl = _rule((_T / "base.html").read_text(), ".desk-row.is-needs")
|
||||
assert "inset" not in decl, decl
|
||||
|
||||
|
||||
def test_the_brand_dot_is_matte():
|
||||
decl = _rule((_T / "base.html").read_text(), ".brand .dot")
|
||||
assert "box-shadow" not in decl, decl
|
||||
|
||||
@@ -154,3 +154,21 @@ def test_doc_headings_step_by_size(browser, live):
|
||||
for lo, hi, name in ((body, h3, "h3:body"), (h3, h2, "h2:h3"), (h2, h1, "h1:h2")):
|
||||
assert hi / lo >= 1.18, f"{name} is {hi / lo:.2f} ({hi}px over {lo}px)"
|
||||
page.close()
|
||||
|
||||
|
||||
|
||||
# ---- S6: the hazard stripe on a pseudo-element -----------------------------------
|
||||
|
||||
def test_the_hazard_stripe_is_a_pseudo_element(browser, live):
|
||||
base, root = live
|
||||
(root / "w").mkdir()
|
||||
(root / "w" / "a.txt").write_text("x")
|
||||
page = browser.new_page(viewport={"width": 1280, "height": 800})
|
||||
page.goto(f"{base}/b/w/", wait_until="load")
|
||||
got = page.locator(".wipe-lg button").evaluate("""b => {
|
||||
const own = getComputedStyle(b), pre = getComputedStyle(b, '::before');
|
||||
return {own: own.backgroundImage, pre: pre.backgroundImage, h: pre.height, content: pre.content};
|
||||
}""")
|
||||
assert got["own"] == "none", f"the button paints its own stripe: {got['own'][:80]}"
|
||||
assert "repeating-linear-gradient" in got["pre"] and got["h"] == "3px" and got["content"] != "none", got
|
||||
page.close()
|
||||
|
||||
Reference in New Issue
Block a user