Skip to content

docs: renumber the tracked-black-level ADR to 0028 - #616

Merged
brickbots merged 1 commit into
mainfrom
adr-0027-collision
Aug 15, 2026
Merged

docs: renumber the tracked-black-level ADR to 0028#616
brickbots merged 1 commit into
mainfrom
adr-0027-collision

Conversation

@brickbots

Copy link
Copy Markdown
Owner

main currently has two ADR 0027s, landed a day apart from parallel branches:

File Arrived via
0027-fov-gate-derived-from-optical-train.md #608
0027-tracked-black-level-supersedes-stored-bias.md #606

Same recurring cause as the earlier 0003/0004/0005/0010 and 0020 collisions: each worktree takes "next integer" off a main that 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 mv only, no breadcrumb:

  • FOV gate keeps 0027. It is linked from CONTEXT-MAP.md and positioning/CONTEXT.md, and Derive field of view from the optical train (sensor × lens) #609 (open, mergeable, green) carries ten bare docs/adr/0027 mentions across optics.py, camera_profiles.py, camera_debug.py, solver.py, ui/callbacks.py, ui/menu_structure.py and two test modules. Minimising churn in code comments is exactly what the tiebreak exists for.
  • Tracked black level → 0028, the lowest slot free across every branch and remote.

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).
  • Three inbound references updated: docs/ax/sqm.md ×2 and docs/ax/sqm/CONTEXT.md.
  • The SQM glossary's bare 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

  • No reference to 0027-tracked-black-level remains anywhere in the repo.
  • Every (…adr/NNNN-….md) link across all .md/.rst files resolves to a file that exists (script-checked, not eyeballed).
  • No generated .understand-anything artifact mentions the old name, so nothing needs regenerating.

Still outstanding (not fixed here)

🤖 Generated with Claude Code

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
brickbots marked this pull request as ready for review August 15, 2026 02:01
@brickbots
brickbots merged commit 6aad064 into main Aug 15, 2026
4 checks passed
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant