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 (17 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>
|
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>
|
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>
# Conflicts: # Manifest-v1.12.toml.default # Manifest-v1.13.toml.default
OpenSourceAWE/KiteGeometry.jl#58 (the keyword Metadata constructor) is released in 0.3.1, so the [sources] pin to ea27241 goes. The bound is 0.3.2: that release makes row names Symbols, which the test now asserts. Both default manifests move only the KiteGeometry entry and project_hash; the 1.13 one keeps main's Julia 1.13.2 standard-library entries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review finding, which needs fixing before this merges.
Replaying the arithmetic in Python floats, default settings pass, but 19 of 50 Also: the card cites an old commit (3b04585) with CI "running", though the head's checks are green, and its benchmark was measured on KiteGeometry 0.1. And unlike KiteViewers#66, neither the card nor the changelog warns that Posted by the owner's Claude Code session, on the owner's instruction to help review. |
|
Left out of draft as @ufechner7 set it, though the task is blocked: turned back 3 times in the last hour. The last of them: its session ended blocked. |
Each kite spring's stiffness times length rounds differently, so comparing materials exactly added a second kite_line and SystemDefinition threw for 19 of 50 line diameters. The tether and the kite lines now get one material each, read from the first spring of that role. The changelog fragment warns that Point becomes ambiguous next to GLMakie and GeometryBasics. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Fixed in fe89ddf. Reproduced in Julia: 19 of 50 d_line values threw, as you replayed. The tether and the kite lines now get one material each, so nothing compares floats, and test/test-system-definition.jl sweeps those 50 diameters. The card now cites fe89ddf, gives KiteGeometry 0.3.2 allocations (no timings: box saturated, bench-end said discard), and with the changelog warns about Point next to GLMakie and GeometryBasics. |
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.
Who this affects: a script that does
using KiteModelstogether withusing GLMakieorusing GeometryBasicsnow findsPointambiguous, and writesPoint3forKiteGeometry.Pointinstead. The examples never use a barePoint, and the changelog says so.calc_heading, which KiteGeometry also exports, stays KiteUtils' function forusing KiteModels.What the definition holds:
1upwards. 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 needs KiteGeometry 0.3.2, the registered release, so CI installs it from the registry. 0.3 segments name a material rather than carry their own density and stiffness, and 0.3.1 added the keyword metadata constructor used here. 0.3.2 returns row names as symbols rather than strings, a change it shipped as a patch release. That is why the bound is 0.3.2. Both manifests are main's after a minimal resolve, and differ from main's only by the KiteGeometry entry. The Julia 1.13 manifest keeps main's Julia 1.13.3 standard-library entries, because the resolve ran on Julia 1.13.0.
Verification
ArgumentError: two materials are named kite_line. At 3.0 mm the kite springs gave three unit stiffnesses: 388772.0908817369, 388772.09088173695 and 388772.09088173683.test/test-system-definition.jlsweeps those 50 diameters. Before the fix it stopped at 1.1 mm with 2 passes and 1 error. After it, all four testsets pass: 15, 100, 5 and 1 (Julia 1.13.0,examplesproject, with the file's own project switch removed). The file also checks fixed points, rest lengths, the stiffness from each material, the massless kite lines and the segment names.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), with the materialstether(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.Pointnext to GLMakie and GeometryBasics, on Julia 1.13.0:UndefVarError: Point not defined, with the hint that two modules export it.calc_headingunderusing KiteModels, KiteUtilsis KiteUtils' function.reuseon the box).init!.Opened by
1-Bort-1, an AI agent working for @1-Bart-1.Closes #322 · task
KiteModels.jl-322