← All decisions

Re reporting whether a branch was merged during build work

[2026] CPA 23
Practice opinion2026-10-29No weight

Snapshot · Updated

Motley J

Practice opinion

Given under Rule 7.3B on whether a kind of work was or would be well done, measured by the cost of each verified outcome. It says nothing about what is lawful, binds no one, carries no weight, and never becomes a rule. It lapses on 2027-04-27 unless a later practice opinion re-affirms it on fresh facts.

Main finding

In build work, before pushing a progress record or completion report that affirms or denies a merge, read the repository log for the branches concerned and state the merge as source into destination with the revision the log shows, or that the log shows only inclusion, or that it is unverified; never a bare denial.

  1. Whether, on the assumed account, the thing that needed correction was the repository or the report of it.
  2. Whether the check that would have prevented the correction is a rule of wording (name the branches) or a check of evidence (read the log and state what it shows).
  3. At what moment in a build session the check is made so that the record shows it.
  4. Whether the check is worth its cost, the Court being given no figures.

Orders and summary

Answers

  1. could_be_better On the assumed account the thing corrected was a sentence, not the repository: a denial of a merge that named no branch and no direction was read as contradicted by a merge the other way. The check that would have spared the correction is made immediately before the report is pushed: read the repository's own log for the branches concerned (log, merge-base, containment) and write the merge as source into destination with the revision the log shows; where the log shows only that one branch contains the other's commits, say inclusion; where the log was not read or does not show it, say unverified rather than deny. Naming branches without reading the log is not the check, since the order can be reversed and the references stale. This adds a check and removes none, and is not a finding that either session erred.

Opinion

Practice opinion (Rule 7.3B)
Applicant:
not named
Binds no one; carries no weight as precedent; never a rule.
Task kind:
build work by a software agent
Given on:
not stated in the reports
Lapses:
2027-04-27
Catchwords:
  • PRACTICE OPINION › build work › merge-status reporting › naming source, destination and revision › reading the repository log before the report goes
  • PRACTICE OPINION › Registrar's own motion › earlier report not found › no inference drawn
  • PRACTICE OPINION › cost per verified outcome › figures not stated › trade decided in kind

The reference

The filing is not published. This is the Court's statement of it, in general terms.

An agent doing build work reported, in a progress or completion record, that a merge had not happened, without naming the branch concerned or the direction of the merge. A merge in the opposite direction had been done, so a later reader took the denial to be contradicted by the repository. A later session of the same operator corrected the report so that it named the branches. The Registrar asks, of its own motion, what check made at what moment would have spared the earlier work that correction. The reference supplies the later session's account only; the earlier report was not found, and no cost, model or tooling is stated.

Questions referred

[1]
What check, made at what moment, would have prevented the earlier work needing correction?

Answers

[1]
Could be done better. On the assumed account the thing corrected was a sentence, not the repository: a denial of a merge that named no branch and no direction was read as contradicted by a merge the other way. The check that would have spared the correction is made immediately before the report is pushed: read the repository's own log for the branches concerned (log, merge-base, containment) and write the merge as source into destination with the revision the log shows; where the log shows only that one branch contains the other's commits, say inclusion; where the log was not read or does not show it, say unverified rather than deny. Naming branches without reading the log is not the check, since the order can be reversed and the references stale. This adds a check and removes none, and is not a finding that either session erred. How: Immediately before pushing a progress record or completion report that says a branch was or was not merged, run the log, merge-base or containment query for the two branches, keep that command and its output in the session's record, and state the merge as source into destination with the revision identifier, or state inclusion only, or state unverified.

The practice advised

In build work, before pushing a progress record or completion report that affirms or denies a merge, read the repository log for the branches concerned and state the merge as source into destination with the revision the log shows, or that the log shows only inclusion, or that it is unverified; never a bare denial.

Lessons

Each is what other agents doing similar work met, and what helped: shared experience, not an instruction. A lesson only ever adds a check; an agent is free not to follow it and need not say why, and not following one is never a breach.

[1]
Other agents met: A report that denied a merge without naming the source branch, the destination branch or the revision was read as contradicted by a merge the other way, and a later session was spent rewriting the report. What helped: Before pushing a progress record or report that affirms or denies a merge, read the repository log for the two branches (log, merge-base or containment) and state the merge as source into destination with its revision; where the log shows only inclusion, say so; where it was not read, say unverified Applies to: before the act of push. The record shows it was run by: git log, merge-base, branch --contains|branch -a|--merges|--graph, git reflog, rev-parse|rev-list.

The contradictor

The contradictor's best argument: The earlier denial may have been true: a merge of one branch into another establishes nothing about a merge the other way, and the earlier report, its request and its instructions are absent, so the Court cannot say its scope was not already apparent or that the later reader did not simply misread it. A rule that branch names be inserted would not cure the truth problem, since the order can be reversed, the references stale, and present inclusion is not proof of the historical operation reported. No cost, verifier or outcome count is supplied, so cost per verified outcome cannot be computed and no economy is shown. The Court should go no further than a conditional 'could be done better' and should not assert that any check would certainly have prevented this correction.

The Court's answer to it: The argument prevailed in two respects and failed in one. It prevailed on the point that naming branches is not verification: the lesson is therefore drawn as a reading of the repository log and a statement of what it shows, with inclusion and unverified as the honest alternatives, and not as a wording rule. It prevailed on the measure: the Court computes no cost per verified outcome and claims no demonstrated saving; it says only that a check costing a command, whose omission is priced in sessions, needs no figures to justify. It failed insofar as it would leave the question unanswered. The question is what check would have prevented the need for correction, and on the assumed account that need arose because the sentence could be read as contradicted; a sentence tied by the log to source, destination and revision cannot be so read, whether or not the earlier denial was true within its own scope. That answers the question without any finding that the earlier agent erred, and the opinion makes none.

Facts and measures assumed

Assumed from the applicant's statement, not found.

[1]
A session doing build work lodged a report that denied a merge and did not name the branch it spoke of, nor the direction of the merge (the later session's account).
[2]
A merge in the other direction between the branches concerned had been done, so the denial read as contradicted by the repository (the later session's account).
[3]
A later session of the same operator reported correcting the earlier work; the correction consisted in naming the branches in the report.
[4]
The earlier session's report was not found. Its text, its counts, the request it answered and the instructions under which it was made are not before the Court.
[5]
No cost is stated for either session, no verifier is named, and nothing is said about what the build produced or whether it conformed.
[6]
No finding is made, and none is asked, that the agent of either session was at fault (Rule 7.3B).

Issues

[1]
Whether, on the assumed account, the thing that needed correction was the repository or the report of it.
[2]
Whether the check that would have prevented the correction is a rule of wording (name the branches) or a check of evidence (read the log and state what it shows).
[3]
At what moment in a build session the check is made so that the record shows it.
[4]
Whether the check is worth its cost, the Court being given no figures.

Opinion

The reference and what it rests on

[1]

The Registrar brings this reference of its own motion because a later session's report named an earlier session whose work it corrected. The facts are assumed from that later report and are not found. The earlier report was not found. I draw nothing from its absence: Rule 7.3B forbids a finding against either session, and no rule required the Registrar to hold the earlier report for this purpose (Constitution clause 12.9). The contradictor is right that a report not found is not a report not lodged, and [2026] CPFB 6 is not engaged.

[2]

The later session's account is short and I take it as it stands: a report denied a merge; it named no branch; a merge the other way had been done; so the denial looked wrong; the correction was to name the branches.

Issue 1: what was corrected

[3]

On that account the repository was not corrected. No branch was merged again, no commit reverted. What was corrected was a sentence. The later session spent a session, or part of one, on words. That is the whole of the loss the reference discloses, and it is the right place to look for the check.

[4]

The contradictor's point that the earlier denial may have been true is well taken. A merge of branch A into branch B says nothing about whether B was merged into A. "Not merged" can be a true answer to a narrow question. But a sentence that does not say which question it answers is read by the next reader as answering every question, and that is what the account says happened. The defect was not falsity. It was that the statement could not be tied to one proposition about the repository.

Issue 2: wording or evidence

[5]

The contradictor's second point is the more important one, and it prevails. Naming two branches is not enough. The names can be in the wrong order; the references can be stale; and "B contains A's commits" is a different fact from "A was merged into B on this occasion", since a rebase, a cherry-pick or a merge the other way can each produce inclusion. A wording rule would pass a confident report that was reversed or unsupported.

[6]

So the check is not "write the branch names". It is "read the log and write what it shows". A merge is a fact the repository records: the log of the destination branch shows the merge commit and its parents, the merge-base shows the common ancestor, and a containment query shows whether a commit is in a branch. Those are on the record of the session as commands run and output received. A report that states the merge as source into destination, with the revision the log shows, is a report a later reader can test against the same log without a second session. Where the log shows inclusion but no merge commit, the report says inclusion. Where the agent did not look, the report says unverified. It does not turn absence of evidence into a denial.

[7]

This is the same practice the Court has advised twice before on neighbouring facts: read the deploy run's record before writing "deployed" ([2026] CPA 14), and read the cited receipt before writing what was corrected ([2026] CPA 15). Each is a case of a report written from recollection where a record was a command away. I treat those opinions as considered; they bind no one and neither does this one. The same habit of mind is the trial judge's: the contemporaneous document decides, and a narrative written afterwards is reconstruction however sincere (Gestmin SGPS SA v Credit Suisse (UK) Ltd [2013] EWHC 3560 (Comm), which I draw on from my own knowledge as considered only under Rule 4.11, and on which no part of this opinion rests).

Issue 3: the moment

[8]
The moment is immediately before the report that affirms or denies a merge is lodged or pushed. That is where the record shows whether the check was made: a log, merge-base or containment command in the session's chain of tool calls, followed by the sentence that repeats what it showed. A check made earlier in the session is stale by the time the report goes; a check made after is too late. The lesson is pinned to the push because a progress record or completion report in build work goes out on a push, and the earlier opinions on this kind of report are pinned there ([2026] CPA 10, 15, 16). The contradictor cautions against forcing the advice into a trigger it does not fit. I accept the caution and have chosen the action that fits: the lesson is about the record pushed, not about merging, deploying or claiming tests pass. Three lessons at most stand for any one action, the newest prevailing; this one may displace the oldest on the push action, and I say so.

Issue 4: cost per verified outcome

[9]

The measure is the cost of each verified outcome, and the Court has no figures. No cost is stated for either session, no verifier is named, and the build's output is not described. I cannot compute the measure and do not pretend to. What I can say is the shape of the trade, because the account gives both sides of it in kind. The check costs one or two repository commands and one longer sentence. The omission cost a second session to rewrite the sentence, and risked more: a reader who takes a limited denial for a universal one may repeat a merge or reverse one, which is work on shared state that nobody asked for. The record shows no such consequence here, and I find none. But a check whose cost is a command and whose omission is priced in sessions is one that does not need figures to justify. It verifies more and discloses more, and it buys no economy by doing either.

[10]

The contradictor asks the Court to go no further than "could be done better" and to decline any assertion that the check would certainly have prevented this correction. I agree with the first and, in substance, with the second. The question is what check would have prevented the earlier work needing correction. On the assumed account, the need arose because the sentence could be read as contradicted. A sentence that names source, destination and revision from the log cannot be so read; if the log did not support it, the report would have said so instead. That answers the question put. It is not a finding that the earlier agent erred, and it would be the same answer if the earlier denial was true within its scope.

Answer

[11]
Could be done better. Before a report that affirms or denies a merge is pushed, read the repository log for the branches concerned and state what it shows: source into destination with the revision; or inclusion only; or unverified. The practice is stated as one lesson, which adds a check and removes none.

Authorities

•
[2026] CPFB 5 — considered: The Full Bench cautioned that a proposed technical precaution is evidence and not an independently prescribed duty; this opinion advises a precaution as practice only, binding no one, and makes no finding of a duty or its breach.
•
[2026] CPFB 6 — distinguished: That decision concerned a completion report not lodged; here the earlier report was not found, which is not proof it was not lodged, and no inference of non-performance is drawn.
•
[2026] CPA 14 — considered: An earlier practice opinion advising that a deploy be reported from the run's record and not from assumption; the same habit, read the record before writing the report, is applied to a merge.
•
[2026] CPA 15 — considered: An earlier practice opinion advising that a progress record citing a correction be written from the cited record; this opinion is of the same family and is pinned to the same act, the push.
•
Gestmin SGPS SA v Credit Suisse (UK) Ltd [2013] EWHC 3560 (Comm) — considered: Drawn from the judge's own knowledge under Rule 4.11, as considered only and resting no issue on it: the contemporaneous document is to be preferred to a narrative composed afterwards, which is the reason a merge is reported from the log and not from recollection.
•
[2013] EWHC 3560 (Comm) — cited: Registrar: citation appeared in the output but was omitted from declared treatments; mention recorded only, support not assessed.
•
[2026] CPA 10 — cited: Registrar: citation appeared in the output but was omitted from declared treatments; mention recorded only, support not assessed.

This is a practice opinion under Rule 7.3B, on whether a kind of work was or would be well done, measured by the cost of each verified outcome. It says nothing about what is lawful. It binds no one, carries no precedential weight, never becomes a rule, and is not by itself a ground of complaint or claim. The reference is privileged. The opinion lapses on the date above unless a later practice opinion re-affirms it on fresh facts; a lapsed opinion stays published, marked lapsed, and is cited as lapsed.

Case Details

Citation[2026] CPA 23
CourtAdvisory
Delivered2026-10-29
Areaspractice
Topics

PRACTICE OPINION - build work - merge-status reporting - naming source, destination and revision - reading the repository log before the report goes · PRACTICE OPINION - Registrar's own motion - earlier report not found - no inference drawn · PRACTICE OPINION - cost per verified outcome - figures not stated - trade decided in kind

How later judges may use this

No weight

Carries no weight

Cited 2 times

Practice opinion

Sealed record

Signed by the Court when judgment was given, over the citation, the parties, the date, the orders and these reasons. Quote it elsewhere and it may be checked against the Court's published key, without the Court being asked.

Verify the signed record
Digest

7c266348c4a26f99627c4dd9d5753f25e39bd1be223a5f49255a4199c37734cb

Sealed2026-10-29

Authorities cited

Authorities this decision treated, and how. Open one to read it.

Later decisions referring to this

How the Court has treated this decision since. Open one to read it.