Skip to content

chore: retire the prober for ValueRanges' oracle kit - #99

Closed
CaffeinatedCoder wants to merge 2 commits into
release/2.3.0from
chore/oracles
Closed

CaffeinatedCoder wants to merge 2 commits into
release/2.3.0from
chore/oracles

Conversation

@CaffeinatedCoder

Copy link
Copy Markdown
Owner

Closes #97

Stacked on #96 (and through it on #94), for the decision record's number: 0110 and 0111 are theirs, and this record is 0112. Once they merge, this PR's base becomes release/2.3.0.

Problem

The prober cost more than it paid. prober seeds built the probe harness once per seed, 170 seeds at about four minutes each, so a release's seeds --all took about eleven hours. One change to the fault responses (#85) staled 23 seeds of five probes, about 90 minutes. A checkout whose ledger had never recorded a catch wanted all 170. The replay, the footprints, the ledger, the covering arrays and the release gate carried the same weight.

Change

Retired:

  • tools/Prober and its tests;
  • the corpus under tools/probe/: 38 probes, their rows, 170 seeds;
  • the probes and probe-status jobs of dotnet.yml, and the replay and gate steps of release.yml;
  • .claude/probe-axes.md, the probe-triage skill and the five probe conventions tests;
  • DocsQuery's check of the facts the corpus cited. The verified facts and their fixtures stay.

Added, CodoMetis.ValueRanges' kit ported to xunit (test/oracles/README.md is the manual):

  • claims.json: the prober's 169 obligations as 150 claims, one per distinct sentence, each quoted verbatim. 112 are held by a named test class; the 38 with an empty heldBy are the worklist.
  • surface-waivers.json: every public member of the five run-time libraries is claimed or waived. Members of documents the prober never read are waived as unread:, and Oracle catalogue: read the documents the prober never read for claims #98 reads them.
  • oracles.json and seeds/: five oracles that already existed (JsonParityTests, NullDelegateTests, AsynchronousContextTests, NotWireTypeTests, KeyGenerationVariantTests), each with a seed in src/.
  • candidates.json (empty) and axes.md (hand-written).
  • test/CodoMetis.TypeKit.Oracles.Tests holds all of it in CI without building anything else. It is a project of its own because the surface is read by reflection, and the conventions project references no library.
  • tools/Oracles, run locally: seeds [filter] copies the tree, applies one seed, builds one project and runs one class; status prints the worklist.

Decision 112 supersedes decisions 96, 99 to 104 and 108, decision 107 but for its fixture rule, and decision 97's gate. AGENTS.md (commands, workflow step 7, Releasing), CONTRIBUTING.md (release steps, label legend), design/plan.md, the PR template and the verify-the-guard skill follow.

Tests

  • oracles seeds: all five seeds caught, about 10 s each.
    • json-key-written-by-to-string: 71 of 157 JsonParityTests fail.
    • ushort-key-not-generated: 19 of 547 KeyGenerationVariantTests fail.
    • result-reads-as-json: 15 of 99 NotWireTypeTests fail.
    • patch-traverse-takes-a-null-selector and traverse-async-resumes-on-the-caller-s-context: one row each of NullDelegateTests and AsynchronousContextTests.
  • The kit's own guards, seeded:
    • a reworded promise in docs/json.md fails Every_claim_quotes_its_source_verbatim;
    • a waiver removed fails Every_public_member_is_claimed_or_waived.
  • Full suite: passes (the Oracles, Conventions and DocsQuery projects re-run after the last fix).
  • main's required checks name no probe job, so nothing waits on a check that no longer runs.

Merge notes:

🤖 Generated with Claude Code

CaffeinatedCoder and others added 2 commits October 28, 2026 18:05
FaultResponse.WithoutFaultName() answers a member without naming it, for
causes a client must not tell apart: a sign-in's unknown user and wrong
password, mapped to 401 and withheld, answer alike without a mapping to one
member at the boundary. The problem has no fault and no rule, and a fault
set member's description no longer stands in as its detail, since it names
the member as surely; the occurrence's own detail is kept. IFaultFeature
gains NameWithheld, a default member, so the host still logs the fault and
sees that the client is not told.

The document's problem schema is shared and keeps fault optional; a
response whose every fault withholds its name ends its description with
"The problem names no fault." The startup warning for two fault types that
write one name counts only the members that write it (Found-By: VA, the
sibling of the problem's fault member).

Decision 111 records it; decision 64's index row points to it. Stacked on
feat/catch-async-valuetask for the record's number.

Seven probe seeds that patch the changed lines are regenerated: C03
shared-status-types, C05 stays-the-errors, C06 description-as-detail and
no-description-no-detail, C08 leave-one-out-fixes, C14 declared-describes-
fault and declared-problem.

Closes #85

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The prober cost more than it paid: a release's `prober seeds --all` built the
probe harness once per seed, 170 seeds at about four minutes, and one change
to the fault responses staled 23 seeds of five probes. The replay, the
footprints, the ledger, the covering arrays and the gate carried the same
weight.

Removed: tools/Prober and its tests, the corpus under tools/probe/ with its
38 probes and 170 seeds, the probes and probe-status jobs of dotnet.yml, the
replay and gate steps of release.yml, .claude/probe-axes.md, the
probe-triage skill, the probe conventions tests, and DocsQuery's check of
the facts the corpus cited. The verified facts and their fixtures stay.

Added, after CodoMetis.ValueRanges (test/oracles/README.md):
- claims.json: the prober's 169 obligations as 150 claims, one per distinct
  sentence, each quoted verbatim, 112 held by a named test class;
- surface-waivers.json: every public member of the run-time libraries is
  claimed or waived; the documents never read for claims are waived as
  unread (#98);
- oracles.json and seeds/: five oracles that already existed
  (JsonParityTests, NullDelegateTests, AsynchronousContextTests,
  NotWireTypeTests, KeyGenerationVariantTests), each with a seed; all five
  caught by `oracles seeds`, about ten seconds each;
- candidates.json and axes.md;
- test/CodoMetis.TypeKit.Oracles.Tests, which holds the catalogue in CI,
  and tools/Oracles, the local `seeds` and `status`.

Decision 112 supersedes decisions 96, 99 to 104 and 108, decision 107 but
for its fixture rule, and decision 97's gate. AGENTS.md, CONTRIBUTING.md and
design/plan.md describe the kit. Stacked on #96 for the decision's number.

Closes #97

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@CaffeinatedCoder CaffeinatedCoder added this to the 2.3.0 milestone Oct 28, 2026
@CaffeinatedCoder CaffeinatedCoder added chore Build, CI, tooling, packaging, refactoring with no behaviour change stacked Base is another open PR; merge in order, CI does not run until it targets a release area/release Versioning, changelogs, packaging and release wiring area/tooling The repository's tools: prober, verdict, guard, docs-query, smoke test labels Oct 28, 2026
@CaffeinatedCoder
CaffeinatedCoder changed the base branch from feat/withheld-fault-name to release/2.3.0 October 28, 2026 20:40
@CaffeinatedCoder
CaffeinatedCoder deleted the chore/oracles branch October 28, 2026 21:03
@CaffeinatedCoder

Copy link
Copy Markdown
Owner Author

Superseded by #108: the branch was renamed to build/oracles, since chore/ fails PR hygiene's branch check, and the rename closed this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/release Versioning, changelogs, packaging and release wiring area/tooling The repository's tools: prober, verdict, guard, docs-query, smoke test chore Build, CI, tooling, packaging, refactoring with no behaviour change stacked Base is another open PR; merge in order, CI does not run until it targets a release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant