summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AGENTS.md7
-rw-r--r--Omni/Task.hs7
-rw-r--r--Omni/Task/Core.hs6
-rw-r--r--Omni/Task/README.md2
-rw-r--r--Omni/Task/RaceTest.hs4
5 files changed, 17 insertions, 9 deletions
diff --git a/AGENTS.md b/AGENTS.md
index 2656144..3c42c8c 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -38,6 +38,13 @@ task update <id> done --json
task create "Command X fails when Y" --discovered-from=<current-task-id> --json
```
+## Directory Structure
+
+- **`_/`** (cabdir) - All ephemeral/generated files. This directory is gitignored.
+ - `_/llm/` - AI planning docs and agent logs
+ - `_/tmp/` - Temporary files, test databases, scratch data
+- Never create dotfile directories (like `.tasks/`) in the repo root
+
## Documentation
- **Project Context**: [README.md](README.md) - Goals, source layout, and coding conventions.
diff --git a/Omni/Task.hs b/Omni/Task.hs
index 9cb061c..83b8e0d 100644
--- a/Omni/Task.hs
+++ b/Omni/Task.hs
@@ -19,7 +19,7 @@ import Omni.Task.Core
import qualified Omni.Task.RaceTest as RaceTest
import qualified Omni.Test as Test
import qualified System.Console.Docopt as Docopt
-import System.Directory (doesFileExist, removeFile)
+import System.Directory (createDirectoryIfMissing, doesFileExist, removeFile)
import System.Environment (setEnv)
import qualified Test.Tasty as Tasty
import Prelude (read)
@@ -403,11 +403,12 @@ unitTests =
Test.group
"Unit tests"
[ Test.unit "setup test database" <| do
- -- Set up test mode for all tests
+ -- Set up test mode for all tests (uses _/tmp/tasks-test.db)
setEnv "TASK_TEST_MODE" "1"
-- Clean up test database before all tests
- let testFile = ".tasks/tasks-test.db"
+ let testFile = "_/tmp/tasks-test.db"
+ createDirectoryIfMissing True "_/tmp"
exists <- doesFileExist testFile
when exists <| removeFile testFile
initTaskDb
diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs
index 3b4eaa0..bf52c2c 100644
--- a/Omni/Task/Core.hs
+++ b/Omni/Task/Core.hs
@@ -238,9 +238,9 @@ getTasksDbPath = do
customPath <- lookupEnv "TASK_DB_PATH"
testMode <- lookupEnv "TASK_TEST_MODE"
let path = case (testMode, customPath) of
- (Just "1", _) -> ".tasks/tasks-test.db" -- Test mode always uses test db
+ (Just "1", _) -> "_/tmp/tasks-test.db" -- Test mode uses cabdir
(_, Just p) -> p -- Custom path for production
- _ -> ".tasks/tasks.db"
+ _ -> "_/tmp/tasks.db" -- Default uses cabdir
pure path
-- DB Helper
@@ -254,7 +254,7 @@ withDb action = do
-- Initialize the task database
initTaskDb :: IO ()
initTaskDb = do
- createDirectoryIfMissing True ".tasks"
+ createDirectoryIfMissing True "_/tmp"
withDb <| \conn -> do
SQL.execute_
conn
diff --git a/Omni/Task/README.md b/Omni/Task/README.md
index 5113002..463c9e5 100644
--- a/Omni/Task/README.md
+++ b/Omni/Task/README.md
@@ -333,7 +333,7 @@ To back up or transfer tasks, use `task export` and `task import`.
# Set test mode to protect production database
export TASK_TEST_MODE=1
-# Now all task operations use .tasks/tasks-test.db
+# Now all task operations use _/tmp/tasks-test.db
task create "Test task" --type=task
task list
task tree
diff --git a/Omni/Task/RaceTest.hs b/Omni/Task/RaceTest.hs
index 5dd7fa1..007046f 100644
--- a/Omni/Task/RaceTest.hs
+++ b/Omni/Task/RaceTest.hs
@@ -18,11 +18,11 @@ test = Test.group "Omni.Task.Race" [raceTest]
raceTest :: Test.Tree
raceTest =
Test.unit "concurrent child creation (race condition)" <| do
- -- Set up test mode (uses .tasks/tasks-test.db)
+ -- Set up test mode (uses _/tmp/tasks-test.db)
setEnv "TASK_TEST_MODE" "1"
-- Clean up test database
- let testFile = ".tasks/tasks-test.db"
+ let testFile = "_/tmp/tasks-test.db"
exists <- doesFileExist testFile
when exists <| removeFile testFile
initTaskDb