Summary
Live OSH accepts publisher creates and procedure SensorML replacement, but system-level SensorML replacement currently returns HTTP 500 for multiple new station-network publishers. This prevents normal propagation of rich system metadata such as representative image documents, attribution links, and source/legal notes.
The publishers continue operating because the bootstraps create systems, datastreams, deployments, and observations successfully. The failure is specifically the PUT /systems/{id} rich SensorML update path.
Controlled Repo Scope
This issue is filed in OS4CSAPI/OSHConnect-Python because the behavior is blocking OS4CSAPI publisher/demo metadata propagation. It is not filed against an upstream/external repo.
Affected Endpoint
Publisher runtime endpoint:
https://os4csapi-osh.duckdns.org/sensorhub/api
Production Explorer preset/proxy:
OSH (OS4CSAPI)
https://129-80-248-53.sslip.io/sensorhub/api
Reproduction
From OSHConnect-Python:
py -m publishers.bgs_sensorthings.bootstrap_bgs_sensorthings --force-sml
Observed on 2026-05-26:
[SML] Force-PUT SensorML for procedure urn:os4csapi:procedure:bgs-sensorthings:v1 (id=04e0)
[WARN] SML PUT skipped for system urn:os4csapi:system:bgs-sensorthings:gga01-03:v1 (id=05n0): HTTP 500 PUT https://os4csapi-osh.duckdns.org/sensorhub/api/systems/05n0
[WARN] SML PUT skipped for system urn:os4csapi:system:bgs-sensorthings:gga05-03:v1 (id=05ng): HTTP 500 PUT https://os4csapi-osh.duckdns.org/sensorhub/api/systems/05ng
[WARN] SML PUT skipped for system urn:os4csapi:system:bgs-sensorthings:gga07-03:v1 (id=05o0): HTTP 500 PUT https://os4csapi-osh.duckdns.org/sensorhub/api/systems/05o0
Earlier Environment Agency Hydrology runs showed the same class of failure for system SensorML PUT while procedure SensorML PUT succeeded.
Expected Behavior
PUT /systems/{id} with Content-Type: application/sml+json should accept a valid SensorML JSON document for an existing system, consistent with procedure SensorML replacement behavior.
If a field is invalid or unsupported, the server should return a diagnostic 4xx response identifying the problematic field instead of an opaque HTTP 500.
Actual Behavior
The server returns HTTP 500 for each system SensorML PUT attempted by the affected publisher bootstraps.
Operational publishing still works:
- systems exist,
- datastreams exist,
- deployments exist,
- observations publish and read back successfully.
The missing system SensorML update blocks normal rich metadata propagation.
Demo Impact
Explorer side-card thumbnails and source/legal links normally come from system SensorML documents metadata. Because the live system PUT fails, Explorer currently needs representative-thumbnail fallbacks for affected publishers.
Known mitigations already implemented:
- Environment Agency Hydrology representative thumbnail fallback in Explorer.
- BGS SensorThings representative thumbnail fallback in Explorer using the official UKGEOS borehole-dimensions illustration.
- Publisher metadata still includes image/source/legal docs so the data model is ready when system SensorML PUT is fixed.
Recent related commits:
OS4CSAPI/OSHConnect-Python@96119de Document BGS thumbnail fallback behavior
OS4CSAPI/OSHConnect-Python@a392b16 Add BGS representative thumbnail metadata
OS4CSAPI/ogc-csapi-explorer@f0ac8e6 Add BGS representative thumbnail fallback
Notes
This should be treated as a server interoperability / publisher-support issue. It is not currently blocking scalar observation publishing, but it does block richer system metadata needed for demo-quality cards and repeatable publisher onboarding.
Summary
Live OSH accepts publisher creates and procedure SensorML replacement, but system-level SensorML replacement currently returns HTTP 500 for multiple new station-network publishers. This prevents normal propagation of rich system metadata such as representative image documents, attribution links, and source/legal notes.
The publishers continue operating because the bootstraps create systems, datastreams, deployments, and observations successfully. The failure is specifically the
PUT /systems/{id}rich SensorML update path.Controlled Repo Scope
This issue is filed in
OS4CSAPI/OSHConnect-Pythonbecause the behavior is blocking OS4CSAPI publisher/demo metadata propagation. It is not filed against an upstream/external repo.Affected Endpoint
Publisher runtime endpoint:
Production Explorer preset/proxy:
Reproduction
From
OSHConnect-Python:Observed on 2026-05-26:
Earlier Environment Agency Hydrology runs showed the same class of failure for system SensorML PUT while procedure SensorML PUT succeeded.
Expected Behavior
PUT /systems/{id}withContent-Type: application/sml+jsonshould accept a valid SensorML JSON document for an existing system, consistent with procedure SensorML replacement behavior.If a field is invalid or unsupported, the server should return a diagnostic 4xx response identifying the problematic field instead of an opaque HTTP 500.
Actual Behavior
The server returns HTTP 500 for each system SensorML PUT attempted by the affected publisher bootstraps.
Operational publishing still works:
The missing system SensorML update blocks normal rich metadata propagation.
Demo Impact
Explorer side-card thumbnails and source/legal links normally come from system SensorML
documentsmetadata. Because the live system PUT fails, Explorer currently needs representative-thumbnail fallbacks for affected publishers.Known mitigations already implemented:
Recent related commits:
Notes
This should be treated as a server interoperability / publisher-support issue. It is not currently blocking scalar observation publishing, but it does block richer system metadata needed for demo-quality cards and repeatable publisher onboarding.