{"record":{"id":"5c25835cc1437dc2","repo":"composer/composer","slug":"the-fslckout-file-is-missing-from-path-see-htt","errorCode":null,"errorMessage":"The .fslckout file is missing from {path}, see https://getcomposer.org/commit-deps for more information","messagePattern":"The \\.fslckout file is missing from (.+?), see https://getcomposer\\.org/commit-deps for more information","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/Composer/Downloader/FossilDownloader.php","lineNumber":64,"sourceCode":"        $this->execute(['fossil', 'clone', '--', $url, $repoFile]);\n        $this->execute(['fossil', 'open', '--nested', '--', $repoFile], $realPath);\n        $this->execute(['fossil', 'update', '--', (string) $package->getSourceReference()], $realPath);\n\n        return \\React\\Promise\\resolve(null);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function doUpdate(PackageInterface $initial, PackageInterface $target, string $path, string $url): PromiseInterface\n    {\n        // Ensure we are allowed to use this URL by config\n        $this->config->prohibitUrlByConfig($url, $this->io);\n\n        $this->io->writeError(\" Updating to \".$target->getSourceReference());\n\n        if (!$this->hasMetadataRepository($path)) {\n            throw new RuntimeException('The .fslckout file is missing from '.$path.', see https://getcomposer.org/commit-deps for more information');\n        }\n\n        $realPath = Platform::realpath($path);\n        $this->execute(['fossil', 'pull'], $realPath);\n        $this->execute(['fossil', 'up', '--', (string) $target->getSourceReference()], $realPath);\n\n        return \\React\\Promise\\resolve(null);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getLocalChanges(PackageInterface $package, string $path): ?string\n    {\n        if (!$this->hasMetadataRepository($path)) {\n            return null;\n        }\n","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/composer/composer/blob/6ffc1177404d0c50119c22dde6564a380f4a82c9/src/Composer/Downloader/FossilDownloader.php#L46-L82","documentation":"FossilDownloader::doUpdate() checks hasMetadataRepository() (presence of .fslckout or _FOSSIL_) and throws this RuntimeException if neither file exists in the package path. Without the checkout metadata, Fossil cannot perform an incremental update, so the operation aborts and points to commit-deps guidance.","triggerScenarios":"Updating a package sourced from a Fossil repository when the working copy at the path is missing its .fslckout/_FOSSIL_ metadata file - e.g. the directory was partially wiped, a custom installer removed metadata, or the initial checkout failed silently.","commonSituations":"Custom installers/cleaners that delete VCS metadata; interrupted prior install leaving a half-populated directory; switching download strategies without clearing vendor; disk cleanup tools removing hidden files.","solutions":["Remove the affected package directory and re-run `composer install` to re-create a proper Fossil checkout.","Stop deleting .fslckout/_FOSSIL_ files in any post-install cleanup hook.","Run `composer clearcache` then reinstall if the working copy is corrupt."],"exampleFix":"# before\nrm -rf vendor/foo/bar/.fslckout  # cleanup removed metadata\ncomposer update foo/bar\n\n# after\nrm -rf vendor/foo/bar\ncomposer install","handlingStrategy":"validation","validationCode":"if (!is_file($path . '/.fslckout') && !is_file($path . '/_FOSSIL_')) { throw new \\RuntimeException('Fossil metadata missing at: ' . $path); }","typeGuard":"function hasFossilMetadata(string $path): bool { return is_file($path . '/.fslckout') || is_file($path . '/_FOSSIL_'); }","tryCatchPattern":null,"preventionTips":["Do not strip .fslckout/_FOSSIL_ files in cleanup hooks.","If a Fossil checkout is corrupt, delete the whole package dir and reinstall.","Verify VCS metadata is preserved by custom installers."],"tags":["composer","downloader","fossil","vcs","filesystem"],"analyzedSha":"6ffc1177404d0c50119c22dde6564a380f4a82c9","analyzedAt":"2026-08-07T00:01:08.491Z","schemaVersion":2},"datasetVersion":"2026-08-07T02:17:10.218Z"}