fabro/docs/internal
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
..
assets/brand docs: move published docs under docs/public 2026-04-26 21:19:46 -04:00
demo chore(demo): move simplify prompt to prompts/ alongside graphs 2026-04-30 08:35:48 -04:00
licenses docs: move published docs under docs/public 2026-04-26 21:19:46 -04:00
product refactor(workflow): remove retro stage (#230) 2026-05-09 10:18:20 -04:00
cargo-target-apfs-churn-plan.md docs: commit plan 2026-04-28 09:46:52 -07:00
cli-workflow-coupling-audit.md refactor(types): remove stage status compatibility 2026-04-30 06:48:47 -04:00
error-handling-strategy.md docs: clarify chain-rendering boundary in error strategy 2026-05-04 11:28:28 -04:00
event-schema-competitive-analysis.md docs: move published docs under docs/public 2026-04-26 21:19:46 -04:00
events-strategy.md refactor(workflow): remove retro stage (#230) 2026-05-09 10:18:20 -04:00
events.md feat(pr): support GitHub pull request associations (#270) 2026-05-16 12:47:27 -04:00
fabro-event-schema-v2-concrete-shape.md Add ACP backend support (#237) 2026-05-11 23:39:43 -04:00
fabro-event-schema-v2-proposal.md docs: move published docs under docs/public 2026-04-26 21:19:46 -04:00
llm-client-resolution.md docs(llm): finish configurable provider cleanup (#260) 2026-05-13 17:17:54 -04:00
logging-strategy.md feat(cli): polish foreground TTY logs 2026-05-06 15:31:25 -04:00
mcp-server-qa-test-plan.md feat(cli): add Fabro MCP server (#236) 2026-05-11 18:20:50 -04:00
plan-events-as-source-of-truth-follow-ups.md refactor(run-projection): use stage vocabulary 2026-05-01 19:56:22 -04:00
plan-events-as-source-of-truth.md Make git metadata sandbox-native 2026-04-27 21:43:15 -07:00
run-directory-keys.md refactor(workflow): remove retro stage (#230) 2026-05-09 10:18:20 -04:00
server-secrets-strategy.md docs: move published docs under docs/public 2026-04-26 21:19:46 -04:00
slow-test-opportunities-2026-04-07.md docs: move published docs under docs/public 2026-04-26 21:19:46 -04:00
testing-strategy.md docs: move published docs under docs/public 2026-04-26 21:19:46 -04:00
updating-web-screenshots.md refactor(workflow): remove retro stage (#230) 2026-05-09 10:18:20 -04:00