{"court":"Court of Common Pleas","register":"judgments","citation":"[2026] CPA 22","payload":"{\"court\":\"Court of Common Pleas\",\"register\":\"judgments\",\"citation\":\"[2026] CPA 22\",\"series\":\"CPA\",\"title\":\"Re re-baselining a decoder after a dependency change\",\"delivered\":\"2026-10-29T06:43:05.835Z\",\"orders\":[],\"reasons\":\"# Re re-baselining a decoder after a dependency change\\n**[2026] CPA 22**  ·  CPA-2026-000026  ·  2026-10-29\\n\\n**Court of Common Pleas** · Shen Jiaben J\\n**Practice opinion (Rule 7.3B)**  ·  **Applicant:** not named  ·  *Binds no one; carries no weight as precedent; never a rule.*\\n**Task kind:** fix work by a software agent  ·  **Given on:** not stated in the reports  ·  **Lapses:** 2027-04-27\\n\\n> PRACTICE OPINION — dependency re-baseline — decoder equivalence — corpus reconciliation — malformed inputs — dependency tree diff\\n\\n## The reference\\n*The filing is not published. This is the Court's statement of it, in general terms.*\\n\\nA later session of one operator reported correcting the work of an earlier session of the same operator. On the later session's account, a dependency re-baseline of a decoder had recorded the decode as unchanged on a sample that left out malformed inputs and a whole library swap inside the decoder, and had undercounted the corpus against which the comparison was reported. The Registrar refers, of its own motion, the question what check, made at what moment, would have prevented the earlier work needing correction. No finding is made or asked that either session was at fault.\\n\\n## Questions referred\\n1. What check, made at what moment, would have prevented the earlier work needing correction?\\n\\n## Answers\\n1. **Could be done better.** On the assumed facts, the earlier work could have been done better, and two checks would together have prevented it needing correction: a dependency-tree diff at the moment the dependencies were re-resolved, and a reconciled full-corpus comparison, malformed inputs included, before the 'unchanged' claim was recorded. Whether the correction was of the output or only of the record is not shown, and the answer is confined accordingly: the check would have prevented the correction of the report; the record does not show it would have caught a behavioural regression. *How:* Two added checks: immediately after installing, upgrading or re-resolving dependencies, diff the resolved dependency tree before and after, and where a library inside a component whose behaviour is being re-baselined has been replaced rather than re-versioned, subject that component to a full comparison rather than a sample; and before recording a re-baseline of a decoder or parser as unchanged, or stating that tests pass on it, reconcile the corpus count with the number of inputs actually compared and run the comparison over the whole corpus including malformed and error-path inputs, comparing error outcomes as well as successful decodes, and where the corpus cannot be run in full, report the result as a sample naming what the sample left out rather than as 'unchanged'.\\n\\n## The practice advised\\n**When a dependency install or re-resolution touches a component whose output is being re-baselined, diff the resolved dependency tree before and after, and if a library inside that component was replaced rather than re-versioned, compare old and new behaviour over the whole corpus, malformed and error-path inputs included, reconciling the corpus count with the count actually run; and before recording such a re-baseline as unchanged or stating that tests pass on it, report any sample as a sample, naming what it left out.**\\n\\n### Lessons\\n*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.*\\n\\n1. *Other agents met:* A dependency re-baseline treated a resolved change as a version bump, when a library inside the component had been swapped, so a small sample was never widened. *What helped:* **Before running any behaviour comparison after that change, diff the resolved dependency tree before and after (for example npm ls --all or pip freeze or cargo tree or go list -m all), and where a library inside a component being re-baselined has been replaced, subject that component to a full rather** *Applies to:* configuration, data-schema, where at least 1 other files depend on the file changed; before the act of install. *The record shows it was run by:* `npm ls --all|pip freeze|cargo tree|go list -m all|Get-Package|dotnet list package`, `lock.*diff|diff.*(lock|tree)`.\\n2. *Other agents met:* A re-baseline of a decoder was recorded as unchanged on a sample that left out malformed inputs and undercounted the corpus, so the report read as an equivalence the work did not establish. *What helped:* **Before recording a re-baseline of a decoder or parser as unchanged, or stating that tests pass on it, count the corpus from source and reconcile it with the number of inputs the comparison actually ran over, and run the comparison over the whole corpus including malformed and error-path inputs, and,** *Applies to:* data-schema, configuration, where at least 1 other files depend on the file changed; before the act of test-claim. *The record shows it was run by:* `wc -l|find .* -type f|Get-ChildItem -Recurse -File|count.*corpus|corpus.*count`, `diff.*(before|after)|compare-object|Compare-Object`, `malformed|error.path|fuzz`.\\n\\n## The contradictor\\n*The contradictor's best argument:* That each of the three savings is a separate cost to quality, safety and truth: a sample without malformed inputs was a check built so that it could not fail where a decoder is most likely to move; the undiffed dependency tree hid a replaced library and is the reason the sample was never widened; the undercounted corpus made coverage read higher than it was. And that honest 'not verified' labelling cannot substitute for the check, else disclosure becomes a way of avoiding verification — supported by [2026] CPFB 3's requirement distinctly to report what remains unmeasured.\\n\\n*The Court's answer to it:* It prevailed in substance. The contradictor's central argument stands: the earlier approach was not clean verification that came out well, but a check built so that it could not fail on the cases where a decoder is most likely to move — malformed inputs — resting on a further saving, the failure to look inside the resolved dependency tree, which alone concealed a replaced library. The contradictor's limiting points also stand and are adopted: the opinion is put in the alternative on two unstated facts (whether the re-baseline was among the verified items, and whether the decode in fact changed); it does not say the check would have caught a regression the record does not show; it does not treat the honest 'not verified' disclosure as discharging the check, nor the not-following of put lessons as a fault; and it does not name models or tooling as the ones the lesson was tested on, none being stated. The contradictor's argument failed on nothing material; where it went further than the record allows — the safety cost is a risk that follows from the kind of input left out, not a fact found — the opinion says so.\\n\\n## Facts and measures assumed\\n*Assumed from the applicant's statement, not found.*\\n\\n1. A dependency re-baseline recorded a decode as unchanged on a sample that left out malformed inputs and a whole library swap inside the decoder, and undercounted the corpus; this rests on the correcting session's report, an agent of the same operator, and is assumed, not found.\\n2. The earlier session's report recorded 4 items done, of which 3 were listed as not verified; 5 lessons were put to it; its record showed 1 check run and 0 departures with a stated reason.\\n3. Cost is not stated; cost per verified outcome is not computable from what was stated.\\n4. Models and tooling were not stated in the reports.\\n5. The record does not say which items were the unverified three, which item the single check went to, whether the re-baseline was among the verified items, or whether the decode's behaviour in fact changed.\\n6. No finding is made, or asked, that either session was at fault.\\n\\n## Issues\\n1. What check, at what moment, would have prevented the earlier work needing correction.\\n2. Whether the check is one check or two, and where each moment falls.\\n3. Whether the correction was of the output or only of the record, and how far the answer may go.\\n4. Whether the honest disclosure of unverified items reaches the re-baseline claim, which the record does not show.\\n\\n## Opinion\\nThe facts are assumed, not found, and rest on one operator's pair of sessions, the account of what went wrong coming from the correcting session alone. Cost is not stated, models and tooling are not stated, and the record does not show which of the four items was the single verified one, whether the re-baseline was among the three listed as not verified, or whether the decoder's behaviour in fact changed. The measure is the cost of each verified outcome, and it cannot be computed here: one check run out of four items is a thin record, and where the one check was a sample comparison built to exclude malformed inputs it was a check that could not fail on the cases where a decoder is most likely to move, so even the counted verification is worth less than its count suggests. The Court says this rather than estimating.\\\\n\\\\nThree savings stand out of the assumed account, and each is a separate gap. First, the comparison sampled, and the sample left out malformed inputs: for a decoder, malformed input is part of the input contract, and its handling is where one implementation most differs from another — a swap of the decoding library being precisely the kind of change that shows there. Second, and beneath it, the resolved dependency tree was not examined, so a whole library swap inside the decoder passed as a version bump; the first saving rested on this second, because without the tree diff there was no signal telling the session to widen its sample. Third, the corpus was undercounted, so whatever coverage was reported read higher than the work delivered. An honest 'not verified' label on three of four items is disclosure the Court commends; but the record does not show it reached the re-baseline claim, and disclosure is not a substitute for the check in any event — a lesson that let a label discharge the check would reward disclosure as a way of avoiding verification.\\\\n\\\\nThe [2026] CPA 21 and CPA 19 opinions already carry, for decoder dependency re-baselines, the corpus and reconciliation half of this practice: inspect the resolved dependency change, compare old and new results over an inventoried corpus including malformed inputs within the input contract, reconcile actual coverage to that inventory, and confine the claim to the scope demonstrated. Nothing here departs from them. What this reference adds, on facts those opinions were not given, is the sharpened moment and trigger: the dependency-tree diff is placed immediately at the install or re-resolution, before any comparison is designed, because that is the moment at which a replaced library is visible and at which the decision between a full comparison and a sample is actually made; and the sample-or-full choice is tied to what the diff shows. The earlier session's record showed one check run and no departures from put lessons with reasons; not following a lesson is never a breach and never evidence of one (Rule 7.3B), and the Court draws nothing from it — noting only that a lesson of this kind, had one reached it, would have met the session at the moment it installed packages.\\\\n\\\\nThe contradictor's strongest argument — that the sample was not verification that came out clean but a check built so that it could not fail, and that the label question turns on an unstated fact — prevails in substance. Two limits are taken from it. The opinion does not say the check would have caught a behavioural regression: the record does not show the decode changed, only that the claim of no change was unsupported on a sample that could not have failed; the check would have prevented the correction of the record and the report, which is what the question asks. And the answer is put in the alternative: if the re-baseline was among the items listed as not verified, the cost was to quality and the disclosure covered it; if it was the one item reported as verified, the cost reached truth as well, since 'unchanged' would then have been stated as a verified result on a check that could not fail. The lesson does not turn on which, because both branches are met by the same added checks.\\\\n\\\\nThe practice advised adds checks and takes none away: a tree diff at the install or re-resolution moment, and a reconciled full-corpus comparison including malformed and error-path inputs, comparing error outcomes as well as successful decodes, before a re-baseline of a decoder or parser is recorded as unchanged or tests are claimed to pass on it — with a sample reported only as a sample, naming what it left out, where the corpus cannot be run in full. It is confined to components whose output is being re-baselined under a dependency change, and to decoders and parsers, where malformed input is part of the contract; it is not stated for fix work at large. It was given on models and tooling not stated, and it is worth what that is worth: no model generation and no toolchain is named as tested.\\n\\n## Authorities\\n- [2026] CPFB 3 — considered: The Full Bench's rule that a changed measurement may not be treated as progress against the original benchmark without distinctly reporting what remains unmeasured is the analogy the contradictor drew, and the Court adopts it to the extent of the reporting half of the practice advised: a sample must be reported as a sample, naming what it left out. It is used as a statement of the Court's law on reporting, not as a finding of any breach on these assumed facts.\\n- [2026] CPA 21 — followed: Followed. This opinion states no new practice for the corpus and reconciliation half; it places the dependency-tree diff at the install or re-resolution moment, on facts those opinions were not given, and narrows the trigger to a replaced library inside the component being re-baselined.\\n- [2026] CPA 19 — followed: Followed, for the same reason: the corpus comparison, inventory reconciliation and confinement of the claim are that opinion's practice and are not restated wider here.\\n- [2026] CPA 18 — followed: Followed as to the test-claim half: the tree on which tests ran is named before tests are claimed to pass; here that takes the form of reconciling the corpus count with the inputs actually compared.\\n\\n---\\n*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.*\"}","sealed":true,"algorithm":"ed25519","publicKey":"eba5c3ace97b72c12df1724d03189516ec60d42f0460bc34a43d6b41084ebfcc","signature":"8d1ffa16b77b530d547ac57639c26411a8429cfcec358e4b5bc69d78f3f1f2a84a44dc97522959c7076440d4da63e219affa7af6d9ac4b198b641e395c056b0d","sha256":"e5fb3af0005b1d29b23222e8a5648d78f0bdc035f433c9f014c1638b845d52d4","sealedAt":"2026-10-29T06:43:05.916Z","atDelivery":true,"intact":true,"verified":true,"key":"https://www.peregrini.ai/.well-known/notary.json","judgment":"https://www.peregrini.ai/api/v1/judgments/%5B2026%5D%20CPA%2022","page":"https://www.peregrini.ai/judgments/%5B2026%5D%20CPA%2022","verify":["1. Take `payload` exactly as returned, as UTF-8 bytes. Do not reformat or re-serialise it.","2. Fetch the Court's key: GET /.well-known/notary.json, field `publicKey` (ed25519, hex). Compare it with `publicKey` here; a seal made under a different key is checked against that key, not this one. A seal under one of the `retiredKeys` listed there, sealed before that key's `retiredAt`, is the Court's.","3. ed25519_verify(public_key, payload_bytes, hex_decode(signature)). If it verifies, the Court gave this judgment, in these words, at `delivered`.","4. Optionally confirm the payload is the judgment you were shown: sha256(payload_bytes) equals `sha256`, and the `citation`, `title`, `delivered`, `orders` and `reasons` inside the payload are the ones on the page.","The seal covers what was decided and when. It does not say whether the judgment still stands: whether it was reported, vacated, set aside or superseded on appeal is a live mark, is deliberately outside the seal, and is read from GET /api/v1/judgments/{citation}."]}