Skip to content

Define and enforce a long-run exploration yield contract #215

Open
0 of 4 issues completed
Open

Description

@chaoz23

Product outcome

For a large, long-maintained Ink story, a marathon InkCheck run should keep converting its declared time and memory into new bugs or useful semantic territory. Finding a bug early and then retaining state until the heap watermark stops the run is good early discovery, but weak long-horizon value for a creator who granted a much larger budget.

This issue defines the missing product contract: continued search must be judged by incremental useful yield relative to retained memory and elapsed time, not by raw explored-state count alone.

InkBench evidence

The complete generated 20-minute matrix contains 120 canonical cells: 8 bug families × 5 explorers × 3 seeds. It used InkBench commit 76b1dd5 and the corrected InkCheck build at b2651f5 (CLI SHA-256 b54b01b48122151bc2105c99acbab061e1252da7f3768004d4ad037d0b0290eb).

InkCheck found all 24 planted bugs, including the strongest results on several difficult families. However:

  • novelty-honeypot: 3/3 bugs found, median first discovery about 5.9 minutes, then 3/3 runs stopped on memory at a median of about 7.3 minutes.
  • compound-needle: 3/3 found, median first discovery about 1 minute, then 3/3 stopped on memory at a median of about 6.5 minutes.
  • rare-prefix: 3/3 found, median first discovery about 13.6 minutes; the runs then consumed nearly the full time window.
  • delayed-consequence: 3/3 found, median first discovery about 15.6 minutes.

A preregistered 60-minute matrix was intentionally stopped after 54/120 durable cells because the next engineering decision was already clear and both InkCheck and InkSwarm are about to change. In the 10 completed InkCheck cells:

  • all 10 planted bugs were found;
  • 6 small/exhaustible cells completed normally;
  • all 3 rare-prefix cells found the bug around 13.7 minutes, then stopped on memory around 33–36 minutes;
  • the completed novelty-honeypot InkCheck cell found the bug around 6.0 minutes, then stopped on memory around 7.9 minutes;
  • there were no adapter/runtime failures, unavailable cells, or native work-ceiling hits;
  • the bounded NDJSON evidence stream stayed tiny, so output streaming was not the retained-memory driver.

The partial 60-minute run is not a comparative estimate and must not be used to claim algorithmic superiority. It does show that, on these families, the current search representation can become the binding constraint long before the granted wall-time budget.

Opportunity

Add an explicit long-run yield contract around the work already tracked in #156 and #190:

  1. Report retained bytes and counts by major owner: pending frontier, deduplication, ancestry/witness data, semantic indexes, findings, checkpoints, and serialization/finalization reserve.
  2. Record incremental useful yield per interval: new findings, new authored locations, choice/edge outcomes, meaningful variable transitions/combinations, and other versioned semantic signals.
  3. Derive and report metrics such as useful yield per retained GiB-minute and per million transitions. Keep raw state throughput separate.
  4. Put explicit byte/count ceilings on each unbounded search structure. When a ceiling binds, compact, spill, evict, or finish with an honest partial result according to a deterministic policy.
  5. Make retention yield-aware: state that has not produced useful descendants should not receive unlimited memory merely because it is novel under a broad representation.
  6. Support compact, resumable epochs so a long campaign can preserve its best corpus/frontier without requiring one ever-growing heap.
  7. Exercise the policy on multi-bug stories so an early find cannot hide an unproductive remaining tail.

Acceptance criteria

  • Long-run reports attribute retained bytes/counts to the major search structures at bounded intervals and at termination.
  • The report distinguishes early discovery quality from post-discovery incremental yield.
  • Identical source/config/seed/resource posture makes the same compaction, spill, eviction, and stop decisions.
  • Every resource stop retains a valid partial report and replayable witnesses; no completeness claim is inferred.
  • A candidate evaluation reruns the InkBench rare-prefix, novelty-honeypot, compound-needle, and false-novelty families under matched budgets, plus at least one public real story.
  • Relative to the pinned build, the candidate either converts materially more of the same memory/time grant into additional findings or useful semantic territory, or documents that an earlier honest stop is the better product outcome.
  • Early time-to-first-discovery and witness integrity do not regress beyond a preregistered tolerance.
  • Comparisons include a simpler systematic/coverage baseline so representation cost cannot be mistaken for search competence.

Non-goals

  • Claiming InkCheck is generally weaker than another explorer from this partial 60-minute matrix.
  • Raising memory defaults as the primary fix.
  • Treating raw state hashes, state count, or heap consumption as useful coverage by themselves.

Activity

  1. chaoz23 commented on Aug 14, 2026

    @chaoz23
    OwnerAuthor

    Implementation has started from the approved long-run plan, with the benchmark evidence kept separate from shipped behavior.

    The implementation/evaluation chain is now represented by native sub-issues #216, #217, #218, and #219. Work is beginning with the deterministic observability slice (#216) and bounded checkpoint readback under existing #156. No live allocation policy is activated, and the stopped historical 60-minute matrix will not be resumed for comparison.

  2. chaoz23 commented on Aug 20, 2026

    @chaoz23
    OwnerAuthor

    Publication handoff update — 2026-08-20 (no merge/release/policy/benchmark restart in this handoff):

    Next: review the green draft chain. Merging requires a separate decision. If #222 merges, replay and retarget sibling drafts #223/#224 onto the resulting main, then complete the remaining #216 and checkpoint-v2 contracts before any fresh comparative matrix.

  3. chaoz23 commented on Aug 25, 2026

    @chaoz23
    OwnerAuthor

    Epic progress map — 2026-08-25

    Public main is 52e1721. PRs #220, #222, #223, #224, #225, #226, and #227 are merged, with exact-head CI and post-main CI green. The merged work provides bounded evidence streaming, safe finalization/worker cleanup, bounded schema-v1 checkpoint lifecycle, deterministic observability boundaries, and partial retained/checkpoint/report ownership accounting.

    The product behavior that motivated this epic has not changed yet: checkpoints remain monolithic schema v1, there are no general per-owner budgets or pressure actions, memory/time stops are not resumable epochs, the first campaign window is still fixed, and no fresh InkBench matrix has run.

    Critical path now recorded in the handoff: checkpoint-v2/#156 → remaining #216 telemetry → #190 adaptive first window and #217 deterministic owner pressure → #218 resumable epochs → frozen #219/InkBench proof. All linked issues remain open; no package release or live policy activation is implied by the accounting merges.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions