Skip to content

Make the KA-frame change load against the KiteUtils 0.13 that shipped - #56

Merged
ufechner7 merged 6 commits into
frame-unificationfrom
agent/54-update-kiteutils
Oct 11, 2026
Merged

ufechner7 merged 6 commits into
frame-unificationfrom
agent/54-update-kiteutils

Conversation

@1-Bort-1

@1-Bort-1 1-Bort-1 commented Sep 14, 2026 •

Copy link
Copy Markdown
Member

TL;DR

#50 was written before KiteUtils 0.13 was released and calls a two-argument quat2viewer that the release does not define, which stops KiteViewers precompiling at all; the caller now converts a KS attitude itself with fromKS2KA. On top of that, this branch moves to the released dependency stack: KiteUtils 0.13, KiteModels 0.12 (which writes KA orientations to SysState) and Julia 1.12/1.13. CI is green.

The call that is not there

KiteUtils v0.13.0 was released today with quat2viewer(attitude) and no second method — src/transformations.jl:140. A KS orientation is the caller's job to convert, which is what the release notes of OpenSourceAWE/KiteUtils.jl#130 say: quat2viewer(fromKS2KA(q)).

This is not a wrong-looking kite on an old log. update_system is called from the @compile_workload in src/KiteViewers.jl:139, so the method that does not exist is reached while the package is being precompiled, and using KiteViewers fails outright:

ERROR: LoadError: MethodError: no method matching
  quat2viewer(::KiteUtils.FrameQuat{KiteUtils.SysState{11,...}, Float32}, ::KiteUtils.FrameConvention)
Closest candidates are: quat2viewer(::Any)
  @ KiteUtils ~/.julia/packages/KiteUtils/xNJLj/src/transformations.jl:140
Stacktrace:
 [1] update_system(kv::KiteViewers.Viewer3D, state::KiteUtils.SysState{11,...}; scale, kite_scale, frame, wind)
 ...
 @ ~/worktrees/KiteViewers.jl-54/src/KiteViewers.jl:139
Failed to precompile KiteViewers [2e593061-95e7-45e4-95f4-df0491f2e601]

test/test_frames.jl pins what #50 promises and what this restores — that a KS attitude and the KA attitude it converts to are drawn the same way round. It reads back KiteViewers.quat[], the quaternion the kite mesh is actually rotated by, so it fails on the wrong conversion as well as on no conversion, and it does so over five attitudes rather than the demo state's one: the demo attitude, the identity, two with all four components at 0.5, and one more about a single axis. Each is written into state.orient as KA, drawn, then written again as its fromKA2KS image and drawn with frame=KS. Deleting the conversion in src/common.jl turns all five red; restoring it turns all five green. atol=1e-6 rather than the default relative tolerance, which components sitting at zero can never meet.

Moving to KiteModels 0.12 and Julia 1.12/1.13

  • Project.toml, examples/Project.toml: KiteModels = "0.12", julia = "1.12, 1.13", Pkg = "1.12, 1.13". KiteUtils 0.13 and the WinchModels and AtmosphericModels releases that accept it require Julia 1.12.
  • Manifest-v1.11.toml.default removed; Manifest-v1.12.toml.default updated by a minimal resolve: KiteModels 0.12.0, KiteUtils 0.13.1, WinchModels 0.3.12, AtmosphericModels 0.3.12, KitePodModels 0.4.2 (plus two JLLs from Julia 1.12.7). All registered versions.
  • bin/release no longer checks the 1.11 manifest; README and docs say Julia 1.12 or 1.13; CHANGELOG.md has two new Unreleased entries.
  • Tests: test_frames.jl and test_parking.jl share one Viewer3D (created only if viewer is not defined yet), because the viewer state is module-global and a second viewer in one session is unsupported (review comment on test/runtests.jl).

Before #50 can merge

This PR targets frame-unification (#50). After it merges there, frame-unification needs main merged in:

  • bin/release conflicts: main (Support Julia 1.12 and 1.13, drop Julia 1.11 #61) checks the 1.12 and 1.13 manifests, this branch only 1.12. Take main's version.
  • CHANGELOG.md conflicts: both add an Unreleased section; combine them.
  • Add a Manifest-v1.13.toml.default resolved for KiteModels 0.12 / KiteUtils 0.13 (main has one for the old stack).

Then KiteViewers can be released as v0.7.0 (breaking: update_system takes frame= instead of ned), after which OpenSourceAWE/KiteModels.jl can drop its [sources] lines that point at this branch.

Found on the way, not fixed here

Verification

  • Reproduced first: Failed to precompile KiteViewers, MethodError: no method matching quat2viewer(::FrameQuat, ::FrameConvention) — full output above
  • test/test_frames.jl red before, green after, in a KiteUtils 0.13.0 environment (5 passed; 0 passed, 5 failed with the conversion removed)
  • Local full suite on 7113008 with the registered packages (KiteModels 0.12.0, KiteUtils 0.13.1): test_frames 5/5, KiteViewers.jl 3/3; re-run from the tracked manifest with no local overrides (Pkg.resolve() moved nothing; Julia 1.12.7, examples env, exit 0) and as Pkg.test() on Julia 1.13.0 (PASS, exit 0)
  • GitHub CI green on 7048901 (first green run of this branch)
  • Docs build: not run; no public symbol is added or renamed, and update_system is already on docs/src/reference.md
  • Risk: test_parking.jl drives the viewer from a real KPS4 run writing KA, but asserts position and force, not the drawn orientation; that the kite is drawn the right way round is proven only for the five hand-written attitudes in test_frames.jl.

Scope

+58 / −2017 across 12 files against frame-unification; −1984 of that is Manifest-v1.11.toml.default. The code change is src/common.jl (two lines of conversion and the deletion of a commented-out three-line-kite block); test/test_frames.jl is new.

Opened elsewhere

Opened by 1-Bort-1, an AI agent working for @1-Bart-1.
Closes #54 · task KiteViewers.jl-54

1-Bort-1 and others added 2 commits September 14, 2026 20:42
KiteUtils 0.13 defines `quat2viewer(attitude)` and nothing else, so the
two-argument call did not just mis-draw a KS log: the `@compile_workload`
calls `update_system`, and the package failed to precompile.

Also drops the commented-out three-line kite enlargement from the same
function.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A8gC66GuqKbtyojKrcQP9M
It still allowed 0.11.13 and 0.12, against the 0.13 the root project
asks for, so the workspace could not resolve even in principle.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A8gC66GuqKbtyojKrcQP9M
@1-Bort-1 1-Bort-1 added agent:running Agent task state agent:ci Agent task state agent:queued Agent task state and removed agent:running Agent task state agent:ci Agent task state agent:queued Agent task state labels Sep 14, 2026

@1-Bort-1 1-Bort-1 left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independent review (advisory)

Verdict: APPROVE WITH COMMENTS · 1 inline, 0 off the diff

Good

  • The two-line fix matches the released KiteUtils 0.13 API — src/common.jl:373-374 now converts with fromKS2KA and calls the single-argument quat2viewer, which is what the precompile workload (src/KiteViewers.jl:139, default frame=KA) hits, so using KiteViewers can precompile again.
  • The new test pins the actual rendered value: it reads KiteViewers.quat[], the quaternion the kite mesh is rotated by, not an intermediate, so it goes red on a missing conversion.
  • Scope is exactly the stated idea (+17/-9, four files); the only extra is deleting a commented-out three-line-kite block inside the same function, which §6 asks for and the card names.
  • examples/Project.toml following the root project to KiteUtils = "0.13" is consistent — leaving it at 0.11.13, 0.12 inside one workspace would be unresolvable either way.
  • No CHANGELOG entry is the right call and is argued: #50's Unreleased entry already states the behaviour, and a line saying the previous commit did not precompile is about the branch, not the release.

Not good

  • test/runtests.jl:8 — test_frames.jl creates a Viewer3D at top level and test_parking.jl then creates a second one in the same session, which CLAUDE.md calls unsupported — the two share quat, textnode and the rest of the module globals. The assertions survive only because test_frames reads its quaternion before test_parking starts; a later reorder or a second frame test would break silently.
  • The test compares the KS path against the KA path; if the KA↔KS transform is an involution (as the card implies) it would also pass with fromKA2KS in src/common.jl:373 — numerically equivalent, but the test does not pin the name.
  • frame == KS ? ... : state.orient treats every non-KS member of FrameConvention as KA silently; harmless if the enum has exactly two members, worth a thought if it ever grows.
  • One attitude from demo_state is the whole coverage for frame=KS — flagged in the card, and acceptable while nothing else resolves.
  • Neither the new test nor the suite can actually run until KiteModels ships its 0.13 support, so this lands unverified by CI; the card is explicit about it and the PR stays draft.

claude, rubric CLEAN_CODE.md. A different lab from the implementer
on purpose: a reviewer sharing its blind spots would not flag its mistakes.

Comment thread test/runtests.jl
@1-Bort-1 1-Bort-1 mentioned this pull request Sep 14, 2026
@1-Bort-1 1-Bort-1 added agent:waiting-human Agent task state and removed agent:running Agent task state labels Sep 14, 2026
@1-Bort-1 1-Bort-1 added agent:queued Agent task state agent:running Agent task state and removed agent:waiting-human Agent task state agent:queued Agent task state agent:running Agent task state labels Sep 24, 2026
@1-Bort-1 1-Bort-1 added agent:ci Agent task state agent:queued Agent task state agent:running Agent task state and removed agent:running Agent task state agent:ci Agent task state agent:queued Agent task state labels Sep 24, 2026
ufechner7 and others added 2 commits October 11, 2026 15:04
Drop Manifest-v1.11.toml.default; bin/release only checks Manifest-v1.12.toml.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…iteUtils 0.13.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@1-Bort-1 1-Bort-1 added agent:review Agent task state and removed agent:ci Agent task state labels Oct 11, 2026
The viewer state (quat, textnode, ...) is module-global, so a second Viewer3D
in the same session is not supported. Each file creates the viewer only if it
does not exist yet, so both still run on their own.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@ufechner7
ufechner7 marked this pull request as ready for review October 11, 2026 14:42
@1-Bort-1 1-Bort-1 added agent:queued Agent task state agent:running Agent task state and removed agent:review Agent task state agent:queued Agent task state labels Oct 11, 2026
@1-Bort-1
1-Bort-1 marked this pull request as draft October 11, 2026 14:44
@1-Bort-1 1-Bort-1 added agent:ci Agent task state agent:queued Agent task state agent:running Agent task state and removed agent:running Agent task state agent:ci Agent task state agent:queued Agent task state labels Oct 11, 2026
@ufechner7

Copy link
Copy Markdown
Member

@1-Bort-1 I updated the description, you overwrote it. Why?

@1-Bort-1

Copy link
Copy Markdown
Member Author

Not on purpose: the bot rewrites the description from its own card at the end of every turn, and that card was older than your edit. Restored your description from the edit history (14:43:57) as the card, so the next write keeps it; only Verification gains this turn's runs.

@1-Bort-1 1-Bort-1 added agent:ci Agent task state and removed agent:running Agent task state labels Oct 11, 2026
@1-Bort-1

Copy link
Copy Markdown
Member Author

Local full suite: PASS (1 min, Julia 1.13.0, one cell of the matrix)

@1-Bort-1 1-Bort-1 added agent:review Agent task state and removed agent:ci Agent task state labels Oct 11, 2026
@ufechner7
ufechner7 marked this pull request as ready for review October 11, 2026 14:59
@ufechner7
ufechner7 merged commit 7654757 into frame-unification Oct 11, 2026
1 check passed
@1-Bort-1 1-Bort-1 added agent:done Agent task state and removed agent:review Agent task state labels Oct 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent:done Agent task state

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants