Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compute-baseline: Can features be baseline when they don't have a specification? #1497

Open
Elchi3 opened this issue Jul 24, 2024 · 3 comments

Comments

@Elchi3
Copy link
Collaborator

Elchi3 commented Jul 24, 2024

Not sure if this is intended behavior.

If you compute the status for ShadowRoot.elementFromPoint and ShadowRoot.elementsFromPoint:

import { computeBaseline } from "compute-baseline";

console.log(
JSON.parse(computeBaseline({compatKeys: ["api.ShadowRoot.elementFromPoint", "api.ShadowRoot.elementsFromPoint"], withAncestors: false}).toJSON())
);

you get

{
  baseline: 'high',
  baseline_low_date: '2020-01-15',
  baseline_high_date: '2022-07-15',
  support: {
    chrome: '53',
    chrome_android: '53',
    edge: '79',
    firefox: '63',
    firefox_android: '63',
    safari: '11.1',
    safari_ios: '11.3'
  }
}

even though these two keys have no specification.

Issue for them to be specified: w3c/csswg-drafts#5886

Can features be baseline when they don't have a valid specification?

@foolip
Copy link
Collaborator

foolip commented Jul 24, 2024

This is unclear from the definition in https://github.com/web-platform-dx/web-features/blob/main/docs/baseline.md#interoperable-low-status. The only mention of specs in the whole document is "The specification text contains discouraging language, such as a deprecation notice, obsolescence warning, or legacy tag" but the case where there is no spec isn't mentioned.

I think we'll need to make a case-by-case judgment about this, and we haven't given these two keys a Baseline status yet, they're not part of any feature.

@Elchi3
Copy link
Collaborator Author

Elchi3 commented Jul 24, 2024

fwiw, I see 310 IDs in BCD where deprecated is false and standard_track is also false. So this question will arise for about 300 IDs. (it might also be that we need to mark some of them as deprecated: true in BCD, or that a spec exists but hasn't been added.)

Details

  1. api.AbortPaymentEvent
  2. api.AbortPaymentEvent.AbortPaymentEvent
  3. api.AbortPaymentEvent.respondWith
  4. api.BeforeInstallPromptEvent
  5. api.BeforeInstallPromptEvent.BeforeInstallPromptEvent
  6. api.BeforeInstallPromptEvent.platforms
  7. api.BeforeInstallPromptEvent.prompt
  8. api.BeforeInstallPromptEvent.userChoice
  9. api.CredentialsContainer.get.identity_option.error_api
  10. api.DataTransfer.addElement
  11. api.DataTransfer.mozCursor
  12. api.DataTransfer.mozSourceNode
  13. api.DataTransfer.mozUserCancelled
  14. api.Directory
  15. api.Directory.getFiles
  16. api.Directory.getFilesAndDirectories
  17. api.Directory.name
  18. api.Directory.path
  19. api.Document.afterscriptexecute_event
  20. api.Document.beforescriptexecute_event
  21. api.Document.browsingTopics
  22. api.Document.caretRangeFromPoint
  23. api.Document.mozSetImageElement
  24. api.Document.releaseCapture
  25. api.Element.afterscriptexecute_event
  26. api.Element.ariaRelevant
  27. api.Element.beforescriptexecute_event
  28. api.Element.gesturechange_event
  29. api.Element.gestureend_event
  30. api.Element.gesturestart_event
  31. api.Element.requestPointerLock.options_unadjustedMovement_parameter
  32. api.Element.scrollIntoViewIfNeeded
  33. api.Element.scrollLeftMax
  34. api.Element.scrollTopMax
  35. api.Element.webkitmouseforcechanged_event
  36. api.Element.webkitmouseforcedown_event
  37. api.Element.webkitmouseforceup_event
  38. api.Element.webkitmouseforcewillbegin_event
  39. api.ElementInternals.ariaRelevant
  40. api.Event.explicitOriginalTarget
  41. api.Event.originalTarget
  42. api.FileSystemHandle.move
  43. api.FileSystemHandle.remove
  44. api.GPUComputePassEncoder.writeTimestamp
  45. api.GPURenderPassEncoder.writeTimestamp
  46. api.Gamepad.vibrationActuator
  47. api.GestureEvent
  48. api.GestureEvent.altKey
  49. api.GestureEvent.clientX
  50. api.GestureEvent.clientY
  51. api.GestureEvent.ctrlKey
  52. api.GestureEvent.initGestureEvent
  53. api.GestureEvent.metaKey
  54. api.GestureEvent.rotation
  55. api.GestureEvent.scale
  56. api.GestureEvent.screenX
  57. api.GestureEvent.screenY
  58. api.GestureEvent.shiftKey
  59. api.GestureEvent.target
  60. api.HTMLCanvasElement.mozPrintCallback
  61. api.HTMLElement.anchorElement
  62. api.HTMLIFrameElement.browsingTopics
  63. api.HTMLInputElement.incremental
  64. api.HTMLInputElement.search_event
  65. api.HTMLPortalElement
  66. api.IDBDatabase.transaction.option_durability_parameter_readwriteflush
  67. api.IdentityCredential.isAutoSelected
  68. api.MediaDevices.getDisplayMedia.preferCurrentTab_option
  69. api.MediaStream.active_event
  70. api.MediaStream.inactive_event
  71. api.MediaStreamTrackGenerator
  72. api.MediaStreamTrackGenerator.MediaStreamTrackGenerator
  73. api.MediaStreamTrackGenerator.writable
  74. api.Metadata
  75. api.Metadata.modificationTime
  76. api.Metadata.size
  77. api.MouseEvent.layerX
  78. api.MouseEvent.layerY
  79. api.Navigator.buildID
  80. api.Navigator.globalPrivacyControl
  81. api.Navigator.registerProtocolHandler.scheme_parameter_cabal
  82. api.Navigator.registerProtocolHandler.scheme_parameter_dat
  83. api.Navigator.registerProtocolHandler.scheme_parameter_did
  84. api.Navigator.registerProtocolHandler.scheme_parameter_dweb
  85. api.Navigator.registerProtocolHandler.scheme_parameter_ethereum
  86. api.Navigator.registerProtocolHandler.scheme_parameter_hyper
  87. api.Navigator.registerProtocolHandler.scheme_parameter_ipfs
  88. api.Navigator.registerProtocolHandler.scheme_parameter_ipns
  89. api.Navigator.registerProtocolHandler.scheme_parameter_ssb
  90. api.Permissions.permission_clipboard-read
  91. api.Permissions.requestAll
  92. api.Request.Request.init_browsingTopics_parameter
  93. api.SVGStringList.length
  94. api.SVGTransformList.length
  95. api.Screen.availLeft
  96. api.Screen.availLeft.relative-multi-screen
  97. api.Screen.availTop
  98. api.Screen.availTop.relative-multi-screen
  99. api.Screen.left
  100. api.Screen.left.relative-multi-screen
  101. api.Screen.top.relative-multi-screen
  102. api.Selection.getComposedRanges.returns_multiple_ranges
  103. api.ServiceWorkerGlobalScope.abortpayment_event
  104. api.ShadowRoot.elementFromPoint
  105. api.ShadowRoot.elementsFromPoint
  106. api.ShadowRoot.getSelection
  107. api.SourceBuffer.appendBufferAsync
  108. api.SourceBuffer.removeAsync
  109. api.SpeechGrammar.SpeechGrammar
  110. api.StorageManager.estimate.usageDetails
  111. api.Window.dump
  112. api.Window.find
  113. api.Window.fullScreen
  114. api.Window.getDefaultComputedStyle
  115. api.Window.getDefaultComputedStyle.pseudo_element_support
  116. api.Window.mozInnerScreenX
  117. api.Window.mozInnerScreenY
  118. api.Window.resolveLocalFileSystemURL
  119. api.Window.scrollByLines
  120. api.Window.scrollByPages
  121. api.Window.scrollMaxX
  122. api.Window.scrollMaxY
  123. api.Window.sizeToContent
  124. api.Window.updateCommands
  125. api.WorkerNavigator.globalPrivacyControl
  126. api.WorkletSharedStorage.context
  127. api.console.dir_static.options_colors_parameter
  128. api.console.dir_static.options_depth_parameter
  129. api.console.dir_static.options_showHidden_parameter
  130. api.console.profileEnd_static
  131. api.console.profile_static
  132. api.console.timeStamp_static
  133. api.createImageBitmap.options_imageOrientation_parameter.none
  134. api.fetch.init_browsingTopics_parameter
  135. css.at-rules.font-face.src.format_variations
  136. css.at-rules.media.-webkit-transform-2d
  137. css.at-rules.media.prefers-color-scheme.respects-inherited-scheme
  138. css.properties.-moz-image-region
  139. css.properties.-moz-orient
  140. css.properties.-moz-orient.block
  141. css.properties.-moz-orient.inline
  142. css.properties.-webkit-app-region
  143. css.properties.-webkit-border-before
  144. css.properties.-webkit-border-horizontal-spacing
  145. css.properties.-webkit-border-vertical-spacing
  146. css.properties.-webkit-box-reflect
  147. css.properties.-webkit-column-axis
  148. css.properties.-webkit-column-break-after
  149. css.properties.-webkit-column-break-before
  150. css.properties.-webkit-column-break-inside
  151. css.properties.-webkit-column-progression
  152. css.properties.-webkit-cursor-visibility
  153. css.properties.-webkit-hyphenate-limit-after
  154. css.properties.-webkit-hyphenate-limit-before
  155. css.properties.-webkit-hyphenate-limit-lines
  156. css.properties.-webkit-initial-letter
  157. css.properties.-webkit-line-align
  158. css.properties.-webkit-line-box-contain
  159. css.properties.-webkit-line-grid
  160. css.properties.-webkit-line-snap
  161. css.properties.-webkit-locale
  162. css.properties.-webkit-logical-height
  163. css.properties.-webkit-logical-width
  164. css.properties.-webkit-margin-after
  165. css.properties.-webkit-margin-before
  166. css.properties.-webkit-mask-box-image
  167. css.properties.-webkit-mask-composite
  168. css.properties.-webkit-mask-position-x
  169. css.properties.-webkit-mask-position-y
  170. css.properties.-webkit-mask-repeat-x
  171. css.properties.-webkit-mask-repeat-y
  172. css.properties.-webkit-mask-source-type
  173. css.properties.-webkit-max-logical-height
  174. css.properties.-webkit-max-logical-width
  175. css.properties.-webkit-min-logical-height
  176. css.properties.-webkit-min-logical-width
  177. css.properties.-webkit-nbsp-mode
  178. css.properties.-webkit-perspective-origin-x
  179. css.properties.-webkit-perspective-origin-y
  180. css.properties.-webkit-rtl-ordering
  181. css.properties.-webkit-tap-highlight-color
  182. css.properties.-webkit-text-combine
  183. css.properties.-webkit-text-decoration-skip
  184. css.properties.-webkit-text-decorations-in-effect
  185. css.properties.-webkit-text-security
  186. css.properties.-webkit-text-zoom
  187. css.properties.-webkit-touch-callout
  188. css.properties.-webkit-transform-origin-x
  189. css.properties.-webkit-transform-origin-y
  190. css.properties.-webkit-transform-origin-z
  191. css.properties.-webkit-user-drag
  192. css.properties.-webkit-user-modify
  193. css.properties.caption-side.bottom-outside
  194. css.properties.caption-side.left
  195. css.properties.caption-side.right
  196. css.properties.caption-side.top-outside
  197. css.properties.flex-grow.less_than_zero_animate
  198. css.properties.font-smooth
  199. css.properties.mask-clip.border
  200. css.properties.mask-clip.content
  201. css.properties.mask-clip.padding
  202. css.properties.mask-clip.text
  203. css.properties.mask-origin.border
  204. css.properties.mask-origin.content
  205. css.properties.mask-origin.padding
  206. css.properties.text-rendering.auto
  207. css.properties.text-rendering.geometricPrecision
  208. css.selectors.-moz-color-swatch
  209. css.selectors.-moz-first-node
  210. css.selectors.-moz-focus-inner
  211. css.selectors.-moz-last-node
  212. css.selectors.-moz-list-bullet
  213. css.selectors.-moz-list-number
  214. css.selectors.-moz-only-whitespace
  215. css.selectors.-moz-progress-bar
  216. css.selectors.-moz-range-progress
  217. css.selectors.-moz-range-thumb
  218. css.selectors.-moz-range-track
  219. css.selectors.-moz-submit-invalid
  220. css.selectors.-moz-window-inactive
  221. css.selectors.-webkit-inner-spin-button
  222. css.selectors.-webkit-meter-bar
  223. css.selectors.-webkit-meter-even-less-good-value
  224. css.selectors.-webkit-meter-inner-element
  225. css.selectors.-webkit-meter-optimum-value
  226. css.selectors.-webkit-meter-suboptimum-value
  227. css.selectors.-webkit-progress-bar
  228. css.selectors.-webkit-progress-inner-element
  229. css.selectors.-webkit-progress-value
  230. css.selectors.-webkit-resizer
  231. css.selectors.-webkit-scrollbar
  232. css.selectors.-webkit-scrollbar-button
  233. css.selectors.-webkit-scrollbar-corner
  234. css.selectors.-webkit-scrollbar-thumb
  235. css.selectors.-webkit-scrollbar-track
  236. css.selectors.-webkit-scrollbar-track-piece
  237. css.selectors.-webkit-search-cancel-button
  238. css.selectors.-webkit-search-results-button
  239. css.selectors.hover.a_elements
  240. css.selectors.hover.all_elements
  241. html.elements.iframe.browsingtopics
  242. html.elements.iframe.sandbox.allow-storage-access-by-user-activation
  243. html.elements.input.type_password.insecure_login_handling
  244. html.global_attributes.anchor
  245. html.manifest.serviceworker
  246. html.manifest.serviceworker.scope
  247. html.manifest.serviceworker.src
  248. html.manifest.serviceworker.use_cache
  249. http.headers.Cache-Control.stale-if-error
  250. http.headers.Cache-Control.stale-while-revalidate
  251. http.headers.Content-Security-Policy.form-action.blocks_redirects
  252. http.headers.Observe-Browsing-Topics
  253. http.headers.Permissions-Policy.browsing-topics
  254. http.headers.Sec-Browsing-Topics
  255. http.headers.Sec-GPC
  256. http.headers.Snapshot-Content-Location
  257. http.headers.X-DNS-Prefetch-Control
  258. http.headers.X-XSS-Protection
  259. javascript.builtins.AggregateError.serializable_object
  260. javascript.builtins.Error.Error.fileName_parameter
  261. javascript.builtins.Error.Error.lineNumber_parameter
  262. javascript.builtins.Error.cause.displayed_in_console
  263. javascript.builtins.Error.columnNumber
  264. javascript.builtins.Error.fileName
  265. javascript.builtins.Error.lineNumber
  266. javascript.builtins.Error.stack
  267. javascript.builtins.Function.displayName
  268. javascript.builtins.InternalError
  269. javascript.builtins.InternalError.InternalError
  270. javascript.grammar.trailing_commas.trailing_commas_in_dynamic_import
  271. javascript.operators.import.options_parameter
  272. mathml.attribute_values.named_space
  273. mathml.attribute_values.nonzero_unitless_values
  274. mathml.elements.menclose
  275. mathml.elements.menclose.notation
  276. mathml.elements.menclose.notation.actuarial
  277. mathml.elements.menclose.notation.bottom
  278. mathml.elements.menclose.notation.box
  279. mathml.elements.menclose.notation.circle
  280. mathml.elements.menclose.notation.downdiagonalstrike
  281. mathml.elements.menclose.notation.horizontalstrike
  282. mathml.elements.menclose.notation.left
  283. mathml.elements.menclose.notation.longdiv
  284. mathml.elements.menclose.notation.madruwb
  285. mathml.elements.menclose.notation.phasorangle
  286. mathml.elements.menclose.notation.right
  287. mathml.elements.menclose.notation.roundedbox
  288. mathml.elements.menclose.notation.top
  289. mathml.elements.menclose.notation.updiagonalarrow
  290. mathml.elements.menclose.notation.updiagonalstrike
  291. mathml.elements.menclose.notation.verticalstrike
  292. mathml.elements.mo.accent
  293. mathml.elements.mpadded.relative_values
  294. mathml.elements.mtable.align
  295. mathml.elements.mtable.columnalign
  296. mathml.elements.mtable.columnlines
  297. mathml.elements.mtable.columnspacing
  298. mathml.elements.mtable.frame
  299. mathml.elements.mtable.framespacing
  300. mathml.elements.mtable.rowalign
  301. mathml.elements.mtable.rowlines
  302. mathml.elements.mtable.rowspacing
  303. mathml.elements.mtable.width
  304. mathml.elements.mtd.columnalign
  305. mathml.elements.mtd.rowalign
  306. mathml.elements.mtr.columnalign
  307. mathml.elements.mtr.rowalign
  308. mathml.global_attributes.href
  309. webassembly.api.Exception.Exception.options_parameter_traceStack
  310. webassembly.api.Exception.stack

@ddbeck
Copy link
Collaborator

ddbeck commented Jul 24, 2024

Abstractly, I think this is a step removed from computing a status: what feature would unspecified behavior be a part of?

More concretely, unspecified behavior wouldn't have a reportable status because it wouldn't be part of a web-features feature. And even if it were, how would we be able to review the status that would result, if what "should" happen is indeterminate?

Eventually getStatus() will actually assert this by checking whether a key is part of a feature or not, but this doesn't actually happen yet.

Pragmatically, I suppose that unspecified but interoperable behavior could be included in a feature, as it would be a de facto standard. But I suspect the exception would be easy to make, because it'd be very likely that a proposal exists to specify that behavior.

(And for unspecified single-engine behaviors, I suppose we could consider some kind of "unspecified" status to live alongside Baseline. We'll probably want to have some sort of deprecated or discouraged status as well, so developers can understand support in that context.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants