Skip to content

chore(dev): release 0.2.0 - #7

Open
github-actions[bot] wants to merge 1 commit into
devfrom
release-please--branches--dev--components--syncai-hydranet
Open

chore(dev): release 0.2.0#7
github-actions[bot] wants to merge 1 commit into
devfrom
release-please--branches--dev--components--syncai-hydranet

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 17, 2026

Copy link
Copy Markdown

🤖 I have created a release beep boop

0.2.0 (2026-08-19)

⚠ BREAKING CHANGES

  • remove the quadruped line

Features

  • --stabilise on hydranet-scene, and the Pillow constant the stubs dropped (f84429c)
  • --vocab retail on hydranet-scene, so a display case stops being an oven (a4bc777)
  • product is a detection question, so take it out of the dense head (e92b079)
  • a column supplement arm, and the held-out cameras that judge it (8184010)
  • a control for the FCOS towers at half depth (9a23366)
  • a crop encoder whose attribute training bought association it was not asked for (e79421d)
  • a depth head, the third head family the registry was built for (0f8f8ea)
  • a loader for rendered depth, and a 300x faster semantic snap (e1f2bdf)
  • a night person veto that removes a box whose pixels never moved (359f2dc)
  • a python TensorRT sweep, and bench deps that survive a resync (5b6d380)
  • a second retail taxonomy, for naming objects rather than free space (31079fa)
  • a shape for the classes whose name is already the claim (e1ca530)
  • a stabiliser that has stopped working says so instead of coasting (dfa42e5)
  • a vanishing point says how well its lines actually meet (0a6f276)
  • accept a directory of stills, for the cameras nobody kept the video of (c95291f)
  • adopt the static-plate builder the shared tree already relies on (56acd77)
  • adopt the static-share scorer for person pseudo-boxes (f3525aa)
  • alerts become training data the day they are raised, not later (46793c9)
  • arrows steer in movement mode instead of doing nothing (dc419ec)
  • batch03 annotation, class weights for the class that was eating its neighbours (177e9fc)
  • body height while walking, and a forwarder that survives the cable coming out (6a6595b)
  • calibrate a fixed camera from its floor tiles, distortion first (cb39a27)
  • check fixed_weights against the heads that exist (5d9e448)
  • check the site split against its own rules, from the record (8b7e221)
  • column is sourceable from site after all, at a threshold it had to earn (f2ee5bd)
  • deploy/robot, the quadruped surface of a repo that was only retail (87025fd)
  • derive free space from terrain when a config drops the traversability head (573290c)
  • draw the floor panel as a room rather than as a plot (362a224)
  • draw the floor scene like something you would look at, not a plot (ce8445f)
  • draw the person mesh in the panel people actually look at (4cbc6f3)
  • E-prep run once, and the sonar anchor it disqualifies (accd2c8)
  • evaluate the crop encoder on what mean accuracy hides (0eeacd5)
  • fold the segmentation argmax into the exported graph (bb6f306)
  • give the text-embedding head the matrix it was always documented to have (d9bb6b1)
  • in-domain person supervision from the Grounding DINO site batch (3e37368)
  • join three night measurements into a per-camera person verdict (caae812)
  • label a fixed camera by consensus, for when nobody can correct a mask (f0d9e0b)
  • label rendered poses from the geometry, not from where the camera was put (7642de1)
  • let the ROS live view choose the interface it serves on (af9e7c1)
  • let the segmentation loss weight its classes (4c29036)
  • make the detection vocabulary data instead of weights (126298a)
  • make torch.compile an opt-in training knob (cf17644)
  • make track ground truth a judgement instead of a labour (a3a0fa2)
  • measure identity before building anything that claims to fix it (078f0e9)
  • measure the model on the store, without labels (faa6198)
  • measure the val set's own error bar before buying more of it (5a39b52)
  • measure what int8 actually costs, and stop asserting it (fdfee2e)
  • mirror runs/ into a local MLflow index; files stay the truth (888d4bb)
  • move cameras between splits in every batch at once, or not at all (2f8fe95)
  • name the classes one dataset has and a bigger one does not (bc43b57)
  • narrow the detection classes at export, not at training (4fb05ff)
  • night person filter CLI, and the acceptance criteria as tests (95e9be1)
  • offline non-causal tracking turns a clip into a handful of merge decisions (4e5ff7f)
  • one answer per shopper, with the number that says how much to trust it (3aaeefe)
  • one camera and one light rig for anything that draws a mesh (0a78138)
  • one detection head can hold person and boxed_stock, if the loss stops lying (12b236d)
  • one plate calibrates orientation; the metre needs a known length (e003b54)
  • optional CUDA graph capture in the live viewer (b60f79e)
  • people-flow analytics, as post-processing rather than a fourth head (d594db7)
  • pose pilot, the first current through the tier-2 keypoint slot (4538867)
  • pre-label with SAM 3 the classes no public dataset supplies (74dc2d0)
  • procedural meshes for the scene, sized from what was measured (f0558ef)
  • push the retail canvas to 640x1120, the lever that measured largest (ee1bdc1)
  • put a wall clock on every security event (5dac1fb)
  • quad layout renders the depth head on a fixed metre ramp (84c90e5)
  • RAP v2 lands on the attribute pipeline, and cameras onboard from one plate (935ef42)
  • re-sweep column per camera, and keep the identities this time (2388b88)
  • read merchandise out of SAM 3 as instances, not as pixels (7cd071e)
  • rebalance the site run, because the class was suppressed rather than unlearned (404a7e4)
  • refuse a dirty tree at the start of training, not at release (3375696)
  • remove the quadruped line (eca3814)
  • render HM3D at a measured camera pose, without habitat-sim (b56ed0a)
  • report what each per-class IoU stands on, not just the IoU (e4655a0)
  • say at config time which classes no dataset can produce (a716c37)
  • say what best.pt gave up on the heads it was not selected for (64a7cbf)
  • security events are geometry and time over tracks, and none of them is a head (10cb1bb)
  • serve_pilot -- 16 streams end to end hit 16 x 14.6 fps, post is the frontier (cbe1aef)
  • serving package -- the H2D recovery and the per-camera serving state (0086a87)
  • shelf coverage at native resolution, and a daylight threshold that was guessed (70759db)
  • ship the fleet aggregator, because nanmean would hide the busiest camera (66b1ad4)
  • stop training when it stops improving, and score mAP less often (dcc4b2f)
  • teleop control interface, the whole command set the spec documents (adb579a)
  • the 96-stream 15 fps serving target, and the sweep that will measure it (cc80fc3)
  • the configs behind today's four runs, with their empty channels pinned (3a8608c)
  • the flicker ruler, measured before any smoothing exists to help (e94781e)
  • the HM3D-rendered depth experiment config for the CCTV line (933c93c)
  • the official 0x0901 telemetry the beta comm spec documents, wired in (b40c6fb)
  • the robot's model plus a depth head, one change from the deployed config (1e5454f)
  • the teacher's error bar, measured on NYUv2 instead of waiting for the robot (28e63e8)
  • the whole stack as a video, and site person boxes whose second gate failed its own test (45b6732)
  • three paired seeds for the retail+security run, and the config check that saves them (298b727)
  • three stabilisation switches, measured against the flicker ruler (d8542fd)
  • train on the shop, not on photographs of other buildings (ae554c0)
  • zone proposals from the fleet calibration, for a human to confirm (d94faf5)

Fixes

  • product needs its own score threshold, because goods are not furniture (b0ab253)
  • a config gained class names and its test did not (cf99f18)
  • a det_vocab checkpoint names its own boxes; --vocab is for COCO heads (554e5af)
  • a detector that returned nothing has an mAP, and it is zero (517b943)
  • a palette for retail_surfaces, which crashed three seed runs on epoch 1 (1755f0d)
  • a report says what decided its numbers, not where anything lives (73e96ed)
  • a review sheet with no crops is not a review sheet (a01d1d6)
  • a run records the directory it wrote to, not the one it was asked for (84c9f82)
  • a second run in one process wrote its log into the first run's directory (93f57cc)
  • a session directory should mean frames were written (26def9e)
  • adopt 3-of-4 tranches as the column supply rule, and apply it (7ae9ee9)
  • an all-ignore batch has no mean IoU, and should say so without warning (592a0a6)
  • an instance box the size of a counter is not an instance (b61ca0c)
  • an output directory named after a filename is not an identity (ed0b65d)
  • bound the ffprobe call, so one unreadable clip cannot stall a batch (537c341)
  • check augmentation settings where they are read, and ratchet the baseline down (559ffa3)
  • claim a run directory when it is resolved, not when meta.json lands (d5858cf)
  • ffprobe refuses the section name every video path asks for (550138a)
  • four annotations that were wrong, not merely unproven (666a396)
  • guard the by-path loader against None specs, paying the scripts/ ratchet back to 18 (783fc5b)
  • ignore the .plan engines the pro6000 sweep leaves behind (e201999)
  • let a point vote only for the line direction its gradient supports (08763f4)
  • make assets/ an allowlist, so a store frame cannot be added by accident (20ebaf0)
  • neither Jetson script started on a CUDA 13 board (547b14c)
  • no module unpickles a checkpoint outside load_checkpoint (4e54bb6)
  • one clip loop, and it refuses to guess whether to correct the lens (eb7adb6)
  • pay the src/ type debt back past where it started, 11 -> 8 (e468209)
  • pin the type ratchet's interpreter, because the number moved without the code (a7d8410)
  • probe the frame rate that was recorded, not the one the container claims (cef93b2)
  • raise when ffmpeg stops early instead of calling it the end of the video (40a553c)
  • reach_to_shelf reads what the hand is over, not the pixel the hand hides (9e6818c)
  • reading a finished run must not require the validator written after it (ea75264)
  • Recorder is a context manager, which five tests had been proving it needed to be (854fe0a)
  • refuse a resplit that would leak into a train-only supplement (23f88ee)
  • refuse a run that trains on the cameras it will be scored on (8bd195f)
  • scope a numpy-2.5 stub false positive so the scripts ratchet reads true (5e2d6e1)
  • score each validation set separately, because pooling hid a working model (1f88a76)
  • select this run on the store's val frames, not on ADE20K's hallucinations (fe08559)
  • shut the video encoder down on every path, and check that it succeeded (efd4345)
  • spell the PIL constants the way a static checker can see them (a3778b0)
  • stop caveating void, which nobody trains (6d3cc45)
  • the acceptance test passed a camera pointed at the ceiling (af2922c)
  • the annotation gate leaked a file handle per mask it refused (93351db)
  • the dashboard page was cacheable, so a redeploy could be invisible (7373b45)
  • the minority-source check confused expressible with present (75cd43e)
  • the Orin is the retail line's board, not the quadruped's (e77a219)
  • the panel was naming boxes from a table the head does not use (47c47e3)
  • the tracker matched against a prediction, and for a standing shopper that is jitter (759bb41)
  • the type ratchet was rewriting the venv it measured (b4e8c81)
  • three tables that named things they do not describe (5809d4f)
  • two of three teleop axes were inside the robot's deadzone, plus arrow-key posture (febd464)
  • write checkpoints through a rename, so a preemption cannot destroy the last one (4f01269)

Performance

  • batch the EMA update instead of launching a kernel per tensor (590e35f)
  • raise workers and channels_last from a measured ceiling, not a guess (9e4378e)
  • SAM 3 was re-encoding the same image 44 times a frame (b030275)
  • snap semantic colours over distinct values, not pixels (163289d)

Refactoring

  • 255 has one definition, and labels.py finally reaches the places it named (458fdea)
  • check one dataset entry in one function (1b4aa8b)
  • deploy/ is where the model runs, so annotation is not a deploy target (cb07537)
  • drop the flat BEV panel, superseded as the default since 362a224 (db1d0e0)
  • drop the last private source_fps, now that probe reads the same field (a0d9471)
  • frame selection is library code, not one script importing another (35dc2f8)
  • give prepare-cocostuff a build_parser, and its first tests (25f8f1c)
  • give the preprocessing constants a home below everything (66cb570)
  • give the two scene payloads a shape a checker can hold you to (846d920)
  • group the quadruped line into its own scripts/ and configs/ subdirectories (bd1ecaa)
  • let the preview be a scene, not a second renderer (8370d5c)
  • lift five concerns out of the Trainer constructor (89afb98)
  • make the network iterate its heads instead of unrolling detection (9a2921d)
  • move per_image_confusions into the package as engine/confusion (80ce609)
  • move EMA and the optimiser schedule out of the trainer module (025a34a)
  • move the ByteTrack forward pass into the package as analytics/bytetrack (c6c67a0)
  • move the live view's own work into the package (c407261)
  • narrow the Optionals where the invariant actually holds (0c2f39f)
  • one resolve for both SAM 3 prompt tables (0187ca5)
  • one IGNORE, and a check that the configs still mean it (ed92829)
  • one IoU for the tracker and for the metric that scores it (be44029)
  • read the detection head through one accessor that checks it (9ee49a1)
  • seed the BiFPN passes from their input, not from None (2d8e336)
  • split analytics/events into a package, on the lines it already drew (b09549c)
  • split Trainer.__init__ into the seven phases it already had (868775d)
  • split check_split by the four questions it asks (63f1b4a)
  • split evaluate into accumulate and reduce, and fix two annotations (abac49f)
  • split prepare-ade20k's main into clear, link and report (8755ad6)
  • split the 3D panel renderer along the seams it already had (ed4eb51)
  • split the stage contract by what a consumer reads, and put it in force (25c0976)
  • the plate-calibration pipeline moves into the package, dissolving two script pairs (6a2f634)
  • the third copy of the frame decoder goes through data/video (2f62791)
  • thin the scene and infer-video mains, and test what came out (4b60381)
  • video decoding is a data question, so it stops living in the CLI (7466604)

Documentation

  • coco10 is share 1.0, and reading it as 0.10 invents a contradiction (eb49467)
  • experiment in meta.json is not an identifier, and the sweep proves it (d891f01)
  • masks means class ids, and ToTensor's int64 cast is that contract (24da737)
  • 2.27x compute margin on the 96-stream target; the frontier is the copy path (1c7b6bc)
  • a background plate recovers a camera's orientation and cannot set its metre (06fdf72)
  • a held-out camera for the README figure, and the caveat it removes (4e16ae9)
  • a run whose length a metric decides is not comparable to one it does not (ae30c52)
  • an audit found the live docs were arguing from numbers three retractions old (b74f264)
  • both labelled clips done -- coexistence evidence, not crop resemblance (5bf57a0)
  • clear the artefacts the 2026-08-19 seventeen-to-nine merge left behind (69de1d9)
  • correct a claim about checkpoint selection, which was backwards (ef2b54d)
  • correct the night verdict to 13 counter-examples and one real person (7c01da9)
  • current outputs at a glance, dated, inside the contract section (ad6dfa8)
  • cutting v1 found the baseline everyone had been quoting was three epochs (8d80585)
  • delete the 2026-08-17 session board, which asked to be deleted (ec316e9)
  • device splits into laptop/tablet/phone where the prompt evidence pointed (b0d2047)
  • drop two figures RETAIL_SCOPE.md was already referencing into a hole (268e9f8)
  • EMA wins unconditionally, tracks replace raw boxes, composite waits for serving (5d821bd)
  • fit the lens before the pose, and prefer tiles to people (d08db25)
  • fleet calibration -- 83 percent automatic, failures are mount types (0b1665f)
  • geometry/ now has a second copy in production, on a runtime it predates (b8700c8)
  • handoff closes with v4.2 at the user's gate (541fc3a)
  • handoff for the retail+security line, written before the context ran out (1a836ad)
  • journal the column leak, the retraction, and two negative results (635e3f1)
  • label the quadruped line as secondary where it lives, without deprecating it (19d9bbb)
  • lead with the deployment that exists, not the one the repo was named for (38f8b56)
  • name the second stage, and the order the retail work has to be built in (3f50700)
  • nine, not eight -- and the ninth is a record that agrees with itself and is wrong (53b2250)
  • one deployment target, and say which of the three configs is the product (93b5f06)
  • one of the robot copy's five patches deletes a guard rather than re-spelling one (9dcc759)
  • planner handoff -- the live state a successor cannot reconstruct (5f49baa)
  • priors are a tape measure to within 5-8 percent (3a34ca2)
  • put the two ratchet warnings where someone editing the file will hit them (46e0f63)
  • rank annotation by what no teacher can supply, not by what the LiDAR cannot see (d867b67)
  • RAP v2 trains tonight; AgeOver60 has no source, staff finally does (5972c1c)
  • reach_to_shelf now fires on touch, and it found the missed shopper (2e3719a)
  • record a mechanism that is true and a proxy for it that is not (1fd51db)
  • record that R3 is unsatisfied, rather than leaving it looking met (257eca1)
  • repoint the three figures that f9d4fcf left dangling (bb16978)
  • research-phase licence ruling, the day's arrivals, and the VLM pilot verdict (dced4ba)
  • retire four claims the code has since disproved (c30a360)
  • retrain the training guide on the line this project actually ships (2df7fe8)
  • rule 4 says detection for a reason, found by generalising it anyway (df85b53)
  • say what the split hash is for, in the argument that says it (1a5b56f)
  • scene.py pointed at a script that is not in the tree (f62934e)
  • separate the two detection-narrowing knobs, since one is a trap (5a27819)
  • seventeen documents where the boundaries had stopped matching the work (8b37959)
  • the attribute-only retrain hurt the embedding it exists to serve (9840dd4)
  • the bootstrap does not decline to label a podium, it labels it wrong (c38f414)
  • the citation file was the last thing still calling this a quadruped project (e80e2a1)
  • the column supplement leaked, and re-sweeping for more cameras found none (959dffd)
  • the disposition log exists, and what it must never be read as (72cd8c1)
  • the export contract changed, so the places that state the old one had to (bf69d2a)
  • the fleet census by eye -- five sideways mounts and a missed panorama (5e97b37)
  • the fourth video layout, and the experiment that questions this file's own conclusion (307d03d)
  • the GB10 figures are +-15%, and the table did not say so (ec9ce93)
  • the immovable classes are decided per object, not per pixel (8917f15)
  • the keypoints contract cited a function that was never written (2c2188d)
  • the measured frame, and why trtexec alone would revert --argmax-seg (2358cce)
  • the missing retail_surfaces scheme is the design, not a gap (0da8588)
  • the module that justified keeping 80 detection classes was never written (f69d258)
  • the night gap belongs to one camera -- the swap moved the failure (3432f38)
  • the nine was right by accident, and the worse case is the one it missed (673ef3e)
  • the occupancy research direction, and a handoff for the robot line (5853d08)
  • the package still told PyPI it was for quadruped robots (7f5fea9)
  • the panel drawn from a site clip, with the scores it was drawn at (3575778)
  • the person teacher swap, the near-labelled clip, and what a plate calibrates (d9224c8)
  • the pose slot powers on, and flicker gets its ruler (6d9f7c1)
  • the pre-processing contract said the opposite of what the graph does (d9c1a45)
  • the README's lead image showed a panel the code no longer draws (19daa58)
  • the record fix covers the failure that announces itself, not the one that does not (fb86b3d)
  • the retrain's first seed cuts static flicker by a third (c4dfc8a)
  • the robot the annotation priority was ranked for has no LiDAR (025d100)
  • the session board for 2026-08-17, while three sessions still share the tree (aa192af)
  • the site test split, and why a 0.77 mIoU and a 0.00% class are both true (26149f0)
  • the two missing classes are no longer missing, and one prediction was wrong (f327e96)
  • thirteen counter-examples, and static share only points one way (e8ac621)
  • three seeds agree -- in-domain person lands at no cost to any other head (a4e7390)
  • transfers leave the critical path; python post inherits the bottleneck (655329b)
  • translate onboard_camera.py, the last Chinese-language script (fe7adef)
  • translate the two Chinese-language scripts, and keep source English (c1c904e)
  • two of the day's three headline numbers do not survive re-derivation (99a348c)
  • v1 was the quadruped's, but not for the reason this file gave first (1da05a5)
  • val was three cameras, and R7 was only ever written about test (a846a48)
  • what a per-class number stands on, and which half of product is settled (5d683da)
  • what actually blocks removing the traversability head, counted (1ae3c02)
  • what three seeds cost, what they bought, and why an mtime says nothing (840785a)
  • withdraw the night half of the 0.35 person threshold (d6d8df1)

Build & packaging

  • configure pyright, so Pylance stops burying findings in import noise (2940e6e)
  • keep customer site drawings out of git (8c7eaa2)
  • make a # noqa prove it still suppresses something (e3134e7)
  • repair the ty config so the checker starts, and resync the lock (3b2d12b)
  • ship type annotations and wire a checker to read them (136cd0b)
  • the pre-commit ruff and CI's ruff disagreed about what "formatted" means (4b0fe8e)
  • watch the pinned actions and dependencies with dependabot (3737f75)

CI

  • cut releases with release-please, split across dev and main (4db1b54)
  • install from the lockfile, and hold the type count to a ratchet (d1d7402)
  • scripts/ gets a type ratchet, on its own baseline rather than src/'s (ecdf2ee)
  • test the Python the maintainer actually runs (fbd4b3c)

This PR was generated with Release Please. See documentation.

@github-actions
github-actions Bot force-pushed the release-please--branches--dev--components--syncai-hydranet branch 9 times, most recently from e05b73f to 251fbc2 Compare August 19, 2026 10:12
@github-actions
github-actions Bot force-pushed the release-please--branches--dev--components--syncai-hydranet branch from 251fbc2 to f3fdbd3 Compare August 19, 2026 10:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants