v8.1 is closed out. Named a "bug exposing release" deliberately — most of this session was firefighting rather than planned feature work, but it's worth being proud of later specifically for the interoperability work it forced across Live/Dev × main/smf20. The zip Andrew uploaded this session (labeled v8.0 at upload time) is being treated as the actual v8.2 baseline going forward, not v8.1. Andrew is handling version numbering himself from here.
Testing ISE end-to-end from Dev (not just Live) for the first time in a while surfaced several independent dormant issues in one sitting — not a cascade, just several things finally getting exercised together:
.htaccess across the tree (The_ISE_Project, smf20/pdfjs, top-level pdfjs) was missing on Dev only. Caused the original qf_search_bridge.php 404 (access-control .htaccess absent → default-deny) and a PDF.js .mjs MIME error. Fixed by copying Live's .htaccess files over — not yet fixed at the sync-script level; mirror.sh still needs a flag/exclude fix so this doesn't recur.pvs still showed ~52GB total, pvresize apparently never ran or didn't complete. Not yet resolved.pdfjs directory copies existed on Dev (top-level, smf20, backup). Consolidated into one real directory + symlinks from Themes/default in the other two; confirmed FollowSymLinks already covered by the root <Directory /> Apache block, so no Apache config change was needed.ResultFormatter.py, MiscSearch.py, and IndexBuilder.py each carried their own separate, older copy of a $boardurl-scraping "self-correcting" guess (does the string already end in /The_ISE_Project or not?) to build SMF links. The guess was wrong on Dev, where $boardurl actually already resolves with /The_ISE_Project baked in — causing bad index.php?topic=… links (extra path segment, 404). PDFsearch.py had a related but different version of the same bug class (BASE_URL hardcoded to Live's domain specifically, causing Dev clicks to silently redirect to Live) — already partially fixed earlier this session via a shared ise_settings.py v1.0 that only PDFsearch.py had adopted.
ise_settings.py rewritten to v4.0: a single hardcoded table (_SITE_ROOTS) of the actual correct URL for each of the 4 real (environment, install) combinations (Live/main, Live/smf20, Dev/main, Dev/smf20), keyed by two whitelisted words instead of a scraped, guessed, or hand-typed URL. A small per-install Settings_ISE.json (modeled on Settings.php's own location — sits right next to it, one directory up from The_ISE_Project) picks the row:
{"environment": "Live", "install": "smf20"}
An unrecognised combination raises immediately, listing valid options, instead of silently building a wrong link.
ResultFormatter.py, MiscSearch.py, IndexBuilder.py, and PDFsearch.py all now import get_base_url()/get_project_url() from this one shared module — no per-file copies left anywhere. search.py/MegaSearch.py/Search.php/orphan_check.py needed no changes; they import BASE_URL/BOARD_URL from the files above and inherit the fix automatically.
Also cleaned up: qf_search_bridge.php and qf_MegaSearch_bridge.php were both doing putenv('ISE_BASE_URL=' . $boardurl) — feeding PHP's own (sometimes-wrong) $boardurl into an environment variable that nothing reads anymore. Removed from both (kept ISE_ROOT, which is unrelated and still live).
Settings_ISE.json — the user-updatable piece. One line, differs per install, edited directly on the box, essentially set-once.ise_settings.py's _SITE_ROOTS table — shared code, identical across all 4 installs. Only edited when the actual set of valid environments/installs changes (a new box, an IP change, smf21 getting ISE deployed) — and that edit gets redeployed everywhere, not just the affected box.DB_CONFIG still comes from Settings.php as before.Settings_ISE.json files (Live/main, Live/smf20, Dev/main, Dev/smf20) still need renaming into place next to each install's own Settings.php.ise_settings.py, ResultFormatter.py, MiscSearch.py, IndexBuilder.py, and trimmed qf_search_bridge.php/ qf_MegaSearch_bridge.php still need deploying to all relevant installs.192.168.233.129) was taken from earlier in this session, not freshly re-verified — confirm before deploying.mirror.sh itself still needs a dotfile-exclusion fix (root cause of the missing-.htaccess chain).