Skip to content

refactor(contracts): additive capability facts on the clipboard family - #2464

Merged
thymikee merged 2 commits into
claude/2443-gesture-factsfrom
claude/2443-clipboard-facts
Sep 10, 2026
Merged

refactor(contracts): additive capability facts on the clipboard family#2464
thymikee merged 2 commits into
claude/2443-gesture-factsfrom
claude/2443-clipboard-facts

Conversation

@thymikee

@thymikee thymikee commented Sep 10, 2026

Copy link
Copy Markdown
Member

What

Additive capability facts on the clipboard family, the third family in #2443. Stacked on #2460.

clipboardRuntimeOperationFacts took 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, and clipboard read must not be refused because the write half is missing — so both are optional now 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 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 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.

shape files packages unsupported-owner edits
old (required cell per half) 23 9 15
new (unsupported + optional halves) 8 3 0

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 shared runtime-operation-facts helper.

Stop rule: 15 avoided >= 2 -> clipboard merges. That is the third and last family.

Refs #2443

Validation

pnpm check:affected --run green on the base and on head; provider integration and coverage are GitHub's to report.

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.
@github-actions

github-actions Bot commented Sep 10, 2026

Copy link
Copy Markdown

Size Report

Metric Base Current Diff
Installed (including dependencies) 4.53 MB 4.53 MB +153 B
Package (unpacked) 4.53 MB 4.53 MB +153 B
Package (download) 1.34 MB 1.34 MB +62 B

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 29.4 ms 29.1 ms -0.4 ms
CLI --help 78.2 ms 79.9 ms +1.7 ms

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
thymikee added this pull request to stack #2466 September 10, 2026 14:33
@thymikee

Copy link
Copy Markdown
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.

@thymikee thymikee added the ready-for-human Valid work that needs human implementation, judgment, or maintainer merge label Sep 10, 2026
@thymikee

Copy link
Copy Markdown
Member Author

Corrected: the new-shape row now reads 3 packages (contracts, platform-linux, platform-apple). Verified the same count on the other two families: keyboard 2 (contracts, platform-apple), gesture 2 (contracts, platform-apple); the PR body and the #2443 measurement comment are both updated.

@thymikee
thymikee merged commit 2d109e5 into main Sep 10, 2026
18 checks passed
@thymikee
thymikee deleted the claude/2443-clipboard-facts branch September 10, 2026 15:02
@github-actions

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-09-10 15:03 UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-human Valid work that needs human implementation, judgment, or maintainer merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant