Documentation Index
Fetch the complete documentation index at: https://mintlify.com/skyrobot804/node_v1/llms.txt
Use this file to discover all available pages before exploring further.
shared_models defines plain Python dataclasses used by both the Node agent and the Boundless Skies cloud, with dict round-tripping for interoperability. Every class provides .to_dict() for serialisation and .from_dict(data) for deserialisation; unknown keys in the input dict are silently ignored, making the module forward-compatible with schema additions. It has no heavy dependencies — nothing from Flask, astropy, or any other large library is imported — so both the node and the cloud server can import it at zero cost.
NodeInfo
Represents one registered telescope node in the Boundless Skies network. Populated during auto-registration and stored in the cloud’s node registry.Unique identifier for this node. Assigned by the cloud on registration or set explicitly in config.
Human-readable name of the node operator.
Contact email address for the node operator.
Observatory latitude in decimal degrees (positive North).
Observatory longitude in decimal degrees (positive East).
Observatory elevation above sea level in metres.
Nearest city name, used for human-readable display in the cloud dashboard.
Country name or ISO country code.
Local UTC offset in fractional hours, including DST when applicable. Used for scheduling plan start times in node-local time.
Human-readable telescope model string. Defaults to
ZWO Seestar S50.Telescope aperture in millimetres. Used for limiting magnitude estimates.
Telescope focal length in millimetres.
Diagonal field of view in degrees. Used for target schedulability checks.
Image scale in arcseconds per pixel. Used by the cloud planner for astrometric feasibility.
Comma-separated list of available filter names (e.g.
"CV,B,V,R").Brightest magnitude the node can safely observe without saturation. Targets brighter than this are excluded from plans.
Faintest magnitude reachable with acceptable SNR. Targets fainter than this are excluded from plans.
Minimum target altitude above the horizon in degrees. Observations below this limit are not scheduled.
Maximum single sub-frame exposure in seconds, typically constrained by field rotation on an unguided alt-az mount.
Sky background brightness in magnitudes per square arcsecond. Higher values indicate darker skies.
Bortle dark-sky scale (1 = darkest, 9 = inner-city). Used as a scheduling quality signal.
Node operational status. One of
active, offline, or disabled. Offline and disabled nodes are excluded from nightly plan generation.TargetInfo
Represents a deduplicated, cross-matched science target from the alert ingestion pipeline.Internal unique identifier assigned during alert deduplication.
Human-readable target name (e.g.
"SN 2024abc", "AT2024xyz").Right ascension in decimal degrees (J2000).
Declination in decimal degrees (J2000).
Most recently reported magnitude.
None if no magnitude is available from any alert source.Photometric band of the
mag value (e.g. "r", "V", "g").Science classification. One of
SN, CV, TDE, VAR, EB, AGN, GRB, or unknown.Scientific priority baseline in the range 0–1. Used by the cloud planner to rank targets. Higher values are scheduled preferentially.
True for targets that must be observed at a specific epoch (e.g. GRBs, predicted maxima). Time-critical targets are prioritised over cadence targets even at lower priority scores.Desired re-observation cadence in hours. Targets not observed within this window are given a scheduling boost.
List of alert broker names that reported this target (e.g.
["alerce", "gaia", "ztf"]).ISO 8601 timestamp of the first alert for this target.
False when a target has been retired (e.g. faded below node limits or reclassified). Inactive targets are excluded from new plans.PlanItem
Represents a single scheduled observation within a nightly plan. Field names exactly match the node dashboard schedule runner format so aPlanItem dict can be POSTed directly to /api/schedule/run or executed by _run_schedule_bg without transformation.
Human-readable target name passed to the node’s pointing and photometry pipeline.
Right ascension in decimal hours (0–24), as required by the node schedule runner.
Declination in decimal degrees.
Sub-frame exposure duration in seconds.
Number of sub-frames to collect in this observation slot.
Camera binning factor (1 = unbinned, 2 = 2×2, etc.).
Scheduled start time in node-local 24-hour format
"HH:MM". Empty string if the item runs as soon as the previous item finishes.Cloud-side
TargetInfo.target_id. Ignored by the node schedule validator but included in to_dict() output for round-tripping.Scheduler score assigned to this item by the cloud planner. Informational only.
Filter to use for this observation slot.
Free-text notes from the planner (e.g. visibility window, priority justification).
.to_dict()— serialises all fields including cloud-side metadata..from_dict(data)— deserialises from a dict, ignoring unknown keys..to_node_item()— returns a stripped dict containing only the seven fields the node schedule runner consumes:target,ra,dec,expDur,expCount,binning,startTime.
ObservationPlan
A complete nightly observation plan for a single node, containing an ordered list ofPlanItem objects.
Unique identifier for this plan version, generated by the cloud planner.
The
node_id this plan was generated for.Local evening date this plan covers, in
YYYY-MM-DD format.ISO 8601 timestamp of when this plan was generated by the cloud planner.
Ordered list of
PlanItem instances. from_dict() automatically converts raw dicts in the items array to PlanItem objects. to_dict() converts PlanItem instances back to dicts; raw dicts are passed through unchanged.Measurement
One photometry result fromphotometry.run_pipeline(). Field names match the pipeline output dict exactly, so Measurement.from_dict(result) works directly on the node side, and the cloud can validate uploaded measurements using the same class.
shared_models.py
Name of the observed target. Must be non-empty for
is_valid() to return True.Barycentric Julian Date of mid-exposure. Must satisfy
2400000.0 < bjd < 2500000.0 (roughly 1858–2132 CE) for is_valid() to return True.Instrumental or calibrated magnitude of the target. Must be in the range
(-5.0, 30.0) for is_valid() to return True.1σ photometric uncertainty in magnitudes. Must satisfy
0.0 ≤ uncertainty < 5.0 for is_valid() to return True.Filter bandpass used for this measurement (e.g.
"CV", "V", "B").Airmass at the time of observation.
None if not computed.Median stellar FWHM in pixels for this frame.
None if not computed.Signal-to-noise ratio of the target aperture measurement.
None if not computed.Number of comparison stars used in the differential photometry solution.
Pipeline quality assessment. One of
good, acceptable, or poor. Must be one of these three values for is_valid() to return True.node_id of the node that produced this measurement, populated before upload.Photometric zero point applied during calibration.
None for uncalibrated measurements.RMS scatter of the zero-point solution across comparison stars (magnitudes). A proxy for calibration quality.
Filename of the source FITS file. Used to locate the file for optional raw image upload.
is_valid() performs basic sanity bounds checking before a measurement reaches the database:
True only when all five conditions are satisfied simultaneously.