Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 24 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,17 @@ You solved it once. Keep the instructions, the evidence, and the decisions somew

## 🆕 What's new

**[Folderwise 0.1.0](https://github.com/TheLinuxGuy/folderwise/releases/tag/v0.1.0): the first release.**
**Folderwise 0.2.0: your knowledge folders, in your pocket.** An optional, opt-in **Obsidian + iCloud bridge** lets you read your projects and tick off tasks on an iPhone, while your Mac stays the owner of every repository. See the [Releases page](https://github.com/TheLinuxGuy/folderwise/releases) for the full list of changes.

- 📦 **Downloadable releases.** Zip and tar.gz archives with `SHA256SUMS`, built from one recorded commit and extracted and tested on Linux and macOS before they are offered. Cloning is still recommended; archives have no Git history.
- ✅ **Tested on every change.** 400+ tool and public-documentation checks run on Linux (Python 3.10 and 3.15) and macOS (Python 3.15), with a clean-machine install check and 85% production line coverage required.
- 🛡️ **Guarded framework repository.** Only approved framework files can enter it; your knowledge projects, caches and credentials cannot.
- 🔁 **Safe archive upgrades.** Step-by-step, no overwrite, no reset, and your projects are never touched: [upgrading an archive install](docs/framework-checkout.md#upgrading-an-archive-install).
- 🪟 **Platforms.** Linux and macOS. Native Windows is not supported; use WSL.
- 📱 **iPhone bridge.** A scheduled macOS LaunchAgent links your Mac-owned Git projects to an Obsidian vault through iCloud. The phone never pushes; checkbox toggles come back as local commits with provenance. **[Quick Start →](docs/obsidian.md#quick-start)**
- ✅ **Real Obsidian Tasks 8.x support,** in emoji and Dataview formats: dates, priorities, in-progress, cancelled and custom statuses, automatic lifecycle dates, recurrence, on-completion delete, IDs and dependencies, nested and quoted subtasks.
- 🛡️ **Safe by design.** Opt-in renames and copied-note edits, CSV task adapters with capability checks, a 120-second quiet period, contained and recoverable rejected edits, per-project pausing, and a status report. Mac and phone conflicts never silently overwrite.
- 🧪 **Validated on a real iPhone.** 88 acceptance checks through the real scheduled job: 85 pass, 3 are blocked by physical limits, none failed. [Results and how to reproduce them →](docs/ibridge-acceptance-0.2.0.md)
- 📦 **Minimal pull-only checkouts** for the framework beside your own repositories.

See the [release notes](https://github.com/TheLinuxGuy/folderwise/releases/tag/v0.1.0) for the full list of changes.
Not validated: offline-then-reconnect edits, a fresh vault's Tasks plugin load on the phone, and a visible notification banner. The bridge needs macOS; Android and native Windows are unsupported.

**Earlier:** [Folderwise 0.1.0](https://github.com/TheLinuxGuy/folderwise/releases/tag/v0.1.0), the first release: downloadable archives with checksums, CI on every change, a guarded framework repository and safe archive upgrades ([upgrading an archive install](docs/framework-checkout.md#upgrading-an-archive-install)).

## 🚀 Getting started

Expand Down Expand Up @@ -92,7 +94,7 @@ Folderwise includes metadata and link validation, CSV-to-Markdown tables, genera
| 🔎 `docs_index.py` / `docs_recent.py` / `docs_stale.py` | what exists, what changed lately, what is due for re-verification |
| 🔀 `docs_mv.py` | moves or renames docs and headings and keeps every link valid |
| 📊 `render_tables.py` | renders CSV files into Markdown tables |
| ☁️ `icloud_bridge.py` | export selected files to iCloud; complete/reopen tasks in Obsidian on iPhone; validate and commit locally on Mac |
| ☁️ `icloud_bridge.py` | export selected files to an Obsidian vault in iCloud; import supported iPhone task edits as validated local commits on the Mac |
| 🩺 `docs_doctor.py` / `sync_rules.py` | health-check projects; push the template's shared rules into them |

Every tool, flag and setting is documented in the [full guide](docs/guide.md).
Expand All @@ -109,11 +111,22 @@ Every tool, flag and setting is documented in the [full guide](docs/guide.md).
- **Rename tasks** with per-project opt-in, or **edit selected notes** with both the bridge text-edit switch and project path-pattern opt-in. Generated task views accept only supported task edits.
- **Keep a local history.** An available Mac validates imports against clean working trees and conflict rules, updates source files, and commits locally. Local commits do not push to GitHub.

The iPhone bridge supports nested and quoted tasks, Tasks dates/priorities and custom statuses, and plugin-generated recurrence. See the [task compatibility and acceptance requirements](docs/obsidian.md#task-format-compatibility).
**New to the bridge?** The [Quick Start](docs/obsidian.md#quick-start) gets it running in about five minutes.

Validated on a real iPhone for 0.2.0 ([88 checks, 85 pass, 3 blocked](docs/ibridge-acceptance-0.2.0.md)):

| | Validated through the real scheduled job |
|---|---|
| ✅ **Tasks 8.x** | Due/start/scheduled dates, priorities, in-progress, cancelled and custom statuses, automatic created/done/cancelled dates, in emoji and Dataview formats; tags, links and Unicode preserved |
| 🔁 **Recurrence** | Daily, weekly, monthly, when-done and undated, including completed-first order; `🏁 delete`; IDs and dependencies |
| 🌳 **Subtasks** | Nested, tab-indented, numbered, quoted and callout tasks; reordering rejected |
| ✏️ **Opt-in edits** | Task renames; copied-note child create, reparent and delete |
| 🧾 **CSV adapters** | Boolean-only and rich adapters, with unsupported fields rejected by name |
| 🛡️ **Safety** | Rejected edits are contained, restored, reported once and recoverable (`state/rejected`, `resolve`); `plan` preview; per-project pausing; notification modes; recovery and replay without duplicate commits |

Scheduled sync defaults to **five minutes, plus iCloud delivery delay**. Folderwise provides no hosted sync service.
Scheduled sync defaults to **five minutes, plus iCloud delivery delay**, with a 120-second quiet period for text edits. Folderwise provides no hosted sync service. See the [task compatibility details](docs/obsidian.md#task-format-compatibility).

**[Set up Obsidian + iCloud →](docs/obsidian.md)** · [See the task round trip](docs/obsidian.md#complete-and-reopen-from-iphone) · [Acceptance checklist](docs/ibridge-testing.md)
**[Quick Start →](docs/obsidian.md#quick-start)** · [Full Obsidian + iCloud guide](docs/obsidian.md) · [See the task round trip](docs/obsidian.md#complete-and-reopen-from-iphone) · [Acceptance checklist](docs/ibridge-testing.md) · [0.2.0 acceptance record](docs/ibridge-acceptance-0.2.0.md)

<details>
<summary>Browse your knowledge on the desktop, too</summary>
Expand Down
4 changes: 2 additions & 2 deletions docs/guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ The root `.gitignore` ignores every root entry unless explicitly allowed. The pu

Read selected project documents in **Obsidian on iPhone** and complete or reopen tasks across projects. Folderwise remains a Markdown-and-Git framework: repositories stay outside iCloud, and a separate vault holds exported copies. Task renaming is a per-project opt-in; selected-note editing needs both the bridge text-edit switch and project path patterns. CSV-backed tasks need an adapter with the relevant capabilities. Generated task views accept supported task edits, not arbitrary document edits.

An available Mac validates imports against clean-working-tree and conflict rules and creates **local Git commits**, never automatic GitHub pushes. The five-minute default schedule has additional iCloud delivery delay; note edits also have a quiet period. Folderwise provides no hosted sync service. [See the workflow and real iPhone examples](obsidian.md#from-mac-files-to-your-phone), then follow the setup below.
An available Mac validates imports against clean-working-tree and conflict rules and creates **local Git commits**, never automatic GitHub pushes. The five-minute default schedule has additional iCloud delivery delay; note edits also have a quiet period. Folderwise provides no hosted sync service. Want it running in five minutes? Follow the [Quick Start](obsidian.md#quick-start). [See the workflow and real iPhone examples](obsidian.md#from-mac-files-to-your-phone), then follow the setup below.

A fresh Folderwise installation creates no Obsidian vault and leaves bridge sync off. Run `icloud_bridge.py setup` to initialize a local parent vault and a separate iCloud vault with reviewed defaults, enroll existing unconfigured projects, set the default for future `new_project.py` projects, perform the first sync and enable the Mac schedule. The default interval is five minutes. See [the full setup, defaults, uninstall and recovery guide](obsidian.md).

Expand Down Expand Up @@ -475,7 +475,7 @@ Each sync validates project configurations once and reuses that snapshot for inv

Setup enrollment and phone task imports share the same disposable-clone transaction: copy the project's hooks and Git identity, apply the requested edit, validate and commit, then fast-forward the live repository only if its worktree and HEAD are unchanged. A failed operation removes its disposable clone and preserves pending phone edits for retry.

Task compatibility uses the internal `ibridge_tasks.py` parser for emoji and Dataview fields. Dates, priorities, lifecycle dates, configured statuses, recurrence output and explicit completion deletion import through validated local transactions. Stable source-link identities preserve row ownership; generated text edits wait for `edit_settle_seconds`. See [task format compatibility](obsidian.md#task-format-compatibility) for supported operations, adapter capabilities and the real-iPhone release gate.
Task compatibility uses the internal `ibridge_tasks.py` parser for emoji and Dataview fields. Dates, priorities, lifecycle dates, configured statuses, recurrence output and explicit completion deletion import through validated local transactions. Stable source-link identities preserve row ownership; generated text edits wait for `edit_settle_seconds`. See [task format compatibility](obsidian.md#task-format-compatibility) for supported operations, adapter capabilities and the real-iPhone release gate; the 0.2.0 results are in the [acceptance record](ibridge-acceptance-0.2.0.md).

The bridge also generates `Tasks.md` and `_Folderwise Tasks/<project-folder-name>.md` in the iCloud vault: one combined task view per enabled project, refreshed after imports on each sync. These are interactive views; Mac project files and adapter-managed records remain authoritative. Checkbox, status and task metadata edits are supported in mapped task views and supported handwritten source tasks; description edits require `folderwise-ibridgerename: true`. Adapter fields require explicit capabilities. See [generated task folder ownership, naming, and lifecycle](obsidian.md#generated-task-folder-and-naming).

Expand Down
Loading
Loading