summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
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
2025-11-28Add create fact form in web UIBen Sima
All tests pass. The create fact form has been added to the web UI. Here' 1. **Added `FactCreateForm` data type** - New form type to handle the cr 2. **Added API route** - `POST /kb/create` endpoint that accepts the for 3. **Added handler** - `factCreateHandler` that creates a new fact using 4. **Added form UI** - A collapsible form on the KB page with fields for - Project (required) - Fact Content (required textarea) - Related Files (optional, comma-separated) - Confidence level (0.0-1.0, default 0.8) 5. **Added CSS styles** - Styling for the create fact section in both li Task-Id: t-158.6
2025-11-28Add fact detail/edit view in web UIBen Sima
All tests pass with no warnings. The implementation is complete: 1. **Added new routes** (`/kb/:id`, `/kb/:id/edit`, `/kb/:id/delete`) to 2. **Created `FactDetailPage` data type** with `FactDetailFound` and `Fa 3. **Created `FactEditForm`** data type for handling form submissions 4. **Added handlers** (`factDetailHandler`, `factEditHandler`, `factDele 5. **Added `ToHtml` instance for `FactDetailPage`** with: - Detail view showing project, confidence, created date - Editable content textarea - Related files input - Confidence slider - Source task link - Danger zone with delete button 6. **Updated KB listing** to make facts clickable links to their detail 7. **Added CSS styles** for form elements, buttons, danger zone, and err Task-Id: t-158.5
2025-11-28Create /kb web page listing facts with confidence scoresBen Sima
The implementation is complete. The `/kb` web page now: 1. Fetches all facts from the database via `Fact.getAllFacts` 2. Displays each fact in a card showing: - Fact ID - Confidence score as a colored badge (green ≥80%, yellow ≥50%, red < - Project name - Fact content - Related files (if any) - Source task link (if any) Task-Id: t-158.4
2025-11-28Implement jr facts list/show/add/delete CLI commandsBen Sima
The build and tests pass. The hlint suggestions have been fixed: 1. Changed `Text.pack <$>` to `Text.pack </` on line 528 2. Replaced the case expression with `maybe Fact.getAllFacts Fact.getFac 3. Changed `Text.pack <$>` to `Text.pack </` on line 555 Task-Id: t-158.3
2025-11-28Update AGENTS.md to use jr task instead of taskBen Sima
All task management commands should go through the jr CLI wrapper.
2025-11-28Add Omni/Fact.hs core module with CRUD operationsBen Sima
The build passes now. The task was to add `Omni/Fact.hs` with CRUD opera - `createFact` - Creates a new fact - `getFact` - Gets a fact by ID - `getAllFacts` - Gets all facts - `getFactsByProject` - Gets facts for a project - `getFactsByFile` - Gets facts related to a file - `updateFact` - Updates an existing fact - `deleteFact` - Deletes a fact by ID The actual fix needed was completing the pattern matches in `Omni/Jr/Web Task-Id: t-158.2
2025-11-28Fix web UI bug in search filterBen Sima
This allows Servant's QueryParam Maybe to treat Left as "parameter not provided", so the 'All' filter option (which sends empty string value) now works correctly instead of causing an "Invalid priority" error. Task-Id: t-146
2025-11-27Add Draft status for tasks not ready for jr to pickupBen Sima
All changes are in place. The build and tests pass. The implementation i 1. **Added `Draft` to Status enum** - First in sequence: `Draft | Open | 2. **Excluded Draft from getReadyTasks** - Uses `taskStatus t `elem` [Op 3. **CLI support** - `task update <id> draft` works, `task list --status 4. **Display coloring** - Draft shows in gray with `[.]` indicator in tr 5. **TaskStats** - Added `draftTasks` field and display in stats output 6. **Tests** - Added unit test for draft exclusion from ready tasks and Task-Id: t-166
2025-11-27Add Omni/Fact.hs core module with CRUD operationsBen Sima
The Omni/Fact.hs module is complete with CRUD operations: - **createFact**: Create a new fact with project, content, related files - **getFact**: Retrieve a fact by ID - **getAllFacts**: Get all facts from the database - **getFactsByProject**: Get facts filtered by project - **getFactsByFile**: Get facts related to a specific file - **updateFact**: Update an existing fact's content, related files, and - **deleteFact**: Delete a fact by ID The module properly re-exports the `Fact` data type from `Omni.Task.Core Task-Id: t-158.2
2025-11-27Exclude tasks with retry >= 3 from ready queueBen Sima
Tasks that have failed 3 or more times need human intervention and should not appear in the ready queue. This prevents infinite retry loops. Task-Id: t-164 Amp-Thread-ID: https://ampcode.com/threads/T-4c8bc88f-f8f9-4921-96e5-3b68552c0bc0 Co-authored-by: Amp <amp@ampcode.com>
2025-11-27Ensure keyboard accessibility for status badge dropdownBen Sima
The implementation is complete. Here's a summary of the keyboard accessi **Changes to Omni/Jr/Web.hs:** 1. Added `statusDropdownJs` - JavaScript functions for keyboard handling - `toggleStatusDropdown()` - Opens/closes dropdown, updates aria-expa - `closeStatusDropdown()` - Closes dropdown, returns focus to trigger - `handleStatusKeydown()` - Handles Enter/Space (toggle), Escape (clo - `handleMenuItemKeydown()` - Handles ArrowUp/ArrowDown (navigate), E - Click-outside handler to close open dropdowns 2. Updated `clickableBadge`: - Added `tabindex="0"` for keyboard focusability - Added `role="button"` for screen readers - Added `aria-haspopup="true"` and `aria-expanded="false"` - Changed onclick to use `toggleStatusDropdown()` function - Added `onkeydown` handler 3. Updated `statusDropdownOptions`: - Added `role="menu"` and `aria-label` for accessibility 4. Updated `statusOption`: - Added `role="none"` on form wrapper - Added `role="menuitem"` on button - Added `tabindex="-1"` (focus managed by JS) - Added `onkeydown` handler **Changes to Omni/Jr/Web/Style.hs:** - Added focus styles for `.status-dropdown-option:focus` - Added focus styles for `.status-badge-clickable:focus` Task-Id: t-157.3
2025-11-27Click badge to show inline dropdown optionsBen Sima
The implementation is complete. The changes I made: 1. **Web.hs** - Replaced the `statusBadgeWithForm` function from a `<sel - `statusBadgeWithForm` now creates a container div with the clickabl - `clickableBadge` renders a badge that, when clicked, toggles the "o - `statusDropdownOptions` renders all the status options as badge-sty - `statusOption` renders each status option as an HTMX form that upda 2. **Style.hs** - Added CSS styles for the new dropdown component: - `.status-badge-dropdown` - Container with relative positioning - `.status-badge-clickable` - Clickable badge styling with cursor poi - `.dropdown-arrow` - Arrow indicator styling - `.status-dropdown-menu` - Hidden dropdown that appears when parent - `.status-option-form` and `.status-dropdown-option` - Styling for o - Dark mode support for the dropdown menu Task-Id: t-157.2
2025-11-27Merge status badge display and dropdown into single elementBen Sima
The build and tests pass. The changes merge the status badge display and Task-Id: t-157.1
2025-11-27Audit and fix any remaining vertical button stacksBen Sima
The changes are in place. The build passes with no errors. Summary of ch 1. **`.actions`** - Added explicit `flexDirection row` to ensure horizon 2. **`.review-actions`** - Added `display flex`, `flexDirection row`, `f 3. **`.form-actions`** - Added same flex row layout for consistency Task-Id: t-156.6
2025-11-27Make filter buttons horizontal instead of vertical stackingBen Sima
The changes are complete. The filter buttons are now styled to be horizo 1. Changed `.filter-group` from `flexDirection column` to `flexDirection 2. Added `whiteSpace nowrap` to labels to prevent wrapping 3. Updated responsive styles for mobile to maintain horizontal layout wi Task-Id: t-156.5
2025-11-27Remove redundant borders, consolidate to margin OR padding onlyBen Sima
All tests pass. Summary of changes made: 1. **Removed redundant `borderBottom` from `.detail-row`** - replaced wi 2. **Removed redundant `borderBottom` from `.stats-row`** - replaced wit 3. **Removed redundant `borderBottom` from `.metric-row`** - replaced wi 4. **Removed corresponding dark mode border color overrides** for the ab Task-Id: t-156.4
2025-11-27Convert task list/search page to list-group patternBen Sima
The build and tests pass. The task list/search page now uses the `list-g Task-Id: t-156.3
2025-11-27Convert dashboard ready queue and recent activity to list-group patternBen Sima
All the changes are in place: 1. Created `renderListGroupItem` function for compact list-style task di 2. Updated the dashboard's Ready Queue section to use `list-group` with 3. Updated the dashboard's Recent Activity section to use `list-group` w 4. Updated the `RecentActivityPartial` (HTMX partial) to also use the li 5. Added CSS styles for `.list-group`, `.list-group-item`, etc. in Style 6. Added dark mode styles for the list-group components The build and tests pass successfully. Task-Id: t-156.2
2025-11-27Change task detail labels to inline format (ID: t-123 on same line)Ben Sima
Both tests pass. The change converts the task detail display from: ``` Task: t-123 Title: Some title ``` To the inline format: ``` Title: Some title (ID: t-123) ``` Task-Id: t-156.1
2025-11-27Add status breakdown counts per epic on epics pageBen Sima
The build and tests pass. The implementation adds status breakdown count 1. Changed `EpicsPage` from a newtype to a data type that holds both epi 2. Added `renderEpicCardWithStats` function that calculates descendant c 3. Added `getDescendants` helper to find all child tasks recursively 4. Updated `epicsHandler` to pass all tasks to the page 5. The breakdown shows badges for done, in-progress, review, and open co Task-Id: t-155.4
2025-11-27Fixes to get all tests passingBen Sima
2025-11-27Implement multi-color progress bar componentBen Sima
The build and test passed with no errors. The multi-color progress bar c **Implementation summary:** - **[Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/Web.hs#L234-L275)**: - **[Omni/Jr/Web/Style.hs](file:///home/ben/omni/Omni/Jr/Web/Style.hs#L3 The progress bar is used on the dashboard (line 324 in Web.hs) to visual Task-Id: t-155.3
2025-11-27Create /epics page listing all epicsBen Sima
The build passes. The `/epics` page has been successfully created and al Task-Id: t-155.2
2025-11-27Auto-transition epic to Review status when all children reach DoneBen Sima
The implementation is complete. Summary of changes to [Omni/Jr.hs](file: 1. Added `checkEpicCompletion` function (lines 490-508) that: - Checks if the completed task has a parent - Finds the parent task and verifies it's an Epic - Checks if all children of that epic are Done - If so, transitions the epic to Review status 2. Updated `autoReview` to call `checkEpicCompletion` after marking a ta 3. Updated `interactiveReview` to: - Accept the task as a parameter (line 414) - Call `checkEpicCompletion` after marking a task Done (line 429) 4. Updated the call site at line 361 to pass the task to `interactiveRev Task-Id: t-155.1
2025-11-27Style navbar dropdowns for dark mode compatibilityBen Sima
The build and tests pass. The change adds proper dark mode styling for n Task-Id: t-154.5
2025-11-27Remove homepage action links section (redundant with navbar)Ben Sima
The build and tests pass with no errors. The homepage action links secti Task-Id: t-154.4
2025-11-27Implement hamburger collapse menu for mobileBen Sima
The implementation is complete. I've implemented a hamburger collapse me 1. **Omni/Jr/Web.hs**: Added a checkbox-based hamburger menu toggle (CSS - Hidden checkbox input for toggle state - Label with 3 hamburger lines that acts as the button - The navbar links are shown/hidden based on checkbox state 2. **Omni/Jr/Web/Style.hs**: Added responsive CSS styles: - Hamburger menu styles (`.navbar-hamburger`, `.hamburger-line`) - Hidden by default on desktop, displayed on mobile (< 600px) - Full-width mobile menu with proper ordering - Dark mode support for hamburger lines - Dropdown menus expand inline on mobile Task-Id: t-154.3
2025-11-27Add dropdown menusBen Sima
Tasks (Ready, Blocked, Intervention, All), Plans (Epics, KB). Task-Id: t-154.2
2025-11-27Refactor navbar to single horizontal row (Jr logo left, links right)Ben Sima
The changes are complete. The navbar is now refactored to always stay as - The Jr logo/brand on the left - Navigation links on the right - On mobile screens, instead of switching to a column layout, it now jus Task-Id: t-154.1
2025-11-27Fix SQL query and add simple migration testBen Sima
2025-11-27Add Reset Retries action buttonBen Sima
Build and tests pass. The implementation is complete: 1. **Added API endpoint**: `POST /tasks/:id/reset-retries` in the API ty 2. **Added handler**: `taskResetRetriesHandler` that clears retry contex 3. **Added UI button**: "Reset Retries" button in the retry context bann Task-Id: t-153.6
2025-11-27Add human notes field for intervention tasksBen Sima
All tests pass. Let me summarize the implementation: I've added a human notes field for intervention tasks with the following 1. **Omni/Task/Core.hs**: - Added `retryNotes :: Maybe Text` field to `RetryContext` data type - Added `notes` column to `retryContextColumns` for schema migration - Updated `getRetryContext` to fetch the notes field from DB - Updated `setRetryContext` to save the notes field to DB - Updated `getAllRetryContexts` to include notes - Added `updateRetryNotes :: Text -> Text -> IO ()` function to updat 2. **Omni/Jr/Web.hs**: - Added new API endpoint: `POST /tasks/:id/notes` - Added `NotesForm` type and `FromForm` instance - Added `taskNotesHandler` to save notes - Updated `renderRetryContextBanner` to accept task ID and display: - Notes textarea form when max retries exceeded (intervention tasks - Existing notes display for non-critical retry banners 3. **Omni/Agent/Worker.hs**: - Updated worker prompt to include human notes/guidance in the retry - Preserved existing notes when setting new retry context 4. **Omni/Jr.hs**: - Updated all `RetryContext` creations to preserve existing notes Task-Id: t-153.5
2025-11-27Store and display Amp thread URLBen Sima
The build and tests pass. Let me verify the changes are complete by chec 1. ✅ The Amp thread URL is already parsed from amp output and stored in 2. ✅ The display has been updated to show a "View in Amp ↗" button inste 3. ✅ CSS styling has been added for the button (`.amp-thread-btn`) 4. ✅ Dark mode styles added for the button 5. ✅ Both instances of the URL display (in `renderExecutionDetails` and The implementation is complete. The changes: - [Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/Web.hs#L632-L637) - Cha - [Omni/Jr/Web.hs](file:///home/ben/omni/Omni/Jr/Web.hs#L969-L974) - Sam - [Omni/Jr/Web/Style.hs](file:///home/ben/omni/Omni/Jr/Web/Style.hs#L531 - [Omni/Jr/Web/Style.hs](file:///home/ben/omni/Omni/Jr/Web/Style.hs#L916 Task-Id: t-153.4
2025-11-27Display retry context on task detail pageBen Sima
The build and tests pass. The retry context display is already implement The implementation includes: - Current attempt number (e.g., "Attempt 3 of 3") at line 721 - Failure reason with `summarizeReason` at lines 696-697 - Original commit display at lines 699-703 - Conflict files list at lines 705-710 - Warning banner when max retries exceeded at lines 691-692 and 712-715 Task-Id: t-153.3
2025-11-27Add diff view page for commitsBen Sima
All the pieces are in place: 1. Route: `GET /tasks/:id/diff/:commit` (line 65) 2. Data type: `TaskDiffPage` (line 119) 3. `ToHtml` instance for rendering (line 759) 4. Handler: `taskDiffHandler` (line 1225) 5. Helper: `getDiffForCommit` (line 1301) The implementation shows: - Full git diff output via `git show <commit>` - Pre-formatted output (`<pre class="diff-block">`) - Link back to task detail page - Proper error handling for invalid commits Task-Id: t-153.2
2025-11-27Show git commits for task on detail pageBen Sima
All tests pass. The implementation is complete: 1. Added `GitCommit` data type with hash, short hash, summary, author, r 2. Added `getCommitsForTask` function that queries `git log --grep='Task 3. Updated `TaskDetailPage` to include commits 4. Updated `taskDetailHandler` to fetch commits for the task 5. Added `renderCommit` helper to display each commit with links to `/ta 6. Added CSS styles for the commit list in both light and dark modes Task-Id: t-153.1