Skip to content

feat: profiling-summary@3 catalogue builder from the mirrored tree (#442 PR 3) - #448

Merged
Jammy2211 merged 6 commits into
mainfrom
feature/likelihood-lifecycle-p0-profiling-builder
Oct 24, 2026
Merged

Jammy2211 merged 6 commits into
mainfrom
feature/likelihood-lifecycle-p0-profiling-builder

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

Summary

PR 3 of 6 for #442 (likelihood-lifecycle phase 0B): the catalogue builder now emits profiling-summary@3 (contract: PyAutoPulse#70) straight from the mirrored tree that #447 created.

  • dashboard/catalogue.json is the v3 lifecycle catalogue: 445 records (126 current, 319 superseded, each with superseded_by), archive_record_count 99, 246 planned_cells (116 optimal, 130 secondary). Rules live in the new scripts/misc/tooling/catalogue_lifecycle.py.
  • Status rule (§3.6): current = the canonical cell file on hpc_ral_cpu/hpc_a100 for one of the 29 registry cells or a reference; every other record on that key is superseded. Exactly one current per key. R7: no local_* row is current. Records on a key with no current row (182 on 108 keys: local-only, not a planned cell such as sdp81) are counted in coverage.excluded, not emitted.
  • R3: provisional Optimal rows are class: secondary with provisional_optimal: true in limitations (no decision_id exists before phase 3).
  • Size rule (human, 2026-10-23): standard Delaunay 1250, rectangular 35² = 1225. No committed row is at either size yet (all 1500 or 39² = 1521), so 112 of the 126 current cells use the nearest-size row with a size_fallback note; phase 2 measures the standard sizes.
  • measured_at (human ruling 2026-10-24): 381 records with no timestamp take the UTC date their file was first committed (2026-07-11 → 2026-09-27; an upper bound, noted in limitations). The dates are kept in the committed file catalogue/measured_at_first_commit.json, written by build_catalogue.py --refresh-commit-dates. The builder never calls git, so CI's shallow checkout works. A row with no timestamp and no entry fails --check.
  • The setup browser now reads the v2 catalogue from dashboard/catalogue/setups.json and its shards, routed from the new paths, so setup ids were remapped in registry.json and wiki_bindings.json. The regenerated setup-wiki pages were renamed. No measurement artefact was moved or edited.
  • Pulse: Pulse's lens entry pins profiling-summary@2 on dashboard/catalogue.json. Merge the companion PyAutoPulse re-pin PR immediately after this one; until it merges, the Pulse lens receipt is invalid.

Deferred to PR 3b (human ruling; Mind draft likelihood_lifecycle_p0_profiling_3b_legacy_layout.md): build_dashboard.py and build_readme.py still use the results_layout.py legacy view, because their trend series are keyed by pre-move names. About 30 scripts still write by legacy name outside resolve_output_paths. Every other caller is off the shim.

Scripts Changed

  • scripts/misc/tooling/build_catalogue.py — v3 emitter, --refresh-commit-dates, --validate-with the Pulse v3 and v2 validators
  • scripts/misc/tooling/catalogue_lifecycle.py — new: class/status rules, R3, R7, size rule
  • scripts/misc/tooling/check_wiki.py, build_setup_wiki.py, build_dashboard.py, apply_migration_map.py, results_layout.py — read the mirrored tree; only the dashboard and README builders still go through the shim
  • scripts/misc/test/test_build_catalogue.py — v3 shape, status rule, R3, R7, size rule, commit-date file
  • scripts/misc/test/test_results_mirror_scripts.py — mirror test in both directions, with asserted exclusions
  • 10 other tests under scripts/misc/test/ — moved off the legacy view and given the remapped ids
  • catalogue/registry.json, catalogue/wiki_bindings.json, catalogue/measured_at_first_commit.json — remapped ids and commit dates
  • dashboard/ — regenerated catalogues, setup page and setup wiki

Test Plan

  • ruff 0.17.2 check + format --check
  • build_catalogue --check --validate-with ../PyAutoPulse (v3 + v2 validators ok), plus every other lint --check step
  • pytest scripts/misc/test/: 1515 passed, 6 skipped
  • browser setup-page test
  • lychee + smoke (CI)

Refs #442

🤖 Generated with Claude Code

https://claude.ai/code/session_01SeDHwsR2dnwCk8Btfhej2L

Jammy2211 and others added 6 commits October 24, 2026 11:12
…PR 3)

build_catalogue.py now writes dashboard/catalogue.json as the v3 lifecycle
catalogue: records keyed by (likelihood, instrument, setup_id, host_class,
model_variant, measurement) read natively from
results/<dataset_type>/<variant>/<instrument>/<setup_id>/<host_class>/...,
with class/status by the phase-0 day-zero rule (catalogue_lifecycle.py):
one current per key from the canonical cell on a reference host for a
planned baseline cell; R7 local rows never current; the human size rule
(Delaunay 1250, rectangular 1225) with size_fallback labels; R3 provisional
Optimal rows as class secondary + provisional_optimal; planned_cells with
class; figures[] from fit.png; archive/ counted only.

The setup browser and setup wiki keep the companion v2 catalogue, now at
dashboard/catalogue/setups.json, routed from the mirrored path instead of
the legacy identity (ids remapped in registry.json and wiki_bindings.json).
--validate-with runs Pulse v3 on catalogue.json and v2 on the companion.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SeDHwsR2dnwCk8Btfhej2L
 PR 3)

Generated by build_dashboard.py with the committed stamp and revision:
the v3 lifecycle catalogue.json, the companion v2 index at
catalogue/setups.json with re-keyed shards, and the setup wiki pages whose
names hash the re-keyed v2 setup ids. No measurement artefact changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SeDHwsR2dnwCk8Btfhej2L
…not the legacy view (#442 PR 3)

Tests that re-judge committed rows name their mirrored (or archive/misc)
paths directly instead of resolving legacy names through results_layout;
glob-by-legacy-name scans become native scans (warm-up records, witness
rows, comparison.json, logdet trace rows). check_wiki tells campaign pages
from ledgers by the campaign header instead of the pre-move location. The
shim's own tests are dropped; writer placement is tested against
build_migration_map.destination directly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SeDHwsR2dnwCk8Btfhej2L
…ions (#442 PR 3)

test_results_mirror_scripts.py now fails a scripts/<dataset_type>/<variant>/
with no results unless it is a documented exclusion (shared pixelized script
folders, the mge_mass model variant, three not-yet-measured variants), and
each exclusion is asserted so the lists cannot go stale. results/lens/
components mirror scripts/lens/ both ways; results/misc/ groups name a
scripts/misc/ group or a documented non-script group (logs,
streaming_scaling).

results_layout.py and results/README.md now say only build_dashboard.py and
build_readme.py still read through the legacy view.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SeDHwsR2dnwCk8Btfhej2L
…s; re-pin draft campaign (#442 PR 3)

The draft setup-baseline campaign checks its setups against the registry
cells, so the four instrument-independent cells keep instrument null and
the v3 builder keys them by the folder their scripts write (simple / hst).
baseline/campaign.json re-pins the registry hash (new override prefixes and
re-keyed recommendation ids), as PR 2 did. Companion catalogue, setup page
and setup wiki regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SeDHwsR2dnwCk8Btfhej2L
…the release (#442 PR 3)

Human ruling: measured_at for a row with no recorded timestamp is the UTC
date its file was first committed to git (an upper bound on the
measurement date); the measured_at_derived limitation says so.

The builder never calls git (CI checkouts are shallow). The dates live in
catalogue/measured_at_first_commit.json (265 files, sorted), written by
build_catalogue.py --refresh-commit-dates: git log --diff-filter=A at the
file's pre-move path from migration_day_zero.json (git log --follow
mis-tracked 14 of them into older similar files), else at its own path.
An undated row whose file has no entry makes build/--check fail with the
refresh instruction. Tests cover the file read, the missing-entry failure
and timestamped rows; tooling and catalogue READMEs document the refresh.
dashboard/catalogue.json regenerated (same 445 records, 381 re-dated).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SeDHwsR2dnwCk8Btfhej2L
@Jammy2211
Jammy2211 merged commit 81183fd into main Oct 24, 2026
1 check passed
@Jammy2211
Jammy2211 deleted the feature/likelihood-lifecycle-p0-profiling-builder branch October 24, 2026 10: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.

1 participant