Skip to content

Fix newly reachable const lint findings - #409

Merged
leynos merged 2 commits into
mainfrom
harden-dev-tooling-source-prerequisites
Sep 18, 2026
Merged

leynos merged 2 commits into
mainfrom
harden-dev-tooling-source-prerequisites

Conversation

@leynos

@leynos leynos commented Sep 16, 2026 •

Copy link
Copy Markdown
Owner

Summary

This two-commit prerequisite layer fixes the const and assertion findings
exposed while preparing explicit dev-fast routing. It retains Rust 1.85
compatibility by consuming the private test-only close log with
Cell::into_inner(), makes the private pump helpers const-safe, and refreshes
the byte-exact privacy diagnostic without changing the privacy contract. A
follow-up documentation commit records why both accesses take that shape, so
the const qualifiers are not mistaken for ownership or visibility changes.

PR #412's floating shared spelling-builder policy is inherited through
PR #387 at
1a83587c914f0c603e42d6bed5d0bddb76c2534f. This layer does not alter that
policy or any spelling-builder configuration. PR #410
is the next stack layer.

Replay evidence

The owned commit, Fix newly reachable const lint findings, was replayed from
the preserved exclusive boundary
1a83587c914f0c603e42d6bed5d0bddb76c2534f..c49d9dba5d65a2756b42c824dfcc492912e66066
onto 33bff5dbc68eac170848d5ef317c377a3198342c, the squash-merge of the parent
PR #387 that is the current origin/main tip. The replay is linear and
conflict-free. Its stable patch ID remains
8ea3bda75a8cd92041f44a567fabb25cc2d662c6, and its child diff still has
exactly four paths, byte-identical to the pre-rebase result.

The boundary was established from three independent sources rather than from a
merge-base shortcut: PR #387's squash commit has a tree byte-identical to the
retained parent head 245c175a, the commit 1a83587c carries the same stable
patch ID as its counterpart 862c22b5 in that retained history, and a prior
restack receipt for this branch records the same target. The intervening 76
main-side paths are untouched by this layer; all four owned paths are
byte-identical between the old base and the new target.

Review walkthrough

Validation

Each gate below ran sequentially against the exact head being pushed,
a10602e5a04edc2e8fff34f065bd182c73eba03d; all eight exited 0.

  • make check-fmt: 496 files formatted, 65 Markdown files unchanged;
  • make lint: ruff, interrogate 100%, pylint 10.00/10 (PyPy shim and the
    df12 plugin), ambrleaks, skylos, cargo doc -D warnings, clippy
    -D warnings, whitaker, spelling, yamllint, and actionlint;
  • make typecheck: ty 0.0.74 reports "All checks passed!";
  • make test: 1,911 passed and 1 skipped of 1,912 collected, plus 125 of
    125 Rust tests under cargo-nextest — the skip is the Windows-only
    winerror case, which is expected on Linux;
  • make markdownlint: 65 files, 0 errors; make nixie: all 65 documents'
    Mermaid diagrams valid;
  • make boundary-test: 13 Rust and 45 pytest cases passed; and
    make boundary-contract exited 0.

No tracked file was modified by any gate.

The repository-pinned Rust 1.85 UI run passed the recorded expected
diagnostics. An ad hoc ambient stable trybuild run adds a definition span to
the unrelated inherited replace_scoped_writer.stderr fixture. The changed
pump_transition_unreachable fixture passed in that run; the ambient mismatch
does not affect this replay. No msrv-check target exists in this repository.

Hosted checks and the current-head managed CodeRabbit review remain pending.
Earlier hosted checks and approval apply only to the prior candidate.

Train coordination and limits

shared-actions#496
remains open. It tracks the external deterministic CodeScene coverage CLI
installation problem; it is not a Cuprum source failure.

References

@coderabbitai

coderabbitai Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Review Change StackReview Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Team

Run ID: c2cbdcf4-4676-4f66-a3fa-801abae4db90

📥 Commits

Reviewing files that changed from the base of the PR and between b598ec6 and c49d9db.

📒 Files selected for processing (4)
  • rust/cuprum-native-io/src/fd_ownership_model.rs
  • rust/cuprum-streams/src/io_utils/tracing_tests.rs
  • rust/cuprum-streams/src/pump_machine.rs
  • rust/cuprum-streams/tests/ui/fail/pump_transition_unreachable.stderr
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • leynos/df12-python-lints (auto-detected)
  • leynos/shared-actions (auto-detected)
  • leynos/whitaker (auto-detected)
  • leynos/nixie (auto-detected)
  • leynos/pylint-pypy-shim (auto-detected)
  • leynos/mdtablefix (auto-detected)

Included review availability: 0 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.


Summary

  • Make CloseLog::closes, pump_machine::step, and apply_write const fn.
  • Preserve existing behaviour, callers, Rust 1.85 compatibility, and privacy.
  • Update the compile-fail expectation for the private const fn diagnostic.
  • Correct the trailing comma in the tracing test assertion.
  • Add no new execplan or design document.

Walkthrough

Update selected Rust operations for const evaluation. Make CloseLog::closes consume its log. Align the UI diagnostic and tracing assertion with the code changes.

Changes

Const evaluation updates

Layer / File(s) Summary
Const-capable APIs and operations
rust/cuprum-native-io/src/fd_ownership_model.rs, rust/cuprum-streams/src/pump_machine.rs
Declare step and apply_write as const fn. Make CloseLog::closes consume self and use Cell::into_inner.
Diagnostic and assertion alignment
rust/cuprum-streams/tests/ui/fail/pump_transition_unreachable.stderr, rust/cuprum-streams/src/io_utils/tracing_tests.rs
Update the compiler diagnostic to show step as const fn. Remove the unchanged trailing comma from the fatal write assertion.

Priority: ⬇️ Low

Change: Refactor · Unblocks: 3 PRs

Merge Risk: ⚪ Minimal · up to c49d9

The const updates and aligned test fixtures do not show a merge-blocking behavior change.

🚥 Pre-merge checks | ✅ 14 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Developer Documentation ⚠️ Warning Fail this check because the pull request changes the crate-visible CloseLog::closes API from &self to consuming self, but it adds no developer-guide documentation. The authoritative diff changes… Add a section to docs/developers-guide.md for the Rust test/Kani ownership model. Document that CloseLog::closes(self) -> u32 consumes the test-only log, uses Cell::into_inner(), and exists to keep the accessor const on the Rust 1.8…
✅ Passed checks (14 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 83.33% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 3 files. (1 skipped: 1 u…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Testing (Overall) ✅ Passed PASS. Mark this check satisfied because the PR introduces no new runtime behaviour. It only adds const qualification, changes the private test-model accessor to consume its Cell, removes assertion…
User-Facing Documentation ✅ Passed Pass this check. The PR changes only internal or test-only Rust code: CloseLog is behind #[cfg(any(test, kani))] and remains pub(crate), while pump_machine is a private module and its changed …
Module-Level Documentation ✅ Passed Pass this check. Each changed Rust source module has module-level //! documentation. fd_ownership_model.rs explains the close-effect model and its production relationship. tracing_tests.rs expla…
Testing (Unit And Behavioural) ✅ Passed Pass the testing check. The pull request changes only const qualification, the private test-only CloseLog accessor implementation, assertion punctuation, and the expected privacy diagnostic. It does…
Testing (Property / Proof) ✅ Passed PASS — The pull request does not introduce a new invariant over a range of inputs, states, orderings, or transitions. It adds const to the private step and apply_write helpers, changes the test-…
Testing (Compile-Time / Ui) ✅ Passed Pass the testing check. The pull request changes Rust compile-time declarations and updates the existing trybuild UI fixture. rust/cuprum-streams/tests/compile_tests.rs runs every `tests/ui/fail/*…
Unit Architecture ✅ Passed Accept the change. The diff only adds const to private, pure pump-state helpers, changes CloseLog::closes to consume its private test log with Cell::into_inner, removes an assertion comma, and r…
Domain Architecture ✅ Passed Pass this check. The pull request changes only const qualifiers, a test assertion comma, and the matching UI diagnostic. CloseLog remains a #[cfg(any(test, kani))] ownership model, and step/`app…
Observability ✅ Passed Pass the observability check. The diff only makes private/test-only helpers const, changes Cell::get to consuming Cell::into_inner in a #[cfg(any(test, kani))] ownership model, removes an asse…
Title check ✅ Passed The title accurately describes the main change: fixing newly reachable const-related lint findings in the pump helpers and test-only close-log accessor. No roadmap or issue reference is required becau…
Description check ✅ Passed The description is directly related to the changeset. It explains the const compatibility changes, the diagnostic fixture update, validation results, and scope limitations.
Full details: Developer Documentation

Explanation

Fail this check because the pull request changes the crate-visible CloseLog::closes API from &self to consuming self, but it adds no developer-guide documentation. The authoritative diff changes only four Rust source or UI-fixture paths. Searches found no CloseLog, apply_write, or pump_machine::step documentation in docs/developers-guide.md. The source comment states only what the method returns and does not state that the log is consumed. The change is test/Kani-only, but CloseLog and closes are still pub(crate) internal APIs. No architecture, roadmap item, or execplan change is present.

Resolution

Add a section to docs/developers-guide.md for the Rust test/Kani ownership model. Document that CloseLog::closes(self) -> u32 consumes the test-only log, uses Cell::into_inner(), and exists to keep the accessor const on the Rust 1.85 toolchain. Record that pump_machine::step and apply_write remain private implementation helpers whose const fn qualification does not widen their visibility or alter the pump contract. Keep any relevant Rust design or ownership references consistent with this guide entry.


Const paths now open
Close logs yield their counts
Stream steps compile
Diagnostics track the code
Tests keep their form

Comment @coderabbitai help to get the list of available commands.

@sourcery-ai

sourcery-ai Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

This prerequisite patch addresses newly reachable const and assertion lint findings by const-qualifying private pump helpers and the test-only close-log accessor, using Rust 1.85-compatible Cell::into_inner(), and updating the affected compile-fail diagnostic without changing runtime behavior, visibility, or privacy semantics.

File-Level Changes

Change Details Files
Make private helper and test utilities const-compatible while preserving their APIs and behavior.
  • Mark pump state transition helpers as const fn without changing callers or visibility.
  • Convert the test-only close-log accessor to consuming const fn using Cell::into_inner(), retaining Rust 1.85 compatibility.
  • Remove the redundant trailing comma in a tracing assertion.
rust/cuprum-streams/src/pump_machine.rs
rust/cuprum-native-io/src/fd_ownership_model.rs
rust/cuprum-streams/src/io_utils/tracing_tests.rs
Refresh the compile-fail diagnostic fixture for the const-qualified private helper changes.
  • Update the byte-exact expected UI diagnostic while preserving the private-function privacy expectation.
rust/cuprum-streams/tests/ui/fail/pump_transition_unreachable.stderr

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

codescene-access[bot]

This comment was marked as outdated.

@pandalump

Copy link
Copy Markdown
Collaborator

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@leynos
leynos force-pushed the harden-dev-tooling-source-prerequisites branch from b598ec6 to 2552846 Compare September 17, 2026 11:25
codescene-access[bot]

This comment was marked as outdated.

codescene-access[bot]

This comment was marked as outdated.

@leynos
leynos added this pull request to stack #419 September 17, 2026 14:08
@leynos
leynos marked this pull request as ready for review September 17, 2026 14:47

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-17T14:49:37.330094Z c49d9db Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@wafflecat-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Base automatically changed from issue-379-isolate-unsafe-rust-in-audited-boundary-crates-and-validate-with-verus-kani-and-miri to main September 18, 2026 22:39
leynos and others added 2 commits September 19, 2026 01:00
Keep the pump state-machine helpers const-safe on Rust 1.85 and retain
the byte-exact privacy diagnostic after its signature changes.
CodeRabbit's pre-merge walkthrough withheld the Developer Documentation
check because the const work changed a crate-visible API without a guide
entry. Record why `CloseLog::closes` consumes its log and why the pump
helpers are `const`, so the next reader does not mistake either for an
ownership or visibility change.

The workspace denies `missing_const_for_fn`, so an accessor with no reason
to run at runtime must be `const`. `Cell::get` is not const-stable on the
pinned Rust 1.85.0 toolchain, while `Cell::into_inner` is, and reaching it
requires taking `self` by value. `CloseLog` stays `pub(crate)` inside a
`#[cfg(any(test, kani))]` module and every caller reads the log once as its
final use, so the model's unit tests and Kani proofs keep their call sites.

`const` on `pump_machine::step` and `apply_write` qualifies how a function
may be called, not who may call it, so neither helper widens its visibility
and the pump contract is unchanged. The compile-fail case that pins that
encapsulation boundary still fails if either item is widened, even to
`pub(crate)`; only its quoted definition line moved.
@leynos
leynos force-pushed the harden-dev-tooling-source-prerequisites branch from c49d9db to a10602e Compare September 18, 2026 23:22
@pandalump

Copy link
Copy Markdown
Collaborator

@coderabbitai — focused follow-up on the Developer Documentation pre-merge row,
which currently evaluates a superseded candidate.

Head is now a10602e5a04edc2e8fff34f065bd182c73eba03d. The branch was rebased
onto main's squash of #387, 33bff5dbc68eac170848d5ef317c377a3198342c, and
force-pushed; the layer is now two commits and the diff against main is five
paths, not the four the row describes. The row's "authoritative diff" wording
therefore no longer matches the head it is quoted against.

The resolution the row asks for now exists. docs/developers-guide.md gains
"Const accessors in the test and Kani ownership model" (line 2552), added in
a10602e5, which records both requested points:

  • CloseLog::closes(self) -> u32 consumes the test-only log and reaches
    Cell::into_inner() because that is the const-stable path on the workspace's
    Rust 1.85.0 toolchain — Cell::get is not yet stable as a const fn there. The
    consuming receiver is what keeps the accessor const; it is not a new
    ownership rule. CloseLog stays pub(crate) behind
    #[cfg(any(test, kani))], and each caller reads the log once as its final
    use, so the model's unit tests and fd_ownership_kani_proofs.rs keep their
    existing call sites.
  • pump_machine::step and apply_write stay private implementation helpers.
    const qualifies how a function may be called, not who may call it, so
    neither widens its visibility or alters the pump contract;
    tests/ui/fail/pump_transition_unreachable.rs still pins that boundary and
    fails if either item is widened, even to pub(crate).

Please re-evaluate the Developer Documentation row against head a10602e5.
This is a focused follow-up to that row only — no new full review is requested.

@coderabbitai

coderabbitai Bot commented Sep 18, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== HEAD =='
git rev-parse HEAD
printf '%s\n' '== Diff paths against main =='
git diff --name-status main...HEAD
printf '%s\n' '== Documentation section =='
rg -n -A45 -B5 'Const accessors in the test and Kani ownership model' docs/developers-guide.md
printf '%s\n' '== CloseLog declaration and calls =='
rg -n -A18 -B8 'struct CloseLog|fn closes\s*\(' rust/cuprum-native-io/src/fd_ownership_model.rs
rg -n -A3 -B3 '\.closes\s*\(' rust/cuprum-native-io/src rust/cuprum-native-io/tests || true
printf '%s\n' '== Pump helper declarations =='
rg -n -A14 -B8 'const fn step\s*\(|const fn apply_write\s*\(' rust/cuprum-streams/src/pump_machine.rs
printf '%s\n' '== UI privacy assertion =='
sed -n '1,220p' rust/cuprum-streams/tests/ui/fail/pump_transition_unreachable.rs
printf '%s\n' '== Documentation diff =='
git diff --unified=20 main...HEAD -- docs/developers-guide.md

Length of output: 1367


🏁 Script executed:

#!/bin/bash
set -u

echo '== Commit topology =='
git show -s --format='HEAD %H%nparents %P%nsubject %s' HEAD
git cat-file -e 33bff5dbc68eac170848d5ef317c377a3198342c^{commit} 2>&1
echo "base_commit_present=$?"

echo '== Files changed by HEAD commit =='
git show --name-status --format='' HEAD

echo '== Documentation section =='
rg -n -A50 -B5 'Const accessors in the test and Kani ownership model' docs/developers-guide.md || true

echo '== CloseLog declaration =='
rg -n -A20 -B8 'struct CloseLog|const fn closes\s*\(' rust/cuprum-native-io/src/fd_ownership_model.rs || true

echo '== CloseLog callers =='
rg -n -A3 -B3 '\.closes\s*\(' rust/cuprum-native-io || true

echo '== Pump helper declarations =='
rg -n -A16 -B8 'const fn step\s*\(|const fn apply_write\s*\(' rust/cuprum-streams/src/pump_machine.rs || true

echo '== UI compile-fail source =='
sed -n '1,220p' rust/cuprum-streams/tests/ui/fail/pump_transition_unreachable.rs

echo '== UI compile-fail expectation =='
sed -n '1,220p' rust/cuprum-streams/tests/ui/fail/pump_transition_unreachable.stderr

echo '== Docs patch in HEAD =='
git show --format='' --unified=12 HEAD -- docs/developers-guide.md

Length of output: 151301


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== Documentation heading =='
rg -n 'Const accessors in the test and Kani ownership model' docs/developers-guide.md

echo '== CloseLog declaration =='
rg -n -A18 -B6 'struct CloseLog' rust/cuprum-native-io/src/fd_ownership_model.rs

echo '== CloseLog accessor and all calls =='
rg -n -A4 -B4 'const fn closes\s*\(|\.closes\(\)' rust/cuprum-native-io/src/fd_ownership_model.rs rust/cuprum-native-io/src/fd_ownership_kani_proofs.rs

echo '== Pump declarations =='
rg -n -A12 -B8 'const fn (step|apply_write)\s*\(' rust/cuprum-streams/src/pump_machine.rs

echo '== UI test references =='
rg -n -A8 -B8 'Transition::Wrote|step\(' rust/cuprum-streams/tests/ui/fail/pump_transition_unreachable.rs

echo '== UI expected private diagnostics =='
rg -n -A4 -B4 'private|step|apply_write' rust/cuprum-streams/tests/ui/fail/pump_transition_unreachable.stderr

echo '== Current documentation diff statistics =='
git diff --stat 33bff5dbc68eac170848d5ef317c377a3198342c..HEAD 2>&1 || true
git diff --name-only 33bff5dbc68eac170848d5ef317c377a3198342c..HEAD 2>&1 || true

Length of output: 13071


@pandalump: Treat the Developer Documentation row as addressed.

The checked-out head is a10602e5a04edc2e8fff34f065bd182c73eba03d. The diff against 33bff5d contains five paths, including docs/developers-guide.md.

The new section at Line 2552 documents both required points:

  • CloseLog::closes(self) -> u32 uses Cell::into_inner() for Rust 1.85 const compatibility. The current declaration, visibility, test/Kani gating, and final-use call sites match the documentation.
  • step and apply_write remain private const fn helpers. The compile-fail fixture still asserts that Transition and step are private, and its expected diagnostic now matches const fn step.

No further Developer Documentation action is required for this change.


✏️ Learnings added
Learnt from: pandalump
URL: https://github.com/leynos/cuprum/pull/409

Timestamp: 2026-09-18T23:33:54.675Z
Learning: In `docs/developers-guide.md`, the “Const accessors in the test and Kani ownership model” section documents that `CloseLog::closes(self) -> u32` consumes `CloseLog` to use const-stable `Cell::into_inner()` on Rust 1.85.0. It also documents that `pump_machine::step` and `apply_write` remain private `const fn` helpers, with `rust/cuprum-streams/tests/ui/fail/pump_transition_unreachable.rs` enforcing the privacy boundary.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

You are interacting with an AI system.

@wafflecat-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai approve

@coderabbitai

coderabbitai Bot commented Sep 18, 2026

Copy link
Copy Markdown
✅ Action performed

Comments resolved and changes approved.

@leynos
leynos merged commit f48cf8d into main Sep 18, 2026
28 checks passed
@leynos
leynos deleted the harden-dev-tooling-source-prerequisites branch September 18, 2026 23:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants