The single biggest adoption blocker: users hit it about twenty minutes after the Docker demo works, because it is the tool that builds the landscape file, without which ForeFire runs only on the shipped example.
Documented in four places, present in none
git ls-files | grep genForeFireCase returns nothing, while these describe it:
docs/source/user_guide/landscape_file.rst:84 — "Previous versions of ForeFire included Python helper scripts (e.g. genForeFireCase.py). While the status of V2 helpers is pending…"tools/README.md:12,20,62 — documents FiretoNC() argument by argumenttools/preprocessing/READMEscripts.mddocs/_legacy/UserGuide/ForeFireGeneralUsage.tex:170
It was removed in ac0baba ("clean more post-processing", Dec 2023), which deleted 129 lines and added 21 lines to tools/TODO.md.
It is recoverable, and it still works — with two fixes
I pulled it back and ran it:
git show ac0baba^:tools/preprocessing/genForeFireCase.py
Generating a 100×100 landscape and loading it produced:
variables: ['fuel', 'altitude', 'windU', 'windV', 'domain', 'parameters']
LOADED OK
SIMULATED OK
ForeFire loads the output, ignites, and steps. So restoring it is genuinely the right call — but it is not a clean revert. Three things need attention.
1. The 3-D and 4-D paths are broken.addFieldToNcFile reads the input shape as (NY, NX, NZ, NT):
ncfile.createDimension('%sNX'%fieldname, sp[1])
ncfile.createDimension('%sNY'%fieldname, sp[0])
ncfile.createDimension('%sNZ'%fieldname, sp[2])
ncfile.createDimension('%sNT'%fieldname, sp[3])
variable=ncfile.createVariable(fieldname, dvartype, ('NT','NZ','NY','NX'))
variable[:,:,:,:] =fieldbut creates the variable with the axes in the opposite order and assigns without transposing. That only succeeds when NY == NT and NX == NZ. A 4-D field fails with:
ValueError: could not broadcast input array from shape (1,1,100,100) into shape (100,100,1,1)
Only the 2-D path is correct. Since time-varying wind is exactly what a 4-D field is for, this needs fixing before the tool is advertised.
2. scipy.io.netcdf is deprecated. It still imports on scipy 1.18, but emits DeprecationWarning: … the scipy.io.netcdf namespace is deprecated and will be removed in SciPy 2.0.0. One-line fix to netcdf_file. Worth considering netCDF4 instead, which the project already depends on for testing.
3. parametersProperties has seven undocumented required keys. Omitting any of date, duration, refYear, refDay, year, month, day raises a bare KeyError after the file has already been partially written. tools/README.md calls this argument "the other optional properties you may want to put in the list" — it is not optional.
Suggested fix
Restore the file to tools/preprocessing/, fix the axis order, move off the deprecated import, document or default the required keys, and add a smoke test — the sequence above is already one. Then correct the four documents so they describe what exists.
Roughly half a day, and it removes the top reason people bounce off the project.
The alternative — deleting every mention — is much cheaper but leaves users with no way to build a case at all. Documenting a tool that does not exist reads worse than documenting nothing, but having the tool reads best.
Drafted by Claude Opus 5 from a codebase audit. Reviewed by a maintainer before filing.
The single biggest adoption blocker: users hit it about twenty minutes after the Docker demo works, because it is the tool that builds the landscape file, without which ForeFire runs only on the shipped example.
Documented in four places, present in none
git ls-files | grep genForeFireCasereturns nothing, while these describe it:docs/source/user_guide/landscape_file.rst:84— "Previous versions of ForeFire included Python helper scripts (e.g.genForeFireCase.py). While the status of V2 helpers is pending…"tools/README.md:12,20,62— documentsFiretoNC()argument by argumenttools/preprocessing/READMEscripts.mddocs/_legacy/UserGuide/ForeFireGeneralUsage.tex:170It was removed in
ac0baba("clean more post-processing", Dec 2023), which deleted 129 lines and added 21 lines totools/TODO.md.It is recoverable, and it still works — with two fixes
I pulled it back and ran it:
Generating a 100×100 landscape and loading it produced:
ForeFire loads the output, ignites, and steps. So restoring it is genuinely the right call — but it is not a clean revert. Three things need attention.
1. The 3-D and 4-D paths are broken.
addFieldToNcFilereads the input shape as(NY, NX, NZ, NT):but creates the variable with the axes in the opposite order and assigns without transposing. That only succeeds when
NY == NTandNX == NZ. A 4-D field fails with:Only the 2-D path is correct. Since time-varying wind is exactly what a 4-D field is for, this needs fixing before the tool is advertised.
2.
scipy.io.netcdfis deprecated. It still imports on scipy 1.18, but emitsDeprecationWarning: … the scipy.io.netcdf namespace is deprecated and will be removed in SciPy 2.0.0. One-line fix tonetcdf_file. Worth consideringnetCDF4instead, which the project already depends on for testing.3.
parametersPropertieshas seven undocumented required keys. Omitting any ofdate,duration,refYear,refDay,year,month,dayraises a bareKeyErrorafter the file has already been partially written.tools/README.mdcalls this argument "the other optional properties you may want to put in the list" — it is not optional.Suggested fix
Restore the file to
tools/preprocessing/, fix the axis order, move off the deprecated import, document or default the required keys, and add a smoke test — the sequence above is already one. Then correct the four documents so they describe what exists.Roughly half a day, and it removes the top reason people bounce off the project.
The alternative — deleting every mention — is much cheaper but leaves users with no way to build a case at all. Documenting a tool that does not exist reads worse than documenting nothing, but having the tool reads best.
Drafted by Claude Opus 5 from a codebase audit. Reviewed by a maintainer before filing.