the SessionStart route works, and it is less plumbing than you make it sound: the matcher is literally compact, sitting alongside startup, resume and clear, so it is a one line matcher rather than a mechanism you have to build.
worth separating that from PreCompact, which is what people reach for first and which cannot do this job. PreCompact fires before the compaction and carries a trigger of manual or auto plus custom instructions, so it can shape what survives but has no way to re-read anything afterwards. the restore has to happen on the way back in.
and agreed on /context over anyone's writeup, mine included. it is the fastest way to see what your own tiers actually did.
This sorting rule is the piece of compaction advice I have never seen written down anywhere else: "Anything you scope to a path should be guidance you can afford to lose mid-session." I hit the exact failure you describe, an hour into a payments directory, post-compact, output drifting to root conventions with no error, and it took me embarrassingly long to trace because nothing was wrong, in the sense that everything behaved as documented. Two additions from that scar: /context before and after a compact makes the tier behavior visible in one minute, better than trusting anyone's writeup including yours and mine; and for nested rules you cannot afford to lose but also cannot afford at launch, a SessionStart hook that fires on the compact source can re-read the critical file, which restores the guarantee at the cost of a little plumbing. Also glad you flagged that @imports load at launch recursively; the tidy-repo-same-token-bill trap catches nearly everyone once.