feat(egg): write the recommended PopupNotifications banner (runicnpc 9e, D327, D328) #22

Merged
whitlocktech merged 1 commits from feat/9e-popup-banner into edge 2026-10-09 06:29:40 +00:00
Member

What & why

RunicNPC stage 9e, step 1 (docs/runicnpc/PLAN.md). The egg's install writes the recommended PopupNotifications banner by the same rule as the installer. It writes into oxide/config or carbon/configs only where PopupNotifications.json is missing or every setting is still the plugin's own default (Version ignored, D328). Anything else is kept whole, so a look the operator chose survives a reinstall.

  • PopupNotifications' Version is written, or kept from the existing file, because the plugin resets a config without one to its defaults.
  • A failed write is reported in the console and does not fail the install: it only affects how popups look.
  • FRAMEWORK=vanilla still installs nothing.

New function rg_popup in egg/install.sh, called after the plugins are placed.

Docs: RunicGateway/docs PR for 9e step 1 (rust-link/INSTALL.md §B, INTEGRATION.md §2.4).

How it was tested

All in ghcr.io/ptero-eggs/installers:debian (the egg's own install image), with the function extracted from install.sh:

  • missing config, with its directory missing too: the result is the banner file used in the walk;
  • the rig's real defaults: same banner, no temp file left behind;
  • defaults from a later PopupNotifications version: the version is kept and the banner written; 12.0 is treated as 12;
  • four kinds of change (font size, duration, an added key, a removed block): each kept byte for byte;
  • a file that is not JSON: kept;
  • an existing banner: kept;
  • a directory that cannot be created: the function returns non-zero.

bash -n install.sh passes and egg/build.sh builds the egg. A real panel reinstall has not been done; that belongs with 9e step 3's bundle.

Checklist

  • I have read CONTRIBUTING.md.
  • The change builds and existing tests/checks pass locally.
  • I have added or updated tests/docs where it makes sense.
  • My commits are reasonably scoped with clear messages.

AI-assisted contributions (required)

  • No AI tools were used to produce this contribution.
  • AI tools were used. Tool(s): Claude Code (Claude Opus 5.5). I have reviewed and understand
    every change, and take responsibility for it. AI-authored commits are
    marked with a Co-Authored-By / Assisted-By trailer.

License

  • I agree that my contribution is licensed under this project's license
    (GNU GPL v3.0 or later), and I have the right to contribute it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

## What & why RunicNPC stage 9e, step 1 (docs/runicnpc/PLAN.md). The egg's install writes the recommended PopupNotifications banner by the same rule as the installer. It writes into `oxide/config` or `carbon/configs` only where `PopupNotifications.json` is missing or every setting is still the plugin's own default (`Version` ignored, D328). Anything else is kept whole, so a look the operator chose survives a reinstall. - PopupNotifications' `Version` is written, or kept from the existing file, because the plugin resets a config without one to its defaults. - A failed write is reported in the console and does **not** fail the install: it only affects how popups look. - `FRAMEWORK=vanilla` still installs nothing. New function `rg_popup` in `egg/install.sh`, called after the plugins are placed. Docs: RunicGateway/docs PR for 9e step 1 (`rust-link/INSTALL.md` §B, `INTEGRATION.md` §2.4). ## How it was tested All in `ghcr.io/ptero-eggs/installers:debian` (the egg's own install image), with the function extracted from `install.sh`: - missing config, with its directory missing too: the result is the banner file used in the walk; - the rig's real defaults: same banner, no temp file left behind; - defaults from a later PopupNotifications version: the version is kept and the banner written; `12.0` is treated as `12`; - four kinds of change (font size, duration, an added key, a removed block): each kept byte for byte; - a file that is not JSON: kept; - an existing banner: kept; - a directory that cannot be created: the function returns non-zero. `bash -n install.sh` passes and `egg/build.sh` builds the egg. A real panel reinstall has not been done; that belongs with 9e step 3's bundle. ## Checklist - [x] I have read [CONTRIBUTING.md](CONTRIBUTING.md). - [x] The change builds and existing tests/checks pass locally. - [x] I have added or updated tests/docs where it makes sense. - [x] My commits are reasonably scoped with clear messages. ## AI-assisted contributions (required) - [ ] No AI tools were used to produce this contribution. - [x] AI tools were used. Tool(s): `Claude Code (Claude Opus 5.5)`. I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with a `Co-Authored-By` / `Assisted-By` trailer. ## License - [x] I agree that my contribution is licensed under this project's license (**GNU GPL v3.0 or later**), and I have the right to contribute it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 1 commit 2026-10-09 06:25:36 +00:00
feat(egg): write the recommended PopupNotifications banner (runicnpc 9e, D327, D328)
All checks were successful
PR Checks / rust-gates (pull_request) Successful in 4m43s
4eee1fbe17
The install writes PopupNotifications.json into oxide/config or
carbon/configs as a banner across the top of the screen, by the installer's
rule: only where the file is missing or every setting is still the plugin's
own default (the Version aside). Anything else is kept whole. The plugin's
Version is written or kept, because PopupNotifications resets a config
without one. A failed write is said in the console and does not fail the
install: it is a look, not the bridge.

Tested in ghcr.io/ptero-eggs/installers:debian: missing, the rig's defaults,
defaults from a later release (version kept), four kinds of change, not
JSON, an existing banner, and an unmakeable directory. egg/build.sh builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit f895eaa961 into edge 2026-10-09 06:29:40 +00:00
whitlocktech deleted branch feat/9e-popup-banner 2026-10-09 06:29:41 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Rust-Link#22
No description provided.