Repository navigation
Write the approved phase-1 core design into DESIGN - #11
Merged
Merged
Conversation
On 2026-10-04 the user approved the phase-1 core design: 13 decisions on the
phase-1 scope (including API-review recommendations 6, 7, 11, 12, 14 and 15),
and the architect's core note, revised after four reviews, with all eight of
its remaining implementation choices. CLAUDE.md step 5 asks for the approved
design to be written into the DESIGN sections it changes, so that each item
can be built from DESIGN alone. Nothing here is built yet. Every unbuilt
item carries a new status mark, "[phase 1, approved 2026-10-04; not built]",
with a "Today ..." sentence wherever the code still behaves the old way.
- §6.2, §6.8: role-typed x_tol/width_tol literals and guides, the make set
(make(T, T) dropped, make(abs) added), the reasoned deletions, the purely
relative spelling width_tol{0.0, rel_tolerance{r}}, and brent{*tol} and its
siblings rejected with a reason (§7.2).
- §6.3: failure::where -> by, fault::evals -> evaluations, nxx::best and its
deleted overload for search results, non_finite_input for every non-finite
input, and the driver mapping input codes from a step to non_finite_value.
- §6.4, §6.5: what f may return (callback_for_v, value_fits_v, to_scalar,
overflow and underflow), integer returns accepted, and the facades'
parameter-width deletions left to phase 3.
- §6.6, §6.7: nxx::better_than as the protocol's customisation point,
merit_of removed, the total and overflow-free roots order (R3), and the
pole payload without its enclosure.
- §3.6, §6.10: the combinators' call operators constrained, with reasoned
deleted siblings in place of static_asserts.
- §6.14: three new canonical calls. §5.3, §6.1: -ffp-contract is documented
for consumers, not added to the interface flags, and the limits stay in
std::numeric_limits. §7.1: deriv items recorded for phase 2.
- §10.3 and PLAN: phase 1 re-estimated from 0.5-1 to 6.5-9.5 developer-days
[est], and the total left from 40-61 to 46-69.5 [est]. §12.20 records the
decisions. Appendix D marks the items this design resolves.
- CLAUDE.md and the CHANGELOG no longer call -ffp-contract an open question.
Reviewed by docs-auditor and phase-scope-checker against the note, the
decisions and the code at 5780276; their findings are applied.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The normative implementation sketches and regression specification need corrections before they guide implementation.
Review effort: Balanced
Findings: 3
Open (3)
What changed in this PR
Records the approved phase-1 core design for Numerixx 2 without changing library code.
Changes:
- Specifies planned core APIs, diagnostics, and acceptance tests.
- Updates phase scope, estimates, and canonical calls.
- Records the decision to leave GCC floating-point contraction flags to consumers.
| File | Description |
|---|---|
| docs/redesign/PLAN.md | Updates phase-1 status, scope, and estimates. |
| docs/redesign/DESIGN.md | Specifies approved changes and distinguishes them from current behavior. |
| CLAUDE.md | Records the settled GCC contraction policy. |
| CHANGELOG.md | Replaces the open contraction question with its decision. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- step_fault is not noexcept. Returning the fault moves its cause, which may be a user type whose move constructor throws, and the library is exception-neutral (D10). - The half-width reversal near the subnormal range uses explicit endpoints. With d = denorm_min under round-to-nearest-even, [d, 3d] has width 2d and half-width 2d, while [2d, 5d] has width 3d and half-width d (measured in double). Multiples of DBL_MIN halve exactly, so they cannot show it. The planned regression case uses the same endpoints. - warm_fallback merges two failures through detail::merge, which calls detail::better. Its classifier therefore gains a no_better_than state, with a reason, a compile-fail case and a negative invocability test, and the combinators have 18 deleted declarations, not 17. Co-Authored-By: Claude Opus 5.5 <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.

Why
Step 5 of the CLAUDE.md process for a core change. On 2026-10-04 the maintainer approved the phase-1 core design:
This PR writes that design into the DESIGN sections it changes, so that each item can be built from DESIGN alone. Nothing is built yet. Every unbuilt item carries the new status mark [phase 1, approved 2026-10-04; not built], with a "Today …" sentence wherever the code still behaves the old way.
What (docs only)
failure::where→by,fault::evals→evaluations;nxx::best(r), with a reasoned deletion for search resultsnon_finite_inputfor every non-finite input value. The driver maps an input code that comes from inside a step tonon_finite_value.width_tol{1e-10, nxx::rel_tolerance{1e-8}}, with the bare two-number form deleted with a reason.make(T, T)dropped,make(abs)added.width_tol{0.0, rel_tolerance{r}}for a purely relative width.brent{*tol}and its siblings rejected with a reason.expectedof one. Narrowing is caught, overflow and underflow of a wider result fail in-band, andstd::is_invocable_vis false instead of a hard error. The facades' parameter-width deletions are left to phase 3.nxx::better_thanbecomes the protocol's documented customisation point andmerit_ofis removed. The roots order becomes total and overflow-free. A pole failure carries its estimate without the enclosure, sofirst_ofdoesn't rank a pole as best.static_assertsstatic_asserts for float, double and long double; constexpr digits plus a run-time check forcpp_bin_float_50); result sizes recorded;-ffp-contractdocumented for consumers, not added to the interface flags; the limits stay instd::numeric_limitsAlso:
-ffp-contractan open question.Verification
docs-auditorchecked every statement against the approved note, the decisions and the code at 5780276: no decision altered or invented, current-behaviour claims correct, references resolve, numbers cited or marked [est], and no project names.phase-scope-checkerchecked every phase mark.Next
The build follows in separate PRs, in this order: B7 → B4 → B1 → B2/B3 → B6 → B5 → A1/A2 and docs. Each is implemented, reviewed and run through all 12 presets. A nightly dispatch for the compiler floor follows once B3 exists.
🤖 Generated with Claude Code