[Feature] Online storage as an extension: off by default, so the interface starts quiet #570
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#570
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
OciDeck has grown into a tool that shows a first-time user a great deal at once. The
Uitbreidingentab already answers that for one cluster: the Informatieveiligheid module is off by default and its features simply are not there until you switch it on. This issue proposes a second module on the same pattern — Online opslag — covering the WebDAV, S3 and Git connection kinds.Two reasons, and the second one matters more.
The first is quiet. Today "Verbinding toevoegen" offers WebDAV, S3 and Git beside the local folder before the user has made a single slide (
lib/widgets/dialogs/parts/settings_dialog_storage.dart:435). Behind those three kinds sit roughly 2,300 lines of settings and provider code, four browser dialogs, a certificate-trust dialog, a proxy-fallback dialog, and — for git — a whole review/merge/tag vocabulary that means nothing to someone writing a talk.The second is honesty about maturity.
docs/design/VERIFICATION.mdis the list of what has never met a real server, and five of its ten points are remote storage: GitHub and GitLab against the real service (1), the live Basic-auth handshake per forge (3), the storage path against a real Forgejo (4), a genuine concurrent edit (5), and several libraries and storage kinds side by side (8). These are good features to have. They are not features to have on by default, because a path that has only ever seen its own tests should be chosen deliberately rather than stumbled into. A module card is the honest place to say that out loud — the description can name the maturity instead of hiding it.Precedent to copy, not to reuse.
lib/state/info_safety_provider.dartis explicit that it is not a module framework: the prefs key and the reveal check are hardcoded to that one module, and "a second module needs a real registry (module id, parameterised keys, per-module reveal)". This issue is that second module, so the registry comes first. One constraint carries over unchanged:secModuleEnabledkeeps its legacy name on disk. Renaming it would silently switch the security module off for everyone who had it on — a behaviour change disguised as tidying, and one nobody reports because it looks like the module was simply never enabled.What moves behind the toggle
settings_dialog_webdav*.dart,settings_dialog_s3*.dart,settings_dialog_git*.dart.app_shell_menu.dart:114,welcome_screen.dart:154), so with no remote connections possible they fall away on their own.app_shell_menu.dart:34).s3_browser_dialog,webdav_browser_dialog,git_browser_dialog,git_search_dialog,certificate_trust_dialog,proxy_fallback_dialog.What stays
Local folders, open and save, export, package import and export, URL import. Someone with a laptop and no server loses nothing at all.
Three rules the module must keep
presentation_info_dialog.dart:411). A deck must never silently degrade to "a local file" because a toggle was flipped.status_bar.dart:360). Its status item, and the route to flush the queue, must survive the module going off. Otherwise switching off a setting quietly abandons work that the user believes is safe.What it costs
The registry, one card in Uitbreidingen, the reveal gates listed above, l10n in 30 languages for every new string, and the documentation gates this repository already enforces —
docs/USER_GUIDE.md,docs/SOURCE_MAP.md, and the docs-reader registration where relevant.Settled: all three kinds, S3 included. S3 is not among the paths named as under-tested, so it rides along on the first argument rather than the second — but hiding WebDAV and Git while leaving S3 in place would keep the tab cluttered and split the concept in two. The module is online opslag, so it is every remote kind, and the card's description should lean on the quiet argument for S3 and on the maturity argument for WebDAV and Git.
Judgement call to make first
What happens to someone who already has a remote connection configured? The module has to start on for them — a one-time migration that reads the existing connection list — or an upgrade hides a setup that was working yesterday. Default-off applies to new installs, not to a working configuration.
Related: #648. The existing Informatieveiligheid module leaks three surfaces that stay visible with the module off. Worth fixing whether or not this issue is built, and worth doing first: it is cheap, it needs no registry, and the per-section reveal predicate it introduces is the same one this module needs to hide storage settings.
Gewogen: bouwen — het label staat op accepted. De stand is sinds het schrijven van dit issue verschoven, en gunstig:
Bouwvolgorde die daaruit volgt: (a) het moduleregister (module-id, geparametriseerde sleutels, per-module reveal; secModuleEnabled behoudt zijn legacy-naam op schijf — hernoemen zet de module stil uit voor iedereen die hem aan had), met migratie van de twee bestaande kaarten; (b) de Online-opslag-module zelf met de drie regels uit het issue (weglaten i.p.v. grijs, tonen zodra inhoud er is, de outbox overleeft het uitzetten); (c) de eenmalige migratie: wie al een remote-verbinding heeft geconfigureerd start met de module áán.
De beslisvraag die het issue benoemt is daarmee beantwoord zoals het issue zelf al voorstelt. Kosten blijven fors (register + poorten over ~2.300 regels oppervlak + l10n + docs + tests), dus dit is een eigen ronde, na het lopende werk aan #541/#741.
Opgepakt. Tak: feat/online-opslag-module-570. Volgorde zoals in de weging: (a) een registerlicht — één opsomming van de drie modules met elk hun eigen bestaande state (module-id + reveal per module; geen sleutelparametrisering, secModuleEnabled houdt zijn schijfnaam) — (b) de modulekaart Online opslag met de eerlijke rijpheidsomschrijving, (c) de poorten (verbindingssoorten, git-menublok; weglaten, niet grijs), (d) tonen-zodra-inhoud (bestaande remote-verbinding of geopend remote-deck), (e) de eenmalige migratie: wie al een remote-verbinding heeft start met de module aan, (f) de outbox overleeft uitzetten. Verwachte reikwijdte: state/ (nieuw registerlicht + settings), settings_dialog_modules/storage/sections, app_shell_menu, welcome_screen, status_bar, l10n, docs, tests.
Af, op main:
204cfcc(PR #764), en 'make check' is dáár groen gedraaid. De drie regels uit het issue staan er alle drie op test: weglaten-niet-grijs (de soortenlijst onder 'Verbinding toevoegen' is de énige poort — al het andere oppervlak kijkt naar bestáánde verbindingen en valt onder tonen-zodra-inhoud), bestaand én wachtend werk blijft bij uitzetten bereikbaar, en een werkende configuratie start áán — als afgeleide standaard in plaats van een migratieschrijf, omdat prefs en verbindingen asynchroon laden. Het register dat info_safety_provider beloofde is er, bewust licht: één opsomming met poorten per module, elke module houdt zijn eigen state; de kaartenlijst komt er letterlijk uit. De bewaker keurde de rijpheidsformulering tegen VERIFICATION.md en liet twee dingen herstellen vóór de merge: het kantelpunt van de afgeleide standaard is nu gedocumenteerd én getest, en op web is de kaart uitgeschakeld met de reden ernaast. Vier strings × 31 talen, elf nieuwe tests, docs bij. Dicht.