Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 19 additions & 9 deletions Docs/Configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,25 @@ enabled. Turning it back off removes the flag from future starts.

When a config profile with Workshop mods is opened, saved, or receives imported
mods, Quasar checks declared Steam Workshop child/dependency metadata, adds
missing dependency mods, and marks dependency rows in the profile JSON. It does
not reorder the profile automatically during this check; the Mods tab provides
an **Auto Sort Dependencies** action that applies a topological dependency
order when the operator wants it. If Quasar finds a dependency listed after its
dependent, or Steam reports a circular dependency chain that prevents a clean
topological order, the UI shows a warning. The Steam Workshop API key
configured from the Mods tab is required for this automatic dependency check.
If the key is missing or Steam cannot be reached, Quasar keeps the current mod
list and shows a warning instead of blocking the save.
missing dependency mods, and marks dependency rows in the profile JSON and the
world's generated `Sandbox_config.sbc`. It does not reorder the profile
automatically during this check; the Mods tab provides an **Auto Sort
Dependencies** action that applies a topological dependency order when the
operator wants it. If Quasar finds a dependency listed after its dependent, or
Steam reports a circular dependency chain that prevents a clean topological
order, the UI shows a warning. The Steam Workshop API key configured from the
Mods tab is required for this automatic dependency check. If the key is missing
or Steam cannot be reached, Quasar keeps the current mod list and shows a
warning instead of blocking the save.

Space Engineers Dedicated Server also has its own **Autodetect Dependencies**
setting. Quasar manages that setting in the profile instead of showing it as a
manual world option: it is disabled after a clean dependency check or a
successful auto-sort, so DS receives the exact generated `Sandbox_config.sbc`
mod list and load order. Quasar enables it as a fallback when the mod list is
manually changed, the Workshop API key is missing, dependency checks fail, or
dependency warnings remain after sorting. Auto-sort reorder notices do not keep
the fallback enabled when the final sorted order is otherwise valid.

After a dependency check or auto-sort, the Mods tab also shows a collapsed,
flattened dependency outline. Rows are tagged as root mods, dependency mods,
Expand Down
4 changes: 2 additions & 2 deletions Docs/QuasarArchitecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ The UI must support both:
- light mode
- dark mode

Theme preference should be stored in browser local storage using the `Blazor.LocalStorage` package so the user returns to the same mode on the next visit.
Theme preference should be stored in browser local storage through Quasar's native JS interop wrapper so the user returns to the same mode on the next visit.

## Discovery and Bootstrap

Expand Down Expand Up @@ -905,7 +905,7 @@ As of this document:
- initial runtime launch preparation now exists for isolated app-data roots, runtime config sync, `LastSession.sbl`, and enforced headless launch shaping
- server definitions store a saves root (`WorldPath`) plus selected save folder (`WorldSaveName`). The server editor requires a selected save before save/start, lists existing saves from the saves root, and has an always-available Create From Template dialog that can create/import a world template before copying it into a new save.
- neutral light/dark theming exists with local-storage persistence
- config editing is now migrated out of Python into Quasar-managed JSON profiles and rendered runtime artifacts. Profiles cover Quasar root settings, server password (rendered to DS-compatible hash/salt), and DS-visible SE session settings including block type world limits; on server start Quasar writes session settings and mods into the world's authoritative `Sandbox_config.sbc` as well as the runtime DS config. Profile mod order is preserved as the Space Engineers mod load order; the Mods tab lets operators reorder selected mods before saving. On profile open, save, and mod-import paths, Quasar uses Steam Workshop child/dependency metadata to add missing dependency mods and marks every dependency with an `IsDependency` profile flag without reordering the list. The Mods tab exposes an explicit Auto Sort Dependencies action that topologically sorts dependencies before dependents while keeping unrelated operator order stable. It warns when a dependency is currently after its dependent, when Steam metadata has a circular dependency chain, or when a cycle leaves a dependency order conflict after sorting. Dependency checks also return collapsed flattened outline rows for the Mods tab, tagged as root, dependency, already-listed, or cycle rows for inspection. World-template import flows can also read a template's current `Sandbox_config.sbc` and create a config profile from its session settings and mods.
- config editing is now migrated out of Python into Quasar-managed JSON profiles and rendered runtime artifacts. Profiles cover Quasar root settings, server password (rendered to DS-compatible hash/salt), and DS-visible SE session settings including block type world limits; on server start Quasar writes session settings and mods into the world's authoritative `Sandbox_config.sbc` as well as the runtime DS config. Profile mod order is preserved as the Space Engineers mod load order; the Mods tab lets operators reorder selected mods before saving. On profile open, save, and mod-import paths, Quasar uses Steam Workshop child/dependency metadata to add missing dependency mods and marks every dependency with an `IsDependency` profile flag without reordering the list. That flag is written back to `Sandbox_config.sbc` so DS autodetect treats dependency rows as dependencies instead of root mods. The Mods tab exposes an explicit Auto Sort Dependencies action that topologically sorts dependencies before dependents while keeping unrelated operator order stable. It warns when a dependency is currently after its dependent, when Steam metadata has a circular dependency chain, or when a cycle leaves a dependency order conflict after sorting. Dependency checks also return collapsed flattened outline rows for the Mods tab, tagged as root, dependency, already-listed, or cycle rows for inspection. Quasar hides the DS Autodetect Dependencies root setting and manages it from dependency state: disabled after a clean check/sort, enabled when manual mod edits invalidate the checked state or unresolved warnings remain. World-template import flows can also read a template's current `Sandbox_config.sbc` and create a config profile from its session settings and mods.
- file watching/reload now exists for manual edits to Quasar-managed server/profile JSON
- backup/restore now exists as versioned ZIP archives for Quasar configuration, server runtime state, and world-only data. Configuration backups cover servers, config profiles, world-template definitions, branding, and singleton settings files, with manual download/upload and semantic-version compatibility checks. The Backup page lists every configured server with per-row Back up server / Restore server / Back up world / Restore world actions; restore buttons use the latest matching stored archive for that server and backup kind. Automatic backup rules are configured separately for Quasar config, server backups, and world backups, each with its own schedule and retention. Quasar config backups include Quasar-managed catalog/config files only; server backups include the server definition plus non-cache Dedicated Server and Magnetar app data but not world saves; world backups include world save files and keep existing server/world config, using the latest Space Engineers `Backup` snapshot when present so backups can be taken while servers run. Restored server definitions from config or server backups are forced to `Off` goal state so restore cannot trigger a failed start loop before matching world files are restored.
- per-server CPU affinity pinning now exists (cpuset strings applied via `taskset` on Linux and `Process.ProcessorAffinity` on Windows), enforced by the supervisor on process start and reconcile alongside process priority; Linux priority elevation can use the optional setuid `/usr/local/bin/quasar-renice` helper instead of granting `CAP_SYS_NICE` to the whole Quasar service
Expand Down
12 changes: 8 additions & 4 deletions Docs/StateMachines/ConfigProfileChanges.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,23 @@ stateDiagram-v2

**Persistence.** `QuasarConfigProfileCatalog.UpsertAsync` normalizes and writes
`{ProfilesDir}/{id}/profile.json` plus a `History/{timestamp}.json` snapshot
(atomic swap). External edits to the JSON are picked up by a debounced
file-watch reload (`ScheduleReload`). Mod arrays are order preserving; the saved
(atomic swap). External edits to the JSON are picked up by the shared debounced
file watcher. Mod arrays are order preserving; the saved
order becomes the Space Engineers mod load order when Quasar rewrites
`Sandbox_config.sbc` during server preparation. On profile open, before saving
profile edits, and during world-template/server-editor mod imports, Quasar
expands declared Steam Workshop dependencies and marks dependency rows with
`IsDependency` without reordering existing rows. The Mods tab's **Auto Sort
`IsDependency` without reordering existing rows. That flag is imported from and
written to `Sandbox_config.sbc` mod entries. The Mods tab's **Auto Sort
Dependencies** action applies the topological sort explicitly. The resolver
warns when a dependency/dependent pair is currently out of order, sees a
circular dependency chain, or cannot satisfy a dependency edge after sorting.
Successful dependency checks also refresh a collapsed, flattened dependency
outline in the Mods tab; that view is derived UI state and is not saved into
the profile JSON.
the profile JSON. The DS `AutodetectDependencies` root setting is hidden from
the world-options UI and managed from these results: Quasar disables it after a
clean check or successful sort, and enables it when dependency state is
unchecked or unresolved warnings remain.

**World-template import.** The world-template UI can derive a new config profile
from a template's current `Sandbox_config.sbc`. It imports DS-visible session
Expand Down
71 changes: 0 additions & 71 deletions Docs/clone-feature-plan.md

This file was deleted.

Loading
Loading