Application Workflow Reports
Release Readiness
Summarize Check Results
A release report can join services to check results, count failures, and keep only services that need attention.
Program
Play the script to choose the maximum allowed failures and inspect the release readiness report.
release_readiness_report.sql
Replay: real traced execution (multi-file project)
CREATE TABLE services (id INTEGER, name TEXT, owner TEXT);
INSERT INTO services VALUES (1, 'api', 'platform'), (2, 'web', 'frontend'), (3, 'billing', 'finance');
CREATE TABLE checks (service_id INTEGER, check_name TEXT, status TEXT);
INSERT INTO checks VALUES (1, 'smoke', 'pass'), (1, 'schema', 'fail'), (2, 'smoke', 'pass'), (2, 'cdn', 'pass'), (3, 'smoke', 'fail'), (3, 'ledger', 'fail');
WITH params(max_failures) AS (VALUES (0)), service_failures AS (SELECT services.name, services.owner, SUM(CASE WHEN checks.status = 'fail' THEN 1 ELSE 0 END) AS failure_count FROM services JOIN checks ON checks.service_id = services.id GROUP BY services.name, services.owner) SELECT name, owner, failure_count, CASE WHEN failure_count <= (SELECT max_failures FROM params) THEN 'ready' ELSE 'blocked' END AS release_status FROM service_failures ORDER BY release_status DESC, name;
CREATE TABLE services (id INTEGER, name TEXT, owner TEXT);
INSERT INTO services VALUES (1, 'api', 'platform'), (2, 'web', 'frontend'), (3, 'billing', 'finance');
CREATE TABLE checks (service_id INTEGER, check_name TEXT, status TEXT);
INSERT INTO checks VALUES (1, 'smoke', 'pass'), (1, 'schema', 'fail'), (2, 'smoke', 'pass'), (2, 'cdn', 'pass'), (3, 'smoke', 'fail'), (3, 'ledger', 'fail');
WITH params(max_failures) AS (VALUES (1)), service_failures AS (SELECT services.name, services.owner, SUM(CASE WHEN checks.status = 'fail' THEN 1 ELSE 0 END) AS failure_count FROM services JOIN checks ON checks.service_id = services.id GROUP BY services.name, services.owner) SELECT name, owner, failure_count, CASE WHEN failure_count <= (SELECT max_failures FROM params) THEN 'ready' ELSE 'blocked' END AS release_status FROM service_failures ORDER BY release_status DESC, name;
tables ← 1 row
1CREATE TABLE services (id INTEGER, name TEXT, owner TEXT);2INSERT INTO services VALUES (1, 'api', 'platform'), (2, 'web', 'frontend'), (3, 'billing', 'finance');values this step1 rowtablesservices ← 3 rows
1CREATE TABLE services (id INTEGER, name TEXT, owner TEXT);2INSERT INTO services VALUES (1, 'api', 'platform'), (2, 'web', 'frontend'), (3, 'billing', 'finance');3CREATE TABLE checks (service_id INTEGER, check_name TEXT, status TEXT);values this step3 rowsservicestables ← 2 rows
2INSERT INTO services VALUES (1, 'api', 'platform'), (2, 'web', 'frontend'), (3, 'billing', 'finance');3CREATE TABLE checks (service_id INTEGER, check_name TEXT, status TEXT);4INSERT INTO checks VALUES (1, 'smoke', 'pass'), (1, 'schema', 'fail'), (2, 'smoke', 'pass'), (2, 'cdn', 'pass'), (3, 'smoke', 'fail'), (3, 'ledger', 'fail');values this step2 rowstableschecks ← 6 rows
3CREATE TABLE checks (service_id INTEGER, check_name TEXT, status TEXT);4INSERT INTO checks VALUES (1, 'smoke', 'pass'), (1, 'schema', 'fail'), (2, 'smoke', 'pass'), (2, 'cdn', 'pass'), (3, 'smoke', 'fail'), (3, 'ledger', 'fail');5WITH params(max_failures) AS (VALUES (0)), service_failures AS (SELECT services.name, services.owner, SUM(CASE WHEN checks.status = 'fail' THEN 1 ELSE 0 END) AS failure_count FROM services JOIN checks ON checks.service_id = services.id GROUP BY services.name, services.owner) SELECT name, owner, failure_count, CASE WHEN failure_count <= (SELECT max_failures FROM params) THEN 'ready' ELSE 'blocked' END AS release_status FROM service_failures ORDER BY release_status DESC, name;values this step6 rowschecksresult ← 3 rows
4INSERT INTO checks VALUES (1, 'smoke', 'pass'), (1, 'schema', 'fail'), (2, 'smoke', 'pass'), (2, 'cdn', 'pass'), (3, 'smoke', 'fail'), (3, 'ledger', 'fail');5WITH params(max_failures) AS (VALUES (0)), service_failures AS (SELECT services.name, services.owner, SUM(CASE WHEN checks.status = 'fail' THEN 1 ELSE 0 END) AS failure_count FROM services JOIN checks ON checks.service_id = services.id GROUP BY services.name, services.owner) SELECT name, owner, failure_count, CASE WHEN failure_count <= (SELECT max_failures FROM params) THEN 'ready' ELSE 'blocked' END AS release_status FROM service_failures ORDER BY release_status DESC, name;values this step3 rowsresult
tables ← 1 row
1CREATE TABLE services (id INTEGER, name TEXT, owner TEXT);2INSERT INTO services VALUES (1, 'api', 'platform'), (2, 'web', 'frontend'), (3, 'billing', 'finance');values this step1 rowtablesservices ← 3 rows
1CREATE TABLE services (id INTEGER, name TEXT, owner TEXT);2INSERT INTO services VALUES (1, 'api', 'platform'), (2, 'web', 'frontend'), (3, 'billing', 'finance');3CREATE TABLE checks (service_id INTEGER, check_name TEXT, status TEXT);values this step3 rowsservicestables ← 2 rows
2INSERT INTO services VALUES (1, 'api', 'platform'), (2, 'web', 'frontend'), (3, 'billing', 'finance');3CREATE TABLE checks (service_id INTEGER, check_name TEXT, status TEXT);4INSERT INTO checks VALUES (1, 'smoke', 'pass'), (1, 'schema', 'fail'), (2, 'smoke', 'pass'), (2, 'cdn', 'pass'), (3, 'smoke', 'fail'), (3, 'ledger', 'fail');values this step2 rowstableschecks ← 6 rows
3CREATE TABLE checks (service_id INTEGER, check_name TEXT, status TEXT);4INSERT INTO checks VALUES (1, 'smoke', 'pass'), (1, 'schema', 'fail'), (2, 'smoke', 'pass'), (2, 'cdn', 'pass'), (3, 'smoke', 'fail'), (3, 'ledger', 'fail');5WITH params(max_failures) AS (VALUES (1)), service_failures AS (SELECT services.name, services.owner, SUM(CASE WHEN checks.status = 'fail' THEN 1 ELSE 0 END) AS failure_count FROM services JOIN checks ON checks.service_id = services.id GROUP BY services.name, services.owner) SELECT name, owner, failure_count, CASE WHEN failure_count <= (SELECT max_failures FROM params) THEN 'ready' ELSE 'blocked' END AS release_status FROM service_failures ORDER BY release_status DESC, name;values this step6 rowschecksresult ← 3 rows
4INSERT INTO checks VALUES (1, 'smoke', 'pass'), (1, 'schema', 'fail'), (2, 'smoke', 'pass'), (2, 'cdn', 'pass'), (3, 'smoke', 'fail'), (3, 'ledger', 'fail');5WITH params(max_failures) AS (VALUES (1)), service_failures AS (SELECT services.name, services.owner, SUM(CASE WHEN checks.status = 'fail' THEN 1 ELSE 0 END) AS failure_count FROM services JOIN checks ON checks.service_id = services.id GROUP BY services.name, services.owner) SELECT name, owner, failure_count, CASE WHEN failure_count <= (SELECT max_failures FROM params) THEN 'ready' ELSE 'blocked' END AS release_status FROM service_failures ORDER BY release_status DESC, name;values this step3 rowsresult
failure count
The aggregate counts failed checks for each service.
release status
The CASE expression labels each service as ready or blocked.
selector threshold
`max_failures` changes the release policy without changing the report shape.