Releases: satodu/bamboo-end-store
Release list
1.2.0
Release Notes — Bamboo End Store
v-next · 2026-07-06
Architecture — SOLID Refactoring & Adapter Pattern
The entire package management subsystem was redesigned following Clean Code and SOLID principles.
New: PackageManagerInterface contract
All package managers now implement a strict, interchangeable interface. Adding support for a new format (Snap, Nix, etc.) requires only a new class — no existing code changes.
New: Dedicated Manager Adapters
| Class | Responsibility |
|---|---|
PacmanManager |
Official Arch/EndeavourOS repository queries and operations |
AurManager |
AUR helper (paru/yay) queries and interactive installs |
FlatpakManager |
Flathub remote queries and Appstream API parsing |
New: PackageManagerFactory
A single factory resolves the correct manager based on package source flags, keeping PackageService as a thin coordinator with zero manager-specific logic.
Settings — Singleton Service
New: SettingsService
User configuration is now loaded once and shared via a singleton registered in the service container. Eliminates duplicate file reads and provides a consistent get() / all() interface across the entire application.
State Machine — Real-Time Operation Awareness
New: UserState Enum
Defines four application states: IDLE, INSTALLING, UNINSTALLING, UPDATING.
New: UserStateMachine (Singleton)
Coordinates state transitions with guard rules, persists state via Laravel Cache for cross-process communication, and exposes the current state and active package name to the UI.
UI Behaviour Changes:
- All package card action buttons across the entire store are disabled during any active operation
- The active package's button shows a live status label: Installing... / Uninstalling... with a spinner
- State is always reset to
IDLEinfinalizeOperation()— even if a terminal window is killed mid-install
Bug Fix — Background Process Watchdog (Critical)
Problem: After opening an external terminal for installation or uninstallation, the package card button never updated to reflect the new installed state. Subsequent install/uninstall actions were also locked permanently.
Root Causes:
- Dummy PIDs — processes used fake PIDs (
9999,1). The poll loop checking/proc/{pid}immediately found nothing and cleared local state, but theUserStateMachinewas never reset, locking the UI permanently. - Stale search cache — the Livewire component reloaded packages from a 5-minute cached search result that still showed the old installation status.
Fix:
- All background commands now use native POSIX shell detachment (
& echo $!) to capture the real system PID without relying on SymfonyProcess— which kills its child process on__destructwhen the PHP request lifecycle ends. finalizeOperation()now explicitly resets theUserStateMachinetoIDLEas a failsafe.finalizeOperation()now invalidates the active search query cache keys (pkg_search_...) to force a fresh status check immediately.
i18n — Full Console Message Translation
All user-visible messages emitted by external terminal windows (install, uninstall, system update) are now fully translatable. PHP resolves the active locale via __() before building the shell command string and passes the result safely via escapeshellarg().
11 new translation keys added across all 4 supported languages (EN · PT · ES · RU):
| Key | EN | PT |
|---|---|---|
console_auth_failed |
Authentication cancelled or failed. | Autenticação cancelada ou falhou. |
console_install_failed |
Installation failed or was cancelled. | Instalação cancelada ou falhou. |
console_initiating_removal |
Initiating removal of {name}... | Iniciando remoção de {name}... |
console_starting_eos_update |
Starting EndeavourOS System Update... | Iniciando atualização do EndeavourOS... |
console_updating_aur |
Updating AUR packages via {helper}... | Atualizando pacotes AUR via {helper}... |
console_starting_update |
Starting System Update via {helper}... | Iniciando atualização do sistema via {helper}... |
console_updating_flatpak |
Updating Flatpak applications... | Atualizando aplicativos Flatpak... |
console_removing_orphans |
Removing orphan packages... | Removendo pacotes órfãos... |
console_no_orphans |
No orphan packages to remove. | Nenhum pacote órfão para remover. |
console_closing_terminal |
Closing terminal in {delay} seconds... | Fechando terminal em {delay} segundos... |
console_press_enter |
Press Enter to close... | Pressione Enter para fechar... |
Code Quality
- All Portuguese strings hardcoded in
app/PHP source files were removed — user-facing strings use__(), internal code comments are English only. - PHPDoc comments across
PackageService,PackageManagers, andConsole Commandstranslated to English. PackageFinishedCommandCLI description updated to English.
Tests
- 9 PHPUnit tests · 38 assertions — all passing
PackageManagerTest— adapter resolution, search delegation, install command correctnessUserStateMachineTest— state transition rules and guard enforcement
1.1.7
Release Notes - Version 1.1.7
What's New:
- Package Source Visibility: Added clear badges (Official, AUR, Flatpak) next to the package version in the details sheet, and added a detailed "Source / Repository" metadata row showing the exact repository origin (e.g. Flathub, AUR, core, extra, etc.).
- Secure AUR PKGBUILD Audits: Removed the automated
--skipreviewand--noeditcommand-line bypasses. When installing AUR packages, the terminal window will now correctly prompt you to inspect and review PKGBUILD changes before compilation starts. - Terminal Auto-Close Customization:
- Added new configuration keys to toggle auto-close behavior and set custom durations (5s, 10s, 15s, or 30s) in the Settings page.
- Implemented a silent "Auto-close" checkbox inside the integrated console drawer that updates settings instantly without intrusive notifications.
- System terminal operations (like standard package updates or command installations) now respect these settings: displaying a clear countdown when auto-close is enabled, or prompting "Press Enter to close..." to let you inspect outputs when disabled.
- Localization & Boot Fixes:
- Resolved a Laravel 11 pathing issue where
settings.jsonwas saved insidestorage/app/private/but searched instorage/app/. The correct path is now dynamically resolved on boot, ensuring the notification tray menu loads in the user's preferred language on startup. - Added Artisan CLI search paths so background operations and finish notifications also respect the user's active locale.
- Translated all setup logs and terminal suffixes, and completed translation files (en.json, pt.json, es.json, ru.json) for the new settings interface.
- Resolved a Laravel 11 pathing issue where