v17_paradigm_assessment - TerrenceMcGuinness-NOAA/global-workflow GitHub Wiki
Branch-comparison and infrastructure assessment of the
CatherineThomas-NOAA/global-workflowdev_gsiupd2line (the pre-coupled-modeling DA development trajectory) against the current forkeddevelopbaseline. Captured to anchor the upcoming SDD work plan to fold v17 coverage into the EIB MCP / GraphRAG knowledge base.
| Field | Value |
|---|---|
| Date captured | 2026-04-22 |
| v17 branch | dev_gsiupd2 |
| v17 HEAD |
fd237a4f9 โ Update GSI hash for unused variables and include new MPI setting for GSI (#4780) |
| Compared against | forked develop (94548bc4f, TerrenceMcGuinness-NOAA/global-workflow) |
| Relative position |
+21 commits, 0 behind; merge-base 94548bc4f
|
| Cumulative diff | env/modulefiles/versions/parm/sorc/ush: 57 files, +961 / -222; dev/workflow infra: 47 files, +489 / -169 |
| Reference EXPDIRs |
/gpfs/f6/gfs-cpu/world-shared/Catherine.Thomas/tmp/RUNTESTS_v17_gsiupd3/EXPDIR (9 cases, all Done) |
dev_gsiupd2 is the current evolutionary tip of the v17 DA line. It is not
a sideways fork โ it is 21 commits straight ahead of develop โ but its content
culminates a divergent trajectory that pre-dates the upcoming coupled-modeling
paradigm shift. Catherine Thomas's team drives experiments through the
CM-managed dev/workflow/generate_workflows.sh directly (no GitLab CI/CD
pipeline, no rocotostat.py instrumentation), so EXPDIR layouts and log
artifacts differ from anything the forked branch's CI ever produces.
For the EIB MCP/GraphRAG, this means the existing collections โ ingested from a snapshot that predates v17 additions โ silently miss v17-only entities and return stale answers when asked about paradigm-specific behaviour. This document inventories what changed so the knowledge base can be updated deliberately rather than reactively.
HEAD = fd237a4f9 (dev_gsiupd2)
Merge-base with forked develop = 94548bc4f
Ahead/Behind = 21/0
Remote = github.com/CatherineThomas-NOAA/global-workflow
The 21 commits on top of forked develop are mostly straight develop progress
(NSF/NCAR Derecho support, Ursa CI HPC account update, GFS low-res test case,
ufs-model + GDAS hash refresh, complex2 GRIB2 packing, postamble executable,
broad ush hygiene cleanup) plus the GSI-specific bump that names this branch
(#4780, #4729). All ten submodules of the local dev_gsiupd2 clone have been
initialized for this assessment.
| Path | Kind |
|---|---|
env/DERECHO.env |
new, +315 lines |
versions/build.derecho.ver, versions/run.derecho.ver
|
new |
modulefiles/gw_run.derecho.lua, modulefiles/gw_setup.derecho.lua
|
new |
dev/workflow/hosts/derecho.yaml |
new |
dev/workflow/hosts.py |
adds 'DERECHO' to SUPPORTED_HOSTS; auto-detect via /gpfs/csfs1; new _apply_env_overrides() honoring BASE_IC env var |
dev/parm/config/{gcafs,gfs,gefs,sfs}/config.resources.DERECHO |
new per-app resource configs |
parm/fetch/gcafs_ATMA_gdas-anl_derecho.yaml.j2 |
new fetch template |
derecho.yaml selects pbspro scheduler, queues develop/main, paths
under /lustre/desc1. Resolutions C48โC1152 are flagged supported.
dev/workflow/applications/sfs.py โ SFSAppConfig(AppConfig):
- Reads
RUN(defaults tosfs) andNMEM_ENSfromconfig.base. -
_get_app_configsbuildsstage_ic โ fcst โ atmos_productsplus, when ensemble size > 0,efcsandatmos_ensstat; conditional wave block (waveinit,wavepostsbs,wavepostpnt, with bnd / pnt / bull variants);oceanice_products,prep_emissions,extractvars,arch_tars/globus,arch_vrfy,cleanup. -
_update_baseforcesRUN='sfs'. -
get_task_namesreturns the ordered task list mirroring the configs.
Companion config tree: dev/parm/config/sfs/{config.base.j2,config.efcs, config.arch_tars.j2,config.atmos_products,config.atmos_ensstat,...}.
dev/workflow/rocoto/tasks.py adds the _EXCLUSIVE resource family:
- New keys:
clusters_exclusive,partition_exclusive,queue_exclusive,constraint_exclusive(validated frombase). - When a task config sets
is_exclusive, the generator uses the_exclusivevalues (falling back to batch) and emits PBS:exclhost/ Slurm--exclusivenatives. Localexclusive_taskvariable consolidates the two scheduler branches.
This is the single entry point for v17 testing โ it bypasses GitLab CI
entirely and shells out to setup_expt.py + setup_workflow.py per case.
New flags relevant to the v17 workflow:
| Flag | Purpose |
|---|---|
-S |
Run all valid SFS cases |
-C |
Run all valid GCAFS cases |
-I /path |
Override BASE_IC for every generated experiment |
Case selection block at line 138 (case "${option}"); ambiguous-selection
guard at line 323; YAML iteration at line 640.
| Change | Files |
|---|---|
postamble.sh rewritten as executable script (#4719) |
ush/postamble.sh |
| New helpers |
err_exit.sh, set_strict.sh, unset_strict.sh, timer.sh, wait_for_file.sh, cpfsd.sh, getdump.sh, getioda.sh, setup_data_dir.sh, dataroot_com_path.sh
|
| Module-loading hygiene |
module-setup.sh, detect_machine.sh, jjob_shell_setup.sh, load_modules.sh (only check HOMEglobal when loading; #4738; remove prod_util / module-reset under ecflow #4657) |
| Parser updates |
parsing_namelists_{FV3,FV3_nest,CICE,GOCART,MOM6,WW3}.sh, parsing_model_configure_FV3.sh, parsing_ufs_configure.sh
|
| Removed | ush/fv3gfs_remap_weights.sh |
JGEFS_WAVE_STAT*, JGLOBAL_AERO_ANALYSIS_FINALIZE, JGLOBAL_ANALYSIS_STATS,
JGLOBAL_ARCHIVE_TARS, JGLOBAL_ATMOS_SFCANL, JGLOBAL_ENKF_SELECT_OBS,
JGLOBAL_FORECAST, JGLOBAL_MARINE_ANALYSIS_FINALIZE and _LETKF,
JGLOBAL_WAVE_POST_SBS lose now-unneeded prod_util / module reset lines so
that jobs run identically under rocoto and ecflow.
config.arch_tars and config.fetch migrated to Jinja2 templates across
gcafs, gfs, gefs, and sfs, consistent with the broader move to
template-everywhere configuration.
| Submodule | forked develop
|
v17 dev_gsiupd2
|
|---|---|---|
sorc/gdas.cd |
a6df6330 |
a6512d26 |
sorc/gsi_enkf.fd |
98d609a6 |
005343a4 (feature/llvm) |
sorc/gsi_monitor.fd |
00406871 |
2d0b5ee5 |
sorc/gsi_utils.fd |
4e855b6c |
0d6698c6 |
sorc/nexus.fd |
7b0772b7 |
a89721aa |
sorc/ufs_model.fd |
7b637a8b |
163ba47b (Mar 19 hash, #4536) |
sorc/ufs_utils.fd |
a5001f95 |
ae59bc7a |
The DA-paradigm content (the GSI updates that name this branch and the synchronized ufs-model / GDAS bumps) lives inside the submodules, not in the global-workflow superproject.
Nine experiments, all Done per gw_cistat:
| Case | tasks | metatasks | cycledefs | cycles |
|---|---|---|---|---|
| C48_ATM | 8 | 10 | 1 | 1 |
| C48_S2SW | 15 | 25 | 1 | 1 |
| C48mx500_3DVarAOWCDA | 56 | 45 | 3 | 2 |
| C48mx500_hybAOWCDA | 39 | 25 | 2 | 2 |
| C96_atm3DVar | 32 | 23 | 3 | 3 |
| C96C48_hybatmDA | 46 | 36 | 3 | 3 |
| C96C48_hybatmsnowDA | 47 | 37 | 3 | 3 |
| C96C48_hybatmsoilDA | 49 | 37 | 3 | 3 |
| C96C48mx500_S2SW_cyc_gfs | 85 | 67 | 4 | 3 |
Layout per case (note: configs are flat at EXPDIR root, no config/ subdir):
EXPDIR/<case>/
PSLOT.xml # generated rocoto workflow
PSLOT.db # rocoto sqlite state
PSLOT_lock.db # rocoto lock
PSLOT.scron.sh # cron driver
PSLOT.crontab # crontab fragment
config.* # ~80 config files at root
logs/
YYYYMMDDHH.log # per-cycle rocoto log
scron.log # cron driver log
There are no *_rocotostat.log files in v17 EXPDIRs because the
forked-repo CI's dev/ci/scripts/utils/rocotostat.py wrapper is not part of
this development line.
Sampled task topology (C96C48_hybatmDA_v17_gsiupd3, 46 unique task names,
10 metatasks) confirms the canonical three-cycledef pattern from the v16
diagram: gdas_half (single bootstrap) โ gdas (cycled, 6h) โ gfs
(forecast, 24h). Task families:
-
GDAS deterministic โ
gdas_prep,gdas_anal,gdas_analcalc,gdas_analdiag,gdas_sfcanl_{gcycle,regrid},gdas_atmanlprod/upp,gdas_fcst_seg#seg#,gdas_atmos_prod_#fhr_label#,gdas_fit2obs,gdas_verfozn,gdas_verfrad,gdas_vminmon,gdas_anlstat,gdas_arch_tar_#tartype#,gdas_arch_vrfy,gdas_cleanup. -
EnKF (
enkfgdas_*) hybrid DA โeobs,ediag,eupd,ecen#grp#,epos#grp#,esfc_{gcycle,regrid},echgres,fcst_mem#member#,stage_ic,earc_*,cleanup. -
GFS deterministic โ
gfs_prep,gfs_anal,gfs_analcalc,gfs_atmanlprod/upp,gfs_fcst_seg#seg#,gfs_atmos_prod_#fhr_label#,gfs_tracker,gfs_genesis,gfs_arch_*,gfs_cleanup.
Throttling per workflow XML: <workflow scheduler="slurm" cyclethrottle="3" taskthrottle="25">, partition batch, cluster c6, account gfs-cpu.
Current knowledge base state (per get_knowledge_base_status):
| Collection | Documents |
|---|---|
code-with-context-v8-0-0 |
60,576 |
global-workflow-docs-v8-0-0 |
22,498 |
jjobs-v8-0-0 |
700 |
community-summaries |
2,113 |
ci-test-cases-v1-0-0 |
74 |
ee2-standards-v5-0-0-enhanced |
34 |
| Neo4j | 2,758 files / 2,012 functions / 54 classes / 2.65 M relationships |
Gaps when interrogating v17 content today:
-
applications/sfs.pyandSFSAppConfigโ missing from graph;find_callers_calleeson these symbols returns nothing. - Derecho host (
hosts/derecho.yaml,env/DERECHO.env,gw_*.derecho.lua,versions/*.derecho.ver) โ not represented;get_workflow_structurewill not list Derecho among supported platforms. -
tasks.pyis_exclusiveresource branch โ graph carries the older signature; queries about exclusive scheduling fall through. - ush refactor (postamble executable, err_exit, strict helpers, parsers, new
helpers) โ stale; lookups by file path drift (we already saw
workflow_xml.pyvsrocoto_xml.py). -
gsi_enkf.fdfeature/llvmbranch content โ never indexed (submodule snapshots are pinned to whatever was previously ingested). -
generate_workflows.sh -S/-C/-Iflags โ search returns the older parameter set.
Captured here as the seed for the SDD descriptor; details to be elaborated in the spec phase.
-
Dual-branch ingestion. Add a second snapshot of
dev_gsiupd2with all submodules at v17 pins. Suggested collection naming:code-with-context-v17-dev_gsiupd2-<sha>,global-workflow-docs-v17-dev_gsiupd2-<sha>. Keep the existing develop collections untouched. -
Branch / commit metadata. Tag every Chroma chunk and every Neo4j node
with
branch,commit_sha, andparadigm(develop|v17_pre_coupled). Expose a filter argument onsearch_documentationand on graph queries (analyze_code_structure,find_callers_callees,trace_execution_path) to scope answers to a paradigm. -
Schema extensions for v17-only entities listed in ยง5. In particular:
add the
is_exclusiveresource axis to the Task node, register the SFS application class, model the Derecho host the same way other hosts are modeled, and recognize the.j2template family for archive/fetch configs. -
Path-drift reconciliation. Sweep the graph for files renamed or removed
since v8 ingestion (e.g.
ush/fv3gfs_remap_weights.sh,workflow_xml.py) and emit a deprecation/redirect map so older queries resolve to current paths. -
Cross-cutting collections stay shared.
community-summaries,ee2-standards-v5-0-0-enhanced,ci-test-cases-v1-0-0are paradigm- agnostic and need no split. Only code/docs collections fork. -
Reference deliverable. This document, committed under
docs/source/v17_paradigm_assessment.md, is the inaugural v17-aware reference doc and the input to the SDD spec phase.
- Detailed Neo4j schema deltas (node labels, properties, edge types).
- Chroma collection naming convention and migration rules.
- Ingestion pipeline modifications (paradigm-aware embeddings, dedup with the develop snapshot).
- Validation criteria and regression suite (sample queries that must be answered correctly per paradigm).
- MCP tool API surface for branch filtering (parameter naming, default behavior, backward compatibility).
| Path | Description |
|---|---|
/gpfs/f6/drsa-precip3/scratch/Terry.McGuinness/global-workflow_forked |
forked-repo develop (94548bc4f) โ baseline |
/gpfs/f6/drsa-precip3/scratch/Terry.McGuinness/global-workflow.v17_Catherine.Thomas |
v17 dev_gsiupd2 (fd237a4f9) โ submodules initialized |
/gpfs/f6/gfs-cpu/world-shared/Catherine.Thomas/git/global-workflow/fork_dev_gfsv17 |
the working clone that actually drove the EXPDIR run (referenced as HOMEgfs inside the v17 XML) |
/gpfs/f6/gfs-cpu/world-shared/Catherine.Thomas/tmp/RUNTESTS_v17_gsiupd3/EXPDIR |
9-case v17 EXPDIR root |
- Direct inspection of both repos via the workspace file tools.
-
git diff --stat fork_develop -- <paths>between the two checkouts (forkeddevelopwas fetched into the v17 clone asfork_developfor the comparison). -
gw_cistatplus per-case XML grep for task / metatask / cycledef counts. - The EIB MCP gateway was deliberately not used as the source of truth for v17 content because its v8 collections predate the additions catalogued here. The gateway was used only for general Rocoto background and to confirm the v8 graph's path drift.