Skip to content

Notes that ADR-0017's float exclusion is lifted - #217

Merged
johnnyt merged 1 commit into
mainfrom
px-dvz-adr-0017-float-note
Sep 5, 2026
Merged

Notes that ADR-0017's float exclusion is lifted#217
johnnyt merged 1 commit into
mainfrom
px-dvz-adr-0017-float-note

Conversation

@johnnyt

@johnnyt johnnyt commented Sep 5, 2026

Copy link
Copy Markdown
Member

Closes px-dvz.

ADR-0017 recorded the float exclusion under "Two exclusions that are not
decisions" as contingent - live only until Predicator.decompile/2 stopped
raising on a float literal, with px-ggb named as the tracked defect. Both
halves of that contingency resolved on 2026-09-05, so the record described a
state of the world that no longer exists.

This PR appends a dated Note saying so. It changes nothing else.

What the Note cites, and how it was checked

Cite Verified
#209 "Fixes the float literal hole in the string writer" (px-ggb) MERGED 2026-09-04T21:55:39Z as f3960b4; lib/predicator/visitors/string_visitor.ex:126 carries the is_float(value) literal clause today
#211 "Admits float literals to the Simple subset" (px-gv1) MERGED 2026-09-05T03:21:04Z as 9e75ea8; lib/predicator/simple.ex:178 declares {:float, float()} in t:scalar/0, :410 maps it to :number, and test/predicator/simple_test.exs:238 now pins a float source as inside
"as of predicator 9.3.0" CHANGELOG.md's ## [9.3.0] - 2026-09-05 section carries both changes; #211 merged before the 9.3.0 prep (#212), not after it

Both URLs return 200.

Shape

  • Zero removed lines. git diff origin/main -- docs/adr/ is 23 insertions
    and 0 deletions. The superseded paragraph is left exactly as written: under
    docs/adr/README.md's amend-by-addition rule the record of why the
    exclusion existed and on what it was contingent stays visible, and the Note
    says only that the contingency is spent.
  • The Note does not restate the argument. It records what changed and what
    it shipped in; the modelling reasoning (why a float is a new scalar shape but
    not a new value kind) lives in Admits float literals to the Simple subset #211's body and in the 9.3.0 changelog entry,
    and is not copied here.
  • The negative-number exclusion beside it is named as untouched, since a reader
    arriving at the Note needs to know which of the two exclusions moved.

Not in this PR

The status line is not touched. ADR-0017 is still proposed. Flipping it
to accepted is px-ikd, a separate gated PR on this same file, and the flip is
blocked on this Note precisely because accepting a record whose prose asserts a
live exclusion that has been lifted would bless a false statement.

Findings handed to px-ikd's pre-flip verification

The flip must verify every claim in the record against today's main, not
against the code the record was written over. Two places worth a second look
that are outside this PR's scope:

  1. "The operator table has one source" says a field structured authoring
    needs "is added to Vocabulary itself, not to Simple and not to the
    consumer." Since px-e1l (Adds a value-to-kind function to the structured subset #215, in 9.4.0), Predicator.Simple.value_kind/1
    exists at lib/predicator/simple.ex:408-416 and maps a Simple scalar tag
    to a Vocabulary.value_kind/0. I read that as consistent - it is a
    translation from Simple's own scalar shapes into Vocabulary's kinds, not
    a second table of kinds or operators, and Vocabulary is still the only
    source - but it is a public-surface addition to Simple made after the
    record was written, and the flip should rule on it rather than inherit my
    reading.
  2. "Status is proposed" in the Consequences list is a self-describing
    sentence that stops being true the moment px-ikd flips the header. It is
    part of what the flip has to move, and it is not addressed here.

Neither is a defect in this Note.

Gate

Docs-only: gate.rb reports applicable: false (no changes under lib/, test/, mix.exs, mix.lock, conformance/ - nothing for the gate to measure), so
no quality gate applies to this diff. Full mix quality was run on this HEAD
anyway and is green - Format, Compile, Dependencies, Credo, Dialyzer clean,
2,901 of 2,901 tests at 95.6% coverage, including test/docs_adr_links_test.exs
which binds the ADR link forms. Doctor, Gettext and Sobelow are the repo's
three standing skips.

No changelog fragment: an ADR Note changes nothing a caller of
Predicator.evaluate/3 can observe.

ADR-0017 recorded the float exclusion as contingent on px-ggb and
described it as live. Both halves resolved on 2026-09-05: the string
writer gained its float clause (#209) and the subset dropped the
exclusion (#211), shipping in 9.3.0.

A dated Note records that the contingency is spent. The paragraph it
supersedes is left as written - the record of why the exclusion existed
stays visible, per the amend-by-addition rule in docs/adr/README.md.

Refs: px-dvz
@codecov

codecov Bot commented Sep 5, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@johnnyt
johnnyt merged commit 989b149 into main Sep 5, 2026
2 checks passed
@johnnyt
johnnyt deleted the px-dvz-adr-0017-float-note branch September 5, 2026 13:49
This was referenced Sep 5, 2026
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