Tags

Tags give the ability to mark specific points in history as being important
  • v0.6.0

    protected
    v0.6.0: the lens from a list, a star database that fits it, and a CSI camera at its full depth
    
    The setup page and the first-boot page offer fifty real lenses instead of a
    text box (ADR 0042). `optical-process` hands cedar-solve a star database built
    for the field of view that lens gives, and a station with no lens says so. A
    CSI camera runs at the deepest sensor mode of its size and its noise estimate
    reads the frame's real ADU grid: the software half of why the HQ Camera never
    plate-solved. Its line time is now measured. A station no longer reverts its
    own configuration (ADR 0041). The live view is a stream. Alpha-5 catalogue
    numbers reach the correlator, and one dash in one sub-frame is one dot. A
    station keeps running past the bundled IERS table's expiry, past a telemetry
    queue over 256 rows, and past a distortion refit that runs away.
  • v0.5.0

    protected
    v0.5.0: a second camera, a site from the receiver, and a correlator that reads it
    
    The first release with two camera vendors: an SVBONY SV705C is a frame
    source and produces the stvid fourframe. A GNSS-sited station carries the
    receiver's median position through the gate, the store and the wire, and
    optical-process builds its correlator from that same site, so a station
    with no [site] table stops reporting every track as unknown. A PPS
    station's clock term reaches the network, the plate solver and the linker
    may take different detectors, and a pass is matched at the seam between
    two groups.
    
    __version__ and pyproject both move to 0.5.0.
  • v0.4.1

    protected
    v0.4.1: an owner picks the channel their station follows
    
    Two channels, beta and stable, and the first release a station can choose
    to stay on. Carries the updater that knows the two names and refuses any
    other, the channel picker on the Software card, and the resolution that
    makes the card and the network report the channel a station is actually on
    rather than the one it was flashed with.
    
    A station must be RUNNING this build before its owner can pick stable: the
    allow-list ships on the card, so the path is beta -> here -> choose.
    
    __version__ and pyproject both move to 0.4.1.
  • v0.4.0

    protected
    v0.4.0: the station restarts from its own page, and stops reporting itself healthier than it is
    
    Two defects the tests agreed with -- acquire/fits.py 16-20x slower than the
    astropy call it replaced, hough3d.Track3D.direction wrong by ~6300 -- and,
    from the night of 2026-08-29 on station 4, five surfaces that reported a
    station healthier than it was: the crop count, solve_rate, the unit states,
    the station's own name, and retention deleting stacks the pipeline had not
    read. The video stream is now held open across stacks (issue #7), which took
    the measured inter-stack gap on bench1 from ~2.0 s to ~0.5 s.
    
    __version__ and pyproject both move to 0.4.0.
  • v0.3.0

    protected
    v0.3.0: stvid's rule becomes the default
    
    ADR 0021 accepted (2026-08-29). [pipeline] per_dot_detector defaults to
    "stvid" with per_dot_emit "blobs"; fourframe stays registered as the rollback.
    __version__ moves to 0.3.0, having stood at 0.2.5 through five tags.
  • v0.2.10

    protected
    v0.2.10: the run directory is writable by the units that write it
    
    `ProtectSystem=strict` remounts the filesystem read-only apart from
    `ReadWritePaths`, and neither `optical-acquire` nor `optical-web`
    listed `/run/satnogs-optical`. tmpfiles.d creates that directory 0750
    satnogs-optical and the image's permissions policy states the service
    needs rwx there; both were true of the directory and neither of the
    process.
    
    Focus mode had therefore never worked on a real station: the viewer
    writes the marker, and every write failed with EROFS. It had only ever
    been exercised outside the unit's sandbox. The Live view's own state,
    published every cycle since v0.2.9, failed the same way.
    
    Same root cause as the claim install dying in its own sandbox. The
    companion test derives each marker's path from the module that writes
    it, so a new marker cannot be added without a unit that can write it.
    
    `publish` still cannot raise -- it runs inside the capture loop -- but
    it says so once. The silence is what let this hide.
  • v0.2.9

    protected
    v0.2.9: the station says what it is doing, from what it is doing
    
    The Live view took the station's state from the newest
    `acquire_holding` telemetry row. That reader can only see unsent
    telemetry, and `optical-agent` drains the queue within seconds, so the
    blocking condition was invisible whenever the uploader was keeping up.
    
    Station 4 on the morning of 2026-08-28: the sun 26 degrees up,
    acquisition logging *holding - darkness* every minute, 810 holding rows
    in the store and none of them unsent, and the page reporting
    `observing / capturing: true / measuring: true`.
    
    Two more faults in the same call: it took `limit=1` and filtered by
    kind afterwards, and it hardcoded `running=True`, which made `stopped`
    unreachable. Three of the four named states were decided by whether an
    upload had happened.
    
    Acquisition now publishes its state to the run directory once per
    cycle, beside the focus marker and on the same terms: tmpfs, 0644, and
    `running` derived from the marker's age rather than claimed by the
    writer.
    
    Making `stopped` reachable exposed that the focus button followed the
    state word, so an operator whose acquisition had died could turn focus
    on and lose the control that turns it off. It follows the request now.
    The browser flow test is what caught that.
  • v0.2.8

    protected
    v0.2.8: ending focus mode actually ends it
    
    Two faults found ending the first real focus session on station 4.
    
    `stop` reported a state it had not achieved. It returned an inactive
    state unconditionally, so the viewer answered `{"active": false}` while
    the marker was still on disk, owned by another user, and the station
    was still focusing. The marker is written by the viewer and read by
    every optical-* unit as a different user, so failing to remove it is
    the realistic case rather than the exotic one. It now reads the state
    back from disk, raises `FocusNotStopped` when focus mode is still on,
    and the route answers 503.
    
    Removing the marker did not end the focus session. The prefix that
    decides whether a frame is ever measured is chosen once and nothing
    revisited it, so acquisition went on writing into `focus-<date>` --
    which the pipeline steps over by design. Every frame captured after the
    operator stopped was captured, stored and never measured, while the
    page said the station was measuring.
    
    The same gap is worse entering focus mid-session, where frames taken
    with a hand on the focus ring are measured and uploaded as evidence.
    That has gone unnoticed only because focus mode has so far been started
    in daylight, where the gate had already closed the session at dawn.
    
    Both are one fix: leaving focus is a session boundary in the same way
    entering it is.
  • v0.2.7

    protected
    v0.2.7: the night the linker stopped throwing away trails
    
    Two independent defects were making this client report single points
    where the sky had lines, and a third was quietly discarding the stacks
    that had trails in them. All three were found by measuring station 4
    rather than by reading the code.
    
    A five-sigma cut on an integer frame was measuring the ADU grid. The
    median absolute deviation of a quantised array floors at the
    quantisation step, so the nominal 5 sigma cut was landing at 12.2.
    
    A pass one stack apart could not be joined: the association gate was
    capped at 3.0 deg, below one stack's own cadence.
    
    The linking budget skipped exactly the stacks that had trails in them.
    Linking cost rises with the number of detections, so the only stacks
    expensive enough to exceed a budget are the ones worth linking. The
    throughput estimate that drove it timed the whole stack rather than the
    linker, learned from clouds too small to measure, and ratcheted upward
    for ever. It read 46x too pessimistic; the 100-point trail it refused
    as "25.5 s" links in 32 ms.
    
    ADR 0021: stvid's detection core is vendored as GPL-3.0 source rather
    than reimplemented, after cgbsat challenged the clean-room approach.
    cedar keeps the astrometry. stvid has been the window detector on
    station 4 since 2026-08-27 and agrees with the clean-room detector to
    within one point per stack on identical input.
    
    Also here: focus mode and the four named station states, a daylight
    gate that stops capture and processing while the sun is up and nothing
    else, per-dot epochs read from the anchor a stack declares, and a TOML
    station that can finally change its exposure and stack depth.
    
    Verified on optical-bench1 (station 4) as
    devel-3a1bd09d-69193916-ab: budget skips 40 -> 0, degraded 389 -> 0,
    throughput 3.48e-4 -> 7.5e-7, and measurements from 3 in an evening to
    hundreds in an hour.
  • v0.2.6

    protected
    v0.2.6: video mode earns its epochs
  • v0.2.5

    protected
    what the station says about itself
  • v0.2.4

    protected
    the sky the right way round
  • v0.2.3

    protected
    the night the station started telling the whole truth
  • v0.2.2

    protected
    0.2.2: the one-band live dashboard, the tools on the configuration page, sun and clock in the band, and the live view learns Cees's planes -- mean, trails, and the time rainbow. First release whose epoch orders correctly.
  • v0.2.1

    protected
    0.2.1: the live dashboard for first-light night -- live view, focus PSF and the newest solve on one full-width page; the station reports its measured clock, temperature and throttling; the declared site reaches acquisition.
  • v0.2.0

    protected
    SatNOGS Optical client 0.2.0: A/B updates proven over the air both ways with autonomous confirm; the agent leaves the gate and a half-provisioned station reports the half it has; the viewer shows and triggers updates; writes open on the LAN (ADR 0012 amendment); persistent journal and the start-limit latch lint. Station 4 became visible to its network today.
  • v0.1.2

    protected
    v0.1.2 — the station page an operator can actually open
    
    The first client tag, and the first release built by the two-image strategy:
    this tag is resolved to the commit it names and becomes the default row in
    Raspberry Pi Imager.
    
    What changed since b8dd12f, the client the published image had been building
    from:
    
      optical-web binds the LAN (#4). It defaulted to 127.0.0.1, so a station's own
      viewer answered only on the Pi. P1.5 recorded the local viewer as delivered
      and no operator could reach it.
    
      It answers on port 80, shares that port with optical-setup through the claim,
      and no longer waits for the readiness gate -- a station claimed at noon used
      to serve no page at all until sunset, because optical-setup exits on claim
      and the viewer would not start until dark.
    
      A station reports which build is answering. satnogs-optical-client/0.1.0 is
      what every build has ever called itself, so nothing the station served could
      answer "does this one have the fix". It now reads the provenance the image
      bakes onto the card and reports it on its own page, on /api/v1/health, and --
      through the batch that produced the measurements -- on optical.satnogs.org.
    
      A client change now builds an image. The trigger lives here because "the
      client changed" is only knowable here, and the gap it closes is real: the fix
      above sat unbuilt while the published image kept shipping a client four
      commits older.
    
    NOT verified on hardware. No station has booted this stack, and P1.41 -- the
    first measurement from the 2.0 stack reaching the network -- is still open. The
    release checklist in the image repo asks for a real claim from a flashed card
    before a version is called stable; that has not happened for this one. It is
    tagged deliberately anyway, and the (beta) row carries the same code for anyone
    who would rather test before trusting.