Skip to content

DM-55473: Deploy lsst.io site with schemas - #65

Merged
timj merged 20 commits into
mainfrom
tickets/DM-55473
Jul 17, 2026
Merged

DM-55473: Deploy lsst.io site with schemas#65
timj merged 20 commits into
mainfrom
tickets/DM-55473

Conversation

@timj

@timj timj commented Jul 12, 2026

Copy link
Copy Markdown
Member

Checklist

  • ran Jenkins
  • added a release note for user-visible changes to doc/changes

@codecov

codecov Bot commented Jul 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.20513% with 92 lines in your changes missing coverage. Please review.
✅ Project coverage is 62.98%. Comparing base (d6aca8a) to head (d0b8deb).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
python/lsst/images/_geom.py 42.85% 24 Missing ⚠️
...ython/lsst/images/serialization/_frozen_schemas.py 74.07% 21 Missing ⚠️
tests/test_frozen_schemas.py 92.89% 12 Missing ⚠️
python/lsst/images/serialization/_common.py 62.06% 11 Missing ⚠️
python/lsst/images/_cell_grid.py 0.00% 3 Missing ⚠️
python/lsst/images/psfs/_piff.py 0.00% 3 Missing ⚠️
python/lsst/images/schema_docs.py 97.88% 3 Missing ⚠️
...ython/lsst/images/serialization/_output_archive.py 72.72% 3 Missing ⚠️
python/lsst/images/_color_image.py 0.00% 1 Missing ⚠️
python/lsst/images/_difference_image.py 0.00% 1 Missing ⚠️
... and 10 more

❗ There is a different number of reports uploaded between BASE (d6aca8a) and HEAD (d0b8deb). Click for more details.

HEAD has 6 uploads less than BASE
Flag BASE (d6aca8a) HEAD (d0b8deb)
9 3
Additional details and impacted files
@@             Coverage Diff             @@
##             main      #65       +/-   ##
===========================================
- Coverage   78.77%   62.98%   -15.79%     
===========================================
  Files         127      132        +5     
  Lines       16873    17603      +730     
===========================================
- Hits        13291    11087     -2204     
- Misses       3582     6516     +2934     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

@timj
timj force-pushed the tickets/DM-55473 branch 3 times, most recently from 4b69978 to d1ee085 Compare July 13, 2026 13:48
@timj
timj force-pushed the tickets/DM-55473 branch from bfc5cfa to aba8c84 Compare July 16, 2026 02:11
Comment thread schemas/visit_image/visit_image-1.0.0.json Outdated
@timj
timj force-pushed the tickets/DM-55473 branch from aba8c84 to 8b51dce Compare July 16, 2026 16:51

@TallJimbo TallJimbo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. I have some quibbles with how things are structured, but we should only act on those now if it's easy to do so.

Comment thread python/lsst/images/frozen_schemas.py Outdated
Comment thread python/lsst/images/serialization/_frozen_schemas.py
Comment thread python/lsst/images/frozen_schemas.py Outdated
Comment thread python/lsst/images/schema_docs.py
Comment thread python/lsst/images/schema_docs.py Outdated
Comment thread python/lsst/images/schema_docs.py
Comment thread python/lsst/images/schema_docs.py
Comment thread doc/changes/DM-55473.feature.rst
Comment thread python/lsst/images/serialization/_common.py Outdated
@timj
timj force-pushed the tickets/DM-55473 branch from 673a7ba to 9c5fa10 Compare July 16, 2026 20:54
timj and others added 19 commits July 17, 2026 06:58
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Freezing exposed two issues in JSON Schema generation, both fixed here:
subclasses of concrete schemas (visit_image, difference_image) inherited
their parent's $id and title through the merged model_config, and
recursive models (sum_field, product_field) emitted a bare $ref root with
no top-level identity.  Schemas registered from outside lsst.images (test
doubles, third-party entry points) are excluded from freezing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Docstring-derived descriptions carry single-backtick Python references
that cannot resolve as py:obj targets on the generated pages; they are
rendered as inline literals instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ArchiveTree.SCHEMA_URL_BASE is now a per-class override so third-party
schemas mint URLs under a documentation site they control instead of
images.lsst.io, which will not host schemas it does not own.  Schema URL
parsing on read consequently validates the URL shape (an http(s) URL
whose final directory is 'schemas') rather than pinning the host.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Schema discovery now also consults the lsst.images.schemas entry point
group, so an external package's schemas are found without anything
importing their modules first.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The page's canonical URL now also comes from the schema's own $id, so
an external package can generate pages under its own URL base.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The BaseField docstring referenced nonexistent public evaluate and
multiply_constant methods; the real extension points are the _evaluate
and _multiply_constant hooks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Each schema now has a family page at the versionless URL
({SCHEMA_URL_BASE}/{name}) listing its published versions newest-first
with the current one marked, and the site navigation nests version pages
under it, so the top-level schema index only grows when a new schema is
added rather than on every version bump.  Version page URLs are
unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two-element arrays do not encode which element is x and which is y, so
XY and YX now serialize as JSON objects keyed by dimension name, using
the same pattern as Interval and Box.  Pydantic bypasses custom schema
hooks for parameterized named tuples, so model fields that parameterize
a pair must use the new SerializableXY/SerializableYX annotations.

Validation still accepts the array form in both JSON and Python mode:
files written before this change (including the DP2 cell coadds, which
cannot be rewritten) store pairs as arrays and must remain readable and
schema-valid, so the published 1.0.0 schemas allow both forms and the
fixtures keep their extracted array-form pairs as regression coverage.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…havior

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@timj
timj force-pushed the tickets/DM-55473 branch from 9837934 to d0b8deb Compare July 17, 2026 13:59
@timj
timj merged commit cef7785 into main Jul 17, 2026
18 of 19 checks passed
@timj
timj deleted the tickets/DM-55473 branch July 17, 2026 14:19
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