Dashboard › craft › Distillation
a4454452-19db-400b-96d5-5309aac19010["lore_tm_v1_5xqy4fbfledzxyEwm_oRkSkwE4G-fxs7lnwQIt4zCtE","lore_tm_v1_p1wQGNW9zETZzspZ0oWjugEbkEU48oHl6Qtnm1Z3PbA","lore_tm_v1_GTsoi49vppTyKmdwAsOCrR05rkJ2eqEH92bAyTwld2Y","lore_tm_v1_p2OKgwVLuryDaIjB6uVdH0y7u_09ma6GO9xiv5j7CrI","lore_tm_v1_kFbyDLJlaO_VS7F_MSXqioDLBUlKDBPYqVKobIohLAM","lore_tm_v1_ET4pp_NU9zZvExxqRntbFddKOkpj4ccnD8d-VpE4DTU","lore_tm_v1_2BJ5LUpWR162ALASG2iVdl22vxCWDs2Mz73n5svj02M","lore_tm_v1_fROAZmcS9xeBVQr-oxEpFhxT30xVOcBQ1JLQ_43MalY","lore_tm_v1_1ObtQh0Zz11Abq4ApfeiHpXh37SeFtuYVeiE7QKSqmA","lore_tm_v1_9_X7l3AFTUAG5LZLSutSipL0zWJ5xWYH5OeGBUUe1dg","lore_tm_v1_iuvRczyEV7128s1iuASdwC6kyaisZR-BRlO9K4QiB3k","lore_tm_v1_NOUupkQ30RKleEA0GxTzIqx8VaEzqIZrn-7lcTWyEo4","lore_tm_v1_G3prqyYc6cHiHWivVTIvsz6-pR8XXEcjngL0l2Mx22c","lore_tm_v1_hNwcoLcFEz0HdwJjgJTeQl_lxV0todAtxsZZscaMLzU","lore_tm_v1_BGNJ-gHqQ3oCy2e8bVKUy-LjnuMOUAdY0NpKDOf1-_Q","lore_tm_v1_qztfpwfR_y_n46DuG9x7vJMAokAxJvAX5vXcF6rKhkw","lore_tm_v1_vkrwO84EXXCSgGMy2yem6TnzAVIAiny95Y9f-pv_Yho","lore_tm_v1_5qlv0oZi7kWp-rQxPLaq8KqW591uBpeECLKUii9eXBc","lore_tm_v1_sNqX-829D0mA_CRKQGMzsX88cH4GlZcNIOrnvYIbv1k","lore_tm_v1_CvWzq54jlDG6RYVUWZEaGFDn_yDbN4YJVUkEbeIxKcs","lore_tm_v1_r0IsGQpBX32dh5p26yRTPOi0eb1W0SasBOF_l8M12lw","lore_tm_v1_hTV1-zuZ6uqiZbbdD39DZrW9O7MhgpI2D6Jcy8abh5E","lore_tm_v1_6FUiWQ5R8bFaY--3vfNhlbNM_cE9pyvCVW5CXsfvq-A","lore_tm_v1_4ilXfru2R7cd_esN8zuWClbUpu3mzIzTnzRWmEiMfBU","lore_tm_v1_a8YXyKU44lIhMtXSYU3EHPH2iojeygxDEG32sHDAcPs","lore_tm_v1__YXeTY49QLkjFlSeICPSjb-V6nFGyhHQfZliey7wCY4","lore_tm_v1_EZKisqW-bKtSynLq4g8G-73-FfxXK8oZqr3Q7myhIwQ","lore_tm_v1_jBNYMQ_a-PnoweBnQk01kNSSeIdN0WckC_1_nFFMvAM","lore_tm_v1_DWhf_HIpruceNBpqd2pPOzA0woIg3GuZRZfPwKhSYY8","lore_tm_v1_iSUtlseDdxtLu0cMdwx1nryAHzKSKonmDkhq3kXMVkA","lore_tm_v1_TUiD3knH7W5MubexsjODXzLFkFnVykxMPGCcDeWmIS4","lore_tm_v1_ffVEoWOPDINkSK0Hhb53ocQBCSybzu2UPzlPfQVmgkk","lore_tm_v1_g5ApakUitkaG8-Yhtncert4bHt1BjsnWg4-Sr2GmVq0","lore_tm_v1_vO6uqOGNDdESwUAZb8hgL_RJnkP6tvDpJSRPmiyv5mM","lore_tm_v1_KyN5F8ETA0kG0AgJH7x6QRKAKWqDGobCf_dC8zuotTo","lore_tm_v1_iuBl4MYJoot3axFVSQkMlNeYZcsYiLPFO9bF7Y9jUvQ","lore_tm_v1_sFTIId24utxycjKdRrVzeAIOBLnhKwZ10-cdmATnRuU","lore_tm_v1_GAynCFC9Fzxk3vnaIl67HO4j2rEpRWbFSN4YBFr0FRk","lore_tm_v1_7WJUuLwMBFbwjprL-wrrwMd_lojyvVCvM91YjQm5i6E","lore_tm_v1_WZ1PAPeEl2zRmH-WTzCbwcu2pGTF7KaPr3SJhk95vFM","lore_tm_v1_LjNySpllHAmPHXXE_kXcyTa4WXkVLFxKmVOcVlgy0sg","lore_tm_v1_D24DGAqtKHWActp8IdtI1_a2ufVxnIJACpEOgkLtWZ4","lore_tm_v1_dbqedvCkIsOxeSu7G5w_NDFP0k8B5v9ce8t2rgmsQkM","lore_tm_v1_GGddoU8XdWt9F9iYo0KUlfyC8xl27LYH1MUyyTCSRJM","lore_tm_v1_pDkpMKduC1OUax9FBg2hCLWK0kjqAiu_aEbsaAJw16o","lore_tm_v1_yeA8XIpKE_XLo_JxkYpfcZT-5TbXh-8qcWkvgrpNTyk","lore_tm_v1_UTJkHYg3KJjeBcyBxOjhMb5cp6Sx3kjtzN755LswYy4","lore_tm_v1_AqV5HTERYc2O_I7AjzlFDfHLtRtedZTYZDaEea-k2dY","lore_tm_v1_9zOIRUy7ZGAhkv2u-wk1KObTvkVmYKvREQUmVQm6XwY","lore_tm_v1_azpDY7G-8tvzsag_598xOQHm7JqelHtlPoqWWtThK_0","lore_tm_v1_HAegcpf8OYCXE8kPpUhgs_BwSBXlnzw2iKrapSORoO4","lore_tm_v1_IOCU3GkbWT3PjGIC5Tw2bACS2qWiYgxkQA7hlOKpvL4","lore_tm_v1_Md96gkvfOlos2UsOnJG_FCvLFg2dC_6uY6rXYmOLw4U","lore_tm_v1_mHN4kZHKsqEiHRA2Fehe0J4E3qJ9ETR2F6G7o3rUSy4","lore_tm_v1_fq-s6Yubn4BzOlWb_8mTB5JxvYUjfSu583PXU_dOA4M","lore_tm_v1_gpL2YVrkp-dTKVhAbejjYywasr-Wu5OY2EneAp87e2g","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","lore_tm_v1_16qRey_caJ7Tspn1e4KqOEZiSwq7NmvQu1Wx8rLOgLA","lore_tm_v1_sbVscHgxcZ73ibr-di6ToaUxZovdKVaVSylWcmv-DLk","lore_tm_v1_KDD2pNfLfsEqdge0DEaBbjiN2AmJeR9YaAGcTe1GZIk","lore_tm_v1_mSV-xwYU2tr0rvfyejEBJDLOuMLp9wUUzJPA998HcJk","lore_tm_v1_YDWhYayb6efGkPG7D02ibBIfsL9DZ-jWoRsXSrbkeGA","lore_tm_v1__FGD2UHFz51IFzZtANF0I_EBUE_6GPgyjg8GthQEVLM","lore_tm_v1_JsLgmQ4bLJlTgunRELdAxtXlyP1Vyw-gtUVrbJ2gZw4","lore_tm_v1_g3ViHGaJxs4mPZMTDKkbCVyJIznt8NDfUEH57bRrnrs","lore_tm_v1_JoLPVfrtL2qSMzmieTI6hqRPGAZdVVuHDhBm6eak4xk","lore_tm_v1_cKztBhX9aS987LeDQ5MsYlGL26yNPsVa4joElERdPrI","lore_tm_v1_XmaWLhllY2GD0H1mtzFqSAdLKM7yvco4p2zegGWP_qg","lore_tm_v1_T1S2wYSsv3ZPFf6z7SYa8uDQ3b-8EX8-eeN3NBncwV0","lore_tm_v1_kdnO8u4XDeNN3jaJferN1THwquuEVgPBZf2ynr6KmOU","lore_tm_v1_X9B3xn6GNtZUEA8yIWKpeJHwfy2p1u1uMmeUkeuBBWc","lore_tm_v1_1sS9BpzIgppci5j5O7FL2CS2SAAel2ZHNnu_lg-6cqY","lore_tm_v1_oOlduMoRNUNFBjw3HaBbHg9DBmr-P9iHJEJdCjRK70I","lore_tm_v1_4Wd_eKW-xxniFfANwyJJeAN4xEy_H8GztupdEqEWXKY","lore_tm_v1_WOS9VKKHZFqGoXmG_dRUtI5Zy-6q0yU56erfNn9rlAk","lore_tm_v1_9Mmdrvo6Zh8tZZgjavHrTLZk3LccHVP9FOWUOqccc1A","lore_tm_v1_aAc4u4PMbbw4YbhAUAsbzHncnSWb8WD8j9ANOXvrtO0","lore_tm_v1_JJwQexsjfDBwkyFIvBIh5goNP50AtUVNFPAP32R1PoU","lore_tm_v1_LmSHUsyhqGn9mzoFrvP0VOcnDSa7Oh6p7Rx8Brk_uKo","lore_tm_v1_l8MKp4xW3H4NnFX_4Rihb9ktqaSFOja7sVHgeDJgIxM","lore_tm_v1_finOErwiCZG3Y71RWc7pTxBvhO9HaU6jjOKvnGkoICM","lore_tm_v1_0uiKYfMmG22EZoUQox9Ki60AOlhyO0fQBIBVqrC0GgA","lore_tm_v1_0PHaElFAGZ_2U0dPhJZfsRG9FpRoKOo0EgUWC_N_zUQ","lore_tm_v1_rbcJwdZ7V_stqJ3r9ADAO1Iv0I-3xXZ2jIMsir2HnFQ","lore_tm_v1_AhHuo10XPYYTI90B5pYJ7BkLvkbDFov20cfeBSsMuTE","lore_tm_v1_PumKzsRKlBzHqRFTapJoD8Maizm_HEmhrPvUsm2sX_w","lore_tm_v1_ts984u4ZYSiaq7dXoh9pHDMxGEYK7r4Xa03BBlldlH4","lore_tm_v1_xUvKVyn0MEjguyrbWRbUE3R-f2KhIsnTvcNdRfPpgUw","lore_tm_v1_VAgShOJZfA2nn3W7xEjqT01HkxnOZoTiQt65KC-jkuE","lore_tm_v1_BEfUGYG5wHUzSzTeHnjVwTSfvc6-9ZKOFiq1dWiWqs4","lore_tm_v1_NreUV1tKZLvbeB84yRqumRPvtEFUMO8zPUJMM8bUW-Q","lore_tm_v1_0NQoA_OfOIZM6uzesDBkPAHUl2xGziqPgeVNjVY6wDQ","lore_tm_v1_PlGUR8SUuqwwOWbeUWSZU4VVyK4IbvYzJ318VrXW5FQ","lore_tm_v1_xP3Sp5Jo9M9bYezKwr5-kIYT8Cg1l_ZVVOfu_UJCmhE","lore_tm_v1_j5V6NtBWHHdi8so1SNw_aidAh2gbcUroODn9FNHuGIc","lore_tm_v1_KXuiSi9LsDDxmyM773fmiPyKZygpW4O_swayny8zcD4","lore_tm_v1_y3xj6SiG3Naj7aoqVn3rAAFkJqdfp5ypLHS_eJc4wI0","lore_tm_v1_17XWSZtbJihfK3LxQBK9gu02S0T3b3Y8t6aI5oHweZY","lore_tm_v1_Z126_3HVnCyk1SWXSUbuJDtcKJQjEMBpJ_nq_COWxxE","lore_tm_v1_wKOgGoPOTMDbwHSe7ian7-Q69AW2T6L219V-dgXti3U","lore_tm_v1_y9kUvQHD4nyHhjRE5IGLER51GSq3SdwM7vcWfWeMvSk","lore_tm_v1_juQyUaZHkt-_EBns8NbpzB9_20T449O7c50HGumlY28","lore_tm_v1_8zXD-UqfUmS4Wpc7rD5pwRyTpuEBqf2eSU8xH6nZeqU","lore_tm_v1_98TleGMqFNkGIxgGuZmO0BtnfBLiRI594xEFuef0lv8","lore_tm_v1_n_lDYR8Yny-ZUZgiKs8CxqciWUqFBc9SlXElblBe2ho","lore_tm_v1_5ICDdyFXyRewNxfDf9QiubyMWqduknA1xDghcqI1KVE","lore_tm_v1_d33pJvrKWekBdAxYSfxIyZSj0Yrj4xo222KsAlsjKG4","lore_tm_v1_mQtzqpGBe6TKLxZ7FhZGB1za0EShGyEedCO2T0iQNOM","lore_tm_v1_uqY-bzjlov6PdXSAk3m67fCSrAt-fmePPB00Wnae9lg","lore_tm_v1_m-i434JLnto_L0XiqwErLGq0O_mzeDIjLbeMPTi42DE","lore_tm_v1_LjOfJCh0IuzUZnF8i5ipEWTTVfsRPtzBhShY-SEPYBs","lore_tm_v1_1c9Co_tbMTU6dZvYlSPLKstVj5qG6hToRdErfHAglVQ"]
2026-09-08T17:39:00Z as c8a878c53d937a62124796b39ac00f4d73212fe0.master was fetched at 17:40, advancing from 21270a1 to c8a878c; package version was 2.31.0-dev.0.release.yml, workflow ID 4152940) was dispatched with version=auto. It ran successfully as Release run 34258579011 on c8a878c, completing at 17:44.release/2.31.0, creating release commit 55694f8bf3a0fd051e21a877f57b4c0dd8e946bb and Publish request getsentry/publish#9454, titled publish: getsentry/craft@2.31.0.2.31.0 is not yet confirmed published and no GitHub release artifact/tag 2.31.0 had been found as of 18:16.34261921633 for issue getsentry/publish#9454, then verify all Craft 2.31.0 targets/GitHub release evidence after it completes. Do not bypass the Publish controller’s fresh CI gate.
issues at 18:15:15 on merged Publish hotfix commit 44931fa501e457ee631fbd1234ab27f029eb4f8c.in_progress.accepted and fresh ci-ready; a recovery approval comment was posted at 18:14:48 and controller comment stated CI passed / publishing began at 18:15:06.34261924327 completed successfully at 18:15:30; preceding poller 34261891224 also succeeded at 18:15:15. Release-branch Test 34261678672 and Push on main 34261678080 succeeded.fix/root-location-bootstrap / /home/byk/Code/getsentry/publish-root-location-bootstrap4f4b00fa50a23294b058423032188a2846b086c4 (fix: bootstrap root publish locations)2026-09-08T18:12:39Z as 44931fa501e457ee631fbd1234ab27f029eb4f8c.getsentry/craft:latest lacked workspace list.2.31.0 publication: active, high priority.accepted, not direct publication.repo-setup before situation skills..sentryclirc resolution must always check global locations as fallback after walking upward from cwd.--workspace --dry-run as a workspace name.node_modules; default walks must not re-enter directories, including via symlinks when following them.k3npsy3u, scheduled Sep 8 18:15 to inspect #9454 recovery labels/comments/current Publish workflows and verify fresh CI gating without bypass.p4gwh2g0, 1zhdnhfo, mleaytjs, u2uaigqq, 40yk5hby, f6cq8f1a, 4fjfsk2i, 2dmvnm1z.ses_f7ecc9434ffeledouaoJSXmmtQ, started Sep 8 13:28 for CLI discovery inspection, completed Sep 8 13:49 with no directly reusable findings.ses_f7e3cf790ffean2YR8MT3hLull, started Sep 8 16:04 for independent Craft audit, completed Sep 8 16:59 with MERGE.ses_f7dfd0a94ffeFo9yAHzdIeQDqO, started Sep 8 17:14 for initial broken-symlink repair audit, completed Sep 8 17:17 with DO-NOT-MERGE; its MUST-FIX findings were repaired.ses_f7df4b4a4ffeQoqF7rJr5Uz3FG, started Sep 8 17:23 for hardened symlink repair audit, completed Sep 8 17:25 with MERGE.AGENTS.md directs autonomous GitHub coding work in /workspace/repo: triage → explore → plan → implement → review → ship; worker is a deprecated alias of implement.AGENTS.md / CONTRIBUTING.md first; .lore.md, if present, holds long-term Outpost knowledge..agents/skills/, generated from canonical skills/ by scripts/sync-skills.mjs.grok-build-0.1..github/workflows/release.yml through its normal workflow_dispatch with version=auto; do not manually improvise versioning/publishing.release.yml dogfoods the local merged Craft action for getsentry/craft, preparing a release branch and opening a Publish approval request. A successful Craft Release workflow does not itself mean the npm/GitHub/etc. release has been published.master version 2.31.0-dev.0 correctly prepares stable release 2.31.0.2.31.0 changelog contains:
--workspace selector (Craft #848, @BYK); propagated release workspaces (Craft #872, @BYK).origin remote no longer fatal (Craft #871, @sentry); registry push retries with concurrent-update backoff (Craft #870, @jared-outpost).accepted → reset/revalidate → fresh ci-ready controller state machine. Never directly invoke or bypass the publish workflow merely because a release branch’s checks appear green.getsentry/craft:latest workspace list whenever target checkout has .craft.yml; at the time, published getsentry/craft:latest predates Craft’s new workspace list command.PUBLISH_ARGS={"repo":"craft","path":".","version":"2.31.0","dry_run":"","merge_target":"","targets":[]}, PUBLISH_REPOSITORY_DIRECTORY=__repo__; discover-location.js:66:7 invoked Craft and got help followed by Unknown commands: workspace, list under Node v24.20.0.input.path === "." returns { path: "." } before workspace discovery. Checkout root can never be a concrete workspace identity, so discovery is unnecessary there.workspace list fails. It could silently misroute a non-root workspace publication and violates fail-closed discovery.publish: getsentry/<checkout-repository>/<full-concrete-workspace-path>@<version>.getsentry/ remains optional only when parsing existing issues.cli/v2 is a valid concrete multi-segment workspace directory path, not legacy compatibility syntax. Removing it would violate full-path title/selection behavior and break valid paths such as packages/CLI.[A-Za-z0-9_.-]+, excluding ., .., __proto__, and leading -; versions are Craft-compatible semvers and may have + build metadata.src/modules/publish-issue-validation.js; Peggy is syntactic; poller/controller validation remains required."." is root; only exact ./<workspace> discoveries become workspaces; other suffixes stay safe checkout paths.workspaces: keys can be literal paths or globs; globs expand to concrete .craft.yml-relative directories. A selected release needs one concrete --workspace <path> or CRAFT_WORKSPACE.craft workspace list emits concrete workspace paths as a JSON array.github.projectPath; a workflow cannot provide both path and workspace.prepare --config-from resolves relative config from git rev-parse --show-toplevel.*, ?, classes/negated classes, globstar, finite balanced braces; extglob rejected. Nested brace expansion fails closed.node_modules, sorted POSIX paths, and ambiguity rejection before dedupe.realpathSync() errors with ENOENT skip that candidate, covering broken symlinks/removal races. All other errors (ELOOP, EACCES, EPERM, unexpected I/O) propagate.minVersion: 2.29.0; global GitHub { owner: getsentry, repo: toolkit }; packages/* uses releaseBranchPrefix: release/cli, tagPrefix: "cli@"; tools/mcp uses releaseBranchPrefix: release/mcp, tagPrefix: "mcp@".tagPrefix values use the first for read-path operations and log a warning; independent products should be separate release workspaces..craft.yml workspace discovery → full-suffix classification → craft publish <version> --rev <revision>."."; it does not weaken non-root discovery.$GITHUB_WORKSPACE/.craft-state/craft; state identity uses physical container cwd SHA-1, lossless base64url workspace identity, and conditional lossless version identity.CRAFT_PUBLISH_STATE_GITHUB_REPO identifies checkout repository, never release-repository override.getsentry/craft:latest: it needs to understand the exact checked-out revision/config format. CI-approved SHA plus craft publish --rev bind release revision. The root-only bootstrap repair bridges a necessary bootstrapping transition without allowing non-root fallback.@actions/core.setOutput() values consumed by fromJSON() must serialize objects using JSON.stringify.PUBLISH_ARGS absent/empty parses as "{}"; workspace-list input as "[]".repo and path errors are contextual:
Publish input must define a repository.Publish input must define a path.src/modules/publish-issue-title.peggy is canonical for PublishIssueTitle, ReleaseRevision, and CheckRunsLinkCount; generated start rules exactly ["PublishIssueTitle", "ReleaseRevision", "CheckRunsLinkCount"].{ repo, mergeTarget, revision }; Merge target comes solely through getReleaseRevisionDetails().(default) maps to empty Craft merge_target; decoy/late Merge target fields cannot override canonical header.(default) or documented branch characters [A-Za-z0-9_./-]; arbitrary non-newline values such as main; not-a-branch are rejected.CheckRunsLinkCount counts all literal - [View check runs]( occurrences to reject decoys.Expected exactly one View check runs link in Quick links for getsentry/${repo}.Expected a View check runs link for getsentry/${repo} in the publish issue body.Release revision must be a lowercase 40-character SHA.updateReleaseRevision() only accepts /^[0-9a-f]{40}$/ and replaces parser-recorded SHA offsets.jq -jr/jq -ejr and gh issue edit --body-file, never Bash command substitution..issueBody is a nonempty string. Malformed/scalar/missing/non-string/empty results never edit.exit 0.// BEGIN TITLE GRAMMAR / // END TITLE GRAMMAR; docs use <!-- BEGIN GENERATED TITLE GRAMMAR --> / <!-- END GENERATED TITLE GRAMMAR -->..github/workflows/publish.yml and controller checkout in .github/workflows/ci-poller.yml use actions/checkout@v7.test.yml or auto-approve.yml.packages/cli/AGENTS.md and .cursor/rules/ultracite.mdc.packages/cli; docs at apps/cli-docs.pnpm add -D and preserve pnpm run check:deps.src/lib/which.ts, src/lib/scan/, and node:timers/promises.mkdirSync(dir, { recursive: true, mode: 0o700 }); prefer array argument execFileSync.@sentry/api response types rather than duplicate Valibot schemas.buildCommand, async generators, CommandOutput, shared rendering; no custom JSON flags/manual stdout/stderr.buildRouteMap, preserving aliases..sentryclirc walks upward from cwd, then global fallback with getGlobalPaths(), applyGlobalFallbacks(), tryApplyFile(), walkUpFrom(cwd), loadSentryCliRc(); tests reset cached globals on SENTRY_CONFIG_DIR changes.packages/cli/src/lib/walk-up.ts resolves/yields absolute ancestors and stops safely at broken/denied paths/symlink cycles.packages/cli/src/lib/scan/walker.ts is a streaming DFS scanner, not workspace discovery: ignore before descent, never open node_modules-like excluded dirs, sorted POSIX regular files, symlinks off unless enabled, root inode seeded when following symlinks, serial and bounded-parallel exhaustive modes.getsentry/craft master:
21270a1 to merged commit c8a878c.c8a878c feat: support concrete release workspaces; 21270a1 feat(config): add release workspaces; 32f5462 fix(git): prevent fatal error for missing 'origin' remote (#871); 5d0ec43 fix(registry): retry registry push with backoff on concurrent updates (#870); 35e8063 meta: Bump new development version.package.json: @sentry/craft version 2.31.0-dev.0; release target inferred/created as 2.31.0.24.18.0; pnpm 10.27.0..github/workflows/release.yml:
Release, ID 4152940, 76 total runs as of 17:40.workflow_dispatch inputs: required version default 'auto'; optional force; optional workspace.workflow_call accepts version, string force default 'false', merge_target, blocker_label default 'release-blocker', publish_repo, Git user settings, path default '.', workspace, craft_config_from_merge_target default 'false'.getsentry/craft, calls ./.github/workflows/build.yml; release needs build and runs if build succeeded/skipped.actions/create-github-app-token@v3, checks out at v6 with full depth, and dogfoods local ./ action (craft-local).34258579011:
c8a878c53d937a62124796b39ac00f4d73212fe0.102170534326: succeeded, 17:41:10Z–17:41:47Z.102170534557: succeeded, 17:41:09Z–17:41:40Z.102170752544: succeeded, 17:41:52Z–17:42:16Z.102170752557: succeeded, 17:41:50Z–17:42:13Z.102170912442: succeeded, 17:42:19Z–17:42:34Z; dogfooding prepare succeeded, normal external prepare skipped.release/2.31.0, commit 55694f8bf3a0fd051e21a877f57b4c0dd8e946bb, and Publish issue #9454.publish: getsentry/craft@2.31.02.30.1...release/2.31.0.npm, gcs, registry, docker[release], docker[latest], github, gh-pages.34259475611: https://github.com/getsentry/publish/actions/runs/34259475611Publish a new version 102173522513 ran 17:50:21Z–17:51:55Z and failed.Resolve publish location step 11 failed at 17:51:48Z–17:51:49Z. Set targets/Publish using Craft then failed; Craft did not execute.ci-ready only; accepted was removed by failure processing. Failure comment suggested deleting 2.31.0 branch and starting over only if branch was bad.node .__publish__/src/publish/discover-location.js called with root path ".".src/publish/discover-location.js:66:7 executed Docker Craft discovery because root __repo__/.craft.yml existed.getsentry/craft:latest workspace list.Unknown commands: workspace, list.craft:latest, not Craft release preparation, release-branch CI, or Craft publishing itself./home/byk/Code/getsentry/publish-root-location-bootstrap.fix/root-location-bootstrap created Sep 8 17:55 from origin/main / 7c60ddb.yarn run vitest ... failed with error Command "vitest" not found.yarn install v1.22.22 succeeded at 17:57 in 1.72s; emitted [DEP0169] url.parse() deprecation and Vitest’s established unmet Vite peer-dependency warning.src/publish/discover-location.jssrc/publish/__tests__/discover-location.jsdiscoverLocation({ input, repositoryDirectory, exists, execFile }) now immediately returns { path: "." } when input.path === ".".getWorkspaceNames()/Docker craft workspace list.getWorkspaceNames({ repositoryDirectory, exists, execFile }) and propagates errors fail-closed.does not discover workspaces for the checkout root: mocked execFile would throw Error("workspace list is unavailable"); verifies root returns { path: "." } and execFile is never called.fails closed when non-root workspace discovery is unavailable: for path: './packages/cli', root config present, a throwing execFile propagates and execFile is called exactly once.src/publish/__tests__/discover-location.js:21 via getWorkspaceNames line 18 and discoverLocation line 53.src/publish/discover-location.js:51 and non-root discovery continued at line 55..lore.md failed because no such file existed (fatal: pathspec '.lore.md' did not match any files); this did not affect the actual two-file fix.4f4b00f fix: bootstrap root publish locations, 2 files / 36 insertions, created Sep 8 18:10.fix/root-location-bootstrap.4f4b00fa50a23294b058423032188a2846b086c4.REVIEW_REQUIRED self-approval gate remained.44931fa501e457ee631fbd1234ab27f029eb4f8c./home/byk/Code/getsentry/craft-workspace-action-propagationfeat/workspace-action-propagation.d48b906 feat: support concrete release workspaces, created Sep 5 03:34 and pushed 03:43, range 4862056..d48b906.action.yml; docs/src/content/docs/targets/github.md; src/__tests__/action.test.ts; src/__tests__/config.test.ts; src/commands/prepare.ts; src/config.ts; src/schemas/project_config.ts; src/utils/__tests__/publishState.test.ts; src/utils/publishState.ts.f174cea test: describe workspace paths accurately, committed/pushed Sep 8 16:03.src/__tests__/config.test.ts renamed test from allows legacy workspace names to allows multi-segment workspace paths; behavior retained.src/config.ts#L249-L260: globbed broken symlink hit realpathSync() before directory filter and threw ENOENT.catch { return false; } was rejected because it swallowed EACCES, EPERM, ELOOP, and unexpected I/O and did not prove glob emitted fixture.fb1a705 fix: ignore broken workspace symlinks, exact head fb1a705a01277570bf8564477b37eb4d561d1967, committed/pushed Sep 8 17:26.src/config.ts and src/__tests__/config.test.ts, 53 insertions / 1 deletion.getWorkspaceGlobMatches() now skips only error.code === 'ENOENT', rethrowing all other realpath errors.globSync emits packages/broken, only packages/cli resolves, and unexpected ELOOP propagates.c8a878c53d937a62124796b39ac00f4d73212fe0.loadConfigurationFromString(configContent, workspaceDirectory = process.cwd()); config-from resolves against Git top-level.src/config.ts:210-229: duplicate pattern matches throw ConfigurationError: Workspace "${workspaceName}" matches multiple workspace patterns: ${matchingKeys.join(', ')}.getWorkspaceGlobMatches() uses globSync(... { absolute: false, cwd: root, dot: true, ignore: ['**/node_modules/**'], posix: true }), then safe lexical/realpath directory checks and sorted output.isWorkspacePattern() uses hasMagic(... { magicalBraces: true }).isVersionGteMinVersion() is pure/config-safe and false for absent/unparseable versions.github.projectPath.action.yml validates before side effects, clears inherited CRAFT_WORKSPACE, and emits exact full titles.publishState.ts preserves workspace/version identity losslessly.src/commands/publish.ts and src/utils/git.ts.SENTRY_AUTH_TOKEN./home/byk/Code/getsentry/publish-workspace-acceptancefeat/workspace-acceptance.fd1e1156ae878a12a276af401a15a656bfff8127.7c60ddb7f43040fe8fbfea70efc833f689c04e75.b658ffa fix: validate publish workspace JSON, 52ef600 feat: resolve compact workspace publish requests, a81ab03 feat: resolve workspace publish paths.fd1e115 fix: address publish workspace review feedback, committed/pushed Sep 8 13:01.src/modules/__tests__/ci-poller-workflow.js; src/modules/__tests__/generate-publish-issue-title-parser.js; src/publish/__tests__/discover-location.js; src/publish/__tests__/resolve-location.js; src/publish/__tests__/resolve-release-revision.js; src/publish/discover-location.js..github/workflows/ci-poller.yml; .github/workflows/publish.yml; docs/publish-issue-format.md; generator/parser/revision modules; Publish input/location/revision scripts.publish-location.js validates safe locations; invalid workspace discovery error: Craft workspace discovery returned an invalid workspace list.ci-ready, accepted + ci-ready, open issue, no pending/failed labels, 90-minute timeout.__repo__, Release Bot, full history; Craft receives publish ... --rev.workflow_dispatch remains in CI poller with internal optional attempt default "0".getWorkspaceNames() returned [] if no root .craft.yml; otherwise Docker runs getsentry/craft:latest workspace list.44931fa.24.0.0, Yarn 1.22.22; test = yarn check:generated && vitest run; lint = eslint src .github --ignore-pattern '!.github'; Git worktree, not jj.d48b906 created Sep 5 03:34/pushed 03:43; Publish a81ab03 created Sep 5 03:40/pushed 03:46.fd1e115); corrected Craft terminology (f174cea); fixed Craft broken-symlink glob handling (fb1a705) after one DO-NOT-MERGE audit and hardened re-review.7c60ddb.c8a878c.c8a878c; inspected release.yml and version 2.31.0-dev.0.version=auto.34258579011 succeeded, prepared release/2.31.0 at 55694f8, and created Publish request #9454.ci-pending.ci-ready and started Publish run 34259475611.34259475611 failed before Craft ran at Resolve publish location.getsentry/craft:latest did not support workspace list."." cannot select a workspace, allowing a narrowly scoped bootstrap fix while retaining non-root fail-closed behavior.fix/root-location-bootstrap from 7c60ddb.vitest command-not-found.discoverLocation().4f4b00f, pushed, and opened Publish PR #9456.2026-09-08T18:12:39Z as 44931fa.accepted to recover #9454 through normal controller behavior.ci-ready, and started recovery Publish run 34261921633.2.31.0 publication/release artifact still needed final verification.