You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
refactor(areas): make the area table user-configurable
The area table was the author's own project list, hardcoded four times over —
NOTION_AREAS, AREA_TO_FILE, MORGEN_AREAS, and a hand-maintained SAFE_PATH_RE —
plus the same names in the shipped n8n workflow templates, the sample sync
state, the docs, and the tests. This repo is public, so that published a client
roster, and the table was wrong for every user but one.
Areas now come from TASKMAXXING_AREAS via the new src/areas.js. The four
structures are derived from one config, so they cannot drift apart, and the
path-traversal allowlist is generated from the configured paths rather than
hand-kept alongside them. Optional `pathPrefix` and `aliasFiles` cover nested
task folders and query-only parent hubs, which were previously special-cased in
parseArea by name.
Defaults are the two non-identifying areas, URGENT and GENERAL. Degradation is
deliberate: an unset, malformed, GENERAL-less, duplicate-keyed, or traversal-
bearing config is rejected whole and the defaults apply, with a stderr warning
naming the failed check. Everything then files under GENERAL — a half-applied
table would route tasks into the wrong project, which is worse.
Also fixed in passing: an operator-precedence bug in the urgent co-tag guard
(&& binds tighter than ||), and a crash on the no-config path where the
built-in defaults were spread without an aliasFiles key.
New scripts/test-areas-config.js covers the degradation paths and asserts regex
metacharacters in configured paths are escaped rather than interpreted. Wired
into `npm test`. 61 tests pass across the three suites.
BREAKING: set TASKMAXXING_AREAS to keep per-project routing. Documented under
"Configuring your areas" in the README.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
14
14
- README: tagline + workflow table + project tree updated 3-way → 2-way. A top-of-README NOTE banner explains the cutover.
15
15
16
16
### Why
17
-
- Kit author's own instance (`obsidian-tasks-sync`) dropped Notion on the same date after the Notion bearer in W1+W3 was found to be silently 401-ing on every orchestrator tick. Morgen and Obsidian had become the only legs that mattered. The full investigation is in the kit author's vault under `05-Projects/LAVA-NET/invoices/2026-05-04-morgen-task-creation-and-sync-diagnosis.md` and the cutover memory at `project_notion_drop_2026_05_04.md`.
17
+
- Kit author's own instance (`the author's own private sync repo`) dropped Notion on the same date after the Notion bearer in W1+W3 was found to be silently 401-ing on every orchestrator tick. Morgen and Obsidian had become the only legs that mattered. The full investigation is in the kit author's vault under `05-Projects/PROJECT-D/invoices/2026-05-04-morgen-task-creation-and-sync-diagnosis.md` and the cutover memory at `project_notion_drop_2026_05_04.md`.
18
18
19
19
### Added
20
20
- README: social-links badge strip (X · LinkedIn · YouTube · Instagram, ruvnet-style for-the-badge) inserted into the centered header block beneath the project license badge.
Copy file name to clipboardExpand all lines: docs/ARCHITECTURE.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -398,7 +398,7 @@ Two identifiers do different jobs:
398
398
399
399
Hash format: SHA-256 of the canonical fields, `::`-joined, truncated to 24 hex chars. 96 bits of collision resistance is fine for any single-user task backlog and short enough to eyeball in logs.
400
400
401
-
Why include `sourceFile` in the hash? So that the same text in `TASKS-URGENT.md` and `TASKS-LORECRAFT.md` counts as two distinct tasks. Why exclude line number? So you can re-order tasks within a file without churning state.
401
+
Why include `sourceFile` in the hash? So that the same text in `TASKS-URGENT.md` and `TASKS-PROJECT-A.md` counts as two distinct tasks. Why exclude line number? So you can re-order tasks within a file without churning state.
Look at the commit subject. If it starts with **any `[bot:*]` prefix**, that's the problem — W1's echo guard skipped the run.
@@ -306,7 +306,7 @@ W1 only mints new IDs when a task line **lacks** the `🆔` token. The mint is t
306
306
307
307
### 10. Task lands in TASKS-GENERAL
308
308
309
-
> You created a task that should have gone into a project area file (`TASKS-LORECRAFT.md`, `TASKS-WAGMI.md`, etc.) but it landed in `TASKS-GENERAL.md`.
309
+
> You created a task that should have gone into a project area file (`TASKS-PROJECT-A.md`, `TASKS-PROJECT-G.md`, etc.) but it landed in `TASKS-GENERAL.md`.
0 commit comments