<feed xmlns='http://www.w3.org/2005/Atom'>
<title>claudomator.git/web/test, branch story/repo-url</title>
<subtitle>claudomator — task automation server
</subtitle>
<id>https://git.terst.org/claudomator.git/atom?h=story%2Frepo-url</id>
<link rel='self' href='https://git.terst.org/claudomator.git/atom?h=story%2Frepo-url'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/'/>
<updated>2026-03-25T23:28:22+00:00</updated>
<entry>
<title>feat: add Stories UI — tab, list, new story elaborate/approve flow</title>
<updated>2026-03-25T23:28:22+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-25T23:28:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=36d50b5049996064fbdcb9338e70d4f81c2e6873'/>
<id>urn:sha1:36d50b5049996064fbdcb9338e70d4f81c2e6873</id>
<content type='text'>
- Stories tab (📖) with story card list, status badges, project/branch meta
- New Story modal: project picker + goal textarea + AI elaboration → plan review → approve &amp; queue
- Story detail modal: status, project, branch, created date
- Export storyStatusLabel() and renderStoryCard() with 16 unit tests
- CSS for story cards, status badges, and modals

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix: remove duplicate summary section in task panel, fix test mock DOM</title>
<updated>2026-03-25T23:08:09+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-25T23:08:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=053ec03306f37e354c013beb8b4baf8eae27af97'/>
<id>urn:sha1:053ec03306f37e354c013beb8b4baf8eae27af97</id>
<content type='text'>
renderTaskPanel was rendering the summary twice — once with .task-summary
before Overview, and again with .task-summary-text after it. Remove the
second (post-Overview) duplicate.

Add `dataset: {}` to the test mock DOM so makeMetaItem's state badge path
doesn't crash during renderTaskPanel tests.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix: unsubscribe stale push subscription before re-subscribing</title>
<updated>2026-03-18T07:54:48+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-17T08:04:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=1d550c1196ea836e0a0f798ba0127c1086f5f963'/>
<id>urn:sha1:1d550c1196ea836e0a0f798ba0127c1086f5f963</id>
<content type='text'>
When the VAPID key changes (e.g. after the key-swap fix), the browser's
cached PushSubscription was created with the old key. Calling
PushManager.subscribe() with a different applicationServerKey then throws
"The provided applicationServerKey is not valid".

Fix by calling getSubscription()/unsubscribe() before subscribe() so any
stale subscription is cleared. Adds web test covering both the stale and
fresh subscription paths.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: persist active main tab to localStorage</title>
<updated>2026-03-17T18:02:22+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-17T18:02:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=b5df9cadd7b8a275b8688ee8fb957142536fd26a'/>
<id>urn:sha1:b5df9cadd7b8a275b8688ee8fb957142536fd26a</id>
<content type='text'>
On tab click, store the tab name under 'activeMainTab' in localStorage.
On DOMContentLoaded, restore the previously active tab instead of
always defaulting to 'queue'.

Exported getActiveMainTab/setActiveMainTab for testability, following
the same pattern as getTaskFilterTab/setTaskFilterTab.

Tests: web/test/tab-persistence.test.mjs (6 tests, all green).

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>chore: autocommit uncommitted changes</title>
<updated>2026-03-17T17:02:23+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-17T17:02:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=a55b250ca2bff44170c8c26640d16927df91f88e'/>
<id>urn:sha1:a55b250ca2bff44170c8c26640d16927df91f88e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: hide deployment badge when not deployed and trim notification button label</title>
<updated>2026-03-16T21:30:36+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-16T21:30:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=1b6b27357c817359574605b854f6468917da314d'/>
<id>urn:sha1:1b6b27357c817359574605b854f6468917da314d</id>
<content type='text'>
- Deployment badge now returns null (hidden) when includes_fix is false instead of showing "Not deployed" noise
- Badge also suppressed when fix_commits is empty (no tracked commits to check)
- Notification button label trimmed to just the bell emoji
- Preamble: warn agents not to use absolute paths in git commands (sandbox bypass)

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: display deployment status badge on READY task cards</title>
<updated>2026-03-16T20:01:59+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-16T20:01:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=1b2deb13daa788dc43d98caeaa9507254b1ca283'/>
<id>urn:sha1:1b2deb13daa788dc43d98caeaa9507254b1ca283</id>
<content type='text'>
Add deployment_status field to task list/get API responses for READY
tasks. The field includes deployed_commit, fix_commits, and includes_fix
so the UI can show whether the deployed server includes each fix.

- internal/api/task_view.go: taskView struct + enrichTask() helper
- handleListTasks/handleGetTask: return enriched taskView responses
- web/app.js: export renderDeploymentBadge(); add badge to READY cards
- web/test/deployment-badge.test.mjs: 8 tests for renderDeploymentBadge
- web/style.css: .deployment-badge--deployed / --pending styles
- server_test.go: 3 new tests (red→green) for enriched task responses

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: add elaboration_input field to tasks for richer subtask placeholder</title>
<updated>2026-03-16T01:10:00+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-16T01:10:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=d911021b7e4a0c9f77ca9996b0ebdabb03c56696'/>
<id>urn:sha1:d911021b7e4a0c9f77ca9996b0ebdabb03c56696</id>
<content type='text'>
- Add ElaborationInput field to Task struct (task.go)
- Add DB migration and update CREATE/SELECT/scan in storage/db.go
- Update handleCreateTask to accept elaboration_input from API
- Update renderSubtaskRollup in app.js to prefer elaboration_input over description
- Capture elaborate prompt in createTask() form submission
- Update subtask-placeholder tests to cover elaboration_input priority
- Fix missing io import in gemini.go

When a task card is waiting for subtasks, it now shows:
  1. The raw user prompt from elaboration (if stored)
  2. The task description truncated at word boundary (~120 chars)
  3. The task name as fallback
  4. 'Waiting for subtasks…' only when all fields are empty

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: replace static subtask placeholder with task description</title>
<updated>2026-03-16T00:56:16+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-16T00:56:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=7f6254cdafc6143f80ee9ca8e482c36aff2c197e'/>
<id>urn:sha1:7f6254cdafc6143f80ee9ca8e482c36aff2c197e</id>
<content type='text'>
When a BLOCKED/READY task has no subtasks yet, show the task description
(truncated to ~120 chars at a word boundary) instead of the generic
'Waiting for subtasks…' text. Falls back to task.name if no description,
and finally to the original generic text if neither is present.

- Add truncateToWordBoundary(text, maxLen=120) helper
- Update renderSubtaskRollup(task, footer) to use task object instead of taskId
- Update both READY and BLOCKED call sites
- Add web/test/subtask-placeholder.test.mjs with 11 tests

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: show subtask rollup on READY task cards</title>
<updated>2026-03-15T09:16:02+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-15T09:16:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/claudomator.git/commit/?id=d0ed3694246ab8d352166f098be5d642e0dbe44d'/>
<id>urn:sha1:d0ed3694246ab8d352166f098be5d642e0dbe44d</id>
<content type='text'>
READY tasks now call renderSubtaskRollup identical to BLOCKED tasks
(without a question). The rollup appears above Accept/Reject buttons.
New test: web/test/ready-subtasks.test.mjs (10 assertions, all pass).
</content>
</entry>
</feed>
