From 4eafadd801efe6a42a88566a6689c23347df25bf Mon Sep 17 00:00:00 2001 From: MPCoreDeveloper Date: Mon, 12 Oct 2026 21:04:02 +0200 Subject: [PATCH 1/3] chore(codecov): drop the `unittests` flag nothing uploads and the two comment sections that cannot render `/flags/` for this repository answers exactly one flag and it has no coverage to report -- `{"count": 1, "results": [{"flag_name": "unittests", "coverage": 0.0}]}` (measured 2026-10-12) -- because the `coverage` job hands all three Cobertura reports to one *unflagged* `codecov/codecov-action` call: `/commits//uploads/` reads `count: 1` with `"flags": []`, so no status and no comment section can ever read it. The flag declaration, and the `flags` and `components` entries in `comment.layout`, are removed rather than left rendering empty forever. The header comment asserted the opposite ("we expect exactly 3 uploads"), which is what made the single upload look like a missing one; it now records the measured shape, so `after_n_builds` stays unset for the real reason. `codecov/project` has never been posted in this repository -- checked through the GitHub API for the promotion commit `58f297e`, for `204d9f8`, `4283626`, `b6bcf34a` and for the PR heads #446/#447/#448: every one carries `codecov/patch` and none carries `codecov/project` -- and the file now says so and marks it BLOCKED, because nothing here can post it and the 18% floor is enforced in-job by `tools/measure-coverage.ps1` either way. Validated with `codecov.io/validate` (*Valid!*); the parsed form carries no `flags` key. Recorded in `docs/CHANGELOG.md` under [Unreleased] -> Changed, because the PR comment a user sees does change. --- codecov.yml | 42 +++++++++++++++++++++++++++++++++--------- docs/CHANGELOG.md | 2 ++ 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/codecov.yml b/codecov.yml index 7031cbf4..33fb23b0 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,7 +1,16 @@ +# Codecov configuration for SharpCoreDB. +# +# Everything here is fed by the `coverage` job in .github/workflows/ci.yml: it runs the three suites +# tools/measure-coverage.ps1 names (SharpCoreDB.Tests, SharpCoreDB.VectorSearch.Tests, +# SharpCoreDB.EntityFrameworkCore.Tests), writes one Cobertura report per suite and hands all three to +# `codecov/codecov-action` in a single call. Codecov records that multi-file upload as *one* upload for the +# commit: `/commits//uploads/` answers `count: 1` with `"flags": []` for the head commit +# 4283626d8235b4e2175097a929a9b0e1613a17b2 (the endpoint wants all 40 characters -- the abbreviated form +# answers 404), so there is exactly one upload to wait for and no `after_n_builds` is set here (waiting for +# three would leave every commit without a comment or a status). The 18% floor is enforced in-job by the +# script before it uploads: these statuses report the trend, they are not the gate. codecov: - # Notify Codecov of the expected number of uploads per commit. - # 3 test projects run in CI (SharpCoreDB.Tests, VectorSearch.Tests, EntityFrameworkCore.Tests), - # all on ubuntu-latest only for coverage, so we expect exactly 3 uploads. + # A commit carries the report of its own push and nothing else, so do not discard it twelve hours later. max_report_age: off coverage: @@ -31,7 +40,10 @@ coverage: if_ci_failed: error comment: - layout: "header, diff, flags, components, tree" + # `flags` and `components` are deliberately absent from the layout: the uploads carry no flag (see the + # comment on the upload step in ci.yml) and this file defines no `component_management`, so both sections + # could only ever render empty. + layout: "header, diff, tree" behavior: default require_changes: true require_base: false @@ -55,8 +67,20 @@ ignore: - "**/*.g.i.cs" - "**/GlobalUsings.cs" -flags: - unittests: - paths: - - src/ - carryforward: true +# No `flags:` section on purpose. The upload is unflagged, because a status that names no flag would +# otherwise have no data to read, and a flag that is declared but never uploaded is exactly what the section +# that used to live here was: `/flags/` answers `{"count": 1, "results": [{"flag_name": "unittests", +# "coverage": 0.0}]}` -- one declared flag no upload ever carries (the commit's own upload record reads +# `"flags": []`) and no status reads -- where a flag the suites did fill would answer with their coverage. +# One report per commit needs no flag to tell the suites apart. +# +# Known and deliberately not "fixed" here: `codecov/project` has never been posted in this repository. +# Checked through the GitHub API for the promotion commit `58f297e` (when the current CI first ran, where +# `codecov/patch` still arrived as a legacy commit status), for `204d9f8`, `4283626` and `b6bcf34`, and for +# the three PR heads #446/#447/#448 -- every one of them carries `codecov/patch` and none carries +# `codecov/project`, including the commits whose base *does* have an uploaded report. The declaration above +# is the documented structure, this file validates, and the 18% floor is enforced in-job either way, so the +# missing status is a Codecov-side evaluation, not something this file can turn on (or off). +# BLOCKED (2026-10-12, outside this repository): nothing here can post it; it needs a Codecov +# dashboard/app check, and it costs this project nothing while it is absent (the patch status, the PR +# comment and the in-job 18% floor all still report). diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index a47ce90e..8d700007 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -43,6 +43,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **`master` is now the `net11.0` / C# 15 line; the `net10.0` / C# 14 line is parked on `release/v2.0`.** The 2026-10-10 owner decision (superseding the 2026-09-25 one in `docs/performance/BEAT_SQLITE_ALL_AXES_PLAN.md` §9 row 9) promotes the v2.1 RC line to the main branch at **2.1.0**. .NET 11 GA is 2026-11-10, so until then the SDK pin stays `11.0.100-rc.1.26425.128` with `allowPrerelease`, and that is the one reason an RC pin appears on `master`. Prepared on `promote/net11-main-20261010` as a six-commit series: a convergence merge of `origin/master` (dependency bumps, install-doc fixes, and the Dockerfile `ARG VERSION=2.0.0.3` bump the net11 line had lost — verified `build` 0 errors and core suite **1995 / 0 failed / 0 skipped in 80,3 s**), the CI restructure, the net11 Dockerfile, the docs, and an isolated release-metadata commit. - **The CI pipelines are split by line instead of by SDK.** `.github/workflows/ci.yml` (what `master` triggers) becomes the net11.0 pipeline: the .NET 11 SDK pin with `include-prerelease`, the four test hosts under `bin/Release/net11.0`, and the `coverage` job plus the core-only dispatch `publish-core` job carried over from the deleted `ci-net11.yml`, so no capability is lost. `.github/workflows/ci-net10.yml` is the old master pipeline retargeted to `release/v2.0` (tags `v2.0*`, pack/publish gated on that branch). `compatibility-smoke.yml` and `dependency-submission.yml` move to the same pin, because the server and the solution they exercise are net11 now. - **The server image is net11-aware again, closing the open item in the 2.1.0-RC.3 release notes.** The Dockerfile moves to `sdk:11.0` / `aspnet:11.0` and `docker-publish.yml` drops the `!v2.1*` exclusion (excluding `v2.0.x` instead, which belongs to the parked line). The container deliberately does **not** copy `global.json`: it builds with the image's own SDK, so the repository's RC pin cannot fail an image build on a missing SDK. Full record, the flip procedure and the GA checklist: `docs/net11/PROMOTION_TO_MAIN.md`. +- **`codecov.yml` no longer declares a flag that nothing uploads, and its PR comment no longer advertises two sections that can never render.** The `unittests` flag (`paths: [src/]`, `carryforward: true`) was the repository's only entry in Codecov's flag list with **no coverage at all** — `/flags/` answers `{"count": 1, "results": [{"flag_name": "unittests", "coverage": 0.0}]}` — and it could never be anything else: the `coverage` job hands all three Cobertura reports to a *single* `codecov/codecov-action` call and deliberately uploads **unflagged** (a status that names no flag would have no data to read), which Codecov records as one upload for the commit — confirmed against the API for `4283626d8235b4e2175097a929a9b0e1613a17b2` (the endpoint wants the full 40-character SHA), whose `uploads/` endpoint answers `count: 1` with `"flags": []`. The file's own header comment asserted the opposite ("we expect exactly 3 uploads"), which is what made the mismatch look like a missing upload; it now states the measured shape, and `after_n_builds` stays unset for that reason (waiting for three uploads would leave every commit without a comment or a status). `flags` and `components` are dropped from `comment.layout` (`header, diff, tree`) because this file defines no `component_management` either. No status reads a flag, so pass/fail behaviour is unchanged; validated with `codecov.io/validate` (*Valid!*). + ### Fixed From 0e59d9df05e17adaddf0fb50089c845f17d19353 Mon Sep 17 00:00:00 2001 From: MPCoreDeveloper Date: Mon, 12 Oct 2026 21:10:43 +0200 Subject: [PATCH 2/3] docs(perf): session 86 -- the Codecov config's orphaned flag is dropped, the patch-status item is refuted as already green, and codecov/project is BLOCKED The session's finding is that the work the item was opened for was not needed: PR #448 was already merged (`b6bcf34a`) and `codecov/patch` on it had already passed (51,01 % against the effective 45 % floor -- `target: 50 %` + `threshold: 5 %`), so no test was written for the 121 patch misses. What was unfinished was the config half, and that is what `4eafadd8` lands; this entry records the live-API evidence (including the `coverage: 0.0` correction to the draft comment), the runner-verified green of PR #460, and the BLOCKED `codecov/project` gap that is carried forward in NEXT rather than dropped. --- docs/performance/WORKLOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/performance/WORKLOG.md b/docs/performance/WORKLOG.md index fdf6d5cb..93a5ae66 100644 --- a/docs/performance/WORKLOG.md +++ b/docs/performance/WORKLOG.md @@ -5197,3 +5197,18 @@ Nothing in the repository explains a stall: no `.git/*.lock`, no fsmonitor daemo - Commit: this addendum, on `perf/autonomous-20261011`; PR #448 is left open and green for the owner. - NEXT: unchanged queue head — session 81's `NEXT:` §5.1 INSERT item (i), the identity-remap fast path for `InsertBatch(table, rows, columns)` when the column order already matches the table order (112 B/row on the array arm). + +### 2026-10-12 (session 86) — the Codecov config's orphaned flag is dropped, and the "red patch status" the item was opened for is measured green before any test is written + +- Session: 86 (first item; no source change — the CI-configuration half of what session 85 left uncommitted). +- Command(s): `gh pr view 448 --json state,mergedAt,mergeCommit`, `gh pr list --state open`, `gh api repos/MPCoreDeveloper/SharpCoreDB/commits/b6bcf34a/check-runs` / `.../status`, `curl -s https://api.codecov.io/api/v2/github/mpcoredeveloper/repos/sharpcoredb/flags/`, `curl -s .../commits//uploads/` for `4283626d…` and `4eafadd8…`, `curl -X POST --data-binary @codecov.yml https://codecov.io/validate`, `git checkout -b perf/autonomous-20261012 origin/master`, `gh pr create --base master`, `gh pr checks 460`, `gh run view --job 114964439430 --log`. +- Verdict: **DONE — the orphaned `unittests` flag and the two comment sections that could never render are gone, the runner-evaluated floor and `codecov/patch` are green with the new config (PR #460), and the "cover the 121 patch misses" work the item was opened for was refuted before it started.** Measured, not inferred: PR #448 was already **merged** (`b6bcf34a`, 2026-10-12T04:01:59Z), and `codecov/patch` on it had already **passed** — 51,01 % against an effective floor of 45 % (`target: 50 %` + `threshold: 5 %`), the same arithmetic the local `patch-gap.ps1` scratch run reproduced — with no open PR left anywhere. So the patch status was never red, and adding 121 lines of tests for someone else's merged feature would have been work no gate asked for. What *was* left undone was the uncommitted config fix, and that is what this session landed. +- The config's own claims, checked against the live APIs rather than trusted, because the draft in the working tree asserted one of them wrongly: `/flags/` answers `{"count": 1, "results": [{"flag_name": "unittests", "coverage": 0.0}]}` — **not** the `coverage: null` the draft comment claimed, corrected in both `codecov.yml` and `docs/CHANGELOG.md` before either was committed; `/commits/4eafadd801efe6a42a88566a6689c23347df25bf/uploads/` answers `count: 1` with `"flags": []` (`state: MERGED`, 537 files / 58 907 lines / 42,0 %), and `/commits/4283626d8235b4e2175097a929a9b0e1613a17b2/uploads/` the same — one unflagged upload per commit, which is why `after_n_builds` stays unset and why the flag declared `paths: [src/]`, `carryforward: true` had no coverage to report and never could. +- A second correction found by the same discipline: the `uploads/` endpoint wants all 40 SHA characters — the abbreviated `4283626d` answers `404 The commit … is not in our records` — so the comment now names the full SHA instead of the short one it used to quote as if it were equivalent. +- The change: `flags: unittests` removed and replaced by a comment stating what the flag list answers instead; `comment.layout` drops `flags` and `components` (`header, diff, tree`), because the uploads carry no flag and this file defines no `component_management`, so both sections could only ever render empty; the header comment's "we expect exactly 3 uploads" replaced by the measured single upload. `codecov.io/validate` returns `Valid!` and the parsed form carries no `flags` key. +- Verified by the runners, not by this box: PR **#460** (`perf/autonomous-20261012`, head `4eafadd8`) — every job pass: `Build and Test` on windows-latest (5m13s), ubuntu-latest and macos-latest, `Coverage (net11.0)` job `114964439430` logging `PASS measured 45.94%, floor 18.00%`, `codecov/patch` **pass**, `Server Compatibility Smoke`, CodeQL and `submit-nuget`. Codecov's own comment on #460 renders the new layout — header and status only, no flags or components section — which is the user-visible half of the change and the reason it is in `docs/CHANGELOG.md` under `[Unreleased] → Changed`. +- `codecov/project`, checked and handed on rather than silently left out — the repository has never had it: the GitHub API carries `codecov/patch` and **no** `codecov/project` on `58f297e` (the promotion commit), on `204d9f8`, `4283626`, `b6bcf34a`, and on the heads of #446/#447/#448, including commits whose base *does* have an uploaded report. Nothing in `codecov.yml` can post it and nothing is lost while it is absent (the patch status, the PR comment and the in-job 18 % floor at `tools/measure-coverage.ps1 -Floor 0.18` all still report), so it is recorded in the file as `BLOCKED (2026-10-12, outside this repository)` — a Codecov dashboard/app question, not a repository defect. +- Not fixed by weakening anything: no status or flag semantics changed (the upload stays unflagged, the floor stays in-job), so this commit is a `chore`; the only behaviour a user sees is the PR comment losing two sections that were always empty. +- Commit: `4eafadd8` (`chore(codecov): …`) on `perf/autonomous-20261012`, pushed, PR #460 opened against `master` and left green for the owner — merging publishes to NuGet.org, so landing stays an owner action. +- NEXT: unchanged queue head — session 81's `NEXT:` §5.1 INSERT item (i), the identity-remap fast path for `InsertBatch(table, rows, columns)` when the column order already matches the table order (112 B/row on the array arm). Open and BLOCKED, carried forward rather than dropped: `codecov/project` is never posted for this repository (evidence above, restated in `codecov.yml`), needs a Codecov dashboard/app check, and costs nothing while absent. + From f2cc566d60b13e2d9348a6cb3d73aabeeb979db3 Mon Sep 17 00:00:00 2001 From: MPCoreDeveloper Date: Tue, 13 Oct 2026 05:20:38 +0200 Subject: [PATCH 3/3] docs(perf): session 86 addendum -- the flag list is default-branch driven, so its half of the effect is a post-merge observation, not a PR-time claim --- docs/performance/WORKLOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/performance/WORKLOG.md b/docs/performance/WORKLOG.md index 93a5ae66..a1ebb7b0 100644 --- a/docs/performance/WORKLOG.md +++ b/docs/performance/WORKLOG.md @@ -5209,6 +5209,7 @@ Nothing in the repository explains a stall: no `.git/*.lock`, no fsmonitor daemo - Verified by the runners, not by this box: PR **#460** (`perf/autonomous-20261012`, head `4eafadd8`) — every job pass: `Build and Test` on windows-latest (5m13s), ubuntu-latest and macos-latest, `Coverage (net11.0)` job `114964439430` logging `PASS measured 45.94%, floor 18.00%`, `codecov/patch` **pass**, `Server Compatibility Smoke`, CodeQL and `submit-nuget`. Codecov's own comment on #460 renders the new layout — header and status only, no flags or components section — which is the user-visible half of the change and the reason it is in `docs/CHANGELOG.md` under `[Unreleased] → Changed`. - `codecov/project`, checked and handed on rather than silently left out — the repository has never had it: the GitHub API carries `codecov/patch` and **no** `codecov/project` on `58f297e` (the promotion commit), on `204d9f8`, `4283626`, `b6bcf34a`, and on the heads of #446/#447/#448, including commits whose base *does* have an uploaded report. Nothing in `codecov.yml` can post it and nothing is lost while it is absent (the patch status, the PR comment and the in-job 18 % floor at `tools/measure-coverage.ps1 -Floor 0.18` all still report), so it is recorded in the file as `BLOCKED (2026-10-12, outside this repository)` — a Codecov dashboard/app question, not a repository defect. - Not fixed by weakening anything: no status or flag semantics changed (the upload stays unflagged, the floor stays in-job), so this commit is a `chore`; the only behaviour a user sees is the PR comment losing two sections that were always empty. +- One nuance measured so a later session does not read it as a failed fix: the repository-level `/flags/` list **still** answers `{"count": 1, "results": [{"flag_name": "unittests", "coverage": 0.0}]}` while PR #460 is open, i.e. even after the PR's own uploads were processed with a config that no longer declares the flag (the head commit's upload record reads `"flags": []`). So that list is fed by the *default branch* config, not by the PR head's: the flag disappears from it when `master` carries this change, and the half that is visible at PR time is the comment. The fix is therefore verified on #460 through the comment layout and the green floor, and its flag-list effect is a post-merge observation to make, not a claim to assert now. - Commit: `4eafadd8` (`chore(codecov): …`) on `perf/autonomous-20261012`, pushed, PR #460 opened against `master` and left green for the owner — merging publishes to NuGet.org, so landing stays an owner action. - NEXT: unchanged queue head — session 81's `NEXT:` §5.1 INSERT item (i), the identity-remap fast path for `InsertBatch(table, rows, columns)` when the column order already matches the table order (112 B/row on the array arm). Open and BLOCKED, carried forward rather than dropped: `codecov/project` is never posted for this repository (evidence above, restated in `codecov.yml`), needs a Codecov dashboard/app check, and costs nothing while absent.