Real-world example

Open a Pull Request

A generic/reusable CRD extracted from GitHub's own public REST API and webhook documentation — the framework's first worked example grounded in a genuinely public, universally recognizable real system rather than a synthetic scenario. Independently blind-audited for framework conformance and factual accuracy.

Why is this a Capability MLE? Proposing changes for review has an independent, determinable outcome (an open, addressable pull request, or a rejection) that is complete on its own — before anyone reviews, merges, or closes it.

What does this example teach? How to extract a CRD from public evidence with audited provenance, and how one real capability can have several existing realizations at once (web UI, REST, GraphQL, CLI, and bot automation) without becoming several capabilities.

Evidence status: extracted from GitHub's own public documentation, independently blind-audited for conformance and factual accuracy.

Identity and core meaning

NameOpen a pull request
DefinitionThe ability for an authorized actor to propose that a set of committed changes on one branch (or fork) be reviewed for integration into another branch, creating a durable, addressable request that others can inspect, discuss, and act on independently of the actor who created it.
Capability purposeEnable a proposed set of changes to be formally presented for review and eventual integration, without itself performing that integration.
Meaningful outcomeA new pull request exists in an intelligible state (open, either "ready for review" or "draft") and is addressable for further action, or the attempt is rejected with an identifiable reason.
IncludesSupplying the head/base branches and enough metadata to make the proposal reviewable; marking it as a draft at creation time; the immediate accept/reject outcome.
ExcludesReviewing the proposal; editing it after creation; converting a draft to ready-for-review; merging it; closing it without merging; creating the underlying commits/branch.
Tagsnotification-triggering — creating a pull request is documented as triggering notifications and secondary rate limiting; chosen over network-touching, which would add nothing beyond this capability's own API/UI exposure on a hosted product.

Interaction Contract MLE

Create a pull request

Actor
A repository collaborator (or organization member) with write access to the head/source branch, which may be a branch in a fork the actor owns.
Command / intent
Propose that the commits on a named branch be integrated into a named target branch, supplying a title/body or converting an existing issue.
Policies / invariants
Write access to the head/source branch required; two distinct branches required; title required unless issue is supplied; draft availability is plan-gated.
Transition
No pull request for this proposal → an open pull request, in "ready for review" or "draft" state.
Result
201 with the created resource, or 403/422 with an identifiable reason.
Events / effects
pull_request webhook event, action: opened; notifications to other users/systems.
Unknowns
Whether a duplicate open PR for the same head→base pair is blocked; the general non-human-actor authorization boundary beyond the confirmed Dependabot case.

Rules and defaults

Rules / invariants

  • Write access to the head/source branch (or org membership) is required to open or update a pull request.
  • A pull request requires two distinct branches; it cannot be opened against itself.
  • Draft pull requests are gated by the repository's/organization's GitHub plan.

Recommended defaults

  • The raw markdown response media type is GitHub's own stated default if none is specified.
  • A pull request is likely "ready for review" unless draft is explicitly set true — a reasonable inference, not a confirmed default.

Optional: operational realization

Execution modesoftware-primary for the REST/GraphQL/CLI/web-UI paths; unknown for Dependabot's internal decision process.
ExposureUI, API (REST and GraphQL), tool (CLI), workflow/automation (bots).
Known realizationConfirmed via
github.com web UI"Compare & pull request" flow; base vs. compare branch selection; standard or draft creation button.
GitHub REST APIPOST /repos/{owner}/{repo}/pulls — full parameter/response/status-code set confirmed from GitHub's own structured docs data.
GitHub GraphQL APIExistence confirmed via cross-reference only; specific mutation not independently retrievable.
GitHub CLIgh pr create [flags] — base/head/title/body/draft flags confirmed.
Dependabot (bot/automation)GitHub's own docs: "When Dependabot identifies an outdated dependency, it raises a pull request..." — confirmed to open PRs, not confirmed to merge them.

Unknown / unresolved

  • Whether a second open pull request for the same head→base pair is blocked.
  • The exact per-action webhook description text for opened.
  • The general non-human-actor authorization boundary beyond the confirmed Dependabot case.
  • Any request-volume limit beyond the general secondary-rate-limit warning.

See the full unresolved questions document for the complete list shared with Merge a pull request.

Related MLEs by Dimension

Traceability only, evidence-bound like the rest of this extraction — a dimension is included only where GitHub's own fetched material states something to trace to. Five dimensions are omitted here, each for a stated reason: Interaction/Behaviour (self-referential to this capability's own sole contract, above), Communication (GitHub confirms this action triggers notifications but never documents their wording — unlike Merge a pull request, which has an exact quoted response string to ground a Communication MLE on), Backend/Execution and Data/Information (GitHub documents its public API contract, not its internal implementation or data model), and Verification (this CRD's own operational realization already states tests aren't documented by GitHub as part of this material).

DimensionRelationshipRefNotes
Business/DomainconstrainsWrite-access/org-membership requirement; draft-PR plan-gatingAlready stated under Rules; referenced here.
UX/ExperiencesupportsBase vs. compare branch selection concept; "Compare & pull request" banner
Frontend/InterfacesupportsSeparate "Create pull request" vs. "Create draft pull request" buttons
API/InteroperabilityimplementsPOST /repos/{owner}/{repo}/pulls; GraphQL (existence only); gh pr createAlready stated under known realizations.
AgenticsupportsDependabotAlready stated above.
OperationssupportsSecondary rate-limiting risk on rapid creation; draft-PR plan availability

Provenance

Extracted from GitHub's own public REST API and webhook documentation, fetched 2026-08-26, then independently blind-audited for framework conformance and factual accuracy against GitHub's live docs — one real defect (a merge-queue realization on the paired Merge a pull request CRD) and three small provenance/tag cleanups were found and fixed. See the provenance table and decision log for full detail, including why "open" and "merge" are two CRDs, not one.