feat: add zara-org-todos Org-mode backend with optional Git sync #24

Open
lost-rob0t wants to merge 28 commits from feat/zara-org-todos into main
lost-rob0t commented 2026-08-31 23:46:20 +00:00 (Migrated from github.com)

Implements #23.

What

  • adds zara-org-todos as a Zara service plugin
  • makes recursive Org files the authoritative todo store with stable :ID: task identity
  • works in Org-only mode with no Git repository, remote, executable, or network requirement
  • defaults to git_sync = false, auto_sync = false, and no remote
  • exposes prefixed list/add/edit/complete/reopen/search/schedule tools plus sync/status
  • supports Git as an optional transport only when the user sets git_sync = true and supplies their own remote
  • when Git is enabled, can run periodic sync through Zara's managed worker lifecycle
  • optional Git transport preserves the conflict-safe semantics ported from lost-rob0t/dotfiles master commit 7b88a3c2ddef7f3fffc09fd049476e06cf13d93a
  • preserves Git-blob baseline comparison, fail-closed concurrent-edit handling, remote-deletion refusal, save recovery, alias/symlink handling, task-aware DONE/reopen commit messages, and unpushed-commit self-heal
  • adds installer + registry entry

Public/default behavior

A fresh install does not instantiate SyncRunner and Org mutations do not spawn Git. The optional durable Git checkout defaults to Zara's XDG data directory, not the author's gpt-todos checkout. There is deliberately no configured remote by default.

Example optional transport:

[plugins.zara-org-todos]
git_sync = true
remote = "git@github.com:YOUR_USER/YOUR_TODO_REPO.git"
auto_sync = true

Zara core integration

lost-rob0t/zara#248 implements #246 with [todo] enabled = false, disabling Zara's built-in todo tools, Python skills, and Prolog todo intents as one surface so this plugin can become authoritative without two competing stores.

Verification

Tests cover Org-only defaults, no Git runner/process in default mode, explicit generic Git configuration, config validation, Org CRUD/scheduling, worker lifecycle, and local temporary-Git conflict behavior.

The Git integration fixture performs no network access.

Implements #23. ## What - adds `zara-org-todos` as a Zara service plugin - makes recursive Org files the authoritative todo store with stable `:ID:` task identity - works in Org-only mode with no Git repository, remote, executable, or network requirement - defaults to `git_sync = false`, `auto_sync = false`, and no remote - exposes prefixed list/add/edit/complete/reopen/search/schedule tools plus sync/status - supports Git as an **optional transport** only when the user sets `git_sync = true` and supplies their own `remote` - when Git is enabled, can run periodic sync through Zara's managed worker lifecycle - optional Git transport preserves the conflict-safe semantics ported from `lost-rob0t/dotfiles` master commit `7b88a3c2ddef7f3fffc09fd049476e06cf13d93a` - preserves Git-blob baseline comparison, fail-closed concurrent-edit handling, remote-deletion refusal, save recovery, alias/symlink handling, task-aware DONE/reopen commit messages, and unpushed-commit self-heal - adds installer + registry entry ## Public/default behavior A fresh install does not instantiate `SyncRunner` and Org mutations do not spawn Git. The optional durable Git checkout defaults to Zara's XDG data directory, not the author's `gpt-todos` checkout. There is deliberately no configured remote by default. Example optional transport: ```toml [plugins.zara-org-todos] git_sync = true remote = "git@github.com:YOUR_USER/YOUR_TODO_REPO.git" auto_sync = true ``` ## Zara core integration `lost-rob0t/zara#248` implements #246 with `[todo] enabled = false`, disabling Zara's built-in todo tools, Python skills, and Prolog todo intents as one surface so this plugin can become authoritative without two competing stores. ## Verification Tests cover Org-only defaults, no Git runner/process in default mode, explicit generic Git configuration, config validation, Org CRUD/scheduling, worker lifecycle, and local temporary-Git conflict behavior. The Git integration fixture performs no network access.
This pull request has changes conflicting with the target branch.
  • plugins.json
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/zara-org-todos:feat/zara-org-todos
git switch feat/zara-org-todos

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff feat/zara-org-todos
git switch feat/zara-org-todos
git rebase main
git switch main
git merge --ff-only feat/zara-org-todos
git switch feat/zara-org-todos
git rebase main
git switch main
git merge --no-ff feat/zara-org-todos
git switch main
git merge --squash feat/zara-org-todos
git switch main
git merge --ff-only feat/zara-org-todos
git switch main
git merge feat/zara-org-todos
git push origin main
Sign in to join this conversation.
No description provided.