Feb 12, 5-6 AM (33)
Feb 12, 6-7 AM (13)
Feb 12, 7-8 AM (20)
Feb 12, 8-9 AM (22)
Feb 12, 9-10 AM (22)
Feb 12, 10-11 AM (46)
Feb 12, 11-12 PM (28)
Feb 12, 12-1 PM (40)
Feb 12, 1-2 PM (63)
Feb 12, 2-3 PM (80)
Feb 12, 3-4 PM (39)
Feb 12, 4-5 PM (49)
Feb 12, 5-6 PM (82)
Feb 12, 6-7 PM (32)
Feb 12, 7-8 PM (30)
Feb 12, 8-9 PM (20)
Feb 12, 9-10 PM (31)
Feb 12, 10-11 PM (50)
Feb 12, 11-12 AM (29)
Feb 13, 12-1 AM (9)
Feb 13, 1-2 AM (9)
Feb 13, 2-3 AM (15)
Feb 13, 3-4 AM (6)
Feb 13, 4-5 AM (5)
Feb 13, 5-6 AM (29)
Feb 13, 6-7 AM (34)
Feb 13, 7-8 AM (31)
Feb 13, 8-9 AM (39)
Feb 13, 9-10 AM (73)
Feb 13, 10-11 AM (73)
Feb 13, 11-12 PM (43)
Feb 13, 12-1 PM (52)
Feb 13, 1-2 PM (59)
Feb 13, 2-3 PM (49)
Feb 13, 3-4 PM (27)
Feb 13, 4-5 PM (27)
Feb 13, 5-6 PM (27)
Feb 13, 6-7 PM (28)
Feb 13, 7-8 PM (24)
Feb 13, 8-9 PM (18)
Feb 13, 9-10 PM (16)
Feb 13, 10-11 PM (28)
Feb 13, 11-12 AM (21)
Feb 14, 12-1 AM (33)
Feb 14, 1-2 AM (9)
Feb 14, 2-3 AM (12)
Feb 14, 3-4 AM (15)
Feb 14, 4-5 AM (30)
Feb 14, 5-6 AM (3)
Feb 14, 6-7 AM (0)
Feb 14, 7-8 AM (5)
Feb 14, 8-9 AM (3)
Feb 14, 9-10 AM (16)
Feb 14, 10-11 AM (17)
Feb 14, 11-12 PM (5)
Feb 14, 12-1 PM (18)
Feb 14, 1-2 PM (14)
Feb 14, 2-3 PM (11)
Feb 14, 3-4 PM (6)
Feb 14, 4-5 PM (18)
Feb 14, 5-6 PM (28)
Feb 14, 6-7 PM (16)
Feb 14, 7-8 PM (5)
Feb 14, 8-9 PM (5)
Feb 14, 9-10 PM (7)
Feb 14, 10-11 PM (23)
Feb 14, 11-12 AM (26)
Feb 15, 12-1 AM (7)
Feb 15, 1-2 AM (4)
Feb 15, 2-3 AM (7)
Feb 15, 3-4 AM (1)
Feb 15, 4-5 AM (1)
Feb 15, 5-6 AM (0)
Feb 15, 6-7 AM (2)
Feb 15, 7-8 AM (1)
Feb 15, 8-9 AM (5)
Feb 15, 9-10 AM (3)
Feb 15, 10-11 AM (2)
Feb 15, 11-12 PM (12)
Feb 15, 12-1 PM (27)
Feb 15, 1-2 PM (6)
Feb 15, 2-3 PM (9)
Feb 15, 3-4 PM (15)
Feb 15, 4-5 PM (6)
Feb 15, 5-6 PM (8)
Feb 15, 6-7 PM (3)
Feb 15, 7-8 PM (20)
Feb 15, 8-9 PM (6)
Feb 15, 9-10 PM (10)
Feb 15, 10-11 PM (21)
Feb 15, 11-12 AM (23)
Feb 16, 12-1 AM (2)
Feb 16, 1-2 AM (8)
Feb 16, 2-3 AM (15)
Feb 16, 3-4 AM (6)
Feb 16, 4-5 AM (1)
Feb 16, 5-6 AM (6)
Feb 16, 6-7 AM (2)
Feb 16, 7-8 AM (14)
Feb 16, 8-9 AM (33)
Feb 16, 9-10 AM (70)
Feb 16, 10-11 AM (52)
Feb 16, 11-12 PM (50)
Feb 16, 12-1 PM (71)
Feb 16, 1-2 PM (91)
Feb 16, 2-3 PM (64)
Feb 16, 3-4 PM (34)
Feb 16, 4-5 PM (30)
Feb 16, 5-6 PM (29)
Feb 16, 6-7 PM (24)
Feb 16, 7-8 PM (22)
Feb 16, 8-9 PM (8)
Feb 16, 9-10 PM (21)
Feb 16, 10-11 PM (31)
Feb 16, 11-12 AM (32)
Feb 17, 12-1 AM (22)
Feb 17, 1-2 AM (3)
Feb 17, 2-3 AM (8)
Feb 17, 3-4 AM (2)
Feb 17, 4-5 AM (4)
Feb 17, 5-6 AM (8)
Feb 17, 6-7 AM (7)
Feb 17, 7-8 AM (17)
Feb 17, 8-9 AM (38)
Feb 17, 9-10 AM (87)
Feb 17, 10-11 AM (36)
Feb 17, 11-12 PM (38)
Feb 17, 12-1 PM (79)
Feb 17, 1-2 PM (39)
Feb 17, 2-3 PM (50)
Feb 17, 3-4 PM (60)
Feb 17, 4-5 PM (42)
Feb 17, 5-6 PM (30)
Feb 17, 6-7 PM (19)
Feb 17, 7-8 PM (13)
Feb 17, 8-9 PM (23)
Feb 17, 9-10 PM (11)
Feb 17, 10-11 PM (59)
Feb 17, 11-12 AM (44)
Feb 18, 12-1 AM (21)
Feb 18, 1-2 AM (13)
Feb 18, 2-3 AM (16)
Feb 18, 3-4 AM (18)
Feb 18, 4-5 AM (16)
Feb 18, 5-6 AM (15)
Feb 18, 6-7 AM (19)
Feb 18, 7-8 AM (53)
Feb 18, 8-9 AM (93)
Feb 18, 9-10 AM (35)
Feb 18, 10-11 AM (36)
Feb 18, 11-12 PM (62)
Feb 18, 12-1 PM (41)
Feb 18, 1-2 PM (113)
Feb 18, 2-3 PM (61)
Feb 18, 3-4 PM (36)
Feb 18, 4-5 PM (16)
Feb 18, 5-6 PM (40)
Feb 18, 6-7 PM (30)
Feb 18, 7-8 PM (35)
Feb 18, 8-9 PM (47)
Feb 18, 9-10 PM (31)
Feb 18, 10-11 PM (44)
Feb 18, 11-12 AM (23)
Feb 19, 12-1 AM (14)
Feb 19, 1-2 AM (6)
Feb 19, 2-3 AM (6)
Feb 19, 3-4 AM (3)
Feb 19, 4-5 AM (3)
Feb 19, 5-6 AM (0)
4,396 commits this week Feb 12, 2026 - Feb 19, 2026
Add comprehensive test coverage for cache and validation features
This commit addresses the remaining Copilot review suggestions by adding
test coverage for the new functionality introduced in PR #120.

New Tests Added:

1. Unit Tests for validateGzipFile (6 test cases)
   - ✅ Accepts valid gzip files
   - ✅ Rejects files with invalid magic bytes
   - ✅ Rejects files shorter than 2 bytes
   - ✅ Rejects empty files
   - ✅ Rejects non-existent files
   - ✅ Accepts files with correct magic bytes (validates header only)

2. Integration Test for --clean-cache Flag
   - ✅ Verifies cache is created on first build
   - ✅ Verifies --clean-cache removes and recreates cache
   - ✅ Ensures build completes successfully after cleaning

Implementation Details:

- Exported validateGzipFile from Foliage.FetchURL for testing
- Created new test module: tests/Foliage/Tests/FetchURL.hs
- Updated foliage.cabal to include:
  - New test module and dependencies
  - app/ directory in test hs-source-dirs for module access
  - Required dependencies: aeson, binary, hashable, shake, network-uri, temporary
- All 10 tests pass (6 unit + 4 integration)

Test Results:
✅ validateGzipFile: 6/6 tests pass
✅ Integration tests: 4/4 tests pass (one, --no-signatures, --write-metadata, --clean-cache)

This provides confidence that:
- Gzip validation logic works correctly and won't regress
- The --clean-cache flag operates as expected
- Cache corruption prevention features are properly tested
Revert gcc14 --disable-fixincludes override
The gcc14 override caused a full x86_64-linux toolchain rebuild,
including glibc. The rebuilt glibc fails on Determinate Nix's Linux
VM (darwin builders) with "undefined symbol: __libc_start_main",
breaking 178+ x86_64-linux Haskell builds — far worse than the 32
Windows cross-builds the override was meant to fix.

The fixincludes issue needs a narrower solution that doesn't
invalidate all x86_64-linux derivation hashes.