L1+L2 staged landing: 5 narrow slices (P0-P4)#21
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)
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.34c1878— Write apost_seedingcheckpoint after seeding, before the first verification LLM call. Reuses the existingLiveNexusStore; a verification failure can resume from the seeded state without losing seeds.994df37— Terminal-checkpoint resume short-circuit. Whenstop_reasonis a terminal state andmax_roundsis not extended, idempotently return the persistedrun-result.jsoninstead of spinning an empty evaluation round; fail-closed if it is missing.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.3dfb30d— Health-probe reuse (launcher-only, engine unchanged). A configured upstream health URL auto-enables probing; an empty URL never blocks; explicit--require-upstream-healthwithout a URL still fails fast.Verification
git diff --checkclean, new tests run independentlyInvariants
correctness_verdict: external_validation_required,project_correctness_claim: not_claimed🤖 Generated with Claude Code