Dashboard › craft › Distillation
735ed7cb-6ca1-4caa-9531-22a34202da82["lore_tm_v1_avFwEGUrmKMlLsJLVbgSO-PlfmvPnl_5xe7CkA1Mves","lore_tm_v1_wVAMFx0bw741vz2XivpoC8E9vr8TDxQPZ8S3SD4ZkGE","lore_tm_v1_aTLws6lBpB038G1lBHcyRrCJq1djytWew9cQFR-uIT0","lore_tm_v1_QRJZsSYGAPXcoYLiAE4z6eZ_B8NEOwTKSEgQn34XOks","lore_tm_v1_xKDPrOCAQK8gawG53hbQu26Lq70wi1K78J1BQ_SLBAo","lore_tm_v1_Z7YcOlXI1AnlVFCvu7bIJbLMgkT4ZZVda5sDl1jHp4I","lore_tm_v1_2TE40NAornVeCWYvHSiRHmJvVB8RPTb_2L3dDBvqyqI","lore_tm_v1_RRiAuKmBWRD-xaW_zdqq22C9_MQ-3M6zETDuMLXbHR0","lore_tm_v1_x6inIF3Fl0Z4_uGKErQp1wBRQttjN9G-HE-DaEbvdtw","lore_tm_v1_K-biWefzVt2dcUFKSKqwtEI7akmapzJvurCJ4lCsezg","lore_tm_v1_5DPZx0YB6o3gI-mpEN5z3hbtiYG4Dsgl25B_XzkGyKE","lore_tm_v1_10aRX2JOBc6CzTub9IwIAFsRQUkE7sMxwpjQJo4KHT8","lore_tm_v1_WV1eZ3liQX7JUDRlTq8b6fgXKCrNmxSgHXk6v_T58OU","lore_tm_v1_1Fi8vZA4RTSH1dlhj0YqsqqVqP6bfnS7D2XiaZWczz0","lore_tm_v1__yn-Fb692SZCr8BkXdFI-Bm7apdrBaJn3y2p5_UXKyU","lore_tm_v1_JNrgsADTKczS_kcgAlYO0QQNKAggFdLDC1HRCTLaUT8","lore_tm_v1_kZ9CJkBYk4SUELvikRZwEGcDsBUPBLkhhDI8pcp-3Ms"]
Date: Sep 8, 2026
/home/byk/Code/getsentry/publish-root-location-bootstrap; instructed not to edit files; requested inspection of the complete diff plus resolver/input/workflow paths and tests; requested confirmation that exact root '.' shortcut cannot select a workspace, non-root config-discovery failures remain fail-closed, validation precedes resolver, and no scope drift; requested severity-ranked findings with file:line citations and an exact final verdict of MERGE or DO-NOT-MERGE./home/byk/Code/getsentry/publish-root-location-bootstrap contains .eslintrc.js, .git, .github/, .gitignore, AGENTS.md, auto-approve-repos.txt, docs/, LICENSE, node_modules/, package.json, README.md, scripts/, src/, vitest.config.js, and yarn.lock (15 entries).switch (status) default branch throwing new Error(\Unknown status: '${status}'`)`.24.0.0; Yarn classic 1.22.22 is required and npm must not be used.__tests__/; source uses CommonJS and tests use ES Modules; Prettier defaults, double-quoted strings, and semicolons are required.src/publish/discover-location.js and src/publish/__tests__/discover-location.js.src/publish/discover-location.js:50-53: discoverLocation() now returns { path: "." } immediately when input.path === ".", before calling getWorkspaceNames() or resolvePublishLocation().discoverLocation() behavior remains: it calls resolvePublishLocation({ path: input.path, workspaceNames: getWorkspaceNames({ repositoryDirectory, exists, execFile }) }) at src/publish/discover-location.js:55-58.getWorkspaceNames() in src/publish/discover-location.js returns [] if ${repositoryDirectory}/.craft.yml does not exist; otherwise runs docker run --rm --volume ${path.resolve(repositoryDirectory)}:/github/workspace/__repo__ --workdir /github/workspace/__repo__ getsentry/craft:latest workspace list, JSON-parses its output, and throws Craft workspace discovery returned an invalid workspace list. if parsing fails or output is not an array.src/publish/__tests__/discover-location.js: (1) does not discover workspaces for the checkout root passes input.path: ".", makes execFile throw workspace list is unavailable, expects { path: "." }, and confirms execFile was never called; (2) fails closed when non-root workspace discovery is unavailable passes input.path: "./packages/cli", makes execFile throw the same error, expects it to throw, and confirms execFile was called exactly once.src/modules/publish-location.js: resolvePublishLocation() first rejects invalid paths with Invalid publish path. and invalid workspace-name arrays with Craft workspace discovery returned an invalid workspace list.; exact path === "." returns { path } without workspace; valid ./<workspace> paths matching a discovered workspace return { path: ".", workspace }; otherwise return { path }.isPublishPath() allows only exact "." or "./"-prefixed paths whose slash-separated segments satisfy isSafeWorkspaceSegment(); safe segments match /^[A-Za-z0-9_.-]+$/, cannot be ".", "..", or "__proto__", and cannot start with "-".ci-ready; workflow comments indicate publishing occurs when ci-ready is present, added by the poller after CI passes.src/publish/inputs.js invokes detailsFromContext({ context: github.context }) and serializes its result to the result output.src/modules/details-from-context.js:49-52 constructs path as "." + titleDetails.path and validates it with isPublishPath(path), throwing Invalid publish issue path: '<path>' before returning inputs.src/modules/__tests__/publish-workflow.js verifies workflow order: Resolve CI-approved release revision precedes Inform start, then Check out target repo, Resolve publish location, Set targets, and Publish using Craft; verifies checkout ref is ${{ steps.release-revision.outputs.revision }}, exactly 2 actions/checkout@v7 uses, location resolver invocation node .__publish__/src/publish/discover-location.js, PUBLISH_REPOSITORY_DIRECTORY: __repo__, CRAFT_PUBLISH_PATH from location output, CRAFT_PUBLISH_WORKSPACE defaulting to '', and Craft publish uses the CI-approved revision.src/modules/__tests__/publish-workflow.js verifies publishing only on a fresh ci-ready label event with labels accepted and ci-ready present and neither ci-pending nor ci-failed present.src/modules/__tests__/publish-workflow.js tests root state filename for path: ".", repo sentry, version 21.3.1: .craft-state/craft/publish-state-getsentry-sentry-c232c383e26f-21.3.1.json; tests workspace state filename for ./packages/cli, workspace packages/cli, repo toolkit, version 1.2.3: .craft-state/craft/publish-state-getsentry-toolkit-c232c383e26f-workspace-cGFja2FnZXMvY2xp-1.2.3.json; and tests case-distinct versions produce noncolliding state files.src/modules/publish-issue-title.peggy defines publish title syntax publish: getsentry/?<repo><optional-path>@<version>; its comment states path suffix is syntactic only and controller resolves the complete suffix as a workspace after checkout of the CI-approved revision.yarn check:generated && vitest run src/publish/__tests__/discover-location.js --runInBand failed because Vitest v4.1.0 rejected unknown option --runInBand; generated parser check node scripts/generate-publish-issue-title-parser.js --check ran first.yarn check:generated && vitest run src/publish/__tests__/discover-location.js passed 1 file / 6 tests; src/modules/__tests__/details-from-context.js passed 1 file / 16 tests; src/modules/__tests__/publish-location.js passed 1 file / 18 tests; src/modules/__tests__/publish-workflow.js passed 1 file / 5 tests. Each command included successful node scripts/generate-publish-issue-title-parser.js --check.'.' shortcut at src/publish/discover-location.js:50-53 returns { path: "." } before workspace discovery, so it cannot emit a workspace or invoke Craft; regression coverage is src/publish/__tests__/discover-location.js:21-37.src/publish/discover-location.js:55-58; covered by src/publish/__tests__/discover-location.js:39-53.src/modules/details-from-context.js:49-52 validates with isPublishPath, then .github/workflows/publish.yml:134-136,169-174 forwards validated inputs to location resolution.src/publish/discover-location.js and src/publish/__tests__/discover-location.js changed.MERGE.