From 8bc3ee7be0dfb564f4c5087cf8907238e1e97a77 Mon Sep 17 00:00:00 2001 From: Sebastian Werner Date: Wed, 22 Jul 2026 22:00:52 +0200 Subject: [PATCH 1/2] chore(main): release 1.5.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 65 +++++++++++++++++++++++++++++++++++ package.json | 2 +- 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 4c313f9..dd8fde7 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.4.0" + ".": "1.5.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 45d79e7..03e8e15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,70 @@ # Changelog +## [1.5.0](https://github.com/sebastian-software/offcourse/compare/v1.4.0...v1.5.0) (2026-07-22) + + +### Features + +* add Piccalilli course support ([4657304](https://github.com/sebastian-software/offcourse/commit/4657304f49db88f21d1e1738741a99ec6f993959)) +* support Josh Comeau courses via unified sync ([#39](https://github.com/sebastian-software/offcourse/issues/39)) ([97056bd](https://github.com/sebastian-software/offcourse/commit/97056bd96cbdacf39b9633e747b2d92f69bd109f)) +* unify course sync state across platforms ([#69](https://github.com/sebastian-software/offcourse/issues/69)) ([1530dee](https://github.com/sebastian-software/offcourse/commit/1530dee9fe660dd983a9cabc3f3c75f4970e1bb4)), closes [#21](https://github.com/sebastian-software/offcourse/issues/21) + + +### Bug Fixes + +* accept duplicate HLS rendition names ([#75](https://github.com/sebastian-software/offcourse/issues/75)) ([c007c8a](https://github.com/sebastian-software/offcourse/commit/c007c8a29f24940e1cd8597ae134e85a6fe9ebef)) +* avoid self-merging Loom video as audio ([0377ca5](https://github.com/sebastian-software/offcourse/commit/0377ca5d5ae9c0f6371b10dde3bdf9cfe01466bd)), closes [#95](https://github.com/sebastian-software/offcourse/issues/95) +* clean up shared state follow-ups ([#98](https://github.com/sebastian-software/offcourse/issues/98)) ([4163a98](https://github.com/sebastian-software/offcourse/commit/4163a98aa92351e17fd01a0ca9992fb647d7ed12)) +* **deps:** update actions/setup-node action to v7 ([c06aca0](https://github.com/sebastian-software/offcourse/commit/c06aca0ccef43956bc3f575650fd0a609eb99956)) +* **deps:** update codecov/codecov-action action to v7 ([8bb0401](https://github.com/sebastian-software/offcourse/commit/8bb0401c85f41b1209261f06498353fdab022b2e)) +* **deps:** update commitlint monorepo to v21.2.1 ([d6bb7a3](https://github.com/sebastian-software/offcourse/commit/d6bb7a3d0fd59ff71c2b3db19e327da3115c28ee)) +* **deps:** update dependency ast-v8-to-istanbul to v1.0.5 ([0ef0c9c](https://github.com/sebastian-software/offcourse/commit/0ef0c9c72db9d35765cff08f6e7a0671bc7fcf78)) +* **deps:** update dependency execa to v10 ([84eed00](https://github.com/sebastian-software/offcourse/commit/84eed009a8e9c4578a9d261895e056f377083b48)) +* **deps:** update dependency lint-staged to v17.1.0 ([#76](https://github.com/sebastian-software/offcourse/issues/76)) ([181a7a9](https://github.com/sebastian-software/offcourse/commit/181a7a9145a1c2b4843a3d6d5f07820a524860d3)) +* **deps:** update dependency node to v24 ([e83c18a](https://github.com/sebastian-software/offcourse/commit/e83c18a50eeba1e57555b6bbd46483d0b54d4a38)) +* **deps:** update pnpm to v11.13.1 ([6b3707e](https://github.com/sebastian-software/offcourse/commit/6b3707e2189ca0635369b19d5d63c3982a78b2b2)) +* **deps:** update pnpm to v11.15.0 ([#77](https://github.com/sebastian-software/offcourse/issues/77)) ([818502d](https://github.com/sebastian-software/offcourse/commit/818502d0e6d3527241910be19b40d75733accedd)) +* download complete LearningSuite videos ([bf650cc](https://github.com/sebastian-software/offcourse/commit/bf650cc7cfa815bdb02a85ecc0e33a010c795593)) +* ensure segment paths are relative in concatSegments function ([#1](https://github.com/sebastian-software/offcourse/issues/1)) ([6dbc09a](https://github.com/sebastian-software/offcourse/commit/6dbc09a849edc196374c05857045a1f1c1f5301d)) +* fail incomplete HLS segment downloads ([#44](https://github.com/sebastian-software/offcourse/issues/44)) ([5855339](https://github.com/sebastian-software/offcourse/commit/585533977c68ad27416fc369e74771223c083230)) +* fall back to GET when HLS HEAD is rejected ([9a14de1](https://github.com/sebastian-software/offcourse/commit/9a14de1e4b5d00358b704ae4b749631fa998f12f)), closes [#96](https://github.com/sebastian-software/offcourse/issues/96) +* format Renovate configuration ([#46](https://github.com/sebastian-software/offcourse/issues/46)) ([d8abb5d](https://github.com/sebastian-software/offcourse/commit/d8abb5d6cd8612017013828850dc6794c8ead8af)) +* handle incomplete Vimeo configs ([1d37011](https://github.com/sebastian-software/offcourse/commit/1d3701193f25435c9df4b04b06a91c1c7c811bf9)) +* handle progressive output stream failures ([#48](https://github.com/sebastian-software/offcourse/issues/48)) ([8cdcd6a](https://github.com/sebastian-software/offcourse/commit/8cdcd6afdc5412f3ed2cffa929b3f421f2e9b135)) +* handle unsupported Skool sync options ([2d25477](https://github.com/sebastian-software/offcourse/commit/2d25477bf233fcdfce29efaefe989033fe2d3891)), closes [#90](https://github.com/sebastian-software/offcourse/issues/90) +* harden course database migrations ([#63](https://github.com/sebastian-software/offcourse/issues/63)) ([05234c4](https://github.com/sebastian-software/offcourse/commit/05234c48c9af49c0640ce2cde25ee060a283b641)) +* harden download failures and timeouts ([a4fc545](https://github.com/sebastian-software/offcourse/commit/a4fc54579f1f24f484046aebb2c6d32548ede352)), closes [#93](https://github.com/sebastian-software/offcourse/issues/93) +* harden downloader HTTP boundaries ([#61](https://github.com/sebastian-software/offcourse/issues/61)) ([a737fdf](https://github.com/sebastian-software/offcourse/commit/a737fdfabb03407a41d8986b656f5ec5fef74bbf)) +* harden LearningSuite module scanning ([9945eef](https://github.com/sebastian-software/offcourse/commit/9945eefbc92414c318f7d55237c9b58451662dcb)), closes [#85](https://github.com/sebastian-software/offcourse/issues/85) +* ignore local worktrees in checks ([580ed71](https://github.com/sebastian-software/offcourse/commit/580ed7184d5ecffe77666780f0b5d5723d1ebe85)) +* improve scraper diagnostics and title cleanup ([#54](https://github.com/sebastian-software/offcourse/issues/54)) ([b0da40b](https://github.com/sebastian-software/offcourse/commit/b0da40baeb3d73370a29c586a8eef74c50b028cf)) +* isolate LearningSuite HLS renditions ([#49](https://github.com/sebastian-software/offcourse/issues/49)) ([8216379](https://github.com/sebastian-software/offcourse/commit/8216379f294ab3055d1eace4d8f416edd157b7a2)) +* keep interactive Josh login on current page ([8bff05b](https://github.com/sebastian-software/offcourse/commit/8bff05bae595a5689685076756d8cbdfde726643)), closes [#89](https://github.com/sebastian-software/offcourse/issues/89) +* **loom:** clean up downloads and capture sessions ([#52](https://github.com/sebastian-software/offcourse/issues/52)) ([0857a08](https://github.com/sebastian-software/offcourse/commit/0857a083bed2bfad9109f635de8e9b18fe11fed9)) +* make CLI shutdown interruptible ([5990f77](https://github.com/sebastian-software/offcourse/commit/5990f77f1a8abe4077fd251de4f005dfe1038d84)) +* normalize Skool URLs before validation ([#50](https://github.com/sebastian-software/offcourse/issues/50)) ([b1b6c6c](https://github.com/sebastian-software/offcourse/commit/b1b6c6c7b70083f2b9a148e09a57b1c256101db5)) +* polish Josh Comeau extraction and downloads ([79e38bf](https://github.com/sebastian-software/offcourse/commit/79e38bfd1f1fb2b29a65887b870da1bb44e36cce)), closes [#97](https://github.com/sebastian-software/offcourse/issues/97) +* preserve LearningSuite modules and lessons ([#51](https://github.com/sebastian-software/offcourse/issues/51)) ([56c0ff0](https://github.com/sebastian-software/offcourse/commit/56c0ff044d0c5fe134e91dc36baaa3f2f1dd21fb)) +* preserve retry errors during shutdown ([300625c](https://github.com/sebastian-software/offcourse/commit/300625cac3034784e7b704fc8f3cc8bb027f2660)), closes [#86](https://github.com/sebastian-software/offcourse/issues/86) +* preserve signed HLS variant queries ([87bb033](https://github.com/sebastian-software/offcourse/commit/87bb0337ca8d6f0b8ecc34985143e51cd193f96d)) +* preserve Vimeo HLS audio and signed URLs ([#53](https://github.com/sebastian-software/offcourse/issues/53)) ([43238db](https://github.com/sebastian-software/offcourse/commit/43238dbe0e175c29e28d48f7af7b0f72f262b377)) +* propagate progressive stream failures ([#43](https://github.com/sebastian-software/offcourse/issues/43)) ([c1b53ba](https://github.com/sebastian-software/offcourse/commit/c1b53bafa6d045a51edf3e5e26ec5583c5dc0d5c)) +* protect stored session credentials ([#41](https://github.com/sebastian-software/offcourse/issues/41)) ([57ed415](https://github.com/sebastian-software/offcourse/commit/57ed415a2b132019a8dbd8a60116ceb6001f403b)) +* publish attachments atomically ([6238a37](https://github.com/sebastian-software/offcourse/commit/6238a376311e3e19df82bcf9d3d3194951c98f12)) +* publish ffmpeg output atomically ([#47](https://github.com/sebastian-software/offcourse/issues/47)) ([484acc2](https://github.com/sebastian-software/offcourse/commit/484acc22e1a647addb31933172156911efff8c22)) +* redact signed download URLs ([#42](https://github.com/sebastian-software/offcourse/issues/42)) ([5cd3248](https://github.com/sebastian-software/offcourse/commit/5cd3248bc8417da94d5dbc7e710302277cac069a)) +* reject unsupported sync options and URLs ([#55](https://github.com/sebastian-software/offcourse/issues/55)) ([b6e2ad9](https://github.com/sebastian-software/offcourse/commit/b6e2ad95b429cb5f3efda13b69b603c0e0e84122)) +* report complete source coverage ([#56](https://github.com/sebastian-software/offcourse/issues/56)) ([077a916](https://github.com/sebastian-software/offcourse/commit/077a916af82c9647bf841f3837d565b429c6363f)) +* report coverage without provider workaround ([#57](https://github.com/sebastian-software/offcourse/issues/57)) ([92cc64b](https://github.com/sebastian-software/offcourse/commit/92cc64b563aa293134510ea0bbeb6068ce49eaa0)) +* resume validated native lessons ([73fb4dd](https://github.com/sebastian-software/offcourse/commit/73fb4dd6dea779d8b8dc68c2ce7c950479a532b5)) +* sanitize attachment download paths ([#40](https://github.com/sebastian-software/offcourse/issues/40)) ([b92983b](https://github.com/sebastian-software/offcourse/commit/b92983b10527aabf722350a5e686273cb37cf682)) +* stabilize Josh Comeau Vimeo extraction ([4c3c580](https://github.com/sebastian-software/offcourse/commit/4c3c5806ff43a7f33ff60085d8d9ea9b5a59174f)) +* stabilize Piccalilli OTP login ([d3e3ac2](https://github.com/sebastian-software/offcourse/commit/d3e3ac25bfdb04830a8f1e97382fd199b66d2e05)) +* support LearningSuite login URLs ([65110c9](https://github.com/sebastian-software/offcourse/commit/65110c9afc865c4fe797842d9516c6d981cc5d54)) +* update Skool login and course extraction ([87982e1](https://github.com/sebastian-software/offcourse/commit/87982e17a848ef7556b71e163d8f755ff5d7da50)) +* validate pending Skool lessons ([3c2d384](https://github.com/sebastian-software/offcourse/commit/3c2d384134fce72d9ef3f12be58a945421380c56)) +* wait for Josh Comeau hydration assets ([517d671](https://github.com/sebastian-software/offcourse/commit/517d671429ef8d566630cc4e7bceb133b2e96b1e)), closes [#87](https://github.com/sebastian-software/offcourse/issues/87) + ## [1.4.0](https://github.com/sebastian-software/offcourse/compare/v1.3.0...v1.4.0) (2025-12-28) ### Features diff --git a/package.json b/package.json index 653b2a2..35b6a88 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "offcourse", - "version": "1.4.0", + "version": "1.5.0", "description": "Download online courses for offline access – of course!", "type": "module", "bin": { From b0b8e446053759ea4e39376edafeee896c2a2ae5 Mon Sep 17 00:00:00 2001 From: Sebastian Werner Date: Wed, 22 Jul 2026 22:03:48 +0200 Subject: [PATCH 2/2] style: format generated changelog --- CHANGELOG.md | 112 +++++++++++++++++++++++++-------------------------- 1 file changed, 55 insertions(+), 57 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03e8e15..d3ff734 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,68 +2,66 @@ ## [1.5.0](https://github.com/sebastian-software/offcourse/compare/v1.4.0...v1.5.0) (2026-07-22) - ### Features -* add Piccalilli course support ([4657304](https://github.com/sebastian-software/offcourse/commit/4657304f49db88f21d1e1738741a99ec6f993959)) -* support Josh Comeau courses via unified sync ([#39](https://github.com/sebastian-software/offcourse/issues/39)) ([97056bd](https://github.com/sebastian-software/offcourse/commit/97056bd96cbdacf39b9633e747b2d92f69bd109f)) -* unify course sync state across platforms ([#69](https://github.com/sebastian-software/offcourse/issues/69)) ([1530dee](https://github.com/sebastian-software/offcourse/commit/1530dee9fe660dd983a9cabc3f3c75f4970e1bb4)), closes [#21](https://github.com/sebastian-software/offcourse/issues/21) - +- add Piccalilli course support ([4657304](https://github.com/sebastian-software/offcourse/commit/4657304f49db88f21d1e1738741a99ec6f993959)) +- support Josh Comeau courses via unified sync ([#39](https://github.com/sebastian-software/offcourse/issues/39)) ([97056bd](https://github.com/sebastian-software/offcourse/commit/97056bd96cbdacf39b9633e747b2d92f69bd109f)) +- unify course sync state across platforms ([#69](https://github.com/sebastian-software/offcourse/issues/69)) ([1530dee](https://github.com/sebastian-software/offcourse/commit/1530dee9fe660dd983a9cabc3f3c75f4970e1bb4)), closes [#21](https://github.com/sebastian-software/offcourse/issues/21) ### Bug Fixes -* accept duplicate HLS rendition names ([#75](https://github.com/sebastian-software/offcourse/issues/75)) ([c007c8a](https://github.com/sebastian-software/offcourse/commit/c007c8a29f24940e1cd8597ae134e85a6fe9ebef)) -* avoid self-merging Loom video as audio ([0377ca5](https://github.com/sebastian-software/offcourse/commit/0377ca5d5ae9c0f6371b10dde3bdf9cfe01466bd)), closes [#95](https://github.com/sebastian-software/offcourse/issues/95) -* clean up shared state follow-ups ([#98](https://github.com/sebastian-software/offcourse/issues/98)) ([4163a98](https://github.com/sebastian-software/offcourse/commit/4163a98aa92351e17fd01a0ca9992fb647d7ed12)) -* **deps:** update actions/setup-node action to v7 ([c06aca0](https://github.com/sebastian-software/offcourse/commit/c06aca0ccef43956bc3f575650fd0a609eb99956)) -* **deps:** update codecov/codecov-action action to v7 ([8bb0401](https://github.com/sebastian-software/offcourse/commit/8bb0401c85f41b1209261f06498353fdab022b2e)) -* **deps:** update commitlint monorepo to v21.2.1 ([d6bb7a3](https://github.com/sebastian-software/offcourse/commit/d6bb7a3d0fd59ff71c2b3db19e327da3115c28ee)) -* **deps:** update dependency ast-v8-to-istanbul to v1.0.5 ([0ef0c9c](https://github.com/sebastian-software/offcourse/commit/0ef0c9c72db9d35765cff08f6e7a0671bc7fcf78)) -* **deps:** update dependency execa to v10 ([84eed00](https://github.com/sebastian-software/offcourse/commit/84eed009a8e9c4578a9d261895e056f377083b48)) -* **deps:** update dependency lint-staged to v17.1.0 ([#76](https://github.com/sebastian-software/offcourse/issues/76)) ([181a7a9](https://github.com/sebastian-software/offcourse/commit/181a7a9145a1c2b4843a3d6d5f07820a524860d3)) -* **deps:** update dependency node to v24 ([e83c18a](https://github.com/sebastian-software/offcourse/commit/e83c18a50eeba1e57555b6bbd46483d0b54d4a38)) -* **deps:** update pnpm to v11.13.1 ([6b3707e](https://github.com/sebastian-software/offcourse/commit/6b3707e2189ca0635369b19d5d63c3982a78b2b2)) -* **deps:** update pnpm to v11.15.0 ([#77](https://github.com/sebastian-software/offcourse/issues/77)) ([818502d](https://github.com/sebastian-software/offcourse/commit/818502d0e6d3527241910be19b40d75733accedd)) -* download complete LearningSuite videos ([bf650cc](https://github.com/sebastian-software/offcourse/commit/bf650cc7cfa815bdb02a85ecc0e33a010c795593)) -* ensure segment paths are relative in concatSegments function ([#1](https://github.com/sebastian-software/offcourse/issues/1)) ([6dbc09a](https://github.com/sebastian-software/offcourse/commit/6dbc09a849edc196374c05857045a1f1c1f5301d)) -* fail incomplete HLS segment downloads ([#44](https://github.com/sebastian-software/offcourse/issues/44)) ([5855339](https://github.com/sebastian-software/offcourse/commit/585533977c68ad27416fc369e74771223c083230)) -* fall back to GET when HLS HEAD is rejected ([9a14de1](https://github.com/sebastian-software/offcourse/commit/9a14de1e4b5d00358b704ae4b749631fa998f12f)), closes [#96](https://github.com/sebastian-software/offcourse/issues/96) -* format Renovate configuration ([#46](https://github.com/sebastian-software/offcourse/issues/46)) ([d8abb5d](https://github.com/sebastian-software/offcourse/commit/d8abb5d6cd8612017013828850dc6794c8ead8af)) -* handle incomplete Vimeo configs ([1d37011](https://github.com/sebastian-software/offcourse/commit/1d3701193f25435c9df4b04b06a91c1c7c811bf9)) -* handle progressive output stream failures ([#48](https://github.com/sebastian-software/offcourse/issues/48)) ([8cdcd6a](https://github.com/sebastian-software/offcourse/commit/8cdcd6afdc5412f3ed2cffa929b3f421f2e9b135)) -* handle unsupported Skool sync options ([2d25477](https://github.com/sebastian-software/offcourse/commit/2d25477bf233fcdfce29efaefe989033fe2d3891)), closes [#90](https://github.com/sebastian-software/offcourse/issues/90) -* harden course database migrations ([#63](https://github.com/sebastian-software/offcourse/issues/63)) ([05234c4](https://github.com/sebastian-software/offcourse/commit/05234c48c9af49c0640ce2cde25ee060a283b641)) -* harden download failures and timeouts ([a4fc545](https://github.com/sebastian-software/offcourse/commit/a4fc54579f1f24f484046aebb2c6d32548ede352)), closes [#93](https://github.com/sebastian-software/offcourse/issues/93) -* harden downloader HTTP boundaries ([#61](https://github.com/sebastian-software/offcourse/issues/61)) ([a737fdf](https://github.com/sebastian-software/offcourse/commit/a737fdfabb03407a41d8986b656f5ec5fef74bbf)) -* harden LearningSuite module scanning ([9945eef](https://github.com/sebastian-software/offcourse/commit/9945eefbc92414c318f7d55237c9b58451662dcb)), closes [#85](https://github.com/sebastian-software/offcourse/issues/85) -* ignore local worktrees in checks ([580ed71](https://github.com/sebastian-software/offcourse/commit/580ed7184d5ecffe77666780f0b5d5723d1ebe85)) -* improve scraper diagnostics and title cleanup ([#54](https://github.com/sebastian-software/offcourse/issues/54)) ([b0da40b](https://github.com/sebastian-software/offcourse/commit/b0da40baeb3d73370a29c586a8eef74c50b028cf)) -* isolate LearningSuite HLS renditions ([#49](https://github.com/sebastian-software/offcourse/issues/49)) ([8216379](https://github.com/sebastian-software/offcourse/commit/8216379f294ab3055d1eace4d8f416edd157b7a2)) -* keep interactive Josh login on current page ([8bff05b](https://github.com/sebastian-software/offcourse/commit/8bff05bae595a5689685076756d8cbdfde726643)), closes [#89](https://github.com/sebastian-software/offcourse/issues/89) -* **loom:** clean up downloads and capture sessions ([#52](https://github.com/sebastian-software/offcourse/issues/52)) ([0857a08](https://github.com/sebastian-software/offcourse/commit/0857a083bed2bfad9109f635de8e9b18fe11fed9)) -* make CLI shutdown interruptible ([5990f77](https://github.com/sebastian-software/offcourse/commit/5990f77f1a8abe4077fd251de4f005dfe1038d84)) -* normalize Skool URLs before validation ([#50](https://github.com/sebastian-software/offcourse/issues/50)) ([b1b6c6c](https://github.com/sebastian-software/offcourse/commit/b1b6c6c7b70083f2b9a148e09a57b1c256101db5)) -* polish Josh Comeau extraction and downloads ([79e38bf](https://github.com/sebastian-software/offcourse/commit/79e38bfd1f1fb2b29a65887b870da1bb44e36cce)), closes [#97](https://github.com/sebastian-software/offcourse/issues/97) -* preserve LearningSuite modules and lessons ([#51](https://github.com/sebastian-software/offcourse/issues/51)) ([56c0ff0](https://github.com/sebastian-software/offcourse/commit/56c0ff044d0c5fe134e91dc36baaa3f2f1dd21fb)) -* preserve retry errors during shutdown ([300625c](https://github.com/sebastian-software/offcourse/commit/300625cac3034784e7b704fc8f3cc8bb027f2660)), closes [#86](https://github.com/sebastian-software/offcourse/issues/86) -* preserve signed HLS variant queries ([87bb033](https://github.com/sebastian-software/offcourse/commit/87bb0337ca8d6f0b8ecc34985143e51cd193f96d)) -* preserve Vimeo HLS audio and signed URLs ([#53](https://github.com/sebastian-software/offcourse/issues/53)) ([43238db](https://github.com/sebastian-software/offcourse/commit/43238dbe0e175c29e28d48f7af7b0f72f262b377)) -* propagate progressive stream failures ([#43](https://github.com/sebastian-software/offcourse/issues/43)) ([c1b53ba](https://github.com/sebastian-software/offcourse/commit/c1b53bafa6d045a51edf3e5e26ec5583c5dc0d5c)) -* protect stored session credentials ([#41](https://github.com/sebastian-software/offcourse/issues/41)) ([57ed415](https://github.com/sebastian-software/offcourse/commit/57ed415a2b132019a8dbd8a60116ceb6001f403b)) -* publish attachments atomically ([6238a37](https://github.com/sebastian-software/offcourse/commit/6238a376311e3e19df82bcf9d3d3194951c98f12)) -* publish ffmpeg output atomically ([#47](https://github.com/sebastian-software/offcourse/issues/47)) ([484acc2](https://github.com/sebastian-software/offcourse/commit/484acc22e1a647addb31933172156911efff8c22)) -* redact signed download URLs ([#42](https://github.com/sebastian-software/offcourse/issues/42)) ([5cd3248](https://github.com/sebastian-software/offcourse/commit/5cd3248bc8417da94d5dbc7e710302277cac069a)) -* reject unsupported sync options and URLs ([#55](https://github.com/sebastian-software/offcourse/issues/55)) ([b6e2ad9](https://github.com/sebastian-software/offcourse/commit/b6e2ad95b429cb5f3efda13b69b603c0e0e84122)) -* report complete source coverage ([#56](https://github.com/sebastian-software/offcourse/issues/56)) ([077a916](https://github.com/sebastian-software/offcourse/commit/077a916af82c9647bf841f3837d565b429c6363f)) -* report coverage without provider workaround ([#57](https://github.com/sebastian-software/offcourse/issues/57)) ([92cc64b](https://github.com/sebastian-software/offcourse/commit/92cc64b563aa293134510ea0bbeb6068ce49eaa0)) -* resume validated native lessons ([73fb4dd](https://github.com/sebastian-software/offcourse/commit/73fb4dd6dea779d8b8dc68c2ce7c950479a532b5)) -* sanitize attachment download paths ([#40](https://github.com/sebastian-software/offcourse/issues/40)) ([b92983b](https://github.com/sebastian-software/offcourse/commit/b92983b10527aabf722350a5e686273cb37cf682)) -* stabilize Josh Comeau Vimeo extraction ([4c3c580](https://github.com/sebastian-software/offcourse/commit/4c3c5806ff43a7f33ff60085d8d9ea9b5a59174f)) -* stabilize Piccalilli OTP login ([d3e3ac2](https://github.com/sebastian-software/offcourse/commit/d3e3ac25bfdb04830a8f1e97382fd199b66d2e05)) -* support LearningSuite login URLs ([65110c9](https://github.com/sebastian-software/offcourse/commit/65110c9afc865c4fe797842d9516c6d981cc5d54)) -* update Skool login and course extraction ([87982e1](https://github.com/sebastian-software/offcourse/commit/87982e17a848ef7556b71e163d8f755ff5d7da50)) -* validate pending Skool lessons ([3c2d384](https://github.com/sebastian-software/offcourse/commit/3c2d384134fce72d9ef3f12be58a945421380c56)) -* wait for Josh Comeau hydration assets ([517d671](https://github.com/sebastian-software/offcourse/commit/517d671429ef8d566630cc4e7bceb133b2e96b1e)), closes [#87](https://github.com/sebastian-software/offcourse/issues/87) +- accept duplicate HLS rendition names ([#75](https://github.com/sebastian-software/offcourse/issues/75)) ([c007c8a](https://github.com/sebastian-software/offcourse/commit/c007c8a29f24940e1cd8597ae134e85a6fe9ebef)) +- avoid self-merging Loom video as audio ([0377ca5](https://github.com/sebastian-software/offcourse/commit/0377ca5d5ae9c0f6371b10dde3bdf9cfe01466bd)), closes [#95](https://github.com/sebastian-software/offcourse/issues/95) +- clean up shared state follow-ups ([#98](https://github.com/sebastian-software/offcourse/issues/98)) ([4163a98](https://github.com/sebastian-software/offcourse/commit/4163a98aa92351e17fd01a0ca9992fb647d7ed12)) +- **deps:** update actions/setup-node action to v7 ([c06aca0](https://github.com/sebastian-software/offcourse/commit/c06aca0ccef43956bc3f575650fd0a609eb99956)) +- **deps:** update codecov/codecov-action action to v7 ([8bb0401](https://github.com/sebastian-software/offcourse/commit/8bb0401c85f41b1209261f06498353fdab022b2e)) +- **deps:** update commitlint monorepo to v21.2.1 ([d6bb7a3](https://github.com/sebastian-software/offcourse/commit/d6bb7a3d0fd59ff71c2b3db19e327da3115c28ee)) +- **deps:** update dependency ast-v8-to-istanbul to v1.0.5 ([0ef0c9c](https://github.com/sebastian-software/offcourse/commit/0ef0c9c72db9d35765cff08f6e7a0671bc7fcf78)) +- **deps:** update dependency execa to v10 ([84eed00](https://github.com/sebastian-software/offcourse/commit/84eed009a8e9c4578a9d261895e056f377083b48)) +- **deps:** update dependency lint-staged to v17.1.0 ([#76](https://github.com/sebastian-software/offcourse/issues/76)) ([181a7a9](https://github.com/sebastian-software/offcourse/commit/181a7a9145a1c2b4843a3d6d5f07820a524860d3)) +- **deps:** update dependency node to v24 ([e83c18a](https://github.com/sebastian-software/offcourse/commit/e83c18a50eeba1e57555b6bbd46483d0b54d4a38)) +- **deps:** update pnpm to v11.13.1 ([6b3707e](https://github.com/sebastian-software/offcourse/commit/6b3707e2189ca0635369b19d5d63c3982a78b2b2)) +- **deps:** update pnpm to v11.15.0 ([#77](https://github.com/sebastian-software/offcourse/issues/77)) ([818502d](https://github.com/sebastian-software/offcourse/commit/818502d0e6d3527241910be19b40d75733accedd)) +- download complete LearningSuite videos ([bf650cc](https://github.com/sebastian-software/offcourse/commit/bf650cc7cfa815bdb02a85ecc0e33a010c795593)) +- ensure segment paths are relative in concatSegments function ([#1](https://github.com/sebastian-software/offcourse/issues/1)) ([6dbc09a](https://github.com/sebastian-software/offcourse/commit/6dbc09a849edc196374c05857045a1f1c1f5301d)) +- fail incomplete HLS segment downloads ([#44](https://github.com/sebastian-software/offcourse/issues/44)) ([5855339](https://github.com/sebastian-software/offcourse/commit/585533977c68ad27416fc369e74771223c083230)) +- fall back to GET when HLS HEAD is rejected ([9a14de1](https://github.com/sebastian-software/offcourse/commit/9a14de1e4b5d00358b704ae4b749631fa998f12f)), closes [#96](https://github.com/sebastian-software/offcourse/issues/96) +- format Renovate configuration ([#46](https://github.com/sebastian-software/offcourse/issues/46)) ([d8abb5d](https://github.com/sebastian-software/offcourse/commit/d8abb5d6cd8612017013828850dc6794c8ead8af)) +- handle incomplete Vimeo configs ([1d37011](https://github.com/sebastian-software/offcourse/commit/1d3701193f25435c9df4b04b06a91c1c7c811bf9)) +- handle progressive output stream failures ([#48](https://github.com/sebastian-software/offcourse/issues/48)) ([8cdcd6a](https://github.com/sebastian-software/offcourse/commit/8cdcd6afdc5412f3ed2cffa929b3f421f2e9b135)) +- handle unsupported Skool sync options ([2d25477](https://github.com/sebastian-software/offcourse/commit/2d25477bf233fcdfce29efaefe989033fe2d3891)), closes [#90](https://github.com/sebastian-software/offcourse/issues/90) +- harden course database migrations ([#63](https://github.com/sebastian-software/offcourse/issues/63)) ([05234c4](https://github.com/sebastian-software/offcourse/commit/05234c48c9af49c0640ce2cde25ee060a283b641)) +- harden download failures and timeouts ([a4fc545](https://github.com/sebastian-software/offcourse/commit/a4fc54579f1f24f484046aebb2c6d32548ede352)), closes [#93](https://github.com/sebastian-software/offcourse/issues/93) +- harden downloader HTTP boundaries ([#61](https://github.com/sebastian-software/offcourse/issues/61)) ([a737fdf](https://github.com/sebastian-software/offcourse/commit/a737fdfabb03407a41d8986b656f5ec5fef74bbf)) +- harden LearningSuite module scanning ([9945eef](https://github.com/sebastian-software/offcourse/commit/9945eefbc92414c318f7d55237c9b58451662dcb)), closes [#85](https://github.com/sebastian-software/offcourse/issues/85) +- ignore local worktrees in checks ([580ed71](https://github.com/sebastian-software/offcourse/commit/580ed7184d5ecffe77666780f0b5d5723d1ebe85)) +- improve scraper diagnostics and title cleanup ([#54](https://github.com/sebastian-software/offcourse/issues/54)) ([b0da40b](https://github.com/sebastian-software/offcourse/commit/b0da40baeb3d73370a29c586a8eef74c50b028cf)) +- isolate LearningSuite HLS renditions ([#49](https://github.com/sebastian-software/offcourse/issues/49)) ([8216379](https://github.com/sebastian-software/offcourse/commit/8216379f294ab3055d1eace4d8f416edd157b7a2)) +- keep interactive Josh login on current page ([8bff05b](https://github.com/sebastian-software/offcourse/commit/8bff05bae595a5689685076756d8cbdfde726643)), closes [#89](https://github.com/sebastian-software/offcourse/issues/89) +- **loom:** clean up downloads and capture sessions ([#52](https://github.com/sebastian-software/offcourse/issues/52)) ([0857a08](https://github.com/sebastian-software/offcourse/commit/0857a083bed2bfad9109f635de8e9b18fe11fed9)) +- make CLI shutdown interruptible ([5990f77](https://github.com/sebastian-software/offcourse/commit/5990f77f1a8abe4077fd251de4f005dfe1038d84)) +- normalize Skool URLs before validation ([#50](https://github.com/sebastian-software/offcourse/issues/50)) ([b1b6c6c](https://github.com/sebastian-software/offcourse/commit/b1b6c6c7b70083f2b9a148e09a57b1c256101db5)) +- polish Josh Comeau extraction and downloads ([79e38bf](https://github.com/sebastian-software/offcourse/commit/79e38bfd1f1fb2b29a65887b870da1bb44e36cce)), closes [#97](https://github.com/sebastian-software/offcourse/issues/97) +- preserve LearningSuite modules and lessons ([#51](https://github.com/sebastian-software/offcourse/issues/51)) ([56c0ff0](https://github.com/sebastian-software/offcourse/commit/56c0ff044d0c5fe134e91dc36baaa3f2f1dd21fb)) +- preserve retry errors during shutdown ([300625c](https://github.com/sebastian-software/offcourse/commit/300625cac3034784e7b704fc8f3cc8bb027f2660)), closes [#86](https://github.com/sebastian-software/offcourse/issues/86) +- preserve signed HLS variant queries ([87bb033](https://github.com/sebastian-software/offcourse/commit/87bb0337ca8d6f0b8ecc34985143e51cd193f96d)) +- preserve Vimeo HLS audio and signed URLs ([#53](https://github.com/sebastian-software/offcourse/issues/53)) ([43238db](https://github.com/sebastian-software/offcourse/commit/43238dbe0e175c29e28d48f7af7b0f72f262b377)) +- propagate progressive stream failures ([#43](https://github.com/sebastian-software/offcourse/issues/43)) ([c1b53ba](https://github.com/sebastian-software/offcourse/commit/c1b53bafa6d045a51edf3e5e26ec5583c5dc0d5c)) +- protect stored session credentials ([#41](https://github.com/sebastian-software/offcourse/issues/41)) ([57ed415](https://github.com/sebastian-software/offcourse/commit/57ed415a2b132019a8dbd8a60116ceb6001f403b)) +- publish attachments atomically ([6238a37](https://github.com/sebastian-software/offcourse/commit/6238a376311e3e19df82bcf9d3d3194951c98f12)) +- publish ffmpeg output atomically ([#47](https://github.com/sebastian-software/offcourse/issues/47)) ([484acc2](https://github.com/sebastian-software/offcourse/commit/484acc22e1a647addb31933172156911efff8c22)) +- redact signed download URLs ([#42](https://github.com/sebastian-software/offcourse/issues/42)) ([5cd3248](https://github.com/sebastian-software/offcourse/commit/5cd3248bc8417da94d5dbc7e710302277cac069a)) +- reject unsupported sync options and URLs ([#55](https://github.com/sebastian-software/offcourse/issues/55)) ([b6e2ad9](https://github.com/sebastian-software/offcourse/commit/b6e2ad95b429cb5f3efda13b69b603c0e0e84122)) +- report complete source coverage ([#56](https://github.com/sebastian-software/offcourse/issues/56)) ([077a916](https://github.com/sebastian-software/offcourse/commit/077a916af82c9647bf841f3837d565b429c6363f)) +- report coverage without provider workaround ([#57](https://github.com/sebastian-software/offcourse/issues/57)) ([92cc64b](https://github.com/sebastian-software/offcourse/commit/92cc64b563aa293134510ea0bbeb6068ce49eaa0)) +- resume validated native lessons ([73fb4dd](https://github.com/sebastian-software/offcourse/commit/73fb4dd6dea779d8b8dc68c2ce7c950479a532b5)) +- sanitize attachment download paths ([#40](https://github.com/sebastian-software/offcourse/issues/40)) ([b92983b](https://github.com/sebastian-software/offcourse/commit/b92983b10527aabf722350a5e686273cb37cf682)) +- stabilize Josh Comeau Vimeo extraction ([4c3c580](https://github.com/sebastian-software/offcourse/commit/4c3c5806ff43a7f33ff60085d8d9ea9b5a59174f)) +- stabilize Piccalilli OTP login ([d3e3ac2](https://github.com/sebastian-software/offcourse/commit/d3e3ac25bfdb04830a8f1e97382fd199b66d2e05)) +- support LearningSuite login URLs ([65110c9](https://github.com/sebastian-software/offcourse/commit/65110c9afc865c4fe797842d9516c6d981cc5d54)) +- update Skool login and course extraction ([87982e1](https://github.com/sebastian-software/offcourse/commit/87982e17a848ef7556b71e163d8f755ff5d7da50)) +- validate pending Skool lessons ([3c2d384](https://github.com/sebastian-software/offcourse/commit/3c2d384134fce72d9ef3f12be58a945421380c56)) +- wait for Josh Comeau hydration assets ([517d671](https://github.com/sebastian-software/offcourse/commit/517d671429ef8d566630cc4e7bceb133b2e96b1e)), closes [#87](https://github.com/sebastian-software/offcourse/issues/87) ## [1.4.0](https://github.com/sebastian-software/offcourse/compare/v1.3.0...v1.4.0) (2025-12-28)