extends: spectral:oas rules: steelcase-operation-ids-camel-case: description: >- Steelcase RoomWizard API operation IDs use camelCase naming convention. message: "Operation ID '{{value}}' should use camelCase." severity: warn given: "$.paths[*][*].operationId" then: function: casing functionOptions: type: camel steelcase-summaries-title-case: description: >- All Steelcase RoomWizard API operation summaries must use Title Case. message: "Summary '{{value}}' should be in Title Case." severity: warn given: "$.paths[*][*].summary" then: function: pattern functionOptions: match: "^[A-Z][a-zA-Z0-9]*(\\s[A-Z][a-zA-Z0-9]*)*$" steelcase-tags-required: description: >- Every Steelcase API operation must have at least one tag. message: "Operations must declare at least one tag." severity: error given: "$.paths[*][*]" then: field: tags function: truthy steelcase-booking-required-fields: description: >- Booking creation requests must include room_id, subject, start_time, and end_time as required fields. message: >- BookingCreate schema must require room_id, subject, start_time, and end_time fields. severity: error given: "$.components.schemas.BookingCreate" then: field: required function: schema functionOptions: schema: type: array contains: type: string enum: - room_id - subject - start_time - end_time steelcase-date-time-format: description: >- All date and time properties in the Steelcase API should use ISO 8601 date-time format. message: >- Date/time fields should declare format: date-time for consistency. severity: warn given: "$.components.schemas[*].properties[?(@ =~ /.*_time$|.*_at$/)]" then: field: format function: enumeration functionOptions: values: - date-time - date steelcase-snake-case-properties: description: >- Steelcase RoomWizard API properties use snake_case naming convention (e.g., room_id, start_time, booking_id). message: "Property '{{property}}' should use snake_case naming." severity: warn given: "$.components.schemas[*].properties" then: function: schema functionOptions: schema: type: object propertyNames: pattern: "^[a-z][a-z0-9]*(_[a-z0-9]+)*$" steelcase-status-enum: description: >- Booking status should use the standard Steelcase status values. message: >- Booking status must be one of: confirmed, cancelled, in-progress, completed. severity: warn given: "$.components.schemas.Booking.properties.status.enum" then: function: truthy steelcase-responses-json: description: >- Steelcase API responses should return application/json content type. message: "Success responses must include application/json content." severity: warn given: "$.paths[*][*].responses['200'].content" then: function: truthy