docs: renumber the tracked-black-level ADR to 0028 - #616
Merged
Conversation
Two ADRs landed as 0027 within a day of each other from parallel branches: the SQM docs refresh (#606) and the optical-train docs (#608). The recurring cause is each worktree taking "next integer" off a main that does not yet have the other's ADR. Resolved with the agreed rules: the most-referenced file keeps the contested number, and latecomers move to the lowest globally-free slot. The FOV-gate ADR keeps 0027 -- it is linked from CONTEXT-MAP and referenced by ten bare `docs/adr/0027` mentions in the shipping code and tests of #609, and churning code comments is exactly what the tiebreak is meant to avoid. The tracked black level ADR moves to 0028, the lowest slot free across every branch and remote (0027 is also reserved by #571, which will need 0029 when it merges). Rename plus its three inbound references; the ADR's own text is untouched and carries no "renumbered from" breadcrumb, per the same rules. The bare "See ADR 0027" in the SQM glossary becomes an explicit link, since a bare number is what made this ambiguous to read in the first place. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
brickbots
marked this pull request as ready for review
August 15, 2026 02:01
brickbots
added a commit
that referenced
this pull request
Aug 18, 2026
0027 was already taken twice over. #608/#606 collided on it and were resolved by #616 (FOV gate keeps 0027, tracked black level moved to 0028); this branch, cut before that, carried a third 0027. Under the standing tiebreak the most-referenced ADR keeps the number, and the FOV gate wins by a wide margin -- CONTEXT-MAP.md, docs/ax/sqm.md, docs/ax/positioning.md, positioning/CONTEXT.md, ADR 0029 and two test modules all point at it, against three references here. The 2.6.2 test plan (P1.4) earmarked 0029 for this branch, but 0029 was taken by the lens-confidence ADR in the meantime, so this takes 0030 -- the lowest free number. Three inbound references updated. No content change; ADR titles in this repo carry no number, so the rename is the whole of it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
brickbots
added a commit
that referenced
this pull request
Aug 25, 2026
#571) * fix(web): validate equipment and GPS form input at the API, not just the browser The equipment handlers parsed with bare float()/int() inside `except Exception: logger.error(...)` and then rendered the success template regardless, so an unreadable value reported "Eyepiece added" and saved nothing: POST /equipment/add_eyepiece/-1 focal_length_mm=7,5 -> HTTP 200 + "Eyepiece added, restart your PiFinder to use" -> eyepiece count unchanged /gps/update had no try/except at all, so the same input reached the user as an unhandled 500. A decimal comma is the easiest trigger — PiFinder ships de/es/fr/zh — but any unparseable value did it, including the blank instrument name from #569. Field rules now live in one table in equipment.py: the edit forms render them into their client-side check and the API re-checks them before anything reaches config. Measurements are floats throughout, so a 279.4mm aperture is enterable and a config carrying one is loadable (#291); whole millimetres still display as "1000", not "1000.0", via format_measurement. - equipment: measurements are validated floats; limits + name length live beside the dataclasses (ADR 0027) - server: parse_measurement/parse_name/*_from_form; failures re-render the edit form with the message and the values that were typed; route indexes are range-checked instead of raising IndexError as a 500; the DeepskyLog import skips records it can't read rather than writing them through - gps: parse everything before locking anything, so a bad clock entry can't half-apply a position; gps.html gets #536's normalizeDecimal, which never reached it, and locations.html's two decimal->DMS bypasses are fixed - config: an undecodable equipment section logs and falls back to the defaults instead of aborting main() before the UI comes up (#291) Covered at the request level (the Selenium suite runs en-US and structurally can't catch a decimal-comma bug): 68 new tests, and the equipment + locations web suites still pass against a live PiFinder. Fixes #569 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs: renumber the equipment-validation ADR to 0030 0027 was already taken twice over. #608/#606 collided on it and were resolved by #616 (FOV gate keeps 0027, tracked black level moved to 0028); this branch, cut before that, carried a third 0027. Under the standing tiebreak the most-referenced ADR keeps the number, and the FOV gate wins by a wide margin -- CONTEXT-MAP.md, docs/ax/sqm.md, docs/ax/positioning.md, positioning/CONTEXT.md, ADR 0029 and two test modules all point at it, against three references here. The 2.6.2 test plan (P1.4) earmarked 0029 for this branch, but 0029 was taken by the lens-confidence ADR in the meantime, so this takes 0030 -- the lowest free number. Three inbound references updated. No content change; ADR titles in this repo carry no number, so the rename is the whole of it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs: renumber the equipment-validation ADR to 0033 Merging main in brought `0030-nearby-ranking-correctness-and-cost.md` alongside this branch's `0030-equipment-measurements-are-validated-floats.md`. Two different files, so git merged them without a conflict, and a bare "ADR 0030" in the tree now pointed at either one. Standing rule: the most-referenced file keeps the contested number. The nearby ADR has landed on main and is cited from nearby.py (x2), test_nearby.py, ADR 0031 and the 2.6.3 notes, against three references for this one — so it keeps 0030 and this moves. 0033 is the lowest slot free across every branch and open PR (0031 is main's chart readout, 0032 is claimed by #635). Three inbound references updated, plus the now-doubly-stale earmark in the 2.6.2 test plan, which had reserved 0029 for this ADR before #624 and #622 took 0029 and 0030. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ShwenqLLrgHTRsrM1UyfZa --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
maincurrently has two ADR 0027s, landed a day apart from parallel branches:0027-fov-gate-derived-from-optical-train.md0027-tracked-black-level-supersedes-stored-bias.mdSame recurring cause as the earlier 0003/0004/0005/0010 and 0020 collisions: each worktree takes "next integer" off a
mainthat does not yet carry the other's ADR.Who keeps 0027
Applying the agreed rules — most-referenced keeps the contested number, latecomers move to the lowest globally-free slot,
git mvonly, no breadcrumb:CONTEXT-MAP.mdandpositioning/CONTEXT.md, and Derive field of view from the optical train (sensor × lens) #609 (open, mergeable, green) carries ten baredocs/adr/0027mentions acrossoptics.py,camera_profiles.py,camera_debug.py,solver.py,ui/callbacks.py,ui/menu_structure.pyand two test modules. Minimising churn in code comments is exactly what the tiebreak exists for.Worth flagging that this is the one case where the rules disagree with each other: #606 merged before #608, so a pure earliest-creation tiebreak would have gone the other way. Reference count is the primary rule and creation date only breaks ties, so 0027 stays with the FOV gate — but say the word if you would rather have it the other way round, it is a two-minute change while #609 is still open.
Changes
git mv docs/adr/0027-tracked-black-level-…→0028-tracked-black-level-…(content untouched, no "renumbered from" note).docs/ax/sqm.md×2 anddocs/ax/sqm/CONTEXT.md.See ADR 0027.becomes an explicit link — a bare number is what made this ambiguous to read in the first place.No code changes, and no ADR other than the renamed one is touched.
Verification
0027-tracked-black-levelremains anywhere in the repo.(…adr/NNNN-….md)link across all.md/.rstfiles resolves to a file that exists (script-checked, not eyeballed)..understand-anythingartifact mentions the old name, so nothing needs regenerating.Still outstanding (not fixed here)
fix/equipment-input-validation) carries a third0027-equipment-measurements-are-validated-floats.md. Per the documented practice for unmerged branches — same as the One sourceless object image per object + on-device image download (ADR 0018) #502/0018 case — it is left alone and resolved at merge; it should take 0029, since 0028 is now taken.0018collision.🤖 Generated with Claude Code