q792602257
|
f8c7771892
|
feat(infra/git): Runner interface + Credential injection + GitError
|
2026-05-01 21:40:00 +08:00 |
|
q792602257
|
719968ee26
|
feat(workspace): migration 0003 + errs codes for workspace/worktree/git
|
2026-05-01 19:26:18 +08:00 |
|
q792602257
|
81718e53f9
|
style(web): lint --fix sweep + disable no-undef for ts/vue (DOM globals)
|
2026-05-01 10:53:02 +08:00 |
|
q792602257
|
ba39fac142
|
feat(web): register pm routes and nav entry
|
2026-05-01 10:53:02 +08:00 |
|
q792602257
|
0bb23c8d08
|
feat(web): issue list and detail views
|
2026-05-01 10:49:51 +08:00 |
|
q792602257
|
80d37edca9
|
feat(web): requirement kanban list and detail with phase flow
|
2026-05-01 10:47:02 +08:00 |
|
q792602257
|
5d66f2f1ce
|
feat(web): project list and home views
|
2026-05-01 10:44:29 +08:00 |
|
q792602257
|
f51e29dd89
|
feat(web): pinia stores for projects and requirements
|
2026-05-01 10:42:20 +08:00 |
|
q792602257
|
d65155061a
|
feat(web): api client for project/requirement/issue
|
2026-05-01 10:40:21 +08:00 |
|
q792602257
|
a0087d2c25
|
feat(app): wire project module and integration test for pm closed loop
|
2026-05-01 10:36:37 +08:00 |
|
q792602257
|
1567f21a82
|
style(project): silence remaining lint findings (stutter, max shadow, gosec)
|
2026-05-01 10:33:16 +08:00 |
|
q792602257
|
76a1461f4b
|
feat(project): http handler with project/requirement/issue endpoints
|
2026-05-01 10:27:42 +08:00 |
|
q792602257
|
13b4d45868
|
refactor(project): issue Update tracks changed fields and skips no-op audit
|
2026-05-01 10:20:42 +08:00 |
|
q792602257
|
ccf4a1c8ee
|
feat(project): IssueService with attach/detach + assign + close/reopen
|
2026-05-01 10:18:10 +08:00 |
|
q792602257
|
1c3fb186e9
|
feat(project): RequirementService with phase state machine + close/reopen
|
2026-05-01 10:13:19 +08:00 |
|
q792602257
|
257e3dca2e
|
feat(project): ProjectService with owner/visibility access control + audit
|
2026-05-01 09:57:03 +08:00 |
|
q792602257
|
fc6a7745a5
|
feat(project): postgres repository wrapper with type conversions
|
2026-05-01 09:50:41 +08:00 |
|
q792602257
|
5f63fb5e52
|
docs(project): document tri-state DTO semantics in domain.go
|
2026-05-01 09:46:45 +08:00 |
|
q792602257
|
ce88c4b4a7
|
chore(sqlc): regenerate cross-package models for project schema
|
2026-05-01 09:40:02 +08:00 |
|
q792602257
|
f60d30a63d
|
feat(project): domain types and sqlc queries for project/requirement/issue
|
2026-05-01 09:39:16 +08:00 |
|
q792602257
|
c5ed9e8622
|
test(errs): cover new project conflict codes in HTTPStatus table
|
2026-05-01 09:35:18 +08:00 |
|
q792602257
|
f261504c51
|
feat(project): migration 0002 + errs codes for project/requirement/issue
|
2026-05-01 09:31:03 +08:00 |
|
q792602257
|
357d08f2e3
|
fix(web): localStorage safety, default fetch timeout, visibility-aware polling
|
2026-04-29 12:00:40 +08:00 |
|
q792602257
|
7377c2135f
|
fix(notify): waitgroup-based dispatcher shutdown, withoutcancel persist
|
2026-04-29 11:55:18 +08:00 |
|
q792602257
|
1e36f21ec4
|
fix(user): withoutcancel audit, x-forwarded-for client ip
|
2026-04-29 11:53:06 +08:00 |
|
q792602257
|
0f9c7fa657
|
fix(server): propagate shutdown error, http timeouts, ctx-aware migrate
|
2026-04-29 11:52:27 +08:00 |
|
q792602257
|
fc0724fc0b
|
ops(deploy): app healthcheck via wget /healthz
|
2026-04-29 11:49:21 +08:00 |
|
q792602257
|
3fd6bd82e3
|
feat(deploy): docker-compose production stack with bootstrap envs
|
2026-04-29 10:47:00 +08:00 |
|
q792602257
|
fb116de7c8
|
feat(deploy): multi-stage Dockerfile (web build -> go embed -> alpine runtime)
|
2026-04-29 10:46:09 +08:00 |
|
q792602257
|
78989a42ac
|
feat(server): embed SPA dist with fallback handler; single-binary deploy
|
2026-04-29 10:43:42 +08:00 |
|
q792602257
|
04a19dbcef
|
feat(web): notification bell with polling and dropdown
|
2026-04-29 10:33:53 +08:00 |
|
q792602257
|
b7b9532a5a
|
chore(web): ignore stale .js emit artifacts in test/ and src/
|
2026-04-29 10:19:00 +08:00 |
|
q792602257
|
9e3b745da3
|
fix(web): preserve next on 401, validate redirect target, catch navigation rejections
|
2026-04-29 10:16:07 +08:00 |
|
q792602257
|
9d93bcd24b
|
feat(web): router with auth guard, AppShell, login + home views
|
2026-04-29 10:02:45 +08:00 |
|
q792602257
|
3eb595cf5e
|
feat(web): fetch-based api client with 401 handling and tests
|
2026-04-29 07:49:33 +08:00 |
|
q792602257
|
7c164f6aea
|
feat(web): auth/ui/notifications pinia stores + theme composable
|
2026-04-29 07:45:20 +08:00 |
|
q792602257
|
35b812e594
|
chore(web): eslint flat-config + prettier setup
|
2026-04-29 07:41:51 +08:00 |
|
q792602257
|
aef7b0b661
|
feat(web): vite + vue 3 + ts + tailwind + naive ui scaffolding
|
2026-04-29 07:32:32 +08:00 |
|
q792602257
|
b72de98f15
|
test(app): integration test for login -> dispatch -> list flow
|
2026-04-28 23:18:27 +08:00 |
|
q792602257
|
cb865beabf
|
fix(server): explicit discard of fmt.Fprintln return values for errcheck
|
2026-04-28 23:12:43 +08:00 |
|
q792602257
|
acf8596f23
|
feat(server): wire config + signal-aware app entrypoint
|
2026-04-28 23:11:29 +08:00 |
|
q792602257
|
d0f34e4e5e
|
feat(app): composition root with migrate, pool, modules, router, bootstrap
|
2026-04-28 23:08:38 +08:00 |
|
q792602257
|
62cf9ffa0c
|
feat(user): wire audit recorder into login/logout
|
2026-04-28 23:02:09 +08:00 |
|
q792602257
|
f42b88e57d
|
feat(audit): recorder with pg implementation and ip parsing
|
2026-04-28 22:53:22 +08:00 |
|
q792602257
|
0b323b91ee
|
feat(notify): http handler for inbox list / unread count / mark read
|
2026-04-28 22:37:19 +08:00 |
|
q792602257
|
13032c1192
|
feat(notify): dispatcher with sync persist and async channel fanout
|
2026-04-28 22:33:14 +08:00 |
|
q792602257
|
83c63c5f93
|
feat(notify): dummy notifier writing structured log lines
|
2026-04-28 22:28:47 +08:00 |
|
q792602257
|
d9a8c04195
|
feat(notify): postgres repository for notifications inbox
|
2026-04-28 22:25:23 +08:00 |
|
q792602257
|
f25078dc8c
|
feat(notify): sqlc queries for notifications crud
|
2026-04-28 22:18:41 +08:00 |
|
q792602257
|
32e313d5f7
|
feat(notify): channel/severity types and Notifier interface
|
2026-04-28 18:07:19 +08:00 |
|