Dashboard › craft › Distillation
1ab67387-832c-48c1-84e5-a33a7ab4fda3["lore_tm_v1_nUR6Y_6tCn5eZxDdd4ygIQfpx_DDVUxbmgt3No4jVeY","lore_tm_v1_mUiqjQqUcz8yAvniRKuPLD4EwSt1Tb1vtBayN6EWwuw"]
Date: Aug 27, 2026
/home/byk/Code/getsentry/publish-workspace-acceptance as a directory with 14 entries: .eslintrc.js, .git, .github/, .gitignore, AGENTS.md, auto-approve-repos.txt, docs/, LICENSE, node_modules/, package.json, README.md, src/, vitest.config.js, yarn.lock.pnpm for package management; never use npm or yarn.craft-workspace-action-propagation/AGENTS.md specifies Node.js is managed by Volta at v22.12.0; install dependencies with pnpm install --frozen-lockfile.pnpm build builds to dist/craft; pnpm test runs tests; pnpm lint runs ESLint; pnpm fix auto-fixes lint issues; manual change testing uses pnpm build && ./dist/craft..prettierrc.yml; ESLint 9.x flat configuration in eslint.config.mjs using typescript-eslint; _-prefixed unused variables such as _unusedParam are allowed.src/__mocks__/ test mocks; src/__tests__/ *.test.ts test files; src/artifact_providers/, src/commands/, src/schemas/, src/status_providers/, src/targets/, src/types/, src/utils/; src/config.ts configuration loading; src/index.ts CLI entry point; src/logger.ts logging; dist/craft is the esbuild-generated single bundled executable.src/__tests__/ with *.test.ts names; run via pnpm test; use Vitest mock APIs vi.fn(), vi.mock(), and vi.spyOn().master; CI tests Node.js 20 and 22; Craft releases itself using its own tooling (dogfooding)..craft.yml at the repository root; its schema is in src/schemas/.--dry-run mode prevents destructive operations through centralized dry-run-aware proxies rather than per-function isDryRun() checks: Git uses getGitClient() from src/utils/git.ts or createGitClient(directory); GitHub API 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.no-restricted-imports to block direct simple-git imports and no-restricted-syntax to block new Octokit(); wrapper modules needing raw simple-git access use // eslint-disable-next-line no-restricted-imports -- This is the wrapper module before import simpleGit from 'simple-git';.getGitClient() or createGitClient() for Git, whose mutating methods are automatically blocked; (2) use getGitHubClient() for GitHub, whose create*, update*, delete*, and upload* methods are automatically blocked; (3) use safeFs.writeFile(), safeFs.unlink(), etc. rather than raw fs; (4) wrap custom operations with safeExec(action, description).isDryRun() checks are reserved for commands with their own --dry-run flag (e.g. dart pub publish --dry-run in the pubDev target), operations needing mock data in dry-run mode, and UX optimizations such as skipping sleep timers..lore.md.