Skip to content

Commit e98244c

Browse files
committed
docs(research): record CO-OPS pilot findings in health assessment
- Add Issue Botts-Innovative-Research#7: positive-test confirmations for qualityControl contact role, contactInfo.phone.voice, and 3-role contact arrays (all accepted by /systems PUT and round-tripped intact). Tightens negative space around Issue #2 - the SystemSensorMLFeature binding gap is specifically characteristics/capabilities, not contact metadata. - Bump publisher count from 2 to 3 in fleet-status passages (sec 2.4, 3.3, 7) and adjust 'remaining' count from 7 to 6. - Mark Recommendation 6.1 (extract shared SML/stub builder) as triggered - threshold of ~3 publishers reached. - Reference commit 3ac7c88 (CO-OPS) in summary table.
1 parent 3ac7c88 commit e98244c

1 file changed

Lines changed: 46 additions & 9 deletions

File tree

docs/research/Strict_Parsing_Migration_Repo_Health_Assessment_2026-05-09.md

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ sml_body=...)`, `ensure_system(..., sml_body=...)`, and
136136
`ensure_deployment(..., sml_body=..., parent_id=...)`. The
137137
`OS4CSAPI_STRICT_BOOTSTRAP=1` environment guardrail raises `RuntimeError`
138138
on closed-properties leakage during dry-run. Both have now been validated
139-
against a real strict server with two publishers (aviation-wx, NDBC). They
140-
work; reuse for the remaining seven publishers is mechanical.
139+
against a real strict server with three publishers (aviation-wx, NDBC,
140+
CO-OPS). They work; reuse for the remaining six publishers is mechanical.
141141

142142
### 2.5 Architectural defects in upstream surfaced
143143

@@ -201,11 +201,16 @@ Each publisher refactor is the same surgery:
201201
5. Strip deployment stubs.
202202
6. Wire `sml_body=` and `force_sml=` into `ensure_procedure(...)` calls.
203203

204-
Done by hand on aviation-wx (5 systems) and NDBC (2 procedures, 5 systems,
205-
dual datastream schemas). Seven publishers remain (coops, iss, nws,
206-
opensky, usgs_eq, usgs_nims, usgs_water). Without an extracted helper,
207-
every fix to an upstream defect (e.g., when the procedure `documentation`
208-
typo is fixed) requires editing N publishers.
204+
Done by hand on aviation-wx (5 systems), NDBC (2 procedures, 5 systems,
205+
dual datastream schemas), and CO-OPS (1 procedure, 5 systems, 3-role
206+
contacts including `qualityControl`/CORMS). Six publishers remain (iss,
207+
nws, opensky, usgs_eq, usgs_nims, usgs_water). Without an extracted
208+
helper, every fix to an upstream defect (e.g., when the procedure
209+
`documentation` typo is fixed) requires editing N publishers.
210+
211+
**Trigger reached:** Recommendation 6.1 (extract shared SML/stub builder
212+
after ~3 publishers) is now due. Three full-fidelity refactors are on
213+
record; the abstraction is no longer speculative.
209214

210215
### 3.4 Workarounds carry "unfixed upstream typo" notes inline
211216

@@ -532,6 +537,37 @@ We mention it here so readers don't waste time probing.
532537

533538
---
534539

540+
### 4.7 Positive-test confirmations (CO-OPS pilot, commit `3ac7c88`)
541+
542+
The CO-OPS migration exercised three SensorML contact-shape variants not
543+
seen in aviation-wx or NDBC. All were accepted by `/systems` PUT with
544+
`Content-Type: application/sml+json` and round-tripped intact on a
545+
subsequent `GET ... Accept: application/sml+json`:
546+
547+
| Field / shape | Status | Notes |
548+
|---|---|---|
549+
| Contact `role: "qualityControl"` | Accepted | CORMS contact preserved end-to-end on station 8518750. |
550+
| Contact `contactInfo.phone.voice` | Accepted | NWS-style voice phone number survives the round trip. |
551+
| Three-contact array (operator + qualityControl + publisher) | Accepted | Prior pilots only exercised two roles. |
552+
553+
These are not defects, and we record them here so subsequent publishers
554+
(NWS, USGS) don't re-probe. They also tighten the negative space around
555+
Issue #2: the System SensorML JSON binding *does* implement
556+
`contacts[*].role`, `contactInfo.phone`, and the spec-defined extended
557+
contact roles — the binding gap is specifically `characteristics` and
558+
`capabilities`, not contact metadata.
559+
560+
**Reproducer (succeeds):**
561+
562+
```bash
563+
curl -s -H "Accept: application/sml+json" \
564+
https://129-80-248-53.sslip.io/csapi-go-v2/systems/{coops_8518750_id} \
565+
| python -c "import json,sys; d=json.load(sys.stdin); print([c['role'] for c in d['contacts']])"
566+
# -> ['operator', 'qualityControl', 'publisher']
567+
```
568+
569+
---
570+
535571
## 5. Summary Table of Upstream Issues
536572

537573
| # | Endpoint | Field | Status | Severity | Defect type | Workaround |
@@ -542,6 +578,7 @@ We mention it here so readers don't waste time probing.
542578
| 4 | POST /datastreams | SWE Time `referenceTime` | Rejected | P2 | Incomplete SWE Common decoder | Drop field; implicit epoch |
543579
| 5 | POST /datastreams | top-level `uid` | Rejected | P3 | Possibly intentional; undocumented | Let server assign ID |
544580
| 6 | POST /deployments | `parent@link` in properties | Rejected | Informational | Not a defect | Use `parent_id=` helper param |
581+
| 7 | PUT /systems | `contacts[*].role=qualityControl`, `contactInfo.phone.voice`, 3-role contact arrays | **Accepted** | Confirmation | None — works as specified | None needed (CO-OPS pilot, commit `3ac7c88`) |
545582

546583
---
547584

@@ -627,8 +664,8 @@ Option (c) is fine if documented. Right now it's implicit.
627664

628665
**Improvements (durable):**
629666

630-
1. Two publishers (aviation-wx, NDBC) are portable across both server
631-
families.
667+
1. Three publishers (aviation-wx, NDBC, CO-OPS) are portable across both
668+
server families.
632669
2. Stub/SML separation matches OGC 23-001.
633670
3. Empirical schema is captured in three companion documents.
634671
4. Helper infrastructure (`bootstrap_helpers.ensure_*`) is validated.

0 commit comments

Comments
 (0)