Repository navigation
Read and write awesIO's materials, slimmer core and wing frames, and load SymbolicAWEModels' YAML with the kite at zenith - #54
Merged
1-Bart-1 merged 4 commits intoOct 15, 2026
Conversation
Re-vendors the schema and the V3 documents at 1-Bart-1/awesIO@99a36e2 and regenerates the types: optional columns become fields that may be unset and are written only where a row fills them, materials are a block segments, tubes and a wing's canopy refer into, and a wing carries its KA frame. pos_KA puts a world position into a wing's KA frame. The authoring loader follows in the next commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
load_authoring writes segment stiffness and density as linear materials, named after the variables mapping giving them, and a breukels2011 tube law as a material with SAM's constants. A point's type becomes fixed and SAM's column; drag, station, pulley and body types are read only by SAM's models. Transforms only shift their members to the base position, so each wing's KA frame is the authoring frame shifted, with the identity rotation, and the transforms block stays as an extra. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1-Bort-1
commented
Oct 15, 2026
1-Bort-1
left a comment
Member
Author
There was a problem hiding this comment.
Independent review (advisory)
Verdict: APPROVE WITH COMMENTS · 3 inline, 0 off the diff
Good
- Tracks the plan: materials table, slimmer core, per-wing
pos_ENU/Q_KA2ENU, kite at zenith withtransformskept as an extra block, and the BREAKING renames all appear in the generated types, the loader and the changelog fragment. - Generated header and
AWESIO_VERSIONmatchgen/awesio.toml(99a36e2, 0.1.0), so schema, generated file and pin agree. model_valuewas moved, not lost:rgshows it insrc/models.jl:69, used by bothdocument.jlandauthoring_model.- Rewriting
resolve_materialin Young's modulus keeps the damping the same:damping_per_stiffness * stiffness * areaequals the olddamping_per_stiffness * unit_stiffness. - Nothing was left orphaned when transforms stopped rotating:
WingFrame/authored_frameare still used bywing_body_pose, andwrap2piwas dropped from the imports. - Point
typeand drag still reach SymbolicAWEModels through the stand-in models in the tests (POINT_MODEL_COLUMNSin test/test-authoring.jl:145), as the card says.
Not good
src/authoring.jl:482— A nonlinear line material is always named after its law, butmaterial!only reuses a row when law and parameters both match. Two segments with the same law and different densities therefore push twoMaterialrows with the same name, which writes a document that breaks name uniqueness and makes thematerialreference ambiguous.src/authoring.jl:804— Every breukels2011 material holds the module-levelBREUKELS2011OrderedDictitself, not a copy. Any change to one document's material parameters therefore silently changes the constant for every later load.src/authoring.jl:529—extra_massis forced to0.0when a row leaves it out (and passed as0.0for tether points at line 724). Every authored document therefore writes the optional column as zeros, against the card's 'left out, not written as zero'.- docs/src/structure.md:10-11: one paragraph is now half hard-wrapped (old line breaks, then one long line); §6 says prose is never hard-wrapped.
- docs/src/structure.md:51 and :76 each gained several clauses in one paragraph; the authoring paragraph now repeats what the
load_authoringdocstring says (§7 accretion). - The
variablesblock is resolved twice:yaml_variables(authored)at authoring.jl:850 redoes whatresolve_yaml_variablesjust did; it could return the resolved variables instead. load_authoringworks out each wing's origin by diffingbody_posbefore and afterplace!(authoring.jl:873-875);Placementcould record its own shift instead of the caller rebuilding it.- Every wing's
Q_KA2ENUis written as identity, while the wing's body keeps the rotation from its reference points; if those points tilt the frame, the wing's KA and its body's KA disagree, and nothing tests that case. Materials(load accumulator),Material(row type) and thematerialskeyword/field sit very close in name in one file; a name likeMaterialTablewould separate them.- The card does not say what was searched before adding
Materials,material!,variable_nameandyaml_variables(§2). - A linear material falls back to the first segment's name; that name could match a variable-named or law-named material and reuse the duplicate-name path below.
claude, rubric CLEAN_CODE.md. A different lab from the implementer
on purpose: a reviewer sharing its blind spots would not flag its mistakes.
The authoring test computes pairwise distances with LinearAlgebra.norm; Pkg.test loads only what test/Project.toml lists, so it failed with "Package LinearAlgebra not found in current path". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
Author
|
Local full suite: PASS (2 min, Julia 1.13.0, one cell of the matrix) |
Two materials of one law and different parameters, or a linear one falling back to a name already taken, now get name_2, name_3, ... A breukels2011 tube's material copies the module constant. The YAML variables are resolved once. Materials is renamed MaterialTable, and the structure page's authoring paragraph no longer repeats the load_authoring docstring. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1-Bort-1
marked this pull request as ready for review
October 15, 2026 16:41
1-Bart-1
deleted the
agent/53-kitegeometry-jl-each-wing-s-frame-read-w
branch
October 15, 2026 17:07
This was referenced Oct 15, 2026
Open
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.
KiteGeometry now reads and writes the structure documents awesIO
maindefines. Three schema changes landed there since the version vendored here: a materials table (1-Bart-1/awesIO#28), a slimmer core (1-Bart-1/awesIO#32), and a frame for each wing (1-Bart-1/awesIO#36). Both V3 example documents load and write back unchanged.A segment, a tube and a wing's canopy now name a material: a stiffness law and its parameters. A point is its name, whether it is fixed, the body it rides and its position. Rest length, diameter, mass, inertia, pressure and a winch's drum are optional columns. A document that leaves one out gets it back left out, not written as zero.
What the slimmer core dropped is no longer a field here: a point's type and drag, a station's and a body's type, a pulley's type and efficiency. SymbolicAWEModels reads those through the models it registers. The tests register stand-ins for those models until it does.
Each wing now records where its own frame is: the origin and rotation of the frame its aerodynamic mesh is drawn in. One new function puts a world position into that frame:
Loading SymbolicAWEModels' authoring YAML no longer turns the kite to its launch elevation. It shifts the authored positions so the tether's ground point sits where the file puts it, with the kite straight above, as awesIO's convention places it. The wing's frame is the authored frame, shifted, with no rotation. The file's transforms are kept in the document as an extra block, for SymbolicAWEModels to apply when a run starts. Each line's stiffness and density become a material, named after the
variablesentry that gives them (dyneema,wing_element). Two different materials that would share a name get_2,_3added. A Breukels tube gets its own copy of SymbolicAWEModels' constants.Breaking. Reading refuses awesIO 1.0.0 documents; awesIO is at 0.1.0.
Stationis nowSpanwiseStationandDynamicsTypeis gone. A body's rotation isQ_KA2ENUand a segment's rest lengthrest_length.Where you may push back. The writer used to name a table's default model in a
modelcolumn on every row. It now leaves that column out when every row reads its block's default, and it leaves out a model column no row fills. Otherwise neither V3 document writes back equal while SymbolicAWEModels' pulley model, which reads theirefficiencycolumn, is registered: every pulley row would gain amodelcell. Reading the file back gives the same models.Not covered. Points a tether adds still carry no SymbolicAWEModels model, so their type and drag cells are empty. Choosing them is SymbolicAWEModels' to do when it adopts this, as is applying the transforms at run start. Which points a transform moves is not in the document.
Before adding the materials table and its naming, I searched the package for existing material, variable-lookup and name-deduplication helpers. The only one was the YAML
variablesresolver, which the naming now reuses.Stacked on #52, which merges first.
Verification
pos_KAreproduces the conventions page's worked example ([3, 6, 51] about [3, 4, 50], turned 90° about z, is [2, 0, 1]).test/test-authoring.jlin the worktree session: 431 pass. That includes new tests: two materials of one law and different parameters get distinct names, and a Breukels tube's material is not the shared constant. Neither test was run against the code before the fix.Pkg.test, Julia 1.13, one cell): red at 56535a0,Package LinearAlgebra not found in current path, because the test environment did not list a package the authoring test uses. Green after declaring it (1 min, exit 0). Rerun on the review fixes: pending.mainalready has · up to date with Read a model column that holds one number or one per axis #52 andmainreuseis not installed on the box); CI runs it · GitHub CI: pendingOpened by
1-Bort-1, an AI agent working for @1-Bart-1.Closes #53 · task
KiteGeometry.jl-53