Skip to content

Commit 35cb2e1

Browse files
Merge issue-212: add selective CI history observability (#212)
2 parents 3909a48 + d708a7b commit 35cb2e1

6 files changed

Lines changed: 917 additions & 9 deletions

File tree

.github/workflows/scheduled-full-regression.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ jobs:
5757
--full-django-command "make test" \
5858
--output .tmp/scheduled/verification-plan.json \
5959
--summary "$GITHUB_STEP_SUMMARY"
60+
uv run --frozen python -m ci.history \
61+
--repository "$GITHUB_REPOSITORY" \
62+
--token "$GITHUB_TOKEN" \
63+
--workflow ci.yml \
64+
--current-run-id "$GITHUB_RUN_ID" \
65+
--report .tmp/scheduled/selection-observability.json \
66+
--summary "$GITHUB_STEP_SUMMARY"
6067
uv run --frozen python -m ci.verification environment \
6168
--plan .tmp/scheduled/verification-plan.json --component selector \
6269
--allow-hosted-runner-drift \
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Selective-CI selection observability
2+
3+
The scheduled full-regression selector writes a redacted aggregate report for the latest 20
4+
completed `ci.yml` push runs on `main`. The window is bounded by run count, not elapsed time, and
5+
workflow reruns count as completed runs. The JSON report is retained in the scheduled selector
6+
artifact for 30 days and the same aggregate summary is appended to the Actions step summary.
7+
8+
The report contains profile counts/rates (`focused` and `full`), classifier-reason counts/rates,
9+
and evidence-disposition counts/rates (`reused`, `rerun`, and `not_applicable`). Evidence reuse is
10+
reported both per applicable component and per run with at least one reused component. It contains
11+
no run IDs, source SHAs, changed paths, logs, credentials, or production data.
12+
13+
Empty history produces zeroed counts with an `empty` status. Missing, malformed, oversized, or
14+
unavailable history produces an `unavailable` status. The report is descriptive only: history
15+
failure cannot authorize a selection skip, and the scheduled selector continues to use its
16+
fail-closed full-regression decision. A malformed historical artifact invalidates the aggregate
17+
report rather than contributing untrusted data.
18+
19+
The top-level ownership test enumerates repository source directories and requires each to have an
20+
owner prefix in `ci/ownership.json` or an explicit reviewed full-fallback reason in
21+
`tests_ci/test_top_level_directory_guard.py`. Adding an unreviewed application therefore fails
22+
the CI contract with instructions for the required graph/list update.

0 commit comments

Comments
 (0)