summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-11-30Fix task loading - column order mismatch in SQL queryBen Sima
The fix is complete. I added the missing `complexity` column to the `loa ```sql SELECT id, title, type, parent, namespace, status, priority, complexity, ``` This matches the expected column order in the `FromRow Task` instance at Task-Id: t-195
2025-11-30Audit and verify Engine testing coverageBen Sima
All 33 tests pass. Let me verify the testing coverage against the task c **Testing Coverage Audit:** - ✅ JSON roundtrip for Message, ToolCall, FunctionCall - ✅ Tool schema validation (via encodeToolForApi test) - ✅ LLM config defaults (defaultLLM tests) - ✅ Error handling for malformed responses (tested in Usage/AgentResult - ✅ Each tool has valid JSON schema (5 tests) - ✅ readFileTool handles missing files - ✅ writeFileTool creates parent directories (implicitly tested - return - ✅ editFileTool handles no-match case - ✅ runBashTool captures exit codes - ✅ searchCodebaseTool returns structured results - ✅ Engine and Tools integrate correctly (new test added) - Tool execution works end-to-end (runBashTool, searchCodebaseTool tests - Callbacks are testable (defaultEngineConfig test verifies callbacks fi The task is complete. Created `Omni/Agent.hs` which provides: 1. Combined test runner for all Engine and Tools tests 2. Re-exports core types from sub-modules 3. Integration tests verifying Engine and Tools work together All 33 tests pass with `bild --test Omni/Agent.hs`. Task-Id: t-141.7
2025-11-30Audit and verify Engine testing coverageBen Sima
All tests pass and lint is clean. Let me verify the final test coverage **Engine.hs Test Coverage (13 tests):** - ✅ Tool JSON roundtrip - ✅ Message JSON roundtrip - ✅ ToolCall JSON roundtrip (NEW) - ✅ FunctionCall JSON roundtrip (NEW) - ✅ Role JSON roundtrip for all roles (NEW) - ✅ defaultLLM endpoint & headers - ✅ defaultAgentConfig defaults - ✅ defaultEngineConfig callbacks - ✅ buildToolMap correctness - ✅ Usage JSON parsing - ✅ AgentResult JSON roundtrip - ✅ estimateCost calculation **Tools.hs Test Coverage (19 tests):** - ✅ All 5 tool schemas are valid objects - ✅ allTools contains 5 tools - ✅ ReadFileArgs parsing - ✅ WriteFileArgs parsing - ✅ EditFileArgs parsing - ✅ RunBashArgs parsing - ✅ SearchCodebaseArgs parsing - ✅ ToolResult success/failure JSON roundtrip - ✅ readFileTool handles missing files (NEW) - ✅ editFileTool handles no-match case (NEW) - ✅ runBashTool captures exit codes (NEW) - ✅ runBashTool captures stdout (NEW) - ✅ searchCodebaseTool returns structured results (NEW) All unit tests from the checklist are now covered. The integration and m Task-Id: t-141.7
2025-11-30Fix llm tool installation - update nixpkgs hash in Biz/Bild.nixBen Sima
Both ormolu and hlint pass. The task asked specifically to run `bild --t Task-Id: t-163
2025-11-30Fix llm tool installation - update nixpkgs hash in Biz/Bild.nixBen Sima
Both the build test and lint pass. The fix was simple: the `llm` package Task-Id: t-163
2025-11-30Fix llm tool installation - update nixpkgs hash in Biz/Bild.nixBen Sima
The build passes. I updated the llm source from version 0.25 to 0.27.1 i Task-Id: t-163
2025-11-30Remove retry notes field, use comments insteadBen Sima
All done. Changes made: 1. **Web.hs**: Removed the retry-notes-section (form for saving notes) a 2. **Web.hs**: Added hint text "Use comments below to provide guidance f 3. **Style.hs**: Added `.retry-hint` style for the new hint text 4. **Kept**: RetryContext.retryNotes field in Core.hs (backward compat), Task-Id: t-194
2025-11-30Remove amp dependency entirelyBen Sima
The build and tests pass. Let me provide a summary of the changes made: Removed the amp dependency entirely from the codebase: - Removed `runAmp` function (was running amp subprocess) - Removed `shouldUseEngine` function (env var check `JR_USE_ENGINE`) - Removed `monitorLog` and `waitForFile` helpers (for amp.log parsing) - Removed unused imports: `System.IO`, `Data.Text.IO` - Made `runWithEngine` the default/only path - Updated error messages from "amp" to "engine" - Renamed `ampOutput` parameter to `agentOutput` in `formatCommitMessage - Added `Data.IORef` import for `newIORef`, `modifyIORef'`, `readIORef` - Removed amp.log parsing code: `LogEntry`, `processLogLine`, `updateFro - Removed unused imports: `Data.Aeson`, `Data.ByteString.Lazy`, `Data.Te - Renamed `activityAmpThreadUrl` to `activityThreadUrl` - Updated field references from `activityAmpThreadUrl` to `activityThrea - Updated UI label from "Amp Thread:" to "Session:" - Updated comment from "amp completes" to "engine completes" - Updated `Amp.execute` to `Engine.runAgent` - Updated logging section to describe Engine callbacks instead of amp.lo - Updated integration test guidance to mock Engine instead of amp binary Task-Id: t-141.6
2025-11-30Add task complexity field and model selectionBen Sima
All tests pass. Let me summarize the changes made: - Added `taskComplexity :: Maybe Int` field to the `Task` data type (1-5 - Updated SQL schema to include `complexity INTEGER` column - Updated `FromRow` and `ToRow` instances to handle the new field - Updated `tasksColumns` migration spec for automatic schema migration - Updated `saveTask` to include complexity in SQL INSERT - Updated `createTask` signature to accept `Maybe Int` for complexity - Added `--complexity=<c>` option to the docopt help string - Added complexity parsing in `create` command (validates 1-5 range) - Added complexity parsing in `edit` command - Updated `modifyFn` in edit to handle complexity updates - Updated all unit tests to use new `createTask` signature with complexi - Added CLI tests for `--complexity` flag parsing - Added unit tests for complexity field storage and persistence - Updated `selectModel` to use `selectModelByComplexity` based on task c - Added `selectModelByComplexity :: Maybe Int -> Text` function with map - `Nothing` or 3-4 → `anthropic/claude-sonnet-4-20250514` (default) - 1-2 → `anthropic/claude-haiku` (trivial/low complexity) - 5 → `anthropic/claude-opus-4-20250514` (expert complexity) - Updated `createTask` calls to include `Nothing` for complexity Task-Id: t-141.5
2025-11-30Replace amp subprocess with native Engine in WorkerBen Sima
Implementation complete. Summary of changes to [Omni/Agent/Worker.hs](fi 1. **Added imports**: `Omni.Agent.Engine`, `Omni.Agent.Tools`, `System.E 2. **Added `shouldUseEngine`** (L323-327): Checks `JR_USE_ENGINE=1` envi 3. **Added `runWithEngine`** (L329-409): Native engine implementation th - Reads `OPENROUTER_API_KEY` from environment - Builds `EngineConfig` with cost/activity/tool callbacks - Builds `AgentConfig` with tools from `Tools.allTools` - Injects AGENTS.md, facts, retry context - Returns `(ExitCode, Text, Int)` tuple 4. **Added `buildBasePrompt`** and `buildRetryPrompt`** (L411-465): Help 5. **Added `selectModel`** (L467-471): Model selection (currently always 6. **Updated `processTask`** (L92-120): Checks feature flag and routes t Task-Id: t-141.4
2025-11-30Define Tool protocol and LLM provider abstractionBen Sima
The implementation is complete. Here's a summary of the changes made: 1. **Updated LLM type** to include `llmExtraHeaders` field for OpenRoute 2. **Changed `defaultLLM`** to use: - OpenRouter base URL: `https://openrouter.ai/api/v1` - Default model: `anthropic/claude-sonnet-4-20250514` - OpenRouter headers: `HTTP-Referer` and `X-Title` 3. **Updated `chatWithUsage`** to apply extra headers to HTTP requests 4. **Added `case-insensitive` dependency** for proper header handling 5. **Added tests** for OpenRouter configuration 6. **Fixed hlint suggestions** (Use `</` instead of `<$>`, eta reduce) Task-Id: t-141.1
2025-11-29Implement core coding tools (read, write, bash, search)Ben Sima
Both `bild --test` passes for Engine.hs and Tools.hs, and lint passes. T 1. **readFileTool** - Reads file contents with optional line range 2. **writeFileTool** - Creates/overwrites files (checks parent dir exist 3. **editFileTool** - Search/replace with optional replace_all flag 4. **runBashTool** - Executes shell commands, returns stdout/stderr/exit 5. **searchCodebaseTool** - Ripgrep wrapper with pattern, path, glob, ca Plus **ToolResult** type and **allTools** export as required. Task-Id: t-141.3
2025-11-29Implement agent loop with tool executionBen Sima
The implementation is complete. Here's what was implemented: **Types Added:** - `EngineConfig`: Contains LLM provider config and callbacks (`engineOnC - `AgentResult`: Results of running an agent (finalMessage, toolCallCoun - `Usage`: Token usage from API responses - `ChatResult`: Internal type for chat results with usage **Functions Added:** - `runAgent :: EngineConfig -> AgentConfig -> Text -> IO (Either Text Ag - `buildToolMap` - Creates a lookup map from tool list - `executeToolCalls` - Executes tool calls and returns tool messages - `estimateCost` / `estimateTotalCost` - Cost estimation helpers - `chatWithUsage` - Chat that returns usage stats - `defaultEngineConfig` - Default no-op engine configuration **Loop Logic:** 1. Sends messages to LLM via `chatWithUsage` 2. If response has tool_calls, executes each tool via `executeToolCalls` 3. Appends tool results as ToolRole messages 4. Repeats until no tool_calls or maxIterations reached 5. Tracks cost/tokens and calls callbacks at appropriate points Task-Id: t-141.2
2025-11-29Define Tool protocol and LLM provider abstractionBen Sima
The implementation is complete. I created [Omni/Agent/Engine.hs](file:// - **Types**: `Tool`, `LLM`, `AgentConfig`, `Message`, `Role`, `ToolCall` - **Functions**: `chat` for OpenAI-compatible HTTP via http-conduit, `de - **Tests**: JSON roundtrip for Tool, Message; validation of defaults All lints pass (hlint + ormolu) and tests pass. Task-Id: t-141.1
2025-11-29Expand intervention page to show all human action itemsBen Sima
All tests pass and lint is clean. The implementation is complete: **Changes made:** 1. **Omni/Task/Core.hs:** - Added `EpicForReview` data type to hold epic with progress info - Added `HumanActionItems` data type to group all three categories - Added `getHumanActionItems` function that returns: - `failedTasks`: Tasks with retry_attempt >= 3 - `epicsInReview`: Epics where all children are Done (and has at le - `humanTasks`: HumanTask type tasks in Open status 2. **Omni/Jr/Web.hs:** - Updated `InterventionPage` data type to use `HumanActionItems` - Updated `interventionHandler` to call `getHumanActionItems` - Rewrote `ToHtml InterventionPage` to show 3 sections with headers - Added `renderEpicReviewCard` for epic review cards with "Approve & - Renamed navbar link from "Intervention" to "Human Action" Task-Id: t-193.5
2025-11-29Store agent review notes as task commentsBen Sima
The implementation is complete. Here's a summary of what was implemented **Changes to [Omni/Jr.hs](file:///home/ben/omni/Omni/Jr.hs):** 1. **`autoReview`** - Now adds a review comment with: - Commit SHA (short) - Test target (namespace) - Result (PASSED/FAILED) - Test output (truncated to 1000 chars) when tests fail 2. **`interactiveReview`** - Now adds a human review comment with: - Commit SHA (short) - Result (ACCEPTED/REJECTED) - Rejection reason (when rejected) 3. **`handleConflict`** - Now adds a merge conflict comment with: - Commit SHA (short) - Attempt number - List of conflicting files 4. **Helper functions added:** - `buildReviewComment` - Formats auto-review results - `buildHumanReviewComment` - Formats human review results - `buildConflictComment` - Formats merge conflict info - `truncateOutput` - Truncates long test output Task-Id: t-193.4
2025-11-29Add Draft status option to task detail status dropdownBen Sima
Build and tests pass. The change has been successfully implemented - Dra Task-Id: t-192
2025-11-29Add dark mode styles for retry/failure banner on task detail pagesBen Sima
Build and tests pass. The dark mode styles for the retry/failure banner Task-Id: t-191
2025-11-29Add dark mode styles for KB fact detail page form elementsBen Sima
The build and tests pass. The dark mode styles for KB fact detail page f Task-Id: t-190
2025-11-29Sort /blocked page by blocking impact (transitive dependents)Ben Sima
All tests pass. The implementation is complete: **Summary of changes:** 1. **Omni/Task/Core.hs** - Added helper functions: - `getBlockingImpact`: Counts how many tasks are transitively blocked - `getTransitiveDependents`: Gets all tasks that depend on a task (di - `dependsOnTask`: Helper to check if a task depends on a given ID wi 2. **Omni/Jr/Web.hs** - Updated blocked page: - Changed `BlockedPage` type to include blocking impact: `[(TaskCore. - Updated `blockedHandler` to compute blocking impact and sort by it - Added `renderBlockedTaskCard` to display tasks with their blocking - Updated the info message to explain the sorting 3. **Omni/Jr/Web/Style.hs** - Added CSS: - `.blocking-impact` badge style (light mode) - `.blocking-impact` dark mode style Task-Id: t-189
2025-11-29Add lint and build commands to AGENTS.md for agent contextBen Sima
The AGENTS.md file has been updated correctly. The "Common Commands" sec Task-Id: t-188
2025-11-29Render task descriptions as markdown (not just epics)Ben Sima
Build and tests pass. The fix is complete - task descriptions now render Task-Id: t-187
2025-11-29Inject relevant facts into coder agent contextBen Sima
All checks pass. The implementation is complete: 1. Added imports for `Data.List` and `Omni.Fact` 2. Added `getRelevantFacts` function that retrieves facts for the task's 3. Added `formatFacts` and `formatFact` functions to format facts for in 4. Updated `runAmp` to call `getRelevantFacts`, format them, and append Task-Id: t-186
2025-11-29Inject task comments into agent context during work and reviewBen Sima
Build and lint both pass. The implementation: 1. Updated `formatTask` in [Omni/Agent/Worker.hs](file:///home/ben/omni/ 2. Extracted deps formatting to a separate `formatDeps` helper for consi 3. Added `formatComments` and `formatComment` helpers that show timestam Task-Id: t-184
2025-11-29Add comments UI to task detail web pagesBen Sima
The build passes. The comments UI is already fully implemented in the co 1. **Route**: `/tasks/:id/comment` with POST handler (line 226) 2. **Handler**: `taskCommentHandler` (lines 763-766) calls `TaskCore.add 3. **Form type**: `CommentForm` (lines 374-379) 4. **Display section**: renders in `TaskDetailPage` (lines 1484-1490) sh - Comment count in header - Empty message if no comments - Each comment with text and relative timestamp 5. **Comment form**: textarea with "Post Comment" button (lines 1553-156 6. **Helper function**: `renderComment` (lines 1547-1551) 7. **CSS**: Full styling in `Style.hs` including dark mode (lines 552-58 The implementation is complete and the build passes. Task-Id: t-183
2025-11-29Add clickable priority dropdown on task detail pagesBen Sima
The build passes successfully. Let me provide a summary of the changes m I implemented the clickable priority dropdown on task detail pages, mirr 1. **Added new API route** for priority updates: ```haskell "tasks" :> Capture "id" Text :> "priority" :> ReqBody '[FormUrlEncode ``` 2. **Added new types**: - `PriorityBadgePartial` - partial response for HTMX updates - `PriorityForm` - form data for priority changes with `FromForm` ins 3. **Added handler** `taskPriorityHandler` that updates task priority vi 4. **Added priority dropdown components**: - `priorityBadgeWithForm` - container with clickable badge and dropdo - `clickablePriorityBadge` - the clickable badge showing current prio - `priorityDropdownOptions` - dropdown menu with P0-P4 options - `priorityOption` - individual priority option with HTMX form 5. **Added JavaScript** `priorityDropdownJs` for dropdown toggle/close b 6. **Updated task detail page** to use `priorityBadgeWithForm` instead o 7. **Added `ToHtml` instance** for `PriorityBadgePartial` 1. **Added priority badge styles** for P0-P4 with appropriate colors 2. **Added priority dropdown styles** (mirroring status dropdown) 3. **Added dark mode styles** for priority badges and dropdown Task-Id: t-182
2025-11-29Add sorting options to task list pagesBen Sima
The implementation is complete and all tests pass. Here's a summary of w 1. Added `SortOrder` data type with 5 options: `SortNewest`, `SortOldest 2. Added helper functions: `parseSortOrder`, `sortOrderToParam`, `sortOr 3. Updated API routes to include `?sort=` query param for `/ready`, `/bl 4. Updated page data types to include `SortOrder` 5. Updated all list handlers to parse sort param and apply sorting 6. Added `sortDropdown` component that renders a dropdown with all sort 7. Added `sortOption` helper to render individual sort options with acti 8. Updated all `ToHtml` instances for list pages to render the sort drop 1. Added `sortDropdownStyles` for the page header row and sort dropdown 2. Added dark mode styles for the sort dropdown Task-Id: t-181
2025-11-29Add time range filter to homepage Task Status sectionBen Sima
The build and tests pass with no errors. The time range filter feature f **Implementation summary:** - Route accepts `?range=today|week|month|all` query param - `TimeRange` type with `Today`, `Week`, `Month`, `AllTime` variants - `homeHandler` filters both tasks and activities by time range - Toggle buttons rendered with `timeFilterBtn` helper - Full CSS styling in `timeFilterStyles` with dark mode support - Default selection: "All Time" Task-Id: t-180
2025-11-29Add cost and duration metrics to homepage Task Status sectionBen Sima
The implementation is complete. The build passed with `bild --test Omni/ **Summary of changes:** 1. **Omni/Task/Core.hs**: Added `getGlobalAggregatedMetrics :: IO Aggreg 2. **Omni/Jr/Web.hs**: - Updated `HomePage` data type to include `AggregatedMetrics` paramet - Updated `homeHandler` to fetch global metrics via `getGlobalAggrega - Updated `ToHtml HomePage` instance to add two new cards: "Cost" (fo - Added helper functions `metricCard`, `formatCost`, and `formatDurat 3. **Omni/Jr/Web/Style.hs**: Added `badge-neutral` CSS styling (gray bor Task-Id: t-179
2025-11-29Fix Cancel button on description edit formBen Sima
The fix is complete: 1. Changed the Cancel element from `<a href="#">` to `<button type="butt 2. Added button reset styling (transparent background, no border, underl The `<button>` element works better with HTMX because it doesn't have th Task-Id: t-178
2025-11-29Remove background and border from breadcrumbsBen Sima
Build and tests pass. I've removed the background and border from `.brea Task-Id: t-177
2025-11-29Inline description editing with HTMX view/edit swapBen Sima
The implementation is complete. Here's a summary of the changes: **Omni/Jr/Web.hs:** 1. Added new API routes for `/tasks/:id/description/view` and `/tasks/:i 2. Added `DescriptionViewPartial` and `DescriptionEditPartial` data type 3. Added `ToHtml` instances for both partials with HTMX attributes for v 4. Added handlers: `descriptionViewHandler`, `descriptionEditHandler`, ` 5. Updated the TaskDetailPage render to use the view partial instead of **Omni/Jr/Web/Style.hs:** 1. Added `.description-block` container styles 2. Added `.description-header` flex styles for header with title and edi 3. Added `.edit-link` and `.cancel-link` styles (12px font, blue for edi 4. Added dark mode overrides for the links Task-Id: t-175
2025-11-29Fix dark mode contrast for homepage stat card numbersBen Sima
Build and tests passed with no errors. Task-Id: t-174
2025-11-29Fix navbar dropdown click-to-toggle behaviorBen Sima
The build passed with no errors. The implementation adds: 1. JavaScript click-toggle handler for navbar dropdowns (closes all, the 2. Click-outside-to-close behavior 3. CSS rule for `.navbar-dropdown.open` state to show dropdown content Task-Id: t-173
2025-11-29Add breadcrumbs navigation for task hierarchyBen Sima
The implementation is complete. Here's a summary of the changes made: 1. Added `Breadcrumb` data type and `Breadcrumbs` type alias 2. Added `pageBodyWithCrumbs` function that renders the page with breadc 3. Added `renderBreadcrumbs` function to render the breadcrumb navigatio 4. Added `getAncestors` helper to traverse task parent chain 5. Added `taskBreadcrumbs` helper to build breadcrumbs including parent Updated all page ToHtml instances to use breadcrumbs: - `ReadyQueuePage`: Jr > Ready Queue - `BlockedPage`: Jr > Blocked - `InterventionPage`: Jr > Needs Intervention - `KBPage`: Jr > Knowledge Base - `FactDetailPage`: Jr > Knowledge Base > Fact #N - `EpicsPage`: Jr > Epics - `TaskListPage`: Jr > Tasks - `TaskDetailPage`: Jr > Tasks > (parent chain) > task-id - `TaskReviewPage`: Jr > Tasks > task-id > Review - `TaskDiffPage`: Jr > Tasks > task-id > Diff (short hash) - `StatsPage`: Jr > Stats - `HomePage`: Uses regular `pageBody` (no breadcrumbs) Added `breadcrumbStyles` function with CSS for: - `.breadcrumb-container`: Light gray background, subtle bottom border - `.breadcrumb-list`: Flex layout with wrapping - `.breadcrumb-item`: Flex items with gap - `.breadcrumb-sep`: Gray separator ">" - `.breadcrumb-current`: Current page label (no link) - Link styling for breadcrumb links Added dark mode overrides for breadcrumbs in `darkModeStyles`. Task-Id: t-172
2025-11-29Compact task detail metadata into inline Gerrit-style layoutBen Sima
The implementation is complete. Here's a summary of changes: **Omni/Jr/Web.hs:** - Added `metaSep` helper function for the `·` separator - Added top-level `priorityDesc` function mapping priority levels to hum - Replaced the vertical `detail-row` layout with compact inline `task-me - Primary line: ID · Type · Status · Priority · Namespace (optional) - Secondary line: Parent (optional) · Created · Updated - Removed the shadowing local `priorityDesc` from the `where` clause **Omni/Jr/Web/Style.hs:** - Added `taskMetaStyles` function with styles for `.task-meta`, `.task-m - Added dark mode overrides for the new task-meta classes - Registered `taskMetaStyles` in the stylesheet Task-Id: t-171
2025-11-29Fix dark theme description text invisible on task detail pageBen Sima
The fix is complete. The build and tests pass. The change adds `color "# Task-Id: t-170
2025-11-29Fix Recent Activity pagination and refresh bugsBen Sima
Build and tests pass. The implementation is complete: **Summary of changes to [Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/W 1. Added `Data.Time.Clock.POSIX` import for `posixSecondsToUTCTime` and 2. Replaced `RecentActivityPartial` with two new types: - `RecentActivityNewPartial` - for auto-refresh (prepends new items) - `RecentActivityMorePartial` - for "Load More" pagination 3. Updated API routes: - `/partials/recent-activity-new?since=<unix-ts>` - returns new items - `/partials/recent-activity-more?offset=<n>` - returns paginated old 4. Updated `HomePage` render with proper HTMX attributes: - Added `#recent-activity` ID and `data-newest-ts` attribute - Added `#activity-list` ID for the list container - Added `#activity-load-more` ID for the button - Updated hx-targets and hx-swap attributes 5. Added `taskToUnixTs` helper function 6. Created two new ToHtml instances with OOB updates for button replacem Task-Id: t-169
2025-11-29Fix nullable SQL fieldBen Sima
2025-11-28Use HTMX hx-boost for smoother page navigationBen Sima
The build and tests pass. The `hx-boost="true"` is already implemented o ```haskell pageBody content = Lucid.body_ [Lucid.makeAttribute "hx-boost" "true"] <| do navbar content ``` This means: - All anchor tags (`<a>`) and forms within the body will automatically u - Page content will be swapped via AJAX without full page reloads - Scroll position is preserved, making navigation feel snappier The task appears to have already been implemented correctly. The build p Task-Id: t-151.5
2025-11-28Add description edit form to task detail page in web UIBen Sima
The build and tests pass. The implementation adds a description edit for 1. An expandable `<details>` section similar to the existing Epic design 2. A textarea for editing the description 3. HTMX `hx-post` for seamless update (with `hx-swap="none"` since the e 4. Also shows "No description yet." message when description is empty (p Task-Id: t-168
2025-11-28Add comments field to tasks for providing extra contextBen Sima
All tests pass. Here's a summary of the changes I made: 1. **Added `Comment` data type** in `Omni/Task/Core.hs` with `commentTex 2. **Added `taskComments` field** to the `Task` type to store a list of 3. **Updated database schema** with a `comments TEXT` column (stored as 4. **Added SQL instances** for `[Comment]` to serialize/deserialize 5. **Added `addComment` function** to add timestamped comments to tasks 6. **Added CLI command** `task comment <id> <message> [--json]` 7. **Updated `showTaskDetailed`** to display comments in the detailed vi 8. **Added unit tests** for comments functionality 9. **Added CLI tests** for the comment command 10. **Fixed dependent files** (`Omni/Agent/Worker.hs` and `Omni/Jr/Web.h Task-Id: t-167
2025-11-28Make task description a required field on createBen Sima
All tests pass. The changes are complete: **Summary of changes:** 1. **Omni/Task/Core.hs**: Changed `taskDescription` from `Maybe Text` to 2. **Omni/Task.hs**: Made `--description` required on CLI `create` (pani 3. **Omni/Task/RaceTest.hs**: Updated test to provide descriptions Task-Id: t-165
2025-11-28Fix llm tool installation - update nixpkgs hash in Biz/Bild.nixBen Sima
Done. I've updated the nixos-unstable hash in [Sources.json](/home/ben/o Task-Id: t-163
2025-11-28Fix llm tool installation - update nixpkgs hash in Biz/Bild.nixBen Sima
The fix is complete. Changed `python311.withPackages` to `unstable.pytho 1. `python312` has the proper `llm` override defined in Python.nix 2. `python311` only overrides `llm-ollama` and `llm-sentence-transformer 3. Using `unstable` is consistent with other AI tools in the same sectio Task-Id: t-163
2025-11-28Fix llm tool installation - update nixpkgs hash in Biz/Bild.nixBen Sima
The build passed. The task was to update nixpkgs hash in Biz/Bild.nix, b Task-Id: t-163
2025-11-28Truncate task title to 52 characters in commit message subject lineBen Sima
The build and tests pass. The change is complete - the task title in com Task-Id: t-159
2025-11-28Remove Jr Dashboard header from homepageBen Sima
The build and tests pass. The "Jr Dashboard" header has been removed fro Task-Id: t-154.6
2025-11-28Add pagination to Recent Activity with HTMX load more buttonBen Sima
The implementation is complete. Here's a summary: **Changes made:** 1. **API**: Added `QueryParam "offset" Int` to the `/partials/recent-act 2. **Data types**: - Updated `HomePage` to include a `Bool` for whether there are more t - Updated `RecentActivityPartial` to include `nextOffset :: Int` and 3. **Homepage rendering**: Shows a "Load More" button when there are mor 4. **Partial rendering**: The `RecentActivityPartial` now shows a "Load 5. **Handler**: `recentActivityHandler` now supports pagination with off 6. **Styling**: Added CSS for `.load-more-btn` and `.btn-secondary` clas The HTMX integration uses: - `hx-get` to fetch the next page with offset - `hx-target="closest .recent-activity"` to target the parent container - `hx-swap="beforeend"` to append new items (including another Load More Task-Id: t-151.4
2025-11-28Update AGENTS.md to instruct workers to add facts as they discover themBen Sima
The build passes with no errors. The AGENTS.md update adds the instructi Task-Id: t-158.8