nova-specs/7fde79a92c2c6eb5d2df578f783...

487 lines
28 KiB
Plaintext

{
"comments": [
{
"unresolved": false,
"key": {
"uuid": "a58df4ef_731d3072",
"filename": "/PATCHSET_LEVEL",
"patchSetId": 5
},
"lineNbr": 0,
"author": {
"id": 7166
},
"writtenOn": "2024-03-28T10:37:39Z",
"side": 1,
"message": "While I\u0027m quite OK with the usecase, I think the current spec is a bit abstract for Nova : I don\u0027t really know what we need to do for our API.",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "340df78f_0ca811f0",
"filename": "/PATCHSET_LEVEL",
"patchSetId": 5
},
"lineNbr": 0,
"author": {
"id": 8556
},
"writtenOn": "2024-04-10T18:59:39Z",
"side": 1,
"message": "On Request (nova side) and response json schema (Tempest side) and its validation, we do have those currently. If any of the validation in any schema is missing we can add those right?\n\nOther things we need to be very careful about adding more strict validation is that we do not break users and if any API validation change behavior then it should be done in microversion (For example we did in 2.75 microversion).",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "39feb245_f08c86d8",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 72,
"author": {
"id": 8556
},
"writtenOn": "2024-04-10T18:59:39Z",
"side": 1,
"message": "so we have made all the schema with additionalProperties\u003dFalse in microversion 2.75. I think we have made API request more restrictive and hard to use incorrectly with existing json shcema validation. I am not sure which schema are empty and if there are we can always improve those.\n\n- https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id68",
"range": {
"startLine": 71,
"startChar": 0,
"endLine": 72,
"endChar": 69
},
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "3900f934_a2b089a2",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 72,
"author": {
"id": 15334
},
"writtenOn": "2024-04-11T09:19:37Z",
"side": 1,
"message": "I\u0027ve clarified the wording here and added an addendum indicating the methods that are missing schemas right now.",
"parentUuid": "39feb245_f08c86d8",
"range": {
"startLine": 71,
"startChar": 0,
"endLine": 72,
"endChar": 69
},
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "3adec4c6_193c799b",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 88,
"author": {
"id": 8556
},
"writtenOn": "2024-04-10T18:59:39Z",
"side": 1,
"message": "We already have that but in the tempest side. We have the response schema for all the compute APIs and all microversions[1]. Each API call made by the Tempest tests in all jobs validate the API response schema[2] and fails if there is any unknown field or type. This has been a strict validation and helped us to avoid any backward compatible changes.\n\nIf we want to do such validation at Nova side, we can discuss to move Tempest response schema and it validation in Nova API side.\n\n[1] https://github.com/openstack/tempest/tree/c0da6e843a74c2392c8e87e8ff36d2fea12949c4/tempest/lib/api_schema/response/compute\n\n[2] https://github.com/openstack/tempest/blob/c0da6e843a74c2392c8e87e8ff36d2fea12949c4/tempest/lib/services/compute/servers_client.py#L126",
"range": {
"startLine": 77,
"startChar": 0,
"endLine": 88,
"endChar": 16
},
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "07c57752_0f04ed4a",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 88,
"author": {
"id": 15334
},
"writtenOn": "2024-04-11T09:19:37Z",
"side": 1,
"message": "I\u0027ve updated the spec to reflect this.",
"parentUuid": "3adec4c6_193c799b",
"range": {
"startLine": 77,
"startChar": 0,
"endLine": 88,
"endChar": 16
},
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "1cafeecf_b3b40797",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 214,
"author": {
"id": 7166
},
"writtenOn": "2024-03-28T10:37:39Z",
"side": 1,
"message": "I\u0027d like to know which ones by this spec. I can\u0027t find anyone AFAICR so I\u0027d be interested in knowing the ones and how many we need to add.",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "46906d4b_1d5497de",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 214,
"author": {
"id": 15334
},
"writtenOn": "2024-03-28T17:22:48Z",
"side": 1,
"message": "Many of our actions do no validation of the value. For example, this is currently completely valid:\n\n```\nPOST /servers/123/action\n{\n \"pause\": {\n \"foo\": \"bar\",\n \"wow\": [\"this should not be allowed, surely\"]\n }\n}\n```\n\nMy plan is add very loose schemas that continue to allow this (i.e. effectively empty schemas for now), with the idea being that we could (could, not must) tighten them up in a future microversion. That tightening up of the schema is explicitly out-of-scope of this effort.\n\nIn addition, many of the deprecated and removed APIs have no schemas. This isn\u0027t a big deal right now - they\u0027re deprecated/removed - but it does matter from a schema generation (and therefore client and doc generation) perspective.\n\nThese gaps will be obvious once I push up patches, given I am adding tests to validate that all `POST` actions are decorated correctly (see below). I can list them here but hopefully you can take my word on this (and my explanation above).",
"parentUuid": "1cafeecf_b3b40797",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "f41158dc_1e8e1401",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 214,
"author": {
"id": 15334
},
"writtenOn": "2024-03-28T18:04:40Z",
"side": 1,
"message": "For what it\u0027s worth, here are the methods that my test shows as missing request body schemas right now:\n\n- `AdminActionsController._inject_network_info` \n- `AdminActionsController._reset_network` \n- `AgentController.create` \n- `AgentController.update` \n- `BareMetalNodeController._add_interface` \n- `BareMetalNodeController._remove_interface` \n- `BareMetalNodeController.create` \n- `CellsController.create` \n- `CellsController.sync_instances` \n- `CellsController.update` \n- `CertificatesController.create` \n- `CloudpipeController.create` \n- `CloudpipeController.update` \n- `ConsolesController.create` \n- `DeferredDeleteController._force_delete` \n- `DeferredDeleteController._restore` \n- `FixedIPController.reserve` \n- `FixedIPController.unreserve` \n- `FloatingIPBulkController.create` \n- `FloatingIPBulkController.update` \n- `FloatingIPController.create`\n- `FloatingIPBulkController.create` \n- `FloatingIPBulkController.update` \n- `FloatingIPController.create` \n- `FloatingIPDNSDomainController.update` \n- `FloatingIPDNSEntryController.update` \n- `LockServerController._unlock`\n- `NetworkAssociateActionController._associate_host`\n- `NetworkAssociateActionController._disassociate_host_only`\n- `NetworkAssociateActionController._disassociate_project_only`\n- `NetworkController._disassociate_host_and_project`\n- `NetworkController.add`\n- `NetworkController.create`\n- `PauseServerController._pause`\n- `PauseServerController._unpause`\n- `RemoteConsolesController.get_rdp_console` \n- `RescueController._unrescue`\n- `SecurityGroupActionController._addSecurityGroup`\n- `SecurityGroupActionController._removeSecurityGroup`\n- `SecurityGroupController.create`\n- `SecurityGroupController.update`\n- `SecurityGroupDefaultRulesController.create`\n- `SecurityGroupRulesController.create`\n- `ServersController._action_confirm_resize` \n- `ServersController._action_revert_resize`\n- `ServersController._start_server`\n- `ServersController._stop_server`\n- `ShelveController._shelve`\n- `ShelveController._shelve_offload`\n- `SuspendServerController._resume`\n- `SuspendServerController._suspend`\n- `TenantNetworkController.create`\n\nI can dump this in here if you want but like as noted proving things via code (in a test) seems better",
"parentUuid": "46906d4b_1d5497de",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "2ae2a244_533df84d",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 214,
"author": {
"id": 15334
},
"writtenOn": "2024-04-11T10:13:16Z",
"side": 1,
"message": "I dumped it in the spec.",
"parentUuid": "f41158dc_1e8e1401",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "1d41b781_1b337908",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 216,
"author": {
"id": 7166
},
"writtenOn": "2024-03-28T10:37:39Z",
"side": 1,
"message": "ditto here.",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "72ed7f81_eb601d27",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 216,
"author": {
"id": 15334
},
"writtenOn": "2024-03-28T17:22:48Z",
"side": 1,
"message": "While query strings are possible for all HTTP methods, we only use them for `GET` requests. So this means every `index`, `detail` and `show` method that doesn\u0027t currently have a `validation.query_schema` decorator. As above, I _could_ list these but as I am including a test to make sure all methods that accept `GET` request are decorated, I\u0027d rather not if that\u0027s okay.",
"parentUuid": "1d41b781_1b337908",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "8fe7fdc0_c1f237f6",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 216,
"author": {
"id": 15334
},
"writtenOn": "2024-03-28T18:04:40Z",
"side": 1,
"message": "As above, here\u0027s my current list for APIs missing query string schemas:\n\n- `AgentController.index`\n- `AggregateController.index`\n- `AggregateController.show`\n- `AvailabilityZoneController.detail`\n- `AvailabilityZoneController.index`\n- `BareMetalNodeController.index`\n- `BareMetalNodeController.show`\n- `CellsController.capacities`\n- `CellsController.detail`\n- `CellsController.index`\n- `CellsController.info`\n- `CellsController.show`\n- `CertificatesController.show`\n- `CloudpipeController.index`\n- `ConsoleAuthTokensController.show`\n- `ConsolesController.index`\n- `ConsolesController.show`\n- `ExtensionInfoController.index`\n- `ExtensionInfoController.show`\n- `FixedIPController.show`\n- `FlavorAccessController.index`\n- `FlavorExtraSpecsController.index`\n- `FlavorExtraSpecsController.show`\n- `FlavorsController.show`\n- `FloatingIPBulkController.index`\n- `FloatingIPBulkController.show`\n- `FloatingIPController.index`\n- `FloatingIPController.show`\n- `FloatingIPDNSDomainController.index`\n- `FloatingIPDNSEntryController.show`\n- `FloatingIPPoolsController.index`\n- `FpingController.index`\n- `FpingController.show`\n- `HostController.reboot`\n- `HostController.show`\n- `HostController.shutdown`\n- `HostController.startup`\n- `HypervisorsController.detail`\n- `HypervisorsController.index`\n- `HypervisorsController.search`\n- `HypervisorsController.servers`\n- `HypervisorsController.show`\n- `HypervisorsController.statistics`\n- `HypervisorsController.uptime`\n- `IPsController.index`\n- `IPsController.show`\n- `ImageMetadataController.index`\n- `ImageMetadataController.show`\n- `ImagesController.detail`\n- `ImagesController.index`\n- `ImagesController.show`\n- `InstanceActionsController.index`\n- `InstanceActionsController.show`\n- `InstanceUsageAuditLogController.index`\n- `InstanceUsageAuditLogController.show`\n- `InterfaceAttachmentController.index`\n- `InterfaceAttachmentController.show`\n- `NetworkController.index`\n- `NetworkController.show`\n- `QuotaClassSetsController.show`\n- `QuotaSetsController.defaults`\n- `QuotaSetsController.detail`\n- `QuotaSetsController.show`\n- `SecurityGroupController.show`\n- `SecurityGroupDefaultRulesController.index`\n- `SecurityGroupDefaultRulesController.show`\n- `ServerDiagnosticsController.index`\n- `ServerGroupController.show`\n- `ServerMetadataController.index`\n- `ServerMetadataController.show`\n- `ServerMigrationsController.index`\n- `ServerMigrationsController.show`\n- `ServerPasswordController.index`\n- `ServerSecurityGroupController.index`\n- `ServerTagsController.index`\n- `ServerTagsController.show`\n- `ServerTopologyController.index`\n- `ServerVirtualInterfaceController.index`\n- `ServersController.show`\n- `SnapshotController.show`\n- `TenantNetworkController.index`\n- `TenantNetworkController.show`\n- `VersionsController.show`\n- `VolumeAttachmentController.show`\n- `VolumeController.show`\n\nMany of these are expected since they\u0027re dead APIs, but we will want the (minimal) schemas in place for documentation purposes.",
"parentUuid": "72ed7f81_eb601d27",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "861097be_865c8fc1",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 216,
"author": {
"id": 15334
},
"writtenOn": "2024-04-11T10:13:16Z",
"side": 1,
"message": "I dumped it in the spec.",
"parentUuid": "8fe7fdc0_c1f237f6",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "f3a696ec_7a703812",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 218,
"author": {
"id": 7166
},
"writtenOn": "2024-03-28T10:37:39Z",
"side": 1,
"message": "ditto here",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "6d841a24_d32b8dac",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 218,
"author": {
"id": 15334
},
"writtenOn": "2024-03-28T17:22:48Z",
"side": 1,
"message": "We currently have no schemas for response bodies (or anything else in the response), so this will apply to every API and action we have.",
"parentUuid": "f3a696ec_7a703812",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "c22a6926_fdbe191c",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 220,
"author": {
"id": 7166
},
"writtenOn": "2024-03-28T10:37:39Z",
"side": 1,
"message": "I guess we\u0027re missing the main point : we could use another tool then.",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "746b6624_bfab33e2",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 220,
"author": {
"id": 15334
},
"writtenOn": "2024-03-28T17:22:48Z",
"side": 1,
"message": "~~I don\u0027t understand. Could you rephrase? Another tool for what?~~\n\nLater: Oh, you\u0027re asking what we do next once we have added all these schemas? After that we will need a tool that will inspect our `Router`, extract the schemas for each path+method(+action), and spit out an openapi spec that uses all these schemas combined. I haven\u0027t included this step here yet since I\u0027m still not certain where this tool will live and I don\u0027t want to lie. While the Sphinx extension and code generator should definitely *not* live in Nova (since it\u0027s broadly applicable), the code to generate the schema file _could_. I\u0027d like to discuss this at the PTG and I suspect the decision on where it lives will be based on our ability to use similar tooling across Nova, Cinder, Glance, etc. In any case, this shouldn\u0027t stop us pushing ahead with adding schemas since we will eventually be able to use them _somehow_.",
"parentUuid": "c22a6926_fdbe191c",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "9c347137_9e57ba73",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 220,
"author": {
"id": 27900
},
"writtenOn": "2024-03-28T17:27:30Z",
"side": 1,
"message": "the tool exactly for that lives in openstack/codegenerator and has dedicated zuul jobs for generating spec by inspecting router.",
"parentUuid": "746b6624_bfab33e2",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "78749f3f_8041f6dc",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 220,
"author": {
"id": 15334
},
"writtenOn": "2024-03-28T18:05:29Z",
"side": 1,
"message": "Thanks, gtema. I wasn\u0027t sure if it was in `openstack/*` yet. That\u0027s good to know 🎉",
"parentUuid": "9c347137_9e57ba73",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "9705d4a2_9cbec8aa",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 220,
"author": {
"id": 11604
},
"writtenOn": "2024-04-07T04:50:02Z",
"side": 1,
"message": "i am pretty sad to see that that repo was create containing schema for nova as i objected to that explictly on the mailing list\n\nhttps://opendev.org/openstack/codegenerator/src/branch/master/codegenerator/openapi/nova_schemas.py\n\ni hope that if we proceed with this spec one of the actions would be removing the hardcode schmea for nova form that repo\n\nthe comninded openai schema for nova should be a build output of the nova repo hosted on a page of our docs sight and ideally generatable by runing the tool hosted in the codegenerator repo for packagers.",
"parentUuid": "78749f3f_8041f6dc",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "4bee64e7_30e764a9",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 220,
"author": {
"id": 27900
},
"writtenOn": "2024-04-07T06:08:44Z",
"side": 1,
"message": "the code is full of comments that those schemas are only temporary in the generator and are to be moved into corresponding services code. I was also writing explicitly that this is going to be do e like that. Point is not to get stuck while discussing but instead having the code and possible result visible and further work on normalizing the code. There is now less work to do since schemas are created and just need to be moved between repos. Other services are not that far to start even discussing, so without schemas temporary implemented in the generator we would not be a single step ahead with the idea of having OpenAPI specs available at all.",
"parentUuid": "9705d4a2_9cbec8aa",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "8071b9c5_99cc8943",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 220,
"author": {
"id": 15334
},
"writtenOn": "2024-04-11T09:19:37Z",
"side": 1,
"message": "\u003e i hope that if we proceed with this spec one of the actions would be removing the hardcode schmea for nova form that repo\n\nWhat gtema said. The hardcoding of specs and schemas is intended as a stopgap solution until we get the schemas in-tree and can build the specs there (i.e. the _whole_ purpose of this spec and effort in general). We **do not** want to maintain these out-of-tree for all the reasons I have listed in the spec.",
"parentUuid": "4bee64e7_30e764a9",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "eb7fa1de_0e0ea052",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 230,
"author": {
"id": 7166
},
"writtenOn": "2024-03-28T10:37:39Z",
"side": 1,
"message": "Well, I\u0027d like to make sure that our dependency would be an important service used by all of the projects and where we are some team for it.",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": true,
"key": {
"uuid": "0d6bdfa7_53cb578c",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 230,
"author": {
"id": 15334
},
"writtenOn": "2024-03-28T17:22:48Z",
"side": 1,
"message": "I don\u0027t understand. Could you rephrase?",
"parentUuid": "eb7fa1de_0e0ea052",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
},
{
"unresolved": false,
"key": {
"uuid": "dedd07f6_b72b3bc9",
"filename": "specs/2024.2/approved/openapi.rst",
"patchSetId": 5
},
"lineNbr": 230,
"author": {
"id": 7166
},
"writtenOn": "2024-04-11T15:13:02Z",
"side": 1,
"message": "I meant that I\u0027d like this tool to be largely shared between projects, but it sounds it will be the case, so closing my comment.",
"parentUuid": "0d6bdfa7_53cb578c",
"revId": "7fde79a92c2c6eb5d2df578f7835711e9a4de1f6",
"serverId": "4a232e18-c5a9-48ee-94c0-e04e7cca6543"
}
]
}