Reference
The standard every Qamar Labs specification is scored against — five dimensions, 100 points.
This is the rubric we grade our own specifications against before a line of code is written. Every spec earns a score out of 100 across five dimensions; a low score sends the spec back, not forward. We publish it because a standard you can read is more convincing than one you are asked to trust — use it as a reference, or download it and grade your own work by it.
Download the rubric (Qamar-Labs-Specification-Grading-Rubric.md)Score is between 1 and 100 (Clarity 25 + Completeness 25 + Testability 20 + Consistency 20 + Appropriate Abstraction 10)
Terms defined, no ambiguity.
The system should respond quickly and handle a reasonable number of users."Quickly" and "reasonable" are undefined — two readers will implement two different systems.
Search requests MUST return within 200ms at p95 under a load of 500 concurrent users.
"Search request" = any call to the /search endpoint with a non-empty query parameter.All templates, all sections present, no [TBD] markers.
## Error Handling
[TBD — ask backend team]## Error Handling
Invalid input returns a validation error listing each failed field.
Expired sessions redirect the user to login, preserving their draft input.
Open question: rate-limit threshold — owned by @platform-team, due 2026-08-15.Unknowns are allowed only when explicitly owned and dated — never a bare [TBD].
Given/When/Then format, concrete examples with real data.
When a user cancels their subscription, they should get some kind of confirmation.Given user 7f3e9d2a-1c4b-4e8f-9a6d-2b5c8e1f0a3d has an active subscription
When they submit a cancellation on 2026-08-02T14:30:00Z
Then the subscription status becomes "cancelled"
And a confirmation email is sent within 5 minutes containing the end-of-service date 2026-09-01Real formats: UUIDs, ISO-8601 timestamps, exact status values.
Follows Claude constitution (Claude.md), matches existing API patterns.
POST /createNewUser → { "user_name": "ali", "CreatedDate": "08/02/2026" }Invents verb-based endpoint, mixed casing, and non-ISO date — contradicts established conventions.
POST /users → { "userName": "ali", "createdAt": "2026-08-02T14:30:00Z" }Resource-based route, camelCase fields, ISO-8601 dates — matches existing API patterns in Claude.md.
WHAT, not HOW. No database/code details.
Store users in a PostgreSQL `users` table with a B-tree index on the email column,
and cache lookups in Redis with a 15-minute TTL.The system MUST retrieve a user account by email address in under 100ms,
and email lookup MUST remain correct immediately after an email change.States the behavior and constraint; leaves storage, indexing, and caching to implementation.
"Chose camelCase over snake_case — conventions (rule 2) outrank the newer draft section."Want it as a file you can keep or grade against?
Download the rubric (Qamar-Labs-Specification-Grading-Rubric.md)