Skip to content

fix(metadata): five assertions that could not fail on what they describe - #2074

Merged
justinchuby merged 3 commits into
mainfrom
justinchuby/companion-carve-out-decidability
Aug 26, 2026
Merged

justinchuby merged 3 commits into
mainfrom
justinchuby/companion-carve-out-decidability

Conversation

@justinchuby

@justinchuby justinchuby commented Aug 25, 2026 •

Copy link
Copy Markdown
Owner

What this fixes

A comment in shipped code states a claim about the validator beneath it that is
false, and false in the direction that invites a weaker reimplementation.

validation.rs, above the serving companion carve-out:

All of that is decidable from the declared outputs alone.

The code immediately below does not do that, and must not. output_companions
opens with let emitted = emitted_outputs(workflow); and walks the step tree,
then sets claimant_emitted on every CompanionExpectation. That field exists
precisely so a value claimed only by a declaration that no step writes hears
about the declaration, rather than being advised to declare a row axis -- which
is the one layout a companion may not have. The function's own doc comment says
this correctly; only the call-site comment is stale.

Why a comment is worth a PR

The claim is not merely imprecise. An implementer working from it produces the
outputs-only check, and that check has a hole: declare a padded output beside
any shared int64 vector, write neither, and the vector walks past the serving
rule on the strength of a payload that does not exist. One emit and one bare
declaration are two answers to one question.

The design document of record carried the identical sentence and was corrected
in review. The code's copy was not -- because the code was already right, so
nothing forced the comment to move with it. That is the failure mode worth
naming: a wrong comment beside right code has nothing to make it fail, and the
test suite cannot see it.

What is deliberately not changed

Eleven lines above sits a similar-sounding claim about the ragged-emission
rule -- "checked from the declared output alone". That one is accurate: the
check reads declared.contract.batch_layout.request_axis() and consults no
steps. The two comments should not be aligned to each other, because the
distinction between them is real and is exactly the thing that was lost. Only
the false one moved.

A second instance of the same class

a_video_program_needs_its_adapter asserted !errors(&document).is_empty() --
that something rejected, not that the adapter rule did. Exactly one rule fires
today, so the test was precise by accident, and nothing held that. Narrow the
ABI-pinning rule away and any other refusal the fixture happened to trigger
would keep it green while it had stopped testing adapters.

It is the same defect as the comment above, in a different medium: an assertion
that cannot fail on the thing it names. A rejection test that does not pin
which rule rejected cannot detect that rule being narrowed out of existence,
because the outcome survives and only the message is lost. It now asserts the
message.

Three more, and what makes a negative assertion load-bearing

The design's acceptance row 25 was tightened to require that the withheld
-companion cases assert not only the reason they were refused but also that
neither receives the generic advice to declare a row axis. Three fixtures
asserted only the positive:

  • a_companion_of_a_result_nobody_produces_describes_nothing
  • a_declared_companion_that_no_step_writes_is_not_published
  • a_declared_ownership_companion_that_no_step_writes_is_not_published_either

Each is refused for the reason it names, but a narrowed carve-out refuses it
too, through the generic message that advises request_aligned or
token_packed -- the one layout a companion may not declare. The outcome
survives the narrowing; only the reason is lost. So each now asserts the
absence of that advice, and each negative was mutation-verified against a
distinct narrowing that leaves the positive assertion standing: deleting the
unwritten-claimant branch, dropping padding from output_companions, and
dropping the layout companions.

The mutation earned its place twice. The first narrowing I hypothesised for
the withheld-lengths case -- admitting a companion only when its claimant
published every companion -- does refuse the document, but through the
wrong-shape message, not the generic one. Had I shipped the comment I first
wrote, the assertion would have been correct and its stated justification
false: one degree weaker than the code it sits on, which is exactly the defect
in the first commit here, arriving in the medium of a test comment.

One near-miss worth recording: grep for the generic message in
validation.rs returns nothing, because the phrase is split across a line
continuation inside the format!. Taking that at face value would have
condemned a pre-existing, correct negative assertion as vacuous. A coordinate
is not the only thing that can resolve cleanly and mislead; so can a search
that finds nothing.

Provenance

Found by the design agent (#2010) reading the merged #2009 surface against the
design documents, after #2009 merged as 0448f2bc6. They could not fix it
themselves without their PR losing its docs-only property.

Verification

  • cargo test -p onnx-genai-metadata -- 344 (encoder_batching 104), run on the
    branch rebased onto current main, not on the base it was cut from. Main had
    moved 14 commits underneath it; none touch crates/onnx-genai-metadata/, which
    is what makes the local result evidence about the merge result. "Is main
    different" was the wrong question -- the one that decides whether a green run
    still means anything is whether main moved under the thing that was verified.
  • cargo fmt --all -- --check, cargo clippy -p onnx-genai-metadata --all-targets -- -D warnings.
  • No behaviour, no schema, and no fixture document is touched: one comment and four
    test assertions. validation.rs is unchanged since the first commit, so the +5
    line shift it causes for docs/ citations is unchanged too.

@justinchuby justinchuby changed the title docs(metadata): the companion carve-out reads the steps, not the outputs alone fix(metadata): two assertions that could not fail on what they describe Aug 25, 2026
@codecov

codecov Bot commented Aug 25, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 72.56%. Comparing base (7195907) to head (4a61cde).
⚠️ Report is 2 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main    #2074   +/-   ##
=======================================
  Coverage   72.56%   72.56%           
=======================================
  Files          12       12           
  Lines        5231     5231           
  Branches     5231     5231           
=======================================
  Hits         3796     3796           
  Misses       1307     1307           
  Partials      128      128           
Flag Coverage Δ
cli-ort-linux 72.51% <ø> (ø)
cli-ort-windows 72.01% <ø> (-0.10%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

justinchuby added a commit that referenced this pull request Aug 25, 2026
…itation

The header already tells an editor to re-pin a drifted citation "by locating
the named symbol". For citations into `validation.rs` that instruction could not
be followed: seven of them carried a bare `path:line` and named no symbol at
all, so a reader who found the number stale had nothing to search for. The
document was asking for a repair it did not equip anyone to make.

This is not hypothetical drift. #2074 rewrites the stale call-site comment at
`validation.rs:4851` and is a net +5 lines above three of the ranges this
document cites (`4858-4862`, `5059-5091`, `5102-5130`). A comment-only change
moves coordinates just as surely as a behavioural one, so "no behaviour changed"
is not a reason to expect citations to hold. When it lands, those three ranges
will be five lines off; naming `validate_compaction_derivability` and
`validate_packed_emit_companions` beside them makes the drift recoverable with
one `grep` instead of silent.

The name is the durable half of a citation: a line number is a coordinate into a
tree the reader may not have checked out, while a symbol name survives every
edit that does not rename it. The convention is recorded in the header so the
next citation is written this way rather than repaired later.

No citation range is added, removed, or altered by this commit — the ranges
before and after are byte-identical, and none of the 31 cited files changed
between `46478fc0f` (where the content-aware check last passed on all 97
citations) and `f66e84251`, so that verification transfers rather than needing a
re-run.

Docs only: no code, schema, or fixture changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Copilot <223556219+Copilot@users.noreply.github.com>
@justinchuby

Copy link
Copy Markdown
Owner Author

The two red Windows checks are not from this PR

Rust (Windows ARM64) and Rust coverage (Windows x86_64) fail here, and they
fail for a reason this PR cannot reach. Both die in the same step, Test cross-platform offline crates, on two tests in onnx-runtime-ep-cpu:

kernels::matmul_nbits::tests::spmd_realized_width_subprocess
kernels::matmul_nbits::tests::a_default_width_pool_on_leader_cpus_uses_every_core_it_was_given

panicked at crates\onnx-runtime-ep-cpu\src\kernels\matmul_nbits.rs:20397:14:
restrict the child to leader CPUs: "process-wide CPU affinity masking is only
implemented on Linux (no-op)"

This PR changes two files, both in crates/onnx-genai-metadata/: one comment
and one test assertion. Neither is reachable from CPU affinity masking in
another crate.

The evidence that it is pre-existing rather than an argument that it should be:
#2082 fails the same two tests by name, and it touches
onnx-runtime-ep-api, onnx-runtime-ep-cuda and a .squad note — not
matmul_nbits and not this crate. Two unrelated PRs failing identically on a
Linux-only affinity API is a platform gap on main, not a property of either
change.

Not fixing it here: it is a different crate, unrelated to this change, and it
deserves a PR whose evidence is about that test. Flagging it so the red does not
read as this PR's.

The check that covers this change, Mobius metadata packages (signal), passes,
as do Detect change scope, audit, and the remaining green matrix entries.

justinchuby added a commit that referenced this pull request Aug 25, 2026
…itation

The header already tells an editor to re-pin a drifted citation "by locating
the named symbol". For citations into `validation.rs` that instruction could not
be followed: seven of them carried a bare `path:line` and named no symbol at
all, so a reader who found the number stale had nothing to search for. The
document was asking for a repair it did not equip anyone to make.

This is not hypothetical drift. #2074 rewrites the stale call-site comment at
`validation.rs:4851` and is a net +5 lines above three of the ranges this
document cites (`4858-4862`, `5059-5091`, `5102-5130`). A comment-only change
moves coordinates just as surely as a behavioural one, so "no behaviour changed"
is not a reason to expect citations to hold. When it lands, those three ranges
will be five lines off; naming `validate_compaction_derivability` and
`validate_packed_emit_companions` beside them makes the drift recoverable with
one `grep` instead of silent.

The name is the durable half of a citation: a line number is a coordinate into a
tree the reader may not have checked out, while a symbol name survives every
edit that does not rename it. The convention is recorded in the header so the
next citation is written this way rather than repaired later.

No citation range is added, removed, or altered by this commit — the ranges
before and after are byte-identical, and none of the 31 cited files changed
between `46478fc0f` (where the content-aware check last passed on all 97
citations) and `f66e84251`, so that verification transfers rather than needing a
re-run.

Docs only: no code, schema, or fixture changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Copilot <223556219+Copilot@users.noreply.github.com>
@justinchuby justinchuby changed the title fix(metadata): two assertions that could not fail on what they describe fix(metadata): five assertions that could not fail on what they describe Aug 25, 2026
@justinchuby

Copy link
Copy Markdown
Owner Author

CUDA compile (Linux x86_64) is red on this PR and is not caused by it. Evidence rather than assertion:

The assertion that fires (crates/onnx-runtime-ep-cuda/tests/capture_sync_contract.rs:144) compares the set of kernels doing an unconditional stream sync against an explicit allowlist. The sets differ by exactly one element:

left  - right = {"dft.rs::run"}

Where it came from. dft.rs was added to main by 9a07936c1 — feat(cuda): add cuFFT-backed DFT (#2080) — with an unconditional sync, and the allowlist in capture_sync_contract.rs was not extended:

git show origin/main:crates/onnx-runtime-ep-cuda/tests/capture_sync_contract.rs | grep -c '"dft'
0

Independent confirmation it is repo-wide. #2084 fails the same assertion with the same single missing entry "dft.rs::run", and touches no CUDA or DFT file. Any PR whose merge ref includes #2080 fails this check.

This PR touches two files, both in onnx-genai-metadata:

crates/onnx-genai-metadata/src/validation.rs      (one comment)
crates/onnx-genai-metadata/tests/encoder_batching.rs

I have not fixed it here. The right repair is a judgement call this PR is not the place to make — either guard the sync with CudaRuntime::is_capturing or list dft.rs::run as capture-unsupported after review, and the test message is explicit that the second requires a review the metadata crate cannot supply. #2091 adds batched cuFFT STFT in the same area and will meet the same gate.

The two Windows failures documented in the earlier comment on this PR remain separate and also pre-existing.

@justinchuby

Copy link
Copy Markdown
Owner Author

Rust coverage (macOS arm64) has now also gone red, and it is the third pre-existing failure rather than a new one.

kernels::stft::tests::real_unwindowed_overlapping_frames_match_independent_reference
panicked at crates/onnx-runtime-ep-cpu/src/kernels/stft.rs:363
test result: FAILED. 1707 passed; 1 failed

macOS-only, in onnx-runtime-ep-cpu, and already being repaired by #2093 — fix(ep-cpu): count the vDSP fast path as a DFT fast path in the STFT test — which touches stft.rs and that test by name. Nothing in this PR reaches onnx-runtime-ep-cpu.

Running total for this PR: three red checks, none of them its own.

check cause tracked
CUDA compile (Linux x86_64) dft.rs::run missing from the capture-sync allowlist since #2080 #2094
Rust coverage (macOS arm64) vDSP STFT fast-path test #2093
Rust (Windows ARM64), Rust coverage (Windows x86_64) pre-existing, evidenced in the earlier comment —

@justinchuby
justinchuby force-pushed the justinchuby/companion-carve-out-decidability branch from 88dc274 to b738a9a Compare August 25, 2026 08:49
@justinchuby

Copy link
Copy Markdown
Owner Author

Correcting my own table above, which went stale within the hour.

The branch is now rebased onto current main (d30118aaf), and both Windows checks I recorded as pre-existing failures pass:

Rust (Windows ARM64)          pass
Rust coverage (Windows x86_64) pass

They were genuinely failing when I recorded them, and the evidence I gave then — an unrelated PR failing the same two tests by name — was sound. They were repaired on main in the fourteen commits this branch had fallen behind, so the rebase collected the fix. My table said "pre-existing", which was true, and a reader an hour later would have taken it to mean "still failing", which is not.

Current state, and the reason each is not this PR's:

check status cause
CUDA compile (Linux x86_64) fail dft.rs::run missing from the capture-sync allowlist since #2080 — repo-wide, tracked in #2094
Rust coverage (macOS arm64) fail vDSP STFT fast-path test in onnx-runtime-ep-cpu, being fixed by #2093
everything else settled pass including Rust quality, Mobius metadata packages (signal), and both Windows jobs

The general point, since it is the same one the PR is about: a claim about CI is a claim with a timestamp, and "pre-existing" is not a durable property — it decays into "still failing" in the reader's head while the underlying fact moves. Recording the evidence rather than the verdict is what let this be checked instead of believed.

justinchuby added a commit that referenced this pull request Aug 25, 2026
…itation

The header already tells an editor to re-pin a drifted citation "by locating
the named symbol". For citations into `validation.rs` that instruction could not
be followed: seven of them carried a bare `path:line` and named no symbol at
all, so a reader who found the number stale had nothing to search for. The
document was asking for a repair it did not equip anyone to make.

This is not hypothetical drift. #2074 rewrites the stale call-site comment at
`validation.rs:4851` and is a net +5 lines above three of the ranges this
document cites (`4858-4862`, `5059-5091`, `5102-5130`). A comment-only change
moves coordinates just as surely as a behavioural one, so "no behaviour changed"
is not a reason to expect citations to hold. When it lands, those three ranges
will be five lines off; naming `validate_compaction_derivability` and
`validate_packed_emit_companions` beside them makes the drift recoverable with
one `grep` instead of silent.

The name is the durable half of a citation: a line number is a coordinate into a
tree the reader may not have checked out, while a symbol name survives every
edit that does not rename it. The convention is recorded in the header so the
next citation is written this way rather than repaired later.

No citation range is added, removed, or altered by this commit — the ranges
before and after are byte-identical, and none of the 31 cited files changed
between `46478fc0f` (where the content-aware check last passed on all 97
citations) and `f66e84251`, so that verification transfers rather than needing a
re-run.

Docs only: no code, schema, or fixture changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Copilot <223556219+Copilot@users.noreply.github.com>
@justinchuby
justinchuby force-pushed the justinchuby/companion-carve-out-decidability branch from b738a9a to b82b485 Compare August 25, 2026 10:34
@justinchuby

Copy link
Copy Markdown
Owner Author

Verified against the merge, not just this branch's head.

Earlier evidence in this PR named b82b4854b — the branch tip. That is not the tree CI builds for a pull_request event, which is base-tip ⊕ head, and it is not sufficient here for a reason specific to this crate: tests/capability_catalogue.rs compiles two files this PR or main can move.

capability_catalogue.rs:9   include_str!("../../../docs/genai/INFERENCE_METADATA_DECISIONS.md")
capability_catalogue.rs:51  include_str!("../src/validation.rs")

main changed that document 20 times since this branch's point, and this PR edits validation.rs. So each side being green in isolation says nothing about the combination — the test reads one file from each. A path-scoped git log -- crates/onnx-genai-metadata reports 0 commits and is answering a question about paths, not about the build graph.

Merged origin/main@272bd94fa into b82b4854b (0 conflicts, result 1857d19b4) and ran it:

onnx-genai-metadata   344 passed / 0 failed
encoder_batching      104 passed
capability_catalogue  3 passed   (3 confirmed via --list before reading the result)
cargo fmt --all -- --check          exit 0
cargo clippy -p onnx-genai-metadata --all-targets -- -D warnings   exit 0

Same numbers as at the head, now on the tree that would actually be built.

Unchanged from before: both required checks (Fast (Linux x86_64), Rust quality) pass at the head; the sole red is Rust coverage (macOS arm64), the pre-existing vDSP STFT failure tracked by #2093 and unrelated to this crate.

@justinchuby
justinchuby force-pushed the justinchuby/companion-carve-out-decidability branch from b82b485 to 8103e53 Compare August 25, 2026 12:51
@justinchuby

Copy link
Copy Markdown
Owner Author

Rebased onto c4ebc6c4a (was b82b4854b, now 8103e535f) to pick up #2093.

The previous head was committed at 10:33:17Z and #2093 — "count the vDSP fast path as a DFT fast path in the STFT test" — merged at 10:38:50Z. Five minutes. So the Rust coverage (macOS arm64) failure documented earlier in this PR was this branch being built without a fix that already existed on main, not a property of these commits. Its merge commit c8509042a is now an ancestor of the base.

Gate re-run on the rebased tree, not carried over from the previous head:

onnx-genai-metadata   344 passed / 0 failed
encoder_batching      104 passed
capability_catalogue  3 passed
cargo fmt --all -- --check                                         exit 0
cargo clippy -p onnx-genai-metadata --all-targets -- -D warnings    exit 0

All three commits kept their Signed-off-by and Co-authored-by trailers through the rebase; content is unchanged, verified by the identical test counts.

Correcting an earlier statement of mine in this thread. I previously described main's CI as effectively starved and said the required checks rarely complete there. That was wrong, and I withdraw it: I counted run statuses inside a per_page=100 window of the runs API, which returns newest-first and therefore over-samples runs that have not finished yet — the exact property I was counting. Server-side totals are completed 4770 vs queued 28 for pushes to main, and Fast (Linux x86_64) reports success on completed main runs routinely (d0a357382, 0ce253f4a, bdc022c82). A queued check on this PR is ordinary pending, not a verdict.

@justinchuby

Copy link
Copy Markdown
Owner Author

Rust quality is red on this head and it is not this PR — main is uncompilable. Filed as #2116.

Reproduced with no PR content at all, on the rebase base itself:

git checkout c4ebc6c4a && cargo check -p onnx-genai-server --all-targets --features native-backend
-> error[E0308]: expected `SessionLeaseGuard`, found `SessionPlacement`   (tests.rs:2605, :2618)
-> exit 101

c8732ee69 (#2056, merged 12:03:16Z) changed close_session/generate to take a SessionLeaseGuard and left the #[cfg(feature = "native-backend")] caller in onnx-genai-server/src/tests.rs on the old type. #2110, which is documentation only, fails the same required check with byte-identical errors.

So the rebase in the previous comment traded a non-required red for a required one: it cleared Rust coverage (macOS arm64) by picking up #2093, and simultaneously picked up a main that had broken 50 minutes earlier. Both facts are about the base, neither is about these three commits. I am leaving the branch on the current base rather than reverting to a stale one, because every PR hits this until main is fixed.

Two things I got wrong while diagnosing this, recorded because they both produced confident wrong answers:

  • cargo check -p onnx-genai-server --all-targets passed locally on the broken tree. The failing test is behind #[cfg(feature = "native-backend")], so --all-targets never compiles it. --all-targets selects target kinds, not features, and reads as if it covers everything.
  • The first run of that command "passed" in 0.18s without compiling anything. ~/.cargo/config.toml sets a machine-global target-dir, so every worktree on this box shares one cache and a stale-fresh unit is reported as success. CARGO_TARGET_DIR=./target-verify gave the honest 18s build and the real answer.

Unchanged: metadata 344/0, encoder_batching 104, capability_catalogue 3, fmt and clippy clean for this crate at 8103e535f.

Copilot AI added 3 commits August 26, 2026 13:45
…uts alone

The comment above the serving carve-out claimed the admission is "decidable
from the declared outputs alone". The code directly beneath it does not do
that and must not: `output_companions` opens by walking the step tree for
`emitted_outputs`, and carries `claimant_emitted` per expectation. That field
is the whole reason a value claimed only by a declaration nothing writes is
told so, instead of being advised to declare a row axis -- the advice a
companion must never take.

The weaker claim is not merely imprecise, it is an invitation. A reader
implementing from it produces the outputs-only check and is not wrong to, and
that check has a hole: declare a padded output beside any `shared` int64
vector, write neither, and the vector is admitted on the strength of a payload
that does not exist. The design document carried the same sentence and was
corrected; the code's copy was not, because the code was already right, so
nothing forced the comment to move with it. Found by the design agent reading
the merged surface against the doc.

Note the comment eleven lines above, which makes a similar-sounding claim about
the ragged-emission rule, is accurate and is left alone: that check reads
`declared.contract.batch_layout` and nothing else. The difference is whether
the check consults the step tree, so the two comments should not be aligned to
each other.

Signed-off-by: Justin Chu <justinchu@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The assertion was `!errors(&document).is_empty()` -- that something rejected,
not that the adapter rule did. Today exactly one rule fires, so the test is
precise by accident rather than by construction, and nothing holds that. If the
ABI-pinning rule were narrowed away, any other refusal the fixture happened to
trigger would keep this green while it had stopped testing adapters entirely.

That is a defect class rather than a defect: an assertion that checks a
rejection without checking which rule rejected cannot detect a rule being
narrowed out of existence underneath it, because the outcome is preserved and
only the message is lost. Found by auditing this suite against the same class
identified in the design's acceptance matrix.

Signed-off-by: Justin Chu <justinchu@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Three fixtures for the serving carve-out asserted only that a document was
rejected. Each is refused for the reason its name describes, but a narrowed
carve-out would refuse it too -- through the generic message, whose advice is
to declare `request_aligned` or `token_packed`, which is precisely the layout
a companion may not have. An assertion satisfied by both the rule and its
narrowing cannot detect the narrowing, so the rejection was precise by
accident.

Each now also asserts that the generic advice is absent, and each negative was
mutation-verified against a distinct narrowing that leaves the positive
assertion standing:

  - a companion of a result nobody produces: deleting the unwritten-claimant
    branch routes both lengths to the generic message.
  - a withheld valid_lengths: dropping `padding` from `output_companions` --
    a revert of the widening, not a new mistake -- routes the sibling length
    there instead.
  - a withheld owner map: dropping the layout companions does the same to the
    offsets beside it.

The first narrowing tried for the withheld-lengths case did not bite:
admitting a companion only when its claimant published every companion also
refuses that document, but through the wrong-shape message. That is recorded
beside the assertion, because a comment justifying a test with a mechanism the
test does not actually hold is the same defect this change removes -- one
degree weaker than the code it sits on, and invisible while the suite is
green.

Signed-off-by: Justin Chu <justinchu@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@justinchuby
justinchuby force-pushed the justinchuby/companion-carve-out-decidability branch from 8103e53 to 4a61cde Compare August 26, 2026 13:47
@justinchuby
justinchuby merged commit f544795 into main Aug 26, 2026
6 checks passed
@justinchuby
justinchuby deleted the justinchuby/companion-carve-out-decidability branch August 26, 2026 13:47
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.

2 participants