Repository navigation
release: 44 image findings on the Debian 13 base accepted as exceptions until 2027-02-01 (060 3.2.1, A-79, A-80) - #503
Conversation
AI review (findings)Reviewing the diff for bugs, security problems, and inconsistencies. Decision numbering gap. The founding-decisions table goes A-74 → A-75 → A-76, then this PR inserts A-79 and A-80 immediately after A-76 in the same hunk. No A-77 or A-78 rows appear anywhere in the diff. The resulting file has a gap A-76 → A-79 that is inconsistent with the otherwise unbroken sequential numbering. Test assertion count vs. synthetic finding count. The new test builds {"head": "fb95a6db5f4071ab33dcf08b4c958e6b3e2fd45a", "verdict": "findings", "findings": [{"path": "docs/decisions/00-founding-decisions.md", "line": 270, "summary": "Decision rows A-77 and A-78 are absent; the table jumps from A-76 to A-79, creating a numbering gap inconsistent with the otherwise unbroken sequential numbering convention."}, {"path": "tools/rustev-release/tests/image_scan.rs", "line": 88, "summary": "The test synthesises 88 findings (44 exceptions × 2 platforms) but asserts exactly 44 'expired' messages; if check reports one diagnostic per uncovered finding the assertion will fail."}]}Subject: a219790...fb95a6d, diff digest dfa37f2edc0467941a31e5c772164246768d5e6213304d809e9e7562402abf92, 1 call(s). An AI comment is not an approval. |
a219790 to
eb88a21
Compare
fb95a6d to
4688b5d
Compare
AI review (findings)Reviewing the diff for bugs, security problems, and inconsistencies. Counting exceptions: gcc-14-base (5) + libc6 (22) + libgcc-s1 (5) + libgomp1 (5) + libstdc++6 (5) + zlib1g (2) = 44. Matches the assertion. Decision row numbering gap: The base commit ends the table at A-76, and the diff's context lines show A-76 immediately followed by the closing line "No approval authorizes ratifying any other spec." The PR inserts A-79 and A-80 at that location, skipping A-77 and A-78 entirely. No other hunk in the diff adds those rows. README base image vs. exception scope: The README still names Test logic: The {"head": "4688b5da678e76303fd7cfa9bc0519ec34272360", "verdict": "findings", "findings": [{"path": "docs/decisions/00-founding-decisions.md", "line": 270, "summary": "Decision table jumps from A-76 to A-79, skipping A-77 and A-78 with no rows for them anywhere in the diff."}, {"path": "integrations/rustev-serve/README.md", "line": 140, "summary": "The added CVE-2026-8674 warning cites exception A-80, which covers the cc-debian13 base scan, while the README still names cc-debian12 as the pinned base, making the exception reference misleading before the base move merges."}]}Subject: eb88a21...4688b5d, diff digest 659de10cd15a1d5d2a0a601071c3c9a5638c476dd148c7767f578f84d85b3b4e, 1 call(s). An AI comment is not an approval. |
eb88a21 to
42d9427
Compare
4688b5d to
4008f22
Compare
AI review (findings)Looking at the diff, I'll check for concrete defects in the exception list, decision log, and test logic. Decision numbering gap The founding decisions document shows: A-77 and A-78 do not appear anywhere in the diff or in the context lines provided. The table jumps directly from A-76 to A-79, leaving two decision numbers unaccounted for in the log. Libc6 "not reached" rationale is internally contradictory In No other concrete defects found. The 44-entry count is correct (5 gcc-14-base + 22 libc6 + 5 libgcc-s1 + 5 libgomp1 + 5 libstdc++6 + 2 zlib1g = 44). The test logic (88 findings from 44 exceptions × 2 platforms, checking expiry on 2027-02-02) is internally consistent. The cc-debian12/cc-debian13 discrepancy in the README is acknowledged and intentional per the spec text. A-80 is validated to exist by the test's {"head": "4008f220ed697541b5a88aefefc66f618cf6beb8", "verdict": "findings", "findings": [{"path": "docs/decisions/00-founding-decisions.md", "line": null, "summary": "Decision numbering jumps from A-76 directly to A-79, leaving A-77 and A-78 absent from the log with no explanation."}, {"path": "tools/rustev-release/image-exceptions.json", "line": null, "summary": "Twenty-one libc6 entries use the reason 'links only libc, libm and libgcc_s' to claim 'not reached', which is circular because libc6 is one of those three linked libraries; the reason does not explain why the specific vulnerable code paths are unreachable."}]}Subject: 42d9427...4008f22, diff digest d614a3ebfb56d2f4c0b195bdf35f7efac23a9cac0947b4baeea3d26b65e96df4, 1 call(s). An AI comment is not an approval. |
AI review (findings)Reviewing the diff for bugs, security problems, and inconsistencies across the six changed files. Counts and dates A-80 claims "accept all 44". Counting entries in Test logic
README / base-image inconsistency (concrete defect)
No other concrete defects are supported by the evidence in the diff. {"head": "4008f220ed697541b5a88aefefc66f618cf6beb8", "verdict": "findings", "findings": [{"path": "integrations/rustev-serve/README.md", "line": 141, "summary": "The README still documents cc-debian12:nonroot as the pinned base but the new CVE-2026-8674 paragraph cites exception A-80, which was accepted specifically for cc-debian13:nonroot findings; the exception is inapplicable to the base the README currently describes."}]}Subject: 42d9427...4008f22, diff digest d614a3ebfb56d2f4c0b195bdf35f7efac23a9cac0947b4baeea3d26b65e96df4, 1 call(s). An AI comment is not an approval. |
42d9427 to
dc3e189
Compare
4008f22 to
c6505f8
Compare
AI review (findings)Reviewing the diff for bugs, security problems, and inconsistencies. image-exceptions.json — reason text for libc6 entries The 21 libc6 CVE exceptions (every entry except CVE-2026-8674) carry the reason specs/060-the-service-image-in-the-release/spec.md — contradictory base-state claim Within the new Increment 3b paragraph the text first states: "The owner moved the base to {"head": "c6505f8df7024750e6ad97d84c2e9a137d341a75", "verdict": "findings", "findings": [{"path": "tools/rustev-release/image-exceptions.json", "line": null, "summary": "The reason 'not reached: rustev-serve links only libc, libm and libgcc_s' is factually inapplicable to libc6 CVE exceptions because libc6 is libc, one of the three libraries the binary does link; the stated non-linkage rationale does not explain why those specific libc6 code paths are unreachable."}, {"path": "specs/060-the-service-image-in-the-release/spec.md", "line": null, "summary": "Increment 3b first says 'The owner moved the base to gcr.io/distroless/cc-debian13:nonroot' (past tense, done) and then says the image is 'on the cc-debian12 base, until the base move merges', directly contradicting the first statement within the same paragraph."}]}Subject: dc3e189...c6505f8, diff digest 9a6f52e60da9f111debb171157c65f5f27b3062a939bab1900fd8db72c854e4c, 1 call(s). An AI comment is not an approval. |
c6505f8 to
c856754
Compare
AI review (findings)Looking at the diff, I'll check each changed file for bugs, security problems, and inconsistencies.
The diff context shows the table jumping from A-76 directly to A-79, with A-77 and A-78 absent at the insertion point: Decision rows are appended in sequential order; the base already has A-75 and A-76, and A-77/A-78 are nowhere in the hunk. That is a concrete numbering gap.
Counted 44 entries (5
The The test spot-checks
Prose is internally consistent with the exception file and the decision rows; the CVE-2026-8674 description ("~200-character search domain aborts glibc resolver") and the operator-control mitigation are stated the same way in both specs and the README. Summary: one concrete defect — the gap in sequential decision-row numbering. {"head": "c856754abebfd5b6f8cb85d00871f53e41d7e804", "verdict": "findings", "findings": [{"path": "docs/decisions/00-founding-decisions.md", "line": null, "summary": "Decision rows A-77 and A-78 are absent; the table jumps from A-76 directly to A-79, leaving a two-entry gap in the sequential numbering."}]}Subject: b4b19e8...c856754, diff digest 9a6f52e60da9f111debb171157c65f5f27b3062a939bab1900fd8db72c854e4c, 1 call(s). An AI comment is not an approval. |
c856754 to
1d46233
Compare
AI review (no-findings)Reviewing the diff across all six changed paths for consistency, correctness, and security defects. Counts and arithmetic
Expiry arithmetic: A-80 row date 2026-11-03 + 90 days = 2027-02-01. ✓ Test logic (
Security note for CVE-2026-8674 The README and spec 042 operator note correctly identify this as the one reachable finding and instruct operators to control Reason text for The boilerplate reason "not reached: rustev-serve links only libc, libm and libgcc_s" is applied to No governance violation, security defect, or cross-file inconsistency that the supplied evidence supports. {"head": "1d46233baff62a32a2af50b7908d9162284e0f52", "verdict": "no-findings", "findings": []}Subject: 294c40d...1d46233, diff digest 08a75cf882b452b0da550ec49bf3293d6c110bb5da87d8022c6cb318b3b8e4a7, 1 call(s). An AI comment is not an approval. |
1d46233 to
7571df2
Compare
AI review (findings)Reviewing the diff for bugs, security problems, and inconsistencies. Decision row numbering gap
Exception reason text for libgcc-s1 is self-contradictory
Everything else reviewed
{"head": "7571df2400c4e71015d16bbef84dd8c40aa1e79d", "verdict": "findings", "findings": [{"path": "docs/decisions/00-founding-decisions.md", "line": null, "summary": "Decision row A-78 is absent: the table jumps from A-77 to A-79 with no row or explanation for the gap."}, {"path": "tools/rustev-release/image-exceptions.json", "line": null, "summary": "The five libgcc-s1 exception entries give the reason 'not reached: rustev-serve links only libc, libm and libgcc_s', but libgcc-s1 is the package that provides libgcc_s and is therefore a direct link dependency; the stated reason is self-contradictory for this package."}]}Subject: 185713b...7571df2, diff digest 7ea0683e1f25a581ca2ba7dd6fb3538923c397309b2513c986b58ace5b0f5b98, 1 call(s). An AI comment is not an approval. |
7571df2 to
082fbd0
Compare
AI review (findings)Looking at the diff across the six changed files, I find two concrete defects. Finding 1 — Missing decision row A-78 ( The diff adds A-79 and A-80 immediately after A-77. The unchanged context lines show A-77 as the last existing entry, and the section closes with "No approval authorizes ratifying any other spec." There is no A-78 row anywhere in the added or surrounding lines. The gap is not explained by any adjacent text, and the sequential numbering convention used throughout the table makes the absence a concrete omission. Finding 2 — Internally inconsistent "not reached" justification for The spec text in {"head": "082fbd0c124b95d46636bcc8560ed81ff1c6c24c", "verdict": "findings", "findings": [{"path": "docs/decisions/00-founding-decisions.md", "line": 271, "summary": "Decision row A-78 is absent from the sequence: numbering jumps from A-77 to A-79 with no explanation."},{"path": "tools/rustev-release/image-exceptions.json", "line": null, "summary": "Twenty-one libc6 entries and five libgcc-s1 entries carry the reason 'not reached: rustev-serve links only libc, libm and libgcc_s', but those packages are explicitly among the linked libraries, making the library-linkage argument internally inconsistent for those 26 entries."}]}Subject: b8a8cd8...082fbd0, diff digest 107bdf966e3f897d1f66c7cc1e2eca0f4981764495f2a87a34864ae4d0bb629b, 1 call(s). An AI comment is not an approval. |
…exceptions until 2027-02-01 (060 3.2.1, A-79, A-80)
…060 3.2.1, A-80) The libc6 and gcc-14 entries named the binary's linkage as the reason, which does not explain findings in the libraries the binary links. Each entry now names the affected function or component and why rustev-serve does not reach it.
082fbd0 to
ff2e4cb
Compare
AI review (findings)Reviewing the diff for bugs, security defects, and governance inconsistencies. image-exceptions.json — entry count Expiry arithmetic test coverage (image_scan.rs) A-79 / spec 060 inconsistency — concrete finding {"head": "ff2e4cb49c3fd0c2e8f7d4a5eb8201ec58c36d8e", "verdict": "findings", "findings": [{"path": "docs/decisions/00-founding-decisions.md", "line": 272, "summary": "A-79 claims the 3.4.3 amendment is 'Recorded in 060's Decisions at approval', but the spec 060 diff adds the reference only to the narrative increment body before that section header, not inside the '## Decisions at approval' section."}]}Subject: 3ab57f8...ff2e4cb, diff digest 53f8e1933f8f972f6a125306ecd049277176dbbdb88c673cd3f459fb9ce829f2, 1 call(s). An AI comment is not an approval. |
AI review (no-findings)Reviewing the six changed files for concrete defects.
Counting by hand:
Decision rows A-79 and A-80 are both dated 2026-11-03. A-80 says "90 days after this row" → 2026-11-03 + 90 = 2027-02-01. November has 30 days (27 remaining after Nov 3) + 31 (Dec) + 31 (Jan) = 89 days to Jan 31; +1 more = Feb 1. ✓ All expiry dates in the exception file match.
The operator note in Reason text for Each No concrete defects found. {"head": "cbe23c7be5f390ea7d81397cb56480c42ec44da9", "verdict": "no-findings", "findings": []}Subject: 3ab57f8...cbe23c7, diff digest 49d57f784fe291a794f02390d71f07be7f882375346d338a19499887625076c1, 1 call(s). An AI comment is not an approval. |
AI review (no-findings)Reviewing the six changed files for bugs, security problems, and inconsistencies.
No concrete defects found. {"head": "cbe23c7be5f390ea7d81397cb56480c42ec44da9", "verdict": "no-findings", "findings": []}Subject: 3ab57f8...cbe23c7, diff digest 49d57f784fe291a794f02390d71f07be7f882375346d338a19499887625076c1, 1 call(s). An AI comment is not an approval. |
Spec 060 3.2.1: the owner's ruling on the image findings, as exceptions. Stacked on #491, because #491 adds the scan gate and the exceptions file this PR fills; #499's chain does not contain it. #499 needs this PR, #491, #500/#501 and #502.
tools/rustev-release/image-exceptions.json: all 44 (vulnerability, package) pairs grype 0.120.1 reported on both platforms of thegcr.io/distroless/cc-debian13:nonrootimage. Each entry names decision row A-80 and expires on 2027-02-01, 90 days after the row.docs/decisions/00-founding-decisions.md: two new rows, placed after A-76.integrations/rustev-serve/README.md: operator note onresolv.conf/LOCALDOMAIN(CVE-2026-8674), with a record paragraph in spec 042.the_committed_exceptions_name_owner_rows_and_cover_their_findings(tests/image_scan.rs) requires:Checks:
cargo test -p rustev-release --locked --test image_scanpassed;make gatepassed;spec-spine coupleOK (9 paths);check-authored-content.shclean.