Skip to content

media-stack panel: provisioning can deliver mediaStack.php and userMediaStackPanel.php from mismatched versions, causing PHP fatal error on every panel load #953

Description

@MagnaCapax

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcustomer-reportedIssue originated from customer ticket - extra scrutiny required

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions