📝 ISE_v10_Checkpoint_merged_10_DM2S_NX_Master_Post_Chapter_5.mdv4.6.0 · 2026-10-19

Checkpoint _10 -- "DM2S/NX Master Post Chapter 5" -- 2026-10-21 (01:45 Sydney), for a fresh conversation

Supersedes ISE_v10_Checkpoint_merged_9_DM2S_NX_Master_Post_Chapter_4 CLOSED.md (_9, _8, _7 and _5 are not overwritten). Everything in them still stands unless stated here. Read them together.

1. The one thing to know first

Python 3.15 now works for the whole PDF path on both Live and Clone. The media and audio pipelines (MediaProcessor.py, AudioProcessor.py) cannot move: torch has no Python 3.15 build, so they stay on 3.8. Nothing was deployed to production this chapter; cron and #!/usr/bin/env python3 scripts still run 3.8 (/usr/local/bin/python3 is still a symlink to python3.8).

2. State of Python 3.15 (Live and Clone are level)

Item State
Launcher /usr/local/bin/python3.15 /opt/python-3.15.0/extralib: added first in --library-path; backup python3.15.before_extralib beside it
/opt/python-3.15.0/extralib libstdc++.so.6.0.19 (the C++ runtime library) taken from CentOS 7's libstdc++-4.8.5-44.el7 RPM; Clone's copy also has ~ backup files left by the transfer
PyMuPDF 1.25.5, ready-made wheel (MuPDF 1.25.6 inside), nothing compiled
mysql-connector-python 26.7.0
PyMySQL 1.2.3
pypdf 3.1.0, pinned (same as Live's 3.8). 6.21.1 mangles some fonts, see section 4
fonttools 4.67.0 Live only; unused by pypdf 3.1.0, harmless
Not installed numpy, torch, transformers, open_clip_torch, Pillow
Clone ~/.bashrc Aliases py, py3, py315, python, python3, pip, pip3, pip315, py36, py38 now present (the py line was missing and added separately). Live's ~/.bashrc lines 136-147 are the reference

Why the library copy was needed: the PyMuPDF wheel asks for GLIBCXX_3.4.19; the system libstdc++.so.6 (6.0.13, gcc 4.4) lacks it. The launcher runs Python through glibc 2.17's own loader with an explicit --library-path, which overrides LD_LIBRARY_PATH, so the fix is the path entry in the launcher, not an environment variable.

3. What was found and decided

4. PDF comparison, Live, 5 PDFs (attach-93, 149, 150, 162, 172), 320 pages

Dry runs (--dry-run --limit 5); per-engine "total terms found / unique-to-that-engine":

Setup PyMuPDF pypdf
3.8 (PyMuPDF 1.18.17, pypdf 3.1.0) 63,265 / 1,330 63,444 / 1,509
3.15, pypdf 6.21.1, no fontTools 63,237 / 866 63,364 / 993
3.15, pypdf 6.21.1 + fontTools 63,237 / 2,064 62,842 / 1,669
3.15, pypdf 3.1.0 (adopted) 63,237 / 1,427 63,444 / 1,634

5. The 3.8 patch list (Clone's /bin is the master)

cmp confirmed indexall, indeximages and mediawatchdog are identical in Clone's /bin and /var/www/html/Collabware/bin.

File (Clone /bin) Line(s) naming 3.8 Can it move to 3.15?
indexall 33 (Check_Media_Classification.py), 40 (MediaIndexer.py), 42 (MediaProcessor.py) 40 yes; 42 no (torch); 33 not yet checked
indeximages 90 (Check_Media_Classification.py), 95 (MediaIndexer.py), 96 (MediaProcessor.py) 95 yes; 96 no; 90 not yet checked
mediawatchdog 37 (PY=${PY:-python3.8}) runs MediaProcessor, stays on 3.8
audio_plan (2), audio_run (1) call AudioProcessor.py no (numpy and torch)
bin_compare_sysplex.sh 9 (runs /root/bin_compare) needs a 3.15 compatibility look
mediawatchdog.md 26, 39, 51 documentation wording only
bin_deep_check.lst, sysplex_python_environment records, not commands no patch

Differences from the list in _9: chkindeximages in /bin (157 bytes, 12 Oct) no longer names 3.8, while the Collabware/bin copy (165 bytes, 6 Oct) still does; coichecks exists only in Collabware/bin (Live line 5); indeximages2 is not on Clone at all. The ISE folder's MegaIndexer.sh (4, 8, 12) and MediaClassifier.sh (9, 11) are unchanged from _9. So indexall and indeximages would become mixed (3.15 for MediaIndexer, 3.8 for MediaProcessor); whether to split them that way is the operator's decision.

6. Open items, in order

  1. Decide the 3.8 patching split (section 5); timing is the operator's call. Needs his real PDF cron lines (never seen; crontab -l on Live showed no Python lines, jobs run through MegaIndexer.sh).
  2. Check Check_Media_Classification.py imports; run one real PDFsearch.py search through 3.15 to test the connector version gap.
  3. Root's mailbox on Live (/var/spool/mail/root) has new mail twice this session; probably cron output, unread.
  4. Still open from _8 and _9: backup copy of Clone's VM folder after a clean shutdown; the four old-IP /bin scripts on Clone (json_md5sums_all, copies_Dev_to_Clone, copies_Clone_to_Dev, scp.text); stale http:// links (grep -n boardurl /var/www/html/Settings.php); Dev's hostname output for the indexers' IS_DEV check; swap and /etc/fstab on Clone; what "do not index all that" meant; the parked list in _8 section 5, item 10.
  5. Manual text still wrong: PDFIndexer.py tokeniser is described as a plain .split() (a regex tokeniser since v7.4); the "union rebuild" cron example is not a rebuild; the blank-page numbering quirk (page number one too low after a blank page) needs a --fresh rebuild to fix.
  6. Scratch files on Live that can go: /tmp/cxx, /tmp/wh, /tmp/pipc.txt, /tmp/numpy*.log, /tmp/pdf*.txt, /tmp/mu*.txt, /tmp/mu_words.py.

7. Corrections and lessons from this chapter