Repository navigation
Define and enforce a long-run exploration yield contract #215
Description
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-prefixcells found the bug around 13.7 minutes, then stopped on memory around 33–36 minutes; - the completed
novelty-honeypotInkCheck 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:
- Report retained bytes and counts by major owner: pending frontier, deduplication, ancestry/witness data, semantic indexes, findings, checkpoints, and serialization/finalization reserve.
- Record incremental useful yield per interval: new findings, new authored locations, choice/edge outcomes, meaningful variable transitions/combinations, and other versioned semantic signals.
- Derive and report metrics such as useful yield per retained GiB-minute and per million transitions. Keep raw state throughput separate.
- 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.
- 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.
- Support compact, resumable epochs so a long campaign can preserve its best corpus/frontier without requiring one ever-growing heap.
- 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, andfalse-noveltyfamilies 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
chaoz23 commentedon Aug 14, 2026
Implementation has started from the approved long-run plan, with the benchmark evidence kept separate from shipped behavior.
b2651f5, retained onbenchmark/inkbench-2026-08-bounded-evidence.dist/cli.jsbytes:benchmark/inkbench-2026-08-executable-artifact, SHA-256b54b01b48122151bc2105c99acbab061e1252da7f3768004d4ad037d0b0290eb.76b1dd5.main, synchronizes the public machine contract, rejects mixed-format combinations, and removes evidence-scanning overhead from ordinary non-stream runs. It does not claim to solve this issue.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.
chaoz23 commentedon Aug 20, 2026
Publication handoff update — 2026-08-20 (no merge/release/policy/benchmark restart in this handoff):
main52165ea, at reviewed source head207961c. The exact historical source/executable archives remain unchanged.f20a450) applies only the two finalization corrections reviewed after Add bounded evidence streaming for long runs #220's head: no worker construction after an expired pilot deadline, and activation metadata present before final-snapshot serialization. Fresh local suite: 306 total / 303 passed / 0 failed / 3 expected skips. Hosted CI: 10/10 passed.225a55c) publishes bounded schema-v1 checkpoint readback/listing. It is a prerequisite slice for Compact shared checkpoints before frontier artifacts dominate campaigns #156, not checkpoint v2, and Compact shared checkpoints before frontier artifacts dominate campaigns #156 remains open. Fresh local suite: 309 / 306 / 0 / 3. Hosted CI: 10/10 passed.7ebeb84) publishes the bounded observation-ledger slice. Issue [long-run] Add versioned retained-resource and semantic-yield interval telemetry #216 remains open; checkpoint/pressure/discovery-triggered sampling, complete ownership, throughput, rediscovery, the full stop contract, and any allocation/stopping policy remain deferred. Fresh clean serial suite: 318 / 315 / 0 / 3. Hosted CI: 10/10 passed.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.chaoz23 commentedon Aug 25, 2026
Epic progress map — 2026-08-25
Public
mainis52e1721. 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.