Commit graph

3 commits

Author SHA1 Message Date
Erik
a9c6938f0e Build, test and release on the club Gitea
Some checks failed
CI / build-and-test (pull_request) Failing after 47s
CI / release (pull_request) Has been skipped
A Forgejo workflow builds and tests every push and pull request on the
club's docker runner. A v* tag also assembles the plugin zip, checks it
with OpenAC's own plugin checker, and publishes a Gitea release with the
zip, its checksum and plugin.json.

The checker refused the manifest: both permission notes were over the
launcher's 120-character limit. They are shorter now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 16:00:00 +02:00
Erik
71f14473c6 Review fixes: telemetry session id per login; Framework number text
F1: the telemetry session id is new at every login. The original made one per
load of its assembly and its loader reloaded it at every login; the backend
counts new kills per (session id, character), so reusing one id across a
relog under-counted kills until the reset counter passed the old total.

F5/F6: .NET Framework never wrote a negative zero, and its fixed-point
formats (F7, F2, F0) rounded at fifteen significant digits, half away from
zero. Spawn and portal coordinates, kills_per_hour and the !report line now
format that way; the round-trip converter maps -0 to 0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 13:04:28 +02:00
Erik
d4bd98d984 FrameRecorder: a stand-in backend that records frames, and a shape diff
record listens where the plugin is pointed (/mm ws url) and writes every
frame to a JSON-lines file; compare reports, per frame type, whether two
recordings have the same fields in the same order with the same JSON types.
A live headless run against the local server recorded register, telemetry,
vitals, chat, combat_stats, character_stats and the share_* frames, and the
unsubscribe at logout. The same tool records the DECAL plugin (point its
endpoint here) so the two can be compared.

Also ships Newtonsoft.Json beside the plugin (a class library does not copy
its package dependencies by default; the plugin failed to load without it).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 12:39:48 +02:00