Releases: Ripwords/ReproJs
🚀 Dashboard v0.6.2
🚀 Repro Dashboard v0.6.2 — self-hostable Docker image:
ripwords/reprojs-dashboard:v0.6.2.
🩹 Fixes
- mcp: Point OAuth loginPage at the real /auth/sign-in route (96823c3)
❤️ Contributors
🚀 Dashboard v0.6.1
🚀 Repro Dashboard v0.6.1 — self-hostable Docker image:
ripwords/reprojs-dashboard:v0.6.1.
🩹 Fixes
- dashboard: Correct horizontal bar axis + donut segment slivers (0009331)
❤️ Contributors
🚀 Dashboard v0.6.0
🚀 Repro Dashboard v0.6.0 — self-hostable Docker image:
ripwords/reprojs-dashboard:v0.6.0.
🚀 Enhancements
- mcp: Add MCP_ENABLED + tunable env vars (2a56bb0)
- mcp: Scaffold replay transcript reducer (0efdc09)
- mcp: Build DOM map from FullSnapshot for selector resolution (2c3567c)
- mcp: Emit navigation, coalesced inputs, console.error (26f859f)
- mcp: Cap transcript size with middle truncation (0384931)
- auth: Add requireProjectRoleByUser for non-H3 callers (db1b076)
- mcp: Wire oauth-provider + jwt plugins behind MCP_ENABLED (c3a29ba)
- mcp: Add OAuth consent page + decision endpoint (f8583b6)
- mcp: Add McpToolError + helper (400c570)
- mcp: Add JWT → request context builder (439314e)
- mcp: Add repro_list_projects tool (41239b5)
- mcp: Add repro_get_ticket tool with inline replay transcript (b9e6a8d)
- mcp: Per-request McpServer factory with both tools (f1cc067)
- mcp: Add Streamable HTTP /api/mcp routes (POST/GET/DELETE) (3759a76)
- mcp: Add cursor encode/decode helper for pagination (ef962e7)
- mcp: Add repro_list_tickets with filters + cursor pagination (5f42bf7)
- mcp: Add repro_list_ticket_comments with cursor pagination (68b5e14)
- mcp: Add repro_list_project_members (60e7459)
- mcp: Add repro_get_screenshot tool (106e998)
- mcp: Add repro_get_replay_transcript tool (d5389b9)
- mcp: Add repro_get_replay_raw with 200KB acknowledgeSize cap (7e5577f)
- mcp: Add repro_get_ticket_cookies (opt-in cookies surface) (761f62c)
- mcp: Register Phase 2 tools in McpServer factory (0f219f4)
- db: Add actor_client_id audit column + github_linked event kind (27d1662)
- mcp: Add 4 write tools (update/comment/link/unlink) (eddac03)
- mcp: Register Phase 3 write tools in McpServer factory (89dda29)
- mcp: Add /api/me/mcp-connections list + revoke endpoints (d68b8a7)
- mcp: Add /settings/mcp page (connect snippets + connected apps) (9836a5d)
- mcp: Flip MCP_ENABLED default to true (9483645)
- mcp: Add per-request access check (status + allowlist) (8720976)
- mcp: Add per-user rate limiter to access checker (8261c62)
- mcp: Wire access check into Streamable HTTP routes (a2c3d14)
- mcp: Add RFC 9728 protected-resource metadata endpoint (2a7f509)
- shared: Add volume series to AdminOverviewDTO (c0e3a70)
- dashboard: Add 30-day report volume series to admin overview (9723bd1)
- dashboard: Add insight charts to admin overview (9f50c84)
- dashboard: Add pure pollUntil helper (b954f5b)
🔥 Performance
- mcp: Fold last-used lookup into single grouped query (43c3804)
🩹 Fixes
- mcp: Use env.BETTER_AUTH_URL not request headers for OAuth metadata URL (babb73a)
- mcp: Filter out soft-deleted projects in repro_list_projects (4a117bf)
- mcp: Coerce raw body to Buffer before Uint8Array conversion (1784c96)
- mcp: Correct JWT issuer and consent response parsing (9270e52)
- dashboard: Type BarChart orientation via Orientation enum (437eadf)
- dashboard: Refetch projects list after deleting a project (4b4de3d)
- dashboard: Poll for github issue link before refetching in triage sidebar (3158026)
- dashboard: Abort github-sync poll on triage drawer unmount (eb7533e)
- Use workspace-local node_modules paths in db/auth scripts (3db3926)
- ci: Align db scripts to workspace .bin form; set MCP_ENABLED in ci (0d19c31)
- test: Isolate every SDK test file in its own bun process (d98e510)
💅 Refactors
- triage: Extract applyTicketTriagePatch service function (5ba753b)
- comments: Extract addReportComment service function (4ae056c)
- github: Extract link/unlink service functions (217d4c2)
- comments: Move CreateCommentBody schema to @reprojs/shared (0d14acd)
- dashboard: Harden volume query groupBy and test anchoring (a978fc8)
- dashboard: Clarify chart formatters and declare @unovis/ts dep (615b5cc)
- dashboard: Share projects-list cache key constant and regroup test (3418bfe)
📖 Documentation
- Trim filing-reports guide and add SVG illustrations (97cede5)
- spec: MCP OAuth server design (3c3318d)
- plan: MCP OAuth server — Phase 1 (4635ffd)
- plan: MCP OAuth server — Phase 2 (3829a2b)
- plan: MCP OAuth server — Phase 3 (2b786f4)
- plan: MCP OAuth server — Phase 4 (5493949)
- mcp: Add user guide for connecting AI assistants (564941e)
- mcp: Add self-hosting / operator guide (db85bbe)
- mcp: Add MCP pages to VitePress sidebar (f0627f2)
- plan: MCP OAuth server — Phase 5 (46ad998)
- Spec for admin overview charts + project-delete and github-sync refetch fixes (e8b414d)
- Implementation plan for admin charts + refetch fixes (16d4fd0)
- mcp: Add precise tool reference to the AI assistants guide (30473c4)
🏡 Chore
- mcp: Add @better-auth/oauth-provider + @modelcontextprotocol/sdk (de0e2c0)
- Pin oxlint to 1.59.0 (617cc92)
- db: Regenerate OAuth tables migration after rebase (3c42538)
- dashboard: Add nuxt-charts module (d435c35)
- Gitignore .cursor/ IDE workspace dir (4d2c727)
✅ Tests
- mcp: Integration — full OAuth + tools/call roundtrip (94222c5)
- mcp: Integration tests for Phase 2 read tools (27c5180)
- mcp: Integration tests for Phase 3 write tools (1aecf79)
- mcp: Unfreeze Phase 1 tool-list assertion (a3c0062)
- mcp: Add negative permissions/access integration suite (fbf39bc)
🤖 CI
- Bump pinned bun 1.3.12 -> 1.3.13 (146ec43)
❤️ Contributors
🚀 Dashboard v0.5.2
🚀 Repro Dashboard v0.5.2 — self-hostable Docker image:
ripwords/reprojs-dashboard:v0.5.2.
🚀 Enhancements
- dashboard: Redirect GitHub install to integrations page with toast (b965ccb)
🩹 Fixes
- dashboard: Add space between actor name and event description in activity feed (0e54097)
📖 Documentation
- Add non-technical "Filing a bug report" guide (a5370e3)
❤️ Contributors
🚀 Dashboard v0.5.1
🚀 Repro Dashboard v0.5.1 — self-hostable Docker image:
ripwords/reprojs-dashboard:v0.5.1.
🚀 Enhancements
- expo: AssistiveTouch-style edge-snap drag for the launcher (96e23f0)
- dashboard: Proxy GitHub user-attachment images (b7e4a34)
- dashboard: Redesign report overview tab to Figma spec (8695fd5)
- dashboard: Chat-style comments with paste-to-attach images (d79f674)
🩹 Fixes
- release: Scope each package's CHANGELOG to its own paths (b1bb22c)
- deploy: Dashboard runs drizzle-kit migrate on every start (11bc9b3)
- db: Correct out-of-order when timestamp on migration 0012 (e5a3764)
- dashboard: Show actor/event separator in activity feed (b3d5fbd)
📖 Documentation
- expo: Add expo-document-picker + expo-image-picker to install snippet (d7aad2e)
- site: Add expo-document-picker + expo-image-picker to Expo install guide (02e6e0d)
- Update compat docs (e9c45ba)
🏡 Chore
- release: Expo-v0.3.0 (0dc692a)
❤️ Contributors
📱 Expo v0.3.0 (@reprojs/expo)
📱 Repro Expo SDK — @reprojs/expo@0.3.0 on https://www.npmjs.com/package/@reprojs/expo/v/0.3.0
🚀 Enhancements
- expo: AssistiveTouch-style edge-snap drag for the launcher (96e23f0)
🩹 Fixes
- release: Scope each package's CHANGELOG to its own paths (b1bb22c)
📖 Documentation
- expo: Add expo-document-picker + expo-image-picker to install snippet (d7aad2e)
🏡 Chore
❤️ Contributors
🚀 Dashboard v0.5.0
🚀 Repro Dashboard v0.5.0 — self-hostable Docker image:
ripwords/reprojs-dashboard:v0.5.0.
🚀 Enhancements
- sdk-utils: Add canonical theme tokens shared by web and expo SDKs (989d8e3)
- sdk-utils: Add Attachment shape and validateAttachments helper (a6c8159)
- ui: Add themeToCssVars helper that emits flame/mist tokens as CSS vars (1a2e692)
- ui: Inject flame/mist CSS vars into shadow root at mount (91a883b)
- ui: Add PrimaryButton, SecondaryButton, FieldLabel, StepIndicator, WizardHeader (61404b5)
- ui: Add StepDetails (replaces step-describe in 3-step wizard) (1077c55)
- ui: Add StepReview with 'Included in this report' summary (da15040)
- ui: Replace 2-step wizard with annotate → details → review flow (25c916f)
- db: Add report_attachments.filename and user-file kind (9fd59b1)
- env: Add user-file intake size budgets (01c0f9e)
- server: Add sanitizeFilename + rollbackPuts helpers (f4bc566)
- intake: Accept attachment[N] parts as user-file attachments (bceae0b)
- ui: Add AttachmentList with hybrid thumbnail + chip rendering (b8070d6)
- sdk-web: Add user attachments end-to-end (46af0bb)
- shared: Add user-file kind and filename field to AttachmentDTO (dd715e5)
- dashboard: Include user-file filename in report detail response (4242d52)
- dashboard: Add AttachmentsTab for user-file attachments (f046de2)
- dashboard: Expose user-file attachments tab in report drawer (125760a)
- expo: Add pickFiles wrapper over expo-document-picker (d664505)
- expo: Add AttachmentList for the mobile wizard (b2162d3)
- expo: Add attachments to the wizard's Details step (9e64cea)
- expo: Submit user-file attachments as attachment[N] multipart parts (716d4b6)
- ui: Side-by-side details layout + paste-to-attach screenshots (4452729)
- intake: Virus-scan user attachments via ClamAV sidecar (53f97a3)
- ui: Inflight toast + clamav scan visibility (23b9349)
- dashboard: Show clamav scan report on user-file attachments (368d63b)
- expo: Pick attachments from Photos / Files / Clipboard (0cc0bf5)
- extension: Retheme popup + options to flame/mist tokens (2708f72)
- deploy: Add clamav sidecar to production compose.yaml (3690065)
🩹 Fixes
- dashboard: Reject ?id= when authed via signed token (2485200)
- docker: Pin clamav sidecar to linux/amd64 (7971214)
- expo: Make clipboard paste actually work (641faad)
- intake: Scan user-files BEFORE inserting the report row (67f0dbf)
- ci: Isolate SDK tests per-package to prevent globalThis pollution (d829cc2)
- build: Bump expo:build heap to 6GB (dadcb27)
💅 Refactors
- ui: Switch styles to CSS custom properties from sdk-utils tokens (ede8899)
- expo: Re-export shared theme tokens from sdk-utils (9ddc528)
📖 Documentation
- specs: Add SDK wizard redesign + user attachments design (d8a9b2e)
- plans: Add SDK wizard redesign + user attachments implementation plan (6327f12)
🏡 Chore
- Refresh bun.lock after clamav + expo peer-dep churn (50c4cec)
- release: Sdk-v0.4.0 (5868b7e)
- release: Expo-v0.2.0 (df0f75e)
- release: Extension-v0.1.2 (693a0a3)
❤️ Contributors
📦 SDK v0.4.0 (@reprojs/core)
📦 Repro SDK —
@reprojs/core@0.4.0on npm
🚀 Enhancements
- shared: Add AdminOverviewDTO for admin overview dashboard (f76efdb)
- api: GET /api/admin/overview aggregates across all projects (b17e400)
- ui: /admin overview page with tiles, activity, per-project list (8719c9b)
- ui: Add Overview to admin sidebar section (5603c5c)
- shared: Add 'manager' to ProjectRole enum (2996a41)
- perms: Slot manager between viewer and developer in rank (c355fdf)
- api: Lower triage-endpoint minimum from developer to manager (bc76e5e)
- ui: Surface manager role in members page and invite default (4bd7dc1)
- shared: Add source discriminator and mobile device fields to ReportContext/SystemInfo (2f6effc)
- shared: Add source and devicePlatform to ReportSummaryDTO (95ed429)
- dashboard: Add source, device_platform, idempotency_key to reports (d863a1a)
- dashboard: Idempotency key + source/device persistence in intake (f98d672)
- dashboard: Populate source and devicePlatform in report DTOs (36c5774)
- dashboard: Source filter and facets on reports list (50ac717)
- dashboard: Inbox query supports source facet (fe4fde3)
- dashboard: Source facet in the inbox sidebar (b0d6c55)
- dashboard: Platform pill in the inbox row (8c9cf5f)
- dashboard: Mobile-aware detail drawer (hide replay, show device card) (119a8f8)
- expo: Config normalizer and internal context shape (50e2018)
- expo: Console collector with sentinel-guarded patching (9da4569)
- expo: Fetch network collector with header redaction (13b44f1)
- expo: System info collector assembling mobile device context (b139522)
- expo: Persistent queue storage with size + count caps (beb368a)
- expo: Intake client with idempotency-key header (5f89742)
- expo: Queue flusher and netinfo connectivity listener (921c4e3)
- expo: View-shot capture and SVG-based annotation flatten (46c1073)
- expo: Annotation store and gesture-based canvas (pen tool v1) (715e63f)
- expo: Wizard sheet with form, annotate, and submit steps (a8c898c)
- expo: Provider, useRepro hook, launcher, and module singleton (2c84d23)
- expo: Mobile-polished annotation UX — icons, color+stroke pickers, live previews, text input (6551cc2)
- expo: Attach logs (console + network + breadcrumbs) to intake (2a89ada)
- expo: Redesign wizard UI + match dashboard flame palette + fix annotation submission (9688803)
- expo: Draggable launcher snaps to nearest of 4 corners with persisted choice (674c638)
- expo: Silent-disable when projectKey or intakeUrl is empty (1ae196a)
- ✨ Add two way sync for github issue labels (89d3d9e)
- webhook: Add size cap helper for github webhooks (8886440)
- db: Add github_webhook_deliveries table for replay protection (f210471)
- webhook: Add delivery dedupe for replay protection (f91987b)
- webhook: Check installation id against known integrations (f1ad47e)
- webhook: Enforce size cap, replay dedupe, installation allowlist (3865559)
- db: Add user_identities table (github provider) (63cd11d)
- db: Add github_write_locks table for loop avoidance (e16f5c5)
- db: Add report_comments table (not yet wired) (80cb4d4)
- db: Add milestone, sync timestamps, and toggle columns (964601e)
- db: Extend report_event_kind enum for assignees/comments/milestone (fcc4a8b)
- identities: Signed oauth state helper for link flow (e416b4d)
- identities: Resolver + upsert + unlink helpers (c5796b2)
- identities: GET /api/me/identities (3d1211b)
- identities: POST start endpoint generates signed oauth url (dddb5f9)
- identities: Callback exchanges code and upserts identity (2d1527e)
- identities: DELETE endpoint unlinks the identity (855bcc5)
- identities: Backfill user_identities from better-auth account rows (c511746)
- identities: /settings/identities page with connect/disconnect (c52520f)
- db: Report_assignees schema + backfill migration (unapplied) (44299e0)
- shared: ReportSummaryDTO.assignees (array); TriagePatchInput.assigneeIds (572ae66)
- github-cache: Generic per-repo cache with TTL + SWR + single-flight (4ad1071)
- github-adapter: List labels, assignees, milestones (367f0aa)
- api: GET repo labels for a project (2e615b4)
- api: GET assignable users with linkedUser resolution (fb19d2c)
- api: GET repo milestones (091d610)
- webhook: Invalidate picker caches on label/milestone/member events (69cfba2)
- ui: Composable exposing github integration state per project (fbc29c3)
- shared: Add milestone + githubAssigneeLogins to reports DTOs (4c64078)
- triage: PATCH + read endpoints support milestone + github-only assignees (a278a30)
- ui: Labels picker backed by repo label set (9374bcc)
- ui: Assignees picker — dashboard-linked and github-only in one list (52269e7)
- ui: Milestone picker (db4f968)
- triage: Wire live pickers into drawer for linked projects (56848b0)
- github-adapter: Issue-write helpers (title, milestone, assignees, state) (0e3f571)
- github-diff: Signature + assignee-diff helpers for write-locks (09da9bc)
- write-locks: Record/consume/cleanup helpers (c94dd5d)
- tasks: Daily cleanup of expired github_write_locks (57190e1)
- reconcile: Diff + push title, labels, state, assignees, milestone with write-locks (91e4768)
- triage: Enqueue github sync on qualifying PATCH when push_on_edit=true (a673712)
- webhook: Assigned/milestoned/edited branches + write-lock echo skip (9cfddd6)
- integrations: PushOnEdit UI toggle for GitHub integration (dfd32b2)
- integration-api: Expose autoCreateOnIntake toggle ([1574a7d](https://github.com/Rip...
🧩 Tester Extension v0.1.2
🧩 Repro tester Chrome extension v0.1.2 — zip bundle attached below; also published to the Chrome Web Store.
🚀 Enhancements
- shared: Add AdminOverviewDTO for admin overview dashboard (f76efdb)
- api: GET /api/admin/overview aggregates across all projects (b17e400)
- ui: /admin overview page with tiles, activity, per-project list (8719c9b)
- ui: Add Overview to admin sidebar section (5603c5c)
- shared: Add 'manager' to ProjectRole enum (2996a41)
- perms: Slot manager between viewer and developer in rank (c355fdf)
- api: Lower triage-endpoint minimum from developer to manager (bc76e5e)
- ui: Surface manager role in members page and invite default (4bd7dc1)
- shared: Add source discriminator and mobile device fields to ReportContext/SystemInfo (2f6effc)
- shared: Add source and devicePlatform to ReportSummaryDTO (95ed429)
- dashboard: Add source, device_platform, idempotency_key to reports (d863a1a)
- dashboard: Idempotency key + source/device persistence in intake (f98d672)
- dashboard: Populate source and devicePlatform in report DTOs (36c5774)
- dashboard: Source filter and facets on reports list (50ac717)
- dashboard: Inbox query supports source facet (fe4fde3)
- dashboard: Source facet in the inbox sidebar (b0d6c55)
- dashboard: Platform pill in the inbox row (8c9cf5f)
- dashboard: Mobile-aware detail drawer (hide replay, show device card) (119a8f8)
- expo: Config normalizer and internal context shape (50e2018)
- expo: Console collector with sentinel-guarded patching (9da4569)
- expo: Fetch network collector with header redaction (13b44f1)
- expo: System info collector assembling mobile device context (b139522)
- expo: Persistent queue storage with size + count caps (beb368a)
- expo: Intake client with idempotency-key header (5f89742)
- expo: Queue flusher and netinfo connectivity listener (921c4e3)
- expo: View-shot capture and SVG-based annotation flatten (46c1073)
- expo: Annotation store and gesture-based canvas (pen tool v1) (715e63f)
- expo: Wizard sheet with form, annotate, and submit steps (a8c898c)
- expo: Provider, useRepro hook, launcher, and module singleton (2c84d23)
- expo: Mobile-polished annotation UX — icons, color+stroke pickers, live previews, text input (6551cc2)
- expo: Attach logs (console + network + breadcrumbs) to intake (2a89ada)
- expo: Redesign wizard UI + match dashboard flame palette + fix annotation submission (9688803)
- expo: Draggable launcher snaps to nearest of 4 corners with persisted choice (674c638)
- expo: Silent-disable when projectKey or intakeUrl is empty (1ae196a)
- ✨ Add two way sync for github issue labels (89d3d9e)
- webhook: Add size cap helper for github webhooks (8886440)
- db: Add github_webhook_deliveries table for replay protection (f210471)
- webhook: Add delivery dedupe for replay protection (f91987b)
- webhook: Check installation id against known integrations (f1ad47e)
- webhook: Enforce size cap, replay dedupe, installation allowlist (3865559)
- db: Add user_identities table (github provider) (63cd11d)
- db: Add github_write_locks table for loop avoidance (e16f5c5)
- db: Add report_comments table (not yet wired) (80cb4d4)
- db: Add milestone, sync timestamps, and toggle columns (964601e)
- db: Extend report_event_kind enum for assignees/comments/milestone (fcc4a8b)
- identities: Signed oauth state helper for link flow (e416b4d)
- identities: Resolver + upsert + unlink helpers (c5796b2)
- identities: GET /api/me/identities (3d1211b)
- identities: POST start endpoint generates signed oauth url (dddb5f9)
- identities: Callback exchanges code and upserts identity (2d1527e)
- identities: DELETE endpoint unlinks the identity (855bcc5)
- identities: Backfill user_identities from better-auth account rows (c511746)
- identities: /settings/identities page with connect/disconnect (c52520f)
- db: Report_assignees schema + backfill migration (unapplied) (44299e0)
- shared: ReportSummaryDTO.assignees (array); TriagePatchInput.assigneeIds (572ae66)
- github-cache: Generic per-repo cache with TTL + SWR + single-flight (4ad1071)
- github-adapter: List labels, assignees, milestones (367f0aa)
- api: GET repo labels for a project (2e615b4)
- api: GET assignable users with linkedUser resolution (fb19d2c)
- api: GET repo milestones (091d610)
- webhook: Invalidate picker caches on label/milestone/member events (69cfba2)
- ui: Composable exposing github integration state per project (fbc29c3)
- shared: Add milestone + githubAssigneeLogins to reports DTOs (4c64078)
- triage: PATCH + read endpoints support milestone + github-only assignees (a278a30)
- ui: Labels picker backed by repo label set (9374bcc)
- ui: Assignees picker — dashboard-linked and github-only in one list (52269e7)
- ui: Milestone picker (db4f968)
- triage: Wire live pickers into drawer for linked projects (56848b0)
- github-adapter: Issue-write helpers (title, milestone, assignees, state) (0e3f571)
- github-diff: Signature + assignee-diff helpers for write-locks (09da9bc)
- write-locks: Record/consume/cleanup helpers (c94dd5d)
- tasks: Daily cleanup of expired github_write_locks (57190e1)
- reconcile: Diff + push title, labels, state, assignees, milestone with write-locks (91e4768)
- triage: Enqueue github sync on qualifying PATCH when push_on_edit=true (a673712)
- webhook: Assigned/milestoned/edited branches + write-lock echo skip (9cfddd6)
- integrations: PushOnEdit UI toggle for GitHub integration (dfd32b2)
- integration-api: Expose autoCreateOnIntake toggle ([1574a7d](...
📱 Expo v0.2.0 (@reprojs/expo)
📱 Repro Expo SDK — @reprojs/expo@0.2.0 on https://www.npmjs.com/package/@reprojs/expo/v/0.2.0
🚀 Enhancements
- ✨ Add two way sync for github issue labels (89d3d9e)
- webhook: Add size cap helper for github webhooks (8886440)
- db: Add github_webhook_deliveries table for replay protection (f210471)
- webhook: Add delivery dedupe for replay protection (f91987b)
- webhook: Check installation id against known integrations (f1ad47e)
- webhook: Enforce size cap, replay dedupe, installation allowlist (3865559)
- db: Add user_identities table (github provider) (63cd11d)
- db: Add github_write_locks table for loop avoidance (e16f5c5)
- db: Add report_comments table (not yet wired) (80cb4d4)
- db: Add milestone, sync timestamps, and toggle columns (964601e)
- db: Extend report_event_kind enum for assignees/comments/milestone (fcc4a8b)
- identities: Signed oauth state helper for link flow (e416b4d)
- identities: Resolver + upsert + unlink helpers (c5796b2)
- identities: GET /api/me/identities (3d1211b)
- identities: POST start endpoint generates signed oauth url (dddb5f9)
- identities: Callback exchanges code and upserts identity (2d1527e)
- identities: DELETE endpoint unlinks the identity (855bcc5)
- identities: Backfill user_identities from better-auth account rows (c511746)
- identities: /settings/identities page with connect/disconnect (c52520f)
- db: Report_assignees schema + backfill migration (unapplied) (44299e0)
- shared: ReportSummaryDTO.assignees (array); TriagePatchInput.assigneeIds (572ae66)
- github-cache: Generic per-repo cache with TTL + SWR + single-flight (4ad1071)
- github-adapter: List labels, assignees, milestones (367f0aa)
- api: GET repo labels for a project (2e615b4)
- api: GET assignable users with linkedUser resolution (fb19d2c)
- api: GET repo milestones (091d610)
- webhook: Invalidate picker caches on label/milestone/member events (69cfba2)
- ui: Composable exposing github integration state per project (fbc29c3)
- shared: Add milestone + githubAssigneeLogins to reports DTOs (4c64078)
- triage: PATCH + read endpoints support milestone + github-only assignees (a278a30)
- ui: Labels picker backed by repo label set (9374bcc)
- ui: Assignees picker — dashboard-linked and github-only in one list (52269e7)
- ui: Milestone picker (db4f968)
- triage: Wire live pickers into drawer for linked projects (56848b0)
- github-adapter: Issue-write helpers (title, milestone, assignees, state) (0e3f571)
- github-diff: Signature + assignee-diff helpers for write-locks (09da9bc)
- write-locks: Record/consume/cleanup helpers (c94dd5d)
- tasks: Daily cleanup of expired github_write_locks (57190e1)
- reconcile: Diff + push title, labels, state, assignees, milestone with write-locks (91e4768)
- triage: Enqueue github sync on qualifying PATCH when push_on_edit=true (a673712)
- webhook: Assigned/milestoned/edited branches + write-lock echo skip (9cfddd6)
- integrations: PushOnEdit UI toggle for GitHub integration (dfd32b2)
- integration-api: Expose autoCreateOnIntake toggle (1574a7d)
- integration-ui: AutoCreateOnIntake toggle (51fc8b7)
- intake: Auto-create github issue on new report when toggle is on (30b7674)
- github-adapter: Issue-comment wrappers (create/update/delete/list) (f395f3d)
- comments: Bot-footer serialize/strip/detect helpers (9364473)
- github-diff: SignCommentUpsert + signCommentDelete (e664a1d)
- sync-jobs: Carry comment-sync payloads (021a0f7)
- api: GET/POST/PATCH/DELETE report comment endpoints (76e6fb1)
- shared: Comment DTOs (2485a18)
- reconcile: Handle comment_upsert and comment_delete job kinds + backfill on first link (7514d3c)
- webhook: Issue_comment branches with write-lock echo skip (2ce422e)
- dashboard: Add marked dependency and use-markdown composable (aa39cf9)
- dashboard: Add Comments tab to report detail page (1b8a7a2)
- dashboard: Live report stream via SSE with memory-safe lifecycle (92e6a2f)
- security: XSS-safe markdown rendering with DOMPurify (d43df70)
- dashboard: Render reporter description in overview tab (4f621a3)
- sync: In-process trigger + shared outbox runner (4b59420)
- github: Create custom labels in linked repo from the picker (18ad810)
- sdk-utils: Add canonical theme tokens shared by web and expo SDKs (989d8e3)
- sdk-utils: Add Attachment shape and validateAttachments helper (a6c8159)
- ui: Add themeToCssVars helper that emits flame/mist tokens as CSS vars (1a2e692)
- ui: Inject flame/mist CSS vars into shadow root at mount (91a883b)
- ui: Add PrimaryButton, SecondaryButton, FieldLabel, StepIndicator, WizardHeader (61404b5)
- ui: Add StepDetails (replaces step-describe in 3-step wizard) (1077c55)
- ui: Add StepReview with 'Included in this report' summary (da15040)
- ui: Replace 2-step wizard with annotate → details → review flow (25c916f)
- db: Add report_attachments.filename and user-file kind (9fd59b1)
- env: Add user-file intake size budgets (01c0f9e)
- server: Add sanitizeFilename + rollbackPuts helpers (f4bc566)
- intake: Accept attachment[N] parts as user-file attachments (bceae0b)
- ui: Add AttachmentList with hybrid thumbnail + chip rendering (b8070d6)
- sdk-web: Add user attachments end-to-end (46af0bb)
- shared: Add user-file kind and filename field to AttachmentDTO (dd715e5)
- dashboard: Include user-file filename in report detail response (4242d52)
- dashboard: Add AttachmentsTab for user-file attachments (f046de2)
- dashboard: Expose user-file attachments tab in report ...