Governance & Lint
A Spectral-style, governance-as-code policy gate over your contract: naming consistency, date-time and enum hygiene, required-field correctness, example coverage, ownership and lifecycle, plus cross-environment policy drift — each finding actionable, each rule enforceable.
Active canonical findings
6
Attention actionable
6
Release finding rows
12
Waivers
0 active · 0 expired
Active canonical findings
3 mutating endpoint(s) have no behavioural scenario
gov.business.mutation-no-scenario · api/api_orders
Observed nowmediumopenSchema validation does not capture business rules — which input yields which status code or downstream effect. These mutating endpoints have no scenario: POST /orders, PATCH /orders/{id}, POST /orders/{id}/fulfill.
Schema ships no example
gov.examples.schema-no-example · api/api_orders
Observed nowlowopenSchema "OrderItem" (7 fields) has no example payload. Without examples, docs are harder to read and test-data generation is guesswork.
Success response has no example
gov.examples.operation-no-example · operation/ep_api_orders_2
Observed nowlowopenGET /orders/{id} returns 200 but ships no response example. Consumers cannot see the expected shape without calling the live API.
Success response has no example
gov.examples.operation-no-example · operation/ep_api_orders_3
Observed nowlowopenPATCH /orders/{id} returns 200 but ships no response example. Consumers cannot see the expected shape without calling the live API.
Success response has no example
gov.examples.operation-no-example · operation/ep_api_orders_4
Observed nowlowopenPOST /orders/{id}/fulfill returns 202 but ships no response example. Consumers cannot see the expected shape without calling the live API.
Success response has no example
gov.examples.operation-no-example · operation/ep_api_orders_1
Observed nowlowopenPOST /orders returns 201 but ships no response example. Consumers cannot see the expected shape without calling the live API.
Waiver expiry and reopen truth
Actor: governance-ui-local-owner · role owner · declared unauthenticated. This local declaration is not authenticated approval.
Backend and audit authority: HOLD. No backend identity, authenticated approver, or server audit trail is claimed. Expiry transitions are deterministic local-system events.
6 active finding(s) across 2 categories, under 10 enforced policies.
| Rule | Severity | Parameter | Remediation |
|---|---|---|---|
| sm-info-complete Info block is complete | — | Give the API a title, version, description and a contact or licence. | |
| sm-op-summary Operations have a short summary | Add a one-line summary; keep it under the configured length. | ||
| sm-op-description Operations have a description | — | Describe what the operation does beyond its summary. | |
| sm-operation-id operationId present and camelCase | Give every operation a unique operationId in the configured casing. | ||
| sm-path-style Path segments follow one casing | Rename the path segment to the configured casing. | ||
| sm-param-style Parameter names follow one casing | Rename the parameter to the configured casing. | ||
| sm-schema-naming Component schema names are PascalCase | Rename the component to the configured casing. | ||
| sm-property-style Property names follow one casing | Rename the property to the configured casing. | ||
| sm-response-4xx Operations declare a client-error response | — | Declare at least one 4xx response so consumers can handle failure. | |
| sm-response-default Operations declare a default or 5xx response | — | Declare `default` or a 5xx response for unexpected failures. | |
| sm-examples Bodies carry examples | — | Add an `example` or `examples` to the media type. | |
| sm-enum-upper Enum values are SCREAMING_SNAKE | — | Rename enum values to SCREAMING_SNAKE_CASE. | |
| sm-no-empty-schema No empty schemas | — | Describe the shape, or remove the empty schema object. | |
| sm-tags-defined Operation tags are declared at the root | — | Declare the tag in the root `tags` array with a description. | |
| sm-server-https Servers use HTTPS | — | Use an https server URL; localhost is exempt. | |
| sm-security-defined Referenced security schemes exist | — | Declare the scheme under securitySchemes, or remove the requirement. |
The default guide runs for every workspace member, so findings and scores are visible without the editing right. Editing the guide and the cross-project report are the parts that need the higher tier.
- Approval integritypass
A mapping approval was given by someone other than the person who requested it, and still binds the mapping it approved.
- Naming consistencypass
Path casing, parameter & property naming, and collection plurality follow one convention.
- Date-time modellingpass
Temporal fields use a proper date / date-time format, not free-form strings.
- Enum governancepass
Enums use one casing style, declare defaults, and resolve nullability.
- Required-field correctnesspass
Path parameters and write bodies declare required fields accurately.
- Example coverage5
Operations and schemas ship usable examples for docs and test data.
- Lifecycle & deprecationpass
Deprecated endpoints carry a sunset notice; lifecycle is coherent.
- Ownership & inventorypass
Every API and endpoint has a named owner — no shadow / orphan surface.
- Cross-environment policypass
Auth mode and key-enforcement are consistent across environments.
- Business-rule governance1
Mutating / error paths are governed by behavioural scenarios, not just schema.
- lowSchema ships no examplegov.examples.schema-no-example
Schema "OrderItem" (7 fields) has no example payload. Without examples, docs are harder to read and test-data generation is guesswork.
Fix: Add a representative `example` to "OrderItem" — it doubles as documentation and a scenario / mock seed.Pain-point#17#39 - lowSuccess response has no examplegov.examples.operation-no-example/orders
POST /orders returns 201 but ships no response example. Consumers cannot see the expected shape without calling the live API.
Fix: Attach at least one example to the success response of POST /orders (a Data Pack or generated mock can seed it).Pain-point#17 - lowSuccess response has no examplegov.examples.operation-no-example/orders/{id}
GET /orders/{id} returns 200 but ships no response example. Consumers cannot see the expected shape without calling the live API.
Fix: Attach at least one example to the success response of GET /orders/{id} (a Data Pack or generated mock can seed it).Pain-point#17 - lowSuccess response has no examplegov.examples.operation-no-example/orders/{id}
PATCH /orders/{id} returns 200 but ships no response example. Consumers cannot see the expected shape without calling the live API.
Fix: Attach at least one example to the success response of PATCH /orders/{id} (a Data Pack or generated mock can seed it).Pain-point#17 - lowSuccess response has no examplegov.examples.operation-no-example/orders/{id}/fulfill
POST /orders/{id}/fulfill returns 202 but ships no response example. Consumers cannot see the expected shape without calling the live API.
Fix: Attach at least one example to the success response of POST /orders/{id}/fulfill (a Data Pack or generated mock can seed it).Pain-point#17
- medium3 mutating endpoint(s) have no behavioural scenariogov.business.mutation-no-scenario
Schema validation does not capture business rules — which input yields which status code or downstream effect. These mutating endpoints have no scenario: POST /orders, PATCH /orders/{id}, POST /orders/{id}/fulfill.
Fix: Author at least one scenario (happy-path + a validation/error path) per mutating endpoint so business behaviour is governed, not just the schema shape.Pain-point#6#5#8