Repository navigation
One per-user folder for every module; Pulse Room reads the current band files - #16
Merged
Merged
Conversation
Pulse Room resolved its cache dir on its own, with a different default name
("QuantumTerminal-v2") and, off Windows, a different base (~/.config). So
under `python launcher.py`, and on every non-Windows OS, it read cones/bands
from a folder the sync client and regime/cone routes never write, and built
empty snapshots. Off Windows the other modules disagreed too: five different
roots between them.
backend/app_paths.py is now the single resolver, read at call time:
Windows %APPDATA%\<name>\ (no APPDATA: ~\AppData\Roaming\<name>\)
Linux/macOS ~/.<name>/
cache <app-data dir>/cache/
<name> is MK_APP_DIR_NAME if set, else "QuantumTerminal" on every platform.
Default name: kept "QuantumTerminal" rather than switching to
"QuantumTerminal-v2". Electron always passes MK_APP_DIR_NAME=QuantumTerminal-v2
and every module already honoured it on Windows, so Electron users' data stays
where it is (main.js now notes the override is load-bearing). Making -v2 the
default would instead have moved cache, user_config and account state for
every Windows `python launcher.py` user, and merged the browser-mode and
Electron state that main.js deliberately keeps apart.
What moves: Pulse Room's watchlist/scanner files (from the old -v2 folder)
and, off Windows, the scattered account files, consumer_config.ini and
user_config.json. app_paths copies those once into the unified dir; it never
moves or overwrites them, and a marker stops the copy re-running. The
Linux/macOS cache stays at ~/.QuantumTerminal/cache for the default name.
Side fix: off Windows, config_manager's v11 profile migration found no
source and stripped profiles from user_config.json without copying them.
It now reads the live file on every platform.
Tests: backend/tests (conftest sandboxes HOME/USERPROFILE/APPDATA). They show
Pulse Room's builder and the regime routes serving the same synced files under
the Windows and POSIX layouts, with and without MK_APP_DIR_NAME, and that every
module resolves the same dir. pytest.ini limits collection to tests/ because
data_manager/test_data_manager.py is a standalone pandas script.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wyh8TyvaxvhoQeyyADCrbz
Brings in #12 and #13. Conflicts resolved: - data_sync_client.py, cache_watcher.py, launcher.py: keep main's qt.* logger names, ConfigParser(interpolation=None) and frontend-dir resolver alongside the app_paths changes. - pytest.ini: main's version (testpaths = tests data_manager). - tests/conftest.py: main's import-time session sandbox unchanged; the per-test fixtures this branch's tests need (user_dirs, os_layout, expected_app_dir) are now opt-in rather than autouse, so main's suite keeps its stable sandbox. - electron_shell/main.js: main's --sim flag plus this branch's note that MK_APP_DIR_NAME is load-bearing. app_paths' logger is renamed qt.app_paths for test_branding. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wyh8TyvaxvhoQeyyADCrbz
providers/sim_provider.py (new on main) had its own resolver for sim_paper_account.json: %APPDATA%\<name> when APPDATA was set, else ~/.<name lowercased>/. It now uses app_paths.app_data_dir() like every other module, and app_paths copies an existing paper account over from the old lowercase folder once, off Windows. Tests: the every-module check now covers SimProvider._resolve_state_path (it fails on both Linux/macOS layouts with the old resolver), and the lowercase-folder copy test covers sim_paper_account.json. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wyh8TyvaxvhoQeyyADCrbz
One resolver (backend/app_paths.py) for every module's per-user folder, so Pulse Room reads the same analysis cache as the sync client and the cone/regime routes; files from the old locations are copied once, never moved or overwritten.
bands_path() only looked for GLOBAL_<ticker>_bands.json, so with the folders
unified it still missed the band files the sync client keeps under the
current name. It now prefers {TICKER}_bands.json and falls back to the legacy
name only when that is the one present, as the sync client does.
Also notes the shared app-data folder fix under 1.1.0 in the changelog.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01649i4SjUGvhXrPV3AiNhHN
wJubran
added a commit
that referenced
this pull request
Oct 18, 2026
…nd files (#16) Every module resolves its app-data and cache folders through backend/app_paths.py, so Pulse Room finds the cone and band files that the sync client and the local engine write. Files from the old locations are copied in once and are never moved or overwritten. Pulse Room's bands_path() prefers {TICKER}_bands.json and falls back to the legacy GLOBAL_<ticker>_bands.json name only when that is the only file present.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Pulse Room looked for the analysis files in a different folder from everything else. It defaulted to
QuantumTerminal-v2, and to~/.configoff Windows, while the sync client, the cone and regime routes and the new local engine use%APPDATA%\QuantumTerminal\cache. So outside the desktop app it never found the cones, and its snapshot stayed empty.backend/app_paths.pyis now the only place that decides the app-data and cache folders. The sync client, cache watcher, config, account state, logs, Pulse Room, the regime routes and the simulator's paper account all resolve their folders through it.MK_APP_DIR_NAME=QuantumTerminal-v2, so its existing data stays where it is.bands_path()prefers{TICKER}_bands.json, the name the sync client writes. It falls back to the legacyGLOBAL_<ticker>_bands.jsononly when that is the only file present, just as the sync client does.This brings in the folder fix from
claude/affectionate-ride-a3rlofas a merge commit and adds the bands fix on top. It is the last change before the v1.1.0 release.How it was tested
python -m pytestpasses inbackend/: 139 passed on Python 3.10 and 3.13. New tests intest_app_paths.pyandtest_shared_cache_dir.pycover the resolver, the one-time copy and the bands file name.ruff check --select E9,F63,F7,F82 .is clean.XAUUSD_cones.jsonandEURUSD_cones.json.frontend_build/is untouched.Screenshots
No UI changes.
Generated by Claude Code