From b59d56f70637e1c339252fa38e8c977e16e3811d Mon Sep 17 00:00:00 2001 From: Mike Odnis Date: Sat, 15 Aug 2026 17:43:41 -0400 Subject: [PATCH 1/4] fix(ci): drop removed --exclude-mail flag breaking lychee since May MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The weekly lychee job has failed 14 consecutive scheduled runs (every run since 2026-05-11). The cause is not external link flake, which the workflow comment anticipates — lychee never checked a single link: error: unexpected argument '--exclude-mail' found Usage: lychee ... --include-mail[=] [inputs]... Upstream removed `--exclude-mail` and inverted it to `--include-mail`. lychee-action is pinned by SHA but tracks the latest lychee binary (0.24.2 today), so the flag vanished under a pinned action and the job has aborted during argument parsing ever since. Mail is now excluded by default (`--include-mail` = "Also check email addresses", default false), so deleting the flag preserves the original intent exactly rather than changing what gets checked. Also pins actions/checkout and actions/cache to commit SHAs, and sets `persist-credentials: false` on checkout. The pin is required by the same blanket `unpinned-uses` policy that broke #117; the credentials flag is needed because pinning edits the checkout line, which would otherwise surface the pre-existing `artipacked` finding as a new alert on a changed line. This job only reads files, so it never needs the token persisted. Verified: lychee 0.24.2 --help confirms --exclude-mail is gone and --include-mail defaults to false. zizmor v1.29.0 on this file goes from 3 findings (2 high unpinned-uses, 1 artipacked) to 0. actionlint passes. Note: #121 attempted to fix this by committing six .lycheecache entries. That could not have worked — all six are 200s (caching successes cannot suppress an argument-parsing abort) and --max-cache-age 1d expires them within a day. Left in place as harmless; it is dead weight, not a fix. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/lychee.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lychee.yml b/.github/workflows/lychee.yml index 92e8b1e5..198c3f9d 100644 --- a/.github/workflows/lychee.yml +++ b/.github/workflows/lychee.yml @@ -25,10 +25,12 @@ jobs: name: lychee (external links) runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false - name: Restore lychee cache - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: .lycheecache key: cache-lychee-${{ github.sha }} @@ -41,7 +43,6 @@ jobs: --cache --max-cache-age 1d --no-progress - --exclude-mail --accept 200,204,206,429 --max-retries 2 --retry-wait-time 5 From 13f3c65d1521af5f771110577c32765a6c6232fa Mon Sep 17 00:00:00 2001 From: Mike Odnis Date: Sat, 15 Aug 2026 18:12:20 -0400 Subject: [PATCH 2/4] fix(ci): scope lychee to external links only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With the argument-parsing abort fixed, lychee ran for the first time since May and failed with 11,529 errors out of 34,557 links. None were external-link problems: ~11,380 file:// local links (mostly generated SDK API doc anchors) 148 root-relative links (/sdks/typescript) that cannot resolve Both classes are internal links, which this workflow explicitly does not own — see its own header: "Internal MDX link integrity is enforced by `mint broken-links` in required.yml." lychee was walking every internal link in the docs tree, including the generated Python/TS API reference, and that was being misread as "external link flake" for months. Two flags are needed, and both are required — neither works alone: --scheme http/https confines checking to external URLs. Measured with --dump over identical inputs: 16,257 links -> 2,984, zero file:// surviving the filter. --root-dir root-relative links fail during *resolution*, which happens before scheme filtering, so --scheme alone cannot suppress them (confirmed: --exclude '^/' has no effect either). --root-dir lets them resolve to file:// URLs, which the scheme filter then excludes. Verified repo-wide: 148 resolution errors -> 0. --root-dir does not turn this into a second internal link checker: the resolved file:// links are excluded, never fetched. Rejected --base-url, which would instead point all 148 at the live site — locally that timed out on all inputs and took 80s for one file. Last verified CI run on this branch (31910818811) had all 2,972 external links passing, with 148 resolution errors as the only remaining failure; this commit removes those. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/lychee.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/lychee.yml b/.github/workflows/lychee.yml index 198c3f9d..36641ab9 100644 --- a/.github/workflows/lychee.yml +++ b/.github/workflows/lychee.yml @@ -43,6 +43,9 @@ jobs: --cache --max-cache-age 1d --no-progress + --root-dir ${{ github.workspace }} + --scheme http + --scheme https --accept 200,204,206,429 --max-retries 2 --retry-wait-time 5 From 8963cfea13cc86f454ca29b69a9d9d3418c78c04 Mon Sep 17 00:00:00 2001 From: resq-sw Date: Sat, 15 Aug 2026 22:29:44 -0400 Subject: [PATCH 3/4] fix: resolve failing CI (run 31911555547) --- ...Clients.BaseServiceClient.BuildResiliencePipeline(bool).md | 2 +- .../ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md | 2 +- ...dinationHceClient,ResQ.Clients.InfrastructureApiClient).md | 2 +- .../ResQ.Storage.PinataClient.BuildResiliencePipeline().md | 2 +- .../api/ResQ.Storage/ResQ.Storage.PinataOptions.ApiUrl.md | 2 +- .../api/ResQ.Storage/ResQ.Storage.PinataOptions.GatewayUrl.md | 2 +- sdks/rust/api/resq-cli/commands.md | 2 +- sdks/rust/api/resq-dsa/index.md | 4 ++-- sdks/rust/api/resq-perf.md | 2 +- sdks/rust/api/resq-tui/index.md | 2 +- .../helpers/browser/html-entities/functions/obfuscateLink.md | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/sdks/dotnet/api/ResQ.Clients/ResQ.Clients.BaseServiceClient.BuildResiliencePipeline(bool).md b/sdks/dotnet/api/ResQ.Clients/ResQ.Clients.BaseServiceClient.BuildResiliencePipeline(bool).md index 2c8cca58..992d6a74 100644 --- a/sdks/dotnet/api/ResQ.Clients/ResQ.Clients.BaseServiceClient.BuildResiliencePipeline(bool).md +++ b/sdks/dotnet/api/ResQ.Clients/ResQ.Clients.BaseServiceClient.BuildResiliencePipeline(bool).md @@ -18,4 +18,4 @@ private Polly.ResiliencePipeline BuildResil `enableRetries` [System\.Boolean](https://learn.microsoft.com/en-us/dotnet/api/system.boolean 'System\.Boolean') #### Returns -[Polly\.ResiliencePipeline<](https://learn.microsoft.com/en-us/dotnet/api/polly.resiliencepipeline-1 'Polly\.ResiliencePipeline\`1')[System\.Net\.Http\.HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage 'System\.Net\.Http\.HttpResponseMessage')[>](https://learn.microsoft.com/en-us/dotnet/api/polly.resiliencepipeline-1 'Polly\.ResiliencePipeline\`1') +[Polly\.ResiliencePipeline<](https://www.pollydocs.org/api/Polly.ResiliencePipeline-1.html 'Polly\.ResiliencePipeline\`1')[System\.Net\.Http\.HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage 'System\.Net\.Http\.HttpResponseMessage')[>](https://www.pollydocs.org/api/Polly.ResiliencePipeline-1.html 'Polly\.ResiliencePipeline\`1') diff --git a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md index da699cee..29001806 100644 --- a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md +++ b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md @@ -24,7 +24,7 @@ public ScenarioRunner(ResQ.Clients.CoordinationHceClient hce, ResQ.Clients.Infra -`hce` [ResQ\.Clients\.CoordinationHceClient](https://learn.microsoft.com/en-us/dotnet/api/resq.clients.coordinationhceclient 'ResQ\.Clients\.CoordinationHceClient') +`hce` [ResQ\.Clients\.CoordinationHceClient](../ResQ.Clients/ResQ.Clients.CoordinationHceClient.md 'ResQ\.Clients\.CoordinationHceClient') Client for the coordination\-hce service\. diff --git a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.VirtualDrone.VirtualDrone(string,ResQ.Core.Location,ResQ.Clients.CoordinationHceClient,ResQ.Clients.InfrastructureApiClient).md b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.VirtualDrone.VirtualDrone(string,ResQ.Core.Location,ResQ.Clients.CoordinationHceClient,ResQ.Clients.InfrastructureApiClient).md index 1b3a3192..0ebc1a2e 100644 --- a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.VirtualDrone.VirtualDrone(string,ResQ.Core.Location,ResQ.Clients.CoordinationHceClient,ResQ.Clients.InfrastructureApiClient).md +++ b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.VirtualDrone.VirtualDrone(string,ResQ.Core.Location,ResQ.Clients.CoordinationHceClient,ResQ.Clients.InfrastructureApiClient).md @@ -27,7 +27,7 @@ Initial geographic position of the drone\. -`hce` [ResQ\.Clients\.CoordinationHceClient](https://learn.microsoft.com/en-us/dotnet/api/resq.clients.coordinationhceclient 'ResQ\.Clients\.CoordinationHceClient') +`hce` [ResQ\.Clients\.CoordinationHceClient](../ResQ.Clients/ResQ.Clients.CoordinationHceClient.md 'ResQ\.Clients\.CoordinationHceClient') Client for the coordination\-hce service\. diff --git a/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataClient.BuildResiliencePipeline().md b/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataClient.BuildResiliencePipeline().md index 5c44787e..176c8083 100644 --- a/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataClient.BuildResiliencePipeline().md +++ b/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataClient.BuildResiliencePipeline().md @@ -13,4 +13,4 @@ private Polly.ResiliencePipeline BuildResil ``` #### Returns -[Polly\.ResiliencePipeline<](https://learn.microsoft.com/en-us/dotnet/api/polly.resiliencepipeline-1 'Polly\.ResiliencePipeline\`1')[System\.Net\.Http\.HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage 'System\.Net\.Http\.HttpResponseMessage')[>](https://learn.microsoft.com/en-us/dotnet/api/polly.resiliencepipeline-1 'Polly\.ResiliencePipeline\`1') +[Polly\.ResiliencePipeline<](https://www.pollydocs.org/api/Polly.ResiliencePipeline-1.html 'Polly\.ResiliencePipeline\`1')[System\.Net\.Http\.HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage 'System\.Net\.Http\.HttpResponseMessage')[>](https://www.pollydocs.org/api/Polly.ResiliencePipeline-1.html 'Polly\.ResiliencePipeline\`1') diff --git a/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataOptions.ApiUrl.md b/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataOptions.ApiUrl.md index 6b821de4..62819131 100644 --- a/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataOptions.ApiUrl.md +++ b/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataOptions.ApiUrl.md @@ -14,7 +14,7 @@ public string ApiUrl { get; set; } #### Property Value [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') -The API base URL\. Default is "https://api\.pinata\.cloud"\. +The API base URL\. Default is `https://api.pinata.cloud`. ### Example diff --git a/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataOptions.GatewayUrl.md b/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataOptions.GatewayUrl.md index 17c56bb0..f16b7365 100644 --- a/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataOptions.GatewayUrl.md +++ b/sdks/dotnet/api/ResQ.Storage/ResQ.Storage.PinataOptions.GatewayUrl.md @@ -14,7 +14,7 @@ public string GatewayUrl { get; set; } #### Property Value [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') -The gateway base URL\. Default is "https://gateway\.pinata\.cloud/ipfs"\. +The gateway base URL\. Default is `https://gateway.pinata.cloud/ipfs`. ### Example diff --git a/sdks/rust/api/resq-cli/commands.md b/sdks/rust/api/resq-cli/commands.md index e75b615d..56a57f28 100644 --- a/sdks/rust/api/resq-cli/commands.md +++ b/sdks/rust/api/resq-cli/commands.md @@ -104,7 +104,7 @@ Canonical git-hook templates embedded via `include_str!`. Both `resq dev install-hooks` (scaffolding) and `resq hooks doctor` (drift detection) read from this single source. The templates are kept -in sync with <https://github.com/resq-software/dev/tree/main/scripts/git-hooks> +in sync with <https://github.com/resq-software/crates/tree/master/crates/resq-cli/templates/git-hooks> and the repo-local `.git-hooks/` — CI workflows in both repos enforce byte equality. diff --git a/sdks/rust/api/resq-dsa/index.md b/sdks/rust/api/resq-dsa/index.md index 7dc61f20..d595d68c 100644 --- a/sdks/rust/api/resq-dsa/index.md +++ b/sdks/rust/api/resq-dsa/index.md @@ -4,7 +4,7 @@ [![Crates.io](https://img.shields.io/crates/v/resq-dsa.svg)](https://crates.io/crates/resq-dsa) [![docs.rs](https://img.shields.io/docsrs/resq-dsa)](https://docs.rs/resq-dsa) -[![License](https://img.shields.io/crates/l/resq-dsa.svg)](https://github.com/wombocombo/wrk/blob/master/LICENSE) +[![License](https://img.shields.io/crates/l/resq-dsa.svg)](https://github.com/resq-software/crates/blob/master/LICENSE) Production-grade data structures and algorithms with **zero external dependencies**. Designed for `no_std` environments and embedded systems while remaining ergonomic in standard Rust applications. The crate provides space-efficient probabilistic data structures (Bloom filter, Count-Min sketch), graph algorithms (BFS, Dijkstra, A\*), a bounded heap for K-nearest-neighbor tracking, a trie for prefix-based search, and Rabin-Karp rolling-hash string matching. @@ -441,7 +441,7 @@ assert_eq!(unicode, vec![0, 6]); ## License -Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/resq-software/crates/blob/master/crates/LICENSE) for details. +Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/resq-software/crates/blob/master/LICENSE) for details. ## Modules diff --git a/sdks/rust/api/resq-perf.md b/sdks/rust/api/resq-perf.md index cd698185..0d2dcd17 100644 --- a/sdks/rust/api/resq-perf.md +++ b/sdks/rust/api/resq-perf.md @@ -222,7 +222,7 @@ Response time in the header is color-coded: - [`resq-flame`](https://github.com/resq-software/crates/blob/master/crates/resq-flame/README.md) -- CPU flame graph profiler -For comprehensive profiling workflows see [`docs/PROFILING_FLAMEGRAPH_GUIDE.md`](https://github.com/resq-software/crates/blob/master/docs/PROFILING_FLAMEGRAPH_GUIDE.md). +For comprehensive profiling workflows see the [`resq-flame` README](https://github.com/resq-software/crates/blob/master/crates/resq-flame/README.md). ## License diff --git a/sdks/rust/api/resq-tui/index.md b/sdks/rust/api/resq-tui/index.md index dd38f5c6..0aff4ea5 100644 --- a/sdks/rust/api/resq-tui/index.md +++ b/sdks/rust/api/resq-tui/index.md @@ -675,7 +675,7 @@ fn main() { ## License -Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/resq-software/crates/blob/master/crates/LICENSE) for details. +Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/resq-software/crates/blob/master/LICENSE) for details. ## Modules diff --git a/sdks/typescript/api/helpers/browser/html-entities/functions/obfuscateLink.md b/sdks/typescript/api/helpers/browser/html-entities/functions/obfuscateLink.md index 8b4b6820..73fd435c 100644 --- a/sdks/typescript/api/helpers/browser/html-entities/functions/obfuscateLink.md +++ b/sdks/typescript/api/helpers/browser/html-entities/functions/obfuscateLink.md @@ -53,7 +53,7 @@ If required fields are missing or invalid. ## See - https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#security_and_privacy - - https://github.com/resq-software/resQ + - https://github.com/resq-software/npm ## Example From 038b4d550a708d631f59a31a16bec34311908c9d Mon Sep 17 00:00:00 2001 From: Mike Odnis Date: Sun, 16 Aug 2026 03:12:50 -0400 Subject: [PATCH 4/4] fix(docs): complete the ResQ-type cross-link fix in generated .NET docs The automated fix in #124 retargeted ResQ.Clients.CoordinationHceClient but missed the other two ResQ types mapped to learn.microsoft.com, and skipped ScenarioRunner.ValidateLocation entirely. Lychee on that branch went 12 -> 4 errors, with all four being the same generator bug: learn.microsoft.com/en-us/dotnet/api/resq.clients.infrastructureapiclient x2 learn.microsoft.com/en-us/dotnet/api/resq.core.location x2 Both are our own types; Microsoft does not document them, so both 404. Retargeted to the sibling generated pages, matching the relative-link form #124 already established. Both targets verified present in-tree. This is a stopgap, not the fix. These files are regenerated output -- api-docs.dotnet.yml clears sdks/dotnet/api/ before copying fresh output over it -- so this is discarded on the next api-docs run from resq-software/dotnet-sdk. The generator bug is filed as resq-software/dotnet-sdk#93. Co-Authored-By: Claude Opus 5 (1M context) --- ...narioRunner.ValidateLocation(ResQ.Core.Location,string).md | 2 +- .../ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md | 2 +- ...dinationHceClient,ResQ.Clients.InfrastructureApiClient).md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ValidateLocation(ResQ.Core.Location,string).md b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ValidateLocation(ResQ.Core.Location,string).md index b628fe28..e23a228c 100644 --- a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ValidateLocation(ResQ.Core.Location,string).md +++ b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ValidateLocation(ResQ.Core.Location,string).md @@ -15,7 +15,7 @@ private static void ValidateLocation(ResQ.Core.Location location, string paramNa -`location` [ResQ\.Core\.Location](https://learn.microsoft.com/en-us/dotnet/api/resq.core.location 'ResQ\.Core\.Location') +`location` [ResQ\.Core\.Location](../ResQ.Core/ResQ.Core.Location.md 'ResQ\.Core\.Location') The location to validate\. diff --git a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md index 29001806..b4f8dc79 100644 --- a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md +++ b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.ScenarioRunner.ctor.md @@ -30,7 +30,7 @@ Client for the coordination\-hce service\. -`infra` [ResQ\.Clients\.InfrastructureApiClient](https://learn.microsoft.com/en-us/dotnet/api/resq.clients.infrastructureapiclient 'ResQ\.Clients\.InfrastructureApiClient') +`infra` [ResQ\.Clients\.InfrastructureApiClient](../ResQ.Clients/ResQ.Clients.InfrastructureApiClient.md 'ResQ\.Clients\.InfrastructureApiClient') Client for the infrastructure\-api service\. diff --git a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.VirtualDrone.VirtualDrone(string,ResQ.Core.Location,ResQ.Clients.CoordinationHceClient,ResQ.Clients.InfrastructureApiClient).md b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.VirtualDrone.VirtualDrone(string,ResQ.Core.Location,ResQ.Clients.CoordinationHceClient,ResQ.Clients.InfrastructureApiClient).md index 0ebc1a2e..8be0b787 100644 --- a/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.VirtualDrone.VirtualDrone(string,ResQ.Core.Location,ResQ.Clients.CoordinationHceClient,ResQ.Clients.InfrastructureApiClient).md +++ b/sdks/dotnet/api/ResQ.Simulation/ResQ.Simulation.VirtualDrone.VirtualDrone(string,ResQ.Core.Location,ResQ.Clients.CoordinationHceClient,ResQ.Clients.InfrastructureApiClient).md @@ -21,7 +21,7 @@ Unique identifier for this drone\. -`startLocation` [ResQ\.Core\.Location](https://learn.microsoft.com/en-us/dotnet/api/resq.core.location 'ResQ\.Core\.Location') +`startLocation` [ResQ\.Core\.Location](../ResQ.Core/ResQ.Core.Location.md 'ResQ\.Core\.Location') Initial geographic position of the drone\. @@ -33,7 +33,7 @@ Client for the coordination\-hce service\. -`infra` [ResQ\.Clients\.InfrastructureApiClient](https://learn.microsoft.com/en-us/dotnet/api/resq.clients.infrastructureapiclient 'ResQ\.Clients\.InfrastructureApiClient') +`infra` [ResQ\.Clients\.InfrastructureApiClient](../ResQ.Clients/ResQ.Clients.InfrastructureApiClient.md 'ResQ\.Clients\.InfrastructureApiClient') Client for the infrastructure\-api service\.