docs: the settings file has no reference page — mesh: and airfoil: are reachable only through docstrings - #308
Merged
1-Bart-1 merged 4 commits intoSep 12, 2026
Conversation
Add docs/src/settings.md: an annotated vsm_settings.yaml carrying all three top-level blocks, with a wing's mesh: and airfoil: blocks annotated field by field and solver: xfoil among them. List it in docs/make.jl and point at it from README.md and docs/src/index.md. A testset loads the page's own yaml block and asserts its mesh:/airfoil: key sets equal fieldnames(MeshSettings) and fieldnames(AirfoilSettings), so a renamed or added field fails the suite rather than leaving the page stale. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UUo7hUWtB2PWKVBfjhqqZ7
Contributor
Author
|
Local full suite: PASS (7 min, Julia 1.12.7, one cell of the matrix) |
1-Bart-1
approved these changes
Sep 11, 2026
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
1-Bart-1
enabled auto-merge
September 12, 2026 12:50
This was referenced Sep 12, 2026
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.
TL;DR
MeshSettingsandAirfoilSettingswere rendered on the API pages, but no.mdpage anywhere showed a reader the file those blocks live in — somesh:,airfoil:andsolver: xfoilwere reachable only by opening a docstring and guessing the YAML around it. This addsdocs/src/settings.md, an annotatedvsm_settings.yamlthe docs build renders and the test suite loads.The red check is #300, not this diff
Test end-user and developer setupis red here, and it is not this change: this branch is +139 / −0 acrossREADME.md,docs/make.jl,docs/src/index.md,docs/src/settings.mdandtest/settings/test_settings.jl, with no Julia source in it at all, and that job neither builds the docs nor runstest/settings/.What fails is
examples/ram_air_kite.jl:79—plot_slices_3d→fit_kulfan_parameters→normalize_airfoilatsrc/airfoil_aero/kulfan.jl:71,ArgumentError: reducing over an empty collection is not allowed, the emptyargminyou get whenread_dat_coordinatesfinds a deflected.datthat is allNaN NaNrows. That is issue #300, whose fix is open as #301.I checked it against a branch that shares no code with this one rather than inferring it: #305 changes
bin/releaseand nothing else, and its run fails the same job on the same example with the same error and the same15 passed, 1 failed. The same job is red right now on #302, #306, #301 and #273 too. Every other check on this PR that has finished is green, includingDocumentation, which is the one that actually exercises the page this PR adds.I am not fixing it here. It is a
src/bug with its own issue and its own open PR, and pulling it into a docs diff would put two ideas in one PR and take the fix away from the reviewer who has the context for it.What the page is
One annotated file, all three top-level blocks, with a wing carrying both
mesh:andairfoil:annotated field by field. Every field of both blocks appears, because that is the gap the issue names: showing the block and deferring to the docstring for its contents would have moved the problem, not closed it. The split I kept instead is the oneCLEAN_CODE.md§3 prescribes for data files — the YAML comment gives a field's meaning, unit and allowed values, and the linked docstring keeps the defaults and the prose.solver_settings:is the exception: the file needs the block to be real, so the sample shows the two keys that are genuinely required plus a representative few, and points atSolverSettingsfor the rest rather than opening a second field reference.Three things the page says that a reader could not have worked out from the docstrings:
geometry_fileresolves against the working directory while the settings path itself resolves underdata/;mesh: obj_file:is the mesh sections are generated from and is not the wing's own top-levelobj_file, which cannot sit besidegeometry_file; andn_panelswritten undersolver_settings:is discarded and recomputed as the sum over the wings.The sample is executed, not typed
A YAML sample in a markdown file rots silently, so the suite loads this one.
test/settings/test_settings.jlextracts the page's own ```yaml fence, parses it, and — the part that actually bites — asserts the key sets ofmesh:and `airfoil:` equal `fieldnames(MeshSettings)` and `fieldnames(AirfoilSettings)`. A field added to either struct now fails the suite instead of quietly leaving the page a field short. I checked that it bites rather than assuming it: deleting `n_bins: 60` from the page turns the testset red at 4 passed, 1 failed.The existing
mesh and airfoil blockstestset already covers the parsing itself, so the new one asserts only what is specific to the page and does not restate it.Where I would push back
No
CHANGELOG.mdentry. This is documentation with no behaviour change, and #302 is holding that file for the v5.1.0 release; adding a line there would conflict for no gain. Say the word if you would rather see it under a Documentation heading and I will add it after #302 merges.I also added the pointer line to
docs/src/index.mdas well asREADME.md, though the issue asked only for the README. The two files carry that input section identically, and updating one would have left the docs home — the page next door to the new one — as the only place still not mentioning it.Found, not fixed
ConditionSettingsis unexported and has no docstring, socondition:is the one block the page cannot@ref. Its four fields are annotated in the sample instead. Giving it a docstring is asrc/change and a second idea.data/*/vsm_settings.yamlfiles carry 20–35-line explanatory headers that this page now duplicates, againstCLEAN_CODE.md§3's two-line limit, and the tworam_air_kitefiles additionally carry decorative top-levelModel:/PanelDistribution:/InitialGammaDistribution:blocks the parser never reads. That is acleanup:PR; say if you want it queued.Wing(::VSMSettings)readssettings.wings[1]only, thoughwings:is a list andvsm_settings_dual.yamlships two. I left this out of the page: it isWing's behaviour rather than the file's, but it will surprise someone who writes a second wing.obj_to_yaml's owntable_formatdefault is:csvwhileAirfoilSettings.table_formatdefaults to:arrow, so the same dataset gets a different table format depending on which route configured it.Verification
fb1eea7:git grep '```yaml' -- docs README.mdandgit grep -l 'mesh:' -- 'docs/src/*.md' README.mdboth returned nothing, andgit grep 'solver: xfoil' -- '*.md'matched onlyCHANGELOG.md:38test/settings/test_settings.jl33/33 pass on the current head99b1815(juliaserver, 9 + 17 + 5 + 2); new testset 5/5, and red at "4 passed, 1 failed" withn_bins: 60deleted from the page@refindocs/build/settings.html· pre-existing size warnings onprivate_functions.mdandfunctions.mdonlysolver: xfoil→XFoilSolver, rotation rows →[0 0 -1; -1 0 0; 0 1 0], sweeps →-180.0:1.0:180.0and-40.0:10.0:40.0,reynolds→ 1.6919889502762433e6,table_format→Symbol arrow,solver_settings.n_panels→ 50origin/maininto the branch at99b1815; 0 commits behind, and the merge touched no file this PR adds · REUSE lint n/a, this repo has nobin/reuse_lintca29dc5, before the merge of main99b1815:DocumentationPASS · Julia 1.12 pull_request PASS on ubuntu, macOS and windows · Julia 1.11 coverage PASS ·codecov/patchPASS ·Test end-user and developer setupFAIL for write_section_aero writes an all-NaN deflected .dat, and read_section_ #300, evidence above · the two remaining coverage jobs were still running when this was writtendocs/src/settings.mdby path, so the suite needs the repo checkout rather than a stripped install to run that testset.Scope
+139 / −0 across 5 files, of which
docs/src/settings.mdis 114. Nosrc/change, no CHANGELOG entry (see above). Not stacked — of the open PRs only #301 touchesdocs/src/at all, and that isprivate_functions.md, no file this branch opens.Closes #278 · task
VortexStepMethod.jl-278