Skip to main content

Definition of Done

Definition of Done

Project: Bilko Version: 0.1 Date: 2026-02-23 Author: Ops Architect Status: Draft Reviewers: Tech Lead, Alem Bašić

Document History

Version Date Author Changes
0.1 2026-02-23 Ops Architect Initial draft

1. Overview

A feature, bug fix, or task is Done only when it meets ALL criteria in the applicable checklist below. "Done" means deployed to production and working — not just "code written" or "PR merged".

Financial features have additional criteria due to accounting correctness requirements (NUMERIC precision, double-entry validation, VAT accuracy).


2. Definition of Done — Story / Feature

Code Quality

  • Code reviewed by at least 1 other engineer (PR approved)
  • No TypeScript errors (pnpm run type-check passes)
  • No ESLint errors (pnpm run lint passes)
  • No Prettier violations
  • No console.log left in production code
  • No any types without justification comment
  • No hardcoded secrets, URLs, or magic numbers without constants

Testing

  • Unit tests written for all new business logic
  • Integration tests written for all new API endpoints
  • All existing tests still pass (pnpm run test)
  • Overall coverage did not decrease below 80%
  • Financial logic coverage ≥ 95% (if feature includes VAT, double-entry, currency)
  • Edge cases tested (empty input, null, boundary values)
  • Multi-tenant isolation tested (org A cannot access org B's data)

Financial Logic (Required if feature touches accounting)

  • All monetary values use Decimal (never JavaScript number for money)
  • NUMERIC(19,4) precision maintained throughout (no float drift)
  • Double-entry balance verified (debit = credit in every transaction)
  • VAT calculation tested for all applicable countries (RS/BA/HR)
  • Exchange rate locked at transaction date (not current rate)
  • Unit tests explicitly assert .toString() equality on Decimal values (not .toNumber())

Documentation

  • JSDoc added for public functions with non-obvious behavior
  • API endpoint documented (or existing docs updated)
  • Any schema change reflected in packages/database/CLAUDE.md
  • Breaking changes documented in release notes

PR & Review

  • PR description explains what changed and why
  • PR links to GitHub issue or Mission Control task
  • PR is < 400 lines diff (split larger changes)
  • All review comments resolved or explicitly deferred with reason
  • CI pipeline green (all status checks pass)

Security

  • No new secrets committed to git
  • User input validated with Zod before processing
  • Authorization checked before data access (RBAC middleware applied)
  • No SQL injection vectors (Prisma parameterized queries only)
  • CORS not weakened

3. Definition of Done — Bug Fix

  • Root cause identified and documented in PR description
  • Test added that would have caught the bug (regression test)
  • All existing tests still pass
  • Fix does not introduce new test failures
  • If financial bug: post-mortem created and corrective data migration planned if needed
  • Code reviewed and approved

4. Definition of Done — Database Migration

  • Migration tested on staging with production-sized data
  • Migration is backward-compatible (or downtime planned and communicated)
  • Down migration tested (rollback works)
  • Migration is idempotent (safe to run twice)
  • Migration script takes < 5 minutes on 1M rows (benchmark result documented)
  • No existing data corrupted by migration
  • npx prisma generate updated after schema change
  • Migration reviewed by Tech Lead (financial schema changes require Alem sign-off)

5. Definition of Done — Sprint

A sprint is Done when:

  • All committed stories meet their individual DoD
  • No P0 open defects
  • No P1 open defects (or explicitly deferred with product owner approval)
  • Sprint demo delivered to stakeholders
  • Sprint retrospective held
  • Technical debt items identified this sprint added to backlog
  • All deployed features monitored for 24h post-deploy with no regressions

6. Definition of Done — Production Deploy

  • All CI checks green (lint, type-check, unit tests, integration tests, build, E2E)
  • Deployment checklist completed (deployment-checklist.md)
  • Database migrations applied successfully to staging first
  • Smoke tests pass on staging
  • Health check endpoint returns {"status":"ok","db":"ok"} post-deploy
  • No Sentry error spike in first 15 minutes post-deploy
  • Rollback procedure verified and ready

7. "Not Done" Examples

These do NOT count as Done:

  • "Works on my machine" — must be deployed and tested on staging
  • "Tests are skipped" — no test skips in production code
  • "I'll add tests later" — tests are written in the same PR as the feature
  • "Coverage went from 82% to 79% but it's fine" — coverage thresholds are enforced
  • "The float is close enough" — NUMERIC(19,4) is not negotiable for financial values
  • "It's just UI" — UI changes still need lint + type-check to pass

8. Responsibility

Role DoD Responsibility
Developer Write tests, meet code quality criteria, fill checklist before PR
PR Reviewer Verify DoD criteria in review, reject PRs that don't meet criteria
Tech Lead Enforce DoD at sprint level, escalate persistent non-compliance
Alem Bašić Final sign-off on financial schema changes and production deploys


Approval

Role Name Date Signature
Author Ops Architect 2026-02-23
Reviewer Tech Lead
Approver Alem Bašić