Dashboard › craft › Session 1OnpMCbjXzah
1OnpMCbjXzahtSq67Perform a final strict READ-ONLY audit of the CURRENT uncommitted diffs in both worktrees. Do not edit, format, generate, or mutate git state.
First verify scope hygiene from actual git status --short and git diff --name-only. The prior reviewer claimed an unrelated change to .github/workflows/cocoapods-keepalive.yml; this is NOT present in the current Publish worktree. Do not report it unless current git diff proves it exists.
IMPORTANT contract: getsentry/craft:latest is intentional and required. Do NOT report it as a concern.
Audit the complete release-workspace change, especially:
packages/{cli,{mcp}}, packages/{cli,{{},mcp}}) fail closed in both schema and runtime without discarded invalid branches; valid nested braces work; glob safety precedes filesystem access and realpath containment applies.Return severity-ranked findings with exact current file:line citations. Mark each area PASS/CONCERN/MUST-FIX. End exactly MERGE or DO-NOT-MERGE. If blocked, begin BLOCKED with exact tool/error. Never return empty.
I’ll inspect both worktrees read-only, establish the exact changed-file scope first, then trace the release-workspace contract end to end.
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation</path> <type>directory</type> <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 vitest.config.mts (33 entries) </entries>
<path>/home/byk/Code/getsentry/publish-workspace-acceptance</path> <type>directory</type> <entries> .eslintrc.js .git .github/ .gitignore AGENTS.md auto-approve-repos.txt docs/ LICENSE node_modules/ package.json README.md scripts/ src/ vitest.config.js yarn.lock (15 entries) </entries>
M action.yml M docs/src/content/docs/targets/github.md M src/__tests__/action.test.ts M src/__tests__/config.test.ts M src/commands/prepare.ts M src/config.ts M src/schemas/project_config.ts M src/utils/__tests__/publishState.test.ts M src/utils/publishState.ts action.yml docs/src/content/docs/targets/github.md src/__tests__/action.test.ts src/__tests__/config.test.ts src/commands/prepare.ts src/config.ts src/schemas/project_config.ts src/utils/__tests__/publishState.test.ts src/utils/publishState.ts
M .github/workflows/publish.yml M docs/publish-issue-format.md M src/modules/__tests__/ci-poller-input.js M src/modules/__tests__/details-from-context.js M src/modules/__tests__/publish-location.js M src/modules/__tests__/publish-workflow.js M src/modules/ci-poller-input.js M src/modules/details-from-context.js M src/modules/publish-issue-title.js M src/modules/publish-issue-title.peggy M src/modules/publish-location.js M src/publish/resolve-location.js ?? src/modules/publish-issue-validation.js .github/workflows/publish.yml docs/publish-issue-format.md src/modules/__tests__/ci-poller-input.js src/modules/__tests__/details-from-context.js src/modules/__tests__/publish-location.js src/modules/__tests__/publish-workflow.js src/modules/ci-poller-input.js src/modules/details-from-context.js src/modules/publish-issue-title.js src/modules/publish-issue-title.peggy src/modules/publish-location.js src/publish/resolve-location.js
action.yml | 11 +-
docs/src/content/docs/targets/github.md | 20 ++-
src/__tests__/action.test.ts | 101 +++++++++---
src/__tests__/config.test.ts | 192 +++++++++++++++++++++-
src/commands/prepare.ts | 3 +-
src/config.ts | 270 +++++++++++++++++++++++++++++--
src/schemas/project_config.ts | 107 ++++++++++++
src/utils/__tests__/publishState.test.ts | 15 ++
src/utils/publishState.ts | 9 +-
9 files changed, 684 insertions(+), 44 deletions(-)
diff --git a/action.yml b/action.yml
index 94f3158..d160509 100644
--- a/action.yml
+++ b/action.yml
@@ -74,6 +74,7 @@ runs:
- name: Validate workspace
shell: bash
env:
+ LC_ALL: C
PATH_INPUT: ${{ inputs.path }}
WORKSPACE: ${{ inputs.workspace }}
run: |
@@ -81,8 +82,12 @@ runs:
echo "::error::The path and workspace inputs cannot be used together."
...
diff --git a/src/__tests__/action.test.ts b/src/__tests__/action.test.ts
index 8ca535a..1605ee3 100644
--- a/src/__tests__/action.test.ts
+++ b/src/__tests__/action.test.ts
@@ -53,7 +53,7 @@ function createActionEnvironment() {
writeFileSync(output, '');
writeFileSync(
join(binDirectory, 'craft'),
- '#!/usr/bin/env bash\nprintf "%s\\n" "$*" >> "$CRAFT_CALLS"\nif [[ "$1" == "targets" ]]; then\n printf \'["github"]\'\nfi\n',
+ '#!/usr/bin/env bash\nif [[ -n "${CRAFT_WORKSPACE:-}" ]]; then\n exit 1\nfi\nprintf "%s\\n" "$*" >> "$CRAFT_CALLS"\nif [[ "$1" == "targets" ]]; then\n printf \'["github"]\'\nfi\n',
);
writeFileSync(
join(binDirectory, 'git'),
@@ -190,13 +190,35 @@ test('rejects non-ASCII workspace input in a UTF-8 locale', () => {
expect(readFileSync(environment.craftCalls, 'utf8')).toBe('');
});
-test.each(['', 'cli-v2'])('accepts safe workspace input %j', workspace => {
- const environment = createActionEnvironment();
+test.each(['', ...
.github/workflows/publish.yml | 14 +- docs/publish-issue-format.md | 56 +++---- src/modules/__tests__/ci-poller-input.js | 48 +++++- src/modules/__tests__/details-from-context.js | 219 ++++++------------------- src/modules/__tests__/publish-location.js | 94 +++++------ src/modules/__tests__/publish-workflow.js | 35 +++- src/modules/ci-poller-input.js | 15 ++ src/modules/details-from-context.js | 35 ++-- src/modules/publish-issue-title.js | 225 +++----------------------- src/modules/publish-issue-title.peggy | 19 +-- src/modules/publish-location.js | 60 ++++--- src/publish/resolve-location.js | 10 +- 12 files changed, 291 insertions(+), 539 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f6dc96a..23c546e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -172,12 +172,7 @@ ...
diff --git a/src/modules/__tests__/ci-poller-input.js b/src/modules/__tests__/ci-poller-input.js
index 8c80856..140ccef 100644
--- a/src/modules/__tests__/ci-poller-input.js
+++ b/src/modules/__tests__/ci-poller-input.js
@@ -14,7 +14,7 @@ Quick links:
- [View changes](https://github.com/getsentry/toolkit/compare/1.2.2...release/1.2.3)
- [View check runs](https://github.com/getsentry/toolkit/commit/${REVISION}/checks/)`;
-test("parses compact and legacy workspace publish titles", () => {
+test("parses root and full-path publish titles", () => {
expect(
getCiPollerInput({
issueBody,
@@ -29,7 +29,7 @@ test("parses compact and legacy workspace publish titles", () => {
expect(
getCiPollerInput({
issueBody,
- title: 'publish: toolkit [workspace: "cli/v2"] @1.2.3',
+ title: "publish: toolkit/packages/cli/v2@1.2.3",
})
).toEqual({
repo: "getsentry/toolkit",
@@ -51,3 +51,47 @@ test("uses the shared resolver in the CI poller", () => {
...
Date: Sep 4, 2026 * 🔴 [requested-read-only-audit] (23:51) User requested a final strict READ-ONLY audit of CURRENT uncommitted diffs in two worktrees: Craft at `/home/byk/Code/getsentry/craft-workspace-action-propagation` and Publish at `/home/byk/Code/getsentry/publish-workspace-acceptance`. User prohibited edits, formatting, generation, and git-state mutation. * 🔴 [requested-scope-hygiene] (2…