Origin: Customer support ticket. Suggested Fix reflects ticket agent investigation -- do not derive fix from title or symptom alone.
Summary
A freshly-provisioned seedbox account received www/mediaStack.php and www/userMediaStackPanel.php -- a coupled pair of per-user media-stack panel files -- from mismatched versions, causing a PHP fatal error on every load of the Media Stack panel. Related to #586 (skel-sync/propagation gap on EXISTING homes during update.php) but distinct: this instance occurred at initial PROVISIONING, on a brand-new account, not on a home that predated a later update.
Symptom
PHP Fatal error: Uncaught Error: Call to undefined function pmssMediaStackPanelHomePath() in www/mediaStack.php:155
Stack trace:
#0 www/mediaStack.php(25): pmssMediaStackPanelStartHandle(...)
#1 {main}
www/mediaStack.php called pmssMediaStackPanelStartHandle(), which internally called pmssMediaStackPanelHomePath(). That function is defined in the current /etc/skel/www/userMediaStackPanel.php, but the affected account's own userMediaStackPanel.php was still on the pre-refactor version -- old PMSS_MEDIA_STACK_MEMORY_MINIMUM_BYTES/PMSS_MEDIA_STACK_MEMORY_UNLIMITED_BYTES constants, calling pmssCustomerHomePath() directly instead of the newer helper. Every attempt to load the panel crashed; the account holder could never reach the install button.
Root Cause
Both files land in a new account's home via the same skel-copy step during provisioning. /etc/skel/www/userMediaStackPanel.php on the host already had the current, correct content (verified: grep -c 'function pmssMediaStackPanelHomePath' on skel returned non-zero) at the time this account was created. So the account's own copy did not come from a stale HOST skel -- the account-level delivery of this one file lagged behind the account-level delivery of its coupled sibling (mediaStack.php), even though both were written within the same few-minute provisioning window on the same account.
ADR 0022 already establishes that guiv-delivered customer-panel files "MUST be self-contained within the guiv delivery set" specifically to prevent one file calling a function only a newer sibling defines. This instance is exactly the failure ADR 0022 exists to prevent, occurring at provisioning rather than at a later update.php convergence pass.
I have not traced the exact provisioning code path that produced the mismatched pair -- only the observed inconsistency and its resolution.
Reproduction
Not reliably reproducible on demand. Detection after the fact: for any account, grep www/mediaStack.php for functions it calls that are undefined in that SAME account's www/userMediaStackPanel.php (or the reverse).
Environment
PMSS version at incident time: git/main (skel dated within ~24h of commit 3fbb7efa "refactor(compression): media-stack panel -- remove redundant adapters"), Debian 12 (bookworm).
Suggested Fix
A provisioning-time (and/or step2 per-user sync) consistency check across the coupled media-stack panel file pair: after writing the file set for a (re)provisioned or updated account, verify no function called by mediaStack.php is undefined given that SAME account's userMediaStackPanel.php (a cheap php -l + symbol-presence check would catch this class immediately). Until then, php /scripts/update.php git/main is a full accidental workaround -- it re-delivers both files together from current skel.
Related
Refs #586 (documents the sibling defect class on EXISTING homes across five+ prior instances, later marked should-not-implement because its original root-cause hypothesis about updateUserFile() was shown incorrect -- filing separately here with an accurate root cause for the provisioning-time variant rather than reopening/appending to that issue).
Tier-3 declared at filing: --why no-known-fix — GH#631 tier gate. Declared fix size: unknown lines vs 40-line body — size gate (operator directive 2026-07-29). Owner: etc/skel/www/userMediaStackPanel.php in MagnaCapax/PMSS — owner gate.
Summary
A freshly-provisioned seedbox account received
www/mediaStack.phpandwww/userMediaStackPanel.php-- a coupled pair of per-user media-stack panel files -- from mismatched versions, causing a PHP fatal error on every load of the Media Stack panel. Related to #586 (skel-sync/propagation gap on EXISTING homes duringupdate.php) but distinct: this instance occurred at initial PROVISIONING, on a brand-new account, not on a home that predated a later update.Symptom
www/mediaStack.phpcalledpmssMediaStackPanelStartHandle(), which internally calledpmssMediaStackPanelHomePath(). That function is defined in the current/etc/skel/www/userMediaStackPanel.php, but the affected account's ownuserMediaStackPanel.phpwas still on the pre-refactor version -- oldPMSS_MEDIA_STACK_MEMORY_MINIMUM_BYTES/PMSS_MEDIA_STACK_MEMORY_UNLIMITED_BYTESconstants, callingpmssCustomerHomePath()directly instead of the newer helper. Every attempt to load the panel crashed; the account holder could never reach the install button.Root Cause
Both files land in a new account's home via the same skel-copy step during provisioning.
/etc/skel/www/userMediaStackPanel.phpon the host already had the current, correct content (verified:grep -c 'function pmssMediaStackPanelHomePath'on skel returned non-zero) at the time this account was created. So the account's own copy did not come from a stale HOST skel -- the account-level delivery of this one file lagged behind the account-level delivery of its coupled sibling (mediaStack.php), even though both were written within the same few-minute provisioning window on the same account.ADR 0022 already establishes that guiv-delivered customer-panel files "MUST be self-contained within the guiv delivery set" specifically to prevent one file calling a function only a newer sibling defines. This instance is exactly the failure ADR 0022 exists to prevent, occurring at provisioning rather than at a later
update.phpconvergence pass.I have not traced the exact provisioning code path that produced the mismatched pair -- only the observed inconsistency and its resolution.
Reproduction
Not reliably reproducible on demand. Detection after the fact: for any account, grep
www/mediaStack.phpfor functions it calls that are undefined in that SAME account'swww/userMediaStackPanel.php(or the reverse).Environment
PMSS version at incident time: git/main (skel dated within ~24h of commit
3fbb7efa"refactor(compression): media-stack panel -- remove redundant adapters"), Debian 12 (bookworm).Suggested Fix
A provisioning-time (and/or step2 per-user sync) consistency check across the coupled media-stack panel file pair: after writing the file set for a (re)provisioned or updated account, verify no function called by
mediaStack.phpis undefined given that SAME account'suserMediaStackPanel.php(a cheapphp -l+ symbol-presence check would catch this class immediately). Until then,php /scripts/update.php git/mainis a full accidental workaround -- it re-delivers both files together from current skel.Related
Refs #586 (documents the sibling defect class on EXISTING homes across five+ prior instances, later marked should-not-implement because its original root-cause hypothesis about
updateUserFile()was shown incorrect -- filing separately here with an accurate root cause for the provisioning-time variant rather than reopening/appending to that issue).Tier-3 declared at filing:
--why no-known-fix— GH#631 tier gate. Declared fix size:unknownlines vs 40-line body — size gate (operator directive 2026-07-29). Owner:etc/skel/www/userMediaStackPanel.phpin MagnaCapax/PMSS — owner gate.