Repository navigation
Releases: alazarteka/klms
Release list
v0.2.4
klms 0.2.4
Correctness
- Courses that use KLMS's paged week layout now show every week. That layout
renders only the current weeks on the course page and hides earlier weeks
behind a week picker, soactivities list,files list,assignments,
quizzes,videos,boardsandlibrary syncpreviously missed earlier
weeks, and--week Nfor a past week returned nothing. When the picker offers
"All", klms now also reads that view and merges its activities without
duplicates. Courses in other layouts are unchanged and make no extra request.
No command grammar, JSON envelope version, dependency, or SQLite migration
changes.
v0.2.3
klms 0.2.3
Correctness
- Korean KLMS pages no longer fail with
UPSTREAM_SHAPE_CHANGEDwhen listing
assignments or quizzes, or when reading grade and attendance reports. Report
and coursework headers, week labels, empty-page messages, and absolute or
relative dates are recognized in Korean as well as English. Compact grade
reports without the Percentage and Contribution columns also work. - Calendar events use the card heading as their title instead of the submission
button text, and read structural timestamps first, falling back to English or
Korean date text in Asia/Seoul. Deadlines that were previously left out of
klms todayandklms upcomingnow appear. Resource URLs keep their numeric
ID and drop action parameters. A visible date that cannot be parsed remains an
explicit error rather than being silently dropped. - Scripts, templates, and hidden text are ignored when checking for empty
pages, and grade and attendance reports require enough matching columns to
avoid picking an unrelated table. Thanks to @AidenGeunGeun for the fix.
Other text locales are not verified; an unrecognized dated event fails agenda
generation rather than being omitted.
No command grammar, JSON envelope version, dependency, or SQLite migration
changes.
v0.2.2
klms 0.2.2
Correctness
klms todayandklms upcomingno longer fail withUPSTREAM_SHAPE_CHANGED
when a calendar event has no date at all, such as a quiz with no close date.
Undated events are skipped and a warning points toklms calendar list. An
event whose time is present but unreadable is still an error, because that
suggests the upstream markup changed. Thanks to @Jeon0001 for the fix.
Security
- Update
rustlsto 0.23.45 for GHSA-2mjx-qc3c-rqvc (RUSTSEC-2026-0285), which
accepted TLS 1.3 handshake messages at the wrong encryption level. The
handshake transcript stays authenticated, so this is a defense-in-depth fix.
The baseline cargo-vet exemption moves to the new version; it is recorded as
an unaudited carry-over insupply-chain/BASELINE.md.
Development checks
- Update the pinned
astral-sh/setup-uvaction to v10.2.0 (full commit SHA).
No command grammar, JSON envelope version, or SQLite migration changes.
v0.2.1
klms 0.2.1
Install and update
- Add
klms update, theupgradealias, andupdate --check. Updates use the
official stable release, verify its checksum and binary version, and update
the invoked executable without requiring a KLMS session or downgrading. - Use one candidate installer for bootstrap, source installs, and updates.
Skill-path conflicts preserve the previous executable; ordinary binary
replacement failures restore the previous skill. - Test both release targets and smoke-test packaged archives and installation
before publication. Release tags must match the binary version.
Users on 0.2.0 or earlier need to rerun the standalone installer once to gain
the update command.
Correctness
-
Reject incomplete HTTP byte ranges in direct downloads before publishing a file.
-
Preserve supported Moodle/ISO dates and space-separated timestamps; reject
malformed date suffixes instead of silently discarding times. -
Reject typed detail redirects that change the requested resource identity.
-
Return successful JSON help and version results rather than usage errors.
-
Canonicalize library reference aliases before storing edits and retractions.
-
Retain fresh file validators even when downloaded bytes are unchanged, avoiding
redundant downloads without duplicating blobs or reporting a false byte change. -
Keep bounded object-store reads inside the corpus module and preserve UTF-8
text previews when their byte bound falls inside a character. -
Clarify that absence is recorded per complete collection observation, even
when another part of a sync fails. -
Bound SSO responses and curation file/stdin reads while streaming.
-
Reject malformed resource IDs and ambiguous table headers instead of returning
unusable references or combining unrelated title/link columns. -
Reject curation on immutable blob references before writing and report malformed
stored JSON as library corruption instead of empty data. -
Make file-validation traversal deterministic and simplify command coordination,
library query rows, and skill installation internals without changing the public
command grammar or JSON fields.
Development checks
- Replace source-spelling supply-chain assertions with parsed workflow/policy
checks and behavioral fixtures, including real bootstrap rejection of untrusted
archives. The YAML parser and CI runner are pinned development tools. - Run shared fixture self-tests once, keep private updater tests beside their
implementation, and consolidate archive tests across both supported formats.
No Rust dependency updates, trust-exemption changes, JSON envelope version
change, or SQLite migration are required.
v0.2.0
klms 0.2.0
This release adds a private, versioned course library to klms. It keeps a
local history of selected KLMS data so that notices, files, and local notes can
be searched and inspected without repeatedly fetching the same pages.
Highlights
klms library syncrecords courses, resources, notices, links, and optional
downloaded file bytes. Subsequent commands can search the local collection,
inspect changes and history, and show stable references.- Downloaded files are deduplicated by SHA-256.
library contentprovides a
bounded preview, whilelibrary exportwrites the complete verified bytes
without overwriting an existing file. - Local summaries, notes, tags, and typed relationships are revisioned rather
than updated in place. Retraction preserves their history. - Notice extraction now records the post itself instead of surrounding page
navigation and counters. Notice text and attachment recovery are presented
separately when file bytes have not been downloaded. klms specexposes the executable command grammar, andklms completions
generates scripts for Bash, Elvish, Fish, PowerShell, and Zsh.klms skill installinstalls the matching companion Agent Skill embedded in
the binary.
Operational behavior
Library status distinguishes storage readiness from sync outcome and scope.
Partial, truncated, and unfinished attempts are reported explicitly; an
unfinished record does not claim that its original process is still running.
File downloads remain opt-in, and local-library operations never write to
KLMS or follow authenticated third-party links.
The machine-readable envelope is schema version 4. The local SQLite schema is
version 1 and remains experimental during the 0.x series.
Install
Prebuilt archives are available for Apple Silicon macOS and x86-64 Linux. Each
archive has a SHA-256 sidecar. The verified installer downloads the newest
release and installs both the binary and its companion skill:
curl --proto '=https' --tlsv1.2 -fsSLo install-klms.sh \
https://raw.githubusercontent.com/alazarteka/klms/main/scripts/install.sh
less install-klms.sh
bash install-klms.shBuilding from source requires Rust 1.86 or newer.
Known limitation
klms videos currently exposes a Panopto LTI launcher, not the recordings
behind it. Recording discovery is tracked in
issue #6.
v0.1.0
Full Changelog: https://github.com/alazarteka/klms/commits/v0.1.0