Dashboard › craft › Distillation
72ca845a-b3d0-4fa1-880d-f949f6aba922["lore_tm_v1_4UVGoHDKF62w_wGxcdE7K4d8jTJGFP-eNC9f-l6ViEQ","lore_tm_v1_-VJ_rArkZRfTnE9e6gVXvLZQALqsaBONbpApfYh-hyw","lore_tm_v1_BLv8S_VbYe284bGsy9WW8ZdUGu_Nl7AwwWHtmcKSHEw","lore_tm_v1_goC1OvBfEBuo06fDJXobjy7XHbCmJES5J0hLZdV8j0Y"]
Date: Aug 29, 2026
/home/byk/Code/getsentry/craft-workspace-action-propagation on branch feat/workspace-action-propagation, and /home/byk/Code/getsentry/publish-workspace-acceptance on branch feat/workspace-acceptance. User required comparison against each branch base and prohibited editing, staging, committing, resetting, or destructive commands.getsentry/craft:latest; this is intentional because Craft must release first so latest contains workspace list and craft publish --rev, and it must not be reported as a mutable-image concern.pnpm-lock.yaml in Publish is unrelated and must never be committed.craft publish --rev; (3) safe detached CI-SHA checkout while retaining named-ref behavior; (4) legacy-title retention, post-checkout compact workspace-first classification, limited discovery, root .craft.yml absence as path behavior, and fail-closed discovery errors when root config exists; (5) elimination of workspace/path ambiguity, name normalization, injection, and traversal; (6) workflow YAML, Actions expressions, shell quoting, and state-filename parity; (7) deterministic Peggy grammar/generated parser plus generated-parser drift detection in tests/CI; and (8) meaningful tests that fail on broken paths and identification of intended committed files.CRITICAL/MAJOR/MINOR, practical fixes, explicit identification of intentional behavior, and a final MERGE or DO-NOT-MERGE; if no findings, list residual release/rollout risks./home/byk/Code/getsentry/craft-workspace-action-propagation directory listing contains 33 entries: .craft.yml, .dockerignore, .eslintcache, .git, .github/, .gitignore, .lore.md, .nojekyll, .npmignore, .prettierignore, .prettierrc.yml, .tsbuildinfo, .vscode/, action.yml, AGENTS.md, blog-post-draft.md, build.mjs, CHANGELOG.md, CONTRIBUTING.md, dist/, Dockerfile, docs/, eslint.config.mjs, img/, LICENSE, node_modules/, package.json, pnpm-lock.yaml, README.md, src/, tsconfig.build.json, tsconfig.json, and vitest.config.mts./home/byk/Code/getsentry/publish-workspace-acceptance directory listing contains 16 entries: .eslintrc.js, .git, .github/, .gitignore, AGENTS.md, auto-approve-repos.txt, docs/, LICENSE, node_modules/, package.json, pnpm-lock.yaml, README.md, scripts/, src/, vitest.config.js, and yarn.lock.pnpm; never use npm or yarn.AGENTS.md specifies Node.js is managed by Volta at v22.12.0; dependencies are installed with pnpm install --frozen-lockfile; pnpm build outputs dist/craft; pnpm test runs tests; pnpm lint runs ESLint; pnpm fix auto-fixes lint; manual testing is pnpm build && ./dist/craft..prettierrc.yml, and ESLint 9.x flat configuration in eslint.config.mjs using typescript-eslint; unused variables prefixed with _ are allowed.src/__tests__/ with *.test.ts names; mocking uses vi.fn(), vi.mock(), and vi.spyOn().master; Craft releases itself using its own tooling..craft.yml; its configuration schema is in src/schemas/.getGitClient() from src/utils/git.ts or createGitClient(directory); GitHub uses getGitHubClient() from src/utils/githubApi.ts; file writes use safeFs from src/utils/dryRun.ts; other actions use safeExec() or safeExecSync() from src/utils/dryRun.ts. ESLint blocks direct simple-git imports and new Octokit(); wrapper modules may use // eslint-disable-next-line no-restricted-imports -- This is the wrapper module before importing simple-git.