Dashboard › cli › Distillation
815b0c96-48c3-4e26-b163-005e1a9296c5["lore_tm_v1_96sQDxvTL4sjtj8CX4fqFEm8DLRm7LMKuuu1NxDdjEo"]
feat: prefix-aware read paths for monorepo multi-product releases (https://github.com/getsentry/craft/pull/847), was merged; it salvaged the non-controversial prefix-aware version-detection read paths from parked PR #844, whose broader multi-product design was superseded by the target-agnostic workspaces redesign tracked in #842. (meaning July 21, 2026)cli@1.2.3 and mcp@2.0.0 without cross-contaminating latest-tag detection, changelog bases, or CalVer scans; it builds on existing tagPrefix write-side support and uses craft’s home-grown SemVer utilities rather than adding a version library.getLatestTag(git, tagPrefix='') to scope git describe with --match '<prefix>*', threaded the prefix through prepare and changelog read paths, and retained backward compatibility because an empty prefix preserves prior behavior.getGitTagPrefix() warns when multiple github targets declare different tagPrefix values and returns the first; a target selector was deliberately deferred to the workspaces redesign.getVersion/parseVersion to extract versions from prefixed tags, including cli@1.2.3 → 1.2.3, with tests locking the behavior.try/catch, mirroring the versioningPolicy path, so unreadable or invalid .craft.yml does not abort standalone craft changelog; it falls back to the latest tag overall.findReleaseBranches by treating the release-branch prefix as an opaque string and cutting at the last /, producing branch form <prefix>/<version>, rather than using segment arithmetic; this prevents a bare release run from wrongly claiming another product’s release/cli/x branches.github.md and configuration.md the current per-.craft.yml-per-product model while explicitly stating that the first-class, target-agnostic workspaces: model from #842 will supersede it.pnpm test with 1,067 passed and 1 skipped; new or updated tests covered opaque-prefix findReleaseBranches, the case where bare release must not claim release/cli/x, changelog try/catch fallback, prefixed version extraction, and the getGitTagPrefix conflict warning.tsc, pnpm lint, prettier --check on all changed source files, and the docs build.try/catch, and confirmed there was no half-implemented selector. It found a prettier miss in config.ts from the cherry-picked base, which was fixed.feat(config): top-level workspaces schema + --workspace selector (https://github.com/getsentry/craft/pull/848), was merged as PR B of the workspaces redesign described in .opencode/plans/workspaces-redesign-design.md and tracked by #842. (meaning August 25, 2026)workspaces: configuration and a global --workspace <name> selector, allowing one .craft.yml to describe independently versioned release units such as cli@ and mcp@.workspaces key was present. Selection threading through prepare, publish, and the publish-issue action layer was deferred to follow-up PRs C/D.schemas/project_config.ts, PR #848 defined top-level workspaces as a map whose entries mirror the release-relevant subset of top-level configuration and inherit unspecified fields from the top level; each workspace’s github block is partial, allowing an override such as projectPath while inheriting owner and repo.config.ts, PR #848 made getConfiguration() return a resolved view combining base configuration with the selected workspace’s overrides; this made getGitTagPrefix, getGlobalGitHubConfig, getVersioningPolicy, providers, and expandWorkspaceTargets(config.targets) workspace-aware without per-accessor changes.index.ts, PR #848 added global --workspace <name> with environment-variable equivalent CRAFT_WORKSPACE; workspace selection is applied before yargs parsing because command builders—especially publish, which derives --target choices from config.targets—run before middleware.minVersion >= 2.27.0.checkMinimalConfigVersion for development builds: a prerelease of X.Y.Z, such as 2.27.0-dev.0, satisfies minVersion up to X.Y.Z, enabling dogfooding before release; released builds remain unaffected and a genuinely newer requirement such as 2.28.0 is still rejected.workspaces: release units from the npm target’s existing workspaces: true package-discovery field; these occupy different schema locations and do not clash, with documentation disambiguation deferred to PR E.publish builder called getConfiguration() during parse-time before --workspace middleware ran, causing a workspaces configuration to throw “select a workspace” before the user’s selection could be applied and thereby breaking craft publish.CRAFT_WORKSPACE before .parse() and adding a graceful fallback in the publish builder.craft targets --workspace cli resolves the cli workspace’s targets; both CRAFT_WORKSPACE=cli and --workspace=mcp forms work; omitted selection gives a friendly error listing cli, mcp; and an invalid selection emits Unknown workspace "nope". Available workspaces: cli, mcp..pnpm test with 1,078 passed and 1 skipped, plus clean tsc, pnpm lint with 0 errors, and prettier --check; new tests covered schema parsing, resolver merging where overrides win and base values are inherited, partial github inheritance, all error paths, the minVersion gate, cache re-resolution after selection changes, and the publish-builder C1 regression.feat: propagate release workspaces (https://github.com/getsentry/craft/pull/872), was merged. (meaning September 8, 2026)prepare, target discovery, publish-issue identity, and controller execution, preserves legacy unscoped publish-issue titles, and uses controller checkout identity only for secure state lookup.pnpm test across 60 files with 1,138 passed and 1 skipped; pnpm lint had 0 errors and 7 existing unused-variable warnings; Prettier checks and the build passed; independent adversarial review concluded MERGE.getsentry/publish#9339; its dependency was that the Publish controller accept workspace-qualified titles and provide the secure state-file contract before the action emitted those titles.