databrickslabs / databrickslabs/ontos

[Feature]: Data Product Certification (end-to-end)

Open
#89 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

type/feature
Dominant language
Python
Stars
212
Forks
71
Avg merge
4d 10h
Merged PRs (30d)
43

Description

Parent PRD

#86

What to build

A thin vertical slice delivering certification for Data Products end-to-end: schema, API, UI, and data migration.

Add certification columns to the data_products table (certification_level, inherited_certification_level, certified_at, certified_by, certification_expires_at, certification_notes). Create a CertificationInfo Pydantic model in models/lifecycle.py. Implement POST /api/data-products/{id}/certify (with level + notes in body) and DELETE /api/data-products/{id}/certify endpoints, gated to Steward/Admin roles. Migrate existing status="certified" rows to status="active" + top certification level. Build a CertificationBadge component (shield icon + level name from config table, tooltip with details). Add a certification section to the product detail page and an inline cert badge in the product list table.

Refer to the parent PRD "Dimension 2: Certification" section for full design.

Acceptance criteria

  • Alembic migration adds certification columns to data_products
  • Existing status="certified" rows migrated to status="active" + certification_level set to top configured level
  • CertificationInfo Pydantic model with validation (level must reference existing certification_levels.level_order)
  • POST /api/data-products/{id}/certify sets certification fields, requires Steward/Admin role
  • DELETE /api/data-products/{id}/certify clears certification fields, requires Steward/Admin role
  • Non-Steward/Admin users receive 403 on certify/decertify
  • CertificationBadge component renders level name + icon from config, handles uncertified (null) gracefully
  • Product detail page shows certification section (level badge, certified_by, certified_at, expires_at, notes)
  • Product list table shows inline certification badge
  • Unit tests for certify/decertify logic, RBAC enforcement, level validation
  • Component tests for CertificationBadge

Blocked by

  • Blocked by #87 (certification levels config table must exist)
  • Blocked by #88 (clean status enum without CERTIFIED value)

User stories addressed

From PRD #86:

  • User story 1: Steward certifies a product at a specific level
  • User story 20: Only Stewards and Admins can certify

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading parent PRD #86 and resolving blockers #87 and #88 before working on the end-to-end slice. Then trace models/lifecycle.py, the data_products migration, the certify/decertify API endpoints, and the product detail/list UI entry points. Done means all listed acceptance criteria pass, including migration, RBAC, validation, API tests, and CertificationBadge component tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api, database, frontend, full-stack
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.