Dashboard › craft › Session 0281LnSbAUxi
0281LnSbAUxiwnfylRead-only adversarial review in /home/byk/Code/getsentry/craft-workspace-action-propagation of the uncommitted compact workspace title changes. Do not edit. Inspect git diff and relevant full source/tests. Evaluate: (1) workspace key grammar and exact discovery command; (2) root-only projectPath rule and backward compatibility for empty maps/non-workspace configs; (3) first-step action validation and path/workspace mutual exclusion; (4) compact title output vs legacy behavior; (5) runtime command registration/type correctness; (6) test adequacy. Report only concrete findings with severity and file:line evidence, then MERGE/DO-NOT-MERGE. Do not assume the current implementation is correct.
<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>
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/config.ts
M src/index.ts
M src/schemas/project_config.ts
?? src/commands/workspace.ts
?? src/commands/workspace_cmds/
action.yml | 18 ++---
docs/src/content/docs/targets/github.md | 36 ++++++++--
src/__tests__/action.test.ts | 111 +++++++++++++++++++++++++++---
src/__tests__/config.test.ts | 118 ++++++++++++++++++++++----------
src/config.ts | 48 +++++++++----
src/index.ts | 2 +
src/schemas/project_config.ts | 56 ++++++++++-----
7 files changed, 297 insertions(+), 92 deletions(-)
diff --git a/action.yml b/action.yml
index 6344db2..180171e 100644
--- a/action.yml
+++ b/action.yml
@@ -74,8 +74,17 @@ runs:
- name: Validate workspace
shell: bash
env:
+ PATH_INPUT: ${{ inputs.path }}
WORKSPACE: ${{ ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/workspace.ts</path>
<type>file</type>
<content>
1: import { Argv, CommandBuilder } from 'yargs';
2:
3: import * as list from './workspace_cmds/list';
4:
5: export const command = ['workspace <command>'];
6: export const description = 'Manage release workspaces';
7:
8: export const builder: CommandBuilder = (yargs: Argv) =>
9: yargs.demandCommand().command(list);
10:
11: export const handler = (): void => {
12: /* pass */
13: };
(End of file - total 13 lines)
</content>
<system-reminder>
Instructions from: /home/byk/Code/getsentry/craft-workspace-action-propagation/AGENTS.md
# AGENTS.md
This file provides guidance for AI coding assistants working with the Craft codebase.
## Package Management
- **Always use `pnpm`** for package management. Never use `npm` or `yarn`.
- Node.js version is managed by [Volta](https://volta.sh/) (currently v22.12.0). ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/workspace_cmds</path> <type>directory</type> <entries> __tests__/ list.ts (2 entries) </entries>
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/workspace_cmds/list.ts</path>
<type>file</type>
<content>
1: import { getWorkspaceNames } from '../../config';
2: import { formatJson } from '../../utils/strings';
3:
4: export const command = ['list'];
5: export const description = 'List defined release workspaces as a JSON array';
6:
7: export function handler(): void {
8: console.log(formatJson(getWorkspaceNames()));
9: }
(End of file - total 9 lines)
</content>
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/workspace_cmds/__tests__</path> <type>directory</type> <entries> list.test.ts (1 entries) </entries>
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/workspace_cmds/__tests__/list.test.ts</path>
<type>file</type>
<content>
1: import { describe, expect, test, vi } from 'vitest';
2:
3: vi.mock('../../../config', () => ({
4: getWorkspaceNames: vi.fn(),
5: }));
6: vi.mock('../../../utils/strings', () => ({
7: formatJson: vi.fn(value => JSON.stringify(value)),
8: }));
9:
10: import { getWorkspaceNames } from '../../../config';
11: import { handler } from '../list';
12:
13: describe('workspace list command', () => {
14: test('prints exact configured workspace names', () => {
15: vi.mocked(getWorkspaceNames).mockReturnValue(['cli', 'mcp.v2']);
16: const log = vi.spyOn(console, 'log').mockImplementation(() => {});
17:
18: handler();
19:
20: expect(log).toHaveBeenCalledWith('["cli","mcp.v2"]');
21: });
22:
23: test('prints an empty array when no workspaces are configured', () => {
24: ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/action.yml</path>
<type>file</type>
<content>
1: name: 'Craft Prepare Release'
2: description: 'Prepare a new release using Craft'
3:
4: inputs:
5: version:
6: description: >
7: Version to release. Can be a semver string (e.g., "1.2.3"),
8: a bump type ("major", "minor", "patch"), or "auto" for automatic detection.
9: required: false
10: merge_target:
11: description: Target branch to merge into. Uses the default branch as a fallback. ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/config.ts</path>
<type>file</type>
<content>
1: import { existsSync, lstatSync, readFileSync } from 'fs';
2: import path from 'path';
3:
4: import { load } from 'js-yaml';
5: import GitUrlParse from 'git-url-parse';
6: import { createGitClient } from './utils/git';
7: import { ZodError } from 'zod';
8:
9: import { logger } from './logger';
10: import {
11: CraftProjectConfig,
12: CraftProjectConfigSchema,
13: GitHubGlobalConfig,
14: ArtifactProviderName,
15: StatusProviderName,
16: TargetConfig,
17: ChangelogPolicy,
18: VersioningPolicy,
19: Workspace,
20: } from './schemas/project_config';
21: import { ConfigurationError } from './utils/errors';
22: import { isCompiledGitHubAction } from './utils/detection';
23: import {
24: getPackageVersion,
25: parseVersion,
26: versionGreaterOrEqualThan,
27: SemVer,
28: } from './utils/version';
29: // Note: We import getTargetByName lazily in ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/schemas/project_config.ts</path>
<type>file</type>
<content>
1: import { z } from 'zod';
2:
3: /**
4: * DEPRECATED: Use changelog.policy instead. Different policies for changelog management
5: */
6: export const enum ChangelogPolicy {
7: Auto = 'auto',
8: Simple = 'simple',
9: None = 'none',
10: }
11:
12: /**
13: * Name of the status provider
14: */
15: export const enum StatusProviderName {
16: GitHub = 'github',
17: }
18:
19: /**
20: * Name of the artifact provider
21: */
22: export const enum ArtifactProviderName {
23: GCS = 'gcs',
24: GitHub = 'github',
25: None = 'none',
26: }
27:
28: /**
29: * Default versioning policy when no version argument is provided. ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands</path> <type>directory</type> <entries> __tests__/ artifacts_cmds/ artifacts.ts changelog.ts config.ts prepare.ts publish.ts targets.ts workspace_cmds/ workspace.ts (10 entries) </entries>
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/artifacts.ts</path>
<type>file</type>
<content>
1: import { Argv, CommandBuilder } from 'yargs';
2:
3: import * as download from './artifacts_cmds/download';
4: import * as list from './artifacts_cmds/list';
5:
6: export const command = ['artifacts <command>'];
7: export const aliases = ['a', 'artifact'];
8: export const description = '📦 Manage artifacts';
9:
10: /**
11: * Common options for `artifacts` commands
12: */
13: export interface ArtifactsOptions {
14: rev: string;
15: }
16:
17: export const builder: CommandBuilder = (yargs: Argv) =>
18: yargs
19: .option('rev', {
20: alias: 'r',
21: description: 'Revision',
22: type: 'string',
23: })
24: .demandCommand()
25: .demandOption('rev', 'Please specify the revision')
26: .command(list)
27: .command(download);
28:
29: // This dummy function is to please TypeScript
30: export const handler = (): void => ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/changelog.ts</path>
<type>file</type>
<content>
1: import { Argv, CommandBuilder } from 'yargs';
2:
3: import { logger } from '../logger';
4: import {
5: findConfigFile,
6: getGitTagPrefix,
7: getVersioningPolicy,
8: } from '../config';
9: import { getGitClient, getLatestTag } from '../utils/git';
10: import {
11: generateChangesetFromGit,
12: generateChangelogWithHighlight,
13: } from '../utils/changelog';
14: import { handleGlobalError } from '../utils/errors';
15:
16: export const command = ['changelog'];
17: export const description = 'Generate changelog from git history';
18:
19: /** Output format options */
20: type OutputFormat = 'text' | 'json';
21:
22: /** Command line options */
23: interface ChangelogOptions {
24: /** Base revision to generate changelog from (defaults to latest tag) */
25: since?: string;
26: /** PR number for the current (unmerged) PR */
27: pr?: ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/index.ts</path>
<type>file</type>
<content>
1: #!/usr/bin/env node
2: // Import Sentry instrumentation first, before any other code
3: import './instrument';
4:
5: import isCI from 'is-ci';
6: import yargs from 'yargs';
7:
8: import { logger, LogLevel } from './logger';
9: import {
10: sanitizeDynamicLinkerEnv,
11: warnIfCraftEnvFileExists,
12: } from './utils/env';
13: import {
14: envToBool,
15: setGlobals,
16: extractWorkspaceSelection,
17: } from './utils/helpers';
18: import { getPackageVersion } from './utils/version';
19: import { withTracing } from './utils/tracing';
20: import { setActiveWorkspace } from './config';
21:
22: // Commands
23: import * as prepare from './commands/prepare';
24: import * as publish from './commands/publish';
25: import * as targets from './commands/targets';
26: import * as config from './commands/config';
27: import * as artifacts from './commands/artifacts';
28: ...
Found 100 matches (more matches available)
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/utils/workspaces.ts:
Line 15: /** Information about a workspace package */
Line 25: /** Dependencies that are also workspace packages */
Line 26: workspaceDependencies: string[];
Line 29: /** Result of workspace discovery */
Line 31: /** The type of workspace manager detected */
Line 37: /** Structure of pnpm-workspace.yaml */
Line 45: workspaces?: string[] | { packages?: string[] };
Line 93: * Extract workspaces array from package.json workspaces field
Line 97: workspaces: string[] | { packages?: string[] } | undefined,
Line 99: if (!workspaces) {
Line 102: if (Array.isArray(workspaces)) {
Line 103: return workspaces;
Line 105: return workspaces.packages || [];
Line 115: // First: collect all workspace package names and locations
Line 116: const workspaceLocations: Array<{
Line 120: const workspaceNames = ...
Found 39 matches
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/utils/helpers.ts:
Line 49: options: { workspace: { type: 'string' } },
Line 54: let workspace: string | undefined;
/home/byk/Code/getsentry/craft-workspace-action-propagation/.github/workflows/release.yml:
Line 15: workspace:
Line 57: workspace:
Line 132: workspace: ${{ github.event.inputs.workspace }}
Line 150: workspace: ${{ inputs.workspace }}
/home/byk/Code/getsentry/craft-workspace-action-propagation/docs/src/content/docs/targets/github.md:
Line 105: The `craft workspace list` command prints the exact configured workspace names
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/config.ts:
Line 373: export function getWorkspaceNames(): string[] {
/home/byk/Code/getsentry/craft-workspace-action-propagation/action.yml:
Line 34: workspace:
/home/byk/Code/getsentry/craft-workspace-action-propagation/CHANGELOG.md:
Line ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/__tests__/action.test.ts</path>
<type>file</type>
<content>
1: import {
2: chmodSync,
3: mkdtempSync,
4: mkdirSync,
5: readFileSync,
6: rmSync,
7: writeFileSync,
8: } from 'fs';
9: import { tmpdir } from 'os';
10: import { join } from 'path';
11: import { spawnSync } from 'child_process';
12:
13: import { load } from 'js-yaml';
14: import { afterEach, expect, test } from 'vitest';
15:
16: interface ActionStep {
17: env?: Record<string, string>;
18: name?: string;
19: run?: string;
20: }
21:
22: function getActionSteps(): ActionStep[] {
23: const action = load(
24: readFileSync(join(__dirname, '../../action.yml'), 'utf8'),
25: ) as {
26: runs?: { steps?: ActionStep[] };
27: };
28: return action.runs?.steps || [];
29: }
30:
31: function getActionStep(name: string): ActionStep {
32: const step = getActionSteps().find(step => step.name === name);
33: if (!step?.run) {
34: ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/__tests__/config.test.ts</path>
<type>file</type>
<content>
1: import { describe, test, expect, vi, afterEach, beforeEach } from 'vitest';
2: import { mkdtempSync, rmSync, writeFileSync } from 'fs';
3: import { tmpdir } from 'os';
4: import { join } from 'path';
5: /**
6: * Tests of our ability to read craft config files. (This is NOT general test
7: * configuration).
8: */
9:
10: import {
11: getGitTagPrefix,
12: loadConfigurationFromString,
13: validateConfiguration,
14: setActiveWorkspace,
15: getActiveWorkspace,
16: getVersioningPolicy,
17: getWorkspaceNames,
18: WORKSPACES_MIN_VERSION,
19: } from '../config';
20: import { CraftProjectConfigSchema } from '../schemas/project_config';
21: import { logger } from '../logger';
22:
23: describe('validateConfiguration', () => {
24: test('parses minimal configuration', () => {
25: const data = { github: { owner: 'getsentry', repo: 'craft' } ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/package.json</path>
<type>file</type>
<content>
1: {
2: "name": "@sentry/craft",
3: "version": "2.31.0-dev.0",
4: "description": "The universal sentry workflow CLI",
5: "main": "dist/craft",
6: "repository": "https://github.com/getsentry/craft",
7: "author": "Sentry",
8: "license": "MIT",
9: "bin": {
10: "craft": "dist/craft",
11: "sentry-craft": "dist/craft"
12: },
13: "devDependencies": {
14: "@aws-sdk/client-lambda": "^3.984.0",
15: "@eslint/js": "^9.17.0",
16: "@google-cloud/storage": "^7.14.0",
17: "@octokit/plugin-retry": "^7.1.2",
18: "@octokit/request-error": "^7.0.0",
19: "@octokit/rest": "^21.0.2",
20: "@sentry/esbuild-plugin": "^2.23.0",
21: "@sentry/node": "^10.27.0",
22: "@types/async": "^3.0.1",
23: "@types/aws4": "^1.5.1",
24: "@types/cli-table": "^0.3.0",
25: "@types/git-url-parse": "^9.0.0",
26: "@types/is-ci": "^2.0.0",
27: ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/tsconfig.json</path>
<type>file</type>
<content>
1: {
2: "extends": "./tsconfig.build.json",
3: "compilerOptions": {
4: "types": ["node", "vitest/globals"],
5: "plugins": [],
6: "incremental": true,
7: "tsBuildInfoFile": ".tsbuildinfo"
8: },
9: "include": ["src/**/*.ts", "**/__mocks__/**/*.ts", "**/__tests_/**/*.ts"],
10: "exclude": ["dist/**/*"]
11: }
(End of file - total 11 lines)
</content>
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/docs/src/content/docs/targets/github.md</path>
<type>file</type>
<content>
1: ---
2: title: GitHub
3: description: Create GitHub releases and tags
4: ---
5:
6: Creates a release on GitHub. If a Markdown changelog is present, this target reads the release name and description from it.
7:
8: ## Configuration
9:
10: | Option | Description |
11: |--------|-------------|
12: | `tagPrefix` | Prefix for new git tags (e.g., `v`). Empty by default. |
13: | `previewReleases` | Automatically detect and create preview releases. Default: `true` |
14: | `tagOnly` | Only create a tag (without a GitHub release). Default: `false` |
15: | `floatingTags` | List of floating tags to create/update. Supports `{major}`, `{minor}`, `{patch}` placeholders. |
16:
17: ## Environment Variables
18:
19: | Name | Description |
20: |------|-------------|
21: | `GITHUB_TOKEN` | Personal GitHub API token ([create ...
Found 29 matches
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/utils/helpers.ts:
Line 49: options: { workspace: { type: 'string' } },
Line 54: let workspace: string | undefined;
/home/byk/Code/getsentry/craft-workspace-action-propagation/action.yml:
Line 34: workspace:
Line 272: title="publish: ${GITHUB_REPOSITORY}${SUBDIRECTORY}${WORKSPACE:+/$WORKSPACE}@${RESOLVED_VERSION}"
/home/byk/Code/getsentry/craft-workspace-action-propagation/CHANGELOG.md:
Line 191: - (npm) Tolerate workspace:* deps in version bump and bun.lock patching by @BYK in [#805](https://github.com/getsentry/craft/pull/805)
/home/byk/Code/getsentry/craft-workspace-action-propagation/.github/workflows/release.yml:
Line 15: workspace:
Line 57: workspace:
Line 132: workspace: ${{ github.event.inputs.workspace }}
Line 150: workspace: ${{ inputs.workspace ...
(no output)
> @sentry/craft@2.31.0-dev.0 test /home/byk/Code/getsentry/craft-workspace-action-propagation > vitest run -- src/__tests__/action.test.ts src/__tests__/config.test.ts src/commands/workspace_cmds/__tests__/list.test.ts RUN v4.1.8 /home/byk/Code/getsentry/craft-workspace-action-propagation [info] [[target/github]] No previous release found [info] [[target/github]] Deleted orphaned draft release: v1.0.0 [info] [[target/github]] No previous release found [warn] [[target/github]] Failed to clean up release "v1.0.0": Error: Cleanup failed [info] [[target/github]] No previous release found [info] [[target/github]] No previous release found [info] [[target/github]] Release for tag "1.0.0" already exists and is published. Skipping GitHub release creation (likely from a previous run). [info] [[target/github]] No previous release found [info] [[target/github]] createRelease returned 422 for tag "1.0.0". Looking for a leftover draft release to clean up... ...
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/config.ts M src/index.ts M src/schemas/project_config.ts ?? src/commands/workspace.ts ?? src/commands/workspace_cmds/
<path>/tmp/opencode</path> <type>directory</type> <entries> base-pipeline-1682.ts review-failure-fde.txt review-instrument-fde.txt review-pipeline-fde.txt review-sentry-fde.txt review-sentry-test-fde.txt review-stream-fde.txt review-telemetry-fde.txt review-test-fde.txt (9 entries) </entries>
../../../../../tmp/opencode/craft-workspace-review 9.2mb ⚠️
⚡ Done in 958ms
TypeError [ERR_INVALID_ARG_VALUE]: The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received undefined
at createRequire (node:internal/modules/cjs/loader:2067:11)
at Object.<anonymous> (/tmp/opencode/craft-workspace-review:234365:88)
at Module._compile (node:internal/modules/cjs/loader:1854:14)
at Object..js (node:internal/modules/cjs/loader:1985:10)
at Module.load (node:internal/modules/cjs/loader:1577:32)
at Module._load (node:internal/modules/cjs/loader:1379:12)
at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:154:5)
at node:internal/main/run_main_module:33:47 {
code: 'ERR_INVALID_ARG_VALUE'
}
(node:2247385) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. ...
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/build.mjs</path>
<type>file</type>
<content>
1: import { chmod, readFile, rename, stat, unlink, writeFile } from 'fs/promises';
2: import esbuild from 'esbuild';
3: import { sentryEsbuildPlugin } from '@sentry/esbuild-plugin';
4:
5: // jsonc-parser ships a UMD entry (its `main`) whose body does runtime
6: // `require("./impl/format")` etc. esbuild can't follow those dynamic sibling
7: // requires when bundling, so the built `dist/craft` fails at startup with
8: // "Cannot find module './impl/format'". Redirect the package to its ESM entry
9: // (`module`), which uses static imports esbuild can bundle. Pulled in
10: // transitively via @vercel/client → @vercel/microfrontends.
11: const jsoncParserEsmPlugin = {
12: name: 'jsonc-parser-esm',
13: setup(build) {
14: build.onResolve({ filter: /^jsonc-parser$/ }, async args => {
15: // Avoid recursing into our own resolve call below.
16: if ...
<path>/tmp/opencode</path> <type>directory</type> <entries> base-pipeline-1682.ts craft-workspace-review craft-workspace-review.eqQCMP/ review-failure-fde.txt review-instrument-fde.txt review-pipeline-fde.txt review-sentry-fde.txt review-sentry-test-fde.txt review-stream-fde.txt review-telemetry-fde.txt review-test-fde.txt (11 entries) </entries>
Error: Cannot find module './impl/format'
Require stack:
- /tmp/opencode/craft-workspace-review
at Module._resolveFilename (node:internal/modules/cjs/loader:1500:15)
at wrapResolveFilename (node:internal/modules/cjs/loader:1071:27)
at defaultResolveImplForCJSLoading (node:internal/modules/cjs/loader:1095:10)
at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1116:12)
at Module._load (node:internal/modules/cjs/loader:1285:25)
at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
at Module.<anonymous> (node:internal/modules/cjs/loader:1600:12)
at Module.patchedRequire (/tmp/opencode/craft-workspace-review:7257:39)
at Hook._require.Module.require (/tmp/opencode/craft-workspace-review:7225:31)
at require (node:internal/modules/helpers:153:16) {
code: 'MODULE_NOT_FOUND',
requireStack: [ '/tmp/opencode/craft-workspace-review' ]
}
(node:2248383) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. ...
[ '__proto__' ] true { releaseBranchPrefix: 'release/proto' }
undefined ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL Command "vite-node" not found Did you mean "pnpm exec vite"?
Found 22 matches
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/schemas/project_config.ts:
Line 46: projectPath: z.string().optional(),
Line 210: .refine(github => github.projectPath === undefined, {
Line 211: message: 'Workspace github.projectPath is not supported.',
Line 243: config.github?.projectPath !== undefined
Line 247: message: 'Workspace configurations cannot use github.projectPath.',
Line 248: path: ['github', 'projectPath'],
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/__tests__/publish.test.ts:
Line 172: projectPath: 'packages/cli',
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/targets/pypi.ts:
Line 65: const pyprojectPath = join(rootDir, 'pyproject.toml');
Line 66: if (!existsSync(pyprojectPath)) {
Line 70: const content = readFileSync(pyprojectPath, 'utf-8');
Line 87: return PypiTarget.bumpDirectToml(pyprojectPath, ...
C C.utf8 en_US.utf8 POSIX C rejects é C.utf8 rejects é en_US.UTF-8 accepts é
Found 5 matches
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/config.ts:
Line 353: * This is used by --config-from to load config from a remote branch.
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/prepare.ts:
Line 125: .option('config-from', {
Line 796: // Handle --config-from: load config from remote branch. The caller
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/__tests__/action.test.ts:
Line 150: const workspace = '--config-from=untrusted';
Line 158: 'prepare --workspace=--config-from=untrusted\ntargets --workspace=--config-from=untrusted\n',
"cli\n" false "cli\r" false "cli\r\n" false "cli " false "cli " false "cli\t" false bash rejected $'cli\n' bash rejected $'cli\r' bash rejected $'cli\r\n' bash rejected $'cli\342\200\250' bash rejected $'cli\342\200\251' bash rejected $'cli\t'
error: pathspec 'dist/craft' did not match any file(s) known to git Did you forget to 'git add'?
Found 1 matches
/home/byk/Code/getsentry/craft-workspace-action-propagation/src/utils/strings.ts:
Line 122: export function formatJson(obj: any): string {
<path>/home/byk/Code/getsentry/craft-workspace-action-propagation/src/utils/strings.ts</path>
<type>file</type>
<content>
100: *
101: * @param size Size to format
102: */
103: export function formatSize(size: number): string {
104: if (size < 1024) {
105: return `${size} B`;
106: }
107: const kilobytes = size / 1024.0;
108: if (kilobytes < 1024) {
109: return `${kilobytes.toFixed(1)} kB`;
110: } else {
111: const megabytes = kilobytes / 1024.0;
112: return `${megabytes.toFixed(2)} MB`;
113: }
114: }
115:
116: /**
117: * Serializes the given object in a readable way
118: *
119: * @param obj Object to print out
120: */
121:
122: export function formatJson(obj: any): string {
123: const result = JSON.stringify(obj, null, 4);
124: if (obj instanceof Error && result === '{}') {
125: // Error that doesn't implement toJSON()
126: return util.format(obj);
127: } else {
128: return result;
129: }
130: }
131:
132: /**
133: * Formats ...
<path>/tmp/opencode</path> <type>directory</type> <entries> base-pipeline-1682.ts craft-workspace-review craft-workspace-review.5WgaPR/ review-failure-fde.txt review-instrument-fde.txt review-pipeline-fde.txt review-sentry-fde.txt review-sentry-test-fde.txt review-stream-fde.txt review-telemetry-fde.txt review-test-fde.txt (11 entries) </entries>
../../../../../tmp/opencode/project-config-review.cjs 125.9kb ⚡ Done in 17ms "cli" true [ 'cli' ] "__proto__" true [] "constructor" true [ 'constructor' ] "toString" true [ 'toString' ] "cli/v2" false workspaces.cli/v2 "é" false workspaces.é
C.utf8 rejected é C.utf8 rejected ä C.utf8 rejected İ C.utf8 rejected ß C.utf8 rejected ø en_US.utf8 accepted é en_US.utf8 accepted ä en_US.utf8 accepted İ en_US.utf8 accepted ß en_US.utf8 accepted ø
<path>/tmp/opencode</path> <type>directory</type> <entries> base-pipeline-1682.ts review-failure-fde.txt review-instrument-fde.txt review-pipeline-fde.txt review-sentry-fde.txt review-sentry-test-fde.txt review-stream-fde.txt review-telemetry-fde.txt review-test-fde.txt (9 entries) </entries>
../../../../../tmp/opencode/project-config-review.cjs 125.9kb
⚡ Done in 16ms
{"workspaceKeys":[],"hasOwnProto":false,"projectPath":"packages/cli"}
../../../../../tmp/opencode/project-config-review.cjs 125.9kb
⚡ Done in 16ms
{"rawKeys":["__proto__"],"workspaceKeys":[],"hasOwnProto":false,"projectPath":"packages/cli"}
HIGH — __proto__ is permitted by the workspace-key grammar but is silently dropped by Zod’s record output. workspaces: { __proto__: {} } validates, yet getWorkspaceNames() returns []; selection then reports no workspaces. It also bypasses the root github.projectPath guard because that guard uses the now-empty Object.keys() result.
Evidence: src/schemas/project_config.ts:236-249, src/config.ts:215-225,381-385. The existing prototype-name test does not configure a prototype-named key (src/__tests__/config.test.ts:373-381).
MEDIUM — The action’s claimed ASCII validator is locale-dependent. In an en_US.utf8 locale, Bash accepts é for ^[A-Za-z0-9_.-]+$, while the schema rejects it. The Unicode-control check does not catch ordinary non-ASCII letters, so an invalid workspace can pass the first step and reach later gh/git side effects.
Evidence: action.yml:84-90 versus src/schemas/project_config.ts:236-238; side effects begin at action.yml:93-103 and 179-191. Tests cover only ASCII and /, not alternate locales (src/__tests__/action.test.ts:193-220).
DO-NOT-MERGE
Date: Aug 28, 2026 * 🟢 (11:32) Tool search found 29 `workspace` matches in `/home/byk/Code/getsentry/craft-workspace-action-propagation`, including action input/configuration in `action.yml` and `src/utils/helpers.ts`; workspace propagation tests in `src/__tests__/action.test.ts` and `src/__tests__/config.test.ts`; `workspace:*` dependency handling in `src/targets/npm.ts` and `src/__tests__/vers…
Date: Aug 28, 2026 * 🟢 (11:29) Tool inspected `docs/src/content/docs/targets/github.md`: GitHub target creates releases and tags; if a Markdown changelog is present, it reads the release name and description from it. * 🟢 (11:29) GitHub target configuration documented in `docs/src/content/docs/targets/github.md`: `tagPrefix` prefixes new git tags (empty default); `previewReleases` automatically …
Date: Aug 28, 2026 * 🟢 (11:25) Tool listed `/home/byk/Code/getsentry/craft-workspace-action-propagation/src/commands/` contents: `__tests__/`, `artifacts_cmds/`, `artifacts.ts`, `changelog.ts`, `config.ts`, `prepare.ts`, `publish.ts`, `targets.ts`, `workspace_cmds/`, and `workspace.ts`. * 🟢 (11:26) Tool inspected `src/commands/artifacts.ts`: `artifacts <command>` has aliases `a` and `artifact`,…
Date: Aug 28, 2026 * 🟢 (11:24) Tool inspected `src/schemas/project_config.ts`: defines deprecated `ChangelogPolicy` enum (`Auto = 'auto'`, `Simple = 'simple'`, `None = 'none'`), `StatusProviderName.GitHub = 'github'`, `ArtifactProviderName` (`GCS = 'gcs'`, `GitHub = 'github'`, `None = 'none'`), and `VersioningPolicy` (`Auto = 'auto'`, `Manual = 'manual'`, `CalVer = 'calver'`). * 🟢 (11:24) `src/…
Date: Aug 28, 2026 * 🔴 (11:20) User directive from repository `AGENTS.md`: always use `pnpm` for package management; never use `npm` or `yarn`. Node.js is managed by Volta at v22.12.0; dependencies install via `pnpm install --frozen-lockfile`. * 🟢 (11:20) Repository guidance: development commands are `pnpm build` (outputs `dist/craft`), `pnpm test`, `pnpm lint`, and `pnpm fix`; manual testing c…
Date: Aug 28, 2026 * 🔴 [requested-review] (11:16) User requested a read-only adversarial review of uncommitted compact workspace title changes in `/home/byk/Code/getsentry/craft-workspace-action-propagation`; instructed not to edit files, to inspect `git diff` plus relevant complete source/tests, not to presume correctness, and to report only concrete findings with severity and `file:line` evide…