# G-111 modpod tidy: fix/remove tar-era remnants + first test baseline Status: proposed Scope: modpod canonical source (c:/repo/jn/tclmodules/modpod fossil checkout, src/modules/modpod-999999.0a1.0.tm) with re-vendor into shellspy (src/vendormodules/modpod-0.1.5.tm + bootsupport copies via established channels); punkshell-side tarjar artifacts ASSESSED ONLY (cli #tarjar-* module-type branch, libunknown skip-globs, vendored tarjar-2.4.3.tm, src/modules/_build/#tarjar-tarjar-2.3 - dispositions individually user-confirmed, preservation-aware per the c:/tclmodules/main manual-migration intent); new modpod testsuite (home settled in the work; shellspy src/tests/modules/ harness is the natural fit) Goal: modpod's surviving zip-based surface is sound and tested: the tar-era broken/dead code inside the modpod module is fixed or removed with each item dispositioned, tarjar-SYSTEM artifacts elsewhere get user-confirmed preservation-aware dispositions only (old tarjar material at c:/tclmodules/main is preserved/migrated manually by the user, outside this goal), and modpod gains its first test baseline covering wrap and load round-trips including a binary payload. Acceptance: each enumerated tar-era defect in modpod-999999.0a1.0.tm is dispositioned with the outcome recorded here (undefined tar::readHeader connect path; ::tarjar::connected reference in myfullname; con/connected and versionpart/versionparts typos; the malformed set/lindex constructs; connect's debug stderr puts; get's unimplemented wrapped branch); after the pass a grep of the modpod module for tarjar returns nothing or only deliberate keeps recorded here; punkshell-side tarjar artifacts each carry a recorded keep/remove/migrate disposition explicitly confirmed by the user, with none deleted absent that confirmation; a modpod testsuite exists and passes on the tcl9 kit and on 8.6 (or the 8.6 limitation is recorded per G-034), covering make_zip_modpod wrap then package require from a real-disk module path and from a zipfs module path, a binary-payload load, the unwrapped #modpod-folder redirect form, and both -offsettype forms; the fixed module is re-vendored into shellspy with the suite passing there. ## Context Drafted 2026-07-21 during the modpod binary-.tm characterization session (G-066 Notes hold the characterization; G-109/G-110 were split out of the same session). The user: modpod "was beaten into shape from [the] earlier tarjar system that operated on .tm files that were tar archives ... there may be cruft from the earlier iteration that we should tidy, and I'm not sure what tests are in place for modpod." TEST FINDING: none exist anywhere. The modpod project (c:/repo/jn/tclmodules/modpod, fossil-only like tomlish - vendor-into- shellspy workflow) has no test directories; shellspy has no modpod suites (nearest neighbour is src/tests/modules/zipper - a different module, and the natural harness precedent for where modpod suites can live). The zip surface that works today (modpod::lib::make_zip_modpod + the self-mount stub + modpod::system::make_mountable_zip) was proven by the 2026-07-21 characterization runs but has zero automated coverage. DEFECT INVENTORY (canonical modpod-999999.0a1.0.tm, line refs at drafting; the tar-era connect/get family is dead-or-broken while the zip stub path is the live surface): - L102: `puts stderr "modpod::connect--->>$args"` debug output in connect. - L144: `set con(type,...)` typo for `connected` (writes a stray array); ~L170 compounds it (`$con(package,$modpod)` - undefined var references). - L149-150: malformed `set unwrapped_tm_file [file join ...] "..."` (3-arg set - runtime error if reached) followed by a value-less `set connected(tmfile,$modpodpath)` (reads an unset entry). - L194: connect's tar path calls `::modpod::system::tar::readHeader` - no tar namespace exists anywhere in the file (caught, so every wrapped-tar connect falls through to "not a valid modpod"). - L294: `is_valid_tm_version` uses `$versionparts` vs its `$versionpart` argument - the substitution error fires BEFORE the catch, so the proc always errors. - L598: `connect_if_not` has misplaced brackets (`[lindex [modpod::connect $podpath]] 0]`) - runtime error when reached. - L652: `myfullname` returns `$::tarjar::connected(fullpackage,$script)` - always errors under modpod. - `get`: wrapped-pod branch is a "not implemented" stderr stub. - tarjar-named comments/messages/placeholder token (L632/647/650/659) - cosmetic; disposition = rename or deliberate-keep note. TARJAR-SYSTEM INVENTORY (assess-only in this goal; per the user 2026-07-21, old tarjar material at c:/tclmodules/main - which also holds the intermediate 'tarpack' generation (tarpack-1.1.x + loadscripts; lineage tarjar -> tarpack -> modpod) - is to be PRESERVED and partly migrated manually, so nothing here is deletable cruft by default): - src/vendormodules/tarjar-2.4.3.tm (a tar-format .tm; carries the .TclSoCache code recorded as G-110 prior art) + _aside/tarjar-2.3.tm. - src/modules/_build/#tarjar-tarjar-2.3/ unwrapped tree (docs, todo, loadscript, loader snippets) + _build/tarjar-2.3.tm. - punk::mix cli-999999.0a1.0.tm: #tarjar-* module-type build branch (~L240/719-796/1037) - dead if no #tarjar source dirs remain in scanned trees, but coupled to the preservation question. - libunknown skip-globs for #tarjar-* (harmless/defensive - likely keep). Relationships: precursor to G-109 (manifest emission edits the same module - tidy first so it lands on sound code); G-066/G-067 (modpod generation + publish consumers); G-110 (tarjar .TclSoCache prior art lives inside the vendored tarjar tm - preserve access to it); G-034 (8.6 mount path - the 8.6 leg of the testsuite). ## Notes - 2026-07-21: drafted from the session findings and approved (user: "approved - apply G-111"). - G-029 relationship (recorded 2026-07-24 after overlap review): its testmodpod generation exercises the same wrap+load round-trips this goal's baseline pins - the two suites share fixtures where sensible.