Skip to content

T-S8GC-profile-kinds-pomodoro-and-tracking

State: planning/draft · Impact: high · Complexity: medium

Give tracking its own profiles. Today one profile carries a work context and a pomodoro recipe, Track mode ignores the recipe, and both pickers show every profile. A kind on the profile gives each mode a short form and a filtered picker without a second entity. Decided in D-W3KP-pumice-profile-kinds-and-settings-layout.

LocationRole today
apps/pumice/crates/pumice/src/types.rsTimerProfile with recipe fields, default_tags, notes_template; no kind
apps/pumice/src-tauri/src/schema/mod.rsProfileInput mirrors it
apps/pumice/crates/pumice-config/src/defaults.rsbuilt-in Basic Pomodoro
apps/pumice/crates/pumice-config/src/journal.rsshow_after_focus only
apps/pumice/src-nuxt/app/components/TimerProfileForm.vueone form; the recipe section says “ignored while tracking”
apps/pumice/src-nuxt/app/components/TimerTypeList.vueone list
apps/pumice/src-nuxt/app/components/FocusViewBody.vuepicker shows every profile in both modes
apps/pumice/src-nuxt/app/components/SettingsJournal.vueone switch, “Show Journal after Focus”

TimerProfile.kind: pomodoro | track, #[serde(default)] to pomodoro, plus properties: Vec<PropertyRow> (key, value, as_text, enabled), the same row shape as the vault’s. A built-in General tracking profile is appended at upgrade when none exists. The Profiles tab shows two lists; the tracking form has name, tags, notes template and property rows only. The focus view’s picker shows the profiles of the persisted timer mode. JournalConfig.show_after_tracked, default true, governs the journal after a tracked End; the Journal tab has two switches.

  1. Add ProfileKind to pumice types and reuse the vault’s PropertyRow; kind and properties on TimerProfile and ProfileInput; regenerate ops.
  2. Config upgrade: default kind, append General (track) once; fixture.
  3. show_after_tracked in JournalConfig; the tracked End path reads it.
  4. TimerTypeList renders two sections; TimerProfileForm takes kind and hides the recipe for track; add the property rows table.
  5. FocusViewBody filters profiles by timerMode; start_tracked refuses a pomodoro profile id and vice versa.
  6. SettingsJournal second switch. Stories and captures for every changed surface.
AreaNote
apps/pumice/crates/pumice/src/types.rsProfileKind, two fields on TimerProfile
apps/pumice/src-tauri/src/schema/mod.rsProfileInput fields
apps/pumice/crates/pumice-config/src/defaults.rsbuilt-in General tracking profile
apps/pumice/crates/pumice-config/src/journal.rsshow_after_tracked
apps/pumice/src-tauri/tests/config_upgrades.rsupgrade fixture with kind-less profiles
apps/pumice/src-nuxt/app/components/TimerProfileForm.vuekind-aware form, property rows table
apps/pumice/src-nuxt/app/components/TimerTypeList.vuetwo lists
apps/pumice/src-nuxt/app/components/SettingsProfiles.vuesection titles
apps/pumice/src-nuxt/app/components/FocusViewBody.vuepicker filtered by mode
apps/pumice/src-nuxt/app/components/SettingsJournal.vuesecond switch
  • An old config with kind-less profiles loads; every profile is pomodoro and a General tracking profile exists.
  • In Track mode the picker lists tracking profiles only; in Pomodoro mode, pomodoro profiles only.
  • The tracking profile form shows no recipe fields.
  • A tracked End with “Show journal after a tracked End” off writes the row without opening the journal.
  • moon run pumice:codegen-drift, pumice:check, pumice:test green; screenshots committed and embedded in a PR comment.
  • Per-profile vault templates or folders.
  • Splitting contexts and recipes into two entities.

← Back to Tasks