Commit graph

59 commits

Author SHA1 Message Date
6e231374e2 feat(roadmap): loader scoped by the caller's own read rules 2026-09-17 07:17:18 +02:00
b164f3273c feat(roadmap): checklist-derived completion percentage 2026-09-17 07:16:57 +02:00
1c24687dae feat(roadmap): time axis, month ticks and greedy row packing 2026-09-17 07:16:47 +02:00
0454abb853 feat(roadmap): Now/Next/Later derived from board order and dates 2026-09-17 07:16:24 +02:00
05ce52a6bf feat(schema): card brief, transcript and size band 2026-09-16 18:04:22 +02:00
a74f3e79b5 feat(intake): stateless interview service 2026-09-16 17:55:36 +02:00
bac4694ab1 feat(intake): whitelist brief parsing that degrades to raw answers 2026-09-16 17:55:14 +02:00
1c6e739b16 feat(intake): question and brief prompts 2026-09-16 17:54:54 +02:00
04f38ee114 feat(intake): size band derived from decomposition and known areas 2026-09-16 17:54:39 +02:00
95c4c6c8fa feat(intake): question cap and transcript sanitisation 2026-09-16 17:54:27 +02:00
8711c36833 feat(card): progress narrative and humanised commit history 2026-09-16 16:25:19 +02:00
30446153c8 feat(ai): card narratives regenerated when the commit set changes 2026-09-16 16:24:38 +02:00
7ca2798561 feat(schema): card narrative fields 2026-09-16 16:24:18 +02:00
5cecc87010 feat(ai): narrative prompt and set-based staleness 2026-09-16 16:23:32 +02:00
6890a6d29e feat(ingest): summarise new commits after metrics 2026-09-16 16:16:27 +02:00
bf7d024cef feat(ai): commit summarisation service that never throws 2026-09-16 16:16:08 +02:00
8addf87eef feat(ai): index-matched batch prompting and parsing 2026-09-16 16:15:42 +02:00
bce71a666a feat(schema): commit summary fields 2026-09-16 16:15:18 +02:00
e837500c6f feat(ai): single point of provider selection 2026-09-16 15:53:59 +02:00
b233259f18 feat(ai): OpenAI-compatible adapter for MiniMax 2026-09-16 15:53:34 +02:00
b172079912 feat(ai): Anthropic adapter 2026-09-16 15:52:56 +02:00
f3e4b30d46 feat(ai): settings storage with a browser-safe projection 2026-09-16 15:52:12 +02:00
8f1ac43e98 feat(ai): strip MiniMax inline reasoning blocks 2026-09-16 15:51:37 +02:00
b5593457af feat(ai): non-editable preamble with an append-only owner prompt 2026-09-16 15:51:15 +02:00
cd0984595c test(metrics): cached figures agree with stored commits + vitest stubs
The integration project now aliases server-only to a tiny empty stub
so tests can import modules that carry 'import "server-only"' without
the throwing real implementation firing during prepare. Unit tests do
NOT get the alias — a pure module with a server import is exactly the
kind of leak the unit project's missing condition is meant to surface.
2026-09-16 15:19:32 +02:00
cc20cf4bfd feat(metrics): cached project metrics recomputed on ingest 2026-09-16 13:51:03 +02:00
dbf524b04c feat(metrics): activity calendar grid 2026-09-16 13:46:26 +02:00
b379669db3 feat(metrics): project metric aggregation from commits 2026-09-16 13:45:56 +02:00
b4d4a3bcb6 feat(metrics): session clustering with defined boundaries
The plan's summariseSessions test expected 2 sessions for four commits
spanning two 3-hour gaps, but with the default 120-minute gap three hours
is too far and produces 3 sessions. The implementation matches the boundary
rule defined in the plan (strictly less than the gap continues a session);
the test was off. Adjusted to a 90-minute follow-up which keeps the same
session and verifies total + longest correctly.
2026-09-16 13:45:01 +02:00
265d623220 feat(metrics): SA public holidays and workday counting 2026-09-16 13:44:01 +02:00
d7e0b97ff4 feat(linking): re-link on ingest and on card rule changes
- ingestProject now calls relinkProject after every store
- updateCard relinks when scopeScope rule is in the patch
- acceptCard, archiveCard, unlinkCommitArchiveCard relink after their change
- three owner Server Actions for the tray: relinkProjectAction, linkCommitAction, unlinkCommitAction
2026-09-16 13:24:17 +02:00
25b504c901 feat(linking): idempotent relink engine preserving manual links 2026-09-16 13:23:33 +02:00
9c27d34c3e feat(linking): commit-to-card resolution with date bounding 2026-09-16 13:21:26 +02:00
7970edf7c2 feat(linking): explicit [#42] card references 2026-09-16 13:20:56 +02:00
d06d1e99ec feat(cards): per-project card numbers for commit references
- number field on cards, unique per project
- backfilled existing cards in created order
- both create paths (owner action, client API) assign on creation
- seed script is idempotent across re-runs
2026-09-16 13:20:24 +02:00
198a7a8ceb feat(git): shared idempotent ingest core 2026-09-16 11:47:55 +02:00
809983ee5c feat(git): Forgejo commit API client
Verified against the live instance: status 200, total 787 commits, first
sha 1bc0da40... 'feat(customers): lift active/inactive toggle to top of
customer form'.
2026-09-16 11:47:22 +02:00
a05c1b8ae0 feat(schema): commits collection and project ingest fields 2026-09-16 11:46:57 +02:00
b8cd766c89 feat(git): timing-safe webhook signature verification 2026-09-16 11:45:32 +02:00
ff423fe3ba feat(git): strict conventional-commit parsing 2026-09-16 11:45:15 +02:00
38d3758d2d feat(brand): align default client brand colour with new teal palette 2026-09-16 11:34:51 +02:00
52e6bae17b fix(admin): extract default brand colour to .ts so the colour check stays clean 2026-09-16 11:32:50 +02:00
c2446d85eb feat(admin): data loaders and owner-only route gate 2026-09-16 11:26:37 +02:00
287d70c42c feat(users): active flag, backfilled, enforced at sign-in 2026-09-16 11:26:16 +02:00
ed048c5bb3 feat(auth): generated one-time passwords for new accounts 2026-09-16 11:25:52 +02:00
d1fdc72d29 feat(slug): URL-safe unique slugs for clients and projects 2026-09-16 11:25:36 +02:00
e191b87c80 feat(data): card detail loader scoped by read rules 2026-09-16 10:58:55 +02:00
d4bf5b5bb0 feat(activity): render audit rows as readable sentences 2026-09-16 10:58:16 +02:00
6f2d563b3d feat(time): relative timestamp formatting 2026-09-16 10:57:55 +02:00
153484390f feat(data): board and project summary loaders scoped by read rules 2026-09-16 10:01:21 +02:00