Add missing 'AI Ambiguity validation' and 'ISB model' keys to pdp3 config generation - #33
Merged
Merged
Conversation
pdp3 (v3.2.10) unconditionally reads 'AI Ambiguity validation' from the ctrl file; when the key is absent, get_ctrl returns a value with embedded newlines that crashes pdp3.sh's sed substitution, and every PPP run silently produces 0 KIN files. The generated config was missing the key in three places, so it was dropped even when the installed PRIDE template had it: the AmbiguityFixingOptions model had no field, read_config_file had no parsing branch (load_default reads the installed template and stripped it), and write_config_file never emitted it. The same read/write round-trip also stripped 'ISB model' — present in the shipped config_template but absent from the model, reader, and writer. earthscope-sfg-workflows currently monkeypatches write_config_file to inject it; with this fix that workaround can be dropped. New test_config_file.py covers the round-trip for both keys and adds a drift guard: PRIDE-PPPAR's shipped table/config_template at the pinned commit b7451a8 is vendored as a test resource, and tests assert that the shipped template, the writer output, and the read→write round-trip all cover every upstream key. The ISB gap was found by this guard. Refresh the vendored copy when re-pinning the table source. Fixes #28. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
frigusgulo
pushed a commit
to EarthScope/earthscope-sfg-workflows
that referenced
this pull request
Jul 31, 2026
sv3_pipeline.py carried three monkey-patches applied at import time: write_config_file (inject 'ISB model' / 'AI Ambiguity validation' pdp3 keys), PrideProcessor._validate_kinfile (DataFrame truthiness crash), and TBDArray.write_df (promote 'time' column to index for tiledb.from_pandas). All three are now fixed at the source: - pride-ppp: config keys fixed in EarthScope/GNSSommelier#33 (merged), _validate_kinfile fixed in EarthScope/GNSSommelier#34 - earthscope-sfg-tools: write_df fixed in EarthScope/earthscope-sfg-tools#19 (which also makes the Go-binary wrappers raise on non-zero exit instead of failing silently) pyproject now pins pride-ppp to an explicit GNSSommelier rev (it was unpinned, resolving default-branch HEAD at lock time) and moves the sfg-tools pin from 0.2.0 to the fix commit; pixi.lock re-solved accordingly. Once the upstream PRs merge, both pins should move to merged-main revs (sfg-tools 0.2.1 tag) with a single re-lock. Removing the base-class write_df patch also ends qc_pipeline's silent dependence on sv3_pipeline being imported first for its qcKinPositionTDB writes to work. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #28 — every PPP run silently produced 0 KIN files because the generated
config_filewas missing theAI Ambiguity validationkey that pdp3 (v3.2.10) unconditionally reads. With the key absent,get_ctrlreturns a value with embedded newlines that crashespdp3.sh'ssedsubstitution, and no error surfaces to the wrapper.Root cause
The key was dropped in three places, so even an up-to-date installed PRIDE template didn't help:
_write_configloads the installed template viaload_default()→read_config_filehad no parsing branch for the key (stripped on read) →write_config_filenever emitted it → andAmbiguityFixingOptionshad no field to carry it.Changes
AmbiguityFixingOptions.ai_ambiguity_validation(default"YES", matching upstream), plus the writer line and reader branch — the key now round-trips, and is injected with the upstream default when reading an old template that lacks it.ISB model— it was in the shippedconfig_templatebut absent from the model/reader/writer, so the read→write round-trip stripped it too. This is the keyearthscope-sfg-workflowscurrently monkeypatcheswrite_config_fileto inject; that workaround can be dropped once this lands. (Found by the new drift guard below.)config_templategains theAI Ambiguity validationline, matching upstream's.Drift guard (the issue's 'more general fix')
PRIDE-PPPAR's shipped
table/config_templateat the pinned commitb7451a8is vendored as a test resource, andtest_config_file.pyasserts that (a) our shipped template, (b)write_config_fileoutput, and (c) the read→write round-trip each cover every upstream key. Future keys likeISB model/AI Ambiguity validationwill fail CI instead of silently zeroing out PPP runs. The vendored copy should be refreshed when re-pinning the table source (noted in the test docstring).Note: these tests only run in CI once the pride-ppp suite is added to the workflow (currently only the gnss-product-management and gpm-cli suites run).
Verification
🤖 Generated with Claude Code