You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Wave 2 child of #2409. Continues #2412 (pilot merged as #2420, edbd96ea30). The pilot's stop rule passed with seven unsupported-owner edits avoided against a floor of two, so expansion is authorized on the same terms, one family per PR.
Purpose
Adding a capability to one platform stops forcing edits in the platforms that do not support it, for the next families where owners still write a denial out cell by cell.
Baseline
On main at 41e2633f10:
The touch family is additive. TouchRuntimeOperationFactsInput.unsupported is a required family-level denial (packages/contracts/src/touch-runtime.ts:88), every operation input is optional, and declared(fact) = fact ?? input.unsupported (:103). An owner that leaves an operation blank gets the family's typed denial with the same reason and hint it would have written by hand.
Every other multi-operation family is required-per-operation: keyboardRuntimeOperationFacts (packages/contracts/src/keyboard-runtime.ts:46, 3 operations), gestureRuntimeOperationFacts (gesture-runtime.ts:74, 5), clipboardRuntimeOperationFacts (clipboard-runtime.ts:48, 2), plus alert (4), snapshot (3), selector-observation (2), perf (7), audio-probe (4), application-lifecycle (9).
Owners that write a whole family as unavailable today, cell by cell:
keyboard: web (packages/platform-web/src/runtime.ts:416), webdriver (packages/provider-webdriver/src/platform-runtime.ts:568, raw keys without the builder), vega (packages/platform-vega/src/runtime.ts:203, raw keys). harmonyos implements 2 of 3.
gesture: vega (packages/platform-vega/src/runtime.ts:236), web (packages/platform-web/src/runtime.ts:401).
One PR per family, in this order: keyboard, gesture, clipboard.
Give the family builder the touch shape: a required unsupported cell on the input, optional per-operation inputs, declared(fact) = fact ?? input.unsupported. Owners that write raw keys (webdriver and vega for keyboard) move to the builder in the same PR, so the family has one entry point.
Owners that implement nothing in the family supply only unsupported; owners that implement part of it omit the rest. Reasons and hints are unchanged: the admission tests that assert each non-supporting platform's unavailable reason stay green with no edits.
Replay a single-platform addition on the new shape (add one operation to the family, implemented by one platform, the way refactor(contracts): additive capability facts pilot on touch family #2420 replayed tapElementSelector). Record in the PR body the files the compiler forces before and after, and the count of unsupported-owner edits avoided.
Stop rule per family: fewer than two unsupported-owner edits avoided means that family is not merged. Post the measurement here and move to the next family.
Keep the guard PR refactor(contracts): additive capability facts pilot on touch family #2420 restored after its first pass: an owner cannot lose an explicit cell silently. The family's exhaustive test (keyboard-runtime.test.ts and siblings) asserts the full fact shape for a fully-declared owner and for an unsupported-only owner.
Acceptance, measurable from git
Per family: the replayed addition touches contracts, the one implementing platform package, and tests. The other platform and provider packages are untouched.
Per family: unsupported-owner edits avoided ≥ 2, recorded in the PR body.
Typed denial unchanged: no edit in any test that asserts an unavailable reason for a non-supporting platform.
Blanket defaults across all families. The remaining six multi-operation families (alert, snapshot, selector-observation, perf, audio-probe, application-lifecycle) wait for this issue's measurements.
A default that hides an unclassified capability or implies success.
Single-operation families; there is nothing to make additive.
Wave 2 child of #2409. Continues #2412 (pilot merged as #2420,
edbd96ea30). The pilot's stop rule passed with seven unsupported-owner edits avoided against a floor of two, so expansion is authorized on the same terms, one family per PR.Purpose
Adding a capability to one platform stops forcing edits in the platforms that do not support it, for the next families where owners still write a denial out cell by cell.
Baseline
On
mainat41e2633f10:TouchRuntimeOperationFactsInput.unsupportedis a required family-level denial (packages/contracts/src/touch-runtime.ts:88), every operation input is optional, anddeclared(fact) = fact ?? input.unsupported(:103). An owner that leaves an operation blank gets the family's typed denial with the same reason and hint it would have written by hand.keyboardRuntimeOperationFacts(packages/contracts/src/keyboard-runtime.ts:46, 3 operations),gestureRuntimeOperationFacts(gesture-runtime.ts:74, 5),clipboardRuntimeOperationFacts(clipboard-runtime.ts:48, 2), plus alert (4), snapshot (3), selector-observation (2), perf (7), audio-probe (4), application-lifecycle (9).packages/platform-web/src/runtime.ts:416), webdriver (packages/provider-webdriver/src/platform-runtime.ts:568, raw keys without the builder), vega (packages/platform-vega/src/runtime.ts:203, raw keys). harmonyos implements 2 of 3.packages/platform-vega/src/runtime.ts:236), web (packages/platform-web/src/runtime.ts:401).Required work
One PR per family, in this order: keyboard, gesture, clipboard.
unsupportedcell on the input, optional per-operation inputs,declared(fact) = fact ?? input.unsupported. Owners that write raw keys (webdriver and vega for keyboard) move to the builder in the same PR, so the family has one entry point.unsupported; owners that implement part of it omit the rest. Reasons and hints are unchanged: the admission tests that assert each non-supporting platform's unavailable reason stay green with no edits.tapElementSelector). Record in the PR body the files the compiler forces before and after, and the count of unsupported-owner edits avoided.keyboard-runtime.test.tsand siblings) asserts the full fact shape for a fully-declared owner and for anunsupported-only owner.Acceptance, measurable from git
Non-goals
Dependencies
None. Builds on #2420 (
edbd96ea30).