refactor(contracts): additive capability facts on the clipboard family - #2464
Merged
Merged
Conversation
Additive capability facts on the clipboard family (#2443, family 3). clipboardRuntimeOperationFacts took exactly two cells, read and write, and both are required. The halves stay separate claims — a WebDriver provider whose Appium clipboard extension exposes only a getter is a real owner with one half and not the other, and `clipboard read` must not be refused because the write half is missing — so both are optional and `unsupported` names the denial an unnamed half reports. A call naming no denial is still refused: omission is a classified refusal, never an unclassified half and never an implied success. Six of the eight owners drive both halves from one shell command set or one leaf gate, so they now state that once: web, HarmonyOS, and Vega name a single denial, and the shared unavailable record carries one clipboard cell where it carried two. The owners that serve clipboard keep naming both halves, and the one install-source double that enumerated the two keys by hand now goes through the family builder like every other construction site. Fact values are unchanged: every owner's clipboard cells are byte-identical, and the family's own test pins an unnamed half reporting the stated denial verbatim, an owner naming nothing answering with the exhaustive shape, and the freeze.
Size Report
Startup median (7 runs, lower is better):
|
Review follow-up on the clipboard family. Apple restated its leaf branches to choose a clipboard denial, so the leaf split lived twice in one file. It now reads the leaf's own refusal, keeping a leaf-scoped placeholder only where the leaf serves clipboard and therefore has no clipboard refusal to state. Android named a build-level shell verdict as its family denial, which is the claim its own probe refuses to make when the probe did not complete; the denial now follows the probed cell, so an unnamed half reports the unknown rather than a verdict. Pin the shared unavailable record's clipboard fan-out the way the keyboard commit pinned its own: one input cell, two operations, each with its reason.
thymikee
added this pull request to stack #2466
September 10, 2026 14:33
Member
Author
|
Looks good at d5185f8. Read/write admission and existing refusal reasons are preserved, including partial WebDriver support; the new tests cover omitted and explicitly declared facts. All completed checks pass; iOS smoke is still running, and this follows #2460. One nonblocking correction: the replay table should say 3 packages, not 2, since the listed files span contracts, Linux, and Apple. |
Member
Author
|
Corrected: the new-shape row now reads 3 packages (contracts, |
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Additive capability facts on the clipboard family, the third family in #2443. Stacked on #2460.
clipboardRuntimeOperationFactstook exactly two cells, read and write, and both were required. The halves stay separate claims — a WebDriver provider whose Appium clipboard extension exposes only a getter is a real owner with one half and not the other, andclipboard readmust not be refused because the write half is missing — so both are optional now andunsupportednames the denial an unnamed half reports. A call naming no denial is still refused: omission is a classified refusal, never an unclassified half and never an implied success.Six of the eight owners drive both halves from one shell command set or one leaf gate, so they state that once: web, HarmonyOS and Vega name a single denial, and the shared unavailable record carries one
clipboardcell where it carried two. The owners that serve clipboard keep naming both halves, and the one install-source double that enumerated the keys by hand now goes through the family builder like every other construction site.Measured
Replayed addition:
readClipboardHtml, one clipboard operation named by exactly one owner (the Linux desktop), applied identically to this PR's base and to this head.unsupported+ optional halves)The eight the new shape forces are the operation itself (
contracts/src/{clipboard-runtime,interactor-types,interactor-operation-catalog,runtime-operation-names}.ts, the family's conformance table, its own test) plus the implementing owner and Apple's facts-free operation-to-host map. The fifteen that disappear are the shared unavailable record and its test, six owner fact cells (android,apple,harmonyos,vega,web,webdriver), both Limrun cells, and five cell-enumerating test doubles including the sharedruntime-operation-factshelper.Stop rule: 15 avoided >= 2 -> clipboard merges. That is the third and last family.
Refs #2443
Validation
pnpm check:affected --rungreen on the base and on head; provider integration and coverage are GitHub's to report.