CobbleGacha Expanded Alpha 3.7.39

Standard/permanent banner admin fix:
- 3.7.38 removed the visible permanent guards but STOP/DELETE could still fail in the legacy editor network path.
- Editor STOP now routes through BannerAdminMutationHooks.stop().
- Permanent STOP writes banner.<id>.enabled=false, reloads the runtime, and verifies that the banner is actually inactive before reporting success.
- Editor DELETE now routes through BannerAdminMutationHooks.delete().
- DELETE removes banner.<id>.*, active.<id>.*, and schedule.<id>.* entries, removes the id from banner.order, writes atomically, reloads, and verifies the banner is actually gone.
- Non-permanent STOP still delegates to the original BannerTestRuntime.stopBanner behavior.
- Existing permanent semantics remain: permanent means no automatic expiry, not admin-locked.

Validation performed:
- Standalone runtime test with the actual bundled/current banner config.
- Standard before test: exists=true, permanent=true, active=true.
- STOP result=true; Standard remained defined but active=false and banner.standard.enabled=false was written.
- DELETE result=true; Standard definition was removed and banner.order no longer contained standard.

No pull rates, pity, IVs, 50/50, reward probabilities, animations, or card UI were changed.
