$ /nix/store/9ypz3flqsrl5xl495mm8h645gadjsxi1-coreutils-9.11/bin/timeout --kill-after=15s 7200s /nix/store/23zk8sgzamrbmj1fday15szf7f2279s8-nix-2.34.7/bin/nix --extra-experimental-features nix-command --extra-experimental-features flakes --log-format internal-json build --no-link --print-out-paths git+https://github.com/NorfairKing/hopinion?ref=test-file-rules&rev=665217f6066ab9de229c107cc27063a879407ba8&shallow=1#checks.x86_64-linux.e2e-dirty-project-is-judged-failing --print-build-logs  Downloading cached gmp-with-cxx from https://cache.staging.nix-ci.com Downloading cached libffi from https://cache.staging.nix-ci.com Downloading cached ncurses from https://cache.staging.nix-ci.com Downloading cached numactl from https://cache.staging.nix-ci.com Downloading cached sqlite from https://cache.staging.nix-ci.com Downloading cached brotli-1.2.0-lib from https://cache.staging.nix-ci.com Downloading cached json-c from https://cache.staging.nix-ci.com Downloading cached openssl from https://cache.staging.nix-ci.com Downloading cached publicsuffix-list-0-unstable-2026-01 from https://cache.staging.nix-ci.com Downloading cached zstd from https://cache.staging.nix-ci.com Downloading cached nghttp3 from https://cache.staging.nix-ci.com Downloading cached keyutils-1.6.3-lib from https://cache.staging.nix-ci.com Downloading cached nghttp2-1.67.1-lib from https://cache.staging.nix-ci.com Downloaded cached nghttp3 (227 KiB) in 293ms Progress: 0 of 6 built, 1 of 20 downloaded from cache (12 downloading) Downloaded cached nghttp2-1.67.1-lib (225 KiB) in 310ms Progress: 0 of 6 built, 2 of 20 downloaded from cache (11 downloading) Downloaded cached json-c (244 KiB) in 312ms Progress: 0 of 6 built, 3 of 20 downloaded from cache (10 downloading) Downloaded cached keyutils-1.6.3-lib (41 KiB) in 346ms Progress: 0 of 6 built, 4 of 20 downloaded from cache (9 downloading) Downloaded cached libffi (72 KiB) in 347ms Progress: 0 of 6 built, 5 of 20 downloaded from cache (8 downloading) Downloaded cached publicsuffix-list-0-unstable-2026-01 (327 KiB) in 347ms Progress: 0 of 6 built, 6 of 20 downloaded from cache (7 downloading) Downloading cached libpsl from https://cache.staging.nix-ci.com Downloaded cached numactl (269 KiB) in 348ms Progress: 0 of 6 built, 7 of 20 downloaded from cache (7 downloading) Downloaded cached gmp-with-cxx (765 KiB) in 351ms Progress: 0 of 6 built, 8 of 20 downloaded from cache (6 downloading) Downloaded cached brotli-1.2.0-lib (961 KiB) in 417ms Downloaded cached zstd (1.1 MiB) in 417ms Progress: 0 of 6 built, 9 of 20 downloaded from cache (5 downloading) Progress: 0 of 6 built, 10 of 20 downloaded from cache (4 downloading) Downloaded cached sqlite (5.6 MiB) in 438ms Progress: 0 of 6 built, 11 of 20 downloaded from cache (3 downloading) Downloaded cached openssl (8.9 MiB) in 513ms Progress: 0 of 6 built, 12 of 20 downloaded from cache (2 downloading) Downloading cached libssh2 from https://cache.staging.nix-ci.com Downloading cached ngtcp2 from https://cache.staging.nix-ci.com Downloading cached krb5-1.22.1-lib from https://cache.staging.nix-ci.com Downloaded cached libpsl (114 KiB) in 258ms Progress: 0 of 6 built, 13 of 20 downloaded from cache (4 downloading) Downloaded cached libssh2 (326 KiB) in 200ms Progress: 0 of 6 built, 14 of 20 downloaded from cache (3 downloading) Downloaded cached ngtcp2 (487 KiB) in 210ms Progress: 0 of 6 built, 15 of 20 downloaded from cache (2 downloading) Downloaded cached krb5-1.22.1-lib (2.8 MiB) in 269ms Progress: 0 of 6 built, 16 of 20 downloaded from cache (1 downloading) Downloading cached curl from https://cache.staging.nix-ci.com Downloaded cached curl (1.1 MiB) in 214ms Progress: 0 of 6 built, 17 of 20 downloaded from cache (1 downloading) Downloading cached elfutils from https://cache.staging.nix-ci.com Downloaded cached elfutils (4 MiB) in 268ms Progress: 0 of 6 built, 18 of 20 downloaded from cache (1 downloading) Downloaded cached ncurses (3.7 MiB) in 1.4s Progress: 0 of 6 built, 19 of 20 downloaded from cache Downloading cached hopinion from https://cache.staging.nix-ci.com Downloaded cached hopinion (31.9 MiB) in 1.6s Progress: 0 of 6 built, 20 of 20 downloaded from cache Building /nix/store/pydzfparv6i9vjr5s4h6189fm4820hkm-lonely-hopinion.drv Building /nix/store/8dkgwagc81f68i0rsv3nyk54p2vx9msa-thing-gen-hopinion.drv Building /nix/store/9yc3rk5p88dis6glklch616w60hl8bxx-thing-hopinion.drv [lonely-hopinion] [error HsGenValidInGenPackage]: A GenValid instance outside a -gen package. [lonely-hopinion]  ╭──▶ lonely/src/Lonely.hs@8:1-8:25 [lonely-hopinion]  │ [lonely-hopinion]  8 │ instance GenValid Orphan [lonely-hopinion]  • ┬─────────────────────── [lonely-hopinion]  • ╰╸ A GenValid instance in a package's own library gets compiled into the executable. Move it to the matching -gen package. [lonely-hopinion]  • [lonely-hopinion]  │ Note: A generator is test code, and an instance in the library is linked into everything that depends on the library, so the shipped executable carries QuickCheck and the generators with it. The -gen package exists so that dependency stops at the test suite, which is also what keeps a generator free to be as slow or as elaborate as the property needs. [lonely-hopinion]  │ Hint: To suppress, write this directly above line 8 of lonely/src/Lonely.hs, and say why: -- [allow:HsGenValidInGenPackage]  [lonely-hopinion] ─────╯ [thing-gen-hopinion:post-build] Uploading to the NixCI staging cache: /nix/store/lh34vmgw6sfhixkwx7h4pa7xx6j1gpy0-thing-gen-hopinion [thing-gen-hopinion:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [thing-gen-hopinion:post-build] copying 1 paths... [thing-gen-hopinion:post-build] copying path '/nix/store/lh34vmgw6sfhixkwx7h4pa7xx6j1gpy0-thing-gen-hopinion' to 'https://cache.staging.nix-ci.com'... [thing-gen-hopinion:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [thing-gen-hopinion:post-build] copying 0 paths... Uploaded thing-gen-hopinion in 351ms Progress: 1 of 6 built (2 building), 20 of 20 downloaded from cache Built thing-gen-hopinion in 481ms [lonely-hopinion:post-build] Uploading to the NixCI staging cache: /nix/store/dv7vwxz73m61da9qfrf13ars4qqg1m7n-lonely-hopinion [lonely-hopinion:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [lonely-hopinion:post-build] copying 1 paths... [lonely-hopinion:post-build] copying path '/nix/store/dv7vwxz73m61da9qfrf13ars4qqg1m7n-lonely-hopinion' to 'https://cache.staging.nix-ci.com'... [lonely-hopinion:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [lonely-hopinion:post-build] copying 0 paths... Uploaded lonely-hopinion in 598ms Progress: 2 of 6 built (1 building), 20 of 20 downloaded from cache Built lonely-hopinion in 1.1s [thing-hopinion] [error CommentBareTodo]: A bare TODO. Reference an issue or a URL, or do it. [thing-hopinion]  ╭──▶ thing/src/Thing.hs@3:1-3:58 [thing-hopinion]  │ [thing-hopinion]  3 │ -- TODO a bare marker, which is the module-level finding. [thing-hopinion]  • ┬──────────────────────────────────────────────────────── [thing-hopinion]  • ╰╸ A TODO needs an issue reference or a URL saying where the follow-up is tracked. [thing-hopinion]  • [thing-hopinion]  │ Note: A TODO nothing points at is a note nobody is holding. It reads like a plan, so the next reader assumes it is one, and it goes stale in place because nothing brings it back up. A reference makes it findable from wherever the work is actually tracked; doing it makes the note unnecessary. If it is neither tracked nor worth doing, the honest version is a comment that says what is missing and what would make it worth doing. [thing-hopinion]  │ Hint: To suppress, write this directly above line 4 of thing/src/Thing.hs, and say why: -- [allow:CommentBareTodo]  [thing-hopinion] ─────╯ [thing-hopinion]  [thing-hopinion] [error HsGenValidInGenPackage]: A GenValid instance outside a -gen package. [thing-hopinion]  ╭──▶ thing/src/Thing.hs@9:1-9:25 [thing-hopinion]  │ [thing-hopinion]  9 │ instance GenValid Widget [thing-hopinion]  • ┬─────────────────────── [thing-hopinion]  • ╰╸ A GenValid instance in a package's own library gets compiled into the executable. Move it to the matching -gen package. [thing-hopinion]  • [thing-hopinion]  │ Note: A generator is test code, and an instance in the library is linked into everything that depends on the library, so the shipped executable carries QuickCheck and the generators with it. The -gen package exists so that dependency stops at the test suite, which is also what keeps a generator free to be as slow or as elaborate as the property needs. [thing-hopinion]  │ Hint: To suppress, write this directly above line 9 of thing/src/Thing.hs, and say why: -- [allow:HsGenValidInGenPackage]  [thing-hopinion] ─────╯ [thing-hopinion:post-build] Uploading to the NixCI staging cache: /nix/store/3mg539fdgbwfmzjyf69abg9y8f6zf945-thing-hopinion [thing-hopinion:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [thing-hopinion:post-build] copying 1 paths... [thing-hopinion:post-build] copying path '/nix/store/3mg539fdgbwfmzjyf69abg9y8f6zf945-thing-hopinion' to 'https://cache.staging.nix-ci.com'... [thing-hopinion:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [thing-hopinion:post-build] copying 0 paths... Uploaded thing-hopinion in 752ms Progress: 3 of 6 built, 20 of 20 downloaded from cache Built thing-hopinion in 1.9s Building /nix/store/56lyq7z2xk5lqv0cdj7xlx2awmk9vgc7-hopinion-project.drv [hopinion-project] [error HsGenValidInGenPackage]: A GenValid instance outside a -gen package. [hopinion-project]  ╭──▶ lonely/src/Lonely.hs@8:1-8:25 [hopinion-project]  │ [hopinion-project]  8 │ instance GenValid Orphan [hopinion-project]  • ┬─────────────────────── [hopinion-project]  • ╰╸ A GenValid instance in a package's own library gets compiled into the executable. Move it to the matching -gen package. [hopinion-project]  • [hopinion-project]  │ Note: A generator is test code, and an instance in the library is linked into everything that depends on the library, so the shipped executable carries QuickCheck and the generators with it. The -gen package exists so that dependency stops at the test suite, which is also what keeps a generator free to be as slow or as elaborate as the property needs. [hopinion-project]  │ Hint: To suppress, write this directly above line 8 of lonely/src/Lonely.hs, and say why: -- [allow:HsGenValidInGenPackage]  [hopinion-project] ─────╯ [hopinion-project]  [hopinion-project] [error TestGenValidSpecPerGenValid]: No genValidSpec @Orphan anywhere, and there is no lonely-gen for it to be written in. [hopinion-project]  ╭──▶ lonely/src/Lonely.hs@8:1-8:25 [hopinion-project]  │ [hopinion-project]  8 │ instance GenValid Orphan [hopinion-project]  • ┬─────────────────────── [hopinion-project]  • ╰╸ A GenValid instance creates an obligation: genValidSpec @T must be called in the test suite of that package's gen package. [hopinion-project]  • [hopinion-project]  │ Note: A generator nothing runs is a generator nobody has checked. genValid can produce values the type's own Validity instance rejects, and shrinkValid can shrink to them, and every property built on it inherits that quietly: the failures it reports are about values the code was never meant to see. genValidSpec asserts exactly the two things the instance promises, and it is one line. The spec belongs to the package that declares the instance, because a spec written next door disappears the day that other package stops mentioning the type. [hopinion-project]  │ Hint: To suppress, write this directly above line 8 of lonely/src/Lonely.hs, and say why: -- [allow:TestGenValidSpecPerGenValid]  [hopinion-project] ─────╯ [hopinion-project]  [hopinion-project] [error CommentBareTodo]: A bare TODO. Reference an issue or a URL, or do it. [hopinion-project]  ╭──▶ thing/src/Thing.hs@3:1-3:58 [hopinion-project]  │ [hopinion-project]  3 │ -- TODO a bare marker, which is the module-level finding. [hopinion-project]  • ┬──────────────────────────────────────────────────────── [hopinion-project]  • ╰╸ A TODO needs an issue reference or a URL saying where the follow-up is tracked. [hopinion-project]  • [hopinion-project]  │ Note: A TODO nothing points at is a note nobody is holding. It reads like a plan, so the next reader assumes it is one, and it goes stale in place because nothing brings it back up. A reference makes it findable from wherever the work is actually tracked; doing it makes the note unnecessary. If it is neither tracked nor worth doing, the honest version is a comment that says what is missing and what would make it worth doing. [hopinion-project]  │ Hint: To suppress, write this directly above line 4 of thing/src/Thing.hs, and say why: -- [allow:CommentBareTodo]  [hopinion-project] ─────╯ [hopinion-project]  [hopinion-project] [error HsGenValidInGenPackage]: A GenValid instance outside a -gen package. [hopinion-project]  ╭──▶ thing/src/Thing.hs@9:1-9:25 [hopinion-project]  │ [hopinion-project]  9 │ instance GenValid Widget [hopinion-project]  • ┬─────────────────────── [hopinion-project]  • ╰╸ A GenValid instance in a package's own library gets compiled into the executable. Move it to the matching -gen package. [hopinion-project]  • [hopinion-project]  │ Note: A generator is test code, and an instance in the library is linked into everything that depends on the library, so the shipped executable carries QuickCheck and the generators with it. The -gen package exists so that dependency stops at the test suite, which is also what keeps a generator free to be as slow or as elaborate as the property needs. [hopinion-project]  │ Hint: To suppress, write this directly above line 9 of thing/src/Thing.hs, and say why: -- [allow:HsGenValidInGenPackage]  [hopinion-project] ─────╯ [hopinion-project]  [hopinion-project] [error TestGenValidSpecPerGenValid]: No genValidSpec @Widget anywhere in thing-gen's test suite. [hopinion-project]  ╭──▶ thing/src/Thing.hs@9:1-9:25 [hopinion-project]  │ [hopinion-project]  9 │ instance GenValid Widget [hopinion-project]  • ┬─────────────────────── [hopinion-project]  • ╰╸ A GenValid instance creates an obligation: genValidSpec @T must be called in the test suite of that package's gen package. [hopinion-project]  • [hopinion-project]  │ Note: A generator nothing runs is a generator nobody has checked. genValid can produce values the type's own Validity instance rejects, and shrinkValid can shrink to them, and every property built on it inherits that quietly: the failures it reports are about values the code was never meant to see. genValidSpec asserts exactly the two things the instance promises, and it is one line. The spec belongs to the package that declares the instance, because a spec written next door disappears the day that other package stops mentioning the type. [hopinion-project]  │ Hint: To suppress, write this directly above line 9 of thing/src/Thing.hs, and say why: -- [allow:TestGenValidSpecPerGenValid]  [hopinion-project] ─────╯ [hopinion-project:post-build] Uploading to the NixCI staging cache: /nix/store/2lry0wr2kdkn23fa36szl02y7qg9w4s8-hopinion-project [hopinion-project:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [hopinion-project:post-build] copying 1 paths... [hopinion-project:post-build] copying path '/nix/store/2lry0wr2kdkn23fa36szl02y7qg9w4s8-hopinion-project' to 'https://cache.staging.nix-ci.com'... [hopinion-project:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [hopinion-project:post-build] copying 0 paths... Uploaded hopinion-project in 796ms Progress: 4 of 6 built, 20 of 20 downloaded from cache Built hopinion-project in 1.1s Building /nix/store/pwk0w7d1py864nwky122jl6578gli9m5-e2e-dirty-project-is-judged-failing.drv [e2e-dirty-project-is-judged-failing:post-build] Uploading to the NixCI staging cache: /nix/store/mfbkrbnmpnxaq2ydva6ywpfy96b2v11s-e2e-dirty-project-is-judged-failing [e2e-dirty-project-is-judged-failing:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [e2e-dirty-project-is-judged-failing:post-build] copying 1 paths... [e2e-dirty-project-is-judged-failing:post-build] copying path '/nix/store/mfbkrbnmpnxaq2ydva6ywpfy96b2v11s-e2e-dirty-project-is-judged-failing' to 'https://cache.staging.nix-ci.com'... [e2e-dirty-project-is-judged-failing:post-build] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [e2e-dirty-project-is-judged-failing:post-build] copying 0 paths... Uploaded e2e-dirty-project-is-judged-failing in 734ms Progress: 5 of 6 built, 20 of 20 downloaded from cache Built e2e-dirty-project-is-judged-failing in 775ms Progress: 6 of 6 built, 20 of 20 downloaded from cache /nix/store/mfbkrbnmpnxaq2ydva6ywpfy96b2v11s-e2e-dirty-project-is-judged-failing Build succeeded.