Skip to content

feat(catalogue): class records from the Pulse designations; retire provisional_designations.json - #498

Merged
Jammy2211 merged 1 commit into
mainfrom
claude/awesome-rubin-ejb234
Oct 31, 2026
Merged

Jammy2211 merged 1 commit into
mainfrom
claude/awesome-rubin-ejb234

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

Closes #497. Likelihood lifecycle phase 3, day-zero write 1/4: the producer side of the 39 designations recorded in PyAutoLabs/PyAutoPulse#84.

Heart RED override: invoked by the human 2026-10-31 for this task (development only). Tier: judge, so merge is by human /prm only.

What changes

  • catalogue/pulse_designations.json mirrors PyAutoPulse decisions.yaml kind: designation (39 rows). It is written by build_catalogue.py --sync-designations ../PyAutoPulse. CI's build_catalogue.py --check --validate-with ../PyAutoPulse now also fails if the mirror drifts from Pulse, and it resolves every decision_id through pulse.ingest.unresolved_decisions.
  • Classes (catalogue_lifecycle.record_class). Hardware classes map as hpc_ral_cpu = cpu_many_core and hpc_a100 = gpu_a100.
    • The designated optimal setup on its likelihood × standard regime × hardware class → class: optimal + decision_id.
    • A named secondary → class: secondary + decision_id.
    • Both apply to current and superseded rows.
    • Human rulings 2026-10-31:
      • Any other setup on a designated key → experimental.
      • local_* hosts and source_pixels_<n> regimes inherit the role as secondary, with an undesignated_regime_or_host limitation and no decision_id. Optimal is only ever decision-backed.
  • catalogue/designation_holds.json keeps the held datacube/delaunay hpc_a100 group provisional (secondary + provisional_optimal: true; 24 records). It also holds the planning metadata kept from the retired file: GPU hosts, regime-only routes, and the R1(a) dense-NUFFT-at-sma rule.
  • catalogue/provisional_designations.json is deleted. planned_setups, planned_cells and coverage_matrix.py now derive from the designations plus the holds: 272 → 232 planned cells (148 optimal, 84 secondary), all current.
  • Frozen phase-2 campaign tests: each manifest measured every designated cell. Each extra cell is a setup its designation dropped, which is asserted.

Result (dashboard/catalogue.json, 1,548 records)

class current superseded
optimal (with decision_id) 283 253
secondary with decision_id 177 191
secondary without (inherited / held) 37 408
experimental 115 84

All 39 decision_ids are cited, every designation has a current optimal record, and all 230 evidence ids are present.

Checks run locally

  • build_catalogue.py --check --validate-with ../PyAutoPulse: current. The mirror equals Pulse, and Pulse classify returns ok with every decision_id resolved.
  • coverage_matrix.py --check, build_dashboard.py --check, build_readme.py --check, check_wiki.py --check, list_timing_assertions.py --check, wall/check_submits.py --check: OK.
  • ruff check and ruff format --check: clean.
  • pytest scripts/misc/*/test: no new failures against main. The sandbox lacks jax, scipy and the PyAuto libraries, so the modules needing them were not run here; CI runs them.

Not in this PR (tasks 2–4)

  • The day_zero stamp and Pulse snapshot.
  • The wiki/campaigns/<dataset_type>/<variant>/day_zero.md rule pages.
  • The setup-baseline close.
  • The runtime_estimates export.

Generated by Claude Code

…ovisional_designations.json

Likelihood lifecycle phase 3, day-zero write 1/4 (#497). The 39 day-zero designations
recorded in PyAutoPulse (PyAutoLabs/PyAutoPulse#84) now declare the catalogue's classes:

- catalogue/pulse_designations.json mirrors PyAutoPulse decisions.yaml kind: designation,
  written by build_catalogue.py --sync-designations ../PyAutoPulse. --check --validate-with
  ../PyAutoPulse fails when the mirror drifts and resolves every decision_id through
  pulse.ingest.unresolved_decisions.
- The designated optimal setup on its likelihood x standard regime x hardware class
  (hpc_ral_cpu = cpu_many_core, hpc_a100 = gpu_a100) is class optimal + decision_id; a named
  secondary is secondary + decision_id (current and superseded rows alike). Human rulings
  2026-10-31: any other setup on a designated key is experimental; local_* hosts and
  source_pixels_<n> regimes inherit the role as secondary with an
  undesignated_regime_or_host limitation and no decision_id.
- catalogue/designation_holds.json keeps the held datacube/delaunay hpc_a100 group
  provisional (secondary + provisional_optimal: true) and the planning metadata kept from the
  retired file (GPU hosts, regime-only routes, the instrument-scoped dense NUFFT rule).
- catalogue/provisional_designations.json is deleted; planned_setups, planned_cells and
  coverage_matrix.py derive from the designations + holds (232 planned cells, all current).
- Frozen phase-2 campaign tests now assert each manifest measured every designated cell and
  that every extra cell is a setup its designation did not name.

Result: 536 optimal records (283 current) across 39 decision_ids; 368 named secondary with a
decision_id; 199 experimental; 445 secondary without one (inherited or held).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016nhQ8Q82zpcg2VRk8i7QvL
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.

feat(catalogue): class records from the Pulse designations; retire provisional_designations.json

2 participants