Dev Tracking Data Compilersqlite

Saved queries

The six questions this database is built to answer. Each runs unchanged on SQLite and Postgres.

1. Acceptance criteria with no linked commits or no linked tests2. Commits not tied to any task3. Cycle time4. Requirements changed after the code for one of their criteria merged5. Review turnaround by reviewer6. Full trace for one requirement

1. Acceptance criteria with no linked commits or no linked tests.

SQL
-- 1. Acceptance criteria with no linked commits or no linked tests.
-- A criterion is "covered by code" when a task linked to it has at least one commit.
-- Ordered so criteria with neither code nor tests come first.
WITH crit_commits AS (
    SELECT tc.criterion_id, COUNT(DISTINCT ct.commit_id) AS commits
    FROM task_criteria tc
    JOIN commit_tasks ct ON ct.task_id = tc.task_id
    GROUP BY tc.criterion_id
),
crit_tests AS (
    SELECT criterion_id, COUNT(*) AS tests
    FROM criterion_tests
    GROUP BY criterion_id
)
SELECT f.key AS feature,
       s.key AS story,
       a.key AS criterion,
       a.text AS criterion_text,
       COALESCE(cc.commits, 0) AS linked_commits,
       COALESCE(ct.tests, 0) AS linked_tests,
       CASE
           WHEN COALESCE(cc.commits, 0) = 0 AND COALESCE(ct.tests, 0) = 0 THEN 'no code, no tests'
           WHEN COALESCE(cc.commits, 0) = 0 THEN 'no code'
           ELSE 'no tests'
       END AS gap
FROM acceptance_criteria a
JOIN stories s ON s.id = a.story_id
JOIN features f ON f.id = s.feature_id
LEFT JOIN crit_commits cc ON cc.criterion_id = a.id
LEFT JOIN crit_tests ct ON ct.criterion_id = a.id
WHERE COALESCE(cc.commits, 0) = 0 OR COALESCE(ct.tests, 0) = 0
ORDER BY CASE WHEN COALESCE(cc.commits, 0) = 0 THEN 0 ELSE 1 END, a.key;

45 rows

featurestorycriterioncriterion_textlinked_commitslinked_testsgap
FEAT-CLICK-02ST-CLICK-201AC-CLICK-201-4A codemod script renames deprecated parameter names in user projects automatically.00no code, no tests
FEAT-HTTPX-02ST-HTTPX-203AC-HTTPX-203-3Brotli decoding handles empty bodies the same way.00no code, no tests
FEAT-REQ-02ST-REQ-203AC-REQ-203-4A security advisory is published for the no_proxy fix.00no code, no tests
FEAT-CLICK-01ST-CLICK-101AC-CLICK-101-4Paging a 50 MB output finishes in under 2 seconds on a typical laptop.10no tests
FEAT-CLICK-01ST-CLICK-102AC-CLICK-102-4`style()` raises an error for an invalid colour name, and the error message lists the valid colour names.10no tests
FEAT-CLICK-01ST-CLICK-103AC-CLICK-103-3The user guide has a new section with an example of editing a `pathlib.Path` with `click.edit()`.10no tests
FEAT-CLICK-02ST-CLICK-201AC-CLICK-201-1Declaring a parameter whose name is not a valid Python identifier, or is a Python keyword, emits a DeprecationWarning.10no tests
FEAT-CLICK-02ST-CLICK-201AC-CLICK-201-2Error messages and deprecation warnings name an option the way the user types it (`--my-option`), not by its internal name (`my_option`).10no tests
FEAT-CLICK-02ST-CLICK-201AC-CLICK-201-3`Parameter.human_readable_name` keeps working but emits a DeprecationWarning that points to `Parameter.spec`.10no tests
FEAT-CLICK-02ST-CLICK-202AC-CLICK-202-1`Command.get_help_option_names` returns names in the order they were declared, so help output is identical across runs.10no tests
FEAT-CLICK-02ST-CLICK-202AC-CLICK-202-4Help output is translated into the user's locale when a translation catalogue is installed.10no tests
FEAT-CLICK-02ST-CLICK-203AC-CLICK-203-2The shell completion docs list PowerShell alongside bash, zsh and fish, with setup instructions for the PowerShell profile.20no tests
FEAT-CLICK-02ST-CLICK-203AC-CLICK-203-3PowerShell completion is verified by an automated test that runs a real `pwsh` process in CI.20no tests
FEAT-CLICK-02ST-CLICK-203AC-CLICK-203-4Completion responds within 100 ms for a CLI with 500 subcommands.20no tests
FEAT-CLICK-02ST-CLICK-204AC-CLICK-204-1`CliRunner` accepts `capture='fd'`, which also captures output written straight to file descriptors 1 and 2.10no tests
FEAT-CLICK-02ST-CLICK-204AC-CLICK-204-3`capture='fd'` works on Windows.10no tests
FEAT-HTTPX-01ST-HTTPX-101AC-HTTPX-101-1`verify` accepts `True`, `False` or an `ssl.SSLContext`, and the separate `ssl_context` parameter is removed.10no tests
FEAT-HTTPX-01ST-HTTPX-101AC-HTTPX-101-2Passing a string to `verify` raises an error that tells the user to use `ssl.create_default_context(cafile=...)` instead.10no tests
FEAT-HTTPX-01ST-HTTPX-101AC-HTTPX-101-3Passing a string to `verify` raises `TypeError`.10no tests
FEAT-HTTPX-01ST-HTTPX-101AC-HTTPX-101-4Importing httpx does not import the `ssl` module until a client actually needs it.10no tests
FEAT-HTTPX-01ST-HTTPX-101AC-HTTPX-101-5Using `verify=False` together with a client certificate (`cert=...`) still loads the certificate instead of ignoring it.10no tests
FEAT-HTTPX-01ST-HTTPX-101AC-HTTPX-101-6The documentation describes the `SSL_CERT_FILE` and `SSL_CERT_DIR` environment variables.10no tests
FEAT-HTTPX-01ST-HTTPX-102AC-HTTPX-102-1`socks5h://` proxy URLs are accepted and routed through the SOCKS transport.10no tests
FEAT-HTTPX-01ST-HTTPX-102AC-HTTPX-102-2The error for an unsupported proxy scheme includes the scheme the user passed.10no tests
FEAT-HTTPX-01ST-HTTPX-102AC-HTTPX-102-3Proxy credentials (user and password in the proxy URL) are never written to log output.10no tests
FEAT-HTTPX-02ST-HTTPX-201AC-HTTPX-201-1Query parameters encode spaces as `+` (form encoding).10no tests
FEAT-HTTPX-02ST-HTTPX-201AC-HTTPX-201-2A `/` inside a query parameter value is percent-encoded as `%2F`.10no tests
FEAT-HTTPX-02ST-HTTPX-201AC-HTTPX-201-3The behaviour change is called out in the CHANGELOG under backwards-incompatible changes.30no tests
FEAT-HTTPX-02ST-HTTPX-202AC-HTTPX-202-1The redirect helpers (`same_origin`, `is_https_redirect`) live in `_client.py` as private functions, and their tests moved next to the client tests.10no tests
FEAT-HTTPX-02ST-HTTPX-202AC-HTTPX-202-2`httpx/_utils.py` is deleted.40no tests
FEAT-REQ-01ST-REQ-101AC-REQ-101-3All read-capability checks go through one helper function instead of repeated isinstance checks.10no tests
FEAT-REQ-01ST-REQ-101AC-REQ-101-4The change is recorded in the HISTORY changelog for the next release.30no tests
FEAT-REQ-01ST-REQ-102AC-REQ-102-1Header names and values that end in a newline (`\n` or `\r\n`) are rejected as invalid.10no tests
FEAT-REQ-01ST-REQ-102AC-REQ-102-2A Content-Type header whose parameter has no `=` (for example `text/html; charset`) falls back to the default encoding instead of producing a bogus charset.10no tests
FEAT-REQ-01ST-REQ-102AC-REQ-102-3Request URLs whose path starts with `//` keep both slashes when sent.10no tests
FEAT-REQ-01ST-REQ-102AC-REQ-102-5Invalid headers are logged at WARNING level, with the header name, before the request is rejected.10no tests
FEAT-REQ-02ST-REQ-201AC-REQ-201-1`Request.hooks` has a type annotation.10no tests
FEAT-REQ-02ST-REQ-201AC-REQ-201-2CI runs a type checker on every pull request.10no tests
FEAT-REQ-02ST-REQ-201AC-REQ-201-3The package passes Pyright in strict mode with zero errors.10no tests
FEAT-REQ-02ST-REQ-202AC-REQ-202-1`Request.headers` is typed as a read-only `Mapping[str, str | bytes]`.20no tests
FEAT-REQ-02ST-REQ-202AC-REQ-202-2`Response.reason` is typed as `str`.10no tests
FEAT-REQ-02ST-REQ-202AC-REQ-202-3A runtime check raises `TypeError` when headers are passed as a list of tuples.10no tests
FEAT-REQ-02ST-REQ-203AC-REQ-203-1DigestAuth works on FIPS-enabled systems by passing `usedforsecurity=False` to every hashlib call it makes.10no tests
FEAT-REQ-02ST-REQ-203AC-REQ-203-2`no_proxy` entries with a leading dot (for example `.example.com`) match the domain itself as well as its subdomains.10no tests
FEAT-REQ-02ST-REQ-203AC-REQ-203-3DigestAuth supports the SHA-512-256 algorithm.10no tests