Repository navigation
TaskNotes settings record (dev.tasknotes, tasknotes.task rc.6) - #311
Merged
Merged
Conversation
…ings record Move templates, archiving, checklist resets, link format, time-tracking stop and per-status automation to the mdbase.app-settings record at _settings/dev.tasknotes.md (tasknotes.task rc.6, settings_version 1). - Vendor @tasknotes/model 0.3.0-rc.20 and the tasknotes.task pack 0.3.0-rc.19; require rc.6, tasknotes.settings and mdbase.app-settings. - Read rc.6 and rc.5 collections; prefer rc.6. Reads resolve the record, then the legacy rc.5 binding, then the default. - Add a storage-neutral AppSettingsStore (Reader's semantics) with native SDK and Connect ports: missing record is defaults, create on first save, patch against the read revision, retry once on a race, refusal is read-only, conflicting fields refuse the save. - Settings saves split moved fields to the record and the rest to the type; without a tasknotes-settings type the moved fields are read-only.
This was referenced Oct 27, 2026
Merged
…cord # Conflicts: # package.json
… record The record/type routing and status-behaviour merge had no domain tests, which dropped domain coverage below the verify thresholds on iOS/Android.
…d tarball The npm package (published with provenance from tasknotes-model v0.3.0-rc.20) has the same integrity hash as the vendored tarball it replaces. contracts:sync against the now-published mdbase.dev tasknotes.task 0.3.0-rc.19 pack produces no change.
callumalpass
marked this pull request as ready for review
October 27, 2026 19:52
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moves TaskNotes app behaviour into the
mdbase.app-settingsrecord at_settings/dev.tasknotes.md: appdev.tasknotes, scopecollection,settings_version1. This implements tasknotes.task rc.6 and spec §12.8.1.Related:
tasknotes.task0.3.0-rc.19)Order: contracts → model publish → app ships before the plugin upgrades collections.
Unpublished dependencies. This consumes an unpublished model tarball,
vendor/tasknotes-model-0.3.0-rc.20.tgz, packed from model PR #25. Swap it for the registry version once rc.20 is published. The embedded packvendor/mdbase-contracts/tasknotes.task-0.3.0-rc.19.jsoncomes from contracts PR #18.pnpm contracts:syncfails until rc.19 is published at mdbase.dev.What changed
Dependencies:
@tasknotes/modelnow points atfile:vendor/tasknotes-model-0.3.0-rc.20.tgz, and the canonical pack is rc.19. The manifest now requirestasknotes.taskrc.6,tasknotes.settings1.0.0 andmdbase.app-settings1.0.0. The manifest validator requires every contract the pack provides to be listed.Contract versions: the app reads both rc.6 and rc.5 contracts and digests and prefers rc.6. It uses
TASKNOTES_LEGACY_CONTRACT_DIGESTSand the newest accepted implementation in a type.Settings store: a new storage-neutral
AppSettingsStore, modelled on Reader's store.next-app-settings.ts):not_foundmeans no record;forbiddenmeans read-only;conflictwith reasonrevisionorpath_takenis a race.mdbase-app-settings.ts):file_not_foundmeans no record;not_authorizedandaccess_deniedmean read-only;concurrent_modificationandpath_takenare a race.tasknotesSettingsDefinition, patch builder, new-record builder and conflict check.Reads: the precedence is record, then the legacy rc.5 binding, then the default, via the resolver's
settingsoption. A missing or late record falls back to the binding, so no value is lost.Writes: the moved fields go to the record and everything else goes to the type. Only values that changed are written, and the type write is skipped when nothing in it changed. The moved fields are nlp triggers,
template_*,move_on_archive,archive_folder,auto_stop_time_tracking_on_complete,reset_body_checkboxes_on_recurrence,link_write_format, andstatus_behavior.<status>.{next_status, exclude_from_cycle, auto_archive, auto_archive_delay_minutes}.No
tasknotes-settingstype: the moved fields are shown read-only with a one-line explanation and are never written to the binding.Tests: six lean regressions:
pnpm verifythresholds)Existing tests were updated for rc.6 and rc.19.
Decisions (least-surprising option where the brief was open)
client.find({path}), so a missing record isnullrather than an error.Risks / open questions
upgrade_from. A user-edited rc.5 type is preserved, which may leave rc.6 unimplemented and setup unable to finish. The app-level code still reads rc.5. Is the upgrade prompt the intended behaviour, or should readiness accept rc.5?contracts:syncand the vendored model tgz must be refreshed when contracts PR Add opt-in native mdbase change notifications #18 and model PR Show running timers in task rows #25 publish.Related PRs
Order: contracts → model publish → App ships → plugin upgrades collections.