mirror of
https://github.com/LorenEteval/Furious.git
synced 2026-10-06 22:08:11 +03:00
1.9 KiB
1.9 KiB
Furious package guidance
Architecture
Applicationis the broad composition root. Elsewhere, depend on the narrowest owning model, repository, service, controller, or plugin capability. Do not create a second authority merely to avoid an existing boundary.- Process-lifetime accessors in
Frozenlib.Globalsmust tolerate partial startup and shutdown. They may expose deliberate application authorities, never transient dialogs, replies, workers, editors, or runtimes. - Compatibility code still reaches global accessors and live collections. Do not extend that coupling when a narrow API can be added without a competing cache or state path.
- Keep GUI-thread work short. Workers publish result data through the established Qt boundary and never mutate widgets directly.
Qt ownership
- Classify Qt objects as application-lifetime, reusable, or transient. Give each one a durable Python owner, compatible QObject parent, and explicit reuse or destruction path.
- Use the canonical
AppQ*controls. One-shot dialogs useAppQTransientDialogorAppQMessageBox; managedopen()is safe for local variables, whileexec()is reserved for genuinely synchronous flow. Reusable windows retain one explicit owner. - Parent or explicitly dispose timers, models, delegates, replies, event filters, menus, and actions. Never cache a transient QObject or an instance method in a global/unbounded cache.
- For lifetime-sensitive changes, follow
Furious/Qt/AGENTS.mdand themanage-qt-pyside6-lifetimesskill, then run the relevant native and packaged lifecycle checks.
Presentation
- Reuse translation/theme-aware construction instead of parallel manual retranslation or one-off styling. Preserve focus, keyboard, shortcut, accessibility, resize, high-DPI, and light/dark behavior.
- UI presents failures at the interaction boundary; owning services/controllers provide structured, testable results.