halkyon/packages/halkyon_content/README.md
Tizian 「ティツィアーン」 d09625d43e
refactor(content,core,app,editor,learn): Learn's content in pure Dart, for its agent
ADR 0044's D49 (amended in building it): what reads and seals Learn's
content moves out of the Flutter packages, so Learn's agent, which runs
without Flutter, shares it rather than repeating the privacy rules.

packages/halkyon_content (new, pure Dart) takes from halkyon_app the
envelope and its cipher, SealedFile, UnlockedAccountKeys, shared
spaces' gateway with SharedKeys and KeyPins, FileCache and
FileServerGateway, with their fakes and tests; halkyon_app exports it,
so no app changes. Its rich_text.dart takes RichContent from
halkyon_editor, which exports it. newAccountKeys makes an agent's key
pair. halkyon_core takes DelayedDeletions and gains SyncRequests, what a
synced gateway asks of the sync, which SyncService implements.

apps/learn/halkyon_learn_core (new, pure Dart) takes Learn's privacy,
sync, payloads and the models, codecs, gateways and repositories of
studysets, cards, notes, tags and feedback, with what they reach of
files, learning paths, citations and study options; the app imports them
from there. A subject's icon, colour and name stay in the app
(SubjectLook); what only the app shows (progress, exam coverage, the
card browser, deletions' waits) stays too. Nothing changes for people
using the apps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-11 22:08:16 +01:00

1.5 KiB

halkyon_content

What seals and opens a person's synced content, in pure Dart (Halkyon's ADR 0044, D49), so that Learn's agent, which runs without Flutter, seals and opens rows as the apps do. The apps take it through halkyon_app, which exports halkyon_content.dart, and rich text through halkyon_editor, which exports rich_text.dart.

Library What it holds
halkyon_content.dart The envelope every synced row is sealed in (PayloadEnvelope on a ContentCipher, SodiumContentCipher; ADR 0019), a file sealed alike (SealedFile, HLKF); the account's unlocked keys (UnlockedAccountKeys) and new ones for an account without a password (newAccountKeys, an agent's); shared spaces through the module (SharedSpaceGateway) and their keys, sealed to each member and held to the public keys first seen (SharedKeys, KeyPins, ADR 0044, D3, D18, D20); people's files on the device and the module's store (FileCache, DirectoryFileCache, FileServerGateway; ADR 0043)
rich_text.dart RichContent, the editor's document JSON, and the names of its blocks (content_blocks.dart), which halkyon_editor edits and shows
testing.dart Fakes: FakeContentCipher, FakeSharedKeysGateway, FakeSharedSpaceGateway, MemoryKeyPinStore, FakeFileServerGateway, MemoryFileCache

sodium's build hook compiles libsodium, so every machine that builds or tests it needs a C compiler and make (as for halkyon_keys). Licensed under the AGPL-3.0, as the apps.