Dashboard › craft › Distillation
d3649145-c028-42b1-9446-fef81db70cc6["lore_tm_v1_-ccrc9Sum7eYGmPEYVbeDt7v-tC8sdMpXzMrvTUa_08","lore_tm_v1_1HRziBgBLYAsAwKok0TzyR3aLOh4KIMJA02PaqQ_Beg","lore_tm_v1_3Viwf3AbMttwUUIJIv335rAAXo1GuSXRTUPeYGFFn-0"]
Date: Sep 4, 2026
/home/byk/Code/getsentry contains 34 entries, including the two audited worktrees craft-workspace-action-propagation/ and publish-workspace-acceptance/./home/byk/Code/getsentry/craft-workspace-action-propagation contains 33 entries, including action.yml, README.md, src/, docs/, dist/, package.json, pnpm-lock.yaml, node_modules/, and .git/.craft-workspace-action-propagation worktree has uncommitted modifications including action.yml and src/__tests__/action.test.ts; the displayed stat shows src/__tests__/action.test.ts changed by 59 lines (++++++++---), with additional modified files/stat lines elided.action.yml adds shell validation for a nonempty WORKSPACE: node -e splits it on / and requires every segment to match /^[A-Za-z0-9_.-]+$/, not be ., .., or __proto__, and not start with -; failure exits nonzero.craft workspace list prints concrete workspace paths as a JSON array for automation, replacing the prior statement that it prints exact configured workspace names; documentation also states that Action publish titles always carry the full concrete path.github targets with different tagPrefix values in one release unit are ambiguous; Craft uses the first prefix for read-path operations and logs a warning, and separate release workspaces should be used for independent products.src/__tests__/action.test.ts renames the publish-title test from uses the compact workspace path in publish request titles to uses the full workspace path in publish request titles.src/__tests__/action.test.ts adds parameterized unsafe-workspace-path rejection coverage for ./packages/cli, packages//cli, packages/./cli, packages/../cli, packages/__proto__/cli, and packages/-cli; each expects runActionStep('Validate workspace', workspace, environment).status to be 1 and both gitCalls and craftCalls to remain empty.rejects non-ASCII workspace input in a UTF-8 locale, expecting craftCalls to be empty.packages/README.md non-workspace fixture; remote configuration glob expansion from repository root; workspace-glob configuration cases; safe/invalid glob cases; creation of packages/mcp; outside-root brace glob patterns {../outside/*,packages/*} and {/tmp/*,packages/*}; a literal packages/foo! case; and rejection when a concrete workspace path matches multiple globs.resolveWorkspaceConfig(base, workspaceName, workspaceDirectory) to use getWorkspaceConfig(workspaces, workspaceName, workspaceDirectory) rather than direct Object.hasOwn(workspaces, workspaceName) lookup. On no matching workspace, it derives available names through getWorkspaceNamesFromConfig(base, workspaceDirectory) before throwing ConfigurationError.getWorkspaceGlobMatches(key, workspaceDirectory), map concrete workspace names to matching configured keys, reject concrete names with more than one matching glob, and return discovered names sorted via Array.from(keysByWorkspaceName.keys()).sort()...; configured workspace glob segment validation uses /^[A-Za-z0-9_.?*[\]!^-]+$/.findConfigFile() cache handling changes from if (_configPathCache) to if (_configPathCache && existsSync(_configPathCache)); when the cached file no longer exists, it clears _configPathCache with _configPathCache = undefined as unknown as string.