Skip to content

refactor(contracts): additive capability facts on the keyboard family - #2459

Merged
thymikee merged 1 commit into
mainfrom
claude/2443-additive-families
Sep 10, 2026
Merged

refactor(contracts): additive capability facts on the keyboard family#2459
thymikee merged 1 commit into
mainfrom
claude/2443-additive-families

Conversation

@thymikee

Copy link
Copy Markdown
Member

Summary

keyboardRuntimeOperationFacts required one cell per operation, so an operation only one owner
serves still cost a hand-written denial in every other owner. The builder now takes the family's
denial once, as a required unsupported cell; status/dismiss/enter are optional and an
omitted cell reports that denial verbatim.

The shared unavailable-facts record collapses keyboardStatus/keyboardDismiss/keyboardEnter
into one required keyboard cell, so the owners that wrote raw keys — webdriver, vega, linux,
limrun's no-session binding — answer the family through the builder, its one entry point. Facts are
unchanged for every owner: no test asserting a non-supporting platform's unavailable reason was
edited. Keyboard is the first family of #2443, on the shape #2420 merged.

Replay (#2443 item 3)

Replayed addition: keyboardCommitIme, one operation named by exactly one owner. Files that must
change until pnpm typecheck is green again:

shape files packages unsupported-owner edits
old (origin/main) 25 9 17
new (this branch) 8 2 0

The 8: 6 in packages/contracts (the family, the interactor method, the operation-name list, the
binding catalog, the conformance row, the family's own exhaustive test) + 2 in
packages/platform-apple (the implementing cell, plus runner-demand.ts, a facts-free total
operation→host map). Those operation-surface files are forced on both shapes. The old shape
additionally forced 9 owner/builder fact cells (apple navigation, harmonyos, linux, vega, web,
limrun ×2, webdriver, the shared record) and 8 cell-enumerating test doubles.

Stop rule: 17 avoided ≥ 2 → keyboard merges. Measurement also posted on #2443.

Validation

880c9f4367: pnpm check:affected --run green — format, lint, typecheck, layering, fallow, build,
and 350 related test files / 2339 tests. Provider integration and coverage stay
GitHub-authoritative. Parity is proven by the untouched admission tests
(packages/platform-*/src/runtime.test.ts, provider runtime tests); two owner tests now also
assert the keyboard reason (WebDriver inactive session, stale Limrun identity), because one family
cell answers three operations.

Refs #2443

The keyboard family's facts builder took one required cell per operation, so an
operation only one owner implements still cost a hand-written denial in every
other owner. The builder now takes the family's denial once, as `unsupported`,
and every operation cell is optional: an owner names what it serves and omission
reports that denial verbatim, with the reason and hint the owner would otherwise
have repeated per cell.

Omission stays a classified refusal, never an unclassified cell and never an
implied success: `unsupported` is required, so a call that leaves the family
blank does not compile. An owner that names every operation still states the
family refusal, and it must refuse the family rather than one operation of it —
whatever the owner leaves unnamed reports that cell verbatim.

The shared unavailable-facts input collapses `keyboardStatus`/`keyboardDismiss`/
`keyboardEnter` into one required `keyboard` cell, so the owners that answered
the family with raw keys (webdriver, vega, linux, limrun's no-session binding)
now answer it through the builder, which is the family's one entry point.

Facts are unchanged for every owner, so the per-platform admission assertions
hold untouched. Two owner tests now assert the keyboard reason as well as the
availability, because one family cell reports one reason for all three
operations: the WebDriver inactive session and the stale Limrun identity.

Refs #2443
@github-actions

Copy link
Copy Markdown

Size Report

Metric Base Current Diff
Installed (including dependencies) 4.53 MB 4.53 MB -81 B
Package (unpacked) 4.53 MB 4.53 MB -81 B
Package (download) 1.34 MB 1.34 MB -29 B

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 18.3 ms 18.0 ms -0.2 ms
CLI --help 46.1 ms 49.9 ms +3.8 ms

@thymikee

Copy link
Copy Markdown
Member Author

No code findings at 880c9f4. The builder preserves each existing keyboard fact and denial while making new operations optional for unsupported owners; the exhaustive tests cover explicit, partial and unsupported-only declarations. Completed checks are green, with iOS still running.

@thymikee thymikee added the ready-for-human Valid work that needs human implementation, judgment, or maintainer merge label Sep 10, 2026
@thymikee
thymikee added this pull request to stack #2466 September 10, 2026 14:33
@thymikee
thymikee merged commit d80b021 into main Sep 10, 2026
18 checks passed
@thymikee
thymikee deleted the claude/2443-additive-families 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:02 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