2026-09-16 19:24:59 +02:00
|
|
|
# Generated by pub
|
|
|
|
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
|
|
|
|
packages:
|
|
|
|
|
_fe_analyzer_shared:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: _fe_analyzer_shared
|
|
|
|
|
sha256: "1b0e6a07425a3e460666e88bf1c949ccc7bb0116ad562ce94a1eca60fe820725"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "103.0.0"
|
chore(lint): LeanCode's strict rules and a pre-push check
The workspace root's analysis_options.yaml includes leancode_lint 27 and enables its analyzer plugin (rules for blocs, Equatable and Flutter layout); the server and the app include that file, while the generated client keeps its own options. Plugins can only be enabled at the root of a pub workspace and only reach packages whose options include the root file, which was verified before settling on this layout. Most rules are warnings, casts, inference and raw types are strict, and the check treats infos as fatal too. lints and flutter_lints are no longer needed.
tool/check.sh checks formatting, runs dart analyze --fatal-infos and the server tests; .git/hooks/pre-push links to it, so every push has to pass it. AGENTS.md describes the checklist and how to install the hook in a fresh clone.
Fixes for the new rules: package imports, run() returns Future<void>, the server setup as one cascade, a primary constructor for the app widget, a const and a redundant argument. The workspace root keeps its conventional name `_` with a documented ignore.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-29 23:06:29 +02:00
|
|
|
analysis_server_plugin:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: analysis_server_plugin
|
|
|
|
|
sha256: c58b2a05b260a023eefd0848496ff6b113a318c6c95dad4215165a4bd54ae600
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.18"
|
2026-09-16 19:24:59 +02:00
|
|
|
analyzer:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: analyzer
|
|
|
|
|
sha256: "61c04d0c1bfed555c681ea079519933f071a5a026578ff73c4ff0df2d3462e5e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "13.3.0"
|
chore(lint): LeanCode's strict rules and a pre-push check
The workspace root's analysis_options.yaml includes leancode_lint 27 and enables its analyzer plugin (rules for blocs, Equatable and Flutter layout); the server and the app include that file, while the generated client keeps its own options. Plugins can only be enabled at the root of a pub workspace and only reach packages whose options include the root file, which was verified before settling on this layout. Most rules are warnings, casts, inference and raw types are strict, and the check treats infos as fatal too. lints and flutter_lints are no longer needed.
tool/check.sh checks formatting, runs dart analyze --fatal-infos and the server tests; .git/hooks/pre-push links to it, so every push has to pass it. AGENTS.md describes the checklist and how to install the hook in a fresh clone.
Fixes for the new rules: package imports, run() returns Future<void>, the server setup as one cascade, a primary constructor for the app widget, a const and a redundant argument. The workspace root keeps its conventional name `_` with a documented ignore.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-29 23:06:29 +02:00
|
|
|
analyzer_plugin:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: analyzer_plugin
|
|
|
|
|
sha256: c2a75baf1657171cc7872db96a12b07e385873cf7a73f2b4f7638e9d0701ee53
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.14.12"
|
2026-09-30 08:38:08 +02:00
|
|
|
android_file_picker:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: android_file_picker
|
|
|
|
|
sha256: "14ab27769b54c48d5a8a71aa9858372b7a3ae77572ea0a8aee744643c5d8c53d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0"
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
android_libcpp_shared:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: android_libcpp_shared
|
|
|
|
|
sha256: eefa60d36972d1b12f566ff94431a97f2666a6c28bd6fa6184e81f88968708e5
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.2.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
animations:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: animations
|
|
|
|
|
sha256: "9cb469212ea51be27097f23b519d594c01171721347b55df9334fff653659e7f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.0"
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
ansi_styles:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: ansi_styles
|
|
|
|
|
sha256: "9c656cc12b3c27b17dd982b2cc5c0cfdfbdabd7bc8f3ae5e8542d9867b47ce8a"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.2+1"
|
2026-09-30 08:38:08 +02:00
|
|
|
appflowy_editor:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
2026-09-30 21:49:04 +02:00
|
|
|
path: "."
|
2026-10-11 19:49:13 +02:00
|
|
|
ref: "81c3006c74e789ed2e470b8612529541b358fd26"
|
|
|
|
|
resolved-ref: "81c3006c74e789ed2e470b8612529541b358fd26"
|
2026-09-30 21:49:04 +02:00
|
|
|
url: "https://code.halkyon.app/project-halkyon/appflowy-editor.git"
|
|
|
|
|
source: git
|
2026-09-30 08:38:08 +02:00
|
|
|
version: "6.1.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
archive:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: archive
|
|
|
|
|
sha256: "6c5bcd986e06b94e3c40244af471750840a3d2341d1f9763a1100a14add517b4"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.3.0"
|
|
|
|
|
args:
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
dependency: "direct dev"
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: args
|
|
|
|
|
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.7.0"
|
|
|
|
|
asn1lib:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: asn1lib
|
|
|
|
|
sha256: "9a8f69025044eb466b9b60ef3bc3ac99b4dc6c158ae9c56d25eeccf5bc56d024"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.6.5"
|
|
|
|
|
async:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: async
|
|
|
|
|
sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.13.1"
|
Import Anki decks with their files and history
Files in content: the person's images and sounds as asset rows synced like
all content, their files kept by hash on each device, uploaded after each
sync, downloaded on demand and checked against their hash
(core/asset/AssetRepository). Rich text names them as asset:<id> URLs, in
the editor's image block and an audio block of ours; any other URL is never
fetched. Sounds play through audioplayers, one at a time. Content holding
only an image or a sound isn't blank, and lists show it as such.
The Anki import ("Import from Anki" under Add material): .apkg and .colpkg
packages in all three formats Anki has written, read on an isolate of their
own. Modern packages compress everything with zstd in frames that don't
record their size, which pure_zstd v1.0.0 refuses; our fork decodes them.
Fields become rich text by a converter of our own (lines, lists, formatting,
images, sounds, cloze deletions hidden on the front). One card per note,
the files first, studysets as chosen (flatten, sub-studysets, or tags by
subdeck), the notes' tags, and, if wanted, the review history, which FSRS
replays: the first template's reviews to the card's schedule, a reversed
note type's second to the reverse one.
Imported cards say where they came from in their first revision (card
schema 3); the dashboard doesn't count them as written. The test fixtures
are exported by Anki itself (tool/anki/make_fixtures.py).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-02 04:52:02 +02:00
|
|
|
audioplayers:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: audioplayers
|
|
|
|
|
sha256: "2ba4bb2944baacbdd5372ff8254a8e7feb8c10d7739545e392f5605a8f618745"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.8.1"
|
|
|
|
|
audioplayers_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: audioplayers_android
|
|
|
|
|
sha256: f5ff5b15620fbab8cb0849e9636c48e2b96c3f0f71723bbbe2ad3c761b205f05
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "5.3.0"
|
|
|
|
|
audioplayers_darwin:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: audioplayers_darwin
|
|
|
|
|
sha256: "1ca553add991384ecf421b9569da850f3ab2472ffb83f6970b0416365abc51be"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.5.0"
|
|
|
|
|
audioplayers_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: audioplayers_linux
|
|
|
|
|
sha256: "15178b726b7cdee5364d0463c8d445630c4e0fb7d26612b73c767e7d25de9417"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.3.0"
|
|
|
|
|
audioplayers_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: audioplayers_platform_interface
|
|
|
|
|
sha256: "765f6f0e6dca55cb471c9483fc77700564b3484d19198aca4ebb5147c6c85acb"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.2.0"
|
|
|
|
|
audioplayers_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: audioplayers_web
|
|
|
|
|
sha256: ae1e0103c865a03e273f6d13d97b93f5595eac09915729cd5e37ef96e2857319
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "5.3.0"
|
|
|
|
|
audioplayers_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: audioplayers_windows
|
|
|
|
|
sha256: a70ae82bba2dfcb6eb03dd4815d737a2d46d33ea5a96a03f535cfcaac490e413
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.4.1"
|
2026-09-30 08:38:08 +02:00
|
|
|
barcode:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: barcode
|
|
|
|
|
sha256: "7b6729c37e3b7f34233e2318d866e8c48ddb46c1f7ad01ff7bb2a8de1da2b9f4"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.9"
|
|
|
|
|
bidi:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: bidi
|
|
|
|
|
sha256: "77f475165e94b261745cf1032c751e2032b8ed92ccb2bf5716036db79320637d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.13"
|
feat(app): sign in anonymously on first launch
The app's first patterns. Dependencies (lib/src/core/dependencies) is the composition root, built at startup and handed down by DependenciesScope; it replaces the scaffold's global client and restores a stored session before the first frame, so a restart never creates a second anonymous account. AuthGateway with ServerpodAuthGateway is the boundary to the server's authentication, AuthRepository signs in anonymously when nobody is signed in, and SessionBloc (flutter_bloc) keeps a person signed in, also after signing out or a revoked session. SessionGate shows a spinner while signing in, offers to try again when that fails, and builds the app anew for every person. AccountButton explains that progress is saved on this device and asks before signing out of an anonymous account, which can't be restored. AppBlocObserver logs all blocs.
Tests: the repository, the bloc's sequences (a stored session is kept, a failed sign-in is retried, signing out starts anew), and the widgets, including that cancelling the sign-out keeps the account. test/support holds the fake gateway and testDependencies(). AGENTS.md describes the composition root and the test factory.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 09:04:02 +02:00
|
|
|
bloc:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: bloc
|
|
|
|
|
sha256: e03b235924e4f509c27b5d6b2f949200e0a91149a9818b4f65eeb56662b75413
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "9.2.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
boolean_selector:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: boolean_selector
|
|
|
|
|
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.2"
|
|
|
|
|
buffer:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: buffer
|
|
|
|
|
sha256: "389da2ec2c16283c8787e0adaede82b1842102f8c8aae2f49003a766c5c6b3d1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.3"
|
|
|
|
|
cbor:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: cbor
|
|
|
|
|
sha256: "2c5c37650f0a2d25149f03e748ab7b2857787bde338f95fe947738b80d713da2"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.5.1"
|
|
|
|
|
characters:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: characters
|
|
|
|
|
sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.4.1"
|
|
|
|
|
charcode:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: charcode
|
|
|
|
|
sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.4.0"
|
fix(app): the app has its own icon instead of Flutter's
The launcher showed Flutter's logo: the project template's icons were
never replaced. tool/app_icons.py now makes every icon from the
kingfisher (assets/icon/halkyon_icon.png), through flutter_launcher_icons
v0.14.4 configured in the app's pubspec: Android's adaptive icon (the
kingfisher inset 16 % on white, for each launcher to cut to its shape)
and the square one before Android 8; iOS's, without transparency;
macOS's, the rounded tile on Apple's grid (824 of 1024 pixels); and
Windows', the rounded tile, its .ico with every size from 16 to 256
pixels (the tool writes only 256). It keeps the iOS project file as it
was, which the tool would break (flutter_launcher_icons issue 634), and
writes the snap's icon as tool/snap_icon.py did, which it replaces.
The Linux runner gives its window the bundled icon too, for desktops
that don't take it from the desktop file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-06 22:49:25 +02:00
|
|
|
checked_yaml:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: checked_yaml
|
|
|
|
|
sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
cli_config:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: cli_config
|
|
|
|
|
sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.2.0"
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
cli_launcher:
|
fix(app): the app has its own icon instead of Flutter's
The launcher showed Flutter's logo: the project template's icons were
never replaced. tool/app_icons.py now makes every icon from the
kingfisher (assets/icon/halkyon_icon.png), through flutter_launcher_icons
v0.14.4 configured in the app's pubspec: Android's adaptive icon (the
kingfisher inset 16 % on white, for each launcher to cut to its shape)
and the square one before Android 8; iOS's, without transparency;
macOS's, the rounded tile on Apple's grid (824 of 1024 pixels); and
Windows', the rounded tile, its .ico with every size from 16 to 256
pixels (the tool writes only 256). It keeps the iOS project file as it
was, which the tool would break (flutter_launcher_icons issue 634), and
writes the snap's icon as tool/snap_icon.py did, which it replaces.
The Linux runner gives its window the bundled icon too, for desktops
that don't take it from the desktop file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-06 22:49:25 +02:00
|
|
|
dependency: transitive
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
description:
|
|
|
|
|
name: cli_launcher
|
|
|
|
|
sha256: d2dd1baf7ae4ff1550e731dcb8fe669a5c652903e833f75359c178222c44214e
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.4"
|
|
|
|
|
cli_util:
|
|
|
|
|
dependency: "direct overridden"
|
fix(app): the app has its own icon instead of Flutter's
The launcher showed Flutter's logo: the project template's icons were
never replaced. tool/app_icons.py now makes every icon from the
kingfisher (assets/icon/halkyon_icon.png), through flutter_launcher_icons
v0.14.4 configured in the app's pubspec: Android's adaptive icon (the
kingfisher inset 16 % on white, for each launcher to cut to its shape)
and the square one before Android 8; iOS's, without transparency;
macOS's, the rounded tile on Apple's grid (824 of 1024 pixels); and
Windows', the rounded tile, its .ico with every size from 16 to 256
pixels (the tool writes only 256). It keeps the iOS project file as it
was, which the tool would break (flutter_launcher_icons issue 634), and
writes the snap's icon as tool/snap_icon.py did, which it replaces.
The Linux runner gives its window the bundled icon too, for desktops
that don't take it from the desktop file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-06 22:49:25 +02:00
|
|
|
description:
|
|
|
|
|
name: cli_util
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
sha256: "71e43f1976c3eae2d9468a5b4d6600bf8cae61508b87f27fa1799228935d48ab"
|
fix(app): the app has its own icon instead of Flutter's
The launcher showed Flutter's logo: the project template's icons were
never replaced. tool/app_icons.py now makes every icon from the
kingfisher (assets/icon/halkyon_icon.png), through flutter_launcher_icons
v0.14.4 configured in the app's pubspec: Android's adaptive icon (the
kingfisher inset 16 % on white, for each launcher to cut to its shape)
and the square one before Android 8; iOS's, without transparency;
macOS's, the rounded tile on Apple's grid (824 of 1024 pixels); and
Windows', the rounded tile, its .ico with every size from 16 to 256
pixels (the tool writes only 256). It keeps the iOS project file as it
was, which the tool would break (flutter_launcher_icons issue 634), and
writes the snap's icon as tool/snap_icon.py did, which it replaces.
The Linux runner gives its window the bundled icon too, for desktops
that don't take it from the desktop file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-06 22:49:25 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
version: "0.5.2"
|
2026-09-16 19:24:59 +02:00
|
|
|
clock:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: clock
|
|
|
|
|
sha256: e51d50bca3217c9a9fa2b41a30e4a38971133f5f9ec7a3d57bae095007f1d28e
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.3"
|
|
|
|
|
code_assets:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: code_assets
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
version: "1.2.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
collection:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: collection
|
|
|
|
|
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.19.1"
|
|
|
|
|
config:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: config
|
|
|
|
|
sha256: "28dbe3a3b2881f929787d50681d7a3c37b0e7ed928232bf6e24f12995ec6c102"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.1"
|
|
|
|
|
connectivity_plus:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: connectivity_plus
|
|
|
|
|
sha256: "762c99f890ca8bf87f7337236f99edd42793843bc6c3631da294a76653a54bd0"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.3.1"
|
|
|
|
|
connectivity_plus_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: connectivity_plus_platform_interface
|
|
|
|
|
sha256: "3c09627c536d22fd24691a905cdd8b14520de69da52c7a97499c8be5284a32ed"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.0"
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
conventional_commit:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: conventional_commit
|
|
|
|
|
sha256: c40b1b449ce2a63fa2ce852f35e3890b1e182f5951819934c0e4a66254bc0dc3
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.6.1+1"
|
2026-09-16 19:24:59 +02:00
|
|
|
convert:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: convert
|
|
|
|
|
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.2"
|
|
|
|
|
coverage:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: coverage
|
|
|
|
|
sha256: "956a3de0725ca232ad353565a8290d3357592bf4250f6f298a185e2d949c5d3d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.15.1"
|
2026-09-30 08:38:08 +02:00
|
|
|
cross_file:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: cross_file
|
|
|
|
|
sha256: f141ea4f277af142a0356955707f6556f37b03947d39d55585981a06ca437bd6
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.5+5"
|
2026-09-16 19:24:59 +02:00
|
|
|
crypto:
|
build(release): a Dart release tool for every app
tool/release.dart releases one app: `dart run tool/release.dart learn
[major | minor | patch] [--dry-run]`, each app configured in Dart beside
it (apps/learn/release.dart). Every step and check of tool/release.sh
is kept: the repository as pushed, resuming after a release commit and
tag, Flutter as CI pins it, the tools, the key and its certificate pin,
secrets asked for without echo and never written down, CI green on the
newest commit, the signed release commit and tag by a key deploys
accept, the APK built from a checkout of the tag and checked, the snap,
the signed checksums, pushing only after both builds passed, the
release on Forgejo, the F-Droid repository, the Snap Store once a
channel is set.
New: tags per app (learn-v0.19.0, Learn's v… counting as its
history); only commits touching the app decide its version (its folder,
the shared packages it uses by path, the root pubspec and lock, its
release files, where its packages were before the move); --dry-run
reads all of it, lists every step and the notes, and what a release
would refuse, changing nothing. The pure parts are tested in
test/release/. Learn releases build 21 with tool/release.sh, then
switches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:12:31 +02:00
|
|
|
dependency: "direct dev"
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: crypto
|
|
|
|
|
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.7"
|
feat(auth): a password with TOTP on the register, and resets
The register's side of signing in with an address, a password that never
leaves the device (SRP-6a) and a code from an authenticator (ADR 0017),
with members forwarding every step through AccountRegister:
- password.set: salt, Argon2id's costs, SRP's verifier, the public keys
and the private keys wrapped twice, all made on the device; with the
address a mailed code proves, an anonymous person becomes identified
under their ID. It signs in once an authenticator is confirmed.
- passwordSignIn.begin and complete: SRP's two steps with a TOTP or
recovery code. An address nobody has is answered from a decoy key as
an account would be; every wrong credential is refused alike.
- authenticator: secrets sealed under totpKey (XChaCha20-Poly1305, bound
to their row), each code accepted once, ten recovery codes with the
first, the last one kept.
- accountRecovery: a lost authenticator reset 72 hours after the
password and a mailed code or the recovery phrase ask, a lost password
set anew with the phrase's signature, or the account reset with new
keys 72 hours after a mailed code asks; a mail at each start, a
sign-in calling it off.
- An account with a password no longer signs in by a mailed code or
GitHub; no new GitHub account is linked where passwords are offered,
and from GITHUB_SIGN_IN_ENDS GitHub signs nobody in and its IDs go.
Five tables, added by the module's migration; deletePerson deletes
their rows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-20 13:32:12 +02:00
|
|
|
cryptography:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: cryptography
|
|
|
|
|
sha256: "3eda3029d34ec9095a27a198ac9785630fe525c0eb6a49f3d575272f8e792ef0"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.9.0"
|
2026-09-30 08:38:08 +02:00
|
|
|
csslib:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: csslib
|
|
|
|
|
sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.2"
|
2026-09-16 19:24:59 +02:00
|
|
|
cupertino_icons:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: cupertino_icons
|
|
|
|
|
sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.9"
|
2026-09-29 23:11:00 +02:00
|
|
|
cupertino_ui:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: cupertino_ui
|
|
|
|
|
sha256: c23816577a1280cff409e989541767887011f8f1d8c1863a794ed308af46f2a9
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.1"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
dart_earcut:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: dart_earcut
|
|
|
|
|
sha256: e485001bfc05dcbc437d7bfb666316182e3522d4c3f9668048e004d0eb2ce43b
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
dart_jsonwebtoken:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: dart_jsonwebtoken
|
|
|
|
|
sha256: ad84e60181696513d04d5f2078e0bbc20365b911f46f647797317414bdc88fbe
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.4.1"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
dart_polylabel2:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: dart_polylabel2
|
|
|
|
|
sha256: "7eeab15ce72894e4bdba6a8765712231fc81be0bd95247de4ad9966abc57adc6"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.0"
|
chore(lint): LeanCode's strict rules and a pre-push check
The workspace root's analysis_options.yaml includes leancode_lint 27 and enables its analyzer plugin (rules for blocs, Equatable and Flutter layout); the server and the app include that file, while the generated client keeps its own options. Plugins can only be enabled at the root of a pub workspace and only reach packages whose options include the root file, which was verified before settling on this layout. Most rules are warnings, casts, inference and raw types are strict, and the check treats infos as fatal too. lints and flutter_lints are no longer needed.
tool/check.sh checks formatting, runs dart analyze --fatal-infos and the server tests; .git/hooks/pre-push links to it, so every push has to pass it. AGENTS.md describes the checklist and how to install the hook in a fresh clone.
Fixes for the new rules: package imports, run() returns Future<void>, the server setup as one cascade, a primary constructor for the app widget, a const and a redundant argument. The workspace root keeps its conventional name `_` with a documented ignore.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-29 23:06:29 +02:00
|
|
|
dart_style:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: dart_style
|
|
|
|
|
sha256: "82ade9fc4273f29ed673e33166944465225b4f7fc5d4aaef48605cc751c18fc1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.13"
|
2026-09-16 19:24:59 +02:00
|
|
|
dbus:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: dbus
|
|
|
|
|
sha256: a48d5da28e89bd02196e80d81ed8d7954923d00a0f4a68cc20b575038f023383
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.7.15"
|
|
|
|
|
desktop_webview_window:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: desktop_webview_window
|
|
|
|
|
sha256: b6fdae2cbf9571879b1761c12f27facaf82e22d0bdc74d049907c2a09a432957
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.0"
|
2026-09-30 08:38:08 +02:00
|
|
|
device_info_plus:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: device_info_plus
|
|
|
|
|
sha256: "0891702f96b2e465fe567b7ec448380e6b1c14f60af552a8536d9f583b6b8442"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "13.2.0"
|
|
|
|
|
device_info_plus_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: device_info_plus_platform_interface
|
|
|
|
|
sha256: "04b173a92e2d9161dfead145667037c8d834db725ce2e7b942bfe18fd2f45a46"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "8.1.0"
|
|
|
|
|
diff_match_patch:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: diff_match_patch
|
|
|
|
|
sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.4.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
email_validator:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: email_validator
|
|
|
|
|
sha256: b19aa5d92fdd76fbc65112060c94d45ba855105a28bb6e462de7ff03b12fa1fb
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.0"
|
2026-10-18 20:35:21 +02:00
|
|
|
enum_to_string:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: enum_to_string
|
|
|
|
|
sha256: "93b75963d3b0c9f6a90c095b3af153e1feccb79f6f08282d3274ff8d9eea52bc"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.1"
|
2026-09-30 08:38:08 +02:00
|
|
|
equatable:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: equatable
|
|
|
|
|
sha256: ea36e500cbf0ec18361deabca755434f73e42fe53c5130021c7e2d6b5ebe1702
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.0"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
executor_lib:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: executor_lib
|
|
|
|
|
sha256: "95ddf2957d9942d9702855b38dd49677f0ee6a8b77d7b16c0e509c7669d17386"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.2"
|
feat(app): the UI foundation: theme, tabs and routes, strings
The app gets its look and navigation before more features land on them.
- Theme (core/theme/): hand-written light and dark Material 3 colour schemes around
cobalt and copper; ThemeExtras for the colours Material has no role for (states, the
four FSRS ratings); the 20 colours a person can give content. Tests hold text to WCAG
AA contrast on each palette colour and on the dark theme's primary colour and surface.
- Layout and shared widgets: Material 3's window-size classes (core/layout/);
SectionCard, AppLoadingIndicator, confirmDestructiveAction and FoundById
(core/widget/). Lucide icons.
- Navigation with go_router: four tabs (Home, Library, Explore, Profile), each keeping
its own stack of screens, as a navigation rail with the app's icon from 600 dp and as
a navigation bar below; choosing the open tab again returns to its first screen. A
studyset's screen sits in the library; studying, cards and settings cover the tabs.
- Routes carry ids: FoundById finds the item in the repository's live list, so a
studyset deleted on another device, or an old link, says it no longer exists. A
screen that deletes its own item keeps showing it while it closes, rather than
flashing that message.
- Every person gets an app of their own (PersonApp, lib/src/app/): a
MaterialApp.router with its own GoRouter and PersonScope around the navigator, built
by SessionGate inside the person's keyed subtree. Screens read the person's
repositories wherever they are built, so the static route() helpers and the listener
that closed every pushed screen on a change of person are gone: a change of person
now disposes the whole router and starts again at home.
- The account dialog becomes the Profile tab, with Settings (sign out, delete the
account, About) behind a gear. A waiting GitHub sign-in now keeps waiting while
another tab shows; a change of person still cancels it.
- The new screens' strings come from Flutter's gen-l10n (English for now). The
generated files are committed, left out of analysis and formatting, and written
anew by `flutter pub get`, so CI's check of generated code also catches stale ones.
Widget tests now start the whole app (test/support/pump_app.dart) at the screen's path
and move through it as a person would, by tabs and taps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-01 00:18:31 +02:00
|
|
|
expressive_loading_indicator:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: expressive_loading_indicator
|
|
|
|
|
sha256: df84bb56f6f1e977df01e2455ccf033e89f92bc1ecf4dc78e71d44fcbc947331
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.0.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
fake_async:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: fake_async
|
|
|
|
|
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.3.3"
|
|
|
|
|
ffi:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: ffi
|
|
|
|
|
sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.0"
|
|
|
|
|
ffi_leak_tracker:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: ffi_leak_tracker
|
|
|
|
|
sha256: "4093d4ef9ca06ffe2786e73bfb25e22aa92112b9bb4ec941f11e3e6b61489a97"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.1.2"
|
|
|
|
|
file:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file
|
|
|
|
|
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.0.1"
|
2026-09-30 08:38:08 +02:00
|
|
|
file_picker:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_picker
|
|
|
|
|
sha256: "98c0b156b6380ba55bc767a14e2e6b3feb246e713ad40092424596fa79005bea"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "13.1.0"
|
|
|
|
|
file_picker_darwin:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_picker_darwin
|
|
|
|
|
sha256: "51aef9f4c80449c736e7cc02198675fda73689f0bd45a84da642cfeab0250d46"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.2"
|
|
|
|
|
file_picker_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_picker_linux
|
|
|
|
|
sha256: e7db600f50672ce5ebbe422ac0906e0f3d2a476188cc93e7126afee12bf08063
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0"
|
|
|
|
|
file_picker_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_picker_platform_interface
|
|
|
|
|
sha256: bbdc085a6f168e63f147e9ce8988f79fa0800a58e7f25a48f762c60837107ba5
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.0.0"
|
|
|
|
|
file_picker_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_picker_web
|
|
|
|
|
sha256: b3004268da0c1b52baa18df430e7ec4438194de855a807d26b447cbf07ef3496
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.0.0"
|
Import Anki decks with their files and history
Files in content: the person's images and sounds as asset rows synced like
all content, their files kept by hash on each device, uploaded after each
sync, downloaded on demand and checked against their hash
(core/asset/AssetRepository). Rich text names them as asset:<id> URLs, in
the editor's image block and an audio block of ours; any other URL is never
fetched. Sounds play through audioplayers, one at a time. Content holding
only an image or a sound isn't blank, and lists show it as such.
The Anki import ("Import from Anki" under Add material): .apkg and .colpkg
packages in all three formats Anki has written, read on an isolate of their
own. Modern packages compress everything with zstd in frames that don't
record their size, which pure_zstd v1.0.0 refuses; our fork decodes them.
Fields become rich text by a converter of our own (lines, lists, formatting,
images, sounds, cloze deletions hidden on the front). One card per note,
the files first, studysets as chosen (flatten, sub-studysets, or tags by
subdeck), the notes' tags, and, if wanted, the review history, which FSRS
replays: the first template's reviews to the card's schedule, a reversed
note type's second to the reverse one.
Imported cards say where they came from in their first revision (card
schema 3); the dashboard doesn't count them as written. The test fixtures
are exported by Anki itself (tool/anki/make_fixtures.py).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-02 04:52:02 +02:00
|
|
|
file_selector:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector
|
|
|
|
|
sha256: bd15e43e9268db636b53eeaca9f56324d1622af30e5c34d6e267649758c84d9a
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.0"
|
|
|
|
|
file_selector_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_android
|
|
|
|
|
sha256: d670cd0ce77a2e785b18d8b4d0a8d6a222d6a813ec9b7ddf2790a1b4fb6fa92c
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.5.2+11"
|
|
|
|
|
file_selector_ios:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_ios
|
|
|
|
|
sha256: "97269e5307a0ab813b1fa2430bada0a96e0afb74848417f8676f64ba5de0051c"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.5.3+6"
|
|
|
|
|
file_selector_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_linux
|
|
|
|
|
sha256: da76400e7872ce7637ffdce12749ec24169c25f6195c28372208e65a24bcd2ab
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.4+1"
|
|
|
|
|
file_selector_macos:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_macos
|
|
|
|
|
sha256: d57c62362766b5e7ae739448650b66c6aab7a68ba7ecc65e04018652645ae0f4
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.5+1"
|
|
|
|
|
file_selector_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_platform_interface
|
|
|
|
|
sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.7.0"
|
|
|
|
|
file_selector_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_web
|
|
|
|
|
sha256: "73181fbc5257776d8ecaa6a94ab3c8e920ad143b9132a6d984a9271dfc6928d3"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.5"
|
|
|
|
|
file_selector_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_windows
|
|
|
|
|
sha256: fbefc5fb92c6d3cbe8d284a2cd971b593bb07d2cd6da8557b81a862250b4acec
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.3+6"
|
2026-09-16 19:24:59 +02:00
|
|
|
fixnum:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: fixnum
|
|
|
|
|
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.1"
|
2026-10-18 20:35:21 +02:00
|
|
|
flag:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flag
|
|
|
|
|
sha256: c8b499871966f0ac54e981b199ac24f9ec8f73a166a74e64e3abb3d3365736dc
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.1.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
flutter:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
feat(app): sign in anonymously on first launch
The app's first patterns. Dependencies (lib/src/core/dependencies) is the composition root, built at startup and handed down by DependenciesScope; it replaces the scaffold's global client and restores a stored session before the first frame, so a restart never creates a second anonymous account. AuthGateway with ServerpodAuthGateway is the boundary to the server's authentication, AuthRepository signs in anonymously when nobody is signed in, and SessionBloc (flutter_bloc) keeps a person signed in, also after signing out or a revoked session. SessionGate shows a spinner while signing in, offers to try again when that fails, and builds the app anew for every person. AccountButton explains that progress is saved on this device and asks before signing out of an anonymous account, which can't be restored. AppBlocObserver logs all blocs.
Tests: the repository, the bloc's sequences (a stored session is kept, a failed sign-in is retried, signing out starts anew), and the widgets, including that cancelling the sign-out keeps the account. test/support holds the fake gateway and testDependencies(). AGENTS.md describes the composition root and the test factory.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 09:04:02 +02:00
|
|
|
flutter_bloc:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_bloc
|
|
|
|
|
sha256: cf51747952201a455a1c840f8171d273be009b932c75093020f9af64f2123e38
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "9.1.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
flutter_driver:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
fix(app): the app has its own icon instead of Flutter's
The launcher showed Flutter's logo: the project template's icons were
never replaced. tool/app_icons.py now makes every icon from the
kingfisher (assets/icon/halkyon_icon.png), through flutter_launcher_icons
v0.14.4 configured in the app's pubspec: Android's adaptive icon (the
kingfisher inset 16 % on white, for each launcher to cut to its shape)
and the square one before Android 8; iOS's, without transparency;
macOS's, the rounded tile on Apple's grid (824 of 1024 pixels); and
Windows', the rounded tile, its .ico with every size from 16 to 256
pixels (the tool writes only 256). It keeps the iOS project file as it
was, which the tool would break (flutter_launcher_icons issue 634), and
writes the snap's icon as tool/snap_icon.py did, which it replaces.
The Linux runner gives its window the bundled icon too, for desktops
that don't take it from the desktop file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-06 22:49:25 +02:00
|
|
|
flutter_launcher_icons:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_launcher_icons
|
|
|
|
|
sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.14.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
flutter_lints:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_lints
|
|
|
|
|
sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.0.0"
|
|
|
|
|
flutter_localizations:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
flutter_map:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_map
|
|
|
|
|
sha256: "9bbe5472f66ae648d2ca2efbce97fcaa04e71261fabd3e062f26728222d7f767"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "8.3.2"
|
feat(app): editor blocks: callout, spoiler, formulas, files, video, study button
Blocks beyond the editor's own, each built once for editor and view:
- callout: eight kinds in theme colours, kind, title and "folded at
first" from its header; written in place, left with Enter on its
empty last line; never inside another
- spoiler: written in plain sight, hidden behind Reveal read-only
- formula on its own line, written on its own screen with a preview
and snippet buttons, and formulas within a line (Σ in the format
bar); set by flutter_math_fork behind MathView, LaTeX's numbered
environments read as their aligned forms
- image and sound picked from the device, kept as synced files
- YouTube video from its link, with its start and a caption: a card
until played, nothing fetched before; played in place where a web
view exists (youtube_player_iframe, privacy-enhanced), else opened
in the browser, behind YoutubeVideos in Dependencies
- study button: a studyset, a tag or all cards, with or without its
topics, back first; its StudyFocus rides on the study route and
narrows that session only
- tables, already in the editor, now insertable everywhere
An Insert button opens on the format bar, so blocks can be inserted on
phones too; the desktop's / menu lists the same blocks, translated.
Card faces now dock the format bar while written, so cards get blocks
and formatting on phones as well. The blocks are listed in
EditorBlocks: the core's, plus the features' through
EditorBlocksScope. Blocks of a type the app doesn't know say they need
a newer version and stay as they are, so formatVersion stays 1.
Their types and keys are in content_blocks.dart, which RichContent
reads: a block's text counts as text, and a video or study button
isn't blank. The path import now makes formulas real ones.
integration_test/youtube_player_test.dart plays a real video through
the app's player on a device, which no widget test can: YouTube
refuses embeds that don't say where they are embedded.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-03 12:20:41 +02:00
|
|
|
flutter_math_fork:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_math_fork
|
|
|
|
|
sha256: "6d5f2f1aa57ae539ffb0a04bb39d2da67af74601d685a161aff7ce5bda5fa407"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.7.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
flutter_secure_storage:
|
refactor(app): instances, sign-in and sync plumbing come from halkyon_app
The instances a device keeps an account on, the first start, the
account switcher, signing in and switching person, the gates that build
the dependencies per instance and per person, and the sync service with
its status, card and banner move to halkyon_app (halkyon_shared, ADR
0014), on halkyon_base's client. Learn supplies its frame (name, word,
icon, theme, launch screen, and the two texts only it can say), its
dependencies, whether the device holds content, and its world map's
country names; every text reads as before. An instance counts only
where its basics name the app `learn`, which learnBase now sets.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 16:07:44 +02:00
|
|
|
dependency: transitive
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage
|
|
|
|
|
sha256: fe638107c5f69119156ada2db5a57734385fac3f64430bd7252a00d3ead2ca4b
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "10.3.4"
|
|
|
|
|
flutter_secure_storage_darwin:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_darwin
|
|
|
|
|
sha256: "82329fa5cdf343773b1b6897dea959105a29f092454259edff92f9f6637e8149"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.2"
|
|
|
|
|
flutter_secure_storage_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_linux
|
|
|
|
|
sha256: caa75bd78f017422912e3a904933113b2428eb79f981ac37acd2dd2a700458ea
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.3"
|
|
|
|
|
flutter_secure_storage_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_platform_interface
|
|
|
|
|
sha256: "64951127f001f546891c86f414972bf49ef2c4c8a4c92c65f5790cc0c9100045"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.1"
|
|
|
|
|
flutter_secure_storage_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_web
|
|
|
|
|
sha256: "073a62b3aeb866ab4ce795f960413948e51e5a42a9b0c8333b6daf5bb3208a1c"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.1"
|
|
|
|
|
flutter_secure_storage_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_windows
|
|
|
|
|
sha256: "471951813a97006d899db4948acc654a4f28c440083ea08178935ce20b173ec1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.2.2"
|
|
|
|
|
flutter_svg:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_svg
|
|
|
|
|
sha256: "35882981abcbfb8c15b286f0cd690ff25bac12d95eff3e25ee207f37d4c42e7f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.0"
|
|
|
|
|
flutter_test:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
|
|
|
|
flutter_web_auth_2:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_web_auth_2
|
|
|
|
|
sha256: a7655829251ee63aae64a748f8512f36670d8eba4657b0055cdf5ef304a9d164
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "5.1.0"
|
|
|
|
|
flutter_web_auth_2_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_web_auth_2_platform_interface
|
|
|
|
|
sha256: ba0fbba55bffb47242025f96852ad1ffba34bc451568f56ef36e613612baffab
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "5.0.0"
|
|
|
|
|
flutter_web_plugins:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
feat(app): flashcards on append-only revisions
A studyset's screen lists its cards (reorderable; a marker on cards changed on two devices) and opens a card's screen with an editor for each side. Saving appends a revision whose parents are all current heads. mergeRevisions merges several heads per side against their newest common ancestor, as decided: different sides merge automatically, the same side changed differently is a conflict. The card screen then shows every version of that side with "Keep this", and saving is possible once each conflicted side is settled, which resolves the conflict for every device. Nothing is merged silently inside a side.
CardRepository watches a studyset's cards, creates at the end and moves by fractional index (fractional_indexing_dart, checked against the reference algorithm's test vectors), and deletes by blanking every revision first (ADR 0002, rule 2). Deleting a studyset now deletes its cards the same way before the studyset goes. Every person gets a CardRepository whose revisions name them as author. RichContent gains plainText for the list's previews.
Tests: the merge (chains, different and same sides, conflicts, resolving, three heads, missing parents, arrival order), the payload, the repository against a fake gateway, both blocs, and the widgets, including that cancelling a delete keeps the card. The sync tests, which need the running server, cover merging and conflicts across two devices and blank revisions on the server; their device helper is now shared in test/sync/support. AGENTS.md describes the revision pattern, the fractional order, and two tooling traps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 14:41:44 +02:00
|
|
|
fractional_indexing_dart:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: fractional_indexing_dart
|
|
|
|
|
sha256: "05d11e1124922b78c64ed2e616b29e0dc01c53646bc15a26a31d538ad198ac7d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.7"
|
feat(keys): halkyon_keys, an account's keys on the device
ADR 0017's step 1, on libsodium (sodium 4.1.0+1, whose build hook
compiles the libsodium 1.0.22 it ships: a C compiler and make wherever
it builds):
- Argon2id (64 MiB, 3 passes, kept with the account and never below
that) makes a master key, which libsodium's KDF splits into SRP's
secret (x) and the key-encryption key.
- The account's X25519 and Ed25519 key pairs, their private halves
wrapped with XChaCha20-Poly1305 under the KEK and under the recovery
key, bound to their public keys.
- A 24-word BIP-39 recovery phrase (the English list, MIT) and the
recovery key derived from it.
- Data keys sealed to the account with crypto_box_seal, bound to their
IDs; content in ADR 0002's envelope, encrypted with a data key and
signed with Ed25519 (detached), bound to a context the caller names.
- Secrets in libsodium's guarded memory where its API takes them.
- Tests: libsodium's Argon2id known answers, BIP-39's English vectors,
round trips and every refusal.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-20 12:01:52 +02:00
|
|
|
freezed_annotation:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: freezed_annotation
|
|
|
|
|
sha256: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
frontend_server_client:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: frontend_server_client
|
|
|
|
|
sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.0.0"
|
feat(app): study with FSRS
A studyset's card list gains "Study". The study screen shows the front, then the answer and the four ratings, each labelled with when the card would come back; every rating is recorded with how long answering took, and the queue is worked out anew after each.
Schedules are never stored: scheduleOf replays a card's reviews in time order with FSRS-6 (fsrs v2.0.1, pinned exactly so every device on one app version computes the same). The package's fuzz can only be seeded through an API meant for tests, and due dates don't feed back into a card's state, so the replay runs without fuzz and fuzzedDays spreads the final due date over FSRS's range, picked by a stable FNV-1a fraction of the card's id and review count. studyQueue takes due cards earliest first, then new cards in studyset order, 20 per studyset and local day, and brings a learning card due within 20 minutes early when nothing else is due. Deleting a card deletes its reviews.
Tests: the replay (learning, growing intervals, the same schedule whatever order reviews arrive in, previews matching what a rating yields), the fuzz range, the queue (order, the daily limit counted per local day, learn-ahead), the repository, the session bloc under a controlled clock, the screen, and a sync test for ratings on two devices. AGENTS.md records the review log and scheduling, and how plugin lint rules are ignored.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 16:59:07 +02:00
|
|
|
fsrs:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: fsrs
|
|
|
|
|
sha256: b50dbee450a424dbac4fb0f49cae25ff2e4e6d01844caa1ec0c26de5baba8071
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
fuchsia_remote_debug_protocol:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
|
|
|
|
glob:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: glob
|
|
|
|
|
sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.0"
|
feat(app): the UI foundation: theme, tabs and routes, strings
The app gets its look and navigation before more features land on them.
- Theme (core/theme/): hand-written light and dark Material 3 colour schemes around
cobalt and copper; ThemeExtras for the colours Material has no role for (states, the
four FSRS ratings); the 20 colours a person can give content. Tests hold text to WCAG
AA contrast on each palette colour and on the dark theme's primary colour and surface.
- Layout and shared widgets: Material 3's window-size classes (core/layout/);
SectionCard, AppLoadingIndicator, confirmDestructiveAction and FoundById
(core/widget/). Lucide icons.
- Navigation with go_router: four tabs (Home, Library, Explore, Profile), each keeping
its own stack of screens, as a navigation rail with the app's icon from 600 dp and as
a navigation bar below; choosing the open tab again returns to its first screen. A
studyset's screen sits in the library; studying, cards and settings cover the tabs.
- Routes carry ids: FoundById finds the item in the repository's live list, so a
studyset deleted on another device, or an old link, says it no longer exists. A
screen that deletes its own item keeps showing it while it closes, rather than
flashing that message.
- Every person gets an app of their own (PersonApp, lib/src/app/): a
MaterialApp.router with its own GoRouter and PersonScope around the navigator, built
by SessionGate inside the person's keyed subtree. Screens read the person's
repositories wherever they are built, so the static route() helpers and the listener
that closed every pushed screen on a change of person are gone: a change of person
now disposes the whole router and starts again at home.
- The account dialog becomes the Profile tab, with Settings (sign out, delete the
account, About) behind a gear. A waiting GitHub sign-in now keeps waiting while
another tab shows; a change of person still cancels it.
- The new screens' strings come from Flutter's gen-l10n (English for now). The
generated files are committed, left out of analysis and formatting, and written
anew by `flutter pub get`, so CI's check of generated code also catches stale ones.
Widget tests now start the whole app (test/support/pump_app.dart) at the screen's path
and move through it as a person would, by tabs and taps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-01 00:18:31 +02:00
|
|
|
go_router:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: go_router
|
|
|
|
|
sha256: "530dcbb298dc7c319aea9e3b7c580a61effb2abee2c93825d2dd8d5af0e230f1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "18.0.2"
|
2026-09-16 19:24:59 +02:00
|
|
|
google_fonts:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: google_fonts
|
|
|
|
|
sha256: e3cb3ee6b47fd2472c23de6da5744796a4da195137759ddb3fbcc9467b7b3c7d
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "8.2.1"
|
|
|
|
|
google_identity_services_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: google_identity_services_web
|
|
|
|
|
sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.3+1"
|
|
|
|
|
google_sign_in:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: google_sign_in
|
|
|
|
|
sha256: "521031b65853b4409b8213c0387d57edaad7e2a949ce6dea0d8b2afc9cb29763"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.2.0"
|
|
|
|
|
google_sign_in_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: google_sign_in_android
|
|
|
|
|
sha256: c403315d87aba1f815a0a401093f97808cab6cb2bdd11ca431ff8587fd7f1c00
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.2.17"
|
|
|
|
|
google_sign_in_ios:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: google_sign_in_ios
|
2026-09-24 08:49:44 +02:00
|
|
|
sha256: c2154d2849310a0286aab2e35e3bee585f2034afdf8ac364c4d7b3638e4c40b6
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-09-24 08:49:44 +02:00
|
|
|
version: "6.3.5"
|
2026-09-16 19:24:59 +02:00
|
|
|
google_sign_in_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: google_sign_in_platform_interface
|
|
|
|
|
sha256: "7f59208c42b415a3cca203571128d6f84f885fead2d5b53eb65a9e27f2965bb5"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.0"
|
|
|
|
|
google_sign_in_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: google_sign_in_web
|
|
|
|
|
sha256: d473003eeca892f96a01a64fc803378be765071cb0c265ee872c7f8683245d14
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.3"
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
graphs:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: graphs
|
|
|
|
|
sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.2"
|
2026-09-16 19:24:59 +02:00
|
|
|
hex:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: hex
|
|
|
|
|
sha256: "4e7cd54e4b59ba026432a6be2dd9d96e4c5205725194997193bf871703b82c4a"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.2.0"
|
|
|
|
|
hooks:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: hooks
|
|
|
|
|
sha256: eaac480a35ec0814146c2c48d96aaa829e0e44a7662c88ae84c9edf4bc35651f
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.0"
|
2026-09-30 08:38:08 +02:00
|
|
|
html:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: html
|
|
|
|
|
sha256: "43b67b8f43321ab066817dfac5619596c98bb1b61624e77203bb4351785f9699"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.15.7"
|
2026-09-16 19:24:59 +02:00
|
|
|
http:
|
build(release): a Dart release tool for every app
tool/release.dart releases one app: `dart run tool/release.dart learn
[major | minor | patch] [--dry-run]`, each app configured in Dart beside
it (apps/learn/release.dart). Every step and check of tool/release.sh
is kept: the repository as pushed, resuming after a release commit and
tag, Flutter as CI pins it, the tools, the key and its certificate pin,
secrets asked for without echo and never written down, CI green on the
newest commit, the signed release commit and tag by a key deploys
accept, the APK built from a checkout of the tag and checked, the snap,
the signed checksums, pushing only after both builds passed, the
release on Forgejo, the F-Droid repository, the Snap Store once a
channel is set.
New: tags per app (learn-v0.19.0, Learn's v… counting as its
history); only commits touching the app decide its version (its folder,
the shared packages it uses by path, the root pubspec and lock, its
release files, where its packages were before the move); --dry-run
reads all of it, lists every step and the notes, and what a release
would refuse, changing nothing. The pure parts are tested in
test/release/. Learn releases build 21 with tool/release.sh, then
switches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:12:31 +02:00
|
|
|
dependency: "direct dev"
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: http
|
|
|
|
|
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.6.0"
|
|
|
|
|
http_multi_server:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: http_multi_server
|
|
|
|
|
sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.2.2"
|
|
|
|
|
http_parser:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: http_parser
|
|
|
|
|
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.1.2"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
idb_shim:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: idb_shim
|
|
|
|
|
sha256: "923c92ef88569de4ec1b257b6a6d10360dc3407179f61d0c73329701a7d7b12e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.11.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
image:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: image
|
|
|
|
|
sha256: a1e7f4951e538a568e14b856702afc9ae1d2f4b202daced8d22c1b9cd211ce89
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.10.1"
|
feat(app): editor blocks: callout, spoiler, formulas, files, video, study button
Blocks beyond the editor's own, each built once for editor and view:
- callout: eight kinds in theme colours, kind, title and "folded at
first" from its header; written in place, left with Enter on its
empty last line; never inside another
- spoiler: written in plain sight, hidden behind Reveal read-only
- formula on its own line, written on its own screen with a preview
and snippet buttons, and formulas within a line (Σ in the format
bar); set by flutter_math_fork behind MathView, LaTeX's numbered
environments read as their aligned forms
- image and sound picked from the device, kept as synced files
- YouTube video from its link, with its start and a caption: a card
until played, nothing fetched before; played in place where a web
view exists (youtube_player_iframe, privacy-enhanced), else opened
in the browser, behind YoutubeVideos in Dependencies
- study button: a studyset, a tag or all cards, with or without its
topics, back first; its StudyFocus rides on the study route and
narrows that session only
- tables, already in the editor, now insertable everywhere
An Insert button opens on the format bar, so blocks can be inserted on
phones too; the desktop's / menu lists the same blocks, translated.
Card faces now dock the format bar while written, so cards get blocks
and formatting on phones as well. The blocks are listed in
EditorBlocks: the core's, plus the features' through
EditorBlocksScope. Blocks of a type the app doesn't know say they need
a newer version and stay as they are, so formatVersion stays 1.
Their types and keys are in content_blocks.dart, which RichContent
reads: a block's text counts as text, and a video or study button
isn't blank. The path import now makes formulas real ones.
integration_test/youtube_player_test.dart plays a real video through
the app's player on a device, which no widget test can: YouTube
refuses embeds that don't say where they are embedded.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-03 12:20:41 +02:00
|
|
|
integration_test:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
intl:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: intl
|
|
|
|
|
sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.20.3"
|
|
|
|
|
io:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: io
|
|
|
|
|
sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.0"
|
|
|
|
|
isolated_object:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: isolated_object
|
|
|
|
|
sha256: b52bf712237ee196a3724e8467fe1ef9286842070c22fcd57e01455e1539ab8f
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.1.0"
|
|
|
|
|
jni:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: jni
|
|
|
|
|
sha256: f038e58b4dc2c9037f50e233175086337e0b305e356d28211bf55f21c504cbd3
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.3"
|
|
|
|
|
jni_flutter:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: jni_flutter
|
|
|
|
|
sha256: b2310cdd4c18c65c081ab141a41efa94aa26c65431803703ece51996f174f351
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.3"
|
|
|
|
|
jni_util:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: jni_util
|
|
|
|
|
sha256: "1ba86da04a5f2bf18fde2edb235587e70c5b0fc5bd4ba955f46b00942c3fc35f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.0"
|
fix(app): the app has its own icon instead of Flutter's
The launcher showed Flutter's logo: the project template's icons were
never replaced. tool/app_icons.py now makes every icon from the
kingfisher (assets/icon/halkyon_icon.png), through flutter_launcher_icons
v0.14.4 configured in the app's pubspec: Android's adaptive icon (the
kingfisher inset 16 % on white, for each launcher to cut to its shape)
and the square one before Android 8; iOS's, without transparency;
macOS's, the rounded tile on Apple's grid (824 of 1024 pixels); and
Windows', the rounded tile, its .ico with every size from 16 to 256
pixels (the tool writes only 256). It keeps the iOS project file as it
was, which the tool would break (flutter_launcher_icons issue 634), and
writes the snap's icon as tool/snap_icon.py did, which it replaces.
The Linux runner gives its window the bundled icon too, for desktops
that don't take it from the desktop file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-06 22:49:25 +02:00
|
|
|
json_annotation:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: json_annotation
|
|
|
|
|
sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.12.0"
|
2026-09-30 08:38:08 +02:00
|
|
|
keyboard_height_plugin:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: keyboard_height_plugin
|
2026-10-02 19:52:22 +02:00
|
|
|
sha256: d57944cd3e4f8d9cb4adb1b7f1300d14a8dcec99bfb4414d78c7dd0120c1d66c
|
2026-09-30 08:38:08 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-02 19:52:22 +02:00
|
|
|
version: "0.3.0"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
latlong2:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: latlong2
|
|
|
|
|
sha256: "84b776b100a84a684a0aaa3fa4dc2c9b1931c658de533701ee4e09bfa991f8dc"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.10.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
leak_tracker:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: leak_tracker
|
|
|
|
|
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "11.0.2"
|
|
|
|
|
leak_tracker_flutter_testing:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: leak_tracker_flutter_testing
|
|
|
|
|
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.10"
|
|
|
|
|
leak_tracker_testing:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: leak_tracker_testing
|
|
|
|
|
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.2"
|
chore(lint): LeanCode's strict rules and a pre-push check
The workspace root's analysis_options.yaml includes leancode_lint 27 and enables its analyzer plugin (rules for blocs, Equatable and Flutter layout); the server and the app include that file, while the generated client keeps its own options. Plugins can only be enabled at the root of a pub workspace and only reach packages whose options include the root file, which was verified before settling on this layout. Most rules are warnings, casts, inference and raw types are strict, and the check treats infos as fatal too. lints and flutter_lints are no longer needed.
tool/check.sh checks formatting, runs dart analyze --fatal-infos and the server tests; .git/hooks/pre-push links to it, so every push has to pass it. AGENTS.md describes the checklist and how to install the hook in a fresh clone.
Fixes for the new rules: package imports, run() returns Future<void>, the server setup as one cascade, a primary constructor for the app widget, a const and a redundant argument. The workspace root keeps its conventional name `_` with a documented ignore.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-29 23:06:29 +02:00
|
|
|
leancode_lint:
|
|
|
|
|
dependency: "direct dev"
|
|
|
|
|
description:
|
|
|
|
|
name: leancode_lint
|
|
|
|
|
sha256: "23148aecd1a7b9cbf1c435dc3423a86875f15f76ff020e13fa901138d428b444"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "27.0.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
lints:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: lints
|
|
|
|
|
sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.1.0"
|
|
|
|
|
logging:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: logging
|
|
|
|
|
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.3.0"
|
feat(app): the UI foundation: theme, tabs and routes, strings
The app gets its look and navigation before more features land on them.
- Theme (core/theme/): hand-written light and dark Material 3 colour schemes around
cobalt and copper; ThemeExtras for the colours Material has no role for (states, the
four FSRS ratings); the 20 colours a person can give content. Tests hold text to WCAG
AA contrast on each palette colour and on the dark theme's primary colour and surface.
- Layout and shared widgets: Material 3's window-size classes (core/layout/);
SectionCard, AppLoadingIndicator, confirmDestructiveAction and FoundById
(core/widget/). Lucide icons.
- Navigation with go_router: four tabs (Home, Library, Explore, Profile), each keeping
its own stack of screens, as a navigation rail with the app's icon from 600 dp and as
a navigation bar below; choosing the open tab again returns to its first screen. A
studyset's screen sits in the library; studying, cards and settings cover the tabs.
- Routes carry ids: FoundById finds the item in the repository's live list, so a
studyset deleted on another device, or an old link, says it no longer exists. A
screen that deletes its own item keeps showing it while it closes, rather than
flashing that message.
- Every person gets an app of their own (PersonApp, lib/src/app/): a
MaterialApp.router with its own GoRouter and PersonScope around the navigator, built
by SessionGate inside the person's keyed subtree. Screens read the person's
repositories wherever they are built, so the static route() helpers and the listener
that closed every pushed screen on a change of person are gone: a change of person
now disposes the whole router and starts again at home.
- The account dialog becomes the Profile tab, with Settings (sign out, delete the
account, About) behind a gear. A waiting GitHub sign-in now keeps waiting while
another tab shows; a change of person still cancels it.
- The new screens' strings come from Flutter's gen-l10n (English for now). The
generated files are committed, left out of analysis and formatting, and written
anew by `flutter pub get`, so CI's check of generated code also catches stale ones.
Widget tests now start the whole app (test/support/pump_app.dart) at the screen's path
and move through it as a person would, by tabs and taps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-01 00:18:31 +02:00
|
|
|
lucide_icons_flutter:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: lucide_icons_flutter
|
|
|
|
|
sha256: "50a21003cfe094e33b87e780d62ed5be84c32273dec1ba04547aab7df3cba00c"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.20"
|
feat(auth): codes go by mail, through the SMTP service an instance sets up
Email sign-in's codes are mailed over SMTP (pub.dev's mailer), through
whichever service the passwords name: emailSmtpHost, emailSmtpPort,
emailSmtpUser, emailSmtpPassword and emailFrom (EMAIL_SMTP_* and
EMAIL_FROM in deploy/.env, with EMAIL_SIGN_IN_PEPPER). TLS only:
STARTTLS, or TLS directly on 465. learn.halkyon.eu sends through Proton's
SMTP submission. Without a service, codes still go to the log in
development, and elsewhere there is no email sign-in.
The mail is plain text, in English or German: the code first and in the
subject, so it shows in the notification and the system can offer it,
the instance it signs in to, its 15 minutes, and that it can be ignored;
no links, no tracking, no HTML. A mail that couldn't be sent is a refusal
of its own (mailFailed): nothing of the request is kept, and the log
names the error's type only, as the service's answer may name the
address. A fake SMTP server on loopback drives the real mailer in the
tests: it delivers, and nothing goes to a server without TLS.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 20:00:52 +02:00
|
|
|
mailer:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: mailer
|
|
|
|
|
sha256: "9f7213f57272c2a047f13ae89e68652d492f929d84ded9a618424b38da328f97"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.2.0"
|
2026-09-30 08:38:08 +02:00
|
|
|
markdown:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: markdown
|
|
|
|
|
sha256: ee85086ad7698b42522c6ad42fe195f1b9898e4d974a1af4576c1a3a176cada9
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.3.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
matcher:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: matcher
|
|
|
|
|
sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.12.20"
|
|
|
|
|
material_color_utilities:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: material_color_utilities
|
|
|
|
|
sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.13.0"
|
feat(app): the UI foundation: theme, tabs and routes, strings
The app gets its look and navigation before more features land on them.
- Theme (core/theme/): hand-written light and dark Material 3 colour schemes around
cobalt and copper; ThemeExtras for the colours Material has no role for (states, the
four FSRS ratings); the 20 colours a person can give content. Tests hold text to WCAG
AA contrast on each palette colour and on the dark theme's primary colour and surface.
- Layout and shared widgets: Material 3's window-size classes (core/layout/);
SectionCard, AppLoadingIndicator, confirmDestructiveAction and FoundById
(core/widget/). Lucide icons.
- Navigation with go_router: four tabs (Home, Library, Explore, Profile), each keeping
its own stack of screens, as a navigation rail with the app's icon from 600 dp and as
a navigation bar below; choosing the open tab again returns to its first screen. A
studyset's screen sits in the library; studying, cards and settings cover the tabs.
- Routes carry ids: FoundById finds the item in the repository's live list, so a
studyset deleted on another device, or an old link, says it no longer exists. A
screen that deletes its own item keeps showing it while it closes, rather than
flashing that message.
- Every person gets an app of their own (PersonApp, lib/src/app/): a
MaterialApp.router with its own GoRouter and PersonScope around the navigator, built
by SessionGate inside the person's keyed subtree. Screens read the person's
repositories wherever they are built, so the static route() helpers and the listener
that closed every pushed screen on a change of person are gone: a change of person
now disposes the whole router and starts again at home.
- The account dialog becomes the Profile tab, with Settings (sign out, delete the
account, About) behind a gear. A waiting GitHub sign-in now keeps waiting while
another tab shows; a change of person still cancels it.
- The new screens' strings come from Flutter's gen-l10n (English for now). The
generated files are committed, left out of analysis and formatting, and written
anew by `flutter pub get`, so CI's check of generated code also catches stale ones.
Widget tests now start the whole app (test/support/pump_app.dart) at the screen's path
and move through it as a person would, by tabs and taps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-01 00:18:31 +02:00
|
|
|
material_new_shapes:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: material_new_shapes
|
|
|
|
|
sha256: e4bc375205e187e8fb232573387112dd8c0dd45b03af8aa2b3c79eb4b9e3e0dc
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.0"
|
2026-09-29 23:11:00 +02:00
|
|
|
material_ui:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: material_ui
|
|
|
|
|
sha256: "32d98f11cf5942a095a8c3e01b03e4de3b17941437713dcf36b1088fb62e23d2"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.5.0"
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
mecab_for_dart:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: mecab_for_dart
|
|
|
|
|
sha256: "2ddbcec4e51e8b5a4bef28592a5c034baa1698cce48394cf3091d569014bb519"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.5"
|
feat(jellyfin): watch from one's own Jellyfin server and learn the words of its subtitles
Animelon's way of learning from video, from the person's own Jellyfin
server: connected per device (Settings, or a studyset's Add material ›
Watch from Jellyfin) with a name and password or a Quick Connect code,
over HTTPS only (plain HTTP only to a server on the same machine); the
token stays in the system's keyring. Shows, films and videos tied to a
studyset follow the person in their settings as the server's and the
item's ids alone (settings schema 9), named by the server when shown.
The Watch screen plays the video (video_player on Android, media_kit's
libmpv on Linux and Windows) with the line in the studyset's front
language cut into the dictionary's words with furigana, and the back
language's line beneath; a word tapped pauses the video and becomes a
card with the line and its translation as its first hint, tagged with
the show. The video's words are listed, most frequent first. The sound is
the track in the studyset's language, whichever the file marks default,
and the menu switches it; the subtitles read are a whole track, never a
forced one (which only covers what the sound doesn't say), and captions
for the hard of hearing only without plain ones. The line and its
translation take the video's width in a box of a fixed height, so the
video keeps its size; in the dark theme the video's colours glow around
it, as YouTube's ambient mode, and the words' panel takes the colour of
the episode's picture under the pointer.
A line is cut into words with one request: DictionaryEndpoint.withKeys
looks up every stretch of it that may be a word, as it stands and as
every word it may be a conjugation of, in the new dictionary_key table
(one row per key, indexed; migration dictionary-keys adds the table and
its index, nothing else), which the loader fills beside the entries.
The instance gets the text of each line looked up and keeps none of it,
as the Watch screen says.
Linux builds need libmpv-dev, and the app links libmpv: the snap stages
Ubuntu's libmpv2, makes the update-alternatives links for BLAS and LAPACK
that ffmpeg's speech recognition needs (staging never runs install
scripts), and removes what the GNOME runtime and core24 already hold, as
older copies of cairo, pango and librsvg hid the runtime's from its GTK.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-13 11:31:37 +02:00
|
|
|
media_kit:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: media_kit
|
|
|
|
|
sha256: ae9e79597500c7ad6083a3c7b7b7544ddabfceacce7ae5c9709b0ec16a5d6643
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.6"
|
|
|
|
|
media_kit_libs_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: media_kit_libs_linux
|
|
|
|
|
sha256: "2b473399a49ec94452c4d4ae51cfc0f6585074398d74216092bf3d54aac37ecf"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.1"
|
|
|
|
|
media_kit_libs_windows_video:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: media_kit_libs_windows_video
|
|
|
|
|
sha256: dff76da2778729ab650229e6b4ec6ec111eb5151431002cbd7ea304ff1f112ab
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.11"
|
|
|
|
|
media_kit_video:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: media_kit_video
|
|
|
|
|
sha256: afaa509e7b7e0bf247557a3a740cde903a52c34ace9810f94500e127bd7b043d
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.1"
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
melos:
|
|
|
|
|
dependency: "direct dev"
|
|
|
|
|
description:
|
|
|
|
|
name: melos
|
|
|
|
|
sha256: "140e51d7990b5134663e64b39e19d3b64ead16382e69127c205942c91e752b16"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "8.9.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
meta:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: meta
|
|
|
|
|
sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.19.0"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
mgrs_dart:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: mgrs_dart
|
|
|
|
|
sha256: "385e7168ecc77eb545220223c49eef8ab249da7bf57f22781c40a04d23fb196f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
mime:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: mime
|
|
|
|
|
sha256: bd47de35f07e27267e69c8c8b22edf9473bfee170a60d60fcc93730c5144b7f6
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.0"
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
mustache_template:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: mustache_template
|
|
|
|
|
sha256: "17a8de9072575bb1a3237b90ed1f756b2189995b334df2ad12b7cdd76b13f3ce"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.6"
|
2026-09-30 08:38:08 +02:00
|
|
|
nanoid:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: nanoid
|
|
|
|
|
sha256: be3f8752d9046c825df2f3914195151eb876f3ad64b9d833dd0b799b77b8759e
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
native_toolchain_c:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: native_toolchain_c
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
sha256: a1c26117c48cebe5677b0cf0e33a980a79a7c5577effc86f52e5a0d309cdcb60
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
version: "0.19.3"
|
2026-09-16 19:24:59 +02:00
|
|
|
nested:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: nested
|
|
|
|
|
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.0"
|
|
|
|
|
nm:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: nm
|
|
|
|
|
sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.5.0"
|
|
|
|
|
node_preamble:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: node_preamble
|
|
|
|
|
sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.2"
|
2026-09-30 08:38:08 +02:00
|
|
|
numerus:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: numerus
|
|
|
|
|
sha256: "0324b50768c821a742d5838aa40ebf09521a0f9b87562f20950b15ba7e999f6b"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.2"
|
2026-09-16 19:24:59 +02:00
|
|
|
objective_c:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: objective_c
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
sha256: b7fb95a6d9a4f009edd63dc5ac69f07420b23a16161c6dd8660290b59c602e8e
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
version: "9.5.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
package_config:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: package_config
|
|
|
|
|
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.0"
|
feat: the app tells when sync fails, and when it is too old
Published apps can't be made to update, so the app now notices when it
no longer matches the server: the server names the oldest app build it
works with (instance.info's minimumAppBuild), asked before the first
sync of each launch, and the sync engine's refusal of differing synced
tables counts the same. Either way the app says "update the app; if it
is up to date, the server needs an update" in a banner on Home and in
the new Sync card in Settings, and what the person does meanwhile stays
on the device.
The Sync card shows where sync stands since the app started (syncing,
everything synced, sync failing, with the last completion and failure)
and offers Sync now. While the last sync failed, a dot sits on the
Profile tab and the Settings cog. One sync that goes through clears it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-03 23:26:47 +02:00
|
|
|
package_info_plus:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: package_info_plus
|
|
|
|
|
sha256: "73ef2cd5c11a7548f9b7f6fc2a4f6113de2e64aa2a70de63feede95548822908"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "10.2.2"
|
|
|
|
|
package_info_plus_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: package_info_plus_platform_interface
|
|
|
|
|
sha256: db762cb2f4f25ee60fb6359773861b0f199e00b90d237bd85a76a1e806b46ef4
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.1.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
passkeys_server:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: passkeys_server
|
|
|
|
|
sha256: "0173c533b0c0a9fb92a7a215f1b77432ec48c504f3de9fa0221dc6ab50718f98"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.0"
|
|
|
|
|
path:
|
build(release): a Dart release tool for every app
tool/release.dart releases one app: `dart run tool/release.dart learn
[major | minor | patch] [--dry-run]`, each app configured in Dart beside
it (apps/learn/release.dart). Every step and check of tool/release.sh
is kept: the repository as pushed, resuming after a release commit and
tag, Flutter as CI pins it, the tools, the key and its certificate pin,
secrets asked for without echo and never written down, CI green on the
newest commit, the signed release commit and tag by a key deploys
accept, the APK built from a checkout of the tag and checked, the snap,
the signed checksums, pushing only after both builds passed, the
release on Forgejo, the F-Droid repository, the Snap Store once a
channel is set.
New: tags per app (learn-v0.19.0, Learn's v… counting as its
history); only commits touching the app decide its version (its folder,
the shared packages it uses by path, the root pubspec and lock, its
release files, where its packages were before the move); --dry-run
reads all of it, lists every step and the notes, and what a release
would refuse, changing nothing. The pure parts are tested in
test/release/. Learn releases build 21 with tool/release.sh, then
switches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:12:31 +02:00
|
|
|
dependency: "direct dev"
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: path
|
|
|
|
|
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.9.1"
|
|
|
|
|
path_parsing:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_parsing
|
|
|
|
|
sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.0"
|
|
|
|
|
path_provider:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider
|
|
|
|
|
sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.6"
|
|
|
|
|
path_provider_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_android
|
|
|
|
|
sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.1"
|
|
|
|
|
path_provider_foundation:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_foundation
|
|
|
|
|
sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.6.0"
|
|
|
|
|
path_provider_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_linux
|
|
|
|
|
sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.2"
|
|
|
|
|
path_provider_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_platform_interface
|
|
|
|
|
sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.3"
|
|
|
|
|
path_provider_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_windows
|
|
|
|
|
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.0"
|
2026-09-30 08:38:08 +02:00
|
|
|
pdf:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pdf
|
|
|
|
|
sha256: "6e40827f370d196e97c6611724d923a3d86c431ce8e2ce1e59edd03a67a1a6e6"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.13.1"
|
feat: PDF sources: read, take notes and cards from pages, deadlines
PDFs live in a studyset's new Files tab: uploaded from Add material
(a file the studyset holds already asks first), each row with its
pages, cards, notes and size, how far it is read and its reading
deadline; renamed, given a deadline (a page or a chapter by a day),
marked as read, started afresh, deleted with a moment to undo.
The reader (/pdfs/:id) opens where reading left off: on wide windows
a rail of tools (search, fit, zoom, fullscreen), a page counter with
the chapter, and a sidebar; on phones a top bar, a page scrubber and
a sheet. The sidebar holds the PDF's flashcards, by page or chapter,
made from selected text or written there, each tied to its page and
tagged with its chapter; and the page's note, an ordinary note tied
to the page. Screenshots of a region become images that know their
page. Cards and screenshots lead back to their page; reading on past
a chapter with cards suggests studying it. Home shows the deadlines
running and to come, and a timeline of them.
Server: pdf_source rows (content in the payload, last writer wins)
and an append-only pdf_reading log, the furthest page derived from
it so devices never conflict. Files up to 50 MB for PDFs (20 MB for
others; a larger file that isn't a PDF is deleted once stored). A
deleted PDF takes its file's asset row along unless another PDF has
the same file. Card payload 4 and note payload 2 keep the page.
The reader draws with pdfrx (PDFium) behind PdfEngine in
Dependencies; widget tests use a fake, and
integration_test/pdf_engine_test.dart checks the real engine on a
device or the desktop.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-03 14:40:08 +02:00
|
|
|
pdfium_dart:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pdfium_dart
|
|
|
|
|
sha256: e296a26c030e6e0fb34b32ce7481a3cfa0c2d35ce80f6269551c685759f4c91f
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.1"
|
|
|
|
|
pdfium_flutter:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pdfium_flutter
|
|
|
|
|
sha256: "59897274513984b347fc98e7bf71ba457678daea8b5568cd7c688979aeb77765"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.1"
|
|
|
|
|
pdfrx:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pdfrx
|
|
|
|
|
sha256: "52e78d84a706e5d63d2502689fe8e800d823bc780ac4341b2d3683a4d726505a"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.6.5"
|
|
|
|
|
pdfrx_engine:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pdfrx_engine
|
|
|
|
|
sha256: f74ca9ea4ec722545f054a1d6ee1bf01222409ecd9458e5945c0cc5feaa3d2c6
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.6.1"
|
2026-09-16 19:24:59 +02:00
|
|
|
petitparser:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: petitparser
|
|
|
|
|
sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.0.2"
|
|
|
|
|
pinput:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pinput
|
|
|
|
|
sha256: "4c3f1b84768b47a56a1abdaca551bd7cef4ac673b882209039ecdf803a5d6e68"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.0.2"
|
|
|
|
|
platform:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: platform
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
version: "3.1.6"
|
2026-09-16 19:24:59 +02:00
|
|
|
plugin_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: plugin_platform_interface
|
|
|
|
|
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.8"
|
|
|
|
|
pointycastle:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pointycastle
|
|
|
|
|
sha256: "92aa3841d083cc4b0f4709b5c74fd6409a3e6ba833ffc7dc6a8fee096366acf5"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.0.0"
|
|
|
|
|
pool:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pool
|
|
|
|
|
sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.5.3"
|
|
|
|
|
posix:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: posix
|
|
|
|
|
sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.5.2"
|
|
|
|
|
postgres:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: postgres
|
2026-09-24 08:49:44 +02:00
|
|
|
sha256: a2a79fb36abeb11fc92b4a24867802e3c77bd67619515c138a03ead09ca2b23d
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-09-24 08:49:44 +02:00
|
|
|
version: "3.5.16"
|
2026-09-16 19:24:59 +02:00
|
|
|
process:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: process
|
|
|
|
|
sha256: "4242ba3508d37e01808bdf71ad1d5bb93a8d671bf2e7450e6b1b353fb0808891"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "5.0.6"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
proj4dart:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: proj4dart
|
|
|
|
|
sha256: ddcedc1f7876e62717de43ab3491e2829bdad0b028261805f94aa080967e5859
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.0"
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
prompts:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: prompts
|
|
|
|
|
sha256: "3773b845e85a849f01e793c4fc18a45d52d7783b4cb6c0569fad19f9d0a774a1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
protobuf:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: protobuf
|
|
|
|
|
sha256: "68645b24e0716782e58948f8467fd42a880f255096a821f9e7d0ec625b00c84d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
provider:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: provider
|
|
|
|
|
sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.1.5+1"
|
|
|
|
|
pub_semver:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pub_semver
|
|
|
|
|
sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.1"
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
pub_updater:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pub_updater
|
|
|
|
|
sha256: "3aadeb8c68d15ef9d117b36474ddcc543b48ae1e64f7dd71407da26df66bf7c8"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.6.0"
|
|
|
|
|
pubspec_parse:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pubspec_parse
|
|
|
|
|
sha256: c38b81cbf34450b67e0265d73433569d12e34782e30ed769c9cc99c9d5f2e796
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.6.0"
|
feat(auth): codes go by mail, through the SMTP service an instance sets up
Email sign-in's codes are mailed over SMTP (pub.dev's mailer), through
whichever service the passwords name: emailSmtpHost, emailSmtpPort,
emailSmtpUser, emailSmtpPassword and emailFrom (EMAIL_SMTP_* and
EMAIL_FROM in deploy/.env, with EMAIL_SIGN_IN_PEPPER). TLS only:
STARTTLS, or TLS directly on 465. learn.halkyon.eu sends through Proton's
SMTP submission. Without a service, codes still go to the log in
development, and elsewhere there is no email sign-in.
The mail is plain text, in English or German: the code first and in the
subject, so it shows in the notification and the system can offer it,
the instance it signs in to, its 15 minutes, and that it can be ignored;
no links, no tracking, no HTML. A mail that couldn't be sent is a refusal
of its own (mailFailed): nothing of the request is kept, and the log
names the error's type only, as the service's answer may name the
address. A fake SMTP server on loopback drives the real mailer in the
tests: it delivers, and nothing goes to a server without TLS.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 20:00:52 +02:00
|
|
|
punycoder:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: punycoder
|
|
|
|
|
sha256: "982734df864d9588eb13e28ac1c5a46b57e22117b3696032ac58739966cec190"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.0"
|
Import Anki decks with their files and history
Files in content: the person's images and sounds as asset rows synced like
all content, their files kept by hash on each device, uploaded after each
sync, downloaded on demand and checked against their hash
(core/asset/AssetRepository). Rich text names them as asset:<id> URLs, in
the editor's image block and an audio block of ours; any other URL is never
fetched. Sounds play through audioplayers, one at a time. Content holding
only an image or a sound isn't blank, and lists show it as such.
The Anki import ("Import from Anki" under Add material): .apkg and .colpkg
packages in all three formats Anki has written, read on an isolate of their
own. Modern packages compress everything with zstd in frames that don't
record their size, which pure_zstd v1.0.0 refuses; our fork decodes them.
Fields become rich text by a converter of our own (lines, lists, formatting,
images, sounds, cloze deletions hidden on the front). One card per note,
the files first, studysets as chosen (flatten, sub-studysets, or tags by
subdeck), the notes' tags, and, if wanted, the review history, which FSRS
replays: the first template's reviews to the card's schedule, a reversed
note type's second to the reverse one.
Imported cards say where they came from in their first revision (card
schema 3); the dashboard doesn't count them as written. The test fixtures
are exported by Anki itself (tool/anki/make_fixtures.py).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-02 04:52:02 +02:00
|
|
|
pure_zstd:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
path: "."
|
|
|
|
|
ref: "596b63d5741d479073fbfc78377cc7dbdd342da3"
|
|
|
|
|
resolved-ref: "596b63d5741d479073fbfc78377cc7dbdd342da3"
|
|
|
|
|
url: "https://code.halkyon.app/project-halkyon/pure-zstd.git"
|
|
|
|
|
source: git
|
|
|
|
|
version: "1.0.0"
|
2026-09-30 08:38:08 +02:00
|
|
|
qr:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: qr
|
|
|
|
|
sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.2"
|
2026-09-16 19:24:59 +02:00
|
|
|
record_use:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: record_use
|
|
|
|
|
sha256: "1cb8564af8d43b464294411db9217f5ec04891c6f22ee2c32d73ae05e88a6bd2"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.1"
|
|
|
|
|
redis:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: redis
|
|
|
|
|
sha256: d7c7f18a374936baa786baf5f0e747aa5510bb289aad44b30ec41e3b703233b4
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.1.0"
|
|
|
|
|
relic:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: relic
|
|
|
|
|
sha256: "202cef8a41667b35bd93db662e360ab5be5f67493b539121ed6f8899b10d893f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0-rc.1"
|
|
|
|
|
relic_core:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: relic_core
|
|
|
|
|
sha256: "3c15d9655d2c95bdec6620f27ee99c0f2236343fa915ac6cb846cb6430d9c565"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0-rc.1"
|
|
|
|
|
relic_io:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: relic_io
|
|
|
|
|
sha256: "1808fc4fa6fa9580e013af119fe1504eb1ba01ad6db3808053dc18c53dda8c65"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0-rc.1"
|
|
|
|
|
rfc_6901:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: rfc_6901
|
|
|
|
|
sha256: "6a43b1858dca2febaf93e15639aa6b0c49ccdfd7647775f15a499f872b018154"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.2.1"
|
feat: PDF sources: read, take notes and cards from pages, deadlines
PDFs live in a studyset's new Files tab: uploaded from Add material
(a file the studyset holds already asks first), each row with its
pages, cards, notes and size, how far it is read and its reading
deadline; renamed, given a deadline (a page or a chapter by a day),
marked as read, started afresh, deleted with a moment to undo.
The reader (/pdfs/:id) opens where reading left off: on wide windows
a rail of tools (search, fit, zoom, fullscreen), a page counter with
the chapter, and a sidebar; on phones a top bar, a page scrubber and
a sheet. The sidebar holds the PDF's flashcards, by page or chapter,
made from selected text or written there, each tied to its page and
tagged with its chapter; and the page's note, an ordinary note tied
to the page. Screenshots of a region become images that know their
page. Cards and screenshots lead back to their page; reading on past
a chapter with cards suggests studying it. Home shows the deadlines
running and to come, and a timeline of them.
Server: pdf_source rows (content in the payload, last writer wins)
and an append-only pdf_reading log, the furthest page derived from
it so devices never conflict. Files up to 50 MB for PDFs (20 MB for
others; a larger file that isn't a PDF is deleted once stored). A
deleted PDF takes its file's asset row along unless another PDF has
the same file. Card payload 4 and note payload 2 keep the page.
The reader draws with pdfrx (PDFium) behind PdfEngine in
Dependencies; widget tests use a fake, and
integration_test/pdf_engine_test.dart checks the real engine on a
device or the desktop.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-03 14:40:08 +02:00
|
|
|
rxdart:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: rxdart
|
|
|
|
|
sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.28.0"
|
feat(jellyfin): watch from one's own Jellyfin server and learn the words of its subtitles
Animelon's way of learning from video, from the person's own Jellyfin
server: connected per device (Settings, or a studyset's Add material ›
Watch from Jellyfin) with a name and password or a Quick Connect code,
over HTTPS only (plain HTTP only to a server on the same machine); the
token stays in the system's keyring. Shows, films and videos tied to a
studyset follow the person in their settings as the server's and the
item's ids alone (settings schema 9), named by the server when shown.
The Watch screen plays the video (video_player on Android, media_kit's
libmpv on Linux and Windows) with the line in the studyset's front
language cut into the dictionary's words with furigana, and the back
language's line beneath; a word tapped pauses the video and becomes a
card with the line and its translation as its first hint, tagged with
the show. The video's words are listed, most frequent first. The sound is
the track in the studyset's language, whichever the file marks default,
and the menu switches it; the subtitles read are a whole track, never a
forced one (which only covers what the sound doesn't say), and captions
for the hard of hearing only without plain ones. The line and its
translation take the video's width in a box of a fixed height, so the
video keeps its size; in the dark theme the video's colours glow around
it, as YouTube's ambient mode, and the words' panel takes the colour of
the episode's picture under the pointer.
A line is cut into words with one request: DictionaryEndpoint.withKeys
looks up every stretch of it that may be a word, as it stands and as
every word it may be a conjugation of, in the new dictionary_key table
(one row per key, indexed; migration dictionary-keys adds the table and
its index, nothing else), which the loader fills beside the entries.
The instance gets the text of each line looked up and keeps none of it,
as the Watch screen says.
Linux builds need libmpv-dev, and the app links libmpv: the snap stages
Ubuntu's libmpv2, makes the update-alternatives links for BLAS and LAPACK
that ffmpeg's speech recognition needs (staging never runs install
scripts), and removes what the GNOME runtime and core24 already hold, as
older copies of cairo, pango and librsvg hid the runtime's from its GTK.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-13 11:31:37 +02:00
|
|
|
safe_local_storage:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: safe_local_storage
|
|
|
|
|
sha256: "494b982d5edb71030650ea463d939670e91b232b588323dc75229d2c5f23e7b7"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.6"
|
2026-09-30 08:38:08 +02:00
|
|
|
scroll_to_index:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: scroll_to_index
|
|
|
|
|
sha256: b707546e7500d9f070d63e5acf74fd437ec7eeeb68d3412ef7b0afada0b4f176
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.1"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
sembast:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sembast
|
|
|
|
|
sha256: "05da81104e6d4a1ecbeb9aa92062231620d360c8bd9303b82495842c4d92632b"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.9.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod:
|
2026-10-09 11:09:52 +02:00
|
|
|
dependency: transitive
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: serverpod
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "59e5b3fc10fbe8942bbbc8363c35490e8a6e47752b8cb84b4bf5e93e6128399e"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
build: Serverpod v4.0.3
Moves every Serverpod package, and the four overrides for serverpod_offline_sync, from v4.0.2 to v4.0.3 before the first synced table's migration exists, so that migration is created on the version that stays.
v4.0.3 contains fixes only. Checked before moving: serverpod_database gained only backwards-compatible changes, none of which the sync package calls into. Server-side session keys are hashed as before (the cheaper argon2 applies to JWT refresh tokens, which we don't use), so no session ends. The auth module's profile image relation is now deferred, which fixes restoring a Postgres dump; step 7's migration carries that change.
argon2 now runs in serverpod_argon2 (BSD-3), a new dependency of the server only: a prebuilt, statically linked library that needs no glibc, bundled by dart build cli like the SQLite libraries, so the Docker build is unchanged. It doesn't reach the app.
The code generator still fails on Dart v3.13's primary constructors in endpoint files (tried again), so the server keeps the four syntax lints off. The regenerated test tools gain withServerpod's ephemeralDatabase option.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 10:42:34 +02:00
|
|
|
serverpod_argon2:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_argon2
|
|
|
|
|
sha256: bc38946561c556693f8802e4f590761773e5a139346f2e9c9542c936ca706a8f
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.1.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_auth_core_client:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_auth_core_client
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "2150795e2b2817749e9834add6c1610d4c2f29d5709f0216892267afe3ad9b4f"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_auth_core_flutter:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_auth_core_flutter
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "0f75a43f85e79d2e48baadb99bb70799da3784188af5df51979fca6bb523cab7"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_auth_core_server:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_auth_core_server
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "7c19294ce313c5e34ad9c99ca8a5667f8287c13c63699d5003814a2d030ec797"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_auth_idp_client:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_auth_idp_client
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "045d6d49b15bf163a23dc18393c406f605e92c0c897f2244042f052435b1e176"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_auth_idp_flutter:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_auth_idp_flutter
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: e3c2e8dc5dc5b421beac1910f702a227b1f774969bf67e37f39c62e455f1bc3b
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_auth_idp_server:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_auth_idp_server
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "48b5b0a9985fa16ed250744ab47d51e4dc1b99922359a2f5e402919079baac07"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_client:
|
2026-10-09 11:09:52 +02:00
|
|
|
dependency: transitive
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: serverpod_client
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "9c86584382bfddab72cdd4fc992ee52d0fecc6dc83da2d831d7577a28ded8a60"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_database:
|
2026-10-09 11:09:52 +02:00
|
|
|
dependency: transitive
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: serverpod_database
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "78603002f4cff60babea959765ce7b573c316450983b0481da6decc87ad0c702"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_embedded_postgres:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_embedded_postgres
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "6e23e86da825d0a18c409668e276d9c63565030662d79039a0ae03dc7b87155d"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_flutter:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_flutter
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "5acd244bb9daa51955195434d97c3cc489dbf928d98e710f5a1c0c262cc56e31"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_lints:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_lints
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "5f6b8a2976b3b5aad0066b039fbe91148a4c023d1bd618f16c5f58eb1686aefc"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_logging:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_logging
|
|
|
|
|
sha256: "177d3f53144f2811c2df01bb5134fae59db48129fac62efef11d12407feae6a7"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.1.0"
|
feat(server): studysets, the first synced table (migration pending)
Adopts serverpod_offline_sync v0.0.8 (ADR 0001): its module (nickname offline_sync) and the experimental database: sync in generator.yaml, its server and client packages, and overrides that keep the four Serverpod core packages on v4.0.2, since the package pins v4.0.0 exactly and the spike showed it works on v4.0.2. The app's new dependencies come along because the workspace shares one lock file.
Studyset is the first synced model. Its space owns it, so it has no owner column, and only the envelope is a column: keyId and nonce stay null (no end-to-end encryption; ADR 0002, rule 6), and payload holds the content as versioned UTF-8 JSON, so a new content field changes the payload's schema version instead of this table, whose every migration locks older app versions out of syncing (rule 3). The audience column of the original design is gone: it served key selection, and the engine's spaces decide who reads a row.
The generated server and client code is included. The migration isn't: it is created together with the move to Serverpod v4.0.3 and reviewed first, like the client's local migration (the client's lib/migrations is still empty).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 10:11:24 +02:00
|
|
|
serverpod_offline_sync:
|
2026-10-12 13:31:22 +02:00
|
|
|
dependency: "direct overridden"
|
feat(server): studysets, the first synced table (migration pending)
Adopts serverpod_offline_sync v0.0.8 (ADR 0001): its module (nickname offline_sync) and the experimental database: sync in generator.yaml, its server and client packages, and overrides that keep the four Serverpod core packages on v4.0.2, since the package pins v4.0.0 exactly and the spike showed it works on v4.0.2. The app's new dependencies come along because the workspace shares one lock file.
Studyset is the first synced model. Its space owns it, so it has no owner column, and only the envelope is a column: keyId and nonce stay null (no end-to-end encryption; ADR 0002, rule 6), and payload holds the content as versioned UTF-8 JSON, so a new content field changes the payload's schema version instead of this table, whose every migration locks older app versions out of syncing (rule 3). The audience column of the original design is gone: it served key selection, and the engine's spaces decide who reads a row.
The generated server and client code is included. The migration isn't: it is created together with the move to Serverpod v4.0.3 and reviewed first, like the client's local migration (the client's lib/migrations is still empty).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 10:11:24 +02:00
|
|
|
description:
|
2026-10-12 13:31:22 +02:00
|
|
|
path: "packages/serverpod_offline_sync"
|
perf(sync): the fork's signed commit with fast merged deletes and batched inserts
The offline sync package's shared part now comes from the fork's branch
halkyon/batch-inserts (949a664, signed), adding two changes to the pin.
A merge only deleting rows skips the projection pass when every visible
row below them goes with them (a card deleted on one device, in a
library of 8,000 cards: 5.4 s for the server to merge, now about 35 ms;
4 s on each other device, now about 0.1 s). And a merge the pass leaves
out writes its new rows up to 1,000 to a statement, its proof also
taking nested studysets (a first push of that library: 35 to 41 s on
the server, now about 5; a device receiving it, 60 s, now 44).
A new sync test deletes a card on one device while another rates it:
the merged delete declines the shortcut there, and both devices end
without the card or its rating.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-17 22:24:30 +02:00
|
|
|
ref: "949a6645e08af27bb61c96d7ddc2b6d145fed554"
|
|
|
|
|
resolved-ref: "949a6645e08af27bb61c96d7ddc2b6d145fed554"
|
2026-10-12 13:31:22 +02:00
|
|
|
url: "https://code.halkyon.app/project-halkyon/serverpod-offline-sync.git"
|
|
|
|
|
source: git
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "0.0.10"
|
feat(server): studysets, the first synced table (migration pending)
Adopts serverpod_offline_sync v0.0.8 (ADR 0001): its module (nickname offline_sync) and the experimental database: sync in generator.yaml, its server and client packages, and overrides that keep the four Serverpod core packages on v4.0.2, since the package pins v4.0.0 exactly and the spike showed it works on v4.0.2. The app's new dependencies come along because the workspace shares one lock file.
Studyset is the first synced model. Its space owns it, so it has no owner column, and only the envelope is a column: keyId and nonce stay null (no end-to-end encryption; ADR 0002, rule 6), and payload holds the content as versioned UTF-8 JSON, so a new content field changes the payload's schema version instead of this table, whose every migration locks older app versions out of syncing (rule 3). The audience column of the original design is gone: it served key selection, and the engine's spaces decide who reads a row.
The generated server and client code is included. The migration isn't: it is created together with the move to Serverpod v4.0.3 and reviewed first, like the client's local migration (the client's lib/migrations is still empty).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 10:11:24 +02:00
|
|
|
serverpod_offline_sync_client:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_offline_sync_client
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "7e426f78cebb0a72294a0cfa695d68020de1d5969d4041a5d5c732201175a1bd"
|
feat(server): studysets, the first synced table (migration pending)
Adopts serverpod_offline_sync v0.0.8 (ADR 0001): its module (nickname offline_sync) and the experimental database: sync in generator.yaml, its server and client packages, and overrides that keep the four Serverpod core packages on v4.0.2, since the package pins v4.0.0 exactly and the spike showed it works on v4.0.2. The app's new dependencies come along because the workspace shares one lock file.
Studyset is the first synced model. Its space owns it, so it has no owner column, and only the envelope is a column: keyId and nonce stay null (no end-to-end encryption; ADR 0002, rule 6), and payload holds the content as versioned UTF-8 JSON, so a new content field changes the payload's schema version instead of this table, whose every migration locks older app versions out of syncing (rule 3). The audience column of the original design is gone: it served key selection, and the engine's spaces decide who reads a row.
The generated server and client code is included. The migration isn't: it is created together with the move to Serverpod v4.0.3 and reviewed first, like the client's local migration (the client's lib/migrations is still empty).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 10:11:24 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "0.0.10"
|
feat(server): studysets, the first synced table (migration pending)
Adopts serverpod_offline_sync v0.0.8 (ADR 0001): its module (nickname offline_sync) and the experimental database: sync in generator.yaml, its server and client packages, and overrides that keep the four Serverpod core packages on v4.0.2, since the package pins v4.0.0 exactly and the spike showed it works on v4.0.2. The app's new dependencies come along because the workspace shares one lock file.
Studyset is the first synced model. Its space owns it, so it has no owner column, and only the envelope is a column: keyId and nonce stay null (no end-to-end encryption; ADR 0002, rule 6), and payload holds the content as versioned UTF-8 JSON, so a new content field changes the payload's schema version instead of this table, whose every migration locks older app versions out of syncing (rule 3). The audience column of the original design is gone: it served key selection, and the engine's spaces decide who reads a row.
The generated server and client code is included. The migration isn't: it is created together with the move to Serverpod v4.0.3 and reviewed first, like the client's local migration (the client's lib/migrations is still empty).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 10:11:24 +02:00
|
|
|
serverpod_offline_sync_server:
|
2026-09-16 19:24:59 +02:00
|
|
|
dependency: transitive
|
feat(server): studysets, the first synced table (migration pending)
Adopts serverpod_offline_sync v0.0.8 (ADR 0001): its module (nickname offline_sync) and the experimental database: sync in generator.yaml, its server and client packages, and overrides that keep the four Serverpod core packages on v4.0.2, since the package pins v4.0.0 exactly and the spike showed it works on v4.0.2. The app's new dependencies come along because the workspace shares one lock file.
Studyset is the first synced model. Its space owns it, so it has no owner column, and only the envelope is a column: keyId and nonce stay null (no end-to-end encryption; ADR 0002, rule 6), and payload holds the content as versioned UTF-8 JSON, so a new content field changes the payload's schema version instead of this table, whose every migration locks older app versions out of syncing (rule 3). The audience column of the original design is gone: it served key selection, and the engine's spaces decide who reads a row.
The generated server and client code is included. The migration isn't: it is created together with the move to Serverpod v4.0.3 and reviewed first, like the client's local migration (the client's lib/migrations is still empty).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 10:11:24 +02:00
|
|
|
description:
|
|
|
|
|
name: serverpod_offline_sync_server
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: b44cc3fbff12fae2a4c09af04214aaad1e0a0e6380c3d804e7b2db1f9218b401
|
feat(server): studysets, the first synced table (migration pending)
Adopts serverpod_offline_sync v0.0.8 (ADR 0001): its module (nickname offline_sync) and the experimental database: sync in generator.yaml, its server and client packages, and overrides that keep the four Serverpod core packages on v4.0.2, since the package pins v4.0.0 exactly and the spike showed it works on v4.0.2. The app's new dependencies come along because the workspace shares one lock file.
Studyset is the first synced model. Its space owns it, so it has no owner column, and only the envelope is a column: keyId and nonce stay null (no end-to-end encryption; ADR 0002, rule 6), and payload holds the content as versioned UTF-8 JSON, so a new content field changes the payload's schema version instead of this table, whose every migration locks older app versions out of syncing (rule 3). The audience column of the original design is gone: it served key selection, and the engine's spaces decide who reads a row.
The generated server and client code is included. The migration isn't: it is created together with the move to Serverpod v4.0.3 and reviewed first, like the client's local migration (the client's lib/migrations is still empty).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 10:11:24 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "0.0.10"
|
feat(server): studysets, the first synced table (migration pending)
Adopts serverpod_offline_sync v0.0.8 (ADR 0001): its module (nickname offline_sync) and the experimental database: sync in generator.yaml, its server and client packages, and overrides that keep the four Serverpod core packages on v4.0.2, since the package pins v4.0.0 exactly and the spike showed it works on v4.0.2. The app's new dependencies come along because the workspace shares one lock file.
Studyset is the first synced model. Its space owns it, so it has no owner column, and only the envelope is a column: keyId and nonce stay null (no end-to-end encryption; ADR 0002, rule 6), and payload holds the content as versioned UTF-8 JSON, so a new content field changes the payload's schema version instead of this table, whose every migration locks older app versions out of syncing (rule 3). The audience column of the original design is gone: it served key selection, and the engine's spaces decide who reads a row.
The generated server and client code is included. The migration isn't: it is created together with the move to Serverpod v4.0.3 and reviewed first, like the client's local migration (the client's lib/migrations is still empty).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-30 10:11:24 +02:00
|
|
|
serverpod_serialization:
|
2026-10-09 11:09:52 +02:00
|
|
|
dependency: transitive
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: serverpod_serialization
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "5f6e417c97afd7232931c5db25b078498c732f5d484262da9b1aad8d3b2bf2ca"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_shared:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_shared
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: f53f81b55bf4483cf352970da3c3fe63c6eeba9370f315d0d0720ae72c352717
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
serverpod_test:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: serverpod_test
|
2026-10-09 11:09:52 +02:00
|
|
|
sha256: "8d6ac3e70edcec17a8e9f37ceadd30b2a91fdc07fa7c8b1591cba8ab7ce518cd"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-10-09 11:09:52 +02:00
|
|
|
version: "4.0.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
shelf:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shelf
|
|
|
|
|
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.4.2"
|
|
|
|
|
shelf_packages_handler:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shelf_packages_handler
|
|
|
|
|
sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.2"
|
|
|
|
|
shelf_static:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shelf_static
|
|
|
|
|
sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.3"
|
|
|
|
|
shelf_web_socket:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shelf_web_socket
|
|
|
|
|
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.0"
|
|
|
|
|
sign_in_with_apple:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sign_in_with_apple
|
|
|
|
|
sha256: "6d205ad2b30f95b231812d61f19b4a8df836f16ba9cde28735b3ac8ece9113f7"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "8.2.0"
|
|
|
|
|
sign_in_with_apple_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sign_in_with_apple_platform_interface
|
|
|
|
|
sha256: "981bca52cf3bb9c3ad7ef44aace2d543e5c468bb713fd8dda4275ff76dfa6659"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0"
|
|
|
|
|
sign_in_with_apple_server:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sign_in_with_apple_server
|
|
|
|
|
sha256: b431982c88e8649aecb5a17678082cb8045d70eebca8555acb1d1b561d4756b9
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.0"
|
|
|
|
|
sign_in_with_apple_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sign_in_with_apple_web
|
|
|
|
|
sha256: f316400827f52cafcf50d00e1a2e8a0abc534ca1264e856a81c5f06bd5b10fed
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.0"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
simple_sparse_list:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: simple_sparse_list
|
|
|
|
|
sha256: aa648fd240fa39b49dcd11c19c266990006006de6699a412de485695910fbc1f
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.1.4"
|
2026-09-16 19:24:59 +02:00
|
|
|
sky_engine:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
feat(keys): halkyon_keys, an account's keys on the device
ADR 0017's step 1, on libsodium (sodium 4.1.0+1, whose build hook
compiles the libsodium 1.0.22 it ships: a C compiler and make wherever
it builds):
- Argon2id (64 MiB, 3 passes, kept with the account and never below
that) makes a master key, which libsodium's KDF splits into SRP's
secret (x) and the key-encryption key.
- The account's X25519 and Ed25519 key pairs, their private halves
wrapped with XChaCha20-Poly1305 under the KEK and under the recovery
key, bound to their public keys.
- A 24-word BIP-39 recovery phrase (the English list, MIT) and the
recovery key derived from it.
- Data keys sealed to the account with crypto_box_seal, bound to their
IDs; content in ADR 0002's envelope, encrypted with a data key and
signed with Ed25519 (detached), bound to a context the caller names.
- Secrets in libsodium's guarded memory where its API takes them.
- Tests: libsodium's Argon2id known answers, BIP-39's English vectors,
round trips and every refusal.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-20 12:01:52 +02:00
|
|
|
sodium:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sodium
|
|
|
|
|
sha256: "892b016194f60fb8f53470da866e3659877b7832b993b18ab56139a782c2d802"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.1.0+1"
|
2026-09-16 19:24:59 +02:00
|
|
|
source_map_stack_trace:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: source_map_stack_trace
|
|
|
|
|
sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.2"
|
|
|
|
|
source_maps:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: source_maps
|
|
|
|
|
sha256: "14c2945847669b44089bb1222f66873d7ff7103c58911917f2a63c5a62327898"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.10.14"
|
|
|
|
|
source_span:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: source_span
|
|
|
|
|
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.10.2"
|
|
|
|
|
sqlite3:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sqlite3
|
|
|
|
|
sha256: fa3fd961e83b2dca8890a7b1014ab1226831d2b5908067c0ab7f385ffb655caf
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.6.0"
|
|
|
|
|
sqlite3_connection_pool:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sqlite3_connection_pool
|
|
|
|
|
sha256: b01024fd67922680e5512abf3201974dab2d98d0664d145ec741740b448fdc5f
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.2.11"
|
|
|
|
|
sqlite3_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sqlite3_web
|
|
|
|
|
sha256: aa6af15ef8bf8551d3a84203e3cbc022990567372e46ef98f91bdb2018fcfb0e
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.4"
|
|
|
|
|
sqlite_async:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sqlite_async
|
|
|
|
|
sha256: "40c7d6f660322e4a2b4367ff75b9d5111389441aaa87e44f417420b56e0b0c97"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.14.5"
|
|
|
|
|
sqlparser:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sqlparser
|
|
|
|
|
sha256: "40bdddb306a727be9ce510bd2d2b9a6c9db6c586d846ef7b22e3990a2b24f02d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.44.5"
|
|
|
|
|
stack_trace:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: stack_trace
|
|
|
|
|
sha256: "277654b3034d17ac6f9f1cb5595db011b1d5d41e8806866db28e0abaa101c490"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.12.2"
|
|
|
|
|
stream_channel:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: stream_channel
|
|
|
|
|
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.4"
|
|
|
|
|
string_scanner:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: string_scanner
|
|
|
|
|
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.4.1"
|
2026-09-30 08:38:08 +02:00
|
|
|
string_validator:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: string_validator
|
|
|
|
|
sha256: "240f4c98027dfbe8639c8271ef18cc9de735b47067aa15a720cfed9576a512b1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
sync_http:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: sync_http
|
|
|
|
|
sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.1"
|
|
|
|
|
synchronized:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: synchronized
|
|
|
|
|
sha256: "397b146f97613b83d84bdccb439bc8d0f3aebb6c1d14a9641e6f24201c490b2d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.4.2"
|
|
|
|
|
system_resources_2:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: system_resources_2
|
|
|
|
|
sha256: "3f1d7da26ece139d03e8679ca5d99faceadfdbb4edc108244aa4cc362b9181ef"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.2"
|
|
|
|
|
term_glyph:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: term_glyph
|
|
|
|
|
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.2"
|
|
|
|
|
test:
|
build: Melos, a Dart check and every path for the single repository
- Melos 8.9 as the root's dev dependency, with scripts across the
workspace (analyze, test:dart, test:flutter, generate, check) and its
filters (--diff, --include-dependents); cli_util overridden to 0.5.2
for it, since Learn's flutter_launcher_icons asks for 0.4 and uses only
its logger, unchanged in 0.5.
- tool/check.dart in place of tool/check.sh: packages, formatting of our
own files, analysis, the tools' tests, then every package's tests
through Melos (--changed-since=<commit> for only what changed and what
depends on it). tool/pre-push is the hook: the signature check, then
the checks. CI generates every server's code and runs the same check.
- The images build from the root with a workspace narrowed to what they
need (tool/workspace_only.sh); compose, the deploy's migration test,
the snap, the release script, the editor's launch files and Learn's
asset tools (run from apps/learn) follow the new layout.
- The project's source is named as project-halkyon/halkyon (source link,
snap, F-Droid listing, release uploads); the AGPL packages carry the
licence's own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 20:39:09 +02:00
|
|
|
dependency: "direct dev"
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: test
|
|
|
|
|
sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.31.1"
|
|
|
|
|
test_api:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: test_api
|
|
|
|
|
sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.7.12"
|
|
|
|
|
test_core:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: test_core
|
|
|
|
|
sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.6.18"
|
feat(app): editor blocks: callout, spoiler, formulas, files, video, study button
Blocks beyond the editor's own, each built once for editor and view:
- callout: eight kinds in theme colours, kind, title and "folded at
first" from its header; written in place, left with Enter on its
empty last line; never inside another
- spoiler: written in plain sight, hidden behind Reveal read-only
- formula on its own line, written on its own screen with a preview
and snippet buttons, and formulas within a line (Σ in the format
bar); set by flutter_math_fork behind MathView, LaTeX's numbered
environments read as their aligned forms
- image and sound picked from the device, kept as synced files
- YouTube video from its link, with its start and a caption: a card
until played, nothing fetched before; played in place where a web
view exists (youtube_player_iframe, privacy-enhanced), else opened
in the browser, behind YoutubeVideos in Dependencies
- study button: a studyset, a tag or all cards, with or without its
topics, back first; its StudyFocus rides on the study route and
narrows that session only
- tables, already in the editor, now insertable everywhere
An Insert button opens on the format bar, so blocks can be inserted on
phones too; the desktop's / menu lists the same blocks, translated.
Card faces now dock the format bar while written, so cards get blocks
and formatting on phones as well. The blocks are listed in
EditorBlocks: the core's, plus the features' through
EditorBlocksScope. Blocks of a type the app doesn't know say they need
a newer version and stay as they are, so formatVersion stays 1.
Their types and keys are in content_blocks.dart, which RichContent
reads: a block's text counts as text, and a video or study button
isn't blank. The path import now makes formulas real ones.
integration_test/youtube_player_test.dart plays a real video through
the app's player on a device, which no widget test can: YouTube
refuses embeds that don't say where they are embedded.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-03 12:20:41 +02:00
|
|
|
tuple:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: tuple
|
|
|
|
|
sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.2"
|
2026-09-16 19:24:59 +02:00
|
|
|
typed_data:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: typed_data
|
|
|
|
|
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.4.0"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
unicode:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: unicode
|
|
|
|
|
sha256: a6f7bcfc8ea1d5ce1f6c0b1c39117a9919f4953edd9fd7a64090a9796c499b57
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.9"
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
universal_ffi:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: universal_ffi
|
|
|
|
|
sha256: dd2b662d619e10e24532db6e9b80c5bef9da6a09daf1d9b69bba727b2f6c95c6
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.5.1"
|
2026-09-30 08:38:08 +02:00
|
|
|
universal_html:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: universal_html
|
|
|
|
|
sha256: c0bcae5c733c60f26c7dfc88b10b0fd27cbcc45cb7492311cdaa6067e21c9cd4
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.0"
|
|
|
|
|
universal_io:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: universal_io
|
|
|
|
|
sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.1"
|
|
|
|
|
universal_platform:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: universal_platform
|
|
|
|
|
sha256: "64e16458a0ea9b99260ceb5467a214c1f298d647c659af1bff6d3bf82536b1ec"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.0"
|
feat(auth): codes go by mail, through the SMTP service an instance sets up
Email sign-in's codes are mailed over SMTP (pub.dev's mailer), through
whichever service the passwords name: emailSmtpHost, emailSmtpPort,
emailSmtpUser, emailSmtpPassword and emailFrom (EMAIL_SMTP_* and
EMAIL_FROM in deploy/.env, with EMAIL_SIGN_IN_PEPPER). TLS only:
STARTTLS, or TLS directly on 465. learn.halkyon.eu sends through Proton's
SMTP submission. Without a service, codes still go to the log in
development, and elsewhere there is no email sign-in.
The mail is plain text, in English or German: the code first and in the
subject, so it shows in the notification and the system can offer it,
the instance it signs in to, its 15 minutes, and that it can be ignored;
no links, no tracking, no HTML. A mail that couldn't be sent is a refusal
of its own (mailFailed): nothing of the request is kept, and the log
names the error's type only, as the service's answer may name the
address. A fake SMTP server on loopback drives the real mailer in the
tests: it delivers, and nothing goes to a server without TLS.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 20:00:52 +02:00
|
|
|
unorm_dart:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: unorm_dart
|
|
|
|
|
sha256: b4f4d2aff27d65a5fc37f400d4c09e55d7535359315acbe3b895a9add4de3a23
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.3"
|
feat(jellyfin): watch from one's own Jellyfin server and learn the words of its subtitles
Animelon's way of learning from video, from the person's own Jellyfin
server: connected per device (Settings, or a studyset's Add material ›
Watch from Jellyfin) with a name and password or a Quick Connect code,
over HTTPS only (plain HTTP only to a server on the same machine); the
token stays in the system's keyring. Shows, films and videos tied to a
studyset follow the person in their settings as the server's and the
item's ids alone (settings schema 9), named by the server when shown.
The Watch screen plays the video (video_player on Android, media_kit's
libmpv on Linux and Windows) with the line in the studyset's front
language cut into the dictionary's words with furigana, and the back
language's line beneath; a word tapped pauses the video and becomes a
card with the line and its translation as its first hint, tagged with
the show. The video's words are listed, most frequent first. The sound is
the track in the studyset's language, whichever the file marks default,
and the menu switches it; the subtitles read are a whole track, never a
forced one (which only covers what the sound doesn't say), and captions
for the hard of hearing only without plain ones. The line and its
translation take the video's width in a box of a fixed height, so the
video keeps its size; in the dark theme the video's colours glow around
it, as YouTube's ambient mode, and the words' panel takes the colour of
the episode's picture under the pointer.
A line is cut into words with one request: DictionaryEndpoint.withKeys
looks up every stretch of it that may be a word, as it stands and as
every word it may be a conjugation of, in the new dictionary_key table
(one row per key, indexed; migration dictionary-keys adds the table and
its index, nothing else), which the loader fills beside the entries.
The instance gets the text of each line looked up and keeps none of it,
as the Watch screen says.
Linux builds need libmpv-dev, and the app links libmpv: the snap stages
Ubuntu's libmpv2, makes the update-alternatives links for BLAS and LAPACK
that ffmpeg's speech recognition needs (staging never runs install
scripts), and removes what the GNOME runtime and core24 already hold, as
older copies of cairo, pango and librsvg hid the runtime's from its GTK.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-13 11:31:37 +02:00
|
|
|
uri_parser:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: uri_parser
|
|
|
|
|
sha256: "051c62e5f693de98ca9f130ee707f8916e2266945565926be3ff20659f7853ce"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.2"
|
2026-09-16 19:24:59 +02:00
|
|
|
url_launcher:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher
|
|
|
|
|
sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.3.2"
|
|
|
|
|
url_launcher_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_android
|
|
|
|
|
sha256: "611e87fb320b70d1dd721dc46af89c98aceccea9b31fde49e084591414e0c610"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.3.33"
|
|
|
|
|
url_launcher_ios:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_ios
|
|
|
|
|
sha256: "8faa1aab294f1ab4040b43660c887b0418d5fa4f0cffef76a484e6aa1092eb4a"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.4.2"
|
|
|
|
|
url_launcher_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_linux
|
|
|
|
|
sha256: "10f86fef4c2c43563fa6c211ff9cf757adf4d3ab762c56bd430664a947d70cd0"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.2.3"
|
|
|
|
|
url_launcher_macos:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_macos
|
|
|
|
|
sha256: "5e835a3b869c2d70325349c81c5a45c28e20791265b67b2669da6b08c5cd5201"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.2.6"
|
|
|
|
|
url_launcher_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_platform_interface
|
|
|
|
|
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.2"
|
|
|
|
|
url_launcher_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_web
|
|
|
|
|
sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.4.3"
|
|
|
|
|
url_launcher_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_windows
|
|
|
|
|
sha256: "6c5ad3f22cd4c38e089b81963b3cd7bb83b111b2df5dce008bb066162f42e429"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.6"
|
|
|
|
|
uuid:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: uuid
|
|
|
|
|
sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.6.0"
|
|
|
|
|
vector_graphics:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vector_graphics
|
|
|
|
|
sha256: "9d0e3b9cb16542ad660daee871e726a10d13a93b7b5391677c3160e8f5e83935"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.3"
|
|
|
|
|
vector_graphics_codec:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vector_graphics_codec
|
|
|
|
|
sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.13"
|
|
|
|
|
vector_graphics_compiler:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vector_graphics_compiler
|
|
|
|
|
sha256: "4dca4feb77dc3ec7f6e27e49c53241eb8217f55e4f9b12599a27f8903bca5682"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.3.0"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
vector_map_tiles:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vector_map_tiles
|
|
|
|
|
sha256: "42dce00e0f69352663f4c9c78fe5cc900704f6dd46019640ebda0d84cc14ce68"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "9.0.0-beta.13"
|
2026-09-16 19:24:59 +02:00
|
|
|
vector_math:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vector_math
|
2026-09-24 08:49:44 +02:00
|
|
|
sha256: "92b9910f66ed1057fd4da7b040ae7c74cafacf885bdc81be496928d5049b032d"
|
2026-09-16 19:24:59 +02:00
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
2026-09-24 08:49:44 +02:00
|
|
|
version: "2.4.3"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
vector_tile:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vector_tile
|
|
|
|
|
sha256: "7ae290246e3a8734422672dbe791d3f7b8ab631734489fc6d405f1cc2080e38c"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.1"
|
|
|
|
|
vector_tile_renderer:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vector_tile_renderer
|
|
|
|
|
sha256: "982ae5d8f0ab285463a4cd62e711c8f9a36b9b3112b5a471ae8d4f4838f31537"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.1.0"
|
feat(jellyfin): watch from one's own Jellyfin server and learn the words of its subtitles
Animelon's way of learning from video, from the person's own Jellyfin
server: connected per device (Settings, or a studyset's Add material ›
Watch from Jellyfin) with a name and password or a Quick Connect code,
over HTTPS only (plain HTTP only to a server on the same machine); the
token stays in the system's keyring. Shows, films and videos tied to a
studyset follow the person in their settings as the server's and the
item's ids alone (settings schema 9), named by the server when shown.
The Watch screen plays the video (video_player on Android, media_kit's
libmpv on Linux and Windows) with the line in the studyset's front
language cut into the dictionary's words with furigana, and the back
language's line beneath; a word tapped pauses the video and becomes a
card with the line and its translation as its first hint, tagged with
the show. The video's words are listed, most frequent first. The sound is
the track in the studyset's language, whichever the file marks default,
and the menu switches it; the subtitles read are a whole track, never a
forced one (which only covers what the sound doesn't say), and captions
for the hard of hearing only without plain ones. The line and its
translation take the video's width in a box of a fixed height, so the
video keeps its size; in the dark theme the video's colours glow around
it, as YouTube's ambient mode, and the words' panel takes the colour of
the episode's picture under the pointer.
A line is cut into words with one request: DictionaryEndpoint.withKeys
looks up every stretch of it that may be a word, as it stands and as
every word it may be a conjugation of, in the new dictionary_key table
(one row per key, indexed; migration dictionary-keys adds the table and
its index, nothing else), which the loader fills beside the entries.
The instance gets the text of each line looked up and keeps none of it,
as the Watch screen says.
Linux builds need libmpv-dev, and the app links libmpv: the snap stages
Ubuntu's libmpv2, makes the update-alternatives links for BLAS and LAPACK
that ffmpeg's speech recognition needs (staging never runs install
scripts), and removes what the GNOME runtime and core24 already hold, as
older copies of cairo, pango and librsvg hid the runtime's from its GTK.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-13 11:31:37 +02:00
|
|
|
video_player:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: video_player
|
|
|
|
|
sha256: "07ae1e03f2d4c8e2e9a75ee678f90acbc4506d4458a9c628512d119a1eee5754"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.14.1"
|
|
|
|
|
video_player_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: video_player_android
|
|
|
|
|
sha256: d27054dea34d748a44f06d433a57005d2aac69944485b0abbaed3303dbcfa3f1
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.12.2"
|
|
|
|
|
video_player_avfoundation:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: video_player_avfoundation
|
|
|
|
|
sha256: "4f8a845173377ab250a50f9b9dfe4a43500cc76a7c49dd8410d02d8fc29dfd8b"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.12.1"
|
|
|
|
|
video_player_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: video_player_platform_interface
|
|
|
|
|
sha256: "92c0fbabe20c788e71fd10d26cea998d0d253282e65d145aed0818731cf593ce"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.9.0"
|
|
|
|
|
video_player_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: video_player_web
|
|
|
|
|
sha256: "9f3c00be2ef9b76a95d94ac5119fb843dca6f2c69e6c9968f6f2b6c9e7afbdeb"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.4.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
vm_service:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vm_service
|
|
|
|
|
sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "15.3.0"
|
feat(jellyfin): watch from one's own Jellyfin server and learn the words of its subtitles
Animelon's way of learning from video, from the person's own Jellyfin
server: connected per device (Settings, or a studyset's Add material ›
Watch from Jellyfin) with a name and password or a Quick Connect code,
over HTTPS only (plain HTTP only to a server on the same machine); the
token stays in the system's keyring. Shows, films and videos tied to a
studyset follow the person in their settings as the server's and the
item's ids alone (settings schema 9), named by the server when shown.
The Watch screen plays the video (video_player on Android, media_kit's
libmpv on Linux and Windows) with the line in the studyset's front
language cut into the dictionary's words with furigana, and the back
language's line beneath; a word tapped pauses the video and becomes a
card with the line and its translation as its first hint, tagged with
the show. The video's words are listed, most frequent first. The sound is
the track in the studyset's language, whichever the file marks default,
and the menu switches it; the subtitles read are a whole track, never a
forced one (which only covers what the sound doesn't say), and captions
for the hard of hearing only without plain ones. The line and its
translation take the video's width in a box of a fixed height, so the
video keeps its size; in the dark theme the video's colours glow around
it, as YouTube's ambient mode, and the words' panel takes the colour of
the episode's picture under the pointer.
A line is cut into words with one request: DictionaryEndpoint.withKeys
looks up every stretch of it that may be a word, as it stands and as
every word it may be a conjugation of, in the new dictionary_key table
(one row per key, indexed; migration dictionary-keys adds the table and
its index, nothing else), which the loader fills beside the entries.
The instance gets the text of each line looked up and keeps none of it,
as the Watch screen says.
Linux builds need libmpv-dev, and the app links libmpv: the snap stages
Ubuntu's libmpv2, makes the update-alternatives links for BLAS and LAPACK
that ffmpeg's speech recognition needs (staging never runs install
scripts), and removes what the GNOME runtime and core24 already hold, as
older copies of cairo, pango and librsvg hid the runtime's from its GTK.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-13 11:31:37 +02:00
|
|
|
wakelock_plus:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: wakelock_plus
|
|
|
|
|
sha256: "22b3e7e937721de70e63c85e7139f4ac781dc22863b9262431a53ac030eb074b"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.8.0"
|
|
|
|
|
wakelock_plus_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: wakelock_plus_platform_interface
|
|
|
|
|
sha256: "764c25504562abc8ac3406f5d175f126b276e6ba916c7c2675690b73368ca384"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.7.0"
|
feat(dictionary): Japanese cut into words and looked up on the device
Once the person agrees, the device holds MeCab's IPADIC and the
instance's JMdict and cuts lines as Jisho.org does, so their text never
leaves it (ADR 0012). MeCab comes through mecab_for_dart, whose build
hook compiles it; its tokens are grouped by Ve's rules, written anew in
Dart, with に kept a word of its own. Each word is found as it stands or
as a form of a word, else by its dictionary form, else as the longest
words it holds from token to token; longer words over token boundaries
are offered as before.
The curator packs Ubuntu's compiled IPADIC beside the dictionary files
(curate ipadic, and every update run). The server exports its JMdict
from its tables, so the device finds the same keys and keeps the same
versions, and serves both at /device-dictionaries/, named in
dictionary.deviceFiles('ja') with their hashes; Caddy forwards the path.
The app checks each file against its hash, unpacks IPADIC, builds a
SQLite database from the export on an isolate, and asks the instance
for newer files every 30 days, downloading only what changed. The Watch
screen offers the download once per device with its size (34 MB, some
150 MB once set up); Settings downloads and removes them. Without them,
or should cutting on the device fail, lines go to the instance as
before. MeCab's, IPADIC's and Ve's licences join the licence list.
Every build now needs a C++ compiler; mecab_for_dart holds code_assets
at 1.x.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-15 21:55:00 +02:00
|
|
|
wasm_ffi:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: wasm_ffi
|
|
|
|
|
sha256: "5a402d5817e3c77e8039f95487a5d8f77d05897c29ce12495b0c5cdd745d5623"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.4.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
watcher:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: watcher
|
|
|
|
|
sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.1"
|
|
|
|
|
web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: web
|
|
|
|
|
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.1"
|
|
|
|
|
web_socket:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: web_socket
|
|
|
|
|
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.1"
|
|
|
|
|
web_socket_channel:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: web_socket_channel
|
|
|
|
|
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.3"
|
|
|
|
|
webdriver:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: webdriver
|
|
|
|
|
sha256: "28b82ec894fed45dd71c23ba62d1af973ed97dd59a4f5790a4d38b0b13e5657e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.2.0"
|
|
|
|
|
webkit_inspection_protocol:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: webkit_inspection_protocol
|
|
|
|
|
sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.1"
|
feat(app): editor blocks: callout, spoiler, formulas, files, video, study button
Blocks beyond the editor's own, each built once for editor and view:
- callout: eight kinds in theme colours, kind, title and "folded at
first" from its header; written in place, left with Enter on its
empty last line; never inside another
- spoiler: written in plain sight, hidden behind Reveal read-only
- formula on its own line, written on its own screen with a preview
and snippet buttons, and formulas within a line (Σ in the format
bar); set by flutter_math_fork behind MathView, LaTeX's numbered
environments read as their aligned forms
- image and sound picked from the device, kept as synced files
- YouTube video from its link, with its start and a caption: a card
until played, nothing fetched before; played in place where a web
view exists (youtube_player_iframe, privacy-enhanced), else opened
in the browser, behind YoutubeVideos in Dependencies
- study button: a studyset, a tag or all cards, with or without its
topics, back first; its StudyFocus rides on the study route and
narrows that session only
- tables, already in the editor, now insertable everywhere
An Insert button opens on the format bar, so blocks can be inserted on
phones too; the desktop's / menu lists the same blocks, translated.
Card faces now dock the format bar while written, so cards get blocks
and formatting on phones as well. The blocks are listed in
EditorBlocks: the core's, plus the features' through
EditorBlocksScope. Blocks of a type the app doesn't know say they need
a newer version and stay as they are, so formatVersion stays 1.
Their types and keys are in content_blocks.dart, which RichContent
reads: a block's text counts as text, and a video or study button
isn't blank. The path import now makes formulas real ones.
integration_test/youtube_player_test.dart plays a real video through
the app's player on a device, which no widget test can: YouTube
refuses embeds that don't say where they are embedded.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-03 12:20:41 +02:00
|
|
|
webview_flutter:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: webview_flutter
|
|
|
|
|
sha256: d53e1ccf5516f25017e3c9d44c39034db352d20fa34fe200674270242c2c5111
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.14.1"
|
|
|
|
|
webview_flutter_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: webview_flutter_android
|
|
|
|
|
sha256: "4de8b3d1ff4ebe1bdb42e68a5e4f809194a3cb0117a8f495f590004f00da3964"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.14.1"
|
|
|
|
|
webview_flutter_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: webview_flutter_platform_interface
|
|
|
|
|
sha256: "1221c1b12f5278791042f2ec2841743784cf25c5a644e23d6680e5d718824f04"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.15.1"
|
|
|
|
|
webview_flutter_wkwebview:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: webview_flutter_wkwebview
|
|
|
|
|
sha256: a9cc3f507ee40127ed0812ca54d00701a27833f51ea0b5820f4b3e7f42518bf3
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.27.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
whiskers:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: whiskers
|
|
|
|
|
sha256: "099799a838ebce1f28809547bb7f2e8fd9b44f4c2bebea9921ab548d95350b64"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.1.1"
|
|
|
|
|
win32:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: win32
|
|
|
|
|
sha256: a0b93865d5644f11cf6a8c3f6db909f1ec168958b5805f6cc684adea957cd63d
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.4.0"
|
2026-09-30 08:38:08 +02:00
|
|
|
win32_registry:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: win32_registry
|
|
|
|
|
sha256: "73b1d78920a9d6e03f8b4e43e612b87bf3152a0e5c5e5150267762b7c4116904"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.3"
|
2026-09-16 19:24:59 +02:00
|
|
|
window_to_front:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: window_to_front
|
|
|
|
|
sha256: "14fad8984db4415e2eeb30b04bb77140b180e260d6cb66b26de126a8657a9241"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.0.4"
|
2026-09-30 08:38:08 +02:00
|
|
|
windows_file_picker:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: windows_file_picker
|
|
|
|
|
sha256: "9f3aa833068b09e380fdc59560ad260a4a14e9397173abb533699f967443602e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0"
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
wkt_parser:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: wkt_parser
|
|
|
|
|
sha256: "8a555fc60de3116c00aad67891bcab20f81a958e4219cc106e3c037aa3937f13"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0"
|
2026-09-16 19:24:59 +02:00
|
|
|
xdg_directories:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: xdg_directories
|
|
|
|
|
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.0"
|
|
|
|
|
xml:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: xml
|
|
|
|
|
sha256: "67f0aff7be013d107995e9b75bf4e7f2c3ef2dfdb2c8e68024bba0a7fd5756a4"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.0.1"
|
|
|
|
|
yaml:
|
build(release): a Dart release tool for every app
tool/release.dart releases one app: `dart run tool/release.dart learn
[major | minor | patch] [--dry-run]`, each app configured in Dart beside
it (apps/learn/release.dart). Every step and check of tool/release.sh
is kept: the repository as pushed, resuming after a release commit and
tag, Flutter as CI pins it, the tools, the key and its certificate pin,
secrets asked for without echo and never written down, CI green on the
newest commit, the signed release commit and tag by a key deploys
accept, the APK built from a checkout of the tag and checked, the snap,
the signed checksums, pushing only after both builds passed, the
release on Forgejo, the F-Droid repository, the Snap Store once a
channel is set.
New: tags per app (learn-v0.19.0, Learn's v… counting as its
history); only commits touching the app decide its version (its folder,
the shared packages it uses by path, the root pubspec and lock, its
release files, where its packages were before the move); --dry-run
reads all of it, lists every step and the notes, and what a release
would refuse, changing nothing. The pure parts are tested in
test/release/. Learn releases build 21 with tool/release.sh, then
switches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:12:31 +02:00
|
|
|
dependency: "direct dev"
|
2026-09-16 19:24:59 +02:00
|
|
|
description:
|
|
|
|
|
name: yaml
|
|
|
|
|
sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.4"
|
chore(lint): LeanCode's strict rules and a pre-push check
The workspace root's analysis_options.yaml includes leancode_lint 27 and enables its analyzer plugin (rules for blocs, Equatable and Flutter layout); the server and the app include that file, while the generated client keeps its own options. Plugins can only be enabled at the root of a pub workspace and only reach packages whose options include the root file, which was verified before settling on this layout. Most rules are warnings, casts, inference and raw types are strict, and the check treats infos as fatal too. lints and flutter_lints are no longer needed.
tool/check.sh checks formatting, runs dart analyze --fatal-infos and the server tests; .git/hooks/pre-push links to it, so every push has to pass it. AGENTS.md describes the checklist and how to install the hook in a fresh clone.
Fixes for the new rules: package imports, run() returns Future<void>, the server setup as one cascade, a primary constructor for the app widget, a const and a redundant argument. The workspace root keeps its conventional name `_` with a documented ignore.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-09-29 23:06:29 +02:00
|
|
|
yaml_edit:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: yaml_edit
|
|
|
|
|
sha256: "07c9e63ba42519745182b88ca12264a7ba2484d8239958778dfe4d44fe760488"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.4"
|
feat(app): editor blocks: callout, spoiler, formulas, files, video, study button
Blocks beyond the editor's own, each built once for editor and view:
- callout: eight kinds in theme colours, kind, title and "folded at
first" from its header; written in place, left with Enter on its
empty last line; never inside another
- spoiler: written in plain sight, hidden behind Reveal read-only
- formula on its own line, written on its own screen with a preview
and snippet buttons, and formulas within a line (Σ in the format
bar); set by flutter_math_fork behind MathView, LaTeX's numbered
environments read as their aligned forms
- image and sound picked from the device, kept as synced files
- YouTube video from its link, with its start and a caption: a card
until played, nothing fetched before; played in place where a web
view exists (youtube_player_iframe, privacy-enhanced), else opened
in the browser, behind YoutubeVideos in Dependencies
- study button: a studyset, a tag or all cards, with or without its
topics, back first; its StudyFocus rides on the study route and
narrows that session only
- tables, already in the editor, now insertable everywhere
An Insert button opens on the format bar, so blocks can be inserted on
phones too; the desktop's / menu lists the same blocks, translated.
Card faces now dock the format bar while written, so cards get blocks
and formatting on phones as well. The blocks are listed in
EditorBlocks: the core's, plus the features' through
EditorBlocksScope. Blocks of a type the app doesn't know say they need
a newer version and stay as they are, so formatVersion stays 1.
Their types and keys are in content_blocks.dart, which RichContent
reads: a block's text counts as text, and a video or study button
isn't blank. The path import now makes formulas real ones.
integration_test/youtube_player_test.dart plays a real video through
the app's player on a device, which no widget test can: YouTube
refuses embeds that don't say where they are embedded.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-03 12:20:41 +02:00
|
|
|
youtube_player_iframe:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: youtube_player_iframe
|
|
|
|
|
sha256: "8488d3fd3ce10286356a3e40036cc9ab296c19f399a3141acb70dc18a5231dab"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.0.2"
|
|
|
|
|
youtube_player_iframe_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: youtube_player_iframe_web
|
|
|
|
|
sha256: "405fccd8b7ae467835fc713bc86a3182470106098eec9aad0c178aec5395efa8"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.3"
|
2026-09-16 19:24:59 +02:00
|
|
|
sdks:
|
|
|
|
|
dart: ">=3.13.0 <4.0.0"
|
2026-09-29 23:11:00 +02:00
|
|
|
flutter: ">=3.47.0 <4.0.0"
|