Releases: ooni/probe-cli
v3.23.0
This is a stable release. As usual, this release includes both an OONI Probe CLI release and the corresponding release of the measurement engine, which is hosted by the same repository.
What's Changed
- chore: we're now hacking on v3.23.0-alpha by @bassosimone in #1607
- fix(cli/rm/rm.go): using panic is not user friendly by @bassosimone in #1608
- refactor: MeasurementTarget -> MeasurementInput by @bassosimone in #1609
- cleanup(oonirun): remove unused testing-hook argument by @bassosimone in #1610
- CODEOWNERS: add @DecFox by @bassosimone in #1611
- refactor(experiment): make report goroutine safe by @bassosimone in #1612
- cleanup: remove asynchronous experiments by @bassosimone in #1613
- fix(registry): instantiate factory for each invocation by @bassosimone in #1614
- feat: add the openvpn experiment by @ainghazal in #1585
- feat: introduce richer input by @bassosimone in #1615
- refactor: move engine.InputLoader to targetloading by @bassosimone in #1616
- refactor: construct TargetLoader using ExperimentBuilder by @bassosimone in #1617
- feat(dnscheck): implement richer input by @bassosimone in #1618
- cleanup(pkg/oonimkall): simplify test code by @bassosimone in #1619
- chore(richer input): add living design document by @bassosimone in #1621
- fix(dnscheck): gracefully cast to Target by @bassosimone in #1623
- chore(oonimkall): log the events when testing by @bassosimone in #1624
- doc: explain the throttling methodology by @bassosimone in #1546
- refactor(probeservices): use better naming by @bassosimone in #1628
- feat(openvpn): implement richer input by @ainghazal in #1625
- feat(oonirun): allow true JSON richer input by @bassosimone in #1629
- feat(miniooni): add authentication to oonirun by @ainghazal in #1627
- refactor(oonimkall): fakeSuccessful{Run => Deps} by @bassosimone in #1631
- fix: correctly set options from richer input by @bassosimone in #1630
- fix(oonimkall): use richer-input-aware target loader by @bassosimone in #1620
- dd-008-richer-input: mention @DecFox reviews by @bassosimone in #1633
- feat: add engine docs to docs.ooni.org by @DecFox in #1634
- Start working on fixing image paths by @hellais in #1635
- CODEOWNERS: remove @bassosimone by @bassosimone in #1636
- feat(openvpn): add a top-level test key with bootstrap time and handshake failure by @ainghazal in #1632
- feat: enable openvpn in the experimental group by @ainghazal in #1637
- refactor: remove dnscheck loader by @DecFox in #1640
- fix(probeservices): replace ams-pg-test with backend-hel by @DecFox in #1641
- hardcode openvpn endpoints under ooni infra by @ainghazal in #1638
- chore: updated psiphon dependency to latest commit by @DecFox in #1642
- chore: bump NDKVersion and android platforms by @DecFox in #1643
- chore: update C dependencies by @DecFox in #1644
- chore: update go version by @DecFox in #1645
- chore: update dependencies by @DecFox in #1646
- chore: update assets and definitions by @DecFox in #1647
- chore: address gosec warnings by @DecFox in #1648
Full Changelog: v3.22.0...v3.23.0
OONI Probe CLI v3.23.0-alpha
This is an alpha release for creating a branching point for the release/3.23
branch. As usual, this release includes both an OONI Probe CLI release and the corresponding release of the measurement engine, which is hosted by the same repository.
What's Changed
- chore: we're now hacking on v3.23.0-alpha by @bassosimone in #1607
- fix(cli/rm/rm.go): using panic is not user friendly by @bassosimone in #1608
- refactor: MeasurementTarget -> MeasurementInput by @bassosimone in #1609
- cleanup(oonirun): remove unused testing-hook argument by @bassosimone in #1610
- CODEOWNERS: add @DecFox by @bassosimone in #1611
- refactor(experiment): make report goroutine safe by @bassosimone in #1612
- cleanup: remove asynchronous experiments by @bassosimone in #1613
- fix(registry): instantiate factory for each invocation by @bassosimone in #1614
- feat: add the openvpn experiment by @ainghazal in #1585
- feat: introduce richer input by @bassosimone in #1615
- refactor: move engine.InputLoader to targetloading by @bassosimone in #1616
- refactor: construct TargetLoader using ExperimentBuilder by @bassosimone in #1617
- feat(dnscheck): implement richer input by @bassosimone in #1618
- cleanup(pkg/oonimkall): simplify test code by @bassosimone in #1619
- chore(richer input): add living design document by @bassosimone in #1621
- fix(dnscheck): gracefully cast to Target by @bassosimone in #1623
- chore(oonimkall): log the events when testing by @bassosimone in #1624
- doc: explain the throttling methodology by @bassosimone in #1546
- refactor(probeservices): use better naming by @bassosimone in #1628
- feat(openvpn): implement richer input by @ainghazal in #1625
- feat(oonirun): allow true JSON richer input by @bassosimone in #1629
- feat(miniooni): add authentication to oonirun by @ainghazal in #1627
- refactor(oonimkall): fakeSuccessful{Run => Deps} by @bassosimone in #1631
- fix: correctly set options from richer input by @bassosimone in #1630
- fix(oonimkall): use richer-input-aware target loader by @bassosimone in #1620
- dd-008-richer-input: mention @DecFox reviews by @bassosimone in #1633
- feat: add engine docs to docs.ooni.org by @DecFox in #1634
- Start working on fixing image paths by @hellais in #1635
- CODEOWNERS: remove @bassosimone by @bassosimone in #1636
- feat(openvpn): add a top-level test key with bootstrap time and handshake failure by @ainghazal in #1632
- feat: enable openvpn in the experimental group by @ainghazal in #1637
- refactor: remove dnscheck loader by @DecFox in #1640
- fix(probeservices): replace ams-pg-test with backend-hel by @DecFox in #1641
- hardcode openvpn endpoints under ooni infra by @ainghazal in #1638
- chore: updated psiphon dependency to latest commit by @DecFox in #1642
- chore: bump NDKVersion and android platforms by @DecFox in #1643
- chore: update C dependencies by @DecFox in #1644
- chore: update go version by @DecFox in #1645
- chore: update dependencies by @DecFox in #1646
- chore: update assets and definitions by @DecFox in #1647
- chore: address gosec warnings by @DecFox in #1648
Full Changelog: v3.22.0-alpha...v3.23.0-alpha
OONI Probe CLI v3.22.0
This is a stable release. As usual, this release includes both an OONI Probe CLI release and the corresponding release of the measurement engine, which is hosted by the same repository.
Here's a thematic summary of what changed since v3.21.0:
- ✨ Preparing Web Connectivity LTE for use in production
- 🐛 Prioritize DNS results when communicating with backends
- 🚧 Refactor and document communication with the OONI backend
- 📖 Documenting the release process
- 🚧 Minor changes & bug fixes
More in detail, here's what has changed:
✨ Preparing Web Connectivity LTE for use in production
We worked towards closing all the open Web Connectivity LTE issues, such that we can finally be well placed to run an A/B testing between the v0.4 and LTE using this version of the OONI Probe Engine.
- fix(webconnectivitylte): handle too many redirects by @bassosimone in #1550
🐛 Prioritize DNS results when communicating with backends
We documented the strategy to communicate with backends, including the OONI backend, and we discussed the design as part of the #1552. During such a review, it was requested to modify the policy with which we communicate with the backends, so that the DNS results have higher priority. The main concern of this change request was to avoid long recovery periods if the currently deployed bridge becomes unavailable as well as to tilt the overall design such that uncensored OONI Probe users communicate with the backends in the simplest possible way.
- feat(enginenetx): test
bridgesPolicy
with DNS success by @bassosimone in #1554 - feat(enginenetx): add algorithms to filter, mix, and stream tactics by @bassosimone in #1556
- refactor(enginenetx): assign InitialDelay when dialing by @bassosimone in #1555
- feat(enginenetx): implement deterministic+random mixing by @bassosimone in #1558
- refactor(enginenetx): split generation and mixing by @bassosimone in #1591
- fix(enginenetx): give priority to DNS by @bassosimone in #1592
- cleanup(enginenetx): remove previous policies by @bassosimone in #1593
- fix(enginenetx): compute zero time when we start dialing by @bassosimone in #1594
- doc(enginenetx): add design document by @bassosimone in #1595
🚧 Refactor and document communication with the OONI backend
We wanted to document the interaction with the OONI backend and specifically with the "probe services" (i.e., the collection of APIs used by OONI Probe), per ooni/probe#2700. To this end, we seized the opportunity to simplify the code interactions, reduce the number of used packages, and refactor the code to improve its reliability and future usability.
- cleanup(engine): remove redundant APIs by @bassosimone in #1536
- cleanup(engine): do not expose LookupLocationContext by @bassosimone in #1537
- cleanup(oonimkall): use (*Session).CheckIn directly by @bassosimone in #1538
- cleanup: use (*Session).NewSubmitter() by @bassosimone in #1539
- cleanup: SaveMeasurement doesn't belong to Experiment by @bassosimone in #1541
- refactor: move Saver, Submitter, and InputProcessor to oonirun by @bassosimone in #1543
- feat(testingx): add log collector by @bassosimone in #1562
- feat(testingx): add HTTPHandlerResetWhileReadingBody by @bassosimone in #1563
- chore(enginelocate): improve ubuntu and cloudflare tests by @bassosimone in #1564
- doc(oonirun): document v2.go and v2_test.go by @bassosimone in #1565
- chore(probeservices): better tests for bouncer, check-in, measurement-meta by @bassosimone in #1566
- feat(testingx): model OONI backend register/login flows by @bassosimone in #1567
- chore(probeservices): better tests for psiphon and tor by @bassosimone in #1568
- feat: introduce the httpclientx package by @bassosimone in #1569
- refactor(enginelocate): switch to httpclientx by @bassosimone in #1570
- oonirun: use httpclientx by @bassosimone in #1571
- chore(probeservices): improve tests for /api/v1/login by @bassosimone in #1572
- chore(probeservices): improve tests for /api/v1/register by @bassosimone in #1573
- feat(testingx): add OONI collector for testing by @bassosimone in #1574
- chore(probeservices): improve tests for measurement submission by @bassosimone in #1575
- refactor(probeservices): httpx -> httpclientx by @bassosimone in #1576
- fix(httpclientx): add support for cloudfronting by @bassosimone in #1577
- cleanup(probeservices): remove residual httpx.Client dependency by @bassosimone in #1578
- cleanup: remove unused httpx package by @bassosimone in #1579
- refactor(probeservices): use httpclientx for check-in by @bassosimone in #1580
- feat(session): implement CallWebConnectivityTestHelper by @bassosimone in #1581
- refactor(webconnectivity*): don't call httpapi directly by @bassosimone in #1582
- cleanup: only define ErrNoAvailableTestHelpers once by @bassosimone in #1583
- refactor(httpclientx): couple URL and cloudfront host header by @bassosimone in #1584
- httpclientx: implement fast recovery and return endpoint index by @bassosimone in #1586
- multierror: implement BuildErrorString and mark as legacy by @bassosimone in #1587
- feat(httpclientx): allow configuring max-response-body size by @bassosimone in #1588
- refactor(webconnectivityqa): use httpclientx by @bassosimone in #1589
- cleanup: remove httpapi and ooapi by @bassosimone in #1560
- doc: document probe services interactions by @bassosimone in #1590
📖 Documenting the release process
We were asked to document the release process in ooni/probe#2698, and the resulting work is this:
- doc: start improving releases documentation by @bassosimone in #1533
- doc: document the release process by @bassosimone in #1534
🚧 Releasing & maintenance
This set of changes deal with preparing a release. In particular, in this case, we took on the chore of reducing the number of warnings emitted by gosec
, such that its output can actually be informative and actionable (there was lots of noise). In terms of behavioral changes in the ooniprobe
binary, these are the two most "impactful" changes:
-
I explicitly ignore errors when resetting with
-f
theOONI_HOME
directory, to keep the previous idempotent behavior, because I think that otherwise the desktop app may emit errors if asked to delete theOONI_HOME
multiple times: https://github.com/ooni/probe-cli/pull/1603/files#diff-2e841e5388e3f75b0ab808e74d5b34a9ebb72466a508daecda35625a7eab5c7fR29 -
I have improved how we manage
survey
errors: https://github.com/ooni/probe-cli/pull/1603/files#diff-3e09d6a095d686f531f06efe21b6e430b311340af5ce74989f110dc05424cbcdR24 and #1608 -
I am now reporting an error if we fail to update the database to set the upload status: https://github.com/ooni/probe-cli/pull/1603/files#diff-2a4cd822f78eb174dc7c6b88e3ab71be4810624b358b98109c10bcb5371e4844R249
-
I have now configured timeouts for receiving headers in
oohelperd
: https://github.com/ooni/probe-cli/pull/1603/files#diff-663f720a0015bc642e1957e965f9bc9115cea500fc0268bf5a6e22b5ad7cb44dR111
Here's the full list of pull requests:
- chore: we're now hacking on v3.22.0-alpha by @bassosimone in #1532
- chore(deps): bump golang.org/x/net from 0.22.0 to 0.23.0 by @dependabot in #1559
- fix(gobash.yml): drop macos-latest checks by @bassosimone in #1561
- chore: upgrade to go1.21.9 by @bassosimone in #1548
- chore(deps): bump github.com/quic-go/quic-go from 0.40.1 to 0.42.0 by @dependabot in #1535
- chore: update to go1.21.10 by @bassosimone in #1596
- chore(NDKVERSION): upgrade to latest LTS release by @bassosimone in #1597
- chore: upgrade most dependencies by @bassosimone in #1598
- chore: upgrade C dependencies by @bassosimone in https://github...
OONI Probe CLI v3.22.0-alpha
This is an alpha release for creating a branching point for the release/3.22
branch. As usual, this release includes both an OONI Probe CLI release and the corresponding release of the measurement engine, which is hosted by the same repository.
Here's a thematic summary of what changed since v3.21.0-alpha:
- ✨ Preparing Web Connectivity LTE for use in production
- 🐛 Prioritize DNS results when communicating with backends
- 🚧 Refactor and document communication with the OONI backend
- 📖 Documenting the release process
- 🚧 Minor changes & bug fixes
In terms of testing requirements, this release mostly changed the interaction with backend services, so we need
-
QA testing of
ooniprobe
andminiooni
operating in normal and restricted operating conditions, to see how the new algorithms are faring, collect feedback, and plan for future changes (or revert patches if needed). -
We should also probably test whether we're able to trigger the Web Connectivity LTE A/B testing using the check-in API, so we're actually able to perform the A/B testing 😅.
-
We should also test the new
oohelperd
in production, for now the code has a generous 8 seconds timeout for receiving HTTP headers rather than leaving the timeout unbounded (we should be fine, but we should nonetheless test). -
We should ensure in the desktop app that we can reset the
OONI_HOME
multiple times without errors. -
We should test in the CLI that the "panics" added for handling
survey
errors have no practical implication unless something very weird like not being able to write the standard output happens.
More in detail, here's what has changed:
✨ Preparing Web Connectivity LTE for use in production
We worked towards closing all the open Web Connectivity LTE issues, such that we can finally be well placed to run an A/B testing between the v0.4 and LTE using this version of the OONI Probe Engine.
- fix(webconnectivitylte): handle too many redirects by @bassosimone in #1550
🐛 Prioritize DNS results when communicating with backends
We documented the strategy to communicate with backends, including the OONI backend, and we discussed the design as part of the #1552. During such a review, it was requested to modify the policy with which we communicate with the backends, so that the DNS results have higher priority. The main concern of this change request was to avoid long recovery periods if the currently deployed bridge becomes unavailable as well as to tilt the overall design such that uncensored OONI Probe users communicate with the backends in the simplest possible way.
- feat(enginenetx): test
bridgesPolicy
with DNS success by @bassosimone in #1554 - feat(enginenetx): add algorithms to filter, mix, and stream tactics by @bassosimone in #1556
- refactor(enginenetx): assign InitialDelay when dialing by @bassosimone in #1555
- feat(enginenetx): implement deterministic+random mixing by @bassosimone in #1558
- refactor(enginenetx): split generation and mixing by @bassosimone in #1591
- fix(enginenetx): give priority to DNS by @bassosimone in #1592
- cleanup(enginenetx): remove previous policies by @bassosimone in #1593
- fix(enginenetx): compute zero time when we start dialing by @bassosimone in #1594
- doc(enginenetx): add design document by @bassosimone in #1595
🚧 Refactor and document communication with the OONI backend
We wanted to document the interaction with the OONI backend and specifically with the "probe services" (i.e., the collection of APIs used by OONI Probe), per ooni/probe#2700. To this end, we seized the opportunity to simplify the code interactions, reduce the number of used packages, and refactor the code to improve its reliability and future usability.
- cleanup(engine): remove redundant APIs by @bassosimone in #1536
- cleanup(engine): do not expose LookupLocationContext by @bassosimone in #1537
- cleanup(oonimkall): use (*Session).CheckIn directly by @bassosimone in #1538
- cleanup: use (*Session).NewSubmitter() by @bassosimone in #1539
- cleanup: SaveMeasurement doesn't belong to Experiment by @bassosimone in #1541
- refactor: move Saver, Submitter, and InputProcessor to oonirun by @bassosimone in #1543
- feat(testingx): add log collector by @bassosimone in #1562
- feat(testingx): add HTTPHandlerResetWhileReadingBody by @bassosimone in #1563
- chore(enginelocate): improve ubuntu and cloudflare tests by @bassosimone in #1564
- doc(oonirun): document v2.go and v2_test.go by @bassosimone in #1565
- chore(probeservices): better tests for bouncer, check-in, measurement-meta by @bassosimone in #1566
- feat(testingx): model OONI backend register/login flows by @bassosimone in #1567
- chore(probeservices): better tests for psiphon and tor by @bassosimone in #1568
- feat: introduce the httpclientx package by @bassosimone in #1569
- refactor(enginelocate): switch to httpclientx by @bassosimone in #1570
- oonirun: use httpclientx by @bassosimone in #1571
- chore(probeservices): improve tests for /api/v1/login by @bassosimone in #1572
- chore(probeservices): improve tests for /api/v1/register by @bassosimone in #1573
- feat(testingx): add OONI collector for testing by @bassosimone in #1574
- chore(probeservices): improve tests for measurement submission by @bassosimone in #1575
- refactor(probeservices): httpx -> httpclientx by @bassosimone in #1576
- fix(httpclientx): add support for cloudfronting by @bassosimone in #1577
- cleanup(probeservices): remove residual httpx.Client dependency by @bassosimone in #1578
- cleanup: remove unused httpx package by @bassosimone in #1579
- refactor(probeservices): use httpclientx for check-in by @bassosimone in #1580
- feat(session): implement CallWebConnectivityTestHelper by @bassosimone in #1581
- refactor(webconnectivity*): don't call httpapi directly by @bassosimone in #1582
- cleanup: only define ErrNoAvailableTestHelpers once by @bassosimone in #1583
- refactor(httpclientx): couple URL and cloudfront host header by @bassosimone in #1584
- httpclientx: implement fast recovery and return endpoint index by @bassosimone in #1586
- multierror: implement BuildErrorString and mark as legacy by @bassosimone in #1587
- feat(httpclientx): allow configuring max-response-body size by @bassosimone in #1588
- refactor(webconnectivityqa): use httpclientx by @bassosimone in #1589
- cleanup: remove httpapi and ooapi by @bassosimone in #1560
- doc: document probe services interactions by @bassosimone in #1590
📖 Documenting the release process
We were asked to document the release process in ooni/probe#2698, and the resulting work is this:
- doc: start improving releases documentation by @bassosimone in #1533
- doc: document the release process by @bassosimone in #1534
🚧 Releasing & maintenance
This set of changes deal with preparing a release. In particular, in this case, we took on the chore of reducing the number of warnings emitted by gosec
, such that its output can actually be informative and actionable (there was lots of noise). In terms of behavioral changes in the ooniprobe
binary, these are the two most "impactful" changes:
-
I explicitly ignore errors when resetting with
-f
theOONI_HOME
directory, to keep the previous idempotent behavior, because I think that otherwise the desktop app may emit errors if asked to delete theOONI_HOME
multiple times: https://github.com/ooni/probe-cli/pull/1603/files#diff-2e841e5388e3f75b0ab808e74d5b34a9ebb72466a508daecda35625a7eab5c7fR29 -
I am now panicking if
survey
fails (which should not happen unless we misconfiguresurvey
in the code or we're not able to write to the standard output): https://github.com/ooni/probe-cli/pull/1603/files#diff-3e09d6a095d686f531f06efe21b6e430b311340af5ce74989f110dc05424cbcdR24 -
I am now reporting an error if we fail to update the database to set the upload status: https://github.com/ooni/probe-cli/pull/1603/files#diff-2a4cd822f78eb174dc7c6b88e3ab71be4810624b358b98109c10...
OONI Probe CLI v3.21.1
This is a stable release. On a high-level, this is what changed since 3.19:
- ✨ 🐛 🚧 Web Connectivity LTE improvements
- ✨ 🐛 🚧 Web Connectivity Test Helper improvements
- 🐛 TorSf experiment: fixed data quality issue
- ✨ Add the
./script/go.bash
script to help development - 🚧 OONI Run v2: more flexible Engine<->App interface
- ✨ Adding Wikimedia DNS-over-HTTPS resolver
- 🚧 Removing the run experiment
- 🚧 Improve SummaryKeys management
- 🚧 Updating dependencies
- 🚧 Minor Miscellaneous Maintenance
- 🐛 Minor Miscellaneous Bug Fixes
For more details, please see OONI Probe CLI v3.21.0's ChangeLog.
Since v3.21.0 we additionally:
- ✨ backport: feat(miniooni): add --software-name and --software-version 294ce23
This release does not include a linux/armv6
binary because of ooni/probe#2694.
OONI Probe CLI v3.21.0
This is a stable release. On a high-level, this is what changed since 3.19:
- ✨ 🐛 🚧 Web Connectivity LTE improvements
- ✨ 🐛 🚧 Web Connectivity Test Helper improvements
- 🐛 TorSf experiment: fixed data quality issue
- ✨ Add the
./script/go.bash
script to help development - 🚧 OONI Run v2: more flexible Engine<->App interface
- ✨ Adding Wikimedia DNS-over-HTTPS resolver
- 🚧 Removing the run experiment
- 🚧 Improve SummaryKeys management
- 🚧 Updating dependencies
- 🚧 Minor Miscellaneous Maintenance
- 🐛 Minor Miscellaneous Bug Fixes
More in detail:
✨ 🐛 🚧 Web Connectivity LTE improvements
We made sure that Web Connectivity LTE handles internationalized domain names correctly:
- fix(webconnectivitylte): make IDNA WAI by @bassosimone in #1460
We improved Web Connectivity LTE to correctly handle malformed URLs:
- fix(webconnectivitylte): handle malformed redirect URLs by @bassosimone in #1480
We ensured that we correctly handle measurements containing loopback addresses:
- fix(webconnectivitylte): handle measurements with loopback addrs by @bassosimone in #1462
We fixed a bug where Web Connectivity LTE was not correctly counting bytes sent and received:
- fix(webconnectivitylte): count bytes sent and received by @bassosimone in #1488
We ensured that Web Connectivity LTE correctly handle cases of websites with missing A/AAAA addresses:
- fix(webconnectivitylte): handle domains w/o A/AAAA records by @bassosimone in #1473
We fixed a bug where Web Connectivity LTE was not including the network events:
- fix(webconnectivitylte): include network events by @bassosimone in #1503
We updated Web Connectivity LTE's "classic" analysis engine to generate the extended blocking flags, such that it is now possible to always use the "classic" engine. In practical term, this implied improving the minipipeline
package and making sure the "classic" engine, which already generates v0.4-compatible tests keys, could also generate the test keys that were previously generated by the "orig" engine. After this change, we removed the now-unneded "orig" analysis engine.
- refactor(webconnectivitylte): make analysis flags public by @bassosimone in #1447
- refactor(minipipeline): allow avoiding linear analysis by @bassosimone in #1448
- feat(minipipeline): add DNSLookupSuccessWithBogonAddresses by @bassosimone in #1449
- chore(minipipeline): increase code coverage by @bassosimone in #1450
- feat(minipipeline): add ControlFinalResponseExpectations by @bassosimone in #1451
- feat(minipipeline): add ControlFinalResponseExpectations (2/2) by @bassosimone in #1452
- feat(minipipeline): add DNS and HTTP unexplained failures by @bassosimone in #1453
- feat(webconnectivitylte): classic computes XBlockingFlags by @bassosimone in #1446
- feat(webconnectivitylte): classic supports XNullNullFlags by @bassosimone in #1454
- cleanup(webconnectivitylte): remove the orig engine by @bassosimone in #1455
- cleanup(webconnectivitytle): avoid code duplication by @bassosimone in #1456
- feat(webconnectivitylte): handle ghost DNS censorship by @bassosimone in #1457
- feat(webconnectivitylte): add more tests and comments by @bassosimone in #1458
- minipipeline: fix expected TCP & TLS failures by @bassosimone in #1459
We added more test Web Connectivity LTE and minipipeline
test cases:
- chore(minipipeline): add http://firefox.com test case by @bassosimone in #1470
- feat(webconnectivitylte): add Cloudflare CAPTCHA test cases by @bassosimone in #1476
- chore(webconnectivityqa): reproduce ooni/probe#2628 issue by @bassosimone in #1479
- minipipeline: fix computing HTTPResponseBodyIsTruncated by @bassosimone in #1481
- chore(webconnectivitylte): add large file test cases by @bassosimone in #1475
- chore(minipipeline): add test case for ooni/probe#2456 by @bassosimone in #1461
- chore(minipipeline): regenerate test cases by @bassosimone in #1469
We improved Web Connectivity LTE to correctly handle more blocking=null accessible=null
cases:
- chore(minipipeline): add data to understand ooni/probe#1511 by @bassosimone in #1471
- fix(minipipeline): handle IP-addr URLs in classic linear analysis by @bassosimone in #1472
We improved (and modified) the implementation of StreamAllContext and moved it inside the netxlite
package:
- BREAKING CHANGE: feat: move StreamAllContext to netxlite by @bassosimone in #1490
We implemented support for SummaryKeys in Web Connectivity LTE:
- feat(webconnectivitylte): wire-in SummaryKeys by @bassosimone in #1493
We factored Web Connectivity LTE algorithms into the webconnectivityalgo
package and added support for cycling through several DNS-over-UDP resolvers, thus implementing a feature request demanded by users in the SEA region:
- refactor: move webconnectivitylte algos to webconnectivityalgo by @bassosimone in #1496
- feat(webconnectivityalgo): test OpportunisticDNSOverHTTPSURLProvider by @bassosimone in #1497
- feat(webconnectivityalgo): test DNSWhoamiService by @bassosimone in #1498
- fix(DNSWhoamiService): implement cache expiration by @bassosimone in #1499
- feat(webconnectivitylte): use random DNS-over-UDP resolver by @bassosimone in #1500
We did work to reduce to ~zero the churn caused by regenerating minipipeline
test cases, after we realized the non-determinism in generating the test cases was going to cause too many large and ~hard-to-review properly diffs:
- fix(qatool): reduce generated test cases churn by @bassosimone in #1505
- fix(webconnectivitylte): never sort test keys by @bassosimone in #1506
- fix(webconnectivitylte): use scope for endpoint IDs by @bassosimone in #1507
- fix(webconnectivitylte): don't use a DoH URL provider singleton by @bassosimone in #1508
- fix(minipipeline): sort A before AAAA by @bassosimone in #1509
- fix(qatool): normalize test keys by @bassosimone in #1510
- fix(qatool): make Date header constant by @bassosimone in #1511
- fix(qatool): do not save large response bodies on disk by @bassosimone in #1512
- fix(webconnectivitylte): add 10k*i scope to all IDs by @bassosimone in #1513
- cleanup(netemx): simplify idna and large-file test cases by @bassosimone in #1514
- fix(qatool): remove remaining causes of churn by @bassosimone in #1515
We ensured that Web Connectivity LTE correctly includes the client_resolver
field:
- fix(webconnectivitylte): include client_resolver by @bassosimone in #1504
We ensured that Web Connectivity LTE correctly uses the tcptls_experiment
tag when needed:
- fix(webconnectivitylte): add classic and tcptls_experiment tags by @bassosimone in #1502
We implemented additional, misc changes to improve the codebase
- refactor(webconnectivitylte): use NewHTTPTransportWithOptions by @bassosimone in #1494
- doc(webconnectivitylte): clarify http_transaction_{start,end} semantics by @bassosimone in #1495
✨ 🐛 🚧 Web Connectivity Test Helper improvements
We implemented protection against oohelperd overload, which can be caused by synchronized clients:
- ✨ feat(oohelperd): protect against overload and add metrics by @bassosimone in #1442
We implemented logs and tests to make sure oohelperd does not try connecting to bogons:
- 🐛 fix(oohelperd): make sure endpoints don't connect to 127.0.0.1 by @bassosimone in #1463
We removed technical debt in the oohelperd, which was making GVisor-based integration tests tricky. Specifically, we ensured we have a single constructor for oohelperd and that such a constructor depends on a *netxlite.Netx
. In turn, this allowed us to use the exact same constructor for running oohelperd in production and in integration testing, thus allowing for less fragile integration testing.
- 🐛 fix(oohelperd,netemx): construct equivalent HTTPTransports by @bassosimone in #1464
- 🚧 cleanup(netxlite): remove first-order implicit-Netx wrappers by @bassosimone in https://...
OONI Probe CLI v3.21.0-alpha
This is an alpha release for creating a branching point for the release/3.21
branch.
Please see release 3.21.0 for an explanatory changelog.
This build lacks linux/armv6
binaries because of ooni/probe#2694.
What's Changed
- chore: we're now hacking on v3.21.0-alpha by @bassosimone in #1439
- chore(deps): bump golang.org/x/crypto from 0.16.0 to 0.17.0 by @dependabot in #1441
- feat(oohelperd): protect against overload and add metrics by @bassosimone in #1442
- chore(deps): bump github.com/cloudflare/circl from 1.3.6 to 1.3.7 by @dependabot in #1443
- fix(dnsping): make output more actionable by @bassosimone in #1444
- fix(libtor): prevent concurrent instances by @bassosimone in #1445
- refactor(webconnectivitylte): make analysis flags public by @bassosimone in #1447
- refactor(minipipeline): allow avoiding linear analysis by @bassosimone in #1448
- feat(minipipeline): add DNSLookupSuccessWithBogonAddresses by @bassosimone in #1449
- chore(minipipeline): increase code coverage by @bassosimone in #1450
- feat(minipipeline): add ControlFinalResponseExpectations by @bassosimone in #1451
- feat(minipipeline): add ControlFinalResponseExpectations (2/2) by @bassosimone in #1452
- feat(minipipeline): add DNS and HTTP unexplained failures by @bassosimone in #1453
- feat(webconnectivitylte): classic computes XBlockingFlags by @bassosimone in #1446
- feat(webconnectivitylte): classic supports XNullNullFlags by @bassosimone in #1454
- cleanup(webconnectivitylte): remove the orig engine by @bassosimone in #1455
- cleanup(webconnectivitytle): avoid code duplication by @bassosimone in #1456
- feat(webconnectivitylte): handle ghost DNS censorship by @bassosimone in #1457
- feat(webconnectivitylte): add more tests and comments by @bassosimone in #1458
- minipipeline: fix expected TCP & TLS failures by @bassosimone in #1459
- fix(webconnectivitylte): make IDNA WAI by @bassosimone in #1460
- chore(minipipeline): add test case for ooni/probe#2456 by @bassosimone in #1461
- fix(oohelperd): make sure endpoints don't connect to 127.0.0.1 by @bassosimone in #1463
- fix(oohelperd,netemx): construct equivalent HTTPTransports by @bassosimone in #1464
- cleanup(netxlite): remove first-order implicit-Netx wrappers by @bassosimone in #1465
- refactor(oohelperd): depend on netxlite.Netx only by @bassosimone in #1466
- refactor(oohelperd,netmx): reduce construction diff to zero by @bassosimone in #1467
- refactor(netemx,oohelperd): use oohelperd.NewHandler constructor by @bassosimone in #1468
- chore(minipipeline): regenerate test cases by @bassosimone in #1469
- fix(webconnectivitylte): handle measurements with loopback addrs by @bassosimone in #1462
- chore(minipipeline): add http://firefox.com test case by @bassosimone in #1470
- chore(minipipeline): add data to understand ooni/probe#1511 by @bassosimone in #1471
- fix(minipipeline): handle IP-addr URLs in classic linear analysis by @bassosimone in #1472
- fix(webconnectivitylte): handle domains w/o A/AAAA records by @bassosimone in #1473
- chore: use latest zlib version published (1.3.1) by @ainghazal in #1477
- doc(Readme.md): add link to miniooni by @bassosimone in #1478
- feat(webconnectivitylte): add Cloudflare CAPTCHA test cases by @bassosimone in #1476
- chore(webconnectivityqa): reproduce ooni/probe#2628 issue by @bassosimone in #1479
- fix(webconnectivitylte): handle malformed redirect URLs by @bassosimone in #1480
- minipipeline: fix computing HTTPResponseBodyIsTruncated by @bassosimone in #1481
- chore(webconnectivitylte): add large file test cases by @bassosimone in #1475
- chore(buildtool): support go1.18+ by @bassosimone in #1483
- feat(buildtool): add the gofixpath subcommand by @bassosimone in #1484
- feat(buildtool): introduce script/go.bash wrapper by @bassosimone in #1485
- feat(Makefile): use ./script/go.bash by @bassosimone in #1482
- doc(Readme.md): mention ./script/go.bash by @bassosimone in #1486
- fix(script/go.bash): support Ubuntu 22.04 LTS and Debian 11 by @bassosimone in #1487
- fix(webconnectivitylte): count bytes sent and received by @bassosimone in #1488
- feat(engineresolver): add wikimedia DNS by @bassosimone in #1489
- BREAKING CHANGE: feat: move StreamAllContext to netxlite by @bassosimone in #1490
- cleanup(all): remove the run experiment by @bassosimone in #1492
- refactor(all): improve SummaryKeys management by @bassosimone in #1491
- feat(webconnectivitylte): wire-in SummaryKeys by @bassosimone in #1493
- refactor(webconnectivitylte): use NewHTTPTransportWithOptions by @bassosimone in #1494
- doc(webconnectivitylte): clarify http_transaction_{start,end} semantics by @bassosimone in #1495
- refactor: move webconnectivitylte algos to webconnectivityalgo by @bassosimone in #1496
- feat(webconnectivityalgo): test OpportunisticDNSOverHTTPSURLProvider by @bassosimone in #1497
- feat(webconnectivityalgo): test DNSWhoamiService by @bassosimone in #1498
- fix(DNSWhoamiService): implement cache expiration by @bassosimone in #1499
- feat(webconnectivitylte): use random DNS-over-UDP resolver by @bassosimone in #1500
- fix(CDEPS/tor): allow compiling under ArchLinux by @bassosimone in #1501
- fix(webconnectivitylte): include network events by @bassosimone in #1503
- fix(webconnectivitylte): include client_resolver by @bassosimone in #1504
- fix(qatool): reduce generated test cases churn by @bassosimone in #1505
- fix(webconnectivitylte): never sort test keys by @bassosimone in #1506
- fix(webconnectivitylte): use scope for endpoint IDs by @bassosimone in #1507
- fix(webconnectivitylte): don't use a DoH URL provider singleton by @bassosimone in #1508
- fix(minipipeline): sort A before AAAA by @bassosimone in #1509
- fix(qatool): normalize test keys by @bassosimone in #1510
- fix(qatool): make Date header constant by @bassosimone in #1511
- fix(qatool): do not save large response bodies on disk by @bassosimone in #1512
- fix(webconnectivitylte): add 10k*i scope to all IDs by @bassosimone in #1513
- cleanup(netemx): simplify idna and large-file test cases by @bassosimone in #1514
- fix(qatool): remove remaining causes of churn by @bassosimone in #1515
- fix(webconnectivitylte): add classic and tcptls_experiment tags by @bassosimone in #1502
- fix(gardener): avoid issues caused by stale databases by @bassosimone in #1516
- oohelperd: move prometheus metrics behind HTTP basic auth + docker image build + codepipeline buildspec by @hellais in #1520
- fix(tlsmiddlebox): if RemoteAddr is IPv6 set IPV6_UNICAST_HOPS by @Lanius-collaris in #1517
- chore(deps): bump google.golang.org/protobuf from 1.31.0 to 1.33.0 by @dependabot in #1519
- fix(pkg/gobash/version.go): validate zip files content by @bassosimone in #1521
- doc(gobash.yml): explain what to do during releases by @bassosimone in https://github.com/ooni/pro...
OONI Probe CLI v3.20.1
This is a stable release. On a high-level, this is what changed since 3.19:
- ✨ Web Connectivity v0.5 is nearly production ready
- ✨ Initial support for Go 1.21
- 🚧 Scripting to make research faster
- 🚧 Refactoring and improvements for the experimental
dslx
package - 🚧 Release engineering (aka keeping the lights on)
- 🐛 Miscellaneous bug fixes
See https://github.com/ooni/probe-cli/releases/tag/v3.20.0 for a detailed changelog with respect to 3.19.
On top of 3.20.0, this release adds the following commits:
OONI Probe CLI v3.20.0
This is a stable release. On a high-level, this is what changed since 3.19:
- ✨ Web Connectivity v0.5 is nearly production ready
- ✨ Initial support for Go 1.21
- 🚧 Scripting to make research faster
- 🚧 Refactoring and improvements for the experimental
dslx
package - 🚧 Release engineering (aka keeping the lights on)
- 🐛 Miscellaneous bug fixes
More in detail:
✨ Web Connectivity v0.5 is nearly production ready
We implemented the minipipeline
package, borrowing the https://github.com/ooni/data design, to make sure that Web Connectivity v0.5 produces the same top-level keys produced by Web Connectivity v0.4 for our GVisor-based QA test suite. Because of that, we're now ready to start enabling Web Connectivity v0.5 for all users for limited periods of time using the check-in API's feature flags. By doing this, we would be able to more thoroughly A/B test v0.4 and v0.5. In turn, this would allow us to fix additional bugs and hopefully v0.5 would be the default implementation of Web Connectivity in the 3.21 or 3.22 release cycles.
Related commits
- feat: minipipeline to analyze measurements by @bassosimone in #1393
- feat: qatool to run webconnectivity lte QA by @bassosimone in #1394
- fix(minipipeline): DNSLookupFailures must be a slice by @bassosimone in #1395
- refactor(webconnectivitylte): {Append,Prepend}Requests by @bassosimone in #1396
- feat(webconnectivityqa): add more QA tests by @bassosimone in #1397
- fix(webconnectivitylte): always save "connect" network events by @bassosimone in #1398
- chore(webconnectivitylte): sync {cleartext,secure}flow.go by @bassosimone in #1399
- cleanup(minipipeline): factor code into utility functions by @bassosimone in #1400
- fix(minipipeline/analysis): distinguish between None and empty by @bassosimone in #1401
- feat(minipipeline): introduce "classic" observations filtering by @bassosimone in #1402
- feat: add and process depth and fetch_body tags by @bassosimone in #1403
- chore: regenerate testdata for minipipeline by @bassosimone in #1404
- fix(minipipeline): include probe/control resolved addrs by @bassosimone in #1405
- cleanup(minipipeline/analysis): move utilities in other files by @bassosimone in #1406
- fix(minipipeline): change DNSDiff algorithm by @bassosimone in #1407
- refactor(minipipeline): change DNSDiff foundations by @bassosimone in #1408
- refactor(minipipeline): adjust how we compute DNS failures by @bassosimone in #1409
- refactor(minipipeline): adjust how we compute TCP and TLS anomalies by @bassosimone in #1410
- feat(minipipeline): distinguish failure by operation by @bassosimone in #1411
- refactor(minipipeline): tweak how we detect HTTP failures by @bassosimone in #1412
- refactor(minipipeline): separate unexplained tcp and tls failures by @bassosimone in #1413
- refactor(minipipeline): tweak HTTP code by @bassosimone in #1414
- feat(minipipeline): add metrics required by LTE compat analysis mode by @bassosimone in #1415
- cleanup(minipipeline): zap DNSPossiblyNonexistingDomains metric by @bassosimone in #1416
- fix(minipipeline): don't emit fetch_body=false in classic mode by @bassosimone in #1418
- fix(minipipeline): set control expectation for all observations by @bassosimone in #1419
- feat(minipipeline): implement linear analysis by @bassosimone in #1417
- feat(webconnectivitylte): introduce classic analysis by @bassosimone in #1420
- feat: make sure LTE and v0.4 emit the same test keys by @bassosimone in #1392
- doc(webconnectivitylte): document "orig" HTTP analysis bug by @bassosimone in #1422
✨ Initial support for Go 1.21
Community members asked us to add Go 1.21 support. It is now possible to compile OONI Probe using Go 1.21. Because Psiphon does not support Go 1.21 yet, when you're building using Go 1.21, it would not be possible to use Psiphon as a circumvention tunnel or to run the Psiphon experiment. (Psiphon should finish migrating to Go 1.21 soon, so OONI Probe 3.21 should have full Go 1.21 support.)
Related commits
- feat: allow go1.21 builds by @bassosimone in #1424
🚧 Scripting to make research faster
As part of our richer input efforts (https://github.com/ooni/2023-05-richer-input), we developed DSL code designed to executed from a scripting language environment. We have been also using this code for research purposes, to address cases where we need to iterate faster and deploying new binaries frequently slows down the process significantly. In this release, we are starting to merge part of this code into this repository and to expose it (as an experimental preview) to the miniooni
tool. Namely, we have merged the underlying DSL engine and the corresponding bindings for the https://github.com/dop251/goja JavaScript engine. We will add additional documentation about this functionality in the next release cycles, as we continue experimenting and using it for research. In the meanwhile, see https://github.com/bassosimone/2023-12-09-ooni-javascript/ for additional information and details about this experimental feature.
Related commits
- feat(miniooni): minimal JavaScript-ing capabilities by @bassosimone in #1437
🚧 Refactoring and improvements for the experimental dslx
package
We continued working on our experimental internal DSL prototype, by trying to simplify and make it suitable for production usage. We also used some of the refactored code in the scripting functionality implementation described above.
Related commits
- refactor(dslx): allow running w/o measurexlite as the backend by @bassosimone in #1376
- cleanup(dslx): use model.UnderlyingNetwork for testing by @bassosimone in #1377
- refactor(dslx): unify TLS and QUIC handshake options by @bassosimone in #1378
- refactor(dslx): start making functions stateless by @bassosimone in #1379
- refactor(dslx): prepare for making HTTPRequest stateless by @bassosimone in #1380
- refactor(dslx): finish making funcs stateless by @bassosimone in #1381
- refactor(dslx): pass Maybe[T] to Func.Apply by @bassosimone in #1382
- dslx: post-Func.Apply(Maybe[T])-introduction cleanups by @bassosimone in #1384
- refactor(dslx): collect observations using runtime by @bassosimone in #1383
- fix(dslx): remove Observations from Maybe by @bassosimone in #1385
- refactor(dslx): type Operation func(context, A) (B, error) by @bassosimone in #1386
- feat(dslx): implement DNSLookupParallel by @bassosimone in #1387
- feat(dslx): introduce MeasureResolvedAddresses by @bassosimone in #1388
🚧 Release engineering (aka keeping the lights on)
- chore: use 2023-12 database by @bassosimone in #1426
- chore: use go1.20.12 by @bassosimone in #1427
- chore: update user agent, reformat code, regenerate statics by @bassosimone in #1429
- chore: update easy-to-update deps by @bassosimone in #1430
- chore: more easy to update deps by @bassosimone in #1431
- chore: upgrade netem and miekg/dns by @bassosimone in #1432
- chore: update to [email protected] by @bassosimone in #1428
- chore: try to upgrade all possible dependencies by @bassosimone
- cleanup: move dslx inside internal/x by @bassosimone in #1438
- chore: update C deps by @bassosimone in #1434
- cleanup(miniooni): rename kvstore2 to engine by @bassosimone in #1436
🐛 Miscellaneous bug fixes
- fix(oonimkall): make sure SoftwareName is set by @bassosimone in #1425
- fix(oonirun): make sure we can parse integers from JSON by @bassosimone in #1435
OONI Probe CLI v3.20.0-alpha
This is an alpha release for creating a branching point for the release/3.20
branch.
Please see release 3.20 for an explanatory changelog.
What's Changed
- chore: we're now hacking on v3.20.0-alpha by @bassosimone in #1356
- feat: mvp of conditionally enabling experiments by @bassosimone in #1355
- fix(torsf): bump the version number by @bassosimone in #1357
- feat: add echcheck to the experimental suite by @kelmenhorst in #1217
- fix(ooniprobe): make sure we actually run echcheck by @bassosimone in #1358
- fix(registry): mark torsf as disabled by default by @bassosimone in #1359
- cleanup(riseupvpn): remove summary keys by @bassosimone in #1360
- refactor(riseupvpn): rename structs, change progress, bump version by @bassosimone in #1361
- chore: use go1.20.10 by @bassosimone in #1362
- refactor(riseupvpn): handle failing API and simplify test keys by @bassosimone in #1363
- feat(riseupvpn): include bootstrap in progress by @bassosimone in #1364
- chore(ooniprobe): add riseupvpn to experimental test suite by @bassosimone in #1365
- refactor(buildtool): use list for OpenSSL ./Configure flags by @bassosimone in #1367
- cleanup(buildtool): disable unit tests when building tor by @bassosimone in #1368
- fix(buildtool): let libevent use OpenSSL's pkgconfig by @bassosimone in #1369
- feat(buildtool): build zlib, openssl, libevent, and tor for iOS by @bassosimone in #1370
- chore(buildtool): add ios-build unit tests by @bassosimone in #1371
- feat(ios): replace go-libtor with ./internal/libtor by @bassosimone in #1366
- fix(ios): publish libcrypto, libssl, libevent, libtor, libz frameworks by @bassosimone in #1372
- fix(nettests): failing to start a nettest is a warning by @bassosimone in #1373
- fix(registry): disable vanilla_tor by default by @bassosimone in #1374
- chore: upgrade NDKVERSION to latest r26 by @bassosimone in #1375
- refactor(dslx): allow running w/o measurexlite as the backend by @bassosimone in #1376
- cleanup(dslx): use model.UnderlyingNetwork for testing by @bassosimone in #1377
- refactor(dslx): unify TLS and QUIC handshake options by @bassosimone in #1378
- refactor(dslx): start making functions stateless by @bassosimone in #1379
- refactor(dslx): prepare for making HTTPRequest stateless by @bassosimone in #1380
- refactor(dslx): finish making funcs stateless by @bassosimone in #1381
- refactor(dslx): pass Maybe[T] to Func.Apply by @bassosimone in #1382
- dslx: post-Func.Apply(Maybe[T])-introduction cleanups by @bassosimone in #1384
- refactor(dslx): collect observations using runtime by @bassosimone in #1383
- fix(dslx): remove Observations from Maybe by @bassosimone in #1385
- refactor(dslx): type Operation func(context, A) (B, error) by @bassosimone in #1386
- feat(dslx): implement DNSLookupParallel by @bassosimone in #1387
- feat(dslx): introduce MeasureResolvedAddresses by @bassosimone in #1388
- Update signal test endpoints fixes probe/2627 by @hellais in #1389
- chore: use 2023-11 geoip database by @bassosimone in #1390
- chore: use go1.20.11 by @bassosimone in #1391
- feat: minipipeline to analyze measurements by @bassosimone in #1393
- feat: qatool to run webconnectivity lte QA by @bassosimone in #1394
- fix(minipipeline): DNSLookupFailures must be a slice by @bassosimone in #1395
- refactor(webconnectivitylte): {Append,Prepend}Requests by @bassosimone in #1396
- feat(webconnectivityqa): add more QA tests by @bassosimone in #1397
- fix(webconnectivitylte): always save "connect" network events by @bassosimone in #1398
- chore(webconnectivitylte): sync {cleartext,secure}flow.go by @bassosimone in #1399
- cleanup(minipipeline): factor code into utility functions by @bassosimone in #1400
- fix(minipipeline/analysis): distinguish between None and empty by @bassosimone in #1401
- feat(minipipeline): introduce "classic" observations filtering by @bassosimone in #1402
- feat: add and process depth and fetch_body tags by @bassosimone in #1403
- chore: regenerate testdata for minipipeline by @bassosimone in #1404
- fix(minipipeline): include probe/control resolved addrs by @bassosimone in #1405
- cleanup(minipipeline/analysis): move utilities in other files by @bassosimone in #1406
- fix(minipipeline): change DNSDiff algorithm by @bassosimone in #1407
- refactor(minipipeline): change DNSDiff foundations by @bassosimone in #1408
- refactor(minipipeline): adjust how we compute DNS failures by @bassosimone in #1409
- refactor(minipipeline): adjust how we compute TCP and TLS anomalies by @bassosimone in #1410
- feat(minipipeline): distinguish failure by operation by @bassosimone in #1411
- refactor(minipipeline): tweak how we detect HTTP failures by @bassosimone in #1412
- refactor(minipipeline): separate unexplained tcp and tls failures by @bassosimone in #1413
- refactor(minipipeline): tweak HTTP code by @bassosimone in #1414
- feat(minipipeline): add metrics required by LTE compat analysis mode by @bassosimone in #1415
- cleanup(minipipeline): zap DNSPossiblyNonexistingDomains metric by @bassosimone in #1416
- fix(minipipeline): don't emit fetch_body=false in classic mode by @bassosimone in #1418
- fix(minipipeline): set control expectation for all observations by @bassosimone in #1419
- feat(minipipeline): implement linear analysis by @bassosimone in #1417
- feat(webconnectivitylte): introduce classic analysis by @bassosimone in #1420
- feat: make sure LTE and v0.4 emit the same test keys by @bassosimone in #1392
- fix(signal): trim down tested endpoints by @bassosimone in #1421
- doc(webconnectivitylte): document "orig" HTTP analysis bug by @bassosimone in #1422
- fix(oonimkall): make sure SoftwareName is set by @bassosimone in #1425
- chore: use 2023-12 database by @bassosimone in #1426
- chore: use go1.20.12 by @bassosimone in #1427
- chore: update user agent, reformat code, regenerate statics by @bassosimone in #1429
- chore: update easy-to-update deps by @bassosimone in #1430
- chore: more easy to update deps by @bassosimone in #1431
- chore: upgrade netem and miekg/dns by @bassosimone in #1432
- chore: update to [email protected] by @bassosimone in #1428
- chore: try to upgrade all possible dependencies by @bassosimone in #1433
- feat: allow go1.21 builds by @bassosimone in #1424
- fix: make sure we can parse integers from JSON by @bassosimone in #1435
- cleanup(miniooni): rename kvstore2 to engine by @bassosimone in #1436
- feat(miniooni): minimal JavaScript-ing capabilities by @bassosimone in #1437
- cleanup: move dslx inside internal/x by @bassosimone in #1438
- chore: update C deps by @bassosimone in #1434
Full Changelog: v3.19.0-alpha...v3.20.0-alpha