Positron Shell¶
Status: implemented as an experimental local shell in this slice.
The current Positron port lives under shells/positron/.
Current responsibilities:
import the shared Django code from
src/instead of forking app code into the shellvalidate that the shared Django source tree is present before configuring Django, so startup failures stay readable
start Django inside the Positron process with an in-process WSGI server bound to a random localhost port
generate a fresh per-session shell-to-Django auth token, pass it into Django as
DESKTOP_DJANGO_AUTH_TOKEN, and load the web view through Django’s/desktop-auth/bootstrap/URL so Django can set an HttpOnly same-origin auth cookie before redirecting to the appenforce a single running instance per app-data directory with a lock file before the in-process server starts
run the optional
tasks_demoworker in-process on a background threadalways boot Django with
desktop_django_starter.settings.packagedso local Positron runs validate the packaged-style app-data and staticfiles contractrefresh collected static files on startup without clearing the cache-backed staticfiles tree on every launch
reuse the shared brand source under
assets/brand/and generate shell-local icon outputs intoshells/positron/resources/keep Positron-specific runtime behavior under
shells/positron/src/desktop_django_starter_positron/
Local commands:
just positron-installjust positron-checkjust positron-startjust positron-smokejust positron-iconsjust positron-createjust positron-buildjust positron-package-dmg
Update strategy in this repo:
manual-only for now
current install/update artifact: a local macOS DMG produced by
just positron-package-dmgcurrent operator path: build the newer DMG locally on a macOS machine with the Briefcase prerequisites, quit the installed app, then replace the app manually from that newer DMG
current artifact boundary:
just positron-package-dmguses Briefcase ad-hoc signing, so the resulting app is only suitable for local validation on the machine that built it rather than a hosted end-user release lanelocal Positron updates should leave per-user app data in place because the app bundle is replaced separately from the writable app-data directory
Briefcase development refresh flows such as
briefcase updateorbriefcase build --update-resourcesare not presented here as end-user auto-updatethere is no connected updater, hosted artifact lane, checksum lane, or GitHub release-publication flow for Positron in this repo
a broader Positron updater path would first need a real hosted artifact lane, checksum generation, release publication, platform signing/notarization, and Windows packaged install/run proof
Scope boundaries:
Positron is still experimental and local-only in this slice
GitHub Actions artifact generation remains out of scope
Electron remains the most complete shell path
packaged startup uses the same fallback
DJANGO_SECRET_KEYvalue as Electron and Tauri when the environment does not provide one; this is only a local bootstrap convenience, not a release secretPositron uses a bootstrap HttpOnly cookie instead of Electron’s hidden per-request header injection because this Toga web view path does not currently have an Electron-equivalent external-localhost outgoing request header hook
Positron now enforces single-instance startup, but unlike Electron and Tauri it currently exits the second launch instead of focusing the existing window
Positron intentionally always uses the packaged Django settings module, even during local shell runs, so the experimental shell exercises the desktop-style SQLite location and collected-staticfiles path instead of Django’s debug-oriented local settings
startup still refreshes collected static files locally without clearing the cache-backed staticfiles tree on every launch
splashscreen parity is intentionally not required on macOS for Positron
Positron is not a release-parity path in this slice
Windows packaged-build parity is not claimed for Positron yet
local macOS packaging uses Briefcase and currently depends on ad-hoc signing
tasks_demo posture in this slice:
supported
Positron intentionally differs from Electron and Tauri here: the shell starts the
django_tasks_dbworker in-process on a thread instead of spawning adb_workersubprocess