$ /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://codeberg.org/mtlynch/little-moments?ref=idea-8-operational-tests&rev=69593cc163fd6475c4a8a474ebd637fd73b10a9d&shallow=1#packages.x86_64-linux.go-tests --print-build-logs[m
[1;31m[31;1merror (ignored):[0m SQLite database '[35;1m/var/cache/nix-ci-worker/eval-cache-v6/fb966c2b1d25eba1bd12e70470c800833c5fac4a82cabd2fb9e4efc9b54d9bfc.sqlite[0m' is busy[m
[2m[m
[1;34mBuilding /nix/store/qx53bzmrh9jyv7ivnhyjjgcnnv6h01wv-go-tests-0.0.0.drv[m
[2m[go-tests] [m[1;36mPhase: unpackPhase[m
[2m[go-tests] [munpacking source archive /nix/store/38fw5i62y64jh4q5fjhawdi1bhxw44a2-source
[2m[go-tests] [msource root is source
[2m[go-tests] [m[1;36mPhase: patchPhase[m
[2m[go-tests] [m[1;36mPhase: updateAutotoolsGnuConfigScriptsPhase[m
[2m[go-tests] [m[1;36mPhase: configurePhase[m
[2m[go-tests] [mno configure script, doing nothing
[2m[go-tests] [m[1;36mPhase: buildPhase[m
[2m[go-tests] [mpatching script interpreter paths in ./dev-scripts
[2m[go-tests] [m./dev-scripts/reset-db: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/upload-prod-db: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/upload-to-nixci-cache: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/lint-sql: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/check-go-test-packages: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/download-prod-db: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/build-all-flake-targets: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/run-js-tests: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/check-trailing-whitespace: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/git-hooks/pre-commit: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/render-design-doc: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/check-frontend: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/serve: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/run-e2e-tests: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/build-backend: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/run-go-tests: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/check-trailing-newline: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/run-integration-tests: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/check-go-formatting: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/check-bash: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/populate-db: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/package-binaries: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m./dev-scripts/enable-git-hooks: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/0550j0i8bmzxbcnzrg1g51zigj7y12ih-bash-interactive-5.3p9/bin/bash"
[2m[go-tests] [m+ set -o pipefail
[2m[go-tests] [m+ full_test=
[2m[go-tests] [m+ go_test_flags=("-tags=netgo,osusergo")
[2m[go-tests] [m+ go_test_flags+=("-fullpath")
[2m[go-tests] [m+ readonly COVERAGE_FILE_RAW=.coverage.out
[2m[go-tests] [m+ COVERAGE_FILE_RAW=.coverage.out
[2m[go-tests] [m+ readonly COVERAGE_FILE_HTML=.coverage.html
[2m[go-tests] [m+ COVERAGE_FILE_HTML=.coverage.html
[2m[go-tests] [m+ case "${1:-}" in
[2m[go-tests] [m+ full_test=1
[2m[go-tests] [m+ go_test_flags+=("-v")
[2m[go-tests] [m+ go_test_flags+=("-race")
[2m[go-tests] [m+ go_test_flags+=("--coverprofile=${COVERAGE_FILE_RAW}")
[2m[go-tests] [m+ [[ 1 -gt 1 ]]
[2m[go-tests] [m+ set -u
[2m[go-tests] [m+++ dirname ./dev-scripts/run-go-tests
[2m[go-tests] [m++ cd ./dev-scripts
[2m[go-tests] [m++ pwd
[2m[go-tests] [m+ SCRIPT_DIR=/build/source/dev-scripts
[2m[go-tests] [m+ readonly SCRIPT_DIR
[2m[go-tests] [m+ cd /build/source/dev-scripts/..
[2m[go-tests] [m+ go test -tags=netgo,osusergo -fullpath -v -race --coverprofile=.coverage.out ./...
[2m[go-tests] [m codeberg.org/mtlynch/little-moments/build coverage: 0.0% of statements
[2m[go-tests] [m codeberg.org/mtlynch/little-moments/cmd/app coverage: 0.0% of statements
[2m[go-tests] [m codeberg.org/mtlynch/little-moments/cmd/import-from-tinybeans coverage: 0.0% of statements
[2m[go-tests] [m codeberg.org/mtlynch/little-moments/convert coverage: 0.0% of statements
[2m[go-tests] [m=== RUN TestAboutPageIncludesVersionMetadata
[2m[go-tests] [m2026/08/03 16:23:28 reading DB from file:/TestAboutPageIncludesVersionMetadata_0xc00017a488?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:34 CSP media origin: ""
[2m[go-tests] [m2026/08/03 16:23:34 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestAboutPageIncludesVersionMetadata (6.34s)
[2m[go-tests] [m=== RUN TestAuthServiceRequireAuth
[2m[go-tests] [m=== RUN TestAuthServiceRequireAuth/valid_session_calls_next_handler
[2m[go-tests] [m=== RUN TestAuthServiceRequireAuth/unexpected_session_lookup_error_returns_error
[2m[go-tests] [m2026/08/03 16:23:34 failed to read auth session from context: session backend unavailable
[2m[go-tests] [m=== RUN TestAuthServiceRequireAuth/missing_session_redirects_to_login
[2m[go-tests] [m--- PASS: TestAuthServiceRequireAuth (0.00s)
[2m[go-tests] [m --- PASS: TestAuthServiceRequireAuth/valid_session_calls_next_handler (0.00s)
[2m[go-tests] [m --- PASS: TestAuthServiceRequireAuth/unexpected_session_lookup_error_returns_error (0.00s)
[2m[go-tests] [m --- PASS: TestAuthServiceRequireAuth/missing_session_redirects_to_login (0.00s)
[2m[go-tests] [m=== RUN TestAuthFlow
[2m[go-tests] [m2026/08/03 16:23:34 reading DB from file:/TestAuthFlow_0xc003230fc8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:34 inserting magic login token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m2026/08/03 16:23:34 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:34 login confirm: consumed token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m--- PASS: TestAuthFlow (0.01s)
[2m[go-tests] [m=== RUN TestLoginPostRejectsOpenRedirectNextURL
[2m[go-tests] [m2026/08/03 16:23:34 reading DB from file:/TestLoginPostRejectsOpenRedirectNextURL_0xc003231688?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:34 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestLoginPostRejectsOpenRedirectNextURL (0.00s)
[2m[go-tests] [m=== RUN TestLoginConfirmPost
[2m[go-tests] [m=== RUN TestLoginConfirmPost/missing_token_returns_400
[2m[go-tests] [m2026/08/03 16:23:34 reading DB from file:/TestLoginConfirmPost/missing_token_returns_400_0xc003231b08?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:34 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestLoginConfirmPost/malformed_token_returns_400
[2m[go-tests] [m2026/08/03 16:23:34 reading DB from file:/TestLoginConfirmPost/malformed_token_returns_400_0xc003231d48?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 login confirm: invalid token format: invalid login token: must be 32 alphanumeric characters
[2m[go-tests] [m=== RUN TestLoginConfirmPost/well-formed_token_that's_not_in_store_returns_401
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginConfirmPost/well-formed_token_that%27s_not_in_store_returns_401_0xc003506008?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 inserting magic login token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 login confirm: invalid token attempt
[2m[go-tests] [m=== RUN TestLoginConfirmPost/valid_token_that's_expired_returns_401
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginConfirmPost/valid_token_that%27s_expired_returns_401_0xc003506248?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 inserting magic login token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 login confirm: expired token attempt
[2m[go-tests] [m=== RUN TestLoginConfirmPost/valid_token_that's_already_used_returns_401
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginConfirmPost/valid_token_that%27s_already_used_returns_401_0xc003506488?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 inserting magic login token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 login confirm: already-used token attempt
[2m[go-tests] [m=== RUN TestLoginConfirmPost/used_token_for_signed-in_user_redirects_root
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginConfirmPost/used_token_for_signed-in_user_redirects_root_0xc0035066c8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 inserting magic login token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestLoginConfirmPost/valid_token_with_session_creation_failure_returns_500
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginConfirmPost/valid_token_with_session_creation_failure_returns_500_0xc003b9e008?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 inserting magic login token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 login confirm: consumed token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m2026/08/03 16:23:35 login confirm: failed to confirm login: create auth session: session broken
[2m[go-tests] [m=== RUN TestLoginConfirmPost/valid_token_with_successful_session_creation_redirects_to_stored_next_path
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginConfirmPost/valid_token_with_successful_session_creation_redirects_to_stored_next_path_0xc003b9e248?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 inserting magic login token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 login confirm: consumed token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m--- PASS: TestLoginConfirmPost (0.05s)
[2m[go-tests] [m --- PASS: TestLoginConfirmPost/missing_token_returns_400 (0.00s)
[2m[go-tests] [m --- PASS: TestLoginConfirmPost/malformed_token_returns_400 (0.00s)
[2m[go-tests] [m --- PASS: TestLoginConfirmPost/well-formed_token_that's_not_in_store_returns_401 (0.01s)
[2m[go-tests] [m --- PASS: TestLoginConfirmPost/valid_token_that's_expired_returns_401 (0.01s)
[2m[go-tests] [m --- PASS: TestLoginConfirmPost/valid_token_that's_already_used_returns_401 (0.01s)
[2m[go-tests] [m --- PASS: TestLoginConfirmPost/used_token_for_signed-in_user_redirects_root (0.01s)
[2m[go-tests] [m --- PASS: TestLoginConfirmPost/valid_token_with_session_creation_failure_returns_500 (0.01s)
[2m[go-tests] [m --- PASS: TestLoginConfirmPost/valid_token_with_successful_session_creation_redirects_to_stored_next_path (0.01s)
[2m[go-tests] [m=== RUN TestConfirmLoginPreservesUsedTokenErrorWhenSessionReadFails
[2m[go-tests] [m--- PASS: TestConfirmLoginPreservesUsedTokenErrorWhenSessionReadFails (0.00s)
[2m[go-tests] [m=== RUN TestLoginPostRejectsMalformedFormBody
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRejectsMalformedFormBody_0xc003b9e6c8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestLoginPostRejectsMalformedFormBody (0.01s)
[2m[go-tests] [m=== RUN TestLoginPostRendersCheckEmailPageRegardlessOfRegistration
[2m[go-tests] [m=== RUN TestLoginPostRendersCheckEmailPageRegardlessOfRegistration/registered_email_shows_check-email_page
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRendersCheckEmailPageRegardlessOfRegistration/registered_email_shows_check-email_page_0xc003b9eb48?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 inserting magic login token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m=== RUN TestLoginPostRendersCheckEmailPageRegardlessOfRegistration/unregistered_email_shows_check-email_page
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRendersCheckEmailPageRegardlessOfRegistration/unregistered_email_shows_check-email_page_0xc003b9f208?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 login attempt from unregistered email: unregistered@example.com
[2m[go-tests] [m--- PASS: TestLoginPostRendersCheckEmailPageRegardlessOfRegistration (0.01s)
[2m[go-tests] [m --- PASS: TestLoginPostRendersCheckEmailPageRegardlessOfRegistration/registered_email_shows_check-email_page (0.01s)
[2m[go-tests] [m --- PASS: TestLoginPostRendersCheckEmailPageRegardlessOfRegistration/unregistered_email_shows_check-email_page (0.01s)
[2m[go-tests] [m=== RUN TestLoginPostDoesNotLeakTokenInProdMode
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostDoesNotLeakTokenInProdMode_0xc003b9f8c8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 inserting magic login token for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m--- PASS: TestLoginPostDoesNotLeakTokenInProdMode (0.01s)
[2m[go-tests] [m=== RUN TestLoginPostRejectsInvalidNextPath
[2m[go-tests] [m=== RUN TestLoginPostRejectsInvalidNextPath/protocol-relative_next_path_is_invalid
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRejectsInvalidNextPath/protocol-relative_next_path_is_invalid_0xc0040e8248?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestLoginPostRejectsInvalidNextPath/next_path_without_leading_slash_is_invalid
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRejectsInvalidNextPath/next_path_without_leading_slash_is_invalid_0xc0040e8488?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestLoginPostRejectsInvalidNextPath/malformed_next_path_is_invalid
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRejectsInvalidNextPath/malformed_next_path_is_invalid_0xc0040e86c8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestLoginPostRejectsInvalidNextPath/http_next_path_is_invalid
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRejectsInvalidNextPath/http_next_path_is_invalid_0xc0040e8908?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestLoginPostRejectsInvalidNextPath/https_next_path_is_invalid
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRejectsInvalidNextPath/https_next_path_is_invalid_0xc0040e8b48?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestLoginPostRejectsInvalidNextPath/non-http_absolute_next_path_is_invalid
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRejectsInvalidNextPath/non-http_absolute_next_path_is_invalid_0xc0040e8d88?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestLoginPostRejectsInvalidNextPath (0.03s)
[2m[go-tests] [m --- PASS: TestLoginPostRejectsInvalidNextPath/protocol-relative_next_path_is_invalid (0.01s)
[2m[go-tests] [m --- PASS: TestLoginPostRejectsInvalidNextPath/next_path_without_leading_slash_is_invalid (0.01s)
[2m[go-tests] [m --- PASS: TestLoginPostRejectsInvalidNextPath/malformed_next_path_is_invalid (0.01s)
[2m[go-tests] [m --- PASS: TestLoginPostRejectsInvalidNextPath/http_next_path_is_invalid (0.01s)
[2m[go-tests] [m --- PASS: TestLoginPostRejectsInvalidNextPath/https_next_path_is_invalid (0.01s)
[2m[go-tests] [m --- PASS: TestLoginPostRejectsInvalidNextPath/non-http_absolute_next_path_is_invalid (0.01s)
[2m[go-tests] [m=== RUN TestLoginPostRejectsInvalidEmail
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostRejectsInvalidEmail_0xc0040e8fc8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestLoginPostRejectsInvalidEmail (0.01s)
[2m[go-tests] [m=== RUN TestLoginPostReturnsTooManyRequestsAfterIPv4Limit
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostReturnsTooManyRequestsAfterIPv4Limit_0xc0040e9208?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestLoginPostReturnsTooManyRequestsAfterIPv4Limit (0.01s)
[2m[go-tests] [m=== RUN TestLoginPostDoesNotApplyIPv4LimitToIPv6
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostDoesNotApplyIPv4LimitToIPv6_0xc0040e98c8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestLoginPostDoesNotApplyIPv4LimitToIPv6 (0.01s)
[2m[go-tests] [m=== RUN TestLoginPostReturnsTooManyRequestsWhenRateLimited
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostReturnsTooManyRequestsWhenRateLimited_0xc0048a4008?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestLoginPostReturnsTooManyRequestsWhenRateLimited (0.01s)
[2m[go-tests] [m=== RUN TestLoginPostReturnsErrorWhenTokenCreationFails
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestLoginPostReturnsErrorWhenTokenCreationFails_0xc0048a4248?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:35 failed to create login token: database unavailable
[2m[go-tests] [m--- PASS: TestLoginPostReturnsErrorWhenTokenCreationFails (0.01s)
[2m[go-tests] [m=== RUN TestMediaCaptionGetRequiresOwner
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestMediaCaptionGetRequiresOwner_0xc0048a4488?vfs=memdb
[2m[go-tests] [m=== RUN TestMediaCaptionGetRequiresOwner/owner_can_view_the_caption
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestMediaCaptionGetRequiresOwner/subscriber_is_forbidden_from_viewing_the_caption
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestMediaCaptionGetRequiresOwner (0.01s)
[2m[go-tests] [m --- PASS: TestMediaCaptionGetRequiresOwner/owner_can_view_the_caption (0.00s)
[2m[go-tests] [m --- PASS: TestMediaCaptionGetRequiresOwner/subscriber_is_forbidden_from_viewing_the_caption (0.00s)
[2m[go-tests] [m=== RUN TestMediaCaptionEditGetRequiresOwner
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestMediaCaptionEditGetRequiresOwner_0xc0048a4d88?vfs=memdb
[2m[go-tests] [m=== RUN TestMediaCaptionEditGetRequiresOwner/owner_can_view_the_caption_editor
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestMediaCaptionEditGetRequiresOwner/subscriber_is_forbidden_from_viewing_the_caption_editor
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestMediaCaptionEditGetRequiresOwner (0.01s)
[2m[go-tests] [m --- PASS: TestMediaCaptionEditGetRequiresOwner/owner_can_view_the_caption_editor (0.00s)
[2m[go-tests] [m --- PASS: TestMediaCaptionEditGetRequiresOwner/subscriber_is_forbidden_from_viewing_the_caption_editor (0.00s)
[2m[go-tests] [m=== RUN TestMediaCaptionPutRequiresOwner
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestMediaCaptionPutRequiresOwner_0xc0048a5448?vfs=memdb
[2m[go-tests] [m=== RUN TestMediaCaptionPutRequiresOwner/owner_reaches_the_caption_update_handler
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestMediaCaptionPutRequiresOwner/subscriber_is_forbidden_from_updating_the_caption
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestMediaCaptionPutRequiresOwner (0.01s)
[2m[go-tests] [m --- PASS: TestMediaCaptionPutRequiresOwner/owner_reaches_the_caption_update_handler (0.00s)
[2m[go-tests] [m --- PASS: TestMediaCaptionPutRequiresOwner/subscriber_is_forbidden_from_updating_the_caption (0.00s)
[2m[go-tests] [m=== RUN TestStaticFilesUseCacheControlAndETag
[2m[go-tests] [m--- PASS: TestStaticFilesUseCacheControlAndETag (0.01s)
[2m[go-tests] [m=== RUN TestStaticFilesReturnNotModifiedForMatchingETag
[2m[go-tests] [m--- PASS: TestStaticFilesReturnNotModifiedForMatchingETag (0.00s)
[2m[go-tests] [m=== RUN TestStaticFilesServeAssetRanges
[2m[go-tests] [m--- PASS: TestStaticFilesServeAssetRanges (0.00s)
[2m[go-tests] [m=== RUN TestRelativeTime
[2m[go-tests] [m=== RUN TestRelativeTime/30_seconds_ago_is_just_now
[2m[go-tests] [m=== RUN TestRelativeTime/just_under_2_minutes_is_just_now
[2m[go-tests] [m=== RUN TestRelativeTime/45_minutes_ago
[2m[go-tests] [m=== RUN TestRelativeTime/5_hours_ago
[2m[go-tests] [m=== RUN TestRelativeTime/3_days_ago
[2m[go-tests] [m=== RUN TestRelativeTime/3_weeks_ago
[2m[go-tests] [m=== RUN TestRelativeTime/60_days_ago_is_2_months_ago
[2m[go-tests] [m=== RUN TestRelativeTime/800_days_ago_is_2_years_ago
[2m[go-tests] [m--- PASS: TestRelativeTime (0.00s)
[2m[go-tests] [m --- PASS: TestRelativeTime/30_seconds_ago_is_just_now (0.00s)
[2m[go-tests] [m --- PASS: TestRelativeTime/just_under_2_minutes_is_just_now (0.00s)
[2m[go-tests] [m --- PASS: TestRelativeTime/45_minutes_ago (0.00s)
[2m[go-tests] [m --- PASS: TestRelativeTime/5_hours_ago (0.00s)
[2m[go-tests] [m --- PASS: TestRelativeTime/3_days_ago (0.00s)
[2m[go-tests] [m --- PASS: TestRelativeTime/3_weeks_ago (0.00s)
[2m[go-tests] [m --- PASS: TestRelativeTime/60_days_ago_is_2_months_ago (0.00s)
[2m[go-tests] [m --- PASS: TestRelativeTime/800_days_ago_is_2_years_ago (0.00s)
[2m[go-tests] [m=== RUN TestUploadGetRequiresOwner
[2m[go-tests] [m=== RUN TestUploadGetRequiresOwner/unauthenticated_user_is_redirected_to_login
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestUploadGetRequiresOwner/unauthenticated_user_is_redirected_to_login_0xc004eebb08?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestUploadGetRequiresOwner/subscriber_is_forbidden
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestUploadGetRequiresOwner/subscriber_is_forbidden_0xc004eebd48?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestUploadGetRequiresOwner/owner_sees_the_upload_form
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestUploadGetRequiresOwner/owner_sees_the_upload_form_0xc0050b4008?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadGetRequiresOwner (0.02s)
[2m[go-tests] [m --- PASS: TestUploadGetRequiresOwner/unauthenticated_user_is_redirected_to_login (0.01s)
[2m[go-tests] [m --- PASS: TestUploadGetRequiresOwner/subscriber_is_forbidden (0.01s)
[2m[go-tests] [m --- PASS: TestUploadGetRequiresOwner/owner_sees_the_upload_form (0.01s)
[2m[go-tests] [m=== RUN TestUploadImageCreatesItemAndWritesFiles
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestUploadImageCreatesItemAndWritesFiles_0xc0050b46c8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadImageCreatesItemAndWritesFiles (0.32s)
[2m[go-tests] [m=== RUN TestUploadAnimatedImageCreatesItem
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestUploadAnimatedImageCreatesItem_0xc0050b4008?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadAnimatedImageCreatesItem (0.04s)
[2m[go-tests] [m=== RUN TestUploadAnimatedImageRejectsUnreadableImage
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestUploadAnimatedImageRejectsUnreadableImage_0xc0050b4248?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadAnimatedImageRejectsUnreadableImage (0.01s)
[2m[go-tests] [m=== RUN TestUploadImageRouteRejectsOversizedFile
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestUploadImageRouteRejectsOversizedFile_0xc0050b4488?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadImageRouteRejectsOversizedFile (1.81s)
[2m[go-tests] [m=== RUN TestUploadImageRouteRejectsUnsupportedFile
[2m[go-tests] [m2026/08/03 16:23:37 reading DB from file:/TestUploadImageRouteRejectsUnsupportedFile_0xc0050b4008?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:37 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadImageRouteRejectsUnsupportedFile (0.01s)
[2m[go-tests] [m=== RUN TestUploadVideoRouteRejectsUnsupportedFileBeforeReadingBody
[2m[go-tests] [m2026/08/03 16:23:37 reading DB from file:/TestUploadVideoRouteRejectsUnsupportedFileBeforeReadingBody_0xc0050b4248?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:37 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadVideoRouteRejectsUnsupportedFileBeforeReadingBody (0.01s)
[2m[go-tests] [m=== RUN TestUploadVideoRouteRejectsOversizedFile
[2m[go-tests] [m2026/08/03 16:23:37 reading DB from file:/TestUploadVideoRouteRejectsOversizedFile_0xc00017a488?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:37 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadVideoRouteRejectsOversizedFile (0.00s)
[2m[go-tests] [m=== RUN TestUploadVideoRouteRejectsVideoOverDurationLimit
[2m[go-tests] [m2026/08/03 16:23:37 reading DB from file:/TestUploadVideoRouteRejectsVideoOverDurationLimit_0xc00017a6c8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:37 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadVideoRouteRejectsVideoOverDurationLimit (0.01s)
[2m[go-tests] [m=== RUN TestUploadVideoRouteRejectsZeroDurationVideo
[2m[go-tests] [m2026/08/03 16:23:37 reading DB from file:/TestUploadVideoRouteRejectsZeroDurationVideo_0xc00017a908?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:37 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:37 failed to read video: unreadable video: invalid video duration: must be greater than zero
[2m[go-tests] [m--- PASS: TestUploadVideoRouteRejectsZeroDurationVideo (0.01s)
[2m[go-tests] [m=== RUN TestUploadVideoRouteRejectsInvalidCaption
[2m[go-tests] [m2026/08/03 16:23:37 reading DB from file:/TestUploadVideoRouteRejectsInvalidCaption_0xc00017ab48?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:37 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadVideoRouteRejectsInvalidCaption (0.01s)
[2m[go-tests] [m=== RUN TestUploadVideoRouteCreatesItem
[2m[go-tests] [m2026/08/03 16:23:37 reading DB from file:/TestUploadVideoRouteCreatesItem_0xc00017ad88?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:37 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadVideoRouteCreatesItem (0.01s)
[2m[go-tests] [m=== RUN TestUploadVideoTranscodeErrorCreatesNoItem
[2m[go-tests] [m2026/08/03 16:23:37 reading DB from file:/TestUploadVideoTranscodeErrorCreatesNoItem_0xc00017afc8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:37 cleaning expired auth sessions from store
[2m[go-tests] [m2026/08/03 16:23:37 failed to process video: unexpected EOF
[2m[go-tests] [m--- PASS: TestUploadVideoTranscodeErrorCreatesNoItem (0.01s)
[2m[go-tests] [m=== RUN TestUploadPostRejectsSubscriber
[2m[go-tests] [m2026/08/03 16:23:37 reading DB from file:/TestUploadPostRejectsSubscriber_0xc00017b208?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:37 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestUploadPostRejectsSubscriber (0.01s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 62.2% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/handlers 9.875s coverage: 62.2% of statements
[2m[go-tests] [m=== RUN TestGenerateSquareThumbnail
[2m[go-tests] [m=== RUN TestGenerateSquareThumbnail/landscape_image_produces_square_thumbnail
[2m[go-tests] [m=== RUN TestGenerateSquareThumbnail/portrait_image_produces_square_thumbnail
[2m[go-tests] [m=== RUN TestGenerateSquareThumbnail/square_image_produces_square_thumbnail
[2m[go-tests] [m=== RUN TestGenerateSquareThumbnail/returns_error_when_source_contains_invalid_image_data
[2m[go-tests] [m--- PASS: TestGenerateSquareThumbnail (0.05s)
[2m[go-tests] [m --- PASS: TestGenerateSquareThumbnail/landscape_image_produces_square_thumbnail (0.01s)
[2m[go-tests] [m --- PASS: TestGenerateSquareThumbnail/portrait_image_produces_square_thumbnail (0.01s)
[2m[go-tests] [m --- PASS: TestGenerateSquareThumbnail/square_image_produces_square_thumbnail (0.01s)
[2m[go-tests] [m --- PASS: TestGenerateSquareThumbnail/returns_error_when_source_contains_invalid_image_data (0.00s)
[2m[go-tests] [m=== RUN TestDimensionsReportsImageSize
[2m[go-tests] [m--- PASS: TestDimensionsReportsImageSize (0.05s)
[2m[go-tests] [m=== RUN TestStripMetadataPreservesDimensions
[2m[go-tests] [m--- PASS: TestStripMetadataPreservesDimensions (0.03s)
[2m[go-tests] [m=== RUN TestStripMetadataStripsExif
[2m[go-tests] [m--- PASS: TestStripMetadataStripsExif (0.03s)
[2m[go-tests] [m=== RUN TestResizeToWidth
[2m[go-tests] [m=== RUN TestResizeToWidth/landscape_image_resized_to_target_width
[2m[go-tests] [m=== RUN TestResizeToWidth/portrait_image_resized_to_target_width
[2m[go-tests] [m=== RUN TestResizeToWidth/returns_error_when_source_contains_invalid_image_data
[2m[go-tests] [m--- PASS: TestResizeToWidth (0.03s)
[2m[go-tests] [m --- PASS: TestResizeToWidth/landscape_image_resized_to_target_width (0.01s)
[2m[go-tests] [m --- PASS: TestResizeToWidth/portrait_image_resized_to_target_width (0.01s)
[2m[go-tests] [m --- PASS: TestResizeToWidth/returns_error_when_source_contains_invalid_image_data (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 90.9% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/images 1.217s coverage: 90.9% of statements
[2m[go-tests] [m=== RUN TestImportMedia
[2m[go-tests] [m=== RUN TestImportMedia/copies_image_file_verbatim_to_destination
[2m[go-tests] [m=== RUN TestImportMedia/converts_video_using_injected_converter
[2m[go-tests] [m=== RUN TestImportMedia/returns_error_when_video_converter_fails
[2m[go-tests] [m=== RUN TestImportMedia/converts_animated_GIF_using_injected_converter
[2m[go-tests] [m=== RUN TestImportMedia/returns_error_when_GIF_converter_fails
[2m[go-tests] [m--- PASS: TestImportMedia (0.02s)
[2m[go-tests] [m --- PASS: TestImportMedia/copies_image_file_verbatim_to_destination (0.02s)
[2m[go-tests] [m --- PASS: TestImportMedia/converts_video_using_injected_converter (0.00s)
[2m[go-tests] [m --- PASS: TestImportMedia/returns_error_when_video_converter_fails (0.00s)
[2m[go-tests] [m --- PASS: TestImportMedia/converts_animated_GIF_using_injected_converter (0.00s)
[2m[go-tests] [m --- PASS: TestImportMedia/returns_error_when_GIF_converter_fails (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 100.0% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/importers 1.039s coverage: 100.0% of statements
[2m[go-tests] [m=== RUN TestConvert
[2m[go-tests] [m=== RUN TestConvert/translates_Tinybeans_reactions_into_little_moments_reactions
[2m[go-tests] [m=== RUN TestConvert/fails_on_unsupported_Tinybeans_reactions
[2m[go-tests] [m=== RUN TestConvert/flattens_threaded_comments_without_duplicating_the_root_comment
[2m[go-tests] [m=== RUN TestConvert/skips_comments_and_reactions_from_users_not_in_followers
[2m[go-tests] [m2026/08/03 16:23:28 dropping comment by user 999999 on entry 22222222-2222-4222-8222-222222222222: user is not a follower
[2m[go-tests] [m--- PASS: TestConvert (0.00s)
[2m[go-tests] [m --- PASS: TestConvert/translates_Tinybeans_reactions_into_little_moments_reactions (0.00s)
[2m[go-tests] [m --- PASS: TestConvert/fails_on_unsupported_Tinybeans_reactions (0.00s)
[2m[go-tests] [m --- PASS: TestConvert/flattens_threaded_comments_without_duplicating_the_root_comment (0.00s)
[2m[go-tests] [m --- PASS: TestConvert/skips_comments_and_reactions_from_users_not_in_followers (0.00s)
[2m[go-tests] [m=== RUN TestConverterPreservesMediaDataAndDuplicateFollowerIDs
[2m[go-tests] [m--- PASS: TestConverterPreservesMediaDataAndDuplicateFollowerIDs (0.00s)
[2m[go-tests] [m=== RUN TestConverterRejectsUnknownUploader
[2m[go-tests] [m--- PASS: TestConverterRejectsUnknownUploader (0.00s)
[2m[go-tests] [m=== RUN TestImportWritesMediaAndMetadata
[2m[go-tests] [m2026/08/03 16:23:28 reading DB from file:/TestImportWritesMediaAndMetadata_0xc0002bf208?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 copied 00000000-0000-4000-8000-000000000001-full.jpg
[2m[go-tests] [m2026/08/03 16:23:35 copied 00000000-0000-4000-8000-000000000001-850px.jpg
[2m[go-tests] [m2026/08/03 16:23:35 copied 00000000-0000-4000-8000-000000000001-250px.jpg
[2m[go-tests] [m2026/08/03 16:23:35 copied 00000000-0000-4000-8000-000000000001-150px.jpg
[2m[go-tests] [m--- PASS: TestImportWritesMediaAndMetadata (7.28s)
[2m[go-tests] [m=== RUN TestImportRetainsCompletedEntriesWhenLaterEntryFails
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestImportRetainsCompletedEntriesWhenLaterEntryFails_0xc002471448?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 copied 00000000-0000-4000-8000-000000000001-full.jpg
[2m[go-tests] [m2026/08/03 16:23:36 copied 00000000-0000-4000-8000-000000000001-850px.jpg
[2m[go-tests] [m2026/08/03 16:23:36 copied 00000000-0000-4000-8000-000000000001-250px.jpg
[2m[go-tests] [m2026/08/03 16:23:36 copied 00000000-0000-4000-8000-000000000001-150px.jpg
[2m[go-tests] [m--- PASS: TestImportRetainsCompletedEntriesWhenLaterEntryFails (0.19s)
[2m[go-tests] [m=== RUN TestSourceForEachEntryReadsRealisticExport
[2m[go-tests] [m2026/08/03 16:23:36 warning: entry 44444444-4444-4444-8444-444444444444 comment by "Grampa Simpson" (user 800001) missing from followers
[2m[go-tests] [m2026/08/03 16:23:36 warning: entry 44444444-4444-4444-8444-444444444444 comment by "Marge Simpson" (user 800002) missing from followers
[2m[go-tests] [m2026/08/03 16:23:36 warning: entry 44444444-4444-4444-8444-444444444444 comment by "Patty Bouvier" (user 800003) missing from followers
[2m[go-tests] [m2026/08/03 16:23:36 warning: entry 33333333-3333-4333-8333-333333333333 comment by "Grampa Simpson" (user 800001) missing from followers
[2m[go-tests] [m2026/08/03 16:23:36 warning: entry 11111111-1111-4111-8111-111111111111 comment by "Grampa Simpson" (user 800001) missing from followers
[2m[go-tests] [m--- PASS: TestSourceForEachEntryReadsRealisticExport (0.00s)
[2m[go-tests] [m=== RUN TestSourceReturnsExportErrors
[2m[go-tests] [m=== RUN TestSourceReturnsExportErrors/missing_journal_file
[2m[go-tests] [m=== RUN TestSourceReturnsExportErrors/missing_followers_file
[2m[go-tests] [m=== RUN TestSourceReturnsExportErrors/subdirectory_missing_metadata_file
[2m[go-tests] [m=== RUN TestSourceReturnsExportErrors/missing_media_file
[2m[go-tests] [m=== RUN TestSourceReturnsExportErrors/missing_blobs_field
[2m[go-tests] [m--- PASS: TestSourceReturnsExportErrors (0.00s)
[2m[go-tests] [m --- PASS: TestSourceReturnsExportErrors/missing_journal_file (0.00s)
[2m[go-tests] [m --- PASS: TestSourceReturnsExportErrors/missing_followers_file (0.00s)
[2m[go-tests] [m --- PASS: TestSourceReturnsExportErrors/subdirectory_missing_metadata_file (0.00s)
[2m[go-tests] [m --- PASS: TestSourceReturnsExportErrors/missing_media_file (0.00s)
[2m[go-tests] [m --- PASS: TestSourceReturnsExportErrors/missing_blobs_field (0.00s)
[2m[go-tests] [m=== RUN TestSourceForEachEntryOrdersByCreationThenPublishTime
[2m[go-tests] [m--- PASS: TestSourceForEachEntryOrdersByCreationThenPublishTime (0.00s)
[2m[go-tests] [m=== RUN TestSourceForEachEntryReturnsVisitorError
[2m[go-tests] [m--- PASS: TestSourceForEachEntryReturnsVisitorError (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 82.6% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/importers/tinybeans 8.526s coverage: 82.6% of statements
[2m[go-tests] [m=== RUN TestParseCommentThread
[2m[go-tests] [m--- PASS: TestParseCommentThread (0.00s)
[2m[go-tests] [m=== RUN TestParseFollowers
[2m[go-tests] [m=== RUN TestParseFollowers/FATHER_relationship_is_an_admin
[2m[go-tests] [m=== RUN TestParseFollowers/MOTHER_relationship_is_an_admin
[2m[go-tests] [m=== RUN TestParseFollowers/non-parent_relationship_is_not_an_admin
[2m[go-tests] [m=== RUN TestParseFollowers/emailOptOut=true_means_receivesEmails=false
[2m[go-tests] [m=== RUN TestParseFollowers/all_email_frequencies_NONE_implies_opt-out
[2m[go-tests] [m=== RUN TestParseFollowers/parser_rejects_duplicate_follower_IDs
[2m[go-tests] [m--- PASS: TestParseFollowers (0.00s)
[2m[go-tests] [m --- PASS: TestParseFollowers/FATHER_relationship_is_an_admin (0.00s)
[2m[go-tests] [m --- PASS: TestParseFollowers/MOTHER_relationship_is_an_admin (0.00s)
[2m[go-tests] [m --- PASS: TestParseFollowers/non-parent_relationship_is_not_an_admin (0.00s)
[2m[go-tests] [m --- PASS: TestParseFollowers/emailOptOut=true_means_receivesEmails=false (0.00s)
[2m[go-tests] [m --- PASS: TestParseFollowers/all_email_frequencies_NONE_implies_opt-out (0.00s)
[2m[go-tests] [m --- PASS: TestParseFollowers/parser_rejects_duplicate_follower_IDs (0.00s)
[2m[go-tests] [m=== RUN TestParseJournal
[2m[go-tests] [m=== RUN TestParseJournal/parses_journal_title
[2m[go-tests] [m--- PASS: TestParseJournal (0.00s)
[2m[go-tests] [m --- PASS: TestParseJournal/parses_journal_title (0.00s)
[2m[go-tests] [m=== RUN TestParseEntry
[2m[go-tests] [m=== RUN TestParseEntry/image_entry_with_one_comment_[11111111-1111-4111-8111-111111111111]
[2m[go-tests] [m=== RUN TestParseEntry/video_entry_with_no_comments_[33333333-3333-4333-8333-333333333333]
[2m[go-tests] [m=== RUN TestParseEntry/image_entry_with_multiple_comments_[22222222-2222-4222-8222-222222222222]
[2m[go-tests] [m=== RUN TestParseEntry/video_entry_with_multiple_comments_[44444444-4444-4444-8444-444444444444]
[2m[go-tests] [m=== RUN TestParseEntry/blob_UUID_differs_from_entry_UUID_[55555555-5555-4555-8555-555555555555]
[2m[go-tests] [m=== RUN TestParseEntry/image_entry_with_multiple_emoji_reactions_[66666666-6666-4666-8666-666666666666]
[2m[go-tests] [m--- PASS: TestParseEntry (0.00s)
[2m[go-tests] [m --- PASS: TestParseEntry/image_entry_with_one_comment_[11111111-1111-4111-8111-111111111111] (0.00s)
[2m[go-tests] [m --- PASS: TestParseEntry/video_entry_with_no_comments_[33333333-3333-4333-8333-333333333333] (0.00s)
[2m[go-tests] [m --- PASS: TestParseEntry/image_entry_with_multiple_comments_[22222222-2222-4222-8222-222222222222] (0.00s)
[2m[go-tests] [m --- PASS: TestParseEntry/video_entry_with_multiple_comments_[44444444-4444-4444-8444-444444444444] (0.00s)
[2m[go-tests] [m --- PASS: TestParseEntry/blob_UUID_differs_from_entry_UUID_[55555555-5555-4555-8555-555555555555] (0.00s)
[2m[go-tests] [m --- PASS: TestParseEntry/image_entry_with_multiple_emoji_reactions_[66666666-6666-4666-8666-666666666666] (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 82.5% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/importers/tinybeans/parse 1.039s coverage: 82.5% of statements
[2m[go-tests] [m=== RUN TestNewCommentText
[2m[go-tests] [m=== RUN TestNewCommentText/plain_text_comment_is_valid_[Hello,_world!]
[2m[go-tests] [m=== RUN TestNewCommentText/leading_and_trailing_spaces_are_stripped_[__Hello,_world!__]
[2m[go-tests] [m=== RUN TestNewCommentText/leading_spaces_are_stripped_[___Hello]
[2m[go-tests] [m=== RUN TestNewCommentText/trailing_spaces_are_stripped_[Hello___]
[2m[go-tests] [m=== RUN TestNewCommentText/plain_text_angle_brackets_are_valid_[i_<3_this_image_--->!]
[2m[go-tests] [m=== RUN TestNewCommentText/text_with_whitespace_after_the_opening_angle_bracket_is_valid_[<___script_>]
[2m[go-tests] [m=== RUN TestNewCommentText/image_text_with_whitespace_after_the_opening_angle_bracket_is_valid_[<___img_>]
[2m[go-tests] [m=== RUN TestNewCommentText/comment_with_script_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/comment_with_uppercase_SCRIPT_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/comment_with_mixed-case_Script_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/script_tag_with_attributes_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/script_tag_embedded_in_text_is_rejected_[click_here__thanks]
[2m[go-tests] [m=== RUN TestNewCommentText/script_tag_with_whitespace_before_the_close_bracket_is_rejected_[alert(1)]
[2m[go-tests] [m=== RUN TestNewCommentText/split-looking_script_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/image_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/uppercase_image_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/mixed-case_image_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/self-closing_image_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/image_tag_with_whitespace_before_the_close_bracket_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/split-looking_image_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/empty_string_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCommentText/whitespace-only_string_is_rejected_[___]
[2m[go-tests] [m--- PASS: TestNewCommentText (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/plain_text_comment_is_valid_[Hello,_world!] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/leading_and_trailing_spaces_are_stripped_[__Hello,_world!__] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/leading_spaces_are_stripped_[___Hello] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/trailing_spaces_are_stripped_[Hello___] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/plain_text_angle_brackets_are_valid_[i_<3_this_image_--->!] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/text_with_whitespace_after_the_opening_angle_bracket_is_valid_[<___script_>] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/image_text_with_whitespace_after_the_opening_angle_bracket_is_valid_[<___img_>] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/comment_with_script_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/comment_with_uppercase_SCRIPT_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/comment_with_mixed-case_Script_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/script_tag_with_attributes_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/script_tag_embedded_in_text_is_rejected_[click_here__thanks] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/script_tag_with_whitespace_before_the_close_bracket_is_rejected_[alert(1)] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/split-looking_script_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/uppercase_image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/mixed-case_image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/self-closing_image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/image_tag_with_whitespace_before_the_close_bracket_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/split-looking_image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/empty_string_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCommentText/whitespace-only_string_is_rejected_[___] (0.00s)
[2m[go-tests] [m=== RUN TestNewEmailAddress
[2m[go-tests] [m=== RUN TestNewEmailAddress/plain_email_address_is_valid_[user@example.com]
[2m[go-tests] [m=== RUN TestNewEmailAddress/empty_string_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewEmailAddress/address_without_domain_is_rejected_[notanemail]
[2m[go-tests] [m=== RUN TestNewEmailAddress/display_name_with_angle_brackets_is_rejected_[John_Doe_]
[2m[go-tests] [m=== RUN TestNewEmailAddress/bare_angle_brackets_are_rejected_[]
[2m[go-tests] [m=== RUN TestNewEmailAddress/address_with_no_@_sign_is_rejected_[joe]
[2m[go-tests] [m=== RUN TestNewEmailAddress/address_with_no_local_part_is_rejected_[@example.com]
[2m[go-tests] [m=== RUN TestNewEmailAddress/address_with_empty_domain_label_is_rejected_[joe@.com]
[2m[go-tests] [m=== RUN TestNewEmailAddress/address_with_no_local_part_and_empty_domain_label_is_rejected_[@.com]
[2m[go-tests] [m=== RUN TestNewEmailAddress/address_with_no_TLD_is_rejected_[joe@example]
[2m[go-tests] [m=== RUN TestNewEmailAddress/address_with_no_domain_is_rejected_[joe@]
[2m[go-tests] [m--- PASS: TestNewEmailAddress (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/plain_email_address_is_valid_[user@example.com] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/empty_string_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/address_without_domain_is_rejected_[notanemail] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/display_name_with_angle_brackets_is_rejected_[John_Doe_] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/bare_angle_brackets_are_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/address_with_no_@_sign_is_rejected_[joe] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/address_with_no_local_part_is_rejected_[@example.com] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/address_with_empty_domain_label_is_rejected_[joe@.com] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/address_with_no_local_part_and_empty_domain_label_is_rejected_[@.com] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/address_with_no_TLD_is_rejected_[joe@example] (0.00s)
[2m[go-tests] [m --- PASS: TestNewEmailAddress/address_with_no_domain_is_rejected_[joe@] (0.00s)
[2m[go-tests] [m=== RUN TestEmailIsEmpty
[2m[go-tests] [m=== RUN TestEmailIsEmpty/zero_value_is_empty
[2m[go-tests] [m=== RUN TestEmailIsEmpty/valid_email_is_not_empty
[2m[go-tests] [m--- PASS: TestEmailIsEmpty (0.00s)
[2m[go-tests] [m --- PASS: TestEmailIsEmpty/zero_value_is_empty (0.00s)
[2m[go-tests] [m --- PASS: TestEmailIsEmpty/valid_email_is_not_empty (0.00s)
[2m[go-tests] [m=== RUN TestMediaItemFilenames
[2m[go-tests] [m=== RUN TestMediaItemFilenames/image
[2m[go-tests] [m=== RUN TestMediaItemFilenames/animated-image
[2m[go-tests] [m=== RUN TestMediaItemFilenames/video_has_no_display-size_variant
[2m[go-tests] [m--- PASS: TestMediaItemFilenames (0.00s)
[2m[go-tests] [m --- PASS: TestMediaItemFilenames/image (0.00s)
[2m[go-tests] [m --- PASS: TestMediaItemFilenames/animated-image (0.00s)
[2m[go-tests] [m --- PASS: TestMediaItemFilenames/video_has_no_display-size_variant (0.00s)
[2m[go-tests] [m=== RUN TestMediaItemFilenamesPanicsOnUnknownType
[2m[go-tests] [m--- PASS: TestMediaItemFilenamesPanicsOnUnknownType (0.00s)
[2m[go-tests] [m=== RUN TestNewMediaID
[2m[go-tests] [m=== RUN TestNewMediaID/minimum_valid_ID_is_accepted_[1]
[2m[go-tests] [m=== RUN TestNewMediaID/SQLite's_first_generated_ID_is_accepted_[1]
[2m[go-tests] [m=== RUN TestNewMediaID/zero_is_rejected_[0]
[2m[go-tests] [m--- PASS: TestNewMediaID (0.00s)
[2m[go-tests] [m --- PASS: TestNewMediaID/minimum_valid_ID_is_accepted_[1] (0.00s)
[2m[go-tests] [m --- PASS: TestNewMediaID/SQLite's_first_generated_ID_is_accepted_[1] (0.00s)
[2m[go-tests] [m --- PASS: TestNewMediaID/zero_is_rejected_[0] (0.00s)
[2m[go-tests] [m=== RUN TestNewImageWidth
[2m[go-tests] [m=== RUN TestNewImageWidth/one_pixel_is_accepted_[1]
[2m[go-tests] [m=== RUN TestNewImageWidth/maximum_width_is_accepted_[65535]
[2m[go-tests] [m=== RUN TestNewImageWidth/zero_is_rejected_[0]
[2m[go-tests] [m=== RUN TestNewImageWidth/width_exceeding_the_maximum_is_rejected_[65536]
[2m[go-tests] [m=== RUN TestNewImageWidth/five_million_pixels_is_rejected_[5000000]
[2m[go-tests] [m--- PASS: TestNewImageWidth (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageWidth/one_pixel_is_accepted_[1] (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageWidth/maximum_width_is_accepted_[65535] (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageWidth/zero_is_rejected_[0] (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageWidth/width_exceeding_the_maximum_is_rejected_[65536] (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageWidth/five_million_pixels_is_rejected_[5000000] (0.00s)
[2m[go-tests] [m=== RUN TestNewImageHeight
[2m[go-tests] [m=== RUN TestNewImageHeight/one_pixel_is_accepted_[1]
[2m[go-tests] [m=== RUN TestNewImageHeight/maximum_height_is_accepted_[65535]
[2m[go-tests] [m=== RUN TestNewImageHeight/zero_is_rejected_[0]
[2m[go-tests] [m=== RUN TestNewImageHeight/height_exceeding_the_maximum_is_rejected_[65536]
[2m[go-tests] [m=== RUN TestNewImageHeight/five_million_pixels_is_rejected_[5000000]
[2m[go-tests] [m--- PASS: TestNewImageHeight (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageHeight/one_pixel_is_accepted_[1] (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageHeight/maximum_height_is_accepted_[65535] (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageHeight/zero_is_rejected_[0] (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageHeight/height_exceeding_the_maximum_is_rejected_[65536] (0.00s)
[2m[go-tests] [m --- PASS: TestNewImageHeight/five_million_pixels_is_rejected_[5000000] (0.00s)
[2m[go-tests] [m=== RUN TestNewCaption
[2m[go-tests] [m=== RUN TestNewCaption/plain_text_caption_is_valid_[A_day_at_the_park]
[2m[go-tests] [m=== RUN TestNewCaption/leading_and_trailing_spaces_are_stripped_[__A_day_at_the_park__]
[2m[go-tests] [m=== RUN TestNewCaption/empty_caption_is_valid_[]
[2m[go-tests] [m=== RUN TestNewCaption/whitespace-only_caption_is_stripped_to_empty_[___]
[2m[go-tests] [m=== RUN TestNewCaption/plain_text_angle_brackets_are_valid_[i_<3_this_image_--->!]
[2m[go-tests] [m=== RUN TestNewCaption/text_with_whitespace_after_the_opening_angle_bracket_is_valid_[<___script_>]
[2m[go-tests] [m=== RUN TestNewCaption/image_text_with_whitespace_after_the_opening_angle_bracket_is_valid_[<___img_>]
[2m[go-tests] [m=== RUN TestNewCaption/caption_with_script_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCaption/caption_with_uppercase_SCRIPT_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCaption/caption_with_mixed-case_script_tag_is_rejected_[before__after]
[2m[go-tests] [m=== RUN TestNewCaption/script_tag_with_attributes_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCaption/script_tag_with_whitespace_before_the_close_bracket_is_rejected_[alert(1)]
[2m[go-tests] [m=== RUN TestNewCaption/split-looking_script_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCaption/image_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCaption/uppercase_image_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCaption/mixed-case_image_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCaption/self-closing_image_tag_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCaption/image_tag_with_whitespace_before_the_close_bracket_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewCaption/split-looking_image_tag_is_rejected_[]
[2m[go-tests] [m--- PASS: TestNewCaption (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/plain_text_caption_is_valid_[A_day_at_the_park] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/leading_and_trailing_spaces_are_stripped_[__A_day_at_the_park__] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/empty_caption_is_valid_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/whitespace-only_caption_is_stripped_to_empty_[___] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/plain_text_angle_brackets_are_valid_[i_<3_this_image_--->!] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/text_with_whitespace_after_the_opening_angle_bracket_is_valid_[<___script_>] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/image_text_with_whitespace_after_the_opening_angle_bracket_is_valid_[<___img_>] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/caption_with_script_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/caption_with_uppercase_SCRIPT_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/caption_with_mixed-case_script_tag_is_rejected_[before__after] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/script_tag_with_attributes_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/script_tag_with_whitespace_before_the_close_bracket_is_rejected_[alert(1)] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/split-looking_script_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/uppercase_image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/mixed-case_image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/self-closing_image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/image_tag_with_whitespace_before_the_close_bracket_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewCaption/split-looking_image_tag_is_rejected_[] (0.00s)
[2m[go-tests] [m=== RUN TestNewFilename
[2m[go-tests] [m=== RUN TestNewFilename/filename_with_extension_is_valid_[vacation.jpg]
[2m[go-tests] [m=== RUN TestNewFilename/filename_without_extension_is_valid_[upload]
[2m[go-tests] [m=== RUN TestNewFilename/leading_and_trailing_spaces_are_stripped_[__vacation.jpg__]
[2m[go-tests] [m=== RUN TestNewFilename/empty_filename_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewFilename/whitespace-only_filename_is_rejected_[___]
[2m[go-tests] [m--- PASS: TestNewFilename (0.00s)
[2m[go-tests] [m --- PASS: TestNewFilename/filename_with_extension_is_valid_[vacation.jpg] (0.00s)
[2m[go-tests] [m --- PASS: TestNewFilename/filename_without_extension_is_valid_[upload] (0.00s)
[2m[go-tests] [m --- PASS: TestNewFilename/leading_and_trailing_spaces_are_stripped_[__vacation.jpg__] (0.00s)
[2m[go-tests] [m --- PASS: TestNewFilename/empty_filename_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewFilename/whitespace-only_filename_is_rejected_[___] (0.00s)
[2m[go-tests] [m=== RUN TestNewReactionEmoji
[2m[go-tests] [m=== RUN TestNewReactionEmoji/heart_emoji_is_valid_[โฅ๏ธ]
[2m[go-tests] [m=== RUN TestNewReactionEmoji/laughing_emoji_is_valid_[๐]
[2m[go-tests] [m=== RUN TestNewReactionEmoji/party_popper_emoji_is_valid_[๐]
[2m[go-tests] [m=== RUN TestNewReactionEmoji/shocked_cat_emoji_is_valid_[๐]
[2m[go-tests] [m=== RUN TestNewReactionEmoji/raised_eyebrow_emoji_is_valid_[๐คจ]
[2m[go-tests] [m=== RUN TestNewReactionEmoji/empty_string_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewReactionEmoji/arbitrary_text_is_rejected_[love]
[2m[go-tests] [m=== RUN TestNewReactionEmoji/unlisted_emoji_is_rejected_[๐]
[2m[go-tests] [m--- PASS: TestNewReactionEmoji (0.00s)
[2m[go-tests] [m --- PASS: TestNewReactionEmoji/heart_emoji_is_valid_[โฅ๏ธ] (0.00s)
[2m[go-tests] [m --- PASS: TestNewReactionEmoji/laughing_emoji_is_valid_[๐] (0.00s)
[2m[go-tests] [m --- PASS: TestNewReactionEmoji/party_popper_emoji_is_valid_[๐] (0.00s)
[2m[go-tests] [m --- PASS: TestNewReactionEmoji/shocked_cat_emoji_is_valid_[๐] (0.00s)
[2m[go-tests] [m --- PASS: TestNewReactionEmoji/raised_eyebrow_emoji_is_valid_[๐คจ] (0.00s)
[2m[go-tests] [m --- PASS: TestNewReactionEmoji/empty_string_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewReactionEmoji/arbitrary_text_is_rejected_[love] (0.00s)
[2m[go-tests] [m --- PASS: TestNewReactionEmoji/unlisted_emoji_is_rejected_[๐] (0.00s)
[2m[go-tests] [m=== RUN TestNewRedirectPath
[2m[go-tests] [m=== RUN TestNewRedirectPath/empty_path_defaults_to_root_[]
[2m[go-tests] [m=== RUN TestNewRedirectPath/root-relative_path_is_accepted_[/about]
[2m[go-tests] [m=== RUN TestNewRedirectPath/absolute_path_with_query_is_accepted_[/media?page=2]
[2m[go-tests] [m=== RUN TestNewRedirectPath/login_redirect_with_next_path_is_accepted_[/login?next=%2Fabout]
[2m[go-tests] [m=== RUN TestNewRedirectPath/login_redirect_with_next_query_string_is_accepted_[/login?next=%2Fmedia%3Fpage%3D2]
[2m[go-tests] [m=== RUN TestNewRedirectPath/protocol-relative_URL_is_rejected_[//example.com/evil]
[2m[go-tests] [m=== RUN TestNewRedirectPath/path_without_leading_slash_is_rejected_[browse]
[2m[go-tests] [m=== RUN TestNewRedirectPath/malformed_path_is_rejected_[://example.com/evil]
[2m[go-tests] [m=== RUN TestNewRedirectPath/absolute_http_URL_is_rejected_[http://example.com/evil]
[2m[go-tests] [m=== RUN TestNewRedirectPath/absolute_https_URL_is_rejected_[https://example.com/evil]
[2m[go-tests] [m=== RUN TestNewRedirectPath/non-http_absolute_URL_is_rejected_[ftp://example.com/evil]
[2m[go-tests] [m--- PASS: TestNewRedirectPath (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/empty_path_defaults_to_root_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/root-relative_path_is_accepted_[/about] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/absolute_path_with_query_is_accepted_[/media?page=2] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/login_redirect_with_next_path_is_accepted_[/login?next=%2Fabout] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/login_redirect_with_next_query_string_is_accepted_[/login?next=%2Fmedia%3Fpage%3D2] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/protocol-relative_URL_is_rejected_[//example.com/evil] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/path_without_leading_slash_is_rejected_[browse] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/malformed_path_is_rejected_[://example.com/evil] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/absolute_http_URL_is_rejected_[http://example.com/evil] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/absolute_https_URL_is_rejected_[https://example.com/evil] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRedirectPath/non-http_absolute_URL_is_rejected_[ftp://example.com/evil] (0.00s)
[2m[go-tests] [m=== RUN TestUserIDFromString
[2m[go-tests] [m=== RUN TestUserIDFromString/lowercase_UUIDv4_is_valid_[11111111-1111-4111-8111-111111111111]
[2m[go-tests] [m=== RUN TestUserIDFromString/empty_string_is_invalid_[]
[2m[go-tests] [m=== RUN TestUserIDFromString/non-UUID_string_is_invalid_[not-a-uuid]
[2m[go-tests] [m=== RUN TestUserIDFromString/UUIDv1_is_invalid_[11111111-1111-1111-8111-111111111111]
[2m[go-tests] [m=== RUN TestUserIDFromString/uppercase_UUID_is_invalid_[11111111-1111-4111-8111-AAAAAAAAAAAA]
[2m[go-tests] [m--- PASS: TestUserIDFromString (0.00s)
[2m[go-tests] [m --- PASS: TestUserIDFromString/lowercase_UUIDv4_is_valid_[11111111-1111-4111-8111-111111111111] (0.00s)
[2m[go-tests] [m --- PASS: TestUserIDFromString/empty_string_is_invalid_[] (0.00s)
[2m[go-tests] [m --- PASS: TestUserIDFromString/non-UUID_string_is_invalid_[not-a-uuid] (0.00s)
[2m[go-tests] [m --- PASS: TestUserIDFromString/UUIDv1_is_invalid_[11111111-1111-1111-8111-111111111111] (0.00s)
[2m[go-tests] [m --- PASS: TestUserIDFromString/uppercase_UUID_is_invalid_[11111111-1111-4111-8111-AAAAAAAAAAAA] (0.00s)
[2m[go-tests] [m=== RUN TestNewVideoDuration
[2m[go-tests] [m=== RUN TestNewVideoDuration/one_second_is_valid_[1s]
[2m[go-tests] [m=== RUN TestNewVideoDuration/minimum_duration_is_valid_[1ns]
[2m[go-tests] [m=== RUN TestNewVideoDuration/duration_limit_is_valid_[30m0s]
[2m[go-tests] [m=== RUN TestNewVideoDuration/zero_is_rejected_[0s]
[2m[go-tests] [m=== RUN TestNewVideoDuration/negative_duration_is_rejected_[-1s]
[2m[go-tests] [m=== RUN TestNewVideoDuration/duration_over_limit_is_rejected_[30m0.000000001s]
[2m[go-tests] [m--- PASS: TestNewVideoDuration (0.00s)
[2m[go-tests] [m --- PASS: TestNewVideoDuration/one_second_is_valid_[1s] (0.00s)
[2m[go-tests] [m --- PASS: TestNewVideoDuration/minimum_duration_is_valid_[1ns] (0.00s)
[2m[go-tests] [m --- PASS: TestNewVideoDuration/duration_limit_is_valid_[30m0s] (0.00s)
[2m[go-tests] [m --- PASS: TestNewVideoDuration/zero_is_rejected_[0s] (0.00s)
[2m[go-tests] [m --- PASS: TestNewVideoDuration/negative_duration_is_rejected_[-1s] (0.00s)
[2m[go-tests] [m --- PASS: TestNewVideoDuration/duration_over_limit_is_rejected_[30m0.000000001s] (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 86.7% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/little_moments 1.039s coverage: 86.7% of statements
[2m[go-tests] [m=== RUN TestFromString
[2m[go-tests] [m=== RUN TestFromString/valid_token_with_required_length_is_accepted_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]
[2m[go-tests] [m=== RUN TestFromString/valid_token_with_uppercase_letters_is_accepted_[AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]
[2m[go-tests] [m=== RUN TestFromString/valid_token_with_digits_is_accepted_[11111111111111111111111111111111]
[2m[go-tests] [m=== RUN TestFromString/token_with_ambiguous_characters_Il0O_is_accepted_[Il0Oaaaaaaaaaaaaaaaaaaaaaaaaaaaa]
[2m[go-tests] [m=== RUN TestFromString/empty_string_is_rejected_[]
[2m[go-tests] [m=== RUN TestFromString/token_one_character_too_short_is_rejected_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]
[2m[go-tests] [m=== RUN TestFromString/token_one_character_too_long_is_rejected_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]
[2m[go-tests] [m=== RUN TestFromString/token_containing_a_space_is_rejected_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_]
[2m[go-tests] [m=== RUN TestFromString/token_containing_a_special_character_is_rejected_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!]
[2m[go-tests] [m=== RUN TestFromString/invalid_token_error_does_not_reveal_submitted_token_[sssssssssssssssssssssssssssssss!]
[2m[go-tests] [m--- PASS: TestFromString (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/valid_token_with_required_length_is_accepted_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/valid_token_with_uppercase_letters_is_accepted_[AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA] (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/valid_token_with_digits_is_accepted_[11111111111111111111111111111111] (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/token_with_ambiguous_characters_Il0O_is_accepted_[Il0Oaaaaaaaaaaaaaaaaaaaaaaaaaaaa] (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/empty_string_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/token_one_character_too_short_is_rejected_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/token_one_character_too_long_is_rejected_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/token_containing_a_space_is_rejected_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_] (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/token_containing_a_special_character_is_rejected_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!] (0.00s)
[2m[go-tests] [m --- PASS: TestFromString/invalid_token_error_does_not_reveal_submitted_token_[sssssssssssssssssssssssssssssss!] (0.00s)
[2m[go-tests] [m=== RUN TestGeneratorCreate
[2m[go-tests] [m--- PASS: TestGeneratorCreate (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 66.7% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/little_moments/login_token 1.024s coverage: 66.7% of statements
[2m[go-tests] [m=== RUN TestSendLoginEmail
[2m[go-tests] [m=== RUN TestSendLoginEmail/succeeds_for_registered_user_with_default_redirect_path
[2m[go-tests] [m=== RUN TestSendLoginEmail/succeeds_for_registered_user_with_non-default_redirect_path
[2m[go-tests] [m=== RUN TestSendLoginEmail/returns_ErrUnregisteredEmail_for_unregistered_email
[2m[go-tests] [m=== RUN TestSendLoginEmail/returns_error_on_store_lookup_failure
[2m[go-tests] [m=== RUN TestSendLoginEmail/returns_error_on_token_insert_failure
[2m[go-tests] [m=== RUN TestSendLoginEmail/returns_error_on_email_send_failure
[2m[go-tests] [m--- PASS: TestSendLoginEmail (0.00s)
[2m[go-tests] [m --- PASS: TestSendLoginEmail/succeeds_for_registered_user_with_default_redirect_path (0.00s)
[2m[go-tests] [m --- PASS: TestSendLoginEmail/succeeds_for_registered_user_with_non-default_redirect_path (0.00s)
[2m[go-tests] [m --- PASS: TestSendLoginEmail/returns_ErrUnregisteredEmail_for_unregistered_email (0.00s)
[2m[go-tests] [m --- PASS: TestSendLoginEmail/returns_error_on_store_lookup_failure (0.00s)
[2m[go-tests] [m --- PASS: TestSendLoginEmail/returns_error_on_token_insert_failure (0.00s)
[2m[go-tests] [m --- PASS: TestSendLoginEmail/returns_error_on_email_send_failure (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 100.0% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/magiclogin 1.035s coverage: 100.0% of statements
[2m[go-tests] [m=== RUN TestSenderSend
[2m[go-tests] [m2026/08/03 16:23:28 sent login email for user 11111111-1111-4111-8111-111111111111
[2m[go-tests] [m--- PASS: TestSenderSend (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 77.8% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/magiclogin/loginmail 1.028s coverage: 77.8% of statements
[2m[go-tests] [m=== RUN TestNewHost
[2m[go-tests] [m=== RUN TestNewHost/hostname_is_valid_[smtp.example.com]
[2m[go-tests] [m=== RUN TestNewHost/leading_and_trailing_spaces_are_stripped_[__smtp.example.com__]
[2m[go-tests] [m=== RUN TestNewHost/empty_string_is_rejected_[]
[2m[go-tests] [m=== RUN TestNewHost/whitespace-only_string_is_rejected_[___]
[2m[go-tests] [m--- PASS: TestNewHost (0.00s)
[2m[go-tests] [m --- PASS: TestNewHost/hostname_is_valid_[smtp.example.com] (0.00s)
[2m[go-tests] [m --- PASS: TestNewHost/leading_and_trailing_spaces_are_stripped_[__smtp.example.com__] (0.00s)
[2m[go-tests] [m --- PASS: TestNewHost/empty_string_is_rejected_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewHost/whitespace-only_string_is_rejected_[___] (0.00s)
[2m[go-tests] [m=== RUN TestNewPort
[2m[go-tests] [m=== RUN TestNewPort/standard_SMTP_port_is_valid_[587]
[2m[go-tests] [m=== RUN TestNewPort/lowest_TCP_port_is_valid_[1]
[2m[go-tests] [m=== RUN TestNewPort/highest_TCP_port_is_valid_[65535]
[2m[go-tests] [m=== RUN TestNewPort/zero_is_rejected_[0]
[2m[go-tests] [m=== RUN TestNewPort/negative_port_is_rejected_[-1]
[2m[go-tests] [m=== RUN TestNewPort/port_beyond_TCP_range_is_rejected_[65536]
[2m[go-tests] [m--- PASS: TestNewPort (0.00s)
[2m[go-tests] [m --- PASS: TestNewPort/standard_SMTP_port_is_valid_[587] (0.00s)
[2m[go-tests] [m --- PASS: TestNewPort/lowest_TCP_port_is_valid_[1] (0.00s)
[2m[go-tests] [m --- PASS: TestNewPort/highest_TCP_port_is_valid_[65535] (0.00s)
[2m[go-tests] [m --- PASS: TestNewPort/zero_is_rejected_[0] (0.00s)
[2m[go-tests] [m --- PASS: TestNewPort/negative_port_is_rejected_[-1] (0.00s)
[2m[go-tests] [m --- PASS: TestNewPort/port_beyond_TCP_range_is_rejected_[65536] (0.00s)
[2m[go-tests] [m=== RUN TestNewUsername
[2m[go-tests] [m=== RUN TestNewUsername/username_is_valid_[smtp-user]
[2m[go-tests] [m=== RUN TestNewUsername/surrounding_spaces_are_preserved_[_smtp-user_]
[2m[go-tests] [m=== RUN TestNewUsername/empty_string_is_rejected_[]
[2m[go-tests] [m--- PASS: TestNewUsername (0.00s)
[2m[go-tests] [m --- PASS: TestNewUsername/username_is_valid_[smtp-user] (0.00s)
[2m[go-tests] [m --- PASS: TestNewUsername/surrounding_spaces_are_preserved_[_smtp-user_] (0.00s)
[2m[go-tests] [m --- PASS: TestNewUsername/empty_string_is_rejected_[] (0.00s)
[2m[go-tests] [m=== RUN TestNewPassword
[2m[go-tests] [m=== RUN TestNewPassword/password_is_valid_[secret]
[2m[go-tests] [m=== RUN TestNewPassword/surrounding_spaces_are_preserved_[_secret_]
[2m[go-tests] [m=== RUN TestNewPassword/empty_string_is_rejected_[]
[2m[go-tests] [m--- PASS: TestNewPassword (0.00s)
[2m[go-tests] [m --- PASS: TestNewPassword/password_is_valid_[secret] (0.00s)
[2m[go-tests] [m --- PASS: TestNewPassword/surrounding_spaces_are_preserved_[_secret_] (0.00s)
[2m[go-tests] [m --- PASS: TestNewPassword/empty_string_is_rejected_[] (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 27.4% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/magiclogin/loginmail/smtp 1.029s coverage: 27.4% of statements
[2m[go-tests] [m=== RUN TestWriteConverted
[2m[go-tests] [m--- PASS: TestWriteConverted (0.02s)
[2m[go-tests] [m=== RUN TestWriteConvertedPropagatesConvError
[2m[go-tests] [m--- PASS: TestWriteConvertedPropagatesConvError (0.00s)
[2m[go-tests] [m=== RUN TestNewRelativePath
[2m[go-tests] [m=== RUN TestNewRelativePath/filename_is_valid_[abc123.jpg]
[2m[go-tests] [m=== RUN TestNewRelativePath/path_with_subfolder_is_valid_[imports/abc123.jpg]
[2m[go-tests] [m=== RUN TestNewRelativePath/surrounding_spaces_are_trimmed_[__imports/abc123.jpg__]
[2m[go-tests] [m=== RUN TestNewRelativePath/empty_path_is_invalid_[]
[2m[go-tests] [m=== RUN TestNewRelativePath/whitespace-only_path_is_invalid_[___]
[2m[go-tests] [m=== RUN TestNewRelativePath/trailing_slash_is_invalid_[imports/]
[2m[go-tests] [m=== RUN TestNewRelativePath/leading_slash_is_invalid_[/imports/abc123.jpg]
[2m[go-tests] [m=== RUN TestNewRelativePath/single_parent_directory_traversal_is_invalid_[../abc123.jpg]
[2m[go-tests] [m=== RUN TestNewRelativePath/leading_whitespace_before_traversal_is_invalid_[__../abc123.jpg]
[2m[go-tests] [m=== RUN TestNewRelativePath/nested_parent_directory_traversal_is_invalid_[../../abc123.jpg]
[2m[go-tests] [m=== RUN TestNewRelativePath/subfolder_parent_directory_traversal_is_invalid_[foo/../../abc123.jpg]
[2m[go-tests] [m=== RUN TestNewRelativePath/directory-only_path_is_invalid_[.]
[2m[go-tests] [m--- PASS: TestNewRelativePath (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/filename_is_valid_[abc123.jpg] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/path_with_subfolder_is_valid_[imports/abc123.jpg] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/surrounding_spaces_are_trimmed_[__imports/abc123.jpg__] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/empty_path_is_invalid_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/whitespace-only_path_is_invalid_[___] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/trailing_slash_is_invalid_[imports/] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/leading_slash_is_invalid_[/imports/abc123.jpg] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/single_parent_directory_traversal_is_invalid_[../abc123.jpg] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/leading_whitespace_before_traversal_is_invalid_[__../abc123.jpg] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/nested_parent_directory_traversal_is_invalid_[../../abc123.jpg] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/subfolder_parent_directory_traversal_is_invalid_[foo/../../abc123.jpg] (0.00s)
[2m[go-tests] [m --- PASS: TestNewRelativePath/directory-only_path_is_invalid_[.] (0.00s)
[2m[go-tests] [m=== RUN TestNewSubfolder
[2m[go-tests] [m=== RUN TestNewSubfolder/subfolder_is_valid_[imports]
[2m[go-tests] [m=== RUN TestNewSubfolder/nested_subfolder_is_valid_[media/uploads]
[2m[go-tests] [m=== RUN TestNewSubfolder/surrounding_spaces_are_trimmed_[__media/uploads__]
[2m[go-tests] [m=== RUN TestNewSubfolder/empty_subfolder_is_invalid_[]
[2m[go-tests] [m=== RUN TestNewSubfolder/whitespace-only_subfolder_is_invalid_[___]
[2m[go-tests] [m=== RUN TestNewSubfolder/current_directory_subfolder_is_invalid_[.]
[2m[go-tests] [m=== RUN TestNewSubfolder/current_directory_subfolder_with_slash_is_invalid_[./]
[2m[go-tests] [m=== RUN TestNewSubfolder/leading_slash_is_invalid_[/imports]
[2m[go-tests] [m=== RUN TestNewSubfolder/single_parent_directory_traversal_is_invalid_[../imports]
[2m[go-tests] [m=== RUN TestNewSubfolder/leading_whitespace_before_traversal_is_invalid_[__../imports]
[2m[go-tests] [m=== RUN TestNewSubfolder/nested_parent_directory_traversal_is_invalid_[../../imports]
[2m[go-tests] [m=== RUN TestNewSubfolder/subfolder_parent_directory_traversal_is_invalid_[foo/../../imports]
[2m[go-tests] [m--- PASS: TestNewSubfolder (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/subfolder_is_valid_[imports] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/nested_subfolder_is_valid_[media/uploads] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/surrounding_spaces_are_trimmed_[__media/uploads__] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/empty_subfolder_is_invalid_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/whitespace-only_subfolder_is_invalid_[___] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/current_directory_subfolder_is_invalid_[.] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/current_directory_subfolder_with_slash_is_invalid_[./] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/leading_slash_is_invalid_[/imports] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/single_parent_directory_traversal_is_invalid_[../imports] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/leading_whitespace_before_traversal_is_invalid_[__../imports] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/nested_parent_directory_traversal_is_invalid_[../../imports] (0.00s)
[2m[go-tests] [m --- PASS: TestNewSubfolder/subfolder_parent_directory_traversal_is_invalid_[foo/../../imports] (0.00s)
[2m[go-tests] [m=== RUN TestSubfolderJoin
[2m[go-tests] [m=== RUN TestSubfolderJoin/empty_prefix_returns_child
[2m[go-tests] [m=== RUN TestSubfolderJoin/prefix_joins_with_child
[2m[go-tests] [m=== RUN TestSubfolderJoin/nested_prefix_joins_with_child
[2m[go-tests] [m--- PASS: TestSubfolderJoin (0.00s)
[2m[go-tests] [m --- PASS: TestSubfolderJoin/empty_prefix_returns_child (0.00s)
[2m[go-tests] [m --- PASS: TestSubfolderJoin/prefix_joins_with_child (0.00s)
[2m[go-tests] [m --- PASS: TestSubfolderJoin/nested_prefix_joins_with_child (0.00s)
[2m[go-tests] [m=== RUN TestSubfolderEmpty
[2m[go-tests] [m=== RUN TestSubfolderEmpty/zero_value_is_empty
[2m[go-tests] [m=== RUN TestSubfolderEmpty/non-empty_subfolder_is_not_empty
[2m[go-tests] [m--- PASS: TestSubfolderEmpty (0.00s)
[2m[go-tests] [m --- PASS: TestSubfolderEmpty/zero_value_is_empty (0.00s)
[2m[go-tests] [m --- PASS: TestSubfolderEmpty/non-empty_subfolder_is_not_empty (0.00s)
[2m[go-tests] [m=== RUN TestNewContentType
[2m[go-tests] [m=== RUN TestNewContentType/JPEG_content_type_is_valid_[image/jpeg]
[2m[go-tests] [m=== RUN TestNewContentType/AVIF_content_type_is_valid_[image/avif]
[2m[go-tests] [m=== RUN TestNewContentType/WebM_content_type_is_valid_[video/webm]
[2m[go-tests] [m=== RUN TestNewContentType/surrounding_spaces_are_ignored_[__image/jpeg__]
[2m[go-tests] [m=== RUN TestNewContentType/empty_content_type_is_invalid_[]
[2m[go-tests] [m=== RUN TestNewContentType/PNG_content_type_is_invalid_[image/png]
[2m[go-tests] [m=== RUN TestNewContentType/generic_binary_content_type_is_invalid_[application/octet-stream]
[2m[go-tests] [m=== RUN TestNewContentType/JPEG_with_parameters_is_invalid_[image/jpeg;_charset=utf-8]
[2m[go-tests] [m--- PASS: TestNewContentType (0.00s)
[2m[go-tests] [m --- PASS: TestNewContentType/JPEG_content_type_is_valid_[image/jpeg] (0.00s)
[2m[go-tests] [m --- PASS: TestNewContentType/AVIF_content_type_is_valid_[image/avif] (0.00s)
[2m[go-tests] [m --- PASS: TestNewContentType/WebM_content_type_is_valid_[video/webm] (0.00s)
[2m[go-tests] [m --- PASS: TestNewContentType/surrounding_spaces_are_ignored_[__image/jpeg__] (0.00s)
[2m[go-tests] [m --- PASS: TestNewContentType/empty_content_type_is_invalid_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewContentType/PNG_content_type_is_invalid_[image/png] (0.00s)
[2m[go-tests] [m --- PASS: TestNewContentType/generic_binary_content_type_is_invalid_[application/octet-stream] (0.00s)
[2m[go-tests] [m --- PASS: TestNewContentType/JPEG_with_parameters_is_invalid_[image/jpeg;_charset=utf-8] (0.00s)
[2m[go-tests] [m=== RUN TestNewMediaRootDir
[2m[go-tests] [m=== RUN TestNewMediaRootDir/absolute_path_is_valid_[/srv/media]
[2m[go-tests] [m=== RUN TestNewMediaRootDir/relative_path_is_valid_[data/media]
[2m[go-tests] [m=== RUN TestNewMediaRootDir/surrounding_spaces_are_trimmed_[__data/media__]
[2m[go-tests] [m=== RUN TestNewMediaRootDir/empty_path_is_invalid_[]
[2m[go-tests] [m=== RUN TestNewMediaRootDir/whitespace-only_path_is_invalid_[___]
[2m[go-tests] [m--- PASS: TestNewMediaRootDir (0.00s)
[2m[go-tests] [m --- PASS: TestNewMediaRootDir/absolute_path_is_valid_[/srv/media] (0.00s)
[2m[go-tests] [m --- PASS: TestNewMediaRootDir/relative_path_is_valid_[data/media] (0.00s)
[2m[go-tests] [m --- PASS: TestNewMediaRootDir/surrounding_spaces_are_trimmed_[__data/media__] (0.00s)
[2m[go-tests] [m --- PASS: TestNewMediaRootDir/empty_path_is_invalid_[] (0.00s)
[2m[go-tests] [m --- PASS: TestNewMediaRootDir/whitespace-only_path_is_invalid_[___] (0.00s)
[2m[go-tests] [m=== RUN TestMediaRootDirJoin
[2m[go-tests] [m=== RUN TestMediaRootDirJoin/joins_filename_to_root
[2m[go-tests] [m=== RUN TestMediaRootDirJoin/joins_nested_output_path_to_root
[2m[go-tests] [m--- PASS: TestMediaRootDirJoin (0.00s)
[2m[go-tests] [m --- PASS: TestMediaRootDirJoin/joins_filename_to_root (0.00s)
[2m[go-tests] [m --- PASS: TestMediaRootDirJoin/joins_nested_output_path_to_root (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 79.3% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/mediastore 1.054s coverage: 79.3% of statements
[2m[go-tests] [m codeberg.org/mtlynch/little-moments/random coverage: 0.0% of statements
[2m[go-tests] [m=== RUN TestNewLimiterRejectsZeroLimits
[2m[go-tests] [m=== RUN TestNewLimiterRejectsZeroLimits/rejects_zero_max_attempts_per_email
[2m[go-tests] [m=== RUN TestNewLimiterRejectsZeroLimits/rejects_zero_max_attempts_per_IPv4
[2m[go-tests] [m--- PASS: TestNewLimiterRejectsZeroLimits (0.00s)
[2m[go-tests] [m --- PASS: TestNewLimiterRejectsZeroLimits/rejects_zero_max_attempts_per_email (0.00s)
[2m[go-tests] [m --- PASS: TestNewLimiterRejectsZeroLimits/rejects_zero_max_attempts_per_IPv4 (0.00s)
[2m[go-tests] [m=== RUN TestLimiter
[2m[go-tests] [m=== RUN TestLimiter/new_limiter_allows_first_attempt
[2m[go-tests] [m=== RUN TestLimiter/allows_attempts_after_unrelated_login_volume
[2m[go-tests] [m=== RUN TestLimiter/allows_the_max-th_attempt_for_the_same_email
[2m[go-tests] [m=== RUN TestLimiter/blocks_attempts_after_the_email_limit_is_reached
[2m[go-tests] [m=== RUN TestLimiter/allows_attempts_for_a_different_email
[2m[go-tests] [m=== RUN TestLimiter/allows_two_attempts_from_the_same_IPv4_address
[2m[go-tests] [m=== RUN TestLimiter/blocks_the_third_attempt_from_the_same_IPv4_address
[2m[go-tests] [m=== RUN TestLimiter/allows_attempts_from_a_different_IPv4_address
[2m[go-tests] [m=== RUN TestLimiter/does_not_apply_IPv4_limit_to_IPv6_addresses
[2m[go-tests] [m=== RUN TestLimiter/treats_IPv4-mapped_addresses_as_the_same_IPv4_address
[2m[go-tests] [m=== RUN TestLimiter/allows_attempts_after_the_window_expires
[2m[go-tests] [m--- PASS: TestLimiter (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/new_limiter_allows_first_attempt (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/allows_attempts_after_unrelated_login_volume (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/allows_the_max-th_attempt_for_the_same_email (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/blocks_attempts_after_the_email_limit_is_reached (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/allows_attempts_for_a_different_email (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/allows_two_attempts_from_the_same_IPv4_address (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/blocks_the_third_attempt_from_the_same_IPv4_address (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/allows_attempts_from_a_different_IPv4_address (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/does_not_apply_IPv4_limit_to_IPv6_addresses (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/treats_IPv4-mapped_addresses_as_the_same_IPv4_address (0.00s)
[2m[go-tests] [m --- PASS: TestLimiter/allows_attempts_after_the_window_expires (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 100.0% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/ratelimit 1.023s coverage: 100.0% of statements
[2m[go-tests] [m codeberg.org/mtlynch/little-moments/s3 coverage: 0.0% of statements
[2m[go-tests] [m=== RUN TestReadEnv
[2m[go-tests] [m=== RUN TestReadEnv/all_fields
[2m[go-tests] [m=== RUN TestReadEnv/optional_fields_omitted
[2m[go-tests] [m=== RUN TestReadEnv/values_are_trimmed
[2m[go-tests] [m=== RUN TestReadEnv/required_field_omitted
[2m[go-tests] [m=== RUN TestReadEnv/empty_subfolder_is_valid_because_subfolder_is_optional
[2m[go-tests] [m--- PASS: TestReadEnv (0.00s)
[2m[go-tests] [m --- PASS: TestReadEnv/all_fields (0.00s)
[2m[go-tests] [m --- PASS: TestReadEnv/optional_fields_omitted (0.00s)
[2m[go-tests] [m --- PASS: TestReadEnv/values_are_trimmed (0.00s)
[2m[go-tests] [m --- PASS: TestReadEnv/required_field_omitted (0.00s)
[2m[go-tests] [m --- PASS: TestReadEnv/empty_subfolder_is_valid_because_subfolder_is_optional (0.00s)
[2m[go-tests] [m=== RUN TestReadServingBaseURL
[2m[go-tests] [m=== RUN TestReadServingBaseURL/value_is_set
[2m[go-tests] [m=== RUN TestReadServingBaseURL/value_is_trimmed
[2m[go-tests] [m=== RUN TestReadServingBaseURL/required_field_omitted
[2m[go-tests] [m--- PASS: TestReadServingBaseURL (0.00s)
[2m[go-tests] [m --- PASS: TestReadServingBaseURL/value_is_set (0.00s)
[2m[go-tests] [m --- PASS: TestReadServingBaseURL/value_is_trimmed (0.00s)
[2m[go-tests] [m --- PASS: TestReadServingBaseURL/required_field_omitted (0.00s)
[2m[go-tests] [m=== RUN TestMediaBaseURL
[2m[go-tests] [m=== RUN TestMediaBaseURL/uses_serving_base_URL
[2m[go-tests] [m=== RUN TestMediaBaseURL/uses_serving_base_URL_with_subfolder
[2m[go-tests] [m--- PASS: TestMediaBaseURL (0.00s)
[2m[go-tests] [m --- PASS: TestMediaBaseURL/uses_serving_base_URL (0.00s)
[2m[go-tests] [m --- PASS: TestMediaBaseURL/uses_serving_base_URL_with_subfolder (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 84.4% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/s3config 1.021s coverage: 84.4% of statements
[2m[go-tests] [m? codeberg.org/mtlynch/little-moments/store [no test files]
[2m[go-tests] [m=== RUN TestAuthSessionLifecycle
[2m[go-tests] [m2026/08/03 16:23:28 reading DB from file:/TestAuthSessionLifecycle_0xc0001b4248?vfs=memdb
[2m[go-tests] [m--- PASS: TestAuthSessionLifecycle (7.11s)
[2m[go-tests] [m=== RUN TestReadSessionReturnsNoSessionForExpiredSession
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestReadSessionReturnsNoSessionForExpiredSession_0xc0039add48?vfs=memdb
[2m[go-tests] [m--- PASS: TestReadSessionReturnsNoSessionForExpiredSession (0.00s)
[2m[go-tests] [m=== RUN TestDeleteExpiredSessions
[2m[go-tests] [m=== RUN TestDeleteExpiredSessions/cleanup_deletes_a_session_that_expired_before_now
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestDeleteExpiredSessions/cleanup_deletes_a_session_that_expired_before_now_0xc003c1e248?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestDeleteExpiredSessions/cleanup_deletes_a_session_that_expires_at_now
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestDeleteExpiredSessions/cleanup_deletes_a_session_that_expires_at_now_0xc003c1e488?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m=== RUN TestDeleteExpiredSessions/cleanup_preserves_a_session_that_expires_after_now
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestDeleteExpiredSessions/cleanup_preserves_a_session_that_expires_after_now_0xc003c1e6c8?vfs=memdb
[2m[go-tests] [m2026/08/03 16:23:35 cleaning expired auth sessions from store
[2m[go-tests] [m--- PASS: TestDeleteExpiredSessions (0.01s)
[2m[go-tests] [m --- PASS: TestDeleteExpiredSessions/cleanup_deletes_a_session_that_expired_before_now (0.00s)
[2m[go-tests] [m --- PASS: TestDeleteExpiredSessions/cleanup_deletes_a_session_that_expires_at_now (0.00s)
[2m[go-tests] [m --- PASS: TestDeleteExpiredSessions/cleanup_preserves_a_session_that_expires_after_now (0.00s)
[2m[go-tests] [m=== RUN TestReadUserByEmail
[2m[go-tests] [m=== RUN TestReadUserByEmail/returns_a_non-admin_user_with_all_fields
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestReadUserByEmail/returns_a_non-admin_user_with_all_fields_0xc003c1eb48?vfs=memdb
[2m[go-tests] [m=== RUN TestReadUserByEmail/returns_an_admin_user
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestReadUserByEmail/returns_an_admin_user_0xc003c1ed88?vfs=memdb
[2m[go-tests] [m=== RUN TestReadUserByEmail/returns_ErrUserNotFound_for_unknown_email
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestReadUserByEmail/returns_ErrUserNotFound_for_unknown_email_0xc003c1efc8?vfs=memdb
[2m[go-tests] [m--- PASS: TestReadUserByEmail (0.01s)
[2m[go-tests] [m --- PASS: TestReadUserByEmail/returns_a_non-admin_user_with_all_fields (0.00s)
[2m[go-tests] [m --- PASS: TestReadUserByEmail/returns_an_admin_user (0.00s)
[2m[go-tests] [m --- PASS: TestReadUserByEmail/returns_ErrUserNotFound_for_unknown_email (0.00s)
[2m[go-tests] [m=== RUN TestInsertDuplicateUserFails
[2m[go-tests] [m2026/08/03 16:23:35 reading DB from file:/TestInsertDuplicateUserFails_0xc003c1f208?vfs=memdb
[2m[go-tests] [m--- PASS: TestInsertDuplicateUserFails (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 23.9% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/store/sqlite 8.171s coverage: 23.9% of statements
[2m[go-tests] [m codeberg.org/mtlynch/little-moments/store/test_sqlite coverage: 0.0% of statements
[2m[go-tests] [m=== RUN TestNewProcessableImageRejectsPixelOverflowDimensions
[2m[go-tests] [m--- PASS: TestNewProcessableImageRejectsPixelOverflowDimensions (0.00s)
[2m[go-tests] [m=== RUN TestNewProcessableImageAcceptsSmallImage
[2m[go-tests] [m--- PASS: TestNewProcessableImageAcceptsSmallImage (0.00s)
[2m[go-tests] [m=== RUN TestNewProcessableImageRejectsUnreadableGIF
[2m[go-tests] [m--- PASS: TestNewProcessableImageRejectsUnreadableGIF (0.00s)
[2m[go-tests] [m=== RUN TestNewProcessableImageRejectsPixelOverflowGIFDimensions
[2m[go-tests] [m--- PASS: TestNewProcessableImageRejectsPixelOverflowGIFDimensions (0.00s)
[2m[go-tests] [m=== RUN TestNewProcessableImageAcceptsSmallGIF
[2m[go-tests] [m--- PASS: TestNewProcessableImageAcceptsSmallGIF (0.00s)
[2m[go-tests] [m=== RUN TestNewProcessableVideo
[2m[go-tests] [m=== RUN TestNewProcessableVideo/duration_over_limit_is_invalid
[2m[go-tests] [m=== RUN TestNewProcessableVideo/zero_duration_is_invalid
[2m[go-tests] [m=== RUN TestNewProcessableVideo/duration_at_limit_is_valid
[2m[go-tests] [m=== RUN TestNewProcessableVideo/unreadable_video_is_invalid
[2m[go-tests] [m--- PASS: TestNewProcessableVideo (0.00s)
[2m[go-tests] [m --- PASS: TestNewProcessableVideo/duration_over_limit_is_invalid (0.00s)
[2m[go-tests] [m --- PASS: TestNewProcessableVideo/zero_duration_is_invalid (0.00s)
[2m[go-tests] [m --- PASS: TestNewProcessableVideo/duration_at_limit_is_valid (0.00s)
[2m[go-tests] [m --- PASS: TestNewProcessableVideo/unreadable_video_is_invalid (0.00s)
[2m[go-tests] [m=== RUN TestNewProcessableVideoDerivesDurationFromPath
[2m[go-tests] [m--- PASS: TestNewProcessableVideoDerivesDurationFromPath (0.00s)
[2m[go-tests] [m=== RUN TestNewProcessableVideoStoresUploadPathAndDuration
[2m[go-tests] [m--- PASS: TestNewProcessableVideoStoresUploadPathAndDuration (0.00s)
[2m[go-tests] [mPASS
[2m[go-tests] [mcoverage: 33.3% of statements
[2m[go-tests] [mok codeberg.org/mtlynch/little-moments/uploads 1.018s coverage: 33.3% of statements
[2m[go-tests] [m+ [[ -n 1 ]]
[2m[go-tests] [m+ go tool cover -html .coverage.out -o .coverage.html
[2m[go-tests] [m+ go vet ./...
[2m[go-tests] [m+ go_package_dirs=()
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m++ go list -f '{{.Dir}}' ./...
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ go_package_dirs+=("${go_package_dir}")
[2m[go-tests] [m+ IFS=
[2m[go-tests] [m+ read -r go_package_dir
[2m[go-tests] [m+ readonly go_package_dirs
[2m[go-tests] [m++ go env GOBIN
[2m[go-tests] [m+ GCI_PATH=/build/home/go/bin/gci
[2m[go-tests] [m+ readonly GCI_PATH
[2m[go-tests] [m+ readonly GCI_VERSION=v0.14.0
[2m[go-tests] [m+ GCI_VERSION=v0.14.0
[2m[go-tests] [m+ [[ -f /build/home/go/bin/gci ]]
[2m[go-tests] [m++ /build/home/go/bin/gci --version
[2m[go-tests] [m+ gci_version_output='gci version 0.14.0'
[2m[go-tests] [m+ [[ gci version 0.14.0 != gci version 0\.14\.0 ]]
[2m[go-tests] [m+ gci_sections=("--section=standard" "--section=default" "--section=localmodule")
[2m[go-tests] [m+ readonly gci_sections
[2m[go-tests] [m++ /build/home/go/bin/gci list --skip-generated --skip-vendor --section=standard --section=default --section=localmodule /build/source/build /build/source/cmd/app /build/source/cmd/import-from-tinybeans /build/source/convert /build/source/handlers /build/source/images /build/source/importers /build/source/importers/tinybeans /build/source/importers/tinybeans/parse /build/source/little_moments /build/source/little_moments/login_token /build/source/magiclogin /build/source/magiclogin/loginmail /build/source/magiclogin/loginmail/smtp /build/source/mediastore /build/source/random /build/source/ratelimit /build/source/s3 /build/source/s3config /build/source/store /build/source/store/sqlite /build/source/store/test_sqlite /build/source/uploads
[2m[go-tests] [m+ gci_output=
[2m[go-tests] [m+ [[ -n '' ]]
[2m[go-tests] [m++ go env GOBIN
[2m[go-tests] [m+ GOCRITIC_PATH=/build/home/go/bin/go-critic
[2m[go-tests] [m+ readonly GOCRITIC_PATH
[2m[go-tests] [m+ readonly GOCRITIC_VERSION=v0.14.3
[2m[go-tests] [m+ GOCRITIC_VERSION=v0.14.3
[2m[go-tests] [m+ [[ ! -f /build/home/go/bin/go-critic ]]
[2m[go-tests] [m+ /build/home/go/bin/go-critic check ./...
[2m[go-tests] [m+ /build/home/go/bin/go-critic check -enable=returnAfterHttpError ./...
[2m[go-tests] [m++ go env GOBIN
[2m[go-tests] [m+ STATICCHECK_PATH=/build/home/go/bin/staticcheck
[2m[go-tests] [m+ readonly STATICCHECK_PATH
[2m[go-tests] [m+ readonly STATICCHECK_VERSION=v0.6.1
[2m[go-tests] [m+ STATICCHECK_VERSION=v0.6.1
[2m[go-tests] [m+ [[ ! -f /build/home/go/bin/staticcheck ]]
[2m[go-tests] [m+ /build/home/go/bin/staticcheck ./...
[2m[go-tests] [m++ go env GOBIN
[2m[go-tests] [m+ ERRCHECK_PATH=/build/home/go/bin/errcheck
[2m[go-tests] [m+ readonly ERRCHECK_PATH
[2m[go-tests] [m+ readonly ERRCHECK_VERSION=v1.10.0
[2m[go-tests] [m+ ERRCHECK_VERSION=v1.10.0
[2m[go-tests] [m+ [[ ! -f /build/home/go/bin/errcheck ]]
[2m[go-tests] [m+ /build/home/go/bin/errcheck -ignoretests ./...
[2m[go-tests] [mbuildPhase completed in 52 seconds
[2m[go-tests] [m[1;36mPhase: installPhase[m
[2m[go-tests] [m[1;36mPhase: fixupPhase[m
[2m[go-tests] [mshrinking RPATHs of ELF executables and libraries in /nix/store/533apy29rzmzfrjm7mh3pl9593i5pbrs-go-tests-0.0.0
[2m[go-tests] [mchecking for references to /build/ in /nix/store/533apy29rzmzfrjm7mh3pl9593i5pbrs-go-tests-0.0.0...
[2m[go-tests] [mpatching script interpreter paths in /nix/store/533apy29rzmzfrjm7mh3pl9593i5pbrs-go-tests-0.0.0
[2m[go-tests:post-build] [m[2mUploading to the NixCI cache: /nix/store/533apy29rzmzfrjm7mh3pl9593i5pbrs-go-tests-0.0.0[m
[2m[go-tests:post-build] [m[2mwarning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead[m
[2m[go-tests:post-build] [m[2mcopying 1 paths...[m
[2m[go-tests:post-build] [m[2mcopying path '/nix/store/533apy29rzmzfrjm7mh3pl9593i5pbrs-go-tests-0.0.0' to 'https://cache.nix-ci.com'...[m
[2m[go-tests:post-build] [m[2mwarning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead[m
[2m[go-tests:post-build] [m[2mcopying 1 paths...[m
[2m[go-tests:post-build] [m[2mcopying path '/nix/store/qx53bzmrh9jyv7ivnhyjjgcnnv6h01wv-go-tests-0.0.0.drv' to 'https://cache.nix-ci.com'...[m
[32mUploaded go-tests in 707ms[m
[2mProgress: 1 of 2 built[m
[1;34mBuilt go-tests in 53.7s[m
[2mProgress: 2 of 2 built[m
/nix/store/533apy29rzmzfrjm7mh3pl9593i5pbrs-go-tests-0.0.0
Build succeeded.[m