Repository navigation
Conversation
system_definition(s) takes the points and the springs the model integrates; topology_metadata(s) carries its structure document in a log under topology. KiteGeometry is pinned through [sources] until it is registered. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1-Bort-1
left a comment
There was a problem hiding this comment.
Independent review (advisory)
Verdict: APPROVE WITH COMMENTS · 3 inline, 0 off the diff
Good
- Connectivity comes straight from
s.springs, so there is no second copy ofSPRINGS_INPUT, as the card says; checked againstinit_springs!/loop!insrc/KPS4.jl - KCU extra mass is
set.kcu_massand nots.masses[segments+1], so the tether half-masses thatloop!adds atKPS4.jl:484are not counted twice pos_ENUis anSVectorfield in KiteGeometry'sPoint, so the definition copies the pose and does not alias the liveMVectors; confirmed in_structure.jl:73unit_stiffness = axial_stiffness * lengthgives the stiffness per length that the schema field asks for (N); matches theset.axial_stiffness / L_0construction- Both model methods share one 3-argument assembler, so there is one path from model to definition
- Deferring
connectivity_shaandto_jsonto KiteGeometry and not adding a third preimage writer is the right call; the reason is in the card - The round-trip testset protects the actual contract, a saved log parsing back to the same structure document
Not good
src/system_definition.jl:17— All 9 kite springs getd_lineandrho_tether, but KPS4 puts no mass on them (the kite points already hold all ofset.mass), and several are canopy struts, not lines. Anything that sums segment mass will read a heavier system than the one that was simulated.src/system_definition.jl:52— A 7-argument positionalMetadata(...)with two empty strings, a version literal and another empty string can't be reviewed from the diff. Keyword construction, or a KiteGeometry default, would nameconnectivity_shaand make the placeholder visible.test/test-system-definition.jl:31— This compares an immutable snapshot with spring endpoints thatloop!never changes, so it passes whatever the step does. Thenext_step!and the assertion add runtime but protect nothing beyond a check before the step.- The
[sources]pin to an unregistered KiteGeometry means./bin/releasecannot register KiteModels until the pin comes out; merging to main blocks releases until then @reexport using KiteGeometryis only in the changelog; the card never gives a reason for pushingPoint,Segment,Tether,Winch,Metadatainto every user's namespace- The
"1.0.0"and"structure_schema.yml"literals copy constants KiteGeometry owns and will drift when its schema version moves stiffness_factoris left out ofunit_stiffness, so the example (stiffness_factor=0.1) logs 10x the stiffness it actually simulated; the docstring says nothing about this- The 3-argument
system_definition(s, segments, extra_masses)is a helper, but it becomes a documented method of an exported function - Prose in
docs/src/functions.mdand the changelog is hard-wrapped, against §6
claude, rubric CLEAN_CODE.md. A different lab from the implementer
on purpose: a reviewer sharing its blind spots would not flag its mistakes.
|
Local full suite: PASS (4 min, Julia 1.13.0, one cell of the matrix) |
…nwrapped prose The bridle springs carry no mass in KPS4, so their segments get zero density. The shared constructor becomes assemble_system_definition instead of a third method of the exported system_definition. The KPS4 test drops a next_step! that no assertion depended on and pins unit_stiffness at the nominal value. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
save_log should get a method override, automatically adding the metadata. I think this method override should be in KiteGeometry.jl. Also a convenience method to easily get the system definition from a loaded log. |
save_log(logger, system_definition(s), name) and KiteGeometry.definition(log) now live in KiteGeometry, so topology_metadata goes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Done. The save_log method and the log reader are in OpenSourceAWE/KiteGeometry.jl@b9583dd, whose pull request opens with this turn: save_log(logger, system, name) stores the definition, and KiteGeometry.definition(load_log(name)) reads it back. #327 switches to them in b44220a and drops its own helper. It is in draft until a KiteGeometry release carries the change. |
Main moved the default manifests to DSP 0.8.6. Both .defaults are main's plus a resolve that adds KiteGeometry; 1.13 was resolved under Julia 1.13.0, the newest on the box, so julia_version and LibSSH2_jll go back to 1.13.0's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Fix the failing test |
CI installs registered KiteGeometry 0.1.0, which has no save_log(logger, ::SystemDefinition, name), so test-system-definition errors with a MethodError. Pin KiteGeometry through [sources] to b9583dd, the head of OpenSourceAWE/KiteGeometry.jl#50, until a release carries it. Both .defaults move only the KiteGeometry entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's manifests re-resolved against this branch's Project.toml: the only move is the KiteGeometry [sources] entry. Main's Julia 1.13.1 stamp is kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
KiteGeometry 0.1.1 carries the save_log method and log reader from OpenSourceAWE/KiteGeometry.jl#50, so the [sources] pin to that pull request's commit goes and the compat entry rises to 0.1.1. Both .defaults move only the KiteGeometry entry and project_hash. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What is the performance overhead by this change? |
Was this addressed? How could this be addressed? |
ufechner7
left a comment
There was a problem hiding this comment.
The comments must be addressed.
The six kite springs that join two kite points are canopy struts, the three ending at the KCU bridle lines; the definition now says which, without changing what KPS4 integrates. Metadata is built by keyword, which needs KiteGeometry at OpenSourceAWE/KiteGeometry.jl@50b05ac until a release carries it, so [sources] pins that commit and both manifests move only the KiteGeometry entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Left out of draft as @ufechner7 set it, though its card waits on Depends-On: OpenSourceAWE/KiteGeometry.jl release after v0.3.0. |
|
All three are addressed. Bridle mass: f100446. Strut labels: 40e5ca0. Metadata by keyword: 40e5ca0, through OpenSourceAWE/KiteGeometry.jl@50b05ac (its pull request opens with this turn). Test without the no-op step: f100446. Each comment has a reply under it. |
|
None per simulation step: the step code and the model are unchanged. The cost comes once, when you build the definition and when you save the log. Measured on KPS4 with system.yaml (Julia 1.13.0, BenchmarkTools medians, quiet box):
The numbers are now on the Benchmark line of the description of #327. |
|
Yes, both parts are now addressed.
Their diameter and stiffness stay as KPS4 simulates them: all 9 use |
# Conflicts: # src/KiteModels.jl
KiteGeometry 0.2.0 follows the slimmer awesIO core: a point is fixed or not, a segment has a rest_length, and density and stiffness move into a linear material. The KPS3 and KPS4 definitions now fill a materials table (the tether, and for KPS4 the massless kite lines) instead of per-segment density and unit_stiffness. The keyword Metadata constructor is not in 0.2.0, so [sources] pins OpenSourceAWE/KiteGeometry.jl@9c9dfd2, its merge onto 0.2.0. Both .default manifests move only the KiteGeometry entry and project_hash. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # Manifest-v1.12.toml.default # Manifest-v1.13.toml.default
OpenSourceAWE/KiteGeometry.jl#58 conflicted with KiteGeometry main after v0.3.0; its branch now merges main (ea27241). Point [sources] at that commit and raise compat to 0.3. The manifests move only the KiteGeometry entry and project_hash. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Depends-On: OpenSourceAWE/KiteGeometry.jl release after v0.3.0
Until now a KPS3 or KPS4 run described its system only through a segment count and a few settings. Nothing that reads a system definition could draw it, KiteViewers included. Now the model can describe itself as a KiteGeometry system definition: its points, the springs it integrates as segments, one tether and one winch. That definition can be saved in the log, so a viewer reading the log gets the topology the run actually integrated. KiteGeometry is re-exported, as KiteModels already does for KitePodModels, WinchModels and AtmosphericModels.
What the definition holds:
"1"upwards. Point 1 is the winch and is static.init!. The stiffness is the nominal value. The model only scales it below nominal during a start-up ramp.topology. The definition carries its connectivity checksum, so a reader can tell when a log's states were recorded against a different topology.Where I'd push back:
init!and passes it tosave_log. Its logger never sees the model, and KiteUtils' logger has nowhere to keep metadata, so an untouched script cannot carry the definition without global state. The simulation itself is unchanged.aero_force_bandtether_induced_forceevery step. It writes neither, so the KiteUtils state rename has nothing to change here.init!put them, so its positions match the first logged state. Rotating them would be one more step that a viewer would have to undo.Dependencies: this builds on KiteGeometry 0.3, whose segments name a material rather than carry their own density and stiffness. The metadata is built by keyword, which KiteGeometry 0.3.0 does not have yet. Until a release carries it, Project.toml pins KiteGeometry through
[sources]to OpenSourceAWE/KiteGeometry.jl@ea27241, the head of OpenSourceAWE/KiteGeometry.jl#58, which adds the keyword constructor on top of 0.3.0, so CI installs it. KiteModels cannot be registered with that pin, so this waits for OpenSourceAWE/KiteGeometry.jl#58 to merge and be released, then moves to that release. Both manifests are main's after a minimal resolve against this branch's Project.toml, and differ from main's only by the KiteGeometry entry. The Julia 1.13 manifest keeps main's Julia 1.13.2 standard-library entries, because the resolve ran on Julia 1.13.0.Verification
UndefVarError: STATIC not defined, thenMethodError: no method matching Metadata(; name::String, n_points::Int64)without the pinned commit.test/test-system-definition.jlchecks fixed points, rest lengths, the stiffness from each material, the massless kite lines and the segment names. It errored before the move to KiteGeometry's materials table and passes after it.examples/reel_out_4p_torque_control.jlruns to the end and logs 1800 rows of 11 points.KiteGeometry.definitionon the loaded log gives 11 points (length(kps4.pos)is 11) and 15 segments whose endpoints equal the model's springs (true):tether_1–tether_6, thenbridle_1,strut_2,strut_3,strut_4,bridle_5,bridle_6,strut_7,strut_8,strut_9. Two materials,tether(724 kg/m³) andkite_line(0 kg/m³). The stiffness from the materials matches the springs atstiffness_factor1.0, and the drum radius is 0.1615.reuseon the box).test/test-system-definition.jl,test/test-aqua.jl,test/test-update-sys-state.jlandtest/test-kps4.jltogether give 564 passes, 0 failures and 0 errors (juliaserver, Julia 1.13.0,testproject). The acceptance run below was repeated on 0.3.0 with the same result.@time_imports, Julia 1.13.0, one cold session, measured on KiteGeometry 0.1.Box: quiet. 1 of 20 cores busy, 2.6–2.7 GHz, 57 GB free.
init!.Opened elsewhere
Opened by
1-Bort-1, an AI agent working for @1-Bart-1.Closes #322 · task
KiteModels.jl-322