re-enable sticky footer + compact CSS — the audit-log I/O was the hang

User confirmed: with the audit-log kill switch (1caedbb) in place,
pages render. So the hang was 100% in the audit-log file writes —
``open()`` blocking on Windows somewhere — not in the chrome
additions disabled during bisection.

Two of those three additions are pure UI and have no filesystem
exposure, so they're safe to re-enable now:

- **Sticky footer**: pure CSS + a components-html iframe whose JS
  appends a div to ``parent.document.body``. No disk touch. The
  user just reported losing the Back-to-Home button to the
  bisection commit — restoring this brings it back.
- **Compact-spacing CSS layer**: gap reductions on stVerticalBlock
  / stHorizontalBlock, slim heading margins, slim hr / caption /
  expander / button / metric padding. Pure CSS.

What stays disabled:

- **Audit-log writes** (``src/audit.py:_DISABLED = True``). Any
  resumption needs an async-write design with a hard timeout so a
  stuck filesystem can't hang the GUI render.
- **Diagnostics sidebar**: it calls ``audit_log_path()`` which
  itself does a ``mkdir()`` — and a hanging mkdir would re-introduce
  the same blank-pages symptom. Will re-enable once the audit log
  is rewritten not to block.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-17 02:22:55 +00:00
parent 36510eee7b
commit 2d2ff43754

View File

@@ -60,29 +60,59 @@ header[data-testid="stHeader"] {
footer {
display: none !important;
}
/* Reclaim top padding lost from hidden header. */
/* Reclaim top padding lost from hidden header. Slim the bottom too —
Streamlit's default leaves several rems below the last widget. */
.stAppViewBlockContainer,
[data-testid="stAppViewBlockContainer"] {
padding-top: 1rem !important;
padding-top: 0.5rem !important;
padding-bottom: 0.75rem !important;
}
/* Scale content to fit app window */
.stApp {
zoom: 0.85;
}
/* ---------- Compact-spacing layer ---------- */
/* Streamlit ships generous vertical rhythm (~1rem gap between every
block, 1.5rem+ above each heading, 1rem on dividers). For a desktop
data app that's a lot of empty space. Tighten the gaps without
making the layout look cramped. */
[data-testid="stVerticalBlock"] { gap: 0.5rem !important; }
[data-testid="stHorizontalBlock"] { gap: 0.5rem !important; }
/* Headings — tighter top space + a hair less below. */
.stApp h1 { margin-top: 0.25rem !important; margin-bottom: 0.5rem !important; }
.stApp h2 { margin-top: 0.5rem !important; margin-bottom: 0.4rem !important; }
.stApp h3 { margin-top: 0.4rem !important; margin-bottom: 0.3rem !important; }
.stApp h4 { margin-top: 0.3rem !important; margin-bottom: 0.25rem !important; }
/* st.divider() — Streamlit's default hr has 1rem above and below. */
[data-testid="stMarkdownContainer"] hr,
hr { margin-top: 0.4rem !important; margin-bottom: 0.4rem !important; }
/* Markdown paragraphs + captions — slim trailing space. */
[data-testid="stMarkdownContainer"] p { margin-bottom: 0.25rem; }
[data-testid="stCaption"],
[data-testid="stCaptionContainer"] { margin-bottom: 0.25rem; }
/* Expander header padding — Streamlit's default is roomy. */
[data-testid="stExpander"] details > summary {
padding-top: 0.35rem;
padding-bottom: 0.35rem;
}
/* Buttons / file-uploader / metric tiles — tighter spacing. */
[data-testid="stButton"],
[data-testid="stDownloadButton"] { margin-top: 0; margin-bottom: 0; }
[data-testid="stFileUploader"] { margin-bottom: 0.25rem; }
[data-testid="stMetric"] {
padding-top: 0.25rem;
padding-bottom: 0.25rem;
}
</style>
"""
# NOTE: The aggressive compact-spacing layer (gap reductions on
# stVerticalBlock / stHorizontalBlock, slim heading margins, slim hr,
# slim caption / expander / button / metric padding) is temporarily
# DISABLED while bisecting the "blank pages" report. The
# ``gap: 0.5rem !important;`` on ``stVerticalBlock`` in particular is
# a known suspect — if Streamlit's vertical container isn't a flex
# layout in the user's Streamlit version, the rule is no-op (harmless)
# but if it interacts badly with overflow rules content can clip.
# Toggle this back on once the user confirms the bare chrome restores
# page rendering.
def hide_streamlit_chrome(*, gate_license: bool = True) -> None:
"""Inject CSS to hide Streamlit's default header, menu, and footer.
@@ -491,23 +521,6 @@ html_download_button = local_download_button
def render_sticky_footer() -> None:
"""TEMPORARILY DISABLED while we bisect the "blank pages" report.
The sticky-footer mechanism (CSS-injection + a components-html
iframe that appends a div to ``window.parent.document.body``) is
the most likely culprit for content disappearing — if either the
CSS or the iframe interacts badly with the user's Streamlit /
Python build, the side effects could be invisible on the
developer machine but page-killing on theirs.
Re-enable by removing this early return once we've confirmed pages
render again with the footer off. The original body is preserved
below so the fix is a one-line revert.
"""
return # noqa: E501 — bisection short-circuit; see commit notes
def _render_sticky_footer_DISABLED() -> None:
"""Slim fixed-position footer at the bottom of the viewport.
Contains a "Back to Home" link that's always visible regardless of