Dashboard › craft › Distillation
23fb0105-3f76-48ff-91a9-4d21478908b6["7f6ed45887e0a124a8c84badb55016b3","6985d467c3f83ee4e948155ac953d04c"]
Date: Jul 22, 2026
feat/workspaces-schema vs origin/master in repo getsentry/craft (TypeScript release-automation CLI), located at /home/byk/Code/getsentry/craft. [requested-review]workspaces: config key + a selector + resolver; must be fully backward-compatible and inert when workspaces key is absent..craft.yml can define named, independently-versioned release units under top-level workspaces: map; each workspace mirrors release-relevant subset of top-level config and overrides fields; unspecified fields inherit base (top-level) values.--workspace <name> (env CRAFT_WORKSPACE), wired through a yargs middleware calling setActiveWorkspace.getConfiguration() returns a RESOLVED VIEW (base config merged with selected workspace overrides), making getGitTagPrefix, getGlobalGitHubConfig, getVersioningPolicy, providers, and expandWorkspaceTargets(config.targets) automatically workspace-aware.workspaces: true field and expandWorkspaceTargets (npm package workspaces) — must confirm no schema/behavior clash.WORKSPACES_MIN_VERSION = '2.27.0' gates config, requiring declared minVersion >= that.checkMinimalConfigVersion was changed to relax the CURRENT craft version when it's a pre-release/dev build (e.g. 2.27.0-dev.0 counts as 2.27.0) so a dev build can dogfood a feature before its release is cut.cd /home/byk/Code/getsentry/craft && git diff origin/master...HEAD -- ':!.lore.md' ':!.opencode' ':!.craft-issue-842-plan.md'.applyWorkspaceSelection returns config unchanged when no workspaces key/no --workspace; confirm schema refactor (extracting releaseUnitFields shared object spread into CraftProjectConfigSchema) produces exact same top-level schema as master field-by-field (optionality, order, validation); confirm github field (part of releaseUnitFields) still appears on top-level exactly once, not dropped/duplicated; noted full test suite passed 1077 tests but told to look for behaviors not covered by tests.resolveWorkspaceConfig/applyWorkspaceSelection — merge semantics (workspace overrides base, shallow-merge for github field, behavior when base/workspace lack github); whether workspaces key is stripped from resolved config; whether minVersion is preserved or stripped from base; whether Zod-optional fields absent from YAML are absent (not iterated) vs present as undefined in the merge loop Object.entries(workspace); error-case correctness for: workspaces defined+no selection, selection+no workspaces, unknown workspace name — check messages and no silent-wrong-selection.setActiveWorkspace clears _configCache and _globalGitHubConfigCache; asked to enumerate every let _*Cache in config.ts and decide if each needs clearing on workspace switch; asked to check middleware order in index.ts (setGlobals then setActiveWorkspace) for a potential parse-time bug where a command builder (e.g. publish.ts computing allowedTargetNames from getConfiguration().targets at parse time) could populate the cache before setActiveWorkspace runs, yielding a stale/wrong first resolved view; asked to check _globalGitHubConfigCache type change to include undefined, and null vs undefined semantics (null = computed-not-found, undefined = not computed).checkMinimalConfigVersion — verify effectiveCurrentVersion strips pre/build only when current is pre-release; confirm 2.27.0-dev.0 satisfies minVersion: 2.27.0 but still correctly REJECTS minVersion: 2.28.0; confirm relaxation doesn't weaken checks for real released versions (only pre-release current versions relaxed); check interaction with versionGreaterOrEqualThan's throw path (throws when comparing two different non-numeric pre-releases) — confirm stripping pre on current side avoids that throw.--workspace global (works on prepare/publish/targets/changelog); does CRAFT_WORKSPACE env work via .env('CRAFT'); middleware argv => setActiveWorkspace(argv.workspace as string|undefined) runs for every command — check harmlessness for commands not reading config and ordering vs setGlobals.SemVer import; whether getGitTagPrefix's comment/logic is still right; whether loadConfigurationFromString (used by --config-from) applies workspace selection consistently with getConfiguration.npx tsc --noEmit -p tsconfig.build.json; pnpm test src/__tests__/config.test.ts; pnpm test (full suite); pnpm exec prettier --check src/config.ts src/schemas/project_config.ts src/index.ts src/__tests__/config.test.ts.