fabro/apps/fabro-web/app
Bryan Helmkamp d09e6cde33
feat(pr): support GitHub pull request associations (#270)
## Summary

Adds event-sourced pull request association management for runs while
preserving Fabro-created PR creation. A run can now store a current
GitHub PR association, replace it by linking another GitHub PR URL, and
remove it through an unlink event.

## What Changed

- Added `pull_request.linked` and `pull_request.unlinked` events,
projection replay support, and optional PR metadata fields in shared
pull request records.
- Added API, server, and client support for `PUT
/runs/{id}/pull_request` and `DELETE /runs/{id}/pull_request`; linking
accepts GitHub PR URLs, infers owner/repo/number, and captures live
GitHub title and branch metadata when available.
- Added `fabro pr link` and `fabro pr unlink`, updated `fabro pr view`,
and kept create/merge/close behavior guarded to GitHub PRs with usable
coordinates.
- Updated web UI rendering and internal event docs so stored PR links
display cleanly when live GitHub details are unavailable.

## Testing

- `cargo +nightly-2026-04-14 fmt --check --all`
- `git diff --check`
- `cargo build -p fabro-api`
- `cargo nextest run -p fabro-types -p fabro-store -p fabro-server -p
fabro-cli`
- `bun run typecheck` in `lib/packages/fabro-api-client`
- `bun run typecheck` in `apps/fabro-web`
- `bun test` in `apps/fabro-web`

Refs https://github.com/fabro-sh/fabro/issues/235

---

[![Compound
Engineering](https://img.shields.io/badge/Compound_Engineering-6366f1)](https://github.com/EveryInc/compound-engineering-plugin)
🤖 Generated with GPT-5 via [Codex](https://openai.com/codex)

---------

Co-authored-by: Haroldo Olivieri <6575718+haroldolivieri@users.noreply.github.com>
2026-05-16 12:47:27 -04:00
..
components feat(pr): support GitHub pull request associations (#270) 2026-05-16 12:47:27 -04:00
data feat(pr): support GitHub pull request associations (#270) 2026-05-16 12:47:27 -04:00
hooks Wire end-to-end steering for running agents (#209) 2026-05-05 15:34:16 -04:00
layouts refactor(web): rename Workflows tab to Automations 2026-05-10 10:47:46 -04:00
lib feat(pr): support GitHub pull request associations (#270) 2026-05-16 12:47:27 -04:00
routes feat(pr): support GitHub pull request associations (#270) 2026-05-16 12:47:27 -04:00
app.css feat(runs): add sandbox terminal 2026-05-09 16:06:04 -04:00
entry.tsx feat(web): migrate to generated API client 2026-05-08 07:44:33 -07:00
install-api.test.ts feat(web): migrate to generated API client 2026-05-08 07:44:33 -07:00
install-api.ts feat(web): migrate to generated API client 2026-05-08 07:44:33 -07:00
install-app.test.tsx feat(install): make LLM setup optional in web installer and CLI (#265) 2026-05-14 22:34:39 -04:00
install-app.tsx feat(install): make LLM setup optional in web installer and CLI (#265) 2026-05-14 22:34:39 -04:00
install-config.test.ts fix(install): exclude openai-compatible from v1 setup 2026-04-19 11:43:38 -04:00
install-config.ts feat(install): redesign web wizard and scope dev token to PAT installs 2026-04-19 16:11:02 -04:00
install-flow.test.ts fix(install): exclude openai-compatible from v1 setup 2026-04-19 11:43:38 -04:00
install-flow.ts fix(install): exclude openai-compatible from v1 setup 2026-04-19 11:43:38 -04:00
install-router.test.tsx fix(install): mount wizard at root route 2026-04-24 12:59:16 -04:00
install-router.tsx fix(install): mount wizard at root route 2026-04-24 12:59:16 -04:00
mode.test.ts fix(install): harden web wizard against review findings 2026-04-19 12:43:00 -04:00
mode.ts fix(install): harden web wizard against review findings 2026-04-19 12:43:00 -04:00
root.tsx refactor(web): drop light mode, go dark-only 2026-04-20 09:27:08 -04:00
router.test.tsx refactor(setup): remove browser-based GitHub app bootstrap 2026-04-13 18:25:29 -04:00
router.tsx feat(web): add profile sub-navigation with Sessions 2026-05-10 12:40:50 -04:00