Commit Graph

207 Commits

Author SHA1 Message Date
q792602257 895799a6c9 fix(jobs): timer leak in Module.Stop and warn on unknown runner names
Module.Stop used time.After which leaks the timer if the done channel
wins first; switch to time.NewTimer + defer Stop() to align with the
codebase convention.

scheduleEntry silently returned {0, false} for unknown runner names —
typos in production wiring were invisible. Return (entry, known) and
log Warn at NewModule registration time so misconfiguration surfaces.
2026-05-06 08:37:09 +08:00
q792602257 895a816221 feat(jobs): Module wiring + WorkerOptions.OnDeadLetter hook 2026-05-06 08:31:24 +08:00
q792602257 2d0c45a52b feat(jobs/runners): job_reaper (lease timeout) + job_purge (retention) 2026-05-06 08:20:29 +08:00
q792602257 f6add1598e test(jobs/runners): cover partial-storage-success, list-error isolation, DB-delete-error branches 2026-05-06 08:14:47 +08:00
q792602257 f56fe449fd feat(jobs/runners): attachment cleanup + chat DeleteAttachments query/method 2026-05-06 08:07:49 +08:00
q792602257 c50621eeca feat(jobs/runners): worktree prune two-phase + workspace prune queries/repo methods 2026-05-06 07:55:56 +08:00
q792602257 0111135e78 test(jobs/runners): cover CAS-lost, MarkSyncing-error, MarkFetchResult-error branches 2026-05-06 07:33:40 +08:00
q792602257 af1855b753 feat(jobs/runners): workspace fetch runner with notify dispatch on failure 2026-05-05 23:35:58 +08:00
q792602257 e361670539 feat(jobs): WebhookNotifier enqueues webhook.deliver jobs (topic whitelist + disabled short-circuit) 2026-05-05 23:26:47 +08:00
q792602257 9f290335b2 feat(jobs/handlers): webhook handler with HMAC sign + 4xx permanent / 5xx retry 2026-05-05 23:17:47 +08:00
q792602257 3aa19c8f7e fix(jobs): log repo write errors in worker.execute
Previously, write-back errors from Complete/DeadLetter/FailWithRetry
were silently dropped via underscore assignment. A transient DB
failure here would leave a job stuck (still 'running' with active
lease) until the reaper resets it, with zero observability into why.

Log each write-back error at Error level so operators can correlate
stuck jobs with DB symptoms. Code quality review of T8.
2026-05-05 23:12:43 +08:00
q792602257 1a83a5b1cf feat(jobs): worker pool with retry/dead-letter/panic-recovery 2026-05-05 19:57:23 +08:00
q792602257 f235b1be63 feat(jobs): periodic scheduler with panic-recovery and per-entry enable flag 2026-05-05 19:47:51 +08:00
q792602257 2e8135bcdf feat(jobs): postgres repository with SKIP LOCKED lease + retry/dead-letter/purge 2026-05-05 19:40:39 +08:00
q792602257 ff3f27c1dc feat(jobs): sqlc queries for jobs table 2026-05-05 16:59:03 +08:00
q792602257 215c1bb821 feat(jobs): domain types + Handler interface + Config 2026-05-05 16:52:17 +08:00
q792602257 ba1d657973 feat(workspace): clear prune_warning_at on SetWorktreeActive/Idle 2026-05-05 16:45:25 +08:00
q792602257 e768adb3ff chore(sqlc): regenerate per-module models for migration 0005 schema
T1 added jobs table and workspace_worktrees.prune_warning_at column but
sqlc generate was not re-run for all modules. This catches the audit,
notify, project, and user models up; chat partially regenerated already.
Workspace's regen is part of T3 (next commit).
2026-05-05 14:28:09 +08:00
q792602257 c47d99d3d8 feat(infra/clock): injectable Clock with Real and Fake implementations 2026-05-05 14:16:32 +08:00
q792602257 967f390b1e feat(jobs): migration 0005 + errs codes for jobs module 2026-05-05 14:09:10 +08:00
q792602257 8effeee063 feat(app): wire chat module + LocalFS storage + LLM registry into app.New 2026-05-04 19:37:14 +08:00
q792602257 7aa8456b1b fix(chat): NewStreamerHub accepts ConversationService interface; SSE handler drains ready events before ctx 2026-05-04 19:32:24 +08:00
q792602257 d3ef9c941b feat(chat): SSE writer + multipart upload endpoint with mime whitelist 2026-05-04 19:28:46 +08:00
q792602257 175e9be36a feat(chat): http handler + DTO + admin guard for endpoints/models/usage 2026-05-04 17:59:22 +08:00
q792602257 8b5dc70146 feat(chat): UsageService for cost/token summarization 2026-05-04 17:42:36 +08:00
q792602257 c42887498b feat(chat): MessageService Send/Stream/Cancel/Retry with attachment + capability + history truncation 2026-05-04 17:39:28 +08:00
q792602257 617794c7a3 feat(chat): StreamerHub with ring buffer + cond + Done/Error/Cancel flows 2026-05-04 17:27:50 +08:00
q792602257 d1be9e6eb0 feat(chat): ConversationService with title generation hook 2026-05-04 17:15:37 +08:00
q792602257 8e8edfe3ff fix(chat): align template service with actual repo method names 2026-05-04 16:57:22 +08:00
q792602257 45fdf63d11 feat(chat): TemplateService for prompt templates with system/user scope auth 2026-05-04 16:54:28 +08:00
q792602257 959dc2d571 feat(chat): EndpointService for admin LLM endpoints/models with cache invalidation + EndpointLoader 2026-05-04 16:52:49 +08:00
q792602257 98b4f01b10 fix(chat): cast date_trunc to timestamptz, drop interval hack 2026-05-04 16:43:54 +08:00
q792602257 daf13fff8a feat(chat): postgres repository with tx + pending unique index translation 2026-05-04 16:39:25 +08:00
q792602257 a1d0fbc3d3 feat(chat): sqlc queries for conversations/messages/attachments/templates/endpoints/models/usage 2026-05-04 09:52:06 +08:00
q792602257 ca5a018cd4 feat(chat): domain types + service interfaces + cross-module Reader interfaces 2026-05-04 09:49:30 +08:00
q792602257 9bc9873e3c feat(infra/llm): LLMRegistry with endpoint cache + invalidation 2026-05-04 09:48:03 +08:00
q792602257 a08a7249f0 feat(infra/llm): Gemini client with stream + count_tokens via google.golang.org/genai 2026-05-04 09:46:47 +08:00
q792602257 be751e76f6 feat(infra/llm): OpenAI client + base_url override + reasoning_content compat 2026-05-04 09:40:41 +08:00
q792602257 027b5d5eba fix(infra/llm): anthropic stream goroutine respects ctx cancel on send 2026-05-04 09:35:19 +08:00
q792602257 a1ba157d29 feat(infra/llm): Anthropic client with stream + count_tokens via official SDK 2026-05-04 09:29:35 +08:00
q792602257 9c8e4175c4 feat(infra/llm): neutral types + LLMClient interface + estimate tokenizer + fake 2026-05-04 00:37:04 +08:00
q792602257 547b339ed3 fix(storage): reject empty key + nil ReadCloser on Get error 2026-05-04 00:34:42 +08:00
q792602257 33838f1820 feat(storage): LocalFS implementation with sha256 + path safety 2026-05-04 00:22:38 +08:00
q792602257 eb73fbba46 feat(chat): migration 0004 + errs codes for chat/llm/storage 2026-05-04 00:15:13 +08:00
q792602257 0cadec343c feat(project): add workspace_id to issue/requirement with tri-state update 2026-05-02 20:22:13 +08:00
q792602257 7429a817bc feat(app): wire workspace module + integration test for ws closed loop 2026-05-02 12:32:05 +08:00
q792602257 78e74c9734 feat(workspace): http handler with workspace/worktree/gitops endpoints 2026-05-02 08:55:45 +08:00
q792602257 e31710f04e feat(workspace): GitOpsService for status/commit/push on main+worktree 2026-05-02 08:18:18 +08:00
q792602257 d76ed67666 feat(workspace): WorktreeService with acquire/release state machine 2026-05-02 08:13:07 +08:00
q792602257 bd91880898 feat(workspace): WorkspaceService + async clone runner 2026-05-02 08:00:00 +08:00