# lucid-yolo > Independent, from-scratch PyTorch Lightning implementation of the real-time detection, instance-segmentation, oriented-detection, and keypoint-detection methods described in the YOLO26 paper (arXiv:2606.03748) Every page below links to its markdown copy (`/index.md`), with includes resolved and links absolute. `llms-full.txt` holds the guide, method, results and model-card pages in full. Source: https://github.com/Borda/lucid-YOLO ## Home - [Overview](https://borda.github.io/lucid-YOLO/index.md): lucid-yolo is an independent, from-scratch PyTorch Lightning implementation of the real-time detection, instance segmentation, and oriented detection methods… - [Method / How the detector works](https://borda.github.io/lucid-YOLO/method/how-it-works/index.md): One pass through the network turns an image into a fixed list of boxes. This page follows that pass in five stages and says which source file owns each one.… - [Method / NMS versus NMS-free](https://borda.github.io/lucid-YOLO/method/nms-vs-nms-free/index.md): Non-maximum suppression (NMS) is the cleanup step most detectors run after the network: a dense head proposes many overlapping boxes per object, and NMS keeps… - [Run it / Launching a training run](https://borda.github.io/lucid-YOLO/TRAINING/index.md): Four tiers, one command. lucid-yolo fit --config .yaml resolves the name against the configs packaged inside the wheel, so a run needs no checkout … - [Run it / Provisioning the datasets](https://borda.github.io/lucid-YOLO/DATASETS/index.md): Datasets are never committed to this repository and never downloaded by test code (AGENTS.md sec. 3). Every unit gate runs offline against synthetic fixtures… - [Clean-room / Provenance](https://borda.github.io/lucid-YOLO/PROVENANCE/index.md): Every design decision in this repository cites its public source. This file is the clean-room evidence record: sources are logged here on first use, and every… - [Clean-room / Assumptions](https://borda.github.io/lucid-YOLO/ASSUMPTIONS/index.md): Anywhere the papers underdetermine the implementation, the chosen assumption, its public source, and its validation plan are recorded here before the… - [Clean-room / Decisions](https://borda.github.io/lucid-YOLO/DECISIONS/index.md): Architecture- and policy-level decisions. D1–D11 are transcribed from the governing blueprint (v1.5, 2026-07-10); D12 records execution-session amendments… ## Results - [Overview](https://borda.github.io/lucid-YOLO/REPRODUCTION_REPORT/index.md): A living document (D10): one section lands with each 0.MINOR, recording what was reproduced, what was assumed, and what diverged. Sections are append-only — a… - [Releases / v0.1.0: Detection](https://borda.github.io/lucid-YOLO/report/detection/index.md): The detector as [R1] describes it: a DFL-free dual-head architecture whose one-to-one branch supports NMS-free inference, trained with Small-Target-Aware… - [Releases / v0.2.0: Instance segmentation](https://borda.github.io/lucid-YOLO/report/segmentation/index.md): The Seg-smoke tier has run and was accepted 2026-08-10 at roadmap 054's [PRINCIPAL] gate, together with the numeric criterion below, which seg_smoke.yaml had… - [Releases / v0.3.0: Oriented detection](https://borda.github.io/lucid-YOLO/report/oriented-detection/index.md): The OBB-smoke tier has run and was accepted 2026-08-14 at roadmap 064's [PRINCIPAL] gate. This section records what the run measured, what it can and cannot… - [Releases / v0.4.0: Consolidated note](https://borda.github.io/lucid-YOLO/report/consolidated-note/index.md): This is not a fourth tier. No run stands behind it; it reads the three sections above against each other and states what only becomes visible once they sit… - [Releases / v0.5.0: Keypoints](https://borda.github.io/lucid-YOLO/report/keypoints/index.md): The Pose-smoke tier has run and was accepted 2026-08-25 at roadmap 125. This section records what the run measured, and states plainly what it was and was not… - [Releases / Unreleased / Correction, scoring engine](https://borda.github.io/lucid-YOLO/report/correction-scoring-engine/index.md): Appended, not merged (D10): this adds a fact the four sections above never recorded and revises no number any of them states. It is not a fifth tier — no run… - [Releases / Unreleased / Correction, keypoint sources](https://borda.github.io/lucid-YOLO/report/correction-keypoint-sources/index.md): Appended, not merged (D10): the 0.5.0 section above is left byte-identical, and this note states which of its sentences are false and what is true instead. No… ## Models - [Model cards / Detection](https://borda.github.io/lucid-YOLO/model_cards/detection/index.md): Finds the objects of 80 everyday categories in an image and returns one box, class and score per object, with no NMS step after the network. - [Model cards / Instance segmentation](https://borda.github.io/lucid-YOLO/model_cards/segmentation/index.md): Finds each object and also marks which pixels belong to it: a box, a class, a score and a mask per object. - [Model cards / Oriented detection](https://borda.github.io/lucid-YOLO/model_cards/obb/index.md): Finds objects in aerial imagery and returns a rotated box per object — centre, size and heading — instead of an axis-aligned one. - [Model cards / Keypoints](https://borda.github.io/lucid-YOLO/model_cards/keypoints/index.md): Finds each person and the location of each of their joints: a box, a score and K points per object — here COCO's 17 human-pose points. - [Notebooks / Development gates](https://borda.github.io/lucid-YOLO/notebooks/development_gates/) - [Notebooks / Detection on COCO 2017](https://borda.github.io/lucid-YOLO/notebooks/demo_detect/) - [Notebooks / Instance segmentation on COCO 2017](https://borda.github.io/lucid-YOLO/notebooks/demo_segment/) - [Notebooks / Oriented detection on DOTA tiles](https://borda.github.io/lucid-YOLO/notebooks/demo_obb/) - [Notebooks / Keypoints on COCO person_keypoints](https://borda.github.io/lucid-YOLO/notebooks/demo_keypoints/) ## API - [Models](https://borda.github.io/lucid-YOLO/api/models/index.md): The four task models and the builders that construct them from a variant name. Each builder takes the n/s/m/l/x variant and a class count and returns a ready… - [Data](https://borda.github.io/lucid-YOLO/api/data/index.md): The target container every task shares, the datasets that read COCO, YOLO-format and DOTA annotations into it, and the augmentation transforms that move… - [Training](https://borda.github.io/lucid-YOLO/api/training/index.md): The Lightning pieces a training run is assembled from: the module that owns the model, loss and optimizer, the data module that builds the loaders, and the… - [Inference](https://borda.github.io/lucid-YOLO/api/inference/index.md): Turning a trained model's raw outputs into detections: one-call prediction for a single image per task, and the decoders behind it, NMS-free top-k beside the… ## Project - [Roadmap](https://borda.github.io/lucid-YOLO/ROADMAP/index.md): The agent's work queue: 197 numbered work packages, one commit each, executed in dependency order per the AGENTS.md loop, plus lettered rows recording… - [Logs / Research log](https://borda.github.io/lucid-YOLO/RESEARCH_LOG/index.md): What executing the work packages taught about the reproduction itself: the paper-fidelity measurements, the modeling and data-protocol choices tried and… - [Logs / Engineering log](https://borda.github.io/lucid-YOLO/ENGINEERING_LOG/index.md): What executing the work packages taught about the repository itself, split out of docs/RESEARCH_LOG.md: CI and commit-time gates, packaging and licensing… - [Logs / Cross-cutting engineering](https://borda.github.io/lucid-YOLO/engineering/cross-cutting/index.md): A26 already records that the synthetic fixture generator is byte-identical per seed on a given platform and not across platforms — libm last-bit rounding… - [Logs / Escalation log](https://borda.github.io/lucid-YOLO/ESCALATION/index.md): Blocked-WP entries per the anti-guessing rule (AGENTS.md sec. 4). An agent stops and writes an entry here — then waits for a principal decision — when any of… - [Phases / Phase 0 — Foundation / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-00-foundation/index.md): Engineering log for Phase 0 — Foundation: the findings of WP-001, WP-004, WP-005, one section per work package. - [Phases / Phase 1 — Data pipeline / Research](https://borda.github.io/lucid-YOLO/research/phase-01-data-pipeline/index.md): Research log for Phase 1 — Data pipeline: the findings of WP-014, WP-013, one section per work package. - [Phases / Phase 2 — Architecture / Research](https://borda.github.io/lucid-YOLO/research/phase-02-architecture/index.md): Research log for Phase 2 — Architecture: the findings of WP-023, one section per work package. - [Phases / Phase 3 — Assignment and losses / Research](https://borda.github.io/lucid-YOLO/research/phase-03-assignment-and-losses/index.md): Research log for Phase 3 — Assignment and losses: the findings of WP-022, WP-030, one section per work package. - [Phases / Phase 4 — MuSGD / Research](https://borda.github.io/lucid-YOLO/research/phase-04-musgd/index.md): Research log for Phase 4 — MuSGD: the findings of WP-033, one section per work package. - [Phases / Phase 5 — Lightning training loop / Research](https://borda.github.io/lucid-YOLO/research/phase-05-training-loop/index.md): Research log for Phase 5 — Lightning training loop: the findings of WP-039, WP-040, one section per work package. - [Phases / Phase 5 — Lightning training loop / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-05-training-loop/index.md): Engineering log for Phase 5 — Lightning training loop: the findings of WP-038, one section per work package. - [Phases / Phase 6 — Evaluation, v0.1.0 / Research](https://borda.github.io/lucid-YOLO/research/phase-06-evaluation/index.md): Research log for Phase 6 — Evaluation, v0.1.0: the findings of WP-071, WP-073, WP-076, WP-079, WP-082, WP-083, one section per work package. - [Phases / Phase 6 — Evaluation, v0.1.0 / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-06-evaluation/index.md): Engineering log for Phase 6 — Evaluation, v0.1.0: the findings of WP-079, WP-083, WP-084, WP-085, one section per work package. - [Phases / Phase 7 — Instance segmentation, v0.2.0 / Research](https://borda.github.io/lucid-YOLO/research/phase-07-instance-segmentation/index.md): Research log for Phase 7 — Instance segmentation, v0.2.0: the findings of WP-052, WP-052b, WP-087b, WP-087c, WP-087d, WP-087e, WP-087f, WP-087, WP-054, one… - [Phases / Phase 8 — Oriented detection, v0.3.0 / Research](https://borda.github.io/lucid-YOLO/research/phase-08-oriented-detection/index.md): Research log for Phase 8 — Oriented detection, v0.3.0: the findings of WP-055, WP-058, WP-059, WP-060, WP-061, WP-088, WP-100, WP-101, WP-102, WP-103, WP-104… - [Phases / Phase 8 — Oriented detection, v0.3.0 / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-08-oriented-detection/index.md): Engineering log for Phase 8 — Oriented detection, v0.3.0: the findings of WP-105, WP-094, WP-095, WP-096, WP-097, one section per work package. - [Phases / Phase 9 — Inference and generalization / Research](https://borda.github.io/lucid-YOLO/research/phase-09-inference/index.md): Research log for Phase 9 — Inference and generalization: the findings of WP-093, WP-091, WP-074, WP-091b, WP-091c, WP-107, WP-111, WP-091d, WP-091e, one… - [Phases / Phase 9 — Inference and generalization / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-09-inference/index.md): Engineering log for Phase 9 — Inference and generalization: the findings of WP-089, WP-090, WP-090b, WP-091b, WP-099, WP-099b, WP-099c, WP-099d, WP-108… - [Phases / Phase 10 — Consolidation, v0.4.0, then rolling / Research](https://borda.github.io/lucid-YOLO/research/phase-10-consolidation/index.md): Research log for Phase 10 — Consolidation: the findings of WP-065, WP-066, one section per work package. - [Phases / Phase 10 — Consolidation, v0.4.0, then rolling / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-10-consolidation/index.md): Engineering log for Phase 10 — Consolidation: the findings of WP-066, WP-109, WP-067, WP-110, one section per work package. - [Phases / Phase 11 — Rolling, toward v0.5.0 / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-11-rolling/index.md): Engineering log for Phase 11 — Rolling, toward v0.5.0: the findings of WP-112, WP-113, WP-113b, WP-114, WP-114b, WP-115, WP-115b, WP-116, WP-116b, WP-117… - [Phases / Phase 12 — Keypoint detection, v0.5.0 / Research](https://borda.github.io/lucid-YOLO/research/phase-12-keypoints/index.md): Research log for Phase 12 — Keypoint detection, v0.5.0: the findings of WP-125, one section per work package. - [Phases / Phase 12 — Keypoint detection, v0.5.0 / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-12-keypoints/index.md): Engineering log for Phase 12 — Keypoint detection, v0.5.0: the findings of WP-120, WP-121, WP-122, WP-123, WP-124, WP-121b, WP-131, WP-132, WP-133, WP-134… - [Phases / Phase 13 — Contributor admission, augmentation guard and keypoint parity, v0.6.0 / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-13-contributor-admission/index.md): Engineering log for Phase 13 — Contributor admission, augmentation guard and keypoint parity, v0.6.0: the findings of WP-145, WP-146, WP-147, WP-148, WP-149… - [Phases / Phase 14 — Augmentation upstreaming to fuse, v0.7.0 / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-14-augmentation-upstreaming/index.md): Engineering log for Phase 14 — Augmentation upstreaming to fuse, v0.7.0: the findings of WP-154, WP-154c, WP-154b, WP-155, WP-156, WP-157, WP-158, WP-159, one… - [Phases / Phase 15 — Audit remediation, v0.8.0 / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-15-audit-remediation/index.md): Engineering log for Phase 15 — Audit remediation, v0.8.0: the findings of WP-160, WP-161, WP-162, WP-163, WP-164, WP-165, WP-165b, WP-166, WP-168, WP-174… - [Phases / Phase 16 — Training throughput / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-16-training-throughput/index.md): Engineering log for Phase 16 — Training throughput: the findings of WP-177, one section per work package. - [Phases / Phase 17 — R1 pose-objective parity / Engineering](https://borda.github.io/lucid-YOLO/engineering/phase-17-pose-objective-parity/index.md): Engineering log for Phase 17 — R1 pose-objective parity: the findings of WP-178, WP-183, WP-188, WP-189, WP-192, WP-192b, WP-193, WP-193b, WP-194, WP-195… - [Contributor guide](https://borda.github.io/lucid-YOLO/CONTRIBUTING/index.md): This is a clean-room reproduction. That single fact decides almost everything below, so it is worth stating plainly before any process: the value of this… ## Optional - [WP-001 — scaffold src layout, pyproject, Makefile](https://borda.github.io/lucid-YOLO/work_packages/wp-001/index.md): Package skeleton, pinned deps, Makefile targets, pre-commit config - [WP-004 — lint, types, tests, coverage, license audit](https://borda.github.io/lucid-YOLO/work_packages/wp-004/index.md): PR workflow; dependency-license audit; commit-trailer validator - [WP-005 — golden harness and frozen-golden regression](https://borda.github.io/lucid-YOLO/work_packages/wp-005/index.md): goldens/ loader, tolerance comparison, make gate, goldens/frozen/ semantics - [WP-013 — HSV jitter and horizontal flip](https://borda.github.io/lucid-YOLO/work_packages/wp-013/index.md): hsv_h/s/v, fliplr=0.5 with target mirroring - [WP-014 — COCO dataset and LightningDataModule](https://borda.github.io/lucid-YOLO/work_packages/wp-014/index.md): Detection + polygon parsing, scale-aware augmentation policy, make check-data - [WP-022 — dual detection head, reg_max=1](https://borda.github.io/lucid-YOLO/work_packages/wp-022/index.md): o2o (300x6) + o2m (nc+4, 8400) branches, DFL-free ltrb regression (A9) - [WP-023 — scale registry, builder, param/FLOP fidelity gate](https://borda.github.io/lucid-YOLO/work_packages/wp-023/index.md): 5-row dataclass registry, typed builders (ADR-001), fvcore counting - [WP-030 — single-batch overfit and gradient flow](https://borda.github.io/lucid-YOLO/work_packages/wp-030/index.md): 200-step monotonic loss decrease; no NaN/Inf; all leaf grads populated - [WP-033 — toy convergence golden vs SGD](https://borda.github.io/lucid-YOLO/work_packages/wp-033/index.md): Fixed synthetic regression + micro-CNN; MuSGD reaches threshold in fewer steps - [WP-038 — LightningCLI entry and experiment configs](https://borda.github.io/lucid-YOLO/work_packages/wp-038/index.md): configs/ tier matrix (ADR-001); resolved config logged per run - [WP-039 — deterministic checkpoint and resume](https://borda.github.io/lucid-YOLO/work_packages/wp-039/index.md): Seeded resume reproduces the loss trajectory within tolerance - [WP-040 — overfit-100 integration golden](https://borda.github.io/lucid-YOLO/work_packages/wp-040/index.md): n-scale on a 100-image subset -> >=0.95 recall at IoU 0.5 on train - [WP-052 — Segmenter wiring; aux branch absent from deploy()](https://borda.github.io/lucid-YOLO/work_packages/wp-052/index.md): Segmenter composes the coefficient-enabled dual head, ProtoFusion, ProtoNet and SemanticAux on the shared backbone and neck; deploy() holds neither the o2m… - [WP-052b — Table S9 seg fidelity gate](https://borda.github.io/lucid-YOLO/work_packages/wp-052b/index.md): All five scales against R1 Table S9 at ±3% params — wider than detection's ±2%, the segmentation head's sizing resting on five registered assumptions (A14… - [WP-054 — v0.2.0 segmentation](https://borda.github.io/lucid-YOLO/work_packages/wp-054/index.md): Seg-smoke tier plus overfit-100. ACCEPTED 2026-08-10 (run v9, batch 128 x 50 ep, lr 0.02, bf16-mixed): box mAP50-95 26.12 EMA-NMS vs >25; segm/box ratio 0.728… - [WP-055 — rotated geometry primitives](https://borda.github.io/lucid-YOLO/work_packages/wp-055/index.md): rotated_geom.py: long-edge canonicalization (w >= h, theta in \[-45,135) deg), point-in-rotated-rect, quad-box conversion both ways (A23). Three conventions… - [WP-056 — DOTA parsing and long-edge conversion](https://borda.github.io/lucid-YOLO/work_packages/wp-056/index.md): dota.py: R18's 15 categories in published order, headers skipped, quad to canonical long-edge box via WP-055. Establishes the instance-axis invariant… - [WP-057 — 1024 px overlapping crop tiling](https://borda.github.io/lucid-YOLO/work_packages/wp-057/index.md): tiling.py: integer window placement with the trailing window flush against the far edge, so coverage holds for any overlap and image; plus R18's… - [WP-058 — rotated-aware augmentation](https://borda.github.io/lucid-YOLO/work_packages/wp-058/index.md): rotated_aug.py holds the shared rotated arithmetic; affine.py/mosaic.py/mixup.py lose the NotImplementedError they raised on non-empty rboxes: a rotated box… - [WP-059 — ProbIoU rotated loss](https://borda.github.io/lucid-YOLO/work_packages/wp-059/index.md): Gaussian-box ProbIoU (R17, A19): both losses R17 proposes exposed side by side, since it suggests starting on one and switching and WP-088 owns that choice.… - [WP-060 — square-object angle loss](https://borda.github.io/lucid-YOLO/work_packages/wp-060/index.md): angle_loss.py implements Eq. 14-15 as the auxiliary term for square and near-square boxes, whose orientation the rotated IoU loss cannot resolve. Three… - [WP-061 — rotated containment for TAL and STAL](https://borda.github.io/lucid-YOLO/work_packages/wp-061/index.md): Oriented GTs reach the assigner through one optional gt_rboxes argument into _candidate_mask, the only stage that changes: candidacy becomes the… - [WP-062 — OBB head, direct angle, NMS-free decode](https://borda.github.io/lucid-YOLO/work_packages/wp-062/index.md): A third per-level stem on each head branch emits one raw angle per anchor — theta = z, Eq. 13, Eq. 12's squashing gone, no activation. The oriented decode… - [WP-063 — rotated mAP on DOTA val](https://borda.github.io/lucid-YOLO/work_packages/wp-063/index.md): Exact polygon-intersection rotated IoU — Sutherland-Hodgman clipping + shoelace, each pair re-centred on its midpoint before corner expansion (A24, now… - [WP-064 — v0.3.0 oriented detection](https://borda.github.io/lucid-YOLO/work_packages/wp-064/index.md): OBB-smoke tier accepted 2026-08-14: run v10 at per-tile rotated mAP50 0.5242 and mAP50-95 0.2914 on DOTA-v1.0 val (EMA, 10,132 tiles), overfit-100 wiring gate… - [WP-065 — consolidated multi-task reproduction note](https://borda.github.io/lucid-YOLO/work_packages/wp-065/index.md): A section reading the three tiers against each other, appended not merged (D10 is append-only): the shared trunk and what each head cost, a 23-row union of… - [WP-066 — the graph answers what the checkpoint answers](https://borda.github.io/lucid-YOLO/work_packages/wp-066/index.md): Two gates on the deployed one-to-one graph, all three heads: the exported ONNX carries no NonMaxSuppression and does carry TopK at a static (1, 300, 6) / (1… - [WP-067 — v0.4.0 consolidated note and examples](https://borda.github.io/lucid-YOLO/work_packages/wp-067/index.md): The worked example is drawn with matplotlib (R29), not supervision, which D16 refused: it hard-requires av, whose wheel ships a GPL libx264 under BSD-3-Clause… - [WP-071 — packed + uint8 batch transport](https://borda.github.io/lucid-YOLO/work_packages/wp-071/index.md): Ragged list[Targets] flattened to eight dense tensors (PackedTargets) and images quantized uint8 across the DataLoader IPC hop (A33); on_after_batch_transfer… - [WP-073 — compact annotation store + val-loader worker cap](https://borda.github.io/lucid-YOLO/work_packages/wp-073/index.md): CocoDetectionDataset precomputes per-image Targets and drops the raw JSON annotation dicts, whose refcount traffic materializes copy-on-write pages in every… - [WP-074 — RF100-VL incremental downloader and merged COCO layout](https://borda.github.io/lucid-YOLO/work_packages/wp-074/index.md): Extend lucid-data download with an rf100-vl mode over the rf100vl package (Roboflow API key; 100 COCO-JSON datasets, Apache-2.0): per-dataset download, remap… - [WP-076 — epoch-recycled loader workers](https://borda.github.io/lucid-YOLO/work_packages/wp-076/index.md): persistent_workers defaults off (opt-in constructor/CLI knob): recycling the pool every epoch hard-resets the per-worker memory creep a compact store does not… - [WP-079 — per-worker, per-epoch augmentation RNG](https://borda.github.io/lucid-YOLO/work_packages/wp-079/index.md): worker_init_fn re-seeds each worker's pipeline generator from WorkerInfo.seed. The generator was seeded in the parent, which never advances when workers are… - [WP-082 — objective invariant gate](https://borda.github.io/lucid-YOLO/work_packages/wp-082/index.md): Pins the coordinate frame the L1 term is measured in and its scale on a near-converged state, plus a loader-level test that spawns real workers and asserts… - [WP-083 — synthetic-shapes generalization golden](https://borda.github.io/lucid-YOLO/work_packages/wp-083/index.md): 2000 generated scenes split 1800/200, n-scale, 6 epochs at 320 px, held-out val through both decode paths — a generalization gate rather than the overfit… - [WP-084 — commit-time gates, split workflows, dev group](https://borda.github.io/lucid-YOLO/work_packages/wp-084/index.md): Three checks move to where they can catch something: the copyleft audit stays an always-run job, the commit-trailer validator becomes a commit-msg hook, and… - [WP-085 — doctests join the offline gate](https://borda.github.io/lucid-YOLO/work_packages/wp-085/index.md): make test collects src and tests with --doctest-modules, so the Examples sections the contract requires are executed for the first time — four had rotted and… - [WP-087 — segmentation training path](https://borda.github.io/lucid-YOLO/work_packages/wp-087/index.md): Wires the Phase 7 components into training, which task="segment" had never done. Composition moves behind shared build.py factories, not a Detector object… - [WP-087b — batched mask-loss gather, one sync not 64](https://borda.github.io/lucid-YOLO/work_packages/wp-087b/index.md): _branch_mask_loss pads to the batch's largest positive count and selects once, replacing a data-dependent boolean index run per image per branch that forced a… - [WP-087c — vectorised, batched polygon rasterisation](https://borda.github.io/lucid-YOLO/work_packages/wp-087c/index.md): Polygon rasterisation vectorised in three steps, each superseding the last: all of a ring's edges at once, then a whole image's rings in one crossing test… - [WP-087d — rasterise mask targets in the loader workers](https://borda.github.io/lucid-YOLO/work_packages/wp-087d/index.md): Rasterisation moves into collate_detection, rasterising batches in DataLoader workers ahead of the step: the grid derives from the input canvas (A15), masks… - [WP-087e — epoch mask mAP during validation](https://borda.github.io/lucid-YOLO/work_packages/wp-087e/index.md): Validation decodes the kept detections' masks through the deployed decode — not a second implementation of it — and logs val/segm_mAP, so a segmentation run… - [WP-087f — name tiers by what they are, not by letters](https://borda.github.io/lucid-YOLO/work_packages/wp-087f/index.md): The _tier__ configs are renamed for what they are — det_smoke, det_ablations, seg_smoke, planned obb_smoke — and the tier names follow everywhere they are… - [WP-088 — oriented-detection training path](https://borda.github.io/lucid-YOLO/work_packages/wp-088/index.md): The Phase 8 counterpart of WP-087: oriented losses reach _task_extra_loss, rotated targets thread through the loaders, obb_smoke.yaml added, and A49/A50 are… - [WP-089 — detection inference on one image](https://borda.github.io/lucid-YOLO/work_packages/wp-089/index.md): Checkpoint and image to detections in original coordinates, as a library call and a fourth lucid-predict command. Reuses Letterbox and to_letterboxed_original… - [WP-090 — segmentation inference](https://borda.github.io/lucid-YOLO/work_packages/wp-090/index.md): Extends predict with masks in original coordinates, reusing decode_instance_masks and masks_to_original. A second entry point predict_segmentation returns a… - [WP-090b — masks for an empty instance axis](https://borda.github.io/lucid-YOLO/work_packages/wp-090b/index.md): decode_instance_masks raised from F.interpolate, which treats the instance axis as channels and rejects a zero-length one, for as long as it has existed … - [WP-091 — oriented-detection inference](https://borda.github.io/lucid-YOLO/work_packages/wp-091/index.md): Extends predict with rotated boxes as the A45 (N, 7) tuple the oriented evaluator emits and consumes. Canonicalization is not added here — decode_rboxes ends… - [WP-091b — rotated suppression decoder](https://borda.github.io/lucid-YOLO/work_packages/wp-091b/index.md): RotatedNMSDecoder over the one-to-many branch, lifting WP-091's refusal: greedy class-wise suppression by rotated_iou (A24) over a canonicalized decode (A23).… - [WP-091c — rotated geometry in the geometry module](https://borda.github.io/lucid-YOLO/work_packages/wp-091c/index.md): rotated_iou lived in eval/dota_eval.py, imported by decode/rotated_nms.py (WP-091b), putting an evaluation module on the decode path's import graph for pure… - [WP-091d — one rotated-box shape check](https://borda.github.io/lucid-YOLO/work_packages/wp-091d/index.md): Two private validators in rotated_geom.py doing one job, differing only in the letter naming the row count. _check_rboxes is deleted and rotated_iou guards… - [WP-091e — the shape a loss will accept](https://borda.github.io/lucid-YOLO/work_packages/wp-091e/index.md): losses/probiou.py's _check_rboxes passes arbitrary leading dimensions where rotated_geom requires exactly 2-D, and the looser form is kept: the arithmetic is… - [WP-093 — stable angle regression for elongated boxes](https://borda.github.io/lucid-YOLO/work_packages/wp-093/index.md): A22's angle gain revised 1.0 to 0.25 on a five-seed dose-response, taking the oriented overfit gate from 1 of 5 seeds clearing the 0.9 floor to 4 of 5, the… - [WP-094 — DOTA tiles into a trainable layout](https://borda.github.io/lucid-YOLO/work_packages/wp-094/index.md): scripts/build_dota_tiles.py writes the COCO layout the oriented reader reads, carrying R18's class order into the label space — the disk-writing caller WP-057… - [WP-095 — per-tile oriented acceptance instrument](https://borda.github.io/lucid-YOLO/work_packages/wp-095/index.md): scripts/eval_obb.py scores a finished checkpoint through the WP-063 accumulator on an explicit split, so A46, A47 and A48 all apply. Scoring runs in letterbox… - [WP-096 — one data CLI, one eval CLI](https://borda.github.io/lucid-YOLO/work_packages/wp-096/index.md): Three commands where there was one console script, one make target, two unshipped files: lucid-yolo unchanged, lucid-data over download, check, build-tiles… - [WP-097 — report DOTA totals, require only stated ones](https://borda.github.io/lucid-YOLO/work_packages/wp-097/index.md): check_dota_root compared summed train+val counts against R18's 2,806 / 188,282 / 15, which describe DOTA-v1.0 whole, so the first command an operator runs… - [WP-099 — YOLO-format dataset reader](https://borda.github.io/lucid-YOLO/work_packages/wp-099/index.md): A YOLO-format reader — data.yaml plus a labels//*.txt tree of normalized cls cx cy w h rows, oriented rows eight normalized polygon coordinates — producing… - [WP-099b — a datamodule that dispatches on layout](https://borda.github.io/lucid-YOLO/work_packages/wp-099b/index.md): DetectionDataModule picks the COCO or YOLO reader by which layout data_root satisfies, so a YOLO root trains through lucid-yolo fit. detect_layout evaluates… - [WP-099c — YOLO layout in the check module and a worked config](https://borda.github.io/lucid-YOLO/work_packages/wp-099c/index.md): check_dataset learns the YOLO tree, and an unstated --dataset probes instead of defaulting to coco: a pre-flight answering a different question than its run… - [WP-099d — the two layouts and what an annotation looks like](https://borda.github.io/lucid-YOLO/work_packages/wp-099d/index.md): docs/DATASETS.md covered provisioning only. Adds a reference section: both directory conventions as the candidate tables probe them, one worked annotation per… - [WP-099e — the splits a check is asked for](https://borda.github.io/lucid-YOLO/work_packages/wp-099e/index.md): check_dataset gains splits, threaded through _check_root into check_yolo_root / check_dota_root; unstated keeps each layout's own YOLO_SPLITS / DOTA_SPLITS… - [WP-100 — parallel tiling with a progress bar](https://borda.github.io/lucid-YOLO/work_packages/wp-100/index.md): tile_source_image becomes the unit of work, dispatched through a ProcessPoolExecutor with --workers and each worker pinned to a single torch thread. Ids are… - [WP-101 — JPEG tiles and a completion-order bar](https://borda.github.io/lucid-YOLO/work_packages/wp-101/index.md): --suffix .jpg with --quality writes tiles through the JPEG encoder, PNG staying the default because a tile is an exact crop of a lossless source; annotations… - [WP-102 — validation that is not CPU-bound](https://borda.github.io/lucid-YOLO/work_packages/wp-102/index.md): Two validation defaults nobody had revisited at 1024 px: the val worker cap now applies only to a count this class chose itself and scales with the pixel… - [WP-103 — a val worker count that fits the host](https://borda.github.io/lucid-YOLO/work_packages/wp-103/index.md): WP-102 deleted the memory guard where it should have deleted the silence. A count *inherited* from a named train count now passes the _shm_capped_workers… - [WP-104 — match every IoU threshold in one pass](https://borda.github.io/lucid-YOLO/work_packages/wp-104/index.md): The ten IoU thresholds share the overlap matrix and the score order and differ only in what counts as a hit, so the availability state becomes (T, G) and the… - [WP-105 — a report that survives, and a pass you can watch](https://borda.github.io/lucid-YOLO/work_packages/wp-105/index.md): Two defects the first oriented tier evaluation exposed, both in lucid-eval rather than in what it measures: --output now creates its parent, having raised… - [WP-107 — whole-image merge for overlapping tiles](https://borda.github.io/lucid-YOLO/work_packages/wp-107/index.md): Tile detections mapped back to source coordinates through the A53 window provenance, seam duplicates resolved by core ownership (A59) — ownership, not… - [WP-108 — the Scope column says what a package does](https://borda.github.io/lucid-YOLO/work_packages/wp-108/index.md): Thirty-two Scope cells carried the reasoning behind their package rather than its scope, the worst at 1709 characters against a 286 median. Compressed toward… - [WP-109 — audit the binaries a wheel ships](https://borda.github.io/lucid-YOLO/work_packages/wp-109/index.md): A third check in scripts/audit_licenses.py (the path as it stood here; WP-129 moved the script to scripts/lint/audit_licenses.py), over the files each wheel's… - [WP-110 — drop the deprecated download alias](https://borda.github.io/lucid-YOLO/work_packages/wp-110/index.md): The removal 0.3.0 put in writing in three places — [project.scripts], AGENTS.md sec. 2, the 0.3.0 changelog — carried out on schedule: the console script, the… - [WP-111 — a whole-image oriented figure](https://borda.github.io/lucid-YOLO/work_packages/wp-111/index.md): The OBB-smoke checkpoint (version_10) re-scored through merge_whole_images (WP-107) on real DOTA-v1.0 val, 458 source images, CUDA (operator-run): whole-image… - [WP-112 — one exportable decode path](https://borda.github.io/lucid-YOLO/work_packages/wp-112/index.md): src/lucid_yolo/export.py -- E2EExportGraph plus DetectExportGraph/SegmentExportGraph/OrientedExportGraph, reproducing predict.py's… - [WP-113 — an emoji on every top-level heading](https://borda.github.io/lucid-YOLO/work_packages/wp-113/index.md): Every H1 and H2 across README.md and docs/ carries one topical emoji, chosen per section rather than decoratively repeated, so a long register scrolls as… - [WP-113b — absolute README links for PyPI](https://borda.github.io/lucid-YOLO/work_packages/wp-113b/index.md): scripts/absolutize_readme.py rewrites the README's repository-relative links to absolute ones at packaging time: figures through raw.githubusercontent.com… - [WP-114 — a MkDocs Material site over docs/](https://borda.github.io/lucid-YOLO/work_packages/wp-114/index.md): The registers are published twice from one source: as plain markdown on GitHub and as a searchable Material site, with mkdocs.yml owning no prose beyond… - [WP-114b — cap mkdocs below the unlicensed major](https://borda.github.io/lucid-YOLO/work_packages/wp-114b/index.md): The docs group pins mkdocs>=1.6,<2, a licence bound rather than a compatibility one: MkDocs 2.0 is described by the Material team's own build-time notice as… - [WP-115 — an undeclared licence is a finding, per tier](https://borda.github.io/lucid-YOLO/work_packages/wp-115/index.md): audit_licenses.py matched declared licences only, so a distribution declaring nothing passed silently. Two tiers by exposure -- a base dependency's unreadable… - [WP-115b — allowlist a licence that cannot be read](https://borda.github.io/lucid-YOLO/work_packages/wp-115b/index.md): Lettered off 115 and landed in its commit: the new check's first run found cuda-toolkit shipping no licence field or document at all, verified from the wheel.… - [WP-116 — docformatter over every docstring](https://borda.github.io/lucid-YOLO/work_packages/wp-116/index.md): A PEP 257 formatter beside the three that already run, configured in [tool.docformatter] and hooked ahead of ruff-format so the two converge in one pass.… - [WP-116b — pin docformatter's hook to a compatible interpreter](https://borda.github.io/lucid-YOLO/work_packages/wp-116b/index.md): The hook carried no language_version, so pre-commit built its env against whatever python3 resolved off PATH -- drifted to a 3.10 install below this project's… - [WP-117 — doctest every helper, document every test](https://borda.github.io/lucid-YOLO/work_packages/wp-117/index.md): A fresh ast count corrects the row this replaced: 261 non-fixture helper functions in tests//test_*.py, all carrying a docstring already, but only 1 of 261… - [WP-118 — split the log by claim, trim the table to match](https://borda.github.io/lucid-YOLO/work_packages/wp-118/index.md): RESEARCH_LOG.md split into itself (fidelity: model, loss, data protocol, eval numbers, paper ambiguity) and a new ENGINEERING_LOG.md (repo tooling: CI… - [WP-119 — drop the root configs symlink](https://borda.github.io/lucid-YOLO/work_packages/wp-119/index.md): WP-038's repo-root configs -> src/lucid_yolo/configs symlink was a compatibility shim so old commands kept working once configs moved to package data; no code… - [WP-120 — keypoint targets and fliplr index swap](https://borda.github.io/lucid-YOLO/work_packages/wp-120/index.md): Targets gains keypoints/keypoint_vis -- (N, K, 2) float32 coordinates and matching (N, K) int64 visibility, K generic, threaded through… - [WP-121 — COCO keypoint parsing](https://borda.github.io/lucid-YOLO/work_packages/wp-121/index.md): CocoDetectionDataset gains opt-in keypoints=True, parsing each retained annotation's flat COCO keypoints field into WP-120's Targets.keypoints/keypoint_vis… - [WP-121b — a segmentation ring only an oriented reading actually needs](https://borda.github.io/lucid-YOLO/work_packages/wp-121b/index.md): Validating a fuse-augmentations Task.KEYPOINTS export surfaced _parse_annotation required a usable segmentation ring for every reading mode, not only… - [WP-122 — keypoint head stem and decode composition](https://borda.github.io/lucid-YOLO/work_packages/wp-122/index.md): DualDetectionHead gains opt-in num_keypoints (a third stem, _build_coeff_stem's shared-width precedent -- no Table S11 measurement covers a keypoint task)… - [WP-123 — RLE loss](https://borda.github.io/lucid-YOLO/work_packages/wp-123/index.md): RLELoss(nn.Module) -- the only loss in this repo carrying trainable weights, so a module the trainer registers rather than a pure function: a hand-written… - [WP-124 — OKS evaluation wiring](https://borda.github.io/lucid-YOLO/work_packages/wp-124/index.md): Installed torchmetrics==1.9.0 has no keypoint iou_type (verified against source, correcting this row's premise) -- evaluate_keypoints drives the… - [WP-125 — Pose-smoke tier](https://borda.github.io/lucid-YOLO/work_packages/wp-125/index.md): n-scale smoke run on COCO human pose, RLE paired against WP-135's Laplace-NLL control: e2e OKS AP 0.2738 vs 0.2527, same-sign gap as R14 Table 7's own… - [WP-126 — keypoint tier report, model card, and the fourth task everywhere](https://borda.github.io/lucid-YOLO/work_packages/wp-126/index.md): The fourth task's record, matching det/seg/obb: model_cards/keypoints.md (intended use, COCO composition limits, clean-room statement, an… - [WP-127 — task and variant in the checkpoint path](https://borda.github.io/lucid-YOLO/work_packages/wp-127/index.md): Lightning's own default writes lightning_logs/version_N/checkpoints/epoch=X-step=Y.ckpt -- nothing in the path or filename names the task or scale, so… - [WP-128 — regroup flat-naming test functions into classes](https://borda.github.io/lucid-YOLO/work_packages/wp-128/index.md): Solves 117's ambiguity with a discriminator, not a bigger eyeball pass: a shared-prefix candidate confirms only if the prefix is a contiguous token… - [WP-129 — split scripts/ into core and lint, doctest audit as a hook](https://borda.github.io/lucid-YOLO/work_packages/wp-129/index.md): 117's enforcement lived as a pytest meta-test scanning repo content. Split into scripts/lint/audit_test_doctests.py, a test-doctest-audit pre-commit hook… - [WP-130 — consolidate scripts/-testing tests, wire remaining lint hooks](https://borda.github.io/lucid-YOLO/work_packages/wp-130/index.md): Every scripts/-testing test -- tests/meta/'s remaining audits, tests/scripts/, tests/train/test_shapes_regression.py, tests/integration/test_overfit_micro.py… - [WP-130b — emoji on every hook, three now run on --all-files](https://borda.github.io/lucid-YOLO/work_packages/wp-130b/index.md): Lettered off 130: the emoji requirement only reached the eleven repo: local hooks, leaving the eleven third-party ones unmarked -- every hook now carries a… - [WP-131 — keypoints fixture, geometric-only det/obb/seg categories](https://borda.github.io/lucid-YOLO/work_packages/wp-131/index.md): fuse-augmentations' class_names(class_mode) spans the whole Shape union regardless of SyntheticConfig.shapes -- animal shapes landing (WP-121b) would move… - [WP-132 — keypoint training path](https://borda.github.io/lucid-YOLO/work_packages/wp-132/index.md): Phase 12 built every keypoint component but never composed them (WP-120 targets, WP-121 reader, WP-122 head stem, WP-123 RLE loss, WP-124 OKS scorer). This… - [WP-133 — pose-smoke draft, changelog Unreleased entry](https://borda.github.io/lucid-YOLO/work_packages/wp-133/index.md): CHANGELOG.md had no ## [Unreleased] section -- 27 commits since 0.4.0, incl. 0.5.0.dev0 bump and WP-132's keypoint path, carried zero entries. Backfilled from… - [WP-134 — keypoints wired into lucid-eval, canonical OKS ground truth](https://borda.github.io/lucid-YOLO/work_packages/wp-134/index.md): WP-124 built the OKS scorer, WP-132 the training path, unjoined: no caller, cli/eval.py knew three tasks. A keypoints checkpoint through lucid-eval fell to… - [WP-135 — Laplace-NLL ablation baseline for RLE](https://borda.github.io/lucid-YOLO/work_packages/wp-135/index.md): WP-125 accepts on RLE's mechanism claim (direction of effect vs a non-flow baseline), not a number. LaplaceNLLLoss is R14 Table 7's control: Eq. 8 with the… - [WP-136 — unify config names, fold det_yolo_smoke into docs](https://borda.github.io/lucid-YOLO/work_packages/wp-136/index.md): Every packaged config unified onto __[_].yaml: det_smoke->det_nano_smoke, seg_smoke->seg_nano_smoke, obb_smoke->obb_nano_smoke, pose_smoke->pose_nano_smoke… - [WP-137 — keypoint OKS joins the epoch validation loop](https://borda.github.io/lucid-YOLO/work_packages/wp-137/index.md): A task="keypoints" module logged no per-epoch pose signal -- val/mAP scored its box branch only. val/oks_mAP now accumulates points via gather_keypoints… - [WP-138 — hotcoco as lucid-eval's default bbox/segm engine](https://borda.github.io/lucid-YOLO/work_packages/wp-138/index.md): Corrects WP-137: hotcoco is RLE-encoded per batch (matching torchmetrics own _get_safe_item_values), not held dense -- A73 revised in place. lucid-eval… - [WP-139 — keypoint detector builder and params/FLOPs golden](https://borda.github.io/lucid-YOLO/work_packages/wp-139/index.md): Detection, segmentation and oriented detection each ship a composite class, a build_* factory, a .deploy() NMS-free view and a frozen size golden; keypoints… - [WP-140 — v0.5.0 keypoint detection](https://borda.github.io/lucid-YOLO/work_packages/wp-140/index.md): The fourth task, released: __version__ to a plain 0.5.0, the ## [Unreleased] section WP-133 opened closed as ## [0.5.0], and make freeze-goldens MINOR=0.5… - [WP-140b — the principal, the contract's end, and two phases](https://borda.github.io/lucid-YOLO/work_packages/wp-140b/index.md): Lettered off 140: governance following the release rather than any package. [HUMAN] becomes [PRINCIPAL] project-wide -- the tag always meant whoever *drives*… - [WP-141 — contributor guide and the tracking relaxation](https://borda.github.io/lucid-YOLO/work_packages/wp-141/index.md): CONTRIBUTING.md and issue templates, and D18 taking effect: with the reproduction complete, a change altering no shipped behaviour, no public symbol, no… - [WP-142 — DCO sign-off required on pull requests](https://borda.github.io/lucid-YOLO/work_packages/wp-142/index.md): Layer one of three: every commit in a pull request carries a Signed-off-by: line, checked in CI rather than by an external app, so the check is a file in this… - [WP-143 — the licence attestation covers every non-permissive source](https://borda.github.io/lucid-YOLO/work_packages/wp-143/index.md): Layer two. The pull-request template's clean-room line names Ultralytics only, which understates the rule it enforces: the admissible set is the permissive… - [WP-144 — provenance trailers enforced on contributor commits](https://borda.github.io/lucid-YOLO/work_packages/wp-144/index.md): Layer three, and the only one that produces a reviewable artifact instead of a promise. check_commit_trailers.py --range already validates… - [WP-145 — ADR-005 — the fuse boundary and the battle-test contract](https://borda.github.io/lucid-YOLO/work_packages/wp-145/index.md): Records what the two repositories agree on: the boundary (fuse owns resampling and the coordinate transport that rides with it; this project owns task… - [WP-146 — reconcile the R21 pin with the LetterShape family](https://borda.github.io/lucid-YOLO/work_packages/wp-146/index.md): The pin never lagged -- pyproject.toml has read fedde0c1 since WP-132 while R21 still named 0a0cc640, so the register is the stale side and this row corrects… - [WP-147 — split sampling from application on stochastic transforms](https://borda.github.io/lucid-YOLO/work_packages/wp-147/index.md): Seven stochastic transforms gain a public frozen parameter dataclass modelled on AffineParams and a public apply-given-parameters method, leaving __call__ as… - [WP-148 — derived and invariant expectations for every transform](https://borda.github.io/lucid-YOLO/work_packages/wp-148/index.md): tests/data/test_aug_contract.py — tier A expectations correct by construction (a quarter turn of a known box, an identity affine, a flip composed with itself)… - [WP-149 — frozen expectations and the augmentation-invariants golden](https://borda.github.io/lucid-YOLO/work_packages/wp-149/index.md): Tier B pins what has no closed form: tests/data/test_aug_frozen.py, each case stating explicit parameters, literal expected geometry and why no derivation… - [WP-150 — rescope seed-driven assertions as tier-D determinism](https://borda.github.io/lucid-YOLO/work_packages/wp-150/index.md): Existing seed-driven assertions move to tests/data/test_aug_determinism.py and are labelled for what they are: they pin whichever implementation is live and… - [WP-151 — keypoint detector ONNX export](https://borda.github.io/lucid-YOLO/work_packages/wp-151/index.md): Detection, segmentation and oriented detection each export a .deploy() view; keypoints ships none, so the fourth task is the only one whose released model… - [WP-152 — predict_keypoints closes the inference surface](https://borda.github.io/lucid-YOLO/work_packages/wp-152/index.md): predict.py exposes predict_image, predict_segmentation and predict_oriented; the keypoint task has none, so a released 0.5.0 checkpoint has no shipped way to… - [WP-152b — Phase 14 regrouped into five packages and a release](https://borda.github.io/lucid-YOLO/work_packages/wp-152b/index.md): Lettered off 152: planning that follows the keypoint parity rather than any package. Phase 14's thirteen rows become six, at the principal's direction. The… - [WP-153 — v0.6.0 augmentation guard and keypoint parity](https://borda.github.io/lucid-YOLO/work_packages/wp-153/index.md): The guard and the parity, released before a single swap lands, so the version a swap is measured against is a published one. __version__ to 0.6.0, the ##… - [WP-153b — fuse 0.12 validated against the Phase 14 rows](https://borda.github.io/lucid-YOLO/work_packages/wp-153b/index.md): Lettered off 153: validation that follows the release rather than any package. fuse 0.12 ships every capability this phase waits on — FA-1 through FA-5, FA-7… - [WP-153c — Phase 14 rows split around the conventions and the measurements](https://borda.github.io/lucid-YOLO/work_packages/wp-153c/index.md): Lettered off 153: the row splits and DoD moves WP-153b deferred until the principal had decided §8.12's two open questions. Six rows become eight — WP-154… - [WP-154 — fuse 0.12 becomes the pinned engine](https://borda.github.io/lucid-YOLO/work_packages/wp-154/index.md): The dependency bump and the re-freeze it forces, with nothing delegated. R21 advances from fedde0c1 to a5a276a, the commit v0.12.0 is tagged from once this… - [WP-154b — fuse's geometric conventions replace this project's](https://borda.github.io/lucid-YOLO/work_packages/wp-154b/index.md): Absorbs FA-1, FA-2 and FA-3, and gives up the two conventions §8.12 measured as genuinely different — the composition centre and the mirror axis … - [WP-154c — freeze-goldens stops re-copying what it cannot re-freeze](https://borda.github.io/lucid-YOLO/work_packages/wp-154c/index.md): WP-154 hit WP-132's wall a second time — goldens/frozen/0.5 and 0.6 both re-acquired the two generator-derived goldens make freeze-goldens was told never to… - [WP-155 — letterbox and instance filter come from upstream](https://borda.github.io/lucid-YOLO/work_packages/wp-155/index.md): Absorbs FA-4 and FA-5. Letterbox keeps inverse_map and forward_affine unchanged in signature and semantics, so its six evaluation and prediction consumers are… - [WP-156 — the affine reduces to ranges over a fuse segment](https://borda.github.io/lucid-YOLO/work_packages/wp-156/index.md): Absorbs FA-3 and FA-5 into the warp itself and takes the local fusion with it; what remains locally is R1 Table S3's ranges and the sampling of them. Polygon… - [WP-157 — rotated boxes and flip pairs delegate upstream](https://borda.github.io/lucid-YOLO/work_packages/wp-157/index.md): Absorbs FA-7 and FA-8, the two task-convention modalities, together because each passes a table or a callback upstream rather than moving a rule there.… - [WP-158 — the augmentation stack after upstreaming](https://borda.github.io/lucid-YOLO/work_packages/wp-158/index.md): The closing sweep, and the last of the four rows that re-freeze — like the other three, it holds no swap. data/__init__.py's 54-symbol export list is reduced… - [WP-159 — v0.7.0 augmentation engine upstream](https://borda.github.io/lucid-YOLO/work_packages/wp-159/index.md): The swaps released. __version__ to 0.7.0, the ## [Unreleased] section closed, make freeze-goldens into goldens/frozen/0.7, and fuse-augmentations promoted… - [WP-160 — the guard reads dependency tiers](https://borda.github.io/lucid-YOLO/work_packages/wp-160/index.md): The release guard checked the tag, the changelog section and the gate, and nothing about what a consumer installing the distribution receives — which is what… - [WP-161 — the README names the paper nominatively](https://borda.github.io/lucid-YOLO/work_packages/wp-161/index.md): PROVENANCE.md's usage discipline admits exactly one form — a nominative reference to *the YOLO26 paper, arXiv:2606.03748* — and the README's own banner had… - [WP-162 — the golden sweep leaves the commit path](https://borda.github.io/lucid-YOLO/work_packages/wp-162/index.md): WP-130b put golden-check on every commit calling it "one already-fast golden recompute"; measured it is 34.6 s, and make gate charged it twice — once inside… - [WP-163 — validation ground truth crosses to the host once](https://borda.github.io/lucid-YOLO/work_packages/wp-163/index.md): Every validation accumulator moved its ground truth one image at a time — two tensors per image for detection, three for oriented and keypoints, and a mask… - [WP-164 — the mask stack is not copied to drop nothing](https://borda.github.io/lucid-YOLO/work_packages/wp-164/index.md): Validation decoded all 100 detection rows and then wrote masks[keep], a second full copy of a 100×160×160 boolean stack per image. In the deployed… - [WP-165 — validation scores reach COCO once per image](https://borda.github.io/lucid-YOLO/work_packages/wp-165/index.md): torchmetrics' epoch-to-COCO conversion hoists boxes and labels to one .cpu().tolist() per image and then reads each detection's score individually, one tensor… - [WP-165b — Phase 15 opened and the audit grouped into rows](https://borda.github.io/lucid-YOLO/work_packages/wp-165b/index.md): Lettered off 165: the phase and the rows it runs. Phase 14 ends at its own release and its six rolling successors move here. An adversarial read of the tree… - [WP-166 — crowd and area reach the default scorer](https://borda.github.io/lucid-YOLO/work_packages/wp-166/index.md): C-01 and C-02. _accumulate_boxes hardcodes iscrowd: 0 and recomputes area as box width times height, while annotations.py parses both from the file and hands… - [WP-167 — the accelerator half gets a schedule and the floors a gate](https://borda.github.io/lucid-YOLO/work_packages/wp-167/index.md): C-03, H-01, H-02. The Makefile says gate-gpu "is that schedule"; nothing invokes it — no cron, no dispatch, no tag hook — and RESEARCH_LOG.md already records… - [WP-168 — the gates and the ratchets certify what they claim](https://borda.github.io/lucid-YOLO/work_packages/wp-168/index.md): H-03, H-04, H-08, H-10 and the checker items under them. CI runs 1544 tests where make gate runs 2661 — no --doctest-modules, no src scripts paths — so every… - [WP-169 — alignment weights survive zero-metric ties and low overlap](https://borda.github.io/lucid-YOLO/work_packages/wp-169/index.md): H-16 and H-17, both measured. topk over an all-zero alignment metric fills from the global ties, so intersecting with the candidate mask can return no… - [WP-170 — degenerate geometry stops answering plausibly](https://borda.github.io/lucid-YOLO/work_packages/wp-170/index.md): H-18, H-19 and the degenerate-input medium block. A collapsed box draws a 3e5 CIoU gradient through atan(w/(h + eps)) and an inverted one draws none at all… - [WP-171 — entry points validate values, not only types](https://borda.github.io/lucid-YOLO/work_packages/wp-171/index.md): H-20 and the eight siblings the audit grouped under it. Nine public entry points check a type and not a domain, so an out-of-range value reaches arithmetic or… - [WP-172 — every merge path keeps every modality](https://borda.github.io/lucid-YOLO/work_packages/wp-172/index.md): The data-layer block. CopyPaste._merge rebuilds Targets without rboxes or difficult, so a rotated destination loses its modality through the apply seam WP-147… - [WP-173 — named branch outputs and a schedule that reaches its floor](https://borda.github.io/lucid-YOLO/work_packages/wp-173/index.md): H-21 and the model-surface block. _DetectionBranch.forward returns six tensors as a bare positional tuple destructured in five places, four of them with… - [WP-174 — the keypoint tier's shipped surface is executed](https://borda.github.io/lucid-YOLO/work_packages/wp-174/index.md): H-05, H-06 and the checkpoint block. predict_keypoints has zero executed lines in the gate — its Example asserts callable, and the one test naming it replaces… - [WP-175 — the record describes the repository that exists](https://borda.github.io/lucid-YOLO/work_packages/wp-175/index.md): The documentation sweep, and the register work under it. The README names 0.4.0 as current against __version__ 0.7.0, offers an install line that resolves to… - [WP-176 — v0.8.0 the audit remediations](https://borda.github.io/lucid-YOLO/work_packages/wp-176/index.md): The phase released. __version__ to 0.8.0, the ## [Unreleased] section closed, make freeze-goldens into goldens/frozen/0.8. Two of this phase's rows moved a… - [WP-177 — batch equal-shape MuSGD matrices](https://borda.github.io/lucid-YOLO/work_packages/wp-177/index.md): The n-scale optimizer has 127 matrix parameters but only 41 exact (shape, dtype, device) keys. _step_group maps its existing _parameter_update over each key… - [WP-178 — R1 does publish the pose objective](https://borda.github.io/lucid-YOLO/work_packages/wp-178/index.md): D22 withdraws D21's rationale clause; A65, A66, A68 corrected in place; A75 (OKS loss form, derived from R12 since R1 gives none and cites a paper outside the… - [WP-183 — dense box terms over every anchor](https://borda.github.io/lucid-YOLO/work_packages/wp-183/index.md): DetectionBranchLoss._box_losses and oriented_branch_terms score CIoU / ProbIoU, L1 and the angle term densely over all (B, A) anchors, selected by fg_mask… - [WP-188 — notebooks rendered from jupytext sources](https://borda.github.io/lucid-YOLO/work_packages/wp-188/index.md): Notebooks are committed as notebooks/.py jupytext percent-format sources — linted, SPDX-headed, run by the gate — and the .ipynb is a build product: make… - [WP-189 — plotting and overlay helpers move into the package](https://borda.github.io/lucid-YOLO/work_packages/wp-189/index.md): The figure cores of scripts/plot_training.py and scripts/draw_predictions.py move to the private lucid_yolo._viz package (curves, overlay), and the scripts… - [WP-192 — complete oriented scoring uses the worker policy](https://borda.github.io/lucid-YOLO/work_packages/wp-192/index.md): Complete oriented scoring uses the worker policy when batches outnumber workers; positive --limit or a tiny complete split runs in-process with 0 workers on… - [WP-192b — cache decoded training images](https://borda.github.io/lucid-YOLO/work_packages/wp-192b/index.md): COCO and YOLO readers can retain one RGB uint8 tensor per distinct training file before worker startup; every draw still creates fresh float storage and runs… - [WP-193 — fuse post-backward state updates](https://borda.github.io/lucid-YOLO/work_packages/wp-193/index.md): MuSGD's exact-shape CUDA buckets evaluate the existing quintic with native batched products, and EMA groups floating tensors by device and dtype for one… - [WP-193b — batch compatible MuSGD matrices and momentum](https://borda.github.io/lucid-YOLO/work_packages/wp-193b/index.md): CUDA matrices sharing a smaller dimension of at most 256 run one native Newton--Schulz batch on zero-extended columns, cropped back before their own scale… - [WP-194 — static checks to hooks, plain test names](https://borda.github.io/lucid-YOLO/work_packages/wp-194/index.md): File-content tests leave pytest: the _viz/matplotlib import boundary becomes ruff TID251, the top-k and packaged-recipe text pins the content-pins hook, and… - [WP-195 — batch rotated-box clipping and refitting](https://borda.github.io/lucid-YOLO/work_packages/wp-195/index.md): Finite float32 CPU augmentation boxes without gradients share the existing clip and orientation-preserving fit in equal-vertex-count groups. Ring order and… - [WP-197 — defer training HSV and quantization to CUDA](https://borda.github.io/lucid-YOLO/work_packages/wp-197/index.md): Opt-in device_hsv keeps gain sampling and flipping in the workers, then batches the existing colour operations and quantization on CUDA. Float32 image…