Changelog
All notable changes to this project will be documented in this file.
The format loosely follows Keep a Changelog.
Unreleased
[0.9.0] – 2026-03-23
Summary
- Opens the 0.9 release line with Sparkle 2 in-app updates,
Forge-macos-arm64.app.zipon tagged releases, and CIgenerate_appcastrefreshingdocs/appcast.xml—verified green on v0.8.14. See [0.8.13] and [0.8.14] for full notes.
[0.8.14] – 2026-03-22
Distribution / CI
- Sparkle appcast — release workflow runs
generate_appcasttwice sodocs/appcast.xmlregenerates for ad hoc–signedForge.appCI builds (Sparkle’s strict code-sign check on first unarchive; seepackaging/SPARKLE_SIGNING.md).
[0.8.13] – 2026-03-22
Forge.app
- Sparkle 2 — in-app updates via
SUFeedURL(docs/appcast.xmlonmain),SUPublicEDKey, automatic daily checks (SUScheduledCheckInterval), and Check for Updates….Sparkle.frameworkis embedded next to the executable (SwiftPM@loader_pathlayout). Seepackaging/SPARKLE_SIGNING.mdand GitHub secretSPARKLE_EDDSA_PRIVATE_KEYfor release signing. - Removed the earlier custom GitHub REST +
dittoupdater.
Distribution
Forge-macos-arm64.app.zip— release workflow buildsforge-menubar(release) and assemblesForge.appviapackaging/assemble_forge_app.sh, uploaded next to the CLI zip; when the signing secret is set,generate_appcastrefreshesdocs/appcast.xmland the workflow commits it tomainafter publishing the release assets.build.sh— delegates app bundle assembly topackaging/assemble_forge_app.sh.
0.8.12 – 2026-03-21
Forge.app (menubar and board)
- Default terminal — preferences can persist a chosen terminal (
config.yamlterminal:): Auto, Ghostty, kitty, iTerm, Warp, cmux, or Terminal.forge …and editor launches honour this choice. - Vim in terminal — editor option renamed to “Vim (in selected terminal)”; legacy “Vim (in default terminal)” still maps correctly.
- Centralised
EditorLauncher— shared open-file/folder logic for the terminal editor and GUI editors.
Terminal integration
TerminalLauncher— reliable launches per app (Ghostty surface config, kitty remotelaunch, iTerm/Terminal AppleScript, Warp YAML, cmuxnew-pane+send, fallbacks).openNeovim— opens the real file withcd dir && vim relative-file(barevimonPATH); kitty still execs thenvimbinary with a relative file argument.- Environment — resolve
HOMEfrom the login record (getpwuid) and setXDG_*/PATHso Neovim plugin managers (e.g. lazy.nvim) use the same data dirs as a normal shell. - cmux — warn when socket/automation mode blocks Forge; subprocess env allows automation where needed.
0.8.11 – 2026-03-20
Distribution
- Ship the pre-built CLI as Apple Silicon (arm64) only — single
swift buildonmacos-15, release assetforge-macos-arm64.zip(Intel: build from source). Update site and README download links accordingly.
0.8.10 – 2026-03-20
Distribution
- Run the CLI release workflow on macos-15 so Swift 6 matches
swift-tools-version 6.0; keep universal builds viaswift build --triplefor both slices.
0.8.9 – 2026-03-20
Distribution
- Fix the release workflow: use
swift build --triplefor arm64 and x86_64 (the--archflag is not accepted on the GitHub Actions Swift toolchain).
0.8.8 – 2026-03-20
Distribution
- Add a GitHub Actions workflow that builds a universal (arm64 + x86_64)
forgeCLI on each version tag and attachesforge-macos-universal.zipto the release (stable URL:…/releases/latest/download/forge-macos-universal.zip). - Add
packaging/README-BINARY.txtwith install and Gatekeeper notes; link the download from the project site hero and the README quick start.
0.8.6 – 2026-03-20
Documentation and site
- Publish the main documentation as static HTML on the GitHub Pages site (
cli.html,app.html,neovim.html,manual.html,privacy.html,readme.html), generated from markdown viadocs/build_site.pyanddocs/requirements.txt(Pythonmarkdown). - Extend the landing page navigation and cross-links to those pages; add shared
assets/theme.jsand prose styles inassets/site.css. - Document regeneration steps and the page ↔ source mapping in the README Project website section.
0.8.5 – 2026-03-20
Documentation and site
- Add a static project landing page under
docs/for GitHub Pages: hero, feature grid, forge/fire-themed styling (light/dark), quick start, and links to repository docs. - Promote the live URL in the README and expand the Project website section with source file pointers and Pages setup.
[0.8.4] – 2026-03-20
CLI due and review
forge due --areasnow considers due dates in all markdown files underForge/tasks/, includinginbox.mdandsomeday-maybe.md, and skips only the generateddue.mdsummary (avoids feedback loops).forge reviewprints task IDs on key list items so you can jump straight toforge done/ edits.
[0.8.3] – 2026-03-18
Sync correctness future-proofing
- Prefer a completed duplicate when the same task ID appears multiple times in markdown (so markdown completions propagate correctly).
- Add unit tests around sync input-selection and duplicate handling, plus refactor small decision helpers to be testable.
- Improve future reminder relinking by exposing looser signature helpers for unit testing.
[0.8.2] – 2026-03-18
Menubar correctness and freshness
- Keep menubar overdue / due-today counts aligned with
forge dueby avoiding double-counting and refreshing cached results periodically. - Make task discovery more robust in the menubar app by falling back to a bounded scan of configured project roots when the task index database is unavailable.
[0.8.1] – 2026-03-17
Menubar and sync correctness
- Fix the menubar dropdown counts (overdue / due today) not always updating after a sync completes.
- Pull reminder due-date changes from Reminders.app back into markdown during sync.
- Ensure the board app’s toolbar refresh runs an in-process background sync (same as the menubar app) before reloading projects.
[0.8.0] – 2026-03-13
Board Radar and delegation polish
- Add a Radar filter to the kanban board that slices projects into three buckets based on urgency and neglect:
- Calm – recently-touched, non-urgent projects.
- Watch – projects whose
TASKS.mdhas not changed for roughly a week. - Heat – projects tagged with an
URGENT…meta tag (for exampleURGENT ⚠️), or projects whoseTASKS.mdhas been neglected for several weeks. - Base neglect scoring on the last modification time of each project's
TASKS.mdfile, falling back to the project directory when needed. - Refine the board toolbar:
- Replace the generic meta-tag picker with the Radar picker so urgency and neglect are first-class filters.
- Rename the top-level delegation filter label from "All" to "Delegation" while keeping assignee filtering unchanged.
[0.7.1] – 2026-03-13
Documentation
- Add a “Who is Forge for?” section to the README and user manual, clarifying that Forge is a files-first, tag-driven system combining kanban-style project flow with GTD-inspired task management.
[0.7.0] – 2026-03-12
Linting and task discovery
- Preserve
## Notessections inTASKS.mdfiles whenforge lint --fixruns and ensure canonical section order isNext Actions,Waiting For,Completed,Notes. - Tighten heading and list formatting rules:
- Enforce exactly one empty line above and below headings when surrounded by content.
- Disallow blank lines between consecutive list items within the same section.
- Enforce trailing whitespace and EOF conventions:
- Remove trailing spaces and tabs from all lines.
- Require documents to end with exactly one empty line (a single trailing blank line terminated by a newline).
- Extend the task index to support explicit full rescans:
- Add a
forceFullRescanflag onDatabaseTaskIndexand thread it throughTaskDiscoveryService. - Expose
--rebuild-indexflags onforge syncandforge dueto force a fresh recursive scan of project roots and rebuild the task index database.
[0.6.2] – 2026-03-10
Menubar and board
- Refresh the kanban board view after each background sync (or “Sync Now”) so that newly applied Finder tags (e.g. column tags) and meta tags appear without reopening the board or restarting the app.
[0.6.1] – 2026-03-10
Privacy, licensing, and install UX
- Clarify Forge’s local-first, privacy-respecting data model in the README and manual, including how markdown files, the task file database, and Reminders/Calendar sync fit together.
- Add a dedicated
PRIVACY.mddescribing what Forge stores, how sync works via macOS frameworks, and how to run in markdown-only or local-only modes. - Add an Apache-2.0
LICENSEfile and link it from the README. - Update
.gitignoreto excludetasks/,.cache/, and localconfig.yamlfiles so private task content, caches, and machine-specific configuration are not committed. - Replace the tracked
config.yamlwith a sanitisedconfig.sample.yamlthat new users can copy and edit locally.
Build script and menubar polish
- Harden
build.shwith a Swift toolchain check and clearer messaging, and warn when the chosen install directory forforgeis not onPATH. - Improve the Forge.app About panel copy to emphasise that all data stays in your own files.
- Add a small initial-sync window in the menubar app so the first background sync is visible without being modal.
[0.6.0] – 2026-03-10
Delegated projects and tasks
- Treat Finder tags starting with
#on project folders (for example#PeggySue) as person tags and surface them asassigneesonProjectvalues. - Extend the kanban board UI to show assignees on project cards and add an Assignee filter alongside existing column/meta/domain filters.
- Add assignee support to the board CLI:
forge board --assignee Namefilters projects by#Name.- The list view shows both meta tags and
@Nameassignees.
Task-level delegation and CLI filters
- Extend
ForgeTaskandMarkdownIOto support task-level assignees via an inline@person(#Name)tag, in addition to existing@waiting(Name)semantics. - Add a shared helper on
ForgeTaskso CLI commands can match both explicit assignees andwaitingOnnames consistently. - Add
--assigneefilters to: forge next– filter next actions and waiting-for items by assignee and show@Namealongside existing due/context/waiting labels.forge due– filter due and upcoming tasks by assignee and show assignees in the output.forge waiting– narrow waiting-for items to a specific person.
Delegated overview and menubar integration
- Add a new
forge delegatedcommand that lists all delegated tasks (non-completed, non-deferred with an assignee) grouped by assignee and then by project/area. - Extend the menubar app with a Delegation submenu (backed by a small list of favourite assignees) which can open:
forge board --assignee Nameforge next --assignee Nameforge waiting --assignee Name
[0.5.0] – 2026-03-10
Performance
- Introduce a SQLite-backed task file database (
TaskFileDatabase) to cache project and area task files and their metadata. - Replace hot-path
TaskFileFinder.findAllcalls with a database-backedTaskIndex(DatabaseTaskIndex) and a one-offTaskDiscoveryService, substantially reducing repeated filesystem walks onforge sync,forge due, and menubar refresh.
Behaviour and architecture
- Wire
SyncEngine, the CLIforge sync/forge duecommands, and the menubar app to use the database-backed task index forTASKS.mddiscovery. - Lay the groundwork for future incremental updates and cached counts (via
TaskFileDatabase.filesNeedingParse,updateCounts, andaggregateCounts) without changing user-visible behaviour. - Add documentation for:
- The task file database and event-driven discovery plan (
docs/task-file-db-plan.md). - A high-level Forge user manual describing core concepts, sync behaviour, and typical workflows (
docs/forge-manual.md). - Updated performance benchmarking guidance that explains how and when Forge syncs with Reminders and Calendar.
0.4.0 – 2026-03-10
Performance
- Cache project
TASKS.mddiscovery via a shared task index to avoid repeated deep filesystem walks (df0da65). - Improve menubar and CLI performance by refining recursive
TASKS.mddiscovery under project roots (f999cc8,937bed1,c695eec). - Make menubar sync lighter while still regenerating the due summary (
95b7ed8). - Add several rounds of performance tuning across the CLI and menubar:
- Limit markdown size and Finder tag operations, and make CLI scans more asynchronous (
48df623,7dc44f2,501887e,ba6bbda).
Behaviour and features
- Improve calendar event deduplication to avoid duplicate events for the same task (
c654a75,8253020). - Refine inbox processing flow to better fit GTD-style capture and clarify how items move from inbox into projects and areas (
83ae89c). - Add markdown due summary generation and integrate it into the sync flow (
279ee93), producing aForge/tasks/due.mdoverview. - Add a dedicated
forge lintcommand andTaskFileLinterto enforce markdown conventions: - Headings and spacing.
- Placement and formatting of completed tasks.
- Better handling of mail URLs and list spacing (
be0861c,b1d30b6,98a9390,f9a0cd5,d3d0f35,1abeee5,add8ff7). - Enhance capture:
- Support capture from Bookends and Obsidian (
50865f5). - Add a selection capture feature to inbox for quickly turning selected content into tasks (
99f5f77). - Improve CLI and board features:
- Add
EditTasksCommandfor opening task files from the CLI (5cbe8d5). - Extend CLI commands to use the shared
taskFilesRootfor all task-related operations (ee4aaf9,60e8246). - Add and refine the board UI (
6b4fa73,02c1616).
Menubar and board app
- Improve the menubar app:
- Use Forge
taskspaths consistently for task files. - Refine the board window, preferences, and status bar layout (
87dc71e,9f9da02). - Fix menubar overdue count and address Calendar sendability warnings (
4a51103). - Add a dedicated board app (
forge-board) backed by the same ForgeCore and ForgeUI components (6b4fa73).
Configuration and tooling
- Tidy configuration:
- Simplify project roots and improve shortcuts preferences layout (
250bc69,e7f1f26). - Update
.gitignoreto better match the Swift/Forge project: - Ignore build artefacts, SwiftPM directories, and local
tasks/content as appropriate (a573c0d,92d2ee5). - Add small tooling and release-prep changes:
- Centralise version information.
- Provide a help URL and AppleScript usage description.
- Update the
generate_iconscript (7767ca9,d0b87fa,23db3b1,a4742ff).