No description
Find a file
Quorafind 12481c1798 feat(migration): version-keyed MigrationRegistry with tombstones (Phase 0 W1)
Replaces the ad-hoc settings migration calls in loadSettings with a
typed, atomic, version-keyed registry. Foundational infrastructure
for Phase 1's deprecation work — every v10 deprecation will register
a tombstone step here.

Capabilities
------------
- Atomic: clones settings, runs all applicable steps in-memory, commits
  only if every step succeeds. On any throw the original object is
  untouched.
- Dry-run: run({dryRun: true}) returns the diff without committing,
  so Phase 1's deprecation modals can show a preview before applying.
- Version-keyed: steps declare a targetVersion (semver). Registry runs
  every step where targetVersion ∈ (fromVersion, toVersion], in semver
  order. fromVersion is read from settings._meta.lastMigratedVersion,
  toVersion comes from manifest.version.
- Tombstone-aware: kind="tombstone" steps are first-class. Phase 1 will
  use these to retire deprecated fields, optionally salvaging into
  successor fields.
- Duplicate-id rejection: prevents Phase 1 PRs from accidentally
  shadowing existing tombstones.

Phase 0 scope
-------------
The legacy bundle step (v0.0.1-legacy-bundle) wraps the THREE existing
migration paths the plugin used before this commit:
  1. migrateSettings (multi-cycle status)
  2. migrateInheritanceSettings (projectConfig.metadataConfig → fileMetadataInheritance)
  3. fluentIntegration default backfill (inlined to avoid Component dep)

Bundle is byte-equivalent to the legacy direct calls — verified by
parameterized tests over 4 realistic data.json fixtures (legacy
multi-cycle, legacy inheritance, fresh install, partial fluent).

The sentinel tombstone (v0.0.2-sentinel-tombstone) targets a synthetic
field _meta._sentinelMarker that production never has, exercising the
tombstone code path without touching any real settings. The plan
originally suggested tombstoning taskStatusCycle/taskStatusMarks but
22+ files in the codebase still read those — Phase 1 audits readers
first, tombstone last. The sentinel doc includes that checklist.

Wiring
------
loadSettings now stashes the raw savedData on a transient field
(__transient_savedData__), runs the registry, then strips the field.
The legacy bundle step pulls savedData from there to detect old
projectConfig.metadataConfig.* keys that get dropped by the merge with
DEFAULT_SETTINGS. On registry failure (which shouldn't happen given
atomicity, but defensive) we fall back to the legacy direct calls so
the user is never left in a half-migrated state.

Discovery: SettingsMigrationManager exists in the codebase but is
never wired into index.ts — it's effectively dead code. Phase 1
audit will decide whether to delete it or wire it up. The plan
referenced it as an existing call site but reality says otherwise.

25/25 W1 tests pass (registry 14, legacy bundle 11). All other Phase 0
tests still green (73/73 mine).
2026-04-07 09:59:44 +08:00
.github ci: add GitHub workflows for CI and release 2025-11-26 10:29:22 +08:00
.husky fix: update husky pre-commit hook for cross-platform compatibility 2025-07-31 21:36:29 +08:00
docs@656596618d chore: bump version to beta continue 2026-01-05 10:19:34 +08:00
media refactor(onboarding): decompose fluent onboarding into progressive steps 2025-10-03 22:58:28 +08:00
packages chore: update calendar package submodule 2025-12-17 15:58:32 +08:00
scripts feat(release): include commit body in changelog output 2025-11-29 21:12:46 +08:00
signatures repo: update cla.json 2025-11-02 11:03:46 +08:00
src feat(migration): version-keyed MigrationRegistry with tombstones (Phase 0 W1) 2026-04-07 09:59:44 +08:00
.editorconfig Initial commit 2022-06-07 14:12:30 +08:00
.env.example chore(security): extract OAuth client secret to environment variable 2025-12-17 15:43:59 +08:00
.eslintignore Initial commit 2022-06-07 14:12:30 +08:00
.eslintrc Initial commit 2022-06-07 14:12:30 +08:00
.gitignore chore: bump version to beta continue 2026-01-05 10:19:34 +08:00
.gitmodules chore: add taskgenius-doc as submodule 2025-12-16 09:30:40 +08:00
.prettierignore feat: support custom status 2025-03-02 13:33:23 +08:00
.release-it.beta-continue.cjs fix(release): correct require path in beta-continue config 2025-12-13 08:28:42 +08:00
.release-it.beta.cjs chore: update workflow scripts and fix github tag issues 2025-08-27 17:37:33 +08:00
.release-it.cjs feat(release): implement custom changelog generator for merged beta versions 2025-09-04 22:48:17 +08:00
CHANGELOG-BETA.md chore(release): bump version to 9.14.0-beta.4 [beta] 2026-01-05 10:20:34 +08:00
CHANGELOG.md chore(release): bump version to 9.13.1 2025-12-11 10:28:07 +08:00
CLA.md docs: add FSL-1.1-ALv2 license and contributor license agreement 2025-10-16 23:59:07 +08:00
DEVELOPMENT.md docs: update README and simplify DEVELOPMENT structure 2025-12-17 14:51:39 +08:00
esbuild.config.mjs chore(security): extract OAuth client secret to environment variable 2025-12-17 15:43:59 +08:00
jest.config.js test(dataflow): add integration test fixtures for orchestrator 2026-04-07 09:19:08 +08:00
LICENSE docs: add FSL-1.1-ALv2 license and contributor license agreement 2025-10-16 23:59:07 +08:00
manifest-beta.json chore(release): bump version to 9.14.0-beta.4 [beta] 2026-01-05 10:20:34 +08:00
manifest.json chore(release): bump version to 9.13.1 2025-12-11 10:28:07 +08:00
package.json chore(release): bump version to 9.14.0-beta.4 [beta] 2026-01-05 10:20:34 +08:00
pnpm-lock.yaml refactor(styles): migrate from CSS to SCSS 2025-12-11 14:33:41 +08:00
pnpm-workspace.yaml chore: setup pnpm workspace monorepo structure 2025-11-26 10:28:57 +08:00
PRIVACY.md docs: update README and simplify DEVELOPMENT structure 2025-12-17 14:51:39 +08:00
README.md docs: update README and simplify DEVELOPMENT structure 2025-12-17 14:51:39 +08:00
styles.css feat: integrate calendar auth manager and update styles 2025-12-17 15:52:49 +08:00
tsconfig.json refactor(build): migrate to TypeScript path aliases and update esbuild to v0.25.9 2025-08-28 14:02:26 +08:00
version-bump.mjs chore: update workflow scripts 2025-08-27 17:28:43 +08:00
versions.json chore(release): bump version to 9.14.0-beta.4 [beta] 2026-01-05 10:20:34 +08:00


Overview

Task Genius plugin transforms Obsidian into a powerful task management system with advanced features, beautiful visualizations, and seamless in-editor task management workflow - all while preserving Obsidian's philosophy of plain-text, future-proof note-taking.


Core Features

Feature Description
Task Views Visualize your tasks in different ways, including list, kanban, calendar, and gantt charts
Date & Priority [View-based] Recurring tasks, multiple date types, and visual priority indicators
Workflows [Editor-based] Multi-stage workflows with automatic timestamping, templates, and process tracking
Habit Tracking [View-based] Daily habits, streak tracking, visual calendar, and progress analytics
Quick Capture global commands, templates, and automated task creation
Filtering & Search Advanced in-editor filtering, saved queries, and custom perspectives
Gamification [View-based] Achievement rewards, custom milestones, and motivational feedback

For detailed feature documentation, visit taskgenius.md.


Installation

  1. Open Obsidian Settings
  2. Navigate to Community Plugins
  3. Search for "Task Genius"
  4. Click Install, then Enable

Manual Installation

  1. Download the latest release from GitHub Releases
  2. Extract files to .obsidian/plugins/obsidian-task-progress-bar/
  3. Enable the plugin in Obsidian settings

Quick Start

  1. Enable Plugin: Activate Task Genius in your plugin settings
  2. Onboarding: You will be guided through the setup process by the plugin

OR

  1. Open Task View: Click the ribbon icon or use Command Palette to search Open Task Genius View.
  2. Create First Task: Use the Quick Capture panel to create your first task.
  3. Explore Views: Switch between different views to find your preferred workflow

Community & Support

Discord Community

Join our active community for help, tips, and feature discussions: Task Genius Discord

Resources


License

FSL-1.1-ALv2

Feel free to use any part in the src/components, such as the Inline Markdown Editor or the Kanban component.