Skip to content

feat(registry): designs travel with S3 sync + Target Designs tutorial (stacked on #81) - #82

Merged
GondekNP merged 1 commit into
feat/registry-provenance-phase3from
feat/registry-provenance-followup
Aug 4, 2026
Merged

feat(registry): designs travel with S3 sync + Target Designs tutorial (stacked on #81)#82
GondekNP merged 1 commit into
feat/registry-provenance-phase3from
feat/registry-provenance-followup

Conversation

@GondekNP

@GondekNP GondekNP commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Stacked on #81 (Phase 3), which is stacked on #80 (Phase 2). Base is feat/registry-provenance-phase3. Two small follow-ups you asked for.

1. Target designs travel with the registry

Previously a TargetDesign was persisted locally but dropped by push_to_s3/pull_from_s3 — a standing, shareable expectation that didn't survive a registry round-trip. Now:

  • target_designs / target_requirements are in REGISTRY_SYNC_TABLES (parent-first, so restore's reversed-delete and forward-insert both respect the FK).
  • target_requirements gains PRIMARY KEY (design_name, attributes) and register_design writes canonical (sorted-key) JSON, so merge-mode pull dedups requirements via INSERT OR IGNORE and re-registering can't create redundant cells.

Verified against the real bucket (test_design_survives_push_pull): a design plus its attributed run is pushed, pulled into a fresh registry via restore, and check_design recomputes correctly (still reports the unmet cell). Objects cleaned up via the stdlib SigV4 delete.

2. Focused tutorial: Target Designs & Coverage

New tutorials/target-designs.qmd in the Project Structure nav group, right after Project Organization. It:

  • runs two tiny real sims, tags them with scenario/treatment attributes;
  • declares a TargetDesign and shows a complete coverage report;
  • marks one run bad → the cell becomes an unmet-but-surfaced gap (non_active_matches), demonstrating currency;
  • describes design persistence via push_to_s3/pull_from_s3.

Freeze regenerated with the real jar (both the complete and incomplete states are captured).

Tests / checks

Unit: requirement dedup, canonical-JSON storage, sync-table membership+order. Integration: the GCS push/pull roundtrip above. Full suite 1236 passed; 0 net-new ruff/mypy. Version → 0.0.9.27.

Merge order

#80#81 → this. Each base auto-retargets as the one below merges (or I can repoint).

🤖 Generated with Claude Code

Follow-up on Phase 3 (stacked on #81).

Sync: target_designs / target_requirements are added to REGISTRY_SYNC_TABLES
(parent-first), so a registered TargetDesign is included in push_to_s3 /
pull_from_s3. target_requirements gains PRIMARY KEY (design_name, attributes)
and register_design writes canonical (sorted-key) JSON, so merge-mode pull
dedups requirements via INSERT OR IGNORE and re-registering a design can't
create redundant cells. Verified against a real bucket: a design (and its
attributed runs) survives push -> restore and check_design recomputes locally.

Docs: new focused tutorial tutorials/target-designs.qmd in the Project Structure
group — runs two tiny sims, tags attributes, declares a TargetDesign, shows a
complete report, then marks a run bad to show the cell become an unmet-but-
surfaced gap. Freeze regenerated with the real jar.

Full suite 1236 passed; 0 net-new ruff/mypy. Version 0.0.9.27.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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