Skip to content

prompt: consolidate #189 into main — one phase-1 record, follow-ups filed - #194

Merged
Jammy2211 merged 1 commit into
mainfrom
claude/consolidate-clipper-189
Aug 16, 2026
Merged

prompt: consolidate #189 into main — one phase-1 record, follow-ups filed#194
Jammy2211 merged 1 commit into
mainfrom
claude/consolidate-clipper-189

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

Two sessions independently wrote a completion record for the prior-support Clipper. #189 was opened first, by the session that actually shipped PyAutoFit#1477; #190 (mine) landed later because I never listed open PRs before starting. This consolidates them so main holds one record, not two.

Closes #189 in favour of this — nothing from it is dropped.

The record is now the union, and #189's half is the better half

complete/2026/08/prior-support-clipper.md keeps its slug (six things already reference it) but takes #189's body, which is materially richer than what I wrote:

  • The design decision — why one relative margin * (upper - lower) is wrong in two separate silent ways, and the three-case table (two-sided finite / unbounded / half-open exclusive) that replaced it.
  • Eight traps measured against a running install, including that the naive margin turns every unbounded prior into NaN — which would have made the feature actively harmful on exactly the models it targets, with a symptom indistinguishable from the bug being fixed, while every bit-identity test still passed.
  • The verification log — bit-identity 10/10 on both searches, core promise 8/8, lane deaths 249 → 0 with 252 clips end-to-end, guards verified by inversion.
  • The process lesson: a first commit shipped an undefined optimize in LBFGS._fit, and the full 1790-test suite passed against it, because nothing in the library suite ever executes an LBFGS fit. A green suite is not coverage.

My "What shipped after this record was first written" section is appended, since #189 predates #1478/#1479/#1480 and therefore lists follow-ups 1 and 2 as open when they are now fixed.

Phase-2 harness traps salvaged into the campaign prompt

These cost the phase-1 session real time and were about to cost the GPU session the same:

  • The .completed marker short-circuits fit() — three successive versions of a resume test "passed" while testing nothing.
  • fit() rebuilds search.paths, so instance-level monkeypatches are silently discarded. Patch at class level.
  • search_internal is deleted on successful completion; capture it as it is written.
  • Seed random and numpy before every fit, or bit-identity comparisons report spurious mismatches.
  • A box containing the optimum never exercises the clipper — phase 1's first efficacy attempt measured 0 clips for exactly this reason.

Plus: arm 3 does not exist yet (phase 1 ships the mask, no momentum reset), and two phase-1 measurements to carry in as priors.

Follow-ups 3 and 4 filed as prompts

  • loggaussian_prior_declares_own_support.mdLogGaussianPrior reports (-inf, inf) for a support of (0, inf). The clipper special-cases it; the prior should declare it. Flagged as needing care: the nested samplers map through the prior in unit-cube coordinates.
  • clipper_in_search_identifier.mdAutonomy: human-required, deliberately. Leaving it out collides result-affecting runs; putting it in orphans every stored multi-start and BFGS output directory. Four options laid out, none pre-selected, and it is best decided before phase 3 so the re-baseline and any re-keying are not entangled.

One correction absorbed

test_nautilus.py::test__single_core_builds_no_pool passes in CI and fails only in local venvs — on 3.12 and 3.13, from two independent sessions. "Not caused by this work" is right; "pre-existing on clean main", the looser phrasing I used in #1479 and #1480's bodies, is wrong. Recorded in the consolidated file rather than by editing merged PRs.

Bookkeeping

lifecycle.py check OK, index --apply run, dashboard.md regenerated (138 → 140 drafts).

🤖 Generated with Claude Code

https://claude.ai/code/session_01FzF2XmKQaqZRWZfZMxvTNR


Generated by Claude Code

…llow-ups filed

Two sessions independently wrote a completion record for the prior-support
Clipper. #189 was opened first, by the session that actually shipped
PyAutoFit#1477; #190 (mine) landed later because I never listed open PRs before
starting. This consolidates them so main holds one record, not two.

complete/2026/08/prior-support-clipper.md is now the union. The detailed body
comes from #189 and is materially richer than what I wrote: the bound-kind
design decision (why one relative margin is wrong in two silent ways), eight
traps measured against a running install, the verification log (bit-identity
10/10, core promise 8/8, guards verified by inversion), and the process lesson
-- a first commit shipped an undefined `optimize` in LBFGS._fit and the full
1790-test suite passed against it, because nothing in the suite executes an
LBFGS fit. My "what shipped after" section is appended, since #189 predates
#1478/#1479/#1480 and so records follow-ups 1 and 2 as open when they are now
fixed.

#189's phase-2 harness traps salvaged into the campaign prompt -- the
.completed short-circuit, fit() rebuilding search.paths so instance-level
patches are discarded, search_internal being deleted on success, seeding both
random AND numpy, and a box containing the optimum never exercising the
clipper. Also that arm 3 does not exist yet (phase 1 ships the mask, no reset)
and two phase-1 measurements to carry in as priors.

Follow-ups 3 and 4 filed as prompts rather than left in a record:
loggaussian_prior_declares_own_support.md and clipper_in_search_identifier.md.
The second is Autonomy: human-required -- both answers orphan or collide
someone's stored results, and it is best decided BEFORE phase 3 so the
re-baseline and any re-keying are not entangled.

One correction absorbed from #189: test_nautilus single_core_builds_no_pool
PASSES in CI and fails only in local venvs (both 3.12 and 3.13, two independent
sessions). "Not caused by this work" is right; "pre-existing on clean main" --
the looser phrasing used in #1479 and #1480's bodies -- is wrong. Recorded.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FzF2XmKQaqZRWZfZMxvTNR
@Jammy2211
Jammy2211 merged commit 3c6fc0a into main Aug 16, 2026
2 checks passed
@Jammy2211
Jammy2211 deleted the claude/consolidate-clipper-189 branch August 17, 2026 20:59
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.

2 participants