Tags: DanWBR/NINA.Polaris
Tags
fix: the WiFi scan client gave up before the host did - networkRescan waits 45s, above the endpoint's own 40s ceiling (25s forced rescan + 15s cached fallback); the default 15s aborted mid-scan - an aborted scan and an empty result now explain themselves and point at typing the SSID by hand - new strings in pt-BR, es, fr, de and _source Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fix: plate-solve a full-resolution sub instead of the reduced live stack - LiveStackingService keeps the last sensor-resolution sub while _stackBin > 1 and exposes it as LastFullResolutionFrame; cleared on Stop and Reset - /api/platesolve/solve-latest prefers it over the relayed stacked image and logs when it does Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
static files: stop caching the wasm bundle for 7 days without revalid… …ating /js/wasm/ was on the long-lived list next to the HiPS tiles and the vendored libs, but dotnet.boot.js hashes every other file in the bundle and the runtime rejects any file whose hash disagrees, so the bundle is only usable as a consistent set. - move the rule into StaticAssetCachePolicy and cover it with tests - /js/wasm/ revalidates; a 304 carries no body - match the long-lived paths by prefix instead of substring Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
settings: file the renamed card correctly, and stop tracing routine u… …nreachables The Display name card landed under "Other". reorderSettings keys its category map on the card's TITLE, so renaming Host name to Display name silently unmatched it. The entry now lists both spellings, and an unmatched card warns in the console instead of quietly falling into "Other", which is how this went unnoticed until it was reported. Auto-connect logged a full socket stack trace when PHD2 was not running. It runs on every boot and tries whether or not PHD2 is up, and most of the time it is not: that is the operator starting it later, or never. A healthy startup therefore read as a fault, and a log full of harmless traces is a log people stop reading. - "nothing is listening there" (ConnectionRefused, TimedOut, HostNotFound, HostUnreachable, NetworkUnreachable, TryAgain, our own 5 s cancel) gets one line that still names the reason, since refused and not-found are different problems - anything else keeps its trace, at Warning; quietening a real surprise would trade noise for blindness - the socket error is unwrapped through IOException/AggregateException, or every real case would fall through to the noisy branch - the INDI path had the identical defect and gets the identical treatment Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
certs: put the name mDNS actually advertises into the certificate
mDNS advertises polaris-app-{shortId}.local so that cards flashed from one
image do not collide, and the certificate carried a hardcoded
polaris-app.local. The name discovery hands a client was therefore never in the
cert, so connecting the way the app tells people to connect always failed
validation. Two components deciding the same fact independently.
- DeviceIdentity is now the one place that decides the device's network names;
MdnsService and SelfSignedCertService both call it, so the advertised name
and the certified name cannot drift apart again
- the SAN list leads with the per-device name, the only one that stays correct
once a second board joins the network, and keeps the shared aliases
(polaris.local, polaris-app.local, hostname.local) because whichever board
answers to them still has to present a cert that validates
- an Mdns:InstanceName override now reaches the cert too, so pinning a name
cannot lock the operator out
The Settings card called itself "Host name", labelled its field "Name", and
printed a different "Network name" underneath, so an operator typed a name, saw
another one below it, and concluded the setting was ignored. It is now "Display
name" and says outright that it is a label: it never touched the host's
hostname and never enters a certificate.
- translated in pt-BR, es, fr, de; the replaced strings are retired
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ui: give .input-sm the min-width its own comment has always claimed The SSH port field showed "2" for a value of 22: with field-sizing: content and no floor, the box shrinks to the value and a number input's spinner arrows then sit on top of the last digit. That is the same failure the comment in this rule describes the old fixed 80px causing, reintroduced by the fix for it, because the min-width it promises was never written. - .input-sm gets min-width: 72px - input[type="number"].input-sm gets 96px, since the spinner takes ~20px the text never gets to use and a port is five digits Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
onnx: remember model hashes across restarts, and warm them off the re…
…quest path
The first GET /api/onnx/manifest after every restart read and SHA-256'd every
model on disk: on the Q6A that is 24 files and 3.86 GB off the system card,
measured at 48.07 s in the field log. The browser fetches that manifest at
startup, and while it runs the card is saturated, so serving the UI's own
JavaScript queues behind it. It read as a slow network.
- hashes persist to {DataDir}/onnx-hashes.json, keyed on path + size + mtime,
so a model replaced by an update or a download is re-hashed and an untouched
one is free from then on
- written via a temp file and a move, so a crash mid-write cannot leave a
truncated cache to be read back as garbage
- WarmHashesAsync runs after the startup scan, so a fresh install pays the cost
in the background rather than inside whichever request arrives first
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
storage: grant the capture-disk unit its own polkit rule, and make th…
…e card readable
Setting up a disk failed with "Interactive authentication required". The v1
claimed the self-update's PolicyKit rule already covered the new unit; it does
not. 50-polaris-update.rules scopes its grant to
action.lookup("unit") == "polaris-self-update.service", and the appliance runs
polkit 124, which reads .rules and ignores the broad manage-units grant in the
.pkla twin.
- 50-polaris-storage.rules grants the polaris user exactly one more unit,
polaris-storage-prep.service, with the .pkla twin for polkit < 0.106
- 50-polaris-solverdb.rules: auditing every unit the app starts against the
units named in a grant turned up the same hole in the solver-database
install, which would have failed identically on a host that never had one
- the storage card is near-opaque instead of an 8% amber wash: HOME sits on a
photographic sky and the description was unreadable over stars
- more padding, and the disk picker sizes to its content -- .input-sm caps small
controls at 220px, which cut "KBG40ZNS256G NVMe KIOXIA 256GB" to "KBG40ZN"
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
planetary: debayer the stack, instead of writing a mosaic and labelli… …ng it The stacker mean-combined the CFA mosaic and stamped BAYERPAT, on the theory that downstream tools would debayer it. They mostly do not: PixInsight needs an explicit Debayer process, and every tool here treated the result as one grey plane. A stack from an ASI585MC opened grey. Sharpening it was also wrong arithmetic, which matters more than the colour: a wavelet transform over a mosaic reads a red sample and the green beside it as neighbouring values of one signal, so "sharpen the finest scale" sharpens the Bayer pattern. - the stacker debayers once, after the stack, and writes an RGB cube. That order is what the even-pixel alignment shift already existed to make valid: the CFA phase survives the whole stack, so the single debayer at the end sees a mosaic with its noise already averaged down - the result declares no BAYERPAT, so nothing debayers it a second time - WaveletService debayers a CFA input on load, so the stacks already on disk from before this open in colour and get correct maths; a mono frame is untouched Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
planetary: write recordings under the active rig, not a folder at the…
… capture root
SER clips went to {ImageOutputDir}/planetary/{target}, outside the per-rig tree
every other capture output uses, so two rigs piled their clips into one folder.
Stacks follow for free: the stacker writes into {folder of the SER}/stacked.
- ImageWriterService.BuildPlanetarySubDir gives {rig}/planetary/{target},
sanitised the same way as the lights and calibration trees
- the recordings listing scans every rig's planetary folder AND the legacy root,
so existing clips stay in the picker; nothing is moved
- each entry reports its rig, so two clips of the same target from different
scopes are told apart; a legacy clip reports none, because its path does not
record which rig shot it
- the benchmark write probe follows the recordings it is measuring
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PreviousNext