Skip to content

Phase 4: the public interface and the result type - #55

Merged
adolgert merged 17 commits into
feature/phase3-enginesfrom
feature/phase4-interface
Oct 3, 2026
Merged

adolgert merged 17 commits into
feature/phase3-enginesfrom
feature/phase4-interface

Conversation

@adolgert

Copy link
Copy Markdown
Owner

Phase 4 of design/20260926_implementation_plan.md, stacked on #54. Review note with the target-screen transcript and open decisions: design/phase4_review.md.

  • TestCases{T} <: AbstractVector{T}: typed rows (NamedTuple for named spaces, Tuple for positional), the space, strategy, engine and seed, must-include count, covered and excluded targets with attribution. show prints a summary, an excluded line, and a DataFrame-style table, and performs no search (tested).
  • covering, all_values/all_pairs/all_triples, excursions, full_factorial over a TestSpace, a NamedTuple, pairs, or positional vectors; constraints = builds a space from named input and errors on a TestSpace or positional input; must_include accepts partial rows and an existing TestCases; stronger leaves the caller's vector untouched.
  • Tables: DataFrame(cases) and CSV.write work for named results; the positional recipe is documented.
  • Deprecations via Base.depwarn: all_tuples, n_way, seeds, wayness, values_excursion/pairs_excursion/triples_excursion, GND(M=). Removed: Excursion, Counter, generate_tuples; disallow is a MethodError.
  • CI matrix is now Julia 1.10 (LTS), 1.13, and latest.

Full suite: 272,326 pass, 8 pending (Phases 5–6), 0 failures. Aqua and docs build green.

🤖 Generated with Claude Code

adolgert and others added 3 commits September 27, 2026 14:15
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
covering, all_values, all_pairs, all_triples, excursions, and
full_factorial accept a TestSpace, a NamedTuple, pairs, or positional
vectors and return TestCases{T}, a read-only vector of typed rows that
records the space, strategy, engine and seed, must-include count, covered
and excluded targets with attribution. show prints only recorded
bookkeeping. all_tuples, n_way, seeds, wayness, the *_excursion names,
and GND(M=) warn through depwarn; Excursion and Counter are gone.
Excursion notes are values, not positions.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
exclusion wording, budget docs, strength-0 semantics for Phase 5

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@adolgert

Copy link
Copy Markdown
Owner Author

Review round 1 applied (see design/phase4_review.md): an explicit keyword with its deprecated alias is now an error for all five alias pairs (the audit found a sixth silent case, distance vs n_way on the excursion aliases, fixed too); must_include is materialized once, so Iterators.Stateful and generators keep their rows; the excluded line says "impossible under the constraints"; the budget docs describe feasibility_limit (throws) and explanation_limit (certified design, unresolved attribution) separately; the strength = 0 sentinel is documented and the Phase 5 rule for measuring such results is in the plan and contract §1.12.

Full suite: 272,474 pass, 8 pending, 0 failures.

🤖 Generated with Claude Code

field types from values, min(2, n) report default, duplicate wording

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@adolgert

Copy link
Copy Markdown
Owner Author

Review round 2 applied (see design/phase4_review.md): the full-factorial limit is checked before any search; every integer keyword is validated before sorting or conversion with a focused message (audit table in the review); field types are computed from the values per contract §2.4 (Any[1, 2] → Int64, Any[1, 1.0] → Union{Float64, Int64}); the Phase 5 report default is min(2, parameter count); the full-factorial and excursion docstrings and contract §7.2 state that supplied duplicates are kept and enumeration adds each remaining valid row once.

Full suite: 273,137 pass, 8 pending, 0 failures.

🤖 Generated with Claude Code

adolgert and others added 2 commits September 27, 2026 18:03
coverage measures any supplied rows against a space, independent of
generator bookkeeping: covered targets need no search, missing ones are
classified with attribution, unknown ones are listed without a
percentage, ordinary and negative parts are kept separate, and rejected
rows contribute nothing. Unconstrained requests no longer materialize
their target list for the certification recount.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
report verifies a result independently of its bookkeeping: a guarantee
line, the excluded list with attribution, bonus coverage at strength + 1,
a prefix curve computed in one pass, and the seed, never printing a
percentage while a target is unresolved. design_sizes runs each strategy
and tabulates cases, share of the valid product, and pairs and triples
covered, recording a resource-limit status instead of a count.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
adolgert and others added 9 commits September 27, 2026 19:06
The excursion guarantee exempts must-include rows; report shows its own
freshly verified exclusions and labels recorded proofs as a fallback;
coverage(cases; strength) keeps stored stronger groups unless replaced;
plain() gives a Report, Coverage, or DesignSizes representation with no
executable state, tested by round trip; measurement docstring examples
are doctests with real output. The release is 0.5.0: the maintainer
wants a 0.x version to use before calling anything 1.0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…matrix

Negative targets are classified through the negative-row search and
covered by a sub-request over the other parameters with the same engine,
with separate bookkeeping and a ! marker on negative rows. Must-include,
full factorial, and excursions accept wrappers under their row policies.
realize draws each Partition once under the caller's rng. diagnose ranks
combinations present only in failing cases and groups indistinguishable
ones; followups finds isolating cases or proves there are none.
github_matrix writes a validated GitHub Actions include matrix with
JSON.jl.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
figures, JSON field-name validation

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The docs environment pinned Documenter 0.25, which needs JSON 0.21, while
the package now requires JSON 1, so CI could not resolve it. Documenter 1
makes missing docstrings and unresolved references errors by default;
they stay warnings until Phase 7 completes the manual.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
README and home page lead with the promise, the decision table, and one
example with its printed output. The manual is a tutorial in five levels,
nine how-to guides by job, explanation pages on values and oracles,
interaction coverage and its evidence, constraints, and the engines, a
reference organized by purpose with every exported docstring opening on
the situation it serves, a 0.4 to 0.5 migration table, developer pages,
and a one-pager for AI agents. Doctests run in the docs build and in the
test suite; the build fails on any warning.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
wording, two-check lockfile pattern, badge and contract wording

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Phase 7: documentation and first contact
@adolgert adolgert closed this Oct 3, 2026
Phase 6: Invalid, Partition, diagnose, github_matrix
@adolgert adolgert reopened this Oct 3, 2026
@adolgert
adolgert merged commit 0415608 into feature/phase3-engines Oct 3, 2026
21 checks passed
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