repos_sync: generate & drift-check public front-door organ tables - #70
Merged
Conversation
Extend repos_sync to keep the public front-door organ listings in step with repos.yaml, so a new organ can never silently drop out (as Gut did). Adds a public_role field + front_door flag (includes Nerves/PyAutoConf on the public front door without making it a category:organ), generates the organ table into the .github and PyAutoScientist READMEs between repos_sync:organs markers, and presence-checks the pyautolabs.github.io blurb. Wired into --write / --check; targets soft-skip when not checked out. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Jammy2211
pushed a commit
that referenced
this pull request
Jul 13, 2026
Jammy2211
pushed a commit
that referenced
this pull request
Jul 13, 2026
Jammy2211
pushed a commit
that referenced
this pull request
Jul 16, 2026
Jammy2211
pushed a commit
that referenced
this pull request
Jul 16, 2026
Jammy2211
pushed a commit
that referenced
this pull request
Jul 16, 2026
…el claim with slam-resume-profiling (#70), different subtrees
Jammy2211
pushed a commit
that referenced
this pull request
Jul 17, 2026
…ed); umbrella status updated
Jammy2211
pushed a commit
that referenced
this pull request
Jul 17, 2026
…l claim w/ #70 user-approved)
Jammy2211
pushed a commit
that referenced
this pull request
Jul 17, 2026
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Jammy2211
pushed a commit
that referenced
this pull request
Aug 9, 2026
Follows the PyAutoArray pass in the previous commit. Same method: read each
prompt's acceptance criteria against PyAutoFit main (3b960609), never trust the
prompt's own text about its state. Covers draft/{bug,feature,refactor,research}/
autofit, maintenance+refactor/pyautofit, bug/priors and research/graphical_ep.
RECORDED AS COMPLETE
latent_samples_none_on_resumed_fit.md shipped as PyAutoFit#1418, merged
2026-07-25 — the SAME DAY the prompt records the finding from the full health
sweep. Option (b) of its own Task section is what landed: latent_samples_from
now opens with an explicit samples-is-None guard raising SamplesException, and
the message names the cause and both remedies. Its open sub-question is
answered by the guard being unconditional rather than test-mode-gated.
This is the class of drift the Mind cannot detect by itself. There is NO
completion record for #1418 anywhere in complete/, so no amount of
cross-referencing draft prompts against the ledger would surface it. Worth
knowing, because both PyAutoArray hits last commit WERE provable from the Mind
alone — the cheap pass is real but it is not sufficient.
test_mode_representative_outputs_size_realistic.md is an umbrella whose own
status block records phases 1 and 2 COMPLETE and phases 3 and 4 ABSORBED, then
states "EPIC CLOSES when #70 ships its recipe leg". autolens_profiling#70 is
closed, state_reason completed, closed 2026-07-17 — the same day that status
block was written. The condition was met within hours of the note and nothing
advanced the file. This one needed neither a clone nor a code read, just one
issue-state lookup.
SHARPENED — a fix that reads like the prompt's but is not
test_mode_bypass_ordered_assertion_ties.md still reproduces, and main now looks
like it does not. The bypass path DOES now catch FitException and continue with
the sentinel, which reads exactly like this prompt's suggested fix. But the
catch wraps only the likelihood call: model.instance_from_vector sits on the
line BEFORE the try, and that is where check_assertions raises FitException on
an ordering tie at the prior medians. ignore_assertions defaults False and the
bypass never passes it, so the assertion escapes the guard entirely.
Annotated in place with that trace, because a future session reading main would
very plausibly mark this shipped. The upside is that the fix is now a one-liner
rather than the catch-and-perturb design the prompt sketches — either move the
instantiation inside the existing try, or pass ignore_assertions at the bypass.
Recorded both with the semantic difference between them stated.
HALF SHIPPED
11_transformed_message_semantics_doc.md — the EP review's Phase 2 (PyAutoFit
1334) explicitly carried "incl. bug/priors/11 doc half", so which half mattered.
Edge 1, the asymmetric reversal convention, is DONE: _transform and
_inverse_transform both carry direction-naming docstrings calling the asymmetry
deliberate and load-bearing, and graphical/README.md points at it. Edge 2 is
NOT: LinearShiftTransform still has no docstring and the reciprocal call sits
bare. Difficulty large drops to small, scope narrows to edge 2 only.
remove_eden_packaging_tooling.md — autofit/tools/edenise is gone and a repo-wide
grep returns zero hits, which settles the prompt's own guardrail check. Root
eden.yaml remains. Also flagged that its follow-up names PyAutoConf, since
renamed PyAutoNerves. Difficulty medium drops to small.
UNBLOCKED, NOT SHIPPED
Prompts 12, 13 and 14 all sequence behind Phases 1-2 of the EP framework review
("do not open the design issue until Phases 1-2 land"). That review completed
2026-07-08, all 8 phases — Phase 1 complete with F1-F9 on PyAutoFit#1332, Phase
2 shipped as #1334. The design input they were waiting on exists. Annotated all
three as ready to plan. ep_analytic_updates WP1 says "land after PyAutoFit#1334"
— merged; annotated to rebase rather than wait. Same shape as the
canonical_key_todo_sweep case: a closed prerequisite means newly unblocked, not
finished.
VERIFIED GENUINELY OPEN
cli_noise_pyautofit_batch (items 1, 3 and 4 all still present verbatim — no
handler.close, evidence() at nautilus search.py:535, disp/iprint still passed),
plot_functions_discard_kwargs (all five still take kwargs and reference it
nowhere but the def lines), search_seed_reproducibility (no seed on
AbstractSearch; the covariance test still monkeypatches dynesty's
get_random_generator), messages_xp_stack_jax_trace (10 xp.array-of-list sites
across normal/truncated_normal/beta/gamma), split_fitness_batch_size, priors 09
plus the 12/13/14 anchors (composed_transform reversal, np.reciprocal at
transform.py:175, Prior.__getattr__ delegation — line numbers drifted, structures
intact), ep_hierarchical_scale_collapse (#1405 open, accurately tracked), the two
slope_hierarchy residues and ep_lbfgs_jax (external checkouts, laptop-only), and
the two graphical_ep scoping umbrellas.
lifecycle check / orphans / index --check all OK; pytest tests/ 118 passed.
draft/ 147 to 145.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
Jammy2211
pushed a commit
that referenced
this pull request
Aug 9, 2026
…he gap Two sweeps in, the obvious question is why the existing reconcile pass had not already caught this. Answer: it flags too much and misses the big ones. MEASURED, not asserted. Ran `pyauto-brain intake reconcile` against the pre-sweep tree (f25e154) so its ranking could be scored against findings later confirmed by reading upstream source: 96 suspects of 148 scanned -- 65% flag rate (52 high / 20 medium / 24 low) of the 5 confirmed findings it flagged 2: the test-mode umbrella (high) and the latent-samples bug (low, i.e. buried) it MISSED the three largest -- oversampling_kxs_coupling (a whole shipped five-phase series), rectangular_adapt_constant_split_guard (PyAutoArray#417), nufft_simulator_chunking (PyAutoArray#330) So ~40% recall, and the one true positive at high sits among 51 other highs. This is a precision problem, not a missing-tool problem: the current matchers fire on prompts that merely reference each other, which is most of them. The read-only contract is right and should stay -- retiring a prompt is human. Filed draft/feature/pyautomind/draft_staleness_detection_signals.md with the three signals that actually found things, each grounded in a specific finding rather than speculated: 1. Machine-readable gates. The test-mode umbrella stated its own exit condition in prose ("EPIC CLOSES when #70") and #70 closed completed the same day that line was written. Proposes Closes-when: / Blocked-by: header keys, since the two readings are opposite -- gate closed means DONE, blocker closed means newly UNBLOCKED -- which is exactly the ambiguity that keeps `issues --drafts` advisory today. This sweep hand-annotated four unblocked cases (priors 12/13/14, ep_analytic_updates WP1); the key would have found them. 2. Prompt names an identifier that now exists upstream. The k x s prompt named _validate_convolve_over_sample_size, which is on main with the prompt's own phrase in its docstring; the nufft prompt asked for a chunk_size kwarg using lax.scan and got exactly that under its suggested name. Extract backticked identifiers, grep the target repo, rank on hits the prompt says should not exist. A treeless clone makes this cheap. 3. A completion record already names the deliverable. interferometer-jax-jit.md says outright that chunk_size is a TransformerNUFFT argument SimulatorInterferometer never sets -- that one sentence resolves the nufft prompt. Search record BODIES for the prompt's identifiers, not record slugs for the prompt's slug: slug similarity was measured here and is useless, scoring kxs_coupling against kxs-core at 0.25 Jaccard. Records the hard limit too, because it bounds what any such tool can promise: one of the five findings had NO signal in PyAutoMind at all. #1418 fixed the latent bug the same day it was filed and left no completion record anywhere, so the upstream read stays load-bearing and the Mind-only passes are a pre-filter. The deeper fix is that work shipping without a Mind record is the root cause; flagged as a separate question for the ship skills. And records the trap: test_mode_bypass_ordered_assertion_ties reads as shipped and is not, so an identifier-presence matcher would confidently mis-rank it. Acceptance criteria therefore include that it is NOT reported shipped, using f25e154 as the labelled set. Also regenerates dashboard.md, stale since the four prompts recorded complete in the previous two commits (148 to 144, still 6 hygiene flags). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
Jammy2211
pushed a commit
that referenced
this pull request
Aug 9, 2026
…part Leg 1 of draft/feature/pyautomind/draft_staleness_detection_signals.md, filed from the draft/ sweep. Five prompts in that sweep had a stated gate that had since closed, and nobody noticed -- one of them (the test-mode umbrella) had its exit condition met the SAME DAY the status line was written. The blocker was never detection, it was ambiguity. A draft citing an issue can mean two opposite things: "epic closes when #70 ships its recipe leg" (closed => this prompt is DONE) or "BLOCKED until PyAutoArray#431 merges" (closed => this prompt is READY). Prose cannot be graded, so `issues --drafts` had to report both as one question, "shipped, or newly unblocked?", and an advisory that cannot say which is not actionable. Two optional header keys let the author say which they mean: Closes-when: autolens_profiling#70 Blocked-by: PyAutoArray#431, PyAutoGalaxy#486 `issues --drafts` now reports GATE MET (verify, then retire) and UNBLOCKED (ready to start) as separate bands, and prompts that declare a gate drop out of the ambiguous list -- so that list becomes the genuinely-undeclared remainder rather than everything. Design decisions worth recording: Aggregated PER PROMPT, not per reference. A prompt blocked on three PRs is unblocked when the LAST one lands; reporting each ref separately would have claimed "ready to start" three times while it was still blocked. Partly-closed gates get their own weaker band, which is the real state of ep_analytic_updates -- its WP1 gate merged, its WP3/WP4 gates are open. Repo#123 shorthand, not just URLs. Measured on the real backlog: a URL-only extractor found 2 refs, the shorthand form found 8. Prompts do not write URLs. Fenced blocks are documentation. The prompt that PROPOSED these keys shows them in a ```markdown example; parsing that as a declaration would have invented a finding out of the proposal itself. Caught while backfilling, and covered by a test that fails without the fence check. Still advisory, never a gate on the exit code -- retiring a prompt writes to complete/ and stays human, the same contract intake reconcile keeps. Backfilled the five prompts whose gates this sweep confirmed, giving a live ready-to-start list: sampler_cli_output_workspace_sweep (PyAutoFit#1436), preloads_advanced_workspace_guide (PyAutoLens#565), unpark_imaging_scaling_relation_slam (PyAutoArray#431), oversampled_psf_dataset_adoption (three k x s merges), and ep_analytic_updates (partial). Verified against the states this session confirmed via the API: 4 fully unblocked, 1 partial, 0 falsely flagged. 9 new tests, each proving the leg fails without the code -- including the two opposite readings, the per-prompt aggregation, the fenced-example case, and that a declared gate is not also asked as an ambiguous advisory. 118 -> 127 passing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E3MuurHXi3xo9TLRpMLJA6
Jammy2211
added a commit
that referenced
this pull request
Aug 9, 2026
…:`) (#168) Leg 1 of draft/feature/pyautomind/draft_staleness_detection_signals.md. The problem was ambiguity, not detection. A draft citing an issue can mean two opposite things -- "epic closes when #70 ships" (closed => DONE) or "blocked until #431 merges" (closed => READY) -- so `issues --drafts` could only ask one unanswerable question, and an advisory that cannot say which is not actionable. Five prompts in the sweep had a stated gate that had since closed; one had its exit condition met the same day the status line was written. Two optional header keys let the author say which they mean, and the report now splits into GATE MET (verify, then retire) and UNBLOCKED (ready to start). Prompts declaring a gate drop out of the ambiguous list, which becomes the genuinely-undeclared remainder rather than everything. Aggregated per prompt, not per reference: a prompt blocked on three PRs is unblocked when the LAST lands, so per-ref reporting would have claimed "ready to start" three times while still blocked. Partly-closed gates get their own band. Repo#123 shorthand as well as URLs -- measured, a URL-only extractor found 2 refs across the backlog where the shorthand form found 8. Fenced blocks are documentation: the prompt that PROPOSED these keys shows them in a markdown example, and parsing that would have invented a finding out of the proposal itself. Backfilled five prompts whose gates the sweep confirmed, giving a live ready-to-start list: 4 fully unblocked, 1 partial, 0 falsely flagged. Also corrects an acceptance criterion in the source prompt that was wrong when written -- it demanded all five findings from one ranker while its own Hard limit section said one left no Mind-side signal at all. The five need three different tools, now recorded as a table. 9 new tests, each proving the leg fails without the code. 118 -> 127 passing.
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.
Extends
repos_sync.pyto generate and drift-check the public front-door organ tables (org profile + PyAutoScientist READMEs) and presence-check the hub blurb, so a new organ inrepos.yamlcan never silently drop out of the front door (as Gut did).repos.yaml:public_role(curated public copy) +front_door: trueon PyAutoConf/Nerves (public front door = 7; internal AGENTS.md maps stay the 6 category:organ repos).repos_sync.py:public_organs/organ_public_table,check_public_tables/check_hub_blurb, wired into--write/--check; targets soft-skip when not checked out.Companion marker PRs: PyAutoLabs/.github, PyAutoLabs/PyAutoScientist.
Verified: new checks OK; a missing organ fails
--checkin all three docs; absent targets soft-skip. No library API / user-facing script change. Ends at PR-open (supervised --auto; Heart not GREEN). Part of #69.🤖 Generated with Claude Code