Releases: prpande/PRism
Release list
PRism Desktop v0.6.0
This release is headlined by a big step forward for the PR-detail experience: you can now merge a ready pull request straight from the action bar, review a unified activity timeline on the Overview tab, and spot which files have open or resolved comments at a glance from the file tree. The inbox now rehydrates instantly on launch from a cached snapshot instead of showing an empty screen, and mergeability/readiness indicators resolve themselves within seconds instead of getting stuck. Underneath, a large batch of hardening and performance work makes the app more resilient to race conditions and noticeably snappier when scrolling diffs and the inbox. Here's the detail. 🚀
🚀 New features
- Merge from PR-detail — you can now merge a ready, mergeable pull request directly from the action bar, choosing a merge method when more than one is allowed. (#656)
- Unified activity timeline — the Overview tab now shows a single newest-first feed of comments, reviews, pushes, and lifecycle events, with consecutive commits collapsed into an expandable group and the feed live-updating as reviewers act. (#692)
- Per-file comment indicator — the Files tab now shows a glyph next to any file with review comments, filled for unresolved threads and outlined once everything's resolved, with a hover tooltip giving the counts. (#691)
- Instant inbox on launch — the inbox and activity rail now load immediately from your last-known snapshot on startup instead of showing a blank screen, refreshing quietly in the background. (#686)
✨ Improvements
- Mergeability stops getting stuck — the PR-detail merge panel and inbox readiness badge now resolve on their own within a couple of seconds instead of staying frozen on "still being calculated" until you refresh. (#658)
- Full-length AI rationale — Hotspots no longer cuts off long AI-generated explanations mid-sentence; the full text now renders. (#699)
- Smoother diff scrolling — the diff view now skips re-rendering unchanged rows during scrolling, thread toggles, and composer actions, keeping large diffs responsive. (#689)
- Snappier inbox — inbox rows now skip re-rendering when unrelated parts of the page update, keeping large inboxes responsive during live updates. (#709)
🐛 Fixes
- The Checks tab's detail pane now stays in view when scrolling through a long list of checks, and skipped checks now sort to the end instead of ahead of passing ones. (#700)
- The inbox's refreshing indicator now stays visible for the whole background revalidation after a cold start, instead of disappearing while data is still loading. (#694)
- Running
run.ps1 --no-browser(with or without other flags) now launches correctly instead of failing with a parameter-binding error. (#707) - The background PR poller no longer risks failing for everyone with many open PRs, by matching the inbox's safer batch size for readiness queries. (#683)
🔧 Under the hood
- Hardens several frontend hooks against double-clicks, hung requests, and abandoned fetches so rapid actions and page navigation can't leave the UI stuck or duplicate a submitted comment. (#660)
- Closes several session and validation race conditions on the backend, including protecting draft discards and comment posts from in-flight submits. (#661)
- Ensures the submit pipeline always posts your latest draft, reply, or summary edit to GitHub even if it changed right before submission. (#677)
- Hardens crash recovery, the desktop app's background process, and CI security (pinned installer checksum and a stricter author gate on automated workflows). (#662)
- Caches app state in memory to avoid repeatedly re-reading and re-parsing it from disk during normal use. (#679)
- Streamlines how the inbox applies AI-generated enrichments internally, reducing unnecessary CPU work. (#678)
- Consolidates duplicated GitHub data-fetching code paths in the backend to reduce drift between them. (#680)
- Shares one GitHub batch-query implementation across the inbox and active-PR polling instead of two separately maintained copies. (#682)
- Consolidates duplicated modal focus-trapping, dropdown-dismissal, and banner styling code in the frontend into shared, reusable pieces. (#702)
- Modal backdrops and shadows now consistently use the app's theme-aware scrim and shadow tokens, giving light and dark mode a more polished, consistent look. (#706)
- Breaks the large DiffPane component into smaller, focused files without changing its behavior or appearance. (#703)
- Continues breaking up the Files tab into smaller hooks, which also lets the diff view's rendering optimizations actually kick in. (#710)
- Finishes splitting up the PR header into layout and submit-flow pieces, completing the PR-detail decomposition effort. (#711)
- Updates the checkout GitHub Action to its latest major version. (#696)
- Updates the release-publishing GitHub Action to its latest version. (#695)
Full Changelog: v0.5.1...v0.6.0
PRism Desktop v0.5.1
This release lands the long-running AI feature branch on main and turns it into something you actually control: an AI Settings tab where you can cap summary length, flip individual AI features on or off, and see a full usage-and-spend breakdown, plus a first-run onboarding dialog that walks you through picking an AI mode. Visually, AI surfaces get a new animated Prism glyph replacing the old sparkle, draft PRs are now clearly marked, and the diff view gets collapsible comment threads, fixed gutter numbers, and a wider, more readable layout. Under the hood, a token-accounting bug that badly undercounted AI usage is fixed, alongside several backend robustness hardening passes. Here's the detail. 🔷
🚀 New features
- Draft PR badge — draft pull requests are now clearly marked with an info-blue indicator on both the inbox row and the PR-detail header, sourced directly from GitHub's draft flag. (#535)
- AI usage & spend tracker — a new AI Usage view under Settings shows token totals, estimated cost, cache hit-rate, and a by-feature and by-PR breakdown across 24h/7d/30d/all windows. (#547)
- Per-feature AI toggles — independently turn Summary, File focus, Hunk annotations, and Inbox enrichment on or off from a new collapsible accordion in AI Settings. (#545)
- First-run AI onboarding — a fresh profile now greets you with a dialog to pick your AI mode (Off/Preview/Live), with Live requiring you to review and accept the data-sharing disclosure first. (#549)
- Summary length cap — a new stepper in AI Settings lets you set how long AI-generated PR summaries should be (500–5000 characters), and re-opening a summary flags it as out of date if the cap has since changed. (#533)
- Collapsible comment threads — inline review comment threads in the diff view collapse to a single line by default when resolved, expandable with one click to see the full conversation. (#574)
✨ Improvements
- Authored-by-me leads the inbox — your own open PRs now surface first by default, and a PR you authored no longer also shows up duplicated under Review requested, Needs re-review, or Mentioned. (#534)
- AI thinking indicator everywhere — the working/idle AI cue now appears consistently across summaries, file tree, Hotspots, inbox category chips, and draft suggestions, so you can always tell when AI is still processing versus done. (#551)
- New Prism AI glyph — the AI sparkle icon and its spin/pulse working animation are replaced with a custom 3D Prism-pyramid mark that tracks your chosen accent color, refined further with a follow-up weight and polish pass. (#556)
- Polished consent dialog — the "Enable Live AI" data-sharing consent modal gets a proper visual treatment with a clearer warning callout, styled buttons, and an in-progress spinner while your choice is submitted. (#539)
- Wider PR-detail columns — the Overview and Hotspots tabs now scale with your viewport instead of staying pinned to a narrow fixed width, giving noticeably less wasted margin on larger screens. (#565)
- Consistent AI summary header — the summary card header now lays out identically in Preview and Live mode, with the Sample badge properly centered. (#562)
- Diff comments match Overview styling — inline review comments in the Files/diff view now render in the same sans-serif font and centered, readable-width column as comments on the Overview tab, instead of looking cramped and monospaced. (#568)
- Cleaner AI preview chrome — the "SAMPLE" region badges above the inbox, Activity rail, and file tree are removed as visual clutter, while the inline sample markers next to actual AI output stay put. (#540)
🐛 Fixes
- Added files in the diff view now show their line numbers at rest instead of only appearing on hover. (#559)
- Switching AI mode from Live to Preview no longer leaves every eligible inbox row stuck showing the "AI working" glyph forever. (#555)
- AI token usage and cost tracking now account for Claude's cache-creation tokens, correcting a bug that had been under-reporting input token counts by orders of magnitude. (#529)
🔧 Under the hood
- Merges the long-lived experimental AI branch back into main, consolidating months of AI feature work with recent main-line changes onto a single branch going forward. (#552)
- Backend hardening: a faulty event subscriber, config-change handler, or reconcile pass can no longer take down unrelated processing, and lockfile/config internals get additional safety nets and typed error handling. (#567)
Full Changelog: v0.4.0...v0.5.1
PRism Desktop v0.5.0
What's Changed
- feat(ai): v2 P0 PR1 — Claude Code LLM provider substrate (dark) by @prpande in #218
- docs(ai): provider-neutral wording in LlmResult/TokenUsageRecord by @prpande in #224
- chore: merge main into V2 (#133 inbox group-by-repo + #228 port validation) by @prpande in #229
- Merge main into V2 by @prpande in #247
- v2 AI P0 PR2a: capability-model core (AiMode tri-state, ui.ai.mode config + migration, tri-state selector) by @prpande in #242
- v2 AI P0 PR2b: capability-model wiring (Tasks 5-12) by @prpande in #250
- chore: merge main into V2 by @prpande in #265
- feat(ai): PR3a — FE tri-state ui.aiMode migration + define-once SampleBadge by @prpande in #293
- Merge main into V2 (sync) by @prpande in #342
- Sync: merge main into V2 by @prpande in #384
- feat(ai): P1 First-Light - live PR summarizer + egress-consent gating by @prpande in #388
- docs(ai): AI-roadmap issue-tracking design + P0-1b backlog stub by @prpande in #424
- feat: base-rebase freshness — re-key summary cache + Regenerate (#374) by @prpande in #458
- docs(ai): V2 AI effort orientation for cross-machine context by @prpande in #459
- chore: merge main into V2 by @prpande in #461
- feat(ai): v2 P1-2 file-focus ranker + Hotspots tab by @prpande in #472
- feat(ai): streaming LLM provider contracts + dark Noop (P0-1b Slice 1) (#404) by @prpande in #480
- feat(ai): Claude Code stream-json streaming provider (P0-1b Slice 2, #478) by @prpande in #483
- feat(ai): #414 hunk annotator keystone (real backend + D111 gate) by @prpande in #482
- feat(streaming): claude --resume clean-end probe + ResumeSessionId contract (#479) by @prpande in #494
- feat(ai): #484 surface AI seam failures (503/timeout) with retry by @prpande in #495
- feat(ai-settings): AI Settings tab — Phase 1 (timeout + cap + #484 copy) by @prpande in #502
- fix(ai-preview): make Preview placeholder summary PR-specific (#464) by @prpande in #503
- fix(desktop): show PRism dock icon + name on macOS by @prpande in #504
- fix(files-tab): move AI focus dot to a fixed column so long names don't hide it (#492) by @prpande in #506
- feat(ai-marker): universal AI-content marker across all AI surfaces (#489) by @prpande in #511
- feat(inbox): LLM kind-of-change category chip on inbox rows (#410) by @prpande in #515
- feat(ai): render markdown across AI surfaces + Hotspots accordion (#465, #488) by @prpande in #518
- fix(pr-detail): rehydrate evicted snapshot for whole-file view (#510) by @prpande in #519
- perf(inbox): activity-rail parallel cold-load fetch + stale-while-revalidate (#507, #359) by @prpande in #521
- feat(hotspots): headline-led rows, signal-bars glyph, single card, Diff pill (#520) by @prpande in #523
- feat(pr-detail): surface the viewer's prior review on the review button (#512) by @prpande in #528
- fix(ai): account for claude-code cache-creation input tokens (#379) by @prpande in #529
- feat(ai): configurable summary length cap (#525) by @prpande in #533
- feat(inbox): lead with "Authored by me" and dedup own PRs from other sections by @prpande in #534
- feat(#491): polish the Enable Live AI egress-consent modal chrome by @prpande in #539
- feat(#501): draft PR marker on inbox row + PR-detail header (info-blue) by @prpande in #535
- refactor(ai): remove region SAMPLE badges from inbox/rail/file-tree (#463) by @prpande in #540
- feat(ai): AI usage & spend tracker — backend rollup + endpoint (#517, PR 1/2) by @prpande in #541
- feat(ai): holistic AI "thinking" indicator — Slice 1 (#508) by @prpande in #543
- feat(ai): per-feature AI on/off toggles (#536) by @prpande in #545
- feat(ai): user-facing AI usage & spend view — Phase C frontend (#517) by @prpande in #547
- feat(ai): first-run AI onboarding overlay (#485) by @prpande in #549
- feat(ai): AI thinking indicator Slice 2 — Hotspots/inbox/draft cues + inbox invalidation (#508, #548) by @prpande in #551
- Merge V2 (AI feature work) into main — unify on a single main branch by @prpande in #552
- feat(ai-marker): replace working-glow with Y-axis spin + brightness pulse by @prpande in #553
- fix(inbox): announce synchronous AI-enrichment refill on a mode change (#508/#548) by @prpande in #555
- feat(ai-glyph): replace AI sparkle + thinking animation with the Prism-pyramid kit by @prpande in #556
- feat(ai-glyph): fit-and-finish pass on the AI Prism glyph and AI modals by @prpande in #561
- fix(diff): render gutter line numbers for all files (#554) by @prpande in #559
- fix(ai-summary): unify Preview/Live header layout + align the Sample badge by @prpande in #562
Full Changelog: v0.4.2...v0.5.0
PRism Desktop v0.4.2
What's Changed
- refactor(#319): shared Endpoints seam + status-number alignment + 400 fix by @prpande in #387
- test(e2e): extract setupBaseRoutes for the 3 constant read-side route stubs (#332 slice 3) by @prpande in #391
- fix(desktop): harden sidecar startup/shutdown lifecycle (#336) by @prpande in #394
- test(e2e): unify mocked-mode preferences onto the canonical fixture by @prpande in #396
- fix(#392): surface posted comments after review submit by @prpande in #395
- feat(#335): CI hardening — desktop CI tier, SHA-pinned actions, toolchain dedup by @prpande in #398
- feat(composer): restore composer detailing + fix unified-mode overflow (#390) by @prpande in #402
- chore(deps): bump actions/checkout from 6.0.2 to 6.0.3 by @dependabot[bot] in #426
- test(github): unify GitHubReviewService construction onto a shared factory by @prpande in #425
- test(#334): consolidate dual-location frontend tests + migrate backend test doubles by @prpande in #431
- test(#334): land stranded Copilot fixes from #431 (test isolation + fake contract) by @prpande in #435
- test(web): consolidate duplicated test-double classes in Web.Tests (#332) by @prpande in #434
- fix(desktop): run launcher under Windows PowerShell 5.1 and add -Clean reset by @prpande in #436
- feat(header): add nav-bar feedback entry point (#430) by @prpande in #440
- test: consolidate Web.Tests auth-client + temp-dir construction (#332 slice 6b) by @prpande in #441
- ci(claude): drop bot-triggered review events from Claude Code workflow by @prpande in #444
- fix(header): use useEffectiveLocation for cluster modal background (#430 follow-up) by @prpande in #443
- fix(frontend): align contract/correctness drift — preferences, drawer, error codes (#330) by @prpande in #445
- fix(cheatsheet): drop phantom n/p/c rows, add real d + preview shortcuts (#330) by @prpande in #448
- fix(auth): no-store on cookie-carrying index.html to fix cold-start stale-session 401 (#433) by @prpande in #449
- fix(cheatsheet): recover stranded centering commit from #448 by @prpande in #452
- Restore macOS paste/select-all support in desktop token input by @Copilot in #454
- Eliminate manual-reload banners where non-destructive: PR-detail comment reply + inbox auto-refresh (#450) by @prpande in #456
- refactor(github): decompose GitHubReviewService — PR1 parsers + auth (#321) by @prpande in #460
- fix(inbox): relabel iter→commit count + add files-changed (#357) by @prpande in #462
- refactor(github): split IReviewSubmitter into GitHubReviewSubmitter — PR2 (#321) by @prpande in #467
- feat(#349): replace native dropdowns with a themed Select component by @prpande in https://github.com//pull/469 feat(inbox): default the activity rail ON (#439) by @prpande in https://github.com//pull/471 Files tab: navigate changes in whole-file mode — minimap rail + prev/next controls (#486) by @prpande in https://github.com//pull/499 test(diff-nav): recover stranded cold-start timeout for change-nav interaction spec (#486) by @prpande in https://github.com//pull/500 New Contributors @Copilot made their first contribution in https://github.com//pull/454 Full Changelog: https://github.com/prpande/PRism/compare/v0.4.0...v0.4.2
PRism Desktop v0.4.0
What's Changed
- fix(#286): don't classify empty combined-status pending as CI pending by @prpande in #298
- fix(#299): inline drafts appear in Drafts tab live; drop redundant line-switch modal by @prpande in #301
- feat(#275): customizable inbox section order by @prpande in #303
- feat(#264): GitHub-parity leading status glyphs — CI indicator + PR-state icon by @prpande in #304
- fix(#289,#290): nav-bar polish — crisp light edge + accent-glow icon hover by @prpande in #307
- feat(#287): inline comment redesign — shared CommentCard, framed composer, commented-line highlight (visual) by @prpande in #308
- feat(#283): default AI preview ON + decouple activity rail by @prpande in #309
- feat(#302): decouple single-comment posting from review submission by @prpande in #314
- feat(#137): real received_events activity rail (Phase 1) by @prpande in #313
- Inbox cohesion: toolbar card, two-layout rail gate, sort restyle (#300) by @prpande in #333
- feat(#219): toggle to turn Inbox repo-grouping on/off by @prpande in #339
- test(#300): regen win32 settings-modal-visual baselines by @prpande in #340
- feat(#311): manual Refresh button for the Inbox by @prpande in #341
- feat(#137): Activity rail Phase 2 — notifications merge + Watching panel + configurable bots by @prpande in #343
- Desktop cold-start: R2R + startup instrumentation (#282 Part 1) by @prpande in #348
- fix(#285): reset the inbox unread bar after viewing a PR (live viewed-state overlay) by @prpande in #350
- #291: collapse PR-detail header action area into one Review split-button + Ask-AI pull-tab by @prpande in #351
- fix(inbox): glyph alignment, per-theme row hover, section spacing (#345, #347) by @prpande in #356
- #312: mid-session GitHub re-auth surface (non-dismissible banner + /setup exit-gate) by @prpande in #358
- fix(#355): inbox CI dot never advances until the PR head moves — stop pinning Pending + hard-refresh bypass by @prpande in #362
- refactor(#326): extract shared composer core from Inline/Reply composers by @prpande in #365
- refactor(#318): unify verdict wire format on kebab-case by @prpande in #364
- feat(desktop): clone-and-run launchers for Windows + macOS (#306) by @prpande in #366
- fix(#322): GitHub provider robustness — inbox read-path hardening (+ #361 terminal-CI TTL) by @prpande in #368
- fix(#353): invalidate PR-detail snapshot cache on root-comment post by @prpande in #370
- docs: sweep repository docs to current state (post-PoC, alpha releases, V2 AI) by @prpande in #373
- PRism.GitHub: extract shared HTTP transport helper (#320) by @prpande in #372
- chore(eslint): wire eslint-plugin-react-hooks + triage dep-array findings (#331) by @prpande in #375
- fix(#367): awaiting-author review-selection — submitted_at-max + null-commit_id semantics by @prpande in #376
- feat(#344): manual Refresh button on the PR-detail view by @prpande in #377
- #352 + #354: composer-frame parity for the Overview composer and Drafts card by @prpande in #378
- refactor(test): consolidate FakeEventSource, jsonResponse, cookie stub (#332) by @prpande in #380
- fix(#324): unify the PR-root draft predicate (Variant B, FilePath-only) by @prpande in #382
- docs: drop stale AskAiButton references from comments by @prpande in #386
- refactor(frontend): extract useDraftBackedDisclosure hook (#363) by @prpande in #383
- refactor(test): consolidate PrDetailDto fixtures via makePrDetailDto/makePr (#332) by @prpande in #385
Full Changelog: v0.3.1...v0.4.0
PRism v0.3.1
PRism v0.3.0
What's Changed
- feat(#214): pinned synthetic horizontal scrollbar for the file tree by @prpande in #220
- fix(#217): parameterize run.ps1 + Playwright port/dataDir for parallel agents by @prpande in #226
- feat(#133): group inbox PRs by repository + repo-centric recently-closed by @prpande in #223
- fix(#226): validate port inputs in run.ps1 + playwright.config (follow-up to #217) by @prpande in #228
- fix(#107): take over a recycled-PID lockfile by checking real process identity by @prpande in #232
- feat(#212): first-run /welcome landing + setup GitHub mark by @prpande in #230
- chore(#212): land stranded claude[bot] review minors by @prpande in #233
- feat(#134): redesign Settings as a master-detail modal with polished controls by @prpande in #231
- refactor(#143): dedup preferences fetch via a shared PreferencesContext by @prpande in #235
- feat(#141): SSE reconnect resilience — logic + health state machine (PR1/2) by @prpande in #236
- fix(#173): seed keep-alive visited with only the landed sub-tab by @prpande in #237
- fix(#221): make AI-preview toggle reactive — derive capabilities from shared preference by @prpande in #240
- feat(#141): connection-lost snackbar (PR2/2) by @prpande in #241
- feat(#213): classic-primary PAT guidance on the GitHub setup screen by @prpande in #243
- fix(#213): definitive Failing CI result is cacheable (post-merge Copilot follow-up) by @prpande in #246
- fix(#142): SSE subscription accounting — order unsubscribe behind subscribe; Bug 1 not reproducible by @prpande in #245
- feat(#181): loading affordance — skeletons + global top bar (PR1) by @prpande in #248
- feat(#215): show PRism wordmark in the no-nav header by @prpande in #251
- feat(#210): in-app /help guide surface by @prpande in #249
- feat(#244): inbox content-shaped loading skeleton (PR2) by @prpande in #252
- docs: rewrite README as a user-facing product doc with dark-mode screenshots by @prpande in #253
- feat(#211): in-app feedback pipeline (routed modal → GitHub issue + link fallback) by @prpande in #255
- test(flake): stabilize vitest under parallel-suite load (#234) by @prpande in #258
- test(e2e): centralize backend origin behind BACKEND_ORIGIN, honor PRISM_E2E_PORT (#239) by @prpande in #257
- test(flake): harden SSE event-ordering (#209) + disconnect-count read (#238) by @prpande in #256
- feat(#222): humanize /welcome copy + monochrome benefit icons by @prpande in #261
- fix(#227): bounded-rhythm inbox rows — title clamp + aligned metrics + accent-independent CI by @prpande in #268
- feat(#135): font-size control for PR-detail content by @prpande in #267
- feat(#266): agent-friendly detached dev-server launcher (serve-detached.ps1) by @prpande in #269
- fix(#270): hide PR-detail mergeability chip when status is unknown by @prpande in #271
- style(#272): lighten inbox repo-group header weight 600 → 500 by @prpande in #273
- Refresh app icon + static (non-pulsing) loading screen by @prpande in #276
Full Changelog: v0.2.0...v0.3.0
PRism v0.2.0
What's Changed
- Add Claude Code GitHub Workflow by @prpande in #1
- feat: foundations slice (S0+S1) — solution scaffold, services, web API, frontend shell by @prpande in #2
- docs(claude-md): append general behavioral guidelines by @prpande in #3
- feat(inbox): S2 inbox-read — sections, dedup, polling, SSE, page by @prpande in #4
- fix(auth): make setup PAT survive validation + warning-modal flow by @prpande in #5
- fix(inbox): dedupe enricher input to survive cross-section duplicates by @prpande in #6
- Add validation-harness: teammate-distributable prompts for PRism end-to-end fixtures by @prpande in #7
- feat(run.ps1): add -Reset <Token|Auth|Full> for dev-time state-shape testing by @prpande in #8
- docs(arch-readiness): architectural-readiness spec + roadmap punch list by @prpande in #9
- build(analyzers): ban Octokit outside PRism.GitHub via Roslyn analyzer (PR 1 of arch-readiness) by @prpande in #10
- refactor(di): extract per-project AddPrism* extension methods (PR 2 of arch-readiness) by @prpande in #11
- refactor(api): named records for wire shapes (PR 3 of arch-readiness) by @prpande in #12
- docs(s3): PR detail (read) — design spec by @prpande in #13
- feat(state): add ViewedFiles + v1->v2 migration + read-only-on-future-version (S3 PR1) by @prpande in #14
- feat(iterations): weighted-distance clustering core (S3 PR2) by @prpande in #15
- fix: stop two flaky tests (SPA fallback + AppStateStore Windows rename race) by @prpande in #16
- docs: sync to current state + restructure specs/plans + maintenance policy by @prpande in #17
- docs(s3): ce-doc-review + Q1-Q6 redesign for S3 spec/plan by @prpande in #18
- feat(s3): PR detail read-side — IReviewService extensions + Task 1/2 follow-ups by @prpande in #19
- docs: track three PR #19 follow-ups in plan deferrals sidecar by @prpande in #20
- feat(prdetail): PrDetailLoader + backend endpoints (S3 PR4) by @prpande in #21
- feat(s3): PR5 — SSE per-PR fanout + active-PR poller + auth middleware (commit-by-commit reviewable) by @prpande in #22
- docs(s3): sync status surfaces post-PR5 merge by @prpande in #23
- Add code coverage instructions and test dependencies by @prpande in #24
- feat(s3): PR6 — frontend PR-detail shell (commit-by-commit reviewable) by @prpande in #25
- docs(agent): centralize shared AI guidance by @prpande in #26
- feat(s3-pr7): Files tab — file tree, iteration strip, commit picker, diff pane stub by @prpande in #27
- feat(s3-pr8): Diff Pane + Markdown Pipeline by @prpande in #28
- docs(s3): sync status surfaces post-PR8 merge by @prpande in #29
- feat(s3-pr9): Overview tab + AI summary endpoint by @prpande in #30
- fix(diff): parse patch text into hunks server-side (Option A) by @prpande in #32
- fix(events): SubscribeRequest accepts string prRef matching DELETE + SSE format by @prpande in #31
- docs(s3-pr10): apply spec / arch-readiness / roadmap updates per § 9 (S3 PR10) by @prpande in #33
- docs(s4): design spec + implementation plan for drafts + composer slice by @prpande in #34
- feat(s4-pr1): AppState wrap + migration framework + v2→v3 draft fields by @prpande in #35
- feat(s4-pr2): DraftReconciliationPipeline + matrix tests + override semantics by @prpande in #36
- feat(s4-pr3): PUT/GET /draft + POST /reload + bus events + SSE wiring + spec/02 update by @prpande in #37
- docs(spec): multi-account storage-shape scaffold (S6 PR0) by @prpande in #39
- feat(s4-pr4): frontend draft client + composer + diff-line-click integration by @prpande in #38
- feat(s4-pr5): ReplyComposer + PrRootReplyComposer + Mark-all-read by @prpande in #40
- feat(s4-pr6): DraftsTab activated + UnresolvedPanel sticky-top by @prpande in #41
- feat(s4-pr7): cross-tab presence + reload retry + Playwright E2E (closes S4) by @prpande in #42
- docs(s5): brainstorm + spec the submit-pipeline slice by @prpande in #43
- feat(s5-pr0a): IReviewService capability split + C6/C7/C9 empirical gates by @prpande in #44
- feat(s5-pr1): IReviewSubmitter seven-method seam + GitHub GraphQL pending-review pipeline by @prpande in #45
- feat(s5-pr2): SubmitPipeline state machine + v3->v4 schema migration by @prpande in #46
- feat(s5-pr3): submit endpoints + SSE events + per-PR submit lock + verdict-clear patch shape + scrubber extension by @prpande in #47
- feat(s5-pr4): Submit dialog + useSubmit + Submit Review button + verdict picker + AI validator card + Ask AI empty state by @prpande in #48
- feat(s5-pr5): foreign-pending-review modal + stale-commitOID UX + bulk-discard + submit toasts by @prpande in #49
- test(s5-pr7): DoD E2E specs for the submit pipeline + multi-tab + marker-collision by @prpande in #50
- feat(s5-pr0b): bake workers:1 into playwright.config; un-fixme 3 S4 specs by @prpande in #51
- docs(s6-pr0): implementation plan + deferrals for multi-account storage-shape scaffold by @prpande in #52
- feat(s6-pr0): multi-account storage-shape scaffold (state V5, config accounts list, versioned token cache) by @prpande in #53
- docs(s6): polish + distribution — spec and implementation plan by @prpande in #54
- fix(submit): wire mark-viewed, surface 4xx, distinguish never-stamped from drift by @prpande in #55
- docs(real-flow-e2e): spec + plan for real-flow Playwright e2e suite by @prpande in #56
- docs(frozen-pr-tests): spec + plan for live-GitHub integration suite by @prpande in #57
- Real-flow Playwright e2e suite (closes s5 [Defer] e2e Playwright test) by @prpande in #58
- test(integration): frozen-PR contract tests + iteration-clustering calibration by @prpande in #59
- docs(cross-tab-stamp): spec + plan for closing PR #55 submit-gate cross-tab bypass by @prpande in #60
- docs(on-disk-logger): on-disk log writer spec + plan + deferrals by @prpande in #61
- feat(logging): on-disk log writer for PRism.Web with field-name redaction by @prpande in #63
- feat: close cross-tab stamp poisoning (per-tab TabStamps; PR #55 F3 deferral) by @prpande in #62
- feat(diagnostics): stale-OID investigation instrumentation by @prpande in #64
- fix(sse): pr-updated wire-contract fix + stale-OID investigation finding by @prpande in #65
- test(real-flow): un-skip stale-OID spec — drive Keep-anyway override + apiClient empty-body fix by @prpande in #66
- docs(s6): amendment pass + adversarial round on polish-and-distribution spec by @prpande in #67
- docs(s5-deferrals): backfill PR #66 merge SHA (3381f3d) by @prpande in #68
- feat(s6-pr1): backend preferences allowlist + /api/submit/in-flight by @prpande in #69
- feat(s6-pr2): backend /api/auth/replace + identity-change rule + IdentityChanged SSE by @prpande in #70
- feat(s6-pr3): frontend Settings page + Header three-tab nav by @prpande in #71
- feat(s6-pr4): frontend Replace token UX by @prpande in #72
- feat(s6-pr5): cheatsheet overlay with ARIA APG focus + capture-phase Esc by @prpande in #73
- feat(s6-pr6): icon assets + branded LoadingScreen by @prpande in #74
- feat(s6-pr7): accessibility audit (DoD-checkpoint) by @prpande in #75
- feat(s6-pr8): publish.yml workflow + first-run trust copy by @prpande in #76
- feat(s6-pr9): screenshot regression + README graduation + spec doc updates by @prpande...