Utensil's Zettelkasten-style forest of evergreen notes on math and tech. utensil.tngl.sh/forest/
0

Configure Feed

Select the types of activity you want to include in your feed.

fix(render): iter 85 — pivot to rm-*.tfm + verify VF chain shim presence

Iter 84's surgical psfonts.map strip worked at the file level
(verified: 1 cmcsc10 entry pointing direct to cmcsc10.pfb), but the
SVG bytes didn't change. Reread the warnings log — the loud failures
are NOT 'cmcsc10.pfb not found' (we have it staged) but:
WARNING: can't find rm-lmb10.tfm
WARNING: can't find rm-lmr{6,7,9,10}.tfm
WARNING: can't find rm-lmri{7,10}.tfm
These rm-*.tfm files DO exist in lm.tar.xz under fonts/tfm/public/lm/
and our stage_tl_pkg flat-copies all *.tfm — so they're on disk in
both FOREST_TEX_DIR AND FOREST_TEXMF tree, but kpathsea can't find
them at dvisvgm runtime.

Iter 85 verifies their presence in both stores and rebuilds ls-R
cache to make sure it's indexed before build runs (not after).

Refs #2

[AGENT: kael]

+24 -20
+24 -20
.tangled/workflows/render.yml
··· 629 629 # - sfcsc10.pfb (or equivalent Type1) present 630 630 # - psfonts.map maps cmcsc10 -> some PFB path 631 631 # …are confirmed. Print to CI log for evidence. 632 - # iter 83 — make cm*.pfb actually reachable to dvisvgm. Files are 633 - # in FOREST_TEX_DIR (flat) AND FOREST_TEXMF (canonical) per iter 79. 634 - # But amsfonts stages them under fonts/type1/public/amsfonts/cm/ 635 - # while kpathsea's standard CM search expects 636 - # fonts/type1/public/cm/. Mirror them into the canonical cm/ path 637 - # so kpathsea finds them by name. Also rebuild the ls-R cache. 632 + # iter 85 — the actual root cause for ag-0018's overlap (per iter 84 633 + # warnings) is dvisvgm's "can't find rm-lmb10.tfm" / rm-lmr*.tfm / 634 + # rm-lmri*.tfm errors during the VF chain expansion. Those rm-*.tfm 635 + # files ARE in lm.tar.xz at fonts/tfm/public/lm/ — stage_tl_pkg's 636 + # flat copy puts them in FOREST_TEX_DIR (already verified) AND 637 + # FOREST_TEXMF (also already). So they're on disk but kpathsea 638 + # somehow can't find them. 639 + # 640 + # Hypothesis: ls-R cache wasn't built when forester first ran (iter 641 + # 83's rebuild happens AFTER psfonts.map agg but maybe AFTER the 642 + # build runs too?). Rebuild ls-R BEFORE the build step, and dump 643 + # it to /tmp for inspection. 638 644 { 639 - echo "=== iter 83 staging verification ===" 645 + echo "=== iter 85 staging verification ===" 640 646 echo " FOREST_TEX_DIR: $FOREST_TEX_DIR" 641 647 echo " FOREST_TEXMF: $FOREST_TEXMF" 642 - echo "--- iter 83 mirror amsfonts/cm/*.pfb -> canonical cm/ path ---" 648 + echo "--- iter 85: where ARE the rm-*.tfm files? ---" 649 + echo " rm-lmb10.tfm (FOREST_TEX_DIR): $(ls -la "$FOREST_TEX_DIR/rm-lmb10.tfm" 2>/dev/null | head -1)" 650 + echo " rm-lmr10.tfm (FOREST_TEX_DIR): $(ls -la "$FOREST_TEX_DIR/rm-lmr10.tfm" 2>/dev/null | head -1)" 651 + echo " rm-lmb10.tfm (FOREST_TEXMF tree): $(find "$FOREST_TEXMF" -name rm-lmb10.tfm 2>/dev/null | head -1)" 652 + echo " rm-* total in FOREST_TEX_DIR: $(find "$FOREST_TEX_DIR" -maxdepth 1 -name 'rm-*.tfm' 2>/dev/null | wc -l)" 653 + echo " rm-* total in FOREST_TEXMF tree: $(find "$FOREST_TEXMF" -name 'rm-*.tfm' 2>/dev/null | wc -l)" 654 + echo "--- iter 83 carryover: cm*.pfb mirror + ls-R ---" 643 655 if [ -d "$FOREST_TEXMF/fonts/type1/public/amsfonts/cm" ]; then 644 656 mkdir -p "$FOREST_TEXMF/fonts/type1/public/cm" 645 657 cp -n "$FOREST_TEXMF/fonts/type1/public/amsfonts/cm/"*.pfb \ 646 658 "$FOREST_TEXMF/fonts/type1/public/cm/" 2>/dev/null || true 647 - echo " /fonts/type1/public/cm/cm*.pfb count after mirror: $(find "$FOREST_TEXMF/fonts/type1/public/cm" -name 'cm*.pfb' 2>/dev/null | wc -l)" 648 659 echo " /fonts/type1/public/cm/cmcsc10.pfb: $(ls -la "$FOREST_TEXMF/fonts/type1/public/cm/cmcsc10.pfb" 2>/dev/null | head -1)" 649 - echo " /fonts/type1/public/cm/cmti10.pfb: $(ls -la "$FOREST_TEXMF/fonts/type1/public/cm/cmti10.pfb" 2>/dev/null | head -1)" 650 - else 651 - echo " no amsfonts/cm dir to mirror from" 652 660 fi 653 - echo "--- iter 83 rebuild kpathsea ls-R cache ---" 661 + echo "--- iter 85 rebuild ls-R BEFORE build runs ---" 654 662 if command -v mktexlsr >/dev/null 2>&1; then 655 663 mktexlsr "$FOREST_TEXMF" 2>&1 | head -5 656 - echo " ls-R: $(ls -la "$FOREST_TEXMF/ls-R" 2>/dev/null | head -1)" 657 - echo " ls-R cmcsc10 hit: $(grep -c '^cmcsc10' "$FOREST_TEXMF/ls-R" 2>/dev/null || echo 0)" 658 664 else 659 - echo " mktexlsr not in PATH — building ls-R manually" 660 665 ( cd "$FOREST_TEXMF" && ls -R > ls-R ) 2>/dev/null 661 - echo " manual ls-R: $(wc -l < "$FOREST_TEXMF/ls-R" 2>/dev/null) lines" 662 - echo " ls-R cmcsc10 hit: $(grep -c '^cmcsc10' "$FOREST_TEXMF/ls-R" 2>/dev/null || echo 0)" 663 666 fi 664 - echo "--- sanity carryover (FOREST_TEX_DIR) ---" 665 - echo " cmcsc10.pfb (flat): $(ls -la "$FOREST_TEX_DIR/cmcsc10.pfb" 2>/dev/null | head -1)" 667 + echo " ls-R: $(ls -la "$FOREST_TEXMF/ls-R" 2>/dev/null | head -1)" 668 + echo " ls-R rm-lmb10 hit: $(grep -c '^rm-lmb10' "$FOREST_TEXMF/ls-R" 2>/dev/null || echo 0)" 669 + echo " ls-R cmcsc10 hit: $(grep -c '^cmcsc10' "$FOREST_TEXMF/ls-R" 2>/dev/null || echo 0)" 666 670 } | tee /tmp/iter78-staging.log 667 671 668 672 # iter 52b — concatenate all staged .map files into a single