Dashboard › craft › Distillation
31c8a0d8-98dd-49c3-a0b3-df8aa3156c14["lore_tm_v1_yU8yJAo4XH7NglWdlwDRW4Fizsm5UoBd7g0tisixagI","lore_tm_v1_j40gh7-RyawgI0E7yXoDm8iEsM0yD7DA-NyrkuyyW2A","lore_tm_v1_3Ddg-GEatkWuxs-K-BraV2_L8IDS1hxtRHRZiHRJ2Uk","lore_tm_v1_nGu63mPjl647jfdJsMDxN1j_ZpTYeAiU2AgDIuCV4-0","lore_tm_v1_6ot-6RBevEYapOMSulSSCs4pkwuu_LtCAZd_-qG0XyU","lore_tm_v1_QAKHYDVJGheAeBwZ09oYXGHf_M3Ls7YB99Z_kv0FrsI"]
Date: Sep 8, 2026
34259475611 and the Craft GitHub release 2.31.0 after completion.workspace list; proposed a root-path-only fallback that skips discovery only when path "." cannot be a workspace, plus a regression test and Publish review.Verify failed Publish location resolution completed; Implement root-path bootstrap fallback with regression in progress; Verify and review Publish hotfix pending; Merge hotfix and resume Craft 2.31.0 publish pending. All tasks marked high priority.main.origin/main advanced from 83d210b to 7c60ddb; /home/byk/Code/getsentry/publish is at 83d210b on main; /home/byk/.local/share/opencode/worktree/d6e99ac1514ca21bb55ba991678785ba5ba12bd8/tidy-orchid is at 83d210b on opencode/tidy-orchid; /home/byk/Code/getsentry/publish-workspace-acceptance is at fd1e115 on feat/workspace-acceptance./home/byk/Code/getsentry/publish-workspace-acceptance/src/publish/discover-location.js: getWorkspaceNames({ repositoryDirectory, exists = existsSync, execFile = execFileSync }) returns [] when ${repositoryDirectory}/.craft.yml does not exist; otherwise it executes docker run --rm --volume ${path.resolve(repositoryDirectory)}:/github/workspace/__repo__ --workdir /github/workspace/__repo__ getsentry/craft:latest workspace list with { encoding: "utf8" }.src/publish/discover-location.js, getWorkspaceNames() parses Craft output with JSON.parse(output) and throws Error("Craft workspace discovery returned an invalid workspace list.") if parsing fails or output is not an array.src/publish/discover-location.js, discoverLocation({ input, repositoryDirectory, exists, execFile }) calls resolvePublishLocation({ path: input.path, workspaceNames: getWorkspaceNames({ repositoryDirectory, exists, execFile }) }); main() parses process.env.PUBLISH_ARGS || "{}", requires input.path, defaults PUBLISH_REPOSITORY_DIRECTORY to "__repo__", and emits the JSON-stringified result through core.setOutput("result", ...).