Skip to content

L1+L2 staged landing: 5 narrow slices (P0-P4)#21

Merged
zaler23 merged 6 commits into
mainfrom
mzz/research-run2-landing
Jun 30, 2026
Merged

L1+L2 staged landing: 5 narrow slices (P0-P4)#21
zaler23 merged 6 commits into
mainfrom
mzz/research-run2-landing

Conversation

@zaler23

@zaler23 zaler23 commented Jun 30, 2026

Copy link
Copy Markdown
Owner

Summary

L1+L2 staged landing: 5 minimal high-value fixes distilled from converged exploration candidates and issues surfaced by real runs. Each slice is an independent commit with independent verification.

Slices (P0-P4)

  • P0 5d9fcef — Replace soft-retain with hard exclusion for duplicate offspring. Removes placeholder retention of exact semantic-duplicate candidates, matching the harvester path. Net production reduction.
  • P1 34c1878 — Write a post_seeding checkpoint after seeding, before the first verification LLM call. Reuses the existing LiveNexusStore; a verification failure can resume from the seeded state without losing seeds.
  • P2 994df37 — Terminal-checkpoint resume short-circuit. When stop_reason is a terminal state and max_rounds is not extended, idempotently return the persisted run-result.json instead of spinning an empty evaluation round; fail-closed if it is missing.
  • P3 24dd653 — Display guard for unbound answers (answer-first invariant). When the model's final answer is bound to no candidate, forbid single-candidate fallback and fall back to an honest unbound display (candidate_id=""). The candidate portfolio is unaffected.
  • P4 3dfb30d — Health-probe reuse (launcher-only, engine unchanged). A configured upstream health URL auto-enables probing; an empty URL never blocks; explicit --require-upstream-health without a URL still fails fast.

Verification

  • full pytest: 665 passed, 1 skipped
  • doctor: 49/49 checks passed
  • per slice: git diff --check clean, new tests run independently

Invariants

  • Canonical family spine: untouched
  • Soft ordering signal: structurally untouched, no retuning
  • answer-first: P3 keeps unbound answers honest; final artifact remains correctness_verdict: external_validation_required, project_correctness_claim: not_claimed

🤖 Generated with Claude Code

zaler23 and others added 6 commits June 30, 2026 23:04
dedupe_offspring_against_population now drops semantic-duplicate offspring from the live population (parity with harvester hard-reject) instead of tag-and-append. Budget action soft_retain -> hard_exclude. Net -1 prod line.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…LM calls

Move observer creation ahead of the post-seed verification/context/verify LLM calls in both text and project runs, emit one phase=post_seeding round=0 checkpoint right after seeding. A failure between seeding and the first round (research-run empty-resume root cause) now leaves a resumable checkpoint. Reuses existing LiveNexusStore -> CheckpointStore.save_state path; no new persistence abstraction. Net +4 prod lines.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… round

When resuming a checkpoint whose budget.stop_reason is an external-review terminal (candidate_ready / diminishing_returns) and the caller does not extend max_rounds, return the already-persisted run-result.json directly instead of running another full evaluation round (research-run round9 empty-spin). Idempotent return preserves answer-first state (no re-synthesis, no re-verification). max_rounds > checkpoint.max_rounds still resumes normally. Net +9 prod lines.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
When synthesis produces a free-text final answer not bound to any candidate (answer_text present, candidate_id empty), build_final_projection's single-candidate fallback would still force-select a population candidate and present it as Best current direction -- a false binding that violates answer-first. Guard the fallback so unbound answers fall through to the honest unbound projection (candidate_id empty, answer_unbound_to_candidate_artifact, verification_status unverified). Candidate portfolio is unaffected -- already rendered unconditionally via _candidate_table_section. Net +1 prod line.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The launcher previously required an explicit --require-upstream-health flag, so operators passed two flags every launch. Now a configured upstream health URL (--upstream-health-url or COGEV_UPSTREAM_HEALTH_URL) auto-enables gating; an empty URL never blocks the run (no default-on upstream_health_url_missing exit 75). Explicit --require-upstream-health without a URL still fails fast (exit 2). Launcher-only; engine untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Render the final-answer candidate table as an uncertainty-preserving
portfolio grouped by metadata.nextgen.canonical_mechanism_family_id
(read-only). Missing canonical falls back to a single "unrecorded" group,
never candidate.id (which would degrade to one group per candidate, since
round.py's candidate.id fallback only holds after ensure_nextgen_identity,
which a renderer must not call).

Each candidate shows user-facing verification status via
user_facing_verification_status (never raw local verified) and a bounded
uncertainty cell (first missing_part / uncertainty_note). Pure display reorg
in runtime_services.py; no registry/framework, no metadata write-back,
candidates_markdown flat output unchanged. Runtime net +35 lines.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@zaler23 zaler23 merged commit 36af22f into main Jun 30, 2026
5 checks passed
@zaler23 zaler23 deleted the mzz/research-run2-landing branch June 30, 2026 16:34
@zaler23 zaler23 changed the title L1+L2 staged landing: 5 narrow slices from research-run2 (P0-P4) L1+L2 staged landing: 5 narrow slices (P0-P4) Jun 30, 2026
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