WordPress / WordPress/contributor-toolkit

A trunk update evaluates standing work instead of erasing it

Open
#353 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement real-world-git
Dominant language
JavaScript
Stars
36
Forks
13
Avg merge
23h 19m
Merged PRs (30d)
72

Description

The gap

Updating trunk today erases whatever was standing on it. An applied patch is gone with the worktree reset and its record is cleared — correctly, because keeping the record would be a lie, but the honesty is the honesty of a demolition notice. A ticket branch behind trunk fares little better: the offered remedy is to save a copy of the work, unlink the ticket, delete the branch, and start again. In both cases the app knows that trunk moved but never finds out what that means for the work — whether it still fits, and if not, where it stopped fitting.

The idea

An update becomes fetch plus evaluation. After trunk moves, each piece of standing work — a pull request being tried (#290), eventually a ticket branch — is put through the merge engine (#351) against the new trunk, and the answer drives what the contributor is offered:

  • It still fits → offer to bring it forward, as an explicit act the contributor chooses. The app's existing principle survives intact: it never silently rebases anyone. The difference is that "bring it forward" now exists as a button instead of as a funeral.
  • It conflicts → the merge lands the markers in the tree (#352 takes over from there), and the words are the important part: trunk moved underneath this work; it no longer fits as written. For a pull request, that has a name every Git user knows — it needs a rebase — and knowing that is itself valuable (the follow-up issue on telling the author picks this up).
  • Step back → declining is always available and always safe: the work stays on its branch, correct against the trunk it was written on, exactly as today.

The order of operations matters and is part of the design: evaluation happens on the standing work's own terms, never by force-resetting first and apologising after. Nothing in this flow may destroy what it set out to evaluate.

Deliberately not proposed

Automatic bring-forward, even when clean. A clean three-way merge is strong evidence, not proof, and the contributor saying "yes" is what turns a mechanical result into their decision about their work.

Related

  • #350 — the contract
  • #351 — the engine that answers "does it still fit"
  • #352 — the state that holds the conflicted answer safely
  • #290 — the first kind of standing work this protects

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the trunk update flow and read the related contract and merge-engine issues (#350 and #351), plus the conflicted-state issue (#352) and standing-work example (#290). Done means an update evaluates standing work without destroying it, offers an explicit bring-forward choice when it still fits, preserves conflicts safely, and always allows declining.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
desktop
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.