Skip to content

mcpx testing: fuzzing and property tests with one seed per run #1896

Open

Description

@dezren39

Relocated from dezren39/darwin-nix#93 on 2026-10-28 (placement audit): mcpx's single source lives in developing-today/code (pkgs/mcpx); re-home tracked at #309. Original body below; issue references inside it are historical (dezren39/nix numbering).

Parent: #91

Purpose

Randomised testing for mcpx, under one rule taken from the notes and treated as non-negotiable: one seed per run generates every input. A run that fails can then be replayed exactly from a single value, and a failure that cannot be replayed is a bug in this tree rather than a fact of life.

This is the branch #91 says must land first. Every other testing tree can be built in any order and repaired later; the mapping from a seed to the data it produces cannot. Change it after seeds exist and every recorded seed silently stops reproducing what it recorded, with nothing failing to tell you. So the format, the derivation and the engine are decided here before the first randomised test is written.

Starting point, re-checked at 05c78b2: there is nothing. 735 func Test* across 64 files and not one Fuzz*, Benchmark*, testing/quick, rapid, math/rand or t.Parallel() in the tree. That is an advantage -- there is no existing randomness to migrate and no recorded seed to invalidate.

Two of these children exist because the user asked for them by name:

What this tracker does not own: when an agent is obliged to write a randomised test, and the rule that every bug gets a test -- those are policy, and belong to #99. The CI job graph that the seed's init job plugs into belongs to #95 (#135). The feature inventory those generators aim at belongs to #97.

Children

Proposed order

  1. Update Rust crate sqlx to 0.8.0 [SECURITY] #121 and Update Rust crate tokio to v1.38.2 [SECURITY] - autoclosed #123 together. The seed's format and derivation, and the engine that consumes it, are one decision viewed from two sides -- Go runs one test process per package, so how a single run-wide value reaches every generator depends on what the generator is. Settle both before writing any randomised test.
  2. chore(deps): update dependency happy-dom to v20 [security] - autoclosed #125. Audit the 735 existing tests and stand up the helper and the corpus layout the earlier two decided. This is what turns the design into something the next test can use.
  3. Update module golang.org/x/crypto to v0.52.0 [SECURITY] #122. The seed store and its collector. Needs Update Rust crate sqlx to 0.8.0 [SECURITY] #121's format, and needs Bump golang.org/x/crypto from 0.16.0 to 0.17.0 in /sources/launcher #95's init job (Update Rust crate tokio to v1.38.2 [SECURITY] #135) to exist before the artifact path is real. The collector's commits must not re-trigger mcpx.yml (its push.paths covers pkgs/mcpx/**; see Update module golang.org/x/crypto to v0.52.0 [SECURITY] #122 step 6).
  4. Update Rust crate tracing-subscriber to v0.3.20 [SECURITY] - autoclosed #124. Bug-shape generators, once there is an engine and a framework to hang them on. This is the ongoing work: each escaped bug adds a generator for its shape.
  5. Update dependency @tailwindcss/typography to v0.5.20 #126. Any time, or never. It gates nothing.

Hard ordering constraint: nothing in #95, #97 or #99 may introduce a randomised test before #121 and #123 are decided.

Children -- ease and impact

# Title Kind Ease Impact
#121 one seed per run -- format, derivation, delivery design S (~150 lines helper + wrapper; ~20 lines of CI) high -- every randomised test depends on it
#122 seed store layout and collector design M (~80-line collector workflow, record schema, guard test) med -- logs reproduce for 90 days without it; the store is what makes seeds durable
#123 choose the generator engine research S (the research is the deliverable; gates #124/#125) high -- fixes the shape of every generator
#124 bug-shape generators -- registry, versioning, budget design M (registry + guard S; each generator S-M) high -- the notes call this the primary testing method
#125 review all tests, set up the framework and policies review + implement S-M (inventory S, helper S, registry + first generator S-M) high -- turns the design into something every later test uses
#126 deterministic execution / Rust -- not a plan research S to record; C incremental S per seam; B L-XL; A XL, not planned low now, med long-term

Warnings carried by this tracker

Related

#91 (parent), #95 (the init job that mints the seed; #135), #97 (what the generators aim at), #99 (when an agent must write one; #129 for bugs that need a guard, not a generator), #127 (do not run the full suite to find out; since #182 fixed #52 the reason is time), #172 (seed variable vs the undeclared-MCPX_* guard), #65, #35, #74/#75, #102, #106, #108 (the escaped bugs that motivate generators).

Security/auth deferred; see tracker.

Acceptance criteria

  • A fuzz/property test suite for mcpx exists in the repo, runs in CI with exactly one recorded seed per run, and a failing seed reproduces the failure deterministically.
  • Coverage targets from the issue are met or explicitly re-scoped with the reason recorded on this issue.

Activity

  1. developing-today commented on Oct 28, 2026

    @developing-today
    Contributor
  2. dezren39 commented on Oct 28, 2026

    @dezren39
    MemberAuthor

    History carried over from dezren39/darwin-nix#93 (verbatim, oldest first):


    @dezren39 · 2026-09-30T07:19:58Z

    Integration pass. Placed in the DAG rooted at #181.


    @dezren39 · 2026-09-30T12:03:38Z

    Issues pass (2026-09-30, at 05c78b2).


    @dezren39 · 2026-10-28T21:36:32Z

    🤖 Agent note · triage — verdict: CONFIRMED as a tracker, but the work no longer lives in this repo — route is re-homing to developing-today/code, not a fix here

  3. added
    queue/queuedHas a queued task in the Supabase agent queue
    kind/testTest coverage, test infrastructure, or test-only fixes
    priority/normalOrdinary priority (the default)
    effort/lLarge: multi-day or open-ended; expect staged check-ins
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 28, 2026
  4. dezren39 commented on Oct 28, 2026

    @dezren39
    MemberAuthor

    Intake review

    🤖 Agent note · filed

    Notes: Filed in the large mcpx filing batch of 2026-10-28 21:59–22:24Z and already carries a queued triage task — it is not orphaned. Verified live at intake: no merged PR references this issue and it was filed under an hour ago, so nothing can have resolved it yet. Acceptance criteria appended to the body from the issue's own stated scope; original body preserved verbatim above it.

    Risks: Tracker-level scope overlaps its sibling batch issues — the triage pass must dedupe against them before any implementation packet is written, and split rather than implement if the scope is multi-PR.

    Suggested approach: Triage first (task 2790): confirm the boundary against the sibling issues, then enqueue one scoped packet per deliverable slice.

  5. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Oct 29, 2026
  6. 13 remaining items

  7. added
    status/triagedTriaged and routed (see agent note)
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 3, 2026
  8. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: triaged (coverage pass)
    Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
    Found via: coverage pass 2026-11-03

  9. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 4, 2026
  10. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: picked-up
    queue: repo-health-code-pilot
    task: 8719 (triage, worker repo-worker-code, lane bf419306-c4ef-470f-a553-beabf93239de)
    by: openchamber-scheduled-lane
    at: 2026-11-04T03:50Z

    Fresh revalidation: #1896 is OPEN; no open PR matching this issue was found. The issue has legacy/conflicting status labels (status/triaged and status/needs-triage) plus the queued label; the active queue task now owns the triage pass. I am checking current design/implementation state before routing.

  11. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    Triage verdict — task 8719

    Verdict: CONFIRMED live tracker; do not close. The one-seed-per-run CI acceptance remains unmet at freshly fetched origin/main cac55070b52e14b4605b953b64c9c939705609e1: pkgs/mcpx/internal/testsupport/gen/ exists, but MCPX_TEST_SEED is absent under pkgs/mcpx. No matching open PR for #1896 was found.

    Current route and blockers (fresh GitHub/queue checks):

    No source/worktree changes or competing PR were created. Keep #1896 open until the seed is delivered once per run, the CI run records/replays it, and coverage targets are met or explicitly re-scoped. Existing next queue item: #1949 / task 8729.

    agent-note:v1
    state: triaged
    queue: repo-health-code-pilot
    task: 8719 (triage, worker repo-worker-code, lane bf419306-c4ef-470f-a553-beabf93239de)
    by: openchamber-scheduled-lane
    at: 2026-11-04T03:52Z}

  12. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: done — triaged
    queue: repo-health-code-pilot
    task: 8719 (triage, worker repo-worker-code, lane bf419306-c4ef-470f-a553-beabf93239de)
    by: openchamber-scheduled-lane
    at: 2026-11-04T03:54Z

    Task 8719 completed as triaged; #1896 stays OPEN because its seed/replay-in-CI acceptance is unmet. Existing follow-up task 8729 is queued for #1949, the seed format/delivery gate. Fresh checks also show #1960 blocked behind Drew-owned PR #5127 and the mcpx test / mcpx workflows disabled_manually. No source or worktree changes were made.

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

Metadata

Metadata

Assignees

Labels

effort/lLarge: multi-day or open-ended; expect staged check-inskind/testTest coverage, test infrastructure, or test-only fixesmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)source/creatorFiled by the new-issue-creator jobstatus/triagedTriaged and routed (see agent note)task/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions