{"record":{"id":"819e5a5c08eed478","repo":"Hmbown/CodeWhale","slug":"tempdir-launch","errorCode":null,"errorMessage":"tempdir","messagePattern":"tempdir","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"crates/release/src/launch.rs","lineNumber":238,"sourceCode":"        assert!(version_change(Some(\"0.9.9\"), \"0.9.10\").is_some());\n        assert_eq!(version_change(Some(\"0.9.10\"), \"0.9.9\"), None);\n    }\n\n    #[test]\n    fn a_prerelease_sorts_below_the_release_it_precedes() {\n        assert!(version_change(Some(\"0.9.11-pre\"), \"0.9.11\").is_some());\n        assert_eq!(version_change(Some(\"0.9.11\"), \"0.9.11-pre\"), None);\n    }\n\n    #[test]\n    fn an_unparseable_version_on_either_side_produces_no_hint() {\n        assert_eq!(version_change(Some(\"not-a-version\"), \"0.9.11\"), None);\n        assert_eq!(version_change(Some(\"0.9.10\"), \"also-not-a-version\"), None);\n    }\n\n    #[test]\n    fn a_first_launch_records_the_version_without_claiming_an_update() {\n        let home = tempfile::tempdir().expect(\"tempdir\");\n        let outcome = record_launch(home.path(), \"0.9.10\");\n        assert_eq!(outcome.change, None);\n        assert!(outcome.record_error.is_none());\n        assert_eq!(\n            LastLaunch::load(&record_path_in(home.path())).map(|r| r.version),\n            Some(\"0.9.10\".to_string())\n        );\n    }\n\n    #[test]\n    fn the_hint_fires_once_and_not_again_on_the_next_launch() {\n        let home = tempfile::tempdir().expect(\"tempdir\");\n        record_launch(home.path(), \"0.9.10\");\n        assert!(record_launch(home.path(), \"0.9.11\").change.is_some());\n        assert_eq!(record_launch(home.path(), \"0.9.11\").change, None);\n    }\n\n    // The record answers \"what ran last\", so a downgrade must overwrite it.","sourceCodeStart":220,"sourceCodeEnd":256,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/433685b2024e7bc4c99e1e2e326bcad39b4d9d65/crates/release/src/launch.rs#L220-L256","documentation":"Test panic from `tempfile::tempdir().expect(\"tempdir\")` in a_first_launch_records_the_version_without_claiming_an_update: the temp home directory for record_launch could not be created, so the first-launch bookkeeping test aborts during setup.","triggerScenarios":"Calling tempfile::tempdir() when the OS temp directory is unavailable: invalid TMPDIR, missing temp root, full disk/inodes, or a sandboxed CI environment denying temp directory creation.","commonSituations":"CI runners with restricted or full /tmp; TMPDIR pointing at a removed path; disk quota exhaustion on the build machine.","solutions":["Validate TMPDIR/TMP env vars point to an existing writable directory and recreate if needed.","Free disk space or inodes on the partition backing the temp directory.","Rerun with an explicit writable temp root: TMPDIR=$(mktemp -d) cargo test -p codewhale-release a_first_launch_records."],"exampleFix":"// before\ncargo test -p codewhale-release\n// after\nTMPDIR=$(mktemp -d) cargo test -p codewhale-release a_first_launch_records_the_version","handlingStrategy":"try-catch","validationCode":"assert!(std::env::temp_dir().exists(), \"temp root must exist; check TMPDIR\");","typeGuard":"fn tempdir_usable() -> bool {\n    let probe = std::env::temp_dir().join(\".cw-probe\");\n    std::fs::write(&probe, b\"x\").is_ok() && std::fs::remove_file(&probe).is_ok()\n}","tryCatchPattern":"let home = tempfile::tempdir()\n    .unwrap_or_else(|e| panic!(\"temp home unavailable: {e} — check TMPDIR and disk space\"));","preventionTips":["Ensure CI containers mount a writable /tmp or set TMPDIR explicitly.","Watch for disk-full conditions that surface first as tempdir creation failures.","Run version-bookkeeping tests on local filesystems, not network mounts."],"tags":["rust","test-environment","tempdir","filesystem"],"backgroundTag":"file-not-found","analyzedSha":"433685b2024e7bc4c99e1e2e326bcad39b4d9d65","analyzedAt":"2026-09-15T12:24:24.634Z","contentChangedAt":"2026-09-15T12:24:24.634Z","schemaVersion":2},"datasetVersion":"2026-09-22T11:17:16.035Z"}