Upstream open-source engineering

12 merged

Open-Source Engineering Contributor

Defects found and fixed in the tools engineers actually build with

The record

Merged upstream
12
Open
14
Pull requests
26
Repositories
16
Source
GitHub API, verified 2026-08-22

Closest to the RF work

scikit-rf
A time gate that shifted a measured level
Meep
A conductivity tensor the full-wave solver silently discarded
01

Contributions

scikit-rf

scikit-rf/scikit-rf

MERGED

Fix time gate level shift caused by a periodic window

Problemtime_gate() produced a level shift on a flat frequency response, about -0.0172 dB on the dataset attached to issue #1399, and larger for narrower gates.
My contributionRebuilt the gate from a symmetric window: get_window() now takes an explicit fftbins argument, and only the time-domain gate uses fftbins=False. Frequency-domain tapering, Network.windowed() and callable windows keep their existing behaviour.
Root causeFor an odd window length the periodic window is offset by half a sample relative to the gate grid. Before #900 a half-open slice happened to compensate for that offset, but its support was asymmetric and one sample too short.
Technical domainRF network analysis / time-domain gating
Language / toolingPython, NumPy / SciPy, pytest, ruff
Validation / testsRegression coverage for level preservation and for closed-gate support. pytest -k time_gate and the full skrf/tests/test_network.py suite; ruff over the touched files.

Meep

NanoComp/meep

MERGED

Medium: reject nonzero off-diagonal conductivity that the solver ignores

Problemmp.Medium accepts D_conductivity_offdiag and B_conductivity_offdiag, and Medium.epsilon() / Medium.mu() include them in the effective tensor they return, but the solver never receives them. A user can set an anisotropic conductivity tensor with off-diagonal elements, check the material with Medium.epsilon(), see them included, and then run a simulation in which the tensor is silently truncated to its diagonal.
My contributionEstablished the discrepancy is physics and not discretisation: the measured transmittance converges to the truncated-tensor prediction and stays flat in resolution, and an x-polarised wave develops exactly zero cross-component where the requested tensor would couple them. Medium.__init__ now raises rather than accepting a tensor the solver will discard, and points at the susceptibility route that is actually implemented.
Root causemedium_struct carries only D_conductivity_diag / B_conductivity_diag (src/material_data.hpp); the Python-to-C++ transfer reads only the diagonal attributes (python/typemap_utils.cpp); and the time stepping applies conductivity per field component along its own direction (src/step_db.cpp). The parameters were introduced together with the epsilon()/mu() evaluation machinery, which does use them, and no test exercised the solver-side path, so nothing caught the gap.
Technical domainElectromagnetic solver / anisotropic media
Language / toolingC++ solver core, Python layer, FDTD, pytest
ProofMeasured transmittance converges to the truncated-tensor prediction and stays there: 0.06867 at resolution 50, 0.06946 at 100, 0.06973 at 200, 0.06983 at 400. The deviation from the requested physics is flat in resolution, and the result is identical whether the source is polarised along the lossy or the lossless principal axis. A bulk propagation check agrees from another angle: an x-polarised wave develops exactly zero Ey at any resolution, where the requested tensor would couple the two components.
Validation / testsThree regression tests added to test_geom.py next to the existing conductivity tests. Runs performed with meep 1.34.0 from conda-forge; the Python layer and the conductivity code paths are identical between v1.34.0 and master.

Analog Devices libiio

analogdevicesinc/libiio

MERGED

iiod: responder: don't treat a negative response code as a discard length

ProblemIn iiod_responder_reader_worker(), a RESPONSE frame whose client_id is no longer in the readers list, for example a request already cancelled after a timeout, was unconditionally passed to iiod_discard_data(priv, cmd.code).
My contributionGuarded the discard path on a positive response code. A response carrying a real payload is still drained unchanged; a negative code, which is how the server reports a failed operation, no longer becomes a length.
Root causeThe sibling path a few lines below already carries the right guard (io->r_io.nb_buf && cmd.code > 0); this path did not.
Technical domainDevice I/O daemon / protocol framing
Language / toolingC, iiod daemon, multiplexed binary protocol

Yosys

YosysHQ/yosys

MERGED

arith_tree: do not flatten a chain link narrower than its consumer

ProblemThe arith_tree pass changes the boolean function of the circuit when a link in an $add / $sub / $alu chain is narrower than the cell that consumes it.
My contributionRefused the fold whenever a chain link is narrower than the cell consuming it: the smallest change that is obviously sound. The sister pass already guarded the identical merge; the guard had simply never been carried across.
Root causesole_chainable_consumer() checks fanout and that every bit of the link's Y reaches one and the same candidate cell, but never compares any width. The sister pass alumacc performs the structurally identical merge and does guard this case through macc_may_overflow(); arith_tree simply did not carry the guard across.
Technical domainRTL synthesis / arithmetic optimisation
Language / toolingC++ synthesis pass, SystemVerilog reproducer, SAT and equivalence checking
ProofMitering synth -noabc against synth -noabc -arith_tree and running sat -verify -prove-asserts returns a model: a = 169, b = 135, c = 7. Under the idiom the test directory already uses, equiv_opt -assert arith_tree reports one unproven $equiv cell and names the top bit.
Validation / testsShipped with one equivalence test; PR #6131 adds the blocks that pin down the structure the pass must now produce and check that nothing beyond the truncating link is excluded.

Arm CMSIS-DSP

ARM-software/CMSIS-DSP

MERGED

arm_pid_q31: document that the final conversion does not saturate

ProblemThe doxygen for arm_pid_q31 states the 2.62 accumulator is "truncated to 1.32 format and then saturated to 1.31 format". Nothing in the kernel clamps: neither the narrowing nor the out += S->state[2] that follows it.
My contributionCorrected the documented semantics on the one file with no vector path, so the contract matches the kernel. The same clause appears in ten other files, and the pull request asks upstream whether to carry the change across.
Root causeUpstream's position (issue #175) is that Q31 generally requires pre-scaling and that this is intended, so the sentence is what should move, not the code.
Technical domainFixed-point DSP / Q31 saturation semantics
Language / toolingC, Q31 fixed-point arithmetic, doxygen

AMD ROCm / TheRock

ROCm/TheRock

MERGED

[pre-commit] Add lychee markdown link checker at the manual stage

ProblemFollow-up to #7294: an off-the-shelf lychee markdown link checker wired into pre-commit at the manual stage, rather than fixing links one at a time.
My contributionAfter fixing two broken repository-relative links by hand, wired an off-the-shelf link checker into pre-commit at the manual stage, so the class of defect is caught rather than the instances being fixed one at a time.
Technical domainInfrastructure
Language / toolingMarkdown documentation, pre-commit, lychee link checker

Raspberry Pi picotool

raspberrypi/picotool

MERGED

Fix two outdated facts in BUILDING.md

ProblemTwo outdated build facts in BUILDING.md.
My contributionCorrected two build facts in BUILDING.md that no longer matched the build, which is the documentation a first-time builder of the tool follows.
Technical domainEmbedded / Low-Level
Language / toolingMarkdown build documentation, CMake build
02

Method

  • Found by useEach one came out of using the tool: a network analysis that shifted a level, a synthesis flow whose output did not match its input, a documented saturation that did not exist in the kernel.
  • Reduced before reportedThe defect cut down to the smallest thing that still shows it; the reproducer goes in the pull request.
  • Root cause, in the sourceThe fix names the line that is wrong and why.
  • Smallest sound changeWhere a conservative fix and a clever fix both work, the conservative one is proposed and the clever one written up as the follow-up.
  • Verified against somethingA SAT-based equivalence proof for a synthesis pass, a regression test for a numerical kernel, the physics for a gating function.
03

Every contribution

26 pull requests across 16 repositories, grouped by domain. Status as of the GitHub API snapshot of 2026-08-22.

Digital Design / FPGA
RepositoryContributionStatus
YosysHQ/yosysarith_tree: add regression tests for links narrower than their consumer (follow-up to #6130)
Regression tests pinning the structure the pass must produce after #6130, and checking that nothing beyond the truncating link is excluded.
MERGED
YosysHQ/yosysarith_tree: do not flatten a chain link narrower than its consumer
A chain link narrower than the cell consuming it was folded away, discarding a truncation and changing the boolean function of the synthesised circuit. Found by mitering the two flows and proving the difference with the SAT engine.
MERGED
lowRISC/opentitan[doc,dma] Fix RANGE_REGWEN anchor in programmer's guide
Broken register anchor in the DMA programmer's guide.
OPEN
RF & Scientific Computing
RepositoryContributionStatus
NanoComp/meepMedium: reject nonzero off-diagonal conductivity that the solver ignores
Medium accepted off-diagonal conductivity tensors and reported them from epsilon(), but the time-stepping applies conductivity per component along its own direction, so the tensor was silently truncated to its diagonal. Now rejected instead of ignored.
MERGED
scikit-rf/scikit-rfFix time gate level shift caused by a periodic window
SciPy returns a periodic window by default; on the odd-length time grid used by time_gate() that window is offset by half a sample, so the gate value at t = 0 stays below unity and a flat response is scaled by it. Rebuilt the gate from a symmetric window.
MERGED
scikit-rf/scikit-rfFix `innerconnect()` returning a Network with the wrong `s_def`
innerconnect() returned a Network carrying the wrong s_def.
OPEN
scikit-rf/scikit-rfFix auto-gate ignoring its own unit in time_gate
Automatic gate selection ignored the unit it had itself computed in time_gate.
OPEN
Embedded / Low-Level
RepositoryContributionStatus
espressif/esp-idfdocs(esp_eth): drop unreachable return code from esp_eth_phy_802_3_reset_hw (IDFGH-18139)
esp_eth_phy_802_3_reset_hw() documented a return code no path in the implementation can produce.
MERGED
analogdevicesinc/libiioiiod: responder: don't treat a negative response code as a discard length
A negative response code, the normal way the server reports a failed operation, was passed to the discard path as a size_t, turning into an ~1.8e19-byte drain that consumed the rest of the multiplexed connection. Guarded on a positive code.
MERGED
zephyrproject-rtos/zephyrdrivers: video: fix Kconfig help reference to the region name option
Video driver Kconfig help referenced a symbol name that never existed.
MERGED
analogdevicesinc/libiiotests: api: skip instead of crashing on null context
API tests crashed instead of skipping when no context was available.
MERGED
raspberrypi/picotoolFix two outdated facts in BUILDING.md
Two outdated build facts in BUILDING.md.
MERGED
zephyrproject-rtos/zephyrdoc: crc: fix the Kconfig option references on the driver page
CRC driver documentation pointed at the wrong Kconfig options.
OPEN
espressif/esp-idfdocs(esp_eth): fix @param name in esp_eth_clock_set_target_time (IDFGH-18146)
Doxygen @param name did not match the Ethernet clock API signature.
OPEN
espressif/esp-idfdocs(sdmmc): drop esp_err_t doc from void sd_host_slot_enable_clk_cmd11 (IDFGH-18141)
A void SDMMC function documented an esp_err_t return.
OPEN
DSP
RepositoryContributionStatus
ARM-software/CMSIS-DSParm_pid_q31: document that the final conversion does not saturate
The Q31 PID doxygen promised the 2.62 accumulator is truncated to 1.32 and then saturated to 1.31. Nothing clamps, neither the narrowing nor the state add after it, so the documented saturation semantics did not exist.
MERGED
jgaeddert/liquid-dspmath/besseli: accumulating series in log domain to avoid overflow for large z
The modified Bessel series was accumulated in the linear domain, so exp() overflowed float32 for arguments whose logarithm is well inside range. Moved the accumulation to the log domain.
OPEN
jgaeddert/liquid-dspmath/uppergamma: using continued fraction when alpha exceeds z+1
The upper incomplete gamma was computed as a difference of two nearly equal quantities and returned NaN once alpha passed z. Switched to a continued fraction in that regime.
OPEN
ARM-software/CMSIS-DSParm_mult_q31: saturate to 0x7FFFFFFF, as the other two mult kernels do
arm_mult_q31 did not saturate to 0x7FFFFFFF the way the two sibling multiply kernels do.
OPEN
gnuradio/gnuradioqtgui: support int32 in number sink
Added int32 support to the Qt GUI number sink.
OPEN
Semiconductor / Compute
RepositoryContributionStatus
ROCm/TheRockdocs: fix two broken repo-relative links
Two broken repo-relative documentation links.
MERGED
microsoft/onnxruntimeFix documented defaults in convert_tensor_float_to_float16 docstring
convert_tensor_float_to_float16 documented two default values its own signature contradicts; the sibling function in the same file documents them correctly.
OPEN
openvinotoolkit/nncfFix Makefile and documentation paths left behind by moved files
Makefile and documentation paths left dangling after files moved.
OPEN
Qiskit/qiskit-ibm-runtimeFix circuit metadata not restored when decoding with RuntimeDecoder
Circuit metadata was not restored when decoding with RuntimeDecoder.
OPEN
Infrastructure
RepositoryContributionStatus
ROCm/TheRock[pre-commit] Add lychee markdown link checker at the manual stage
Follow-up to #7294: an off-the-shelf lychee markdown link checker wired into pre-commit at the manual stage, rather than fixing links one at a time.
MERGED
tanagraspace/ccsds124test: add pairwise interoperability runner (#48)
A pairwise interoperability test runner for the CCSDS 124 implementations.
OPEN