Dashboard › craft › Distillation
5fe1947a-cc28-4e48-bb87-40d65add8931["lore_tm_v1_ooyMdJ8kmRfVSLiRNAe28-vS7FsTTc8cge8TImtP5T8","lore_tm_v1_E5Lsb-BmrZo1i_Z_CqM2IbjGoH_ZU6EpM8Vu-IDiLU0","lore_tm_v1_Lqkc601z8BpEIdVpqWnWEZg5Im9KSLZ77F8UQg7PGr0","lore_tm_v1_dh29rP97ohzbGllL2AcVGY8_CDW4qYV-Mr3RNhUH73o","lore_tm_v1_ZDJ6RLz35VCYghwWNVuhPLxmMiPOb3CMg7NxpctvHmc"]
Date: Aug 24, 2026
feat/prefixed-tags, after PR #848’s workspace-resolver design; requested inspection of #844 commits/diff against current master, comparison with #848 source in the current worktree, exact overlap/conflicts/superseded code/distinct valuable behavior with file/line and commit-ID citations, and a concrete close/rebase-selected-commits/redesign recommendation. User explicitly prohibited file modifications./home/byk/Code/getsentry/craft.byk/fix/commit-on-repo at b06435e (fix(commit-on-git): Use proper username and pass for), tracking origin/byk/fix/commit-on-repo..lore.md and untracked .craft-issue-842-plan.md and .opencode/.origin is https://github.com/getsentry/craft.git for fetch and push.feat: support prefixed tags for monorepo multi-product releases; head branch feat/prefixed-tags; head commit 8aa85867e1f968b1c6b5397626806cd57b1403b5; base branch master at 0f8720edaa044d99e58e3ae88820ac91bb28cd7e; authored/committed Jul 16, 2026 by Burak Yigit Kaya (BYK, byk@sentry.io); last updated Jul 21, 2026.8aa85867e1f968b1c6b5397626806cd57b1403b5, feat: support prefixed tags for monorepo multi-product releases.cli@1.2.3, mcp@2.0.0) without cross-contaminating latest-tag/changelog-base detection or release branches; its intended layout is one .craft.yml per product.getLatestTag(git, tagPrefix) to add git describe --match '<prefix>*', thereby resolving latest tags per product; it threads configured prefixes through automatic-version and changelog-base resolution in src/commands/prepare.ts and through src/commands/changelog.ts, guarded by a config-file check.getGitTagPrefix() to warn and return the first value if one config declares multiple github targets with different prefixes, treating that configuration as ambiguous.findReleaseBranches to support slashed release-branch prefixes, e.g. release/cli yielding release/cli/1.2.3, for per-product releaseBranchPrefix collision handling and error-hint suggestions.versionToTag were already prefix-aware, and getVersion/parseVersion already extracted versions from prefixed tags; PR #844 adds explicit tests for those behaviors..craft.yml, each with github.tagPrefix and slashed releaseBranchPrefix; it notes GitHub’s single per-repository “Latest” badge is not prefix-scoped.docs/src/content/docs/configuration.md (+16); docs/src/content/docs/targets/github.md (+38); src/__tests__/config.test.ts (+74/-2); src/commands/__tests__/changelog-versioning-policy.test.ts (+1); src/commands/changelog.ts (+7/-2); src/commands/prepare.ts (+3/-2); src/config.ts (+24/-2); src/utils/__tests__/git.test.ts (+67/-1); src/utils/__tests__/version.test.ts (+26); and src/utils/git.ts (+27/-7).feat(config): top-level workspaces schema + --workspace selector; head branch feat/workspaces-schema; head c099bbf97c27330e69d2d329dac817bd3f95e0b0; base master at e5a7f97ad03f76d5265e0ac7b5deb38cfef19206; last updated Aug 24, 2026 at 08:58:03 UTC.4e2d8f434b7a096349ab088d200371560689d5d3 (feat(config): add top-level workspaces schema + --workspace selector); 42d17f0939a136010f23440e9b7210e7bdf03d6e (fix(config): address Bugbot findings on workspaces selector); and merge commit c099bbf97c27330e69d2d329dac817bd3f95e0b0 (Merge branch 'master' into feat/workspaces-schema).workspaces for independently versioned release units within one .craft.yml; each workspace can override the release-relevant config subset—targets, github, releaseBranchPrefix, changelog, versioning, providers, and more—while inheriting unspecified top-level fields.github block is partial, allowing an override such as only projectPath while inheriting top-level owner/repo; getConfiguration() returns a merged resolved view for the selected workspace, making existing accessors (getGitTagPrefix, getGlobalGitHubConfig, getVersioningPolicy, providers, expandWorkspaceTargets) workspace-aware without individual accessor changes.--workspace <name> selection and CRAFT_WORKSPACE; selection occurs before yargs parsing because command builders such as publish derive --target choices from configuration before middleware runs. src/commands/publish.ts gracefully falls back when config cannot resolve at parse time.minVersion >= 2.27.0.checkMinimalConfigVersion so a dev/prerelease build X.Y.Z-dev.0 satisfies a minimum version up to X.Y.Z; released-build behavior is unchanged.workspaces: true package-discovery field.42d17f0939a136010f23440e9b7210e7bdf03d6e corrected a partial workspace github override with only projectPath and no top-level github: the merged github is adopted only if it contains both owner and repo; otherwise it remains unset, allowing getGlobalGitHubConfig() to fall back to git-remote detection.42d17f0939a136010f23440e9b7210e7bdf03d6e moves extractWorkspaceSelection to src/utils/helpers.ts for unit testing, prevents bare --workspace from consuming a following option such as --dry-run, and preserves CRAFT_WORKSPACE fallback when a bare flag has no value.42d17f0939a136010f23440e9b7210e7bdf03d6e removes redundant post-parse workspace middleware from src/index.ts; the pre-parse extraction is the single selection source of truth because middleware could overwrite a valid CRAFT_WORKSPACE fallback with an empty parsed --workspace value. Commit states it was end-to-end verified with the built binary.prepare/publish and the publish-issue action layer.src/__tests__/config.test.ts (+198); src/commands/publish.ts (+16/-5); src/config.ts (+201/-29); src/index.ts (+22/-1); src/schemas/project_config.ts (+48/-6); src/utils/__tests__/helpers.test.ts (+71); and src/utils/helpers.ts (+41).origin/master contains PR #844 commit 8aa85867e1f968b1c6b5397626806cd57b1403b5 at distance 129, while PR #848 is present at distance 1 from origin/master.origin/master includes commit 32f5462bc3732ccf841f59bbfbfef511deddb7b7, dated Aug 10, 2026, fix(git): prevent fatal error for missing 'origin' remote (#871).32f5462bc3732ccf841f59bbfbfef511deddb7b7 changes getDefaultBranch in src/utils/git.ts: before calling git remote set-head <remoteName> --auto, it checks git.getRemotes() and throws ConfigurationError with an actionable message if the specified remote—such as origin—does not exist, instead of propagating Git’s generic exit-128 fatal error.git show-ref invocation using unsupported option remotes failed with error: unknown option 'remotes'; no repository files were modified.releaseBranchPrefix: release/cli and a GitHub target tagPrefix: "cli@", producing release branches like release/cli/1.2.3 and tags like cli@1.2.3.src/commands/prepare.ts around line 867 from getLatestTag(git) to getLatestTag(git, getGitTagPrefix()).src/utils/__tests__/git.test.ts expect no-prefix getLatestTag to call git.raw(['describe', '--tags', '--abbrev=0']); for prefix cli@, they expect git.raw(['describe', '--tags', '--abbrev=0', '--match', 'cli@*']); an empty prefix adds no --match.findReleaseBranches(git, 'release/cli') tests in src/utils/__tests__/git.test.ts covering exact matching of slashed monorepo release-branch prefixes and branches including origin/release/mcp/2.0.0.src/utils/__tests__/version.test.ts for extracting SemVer from scoped package tags and for parseVersion; its test comment notes a prefix ending in a digit works when @ provides the boundary.