Replacing the page hides the forum's own trail along with everything else,
so a thread became a dead end: the only ways back to the parent forum were
the browser's back button or editing the URL by hand. Deep in a long thread
neither is workable.
The bar has to be fixed rather than sticky. The view root carries
overflow:hidden to contain phantom horizontal overflow, which would make it
the scrollport a sticky bar sticks to — one that never scrolls. Its top
clearance hangs off a body class so pages without a trail keep their full
height instead of an empty strip.
Board index still leads to a page the script does not rebuild; that would
need a forum overview of its own.
Debug flag off for daily use.
The list script matched the whole forum, thread pages included, and injected its
stylesheet there before bailing out of its own build. Both stylesheets were
therefore live on every thread, and rules sharing a class name resolved by
userscript load order rather than by intent — a layout that could differ between
two machines with the same files installed. One of those clashes was already
costing the clearance behind the fixed bar.
A single script picks its view from the page type instead, which turns the
shared class namespace from a hazard into a plain fact of the file, resolved
with a modifier on the root element. Pages outside either view now stay
untouched, where before they still received a full stylesheet.
Two things the merge brought to light: the global image rule was overriding the
avatar dimensions, which only went unnoticed because square avatars happen to
scale to the same result, and a zero-width space had been sitting in the source
as a literal character rather than an escape.
Installations carrying the old thread script have to remove it; the remaining
one keeps its name and updates in place.
Claude-Session: https://claude.ai/code/session_0158owAAsXAfFiT3hGkQt1Xk
The project instructions describe testing against a saved forum page without
mentioning that the ignore rules exclude it. A fresh clone therefore has no
fixture, and obtaining one requires a logged-in session — not something that
becomes apparent from a missing file alone.
Claude-Session: https://claude.ai/code/session_0158owAAsXAfFiT3hGkQt1Xk
Line endings were left to whatever core.autocrlf each machine happens to be
configured with. On a second machine that alone is enough to present every
tracked file as modified, burying real changes in noise. The index already
holds LF, so nothing needs renormalizing.
Claude-Session: https://claude.ai/code/session_0158owAAsXAfFiT3hGkQt1Xk
Several traits of this codebase cost time to rediscover and are invisible in
the source: both scripts share a stylesheet namespace on thread pages, the page
indicator in the forum markup is split across inline tags so searching the raw
HTML for it comes up empty, and anything appended to the body has to come after
the original content is hidden.
The file also records the throwaway jsdom harness used to check the thread
script against a saved page, since the project deliberately carries no test
dependencies and the setup is easy to get wrong.
Claude-Session: https://claude.ai/code/session_0158owAAsXAfFiT3hGkQt1Xk
Threads on this forum reach four-digit page counts, and stepping one page at a
time was the only movement the navigation bar offered. The end of a thread, or
any specific page, was effectively unreachable on a phone.
Jump targets are derived arithmetically from the forum's own page size instead
of read from the rendered pagination, because phpBB never renders more than a
handful of page links regardless of thread length. Where that page size cannot
be determined, the bar falls back to the links the forum itself provides and
hides the jump.
Both userscripts inject their stylesheet on thread pages, so class names are a
shared namespace between them. The new ones avoid the two the list view already
uses, which would otherwise collide at equal specificity and resolve by load
order.
Claude-Session: https://claude.ai/code/session_0158owAAsXAfFiT3hGkQt1Xk
The forum nests each post body inside its own table, so ascending to the
nearest enclosing row stopped within that inner table rather than at the
actual post row. The author and profile columns were never in scope, and
every post silently degraded to the placeholder name and the generated
initial avatar instead of the real ones.
Author lookup additionally keyed on a profile link attribute this forum
does not emit at all, so even a correct row would have yielded nothing.
Both conditions failed quietly, which made the result look like a styling
problem rather than a broken DOM traversal.