Dashboard › cli › Distillation
f4193b9b-f914-4b5d-a00c-c7d915824aa4["lore_tm_v1_vrPIchuyxAQJRaz2xPRWEcwAiWVcpDPOqdknbBq6ZSc","lore_tm_v1_P21Pz6ug9mWL09oX-jLGPoSEio6qGaHQP_ie8J1S1fM","lore_tm_v1_pbla5KgWiWBR77Uht_XnEyubaY1q4KPxqnAsCA1jRTY","lore_tm_v1_4TySPy2OnUXLoX3p1yiTgK63IAIiF4OhkG4axgjy97Q","lore_tm_v1_9XJ36SDmJ4KcdsPAfDuDx64oqi3y4y9f3lb7hxNQzy0"]
packages/cli/src/commands/project/create.ts:460-493: parseProjectSpecs(rawSpecs: readonly string[]) rejects zero specs with ContextError("Project specification", USAGE_HINT, []); gives a lone colonless spec the friendlier ValidationError(buildPlatformError(...), "platform"); parses all specs with parsePairedProjectSpec; rejects multiple explicit organizations with ValidationError; and returns { explicitOrg, parsed }.packages/cli/src/commands/project/create.ts:495-505: buildProjectCreateOutput(results, requestedCount) preserves the existing object shape when exactly 1 project was requested and produced a result, but returns an array for every complete or partial batch.packages/cli/src/commands/project/create.ts:507-539: createOneProject() performs team resolution, project creation, and fallback for one project and handles --dry-run internally; teamAutoCreateSlug is shared across a multi-project batch so all projects land in, or preview, the single team created by the first project; absent that option it falls back to slugify(name).packages/cli/script/generate-skill-markdown.ts: COMMAND_HEADING_RE extracts a literal command path while excluding positional usage; extractCommandPathFromHeading() returns the path prefixed with sentry; matchExampleToCommand() sorts paths longest-first so sentry auth login wins over sentry auth, then uses defaultCommandPath ?? groupFallback for bare group examples; formatCommandExamples() returns an empty string for no examples or a **Examples:** fenced bash section with examples separated by blank lines.minimum, not by the element parser’s optional property: required arrays should declare minimum, while arrays without a minimum accept zero values and should remain optional in generated public documentation.packages/cli/src/commands/issue/merge.ts:252-295: mergeCommand publicly describes merging “2+ issues”; its positional is kind: "array" with placeholder "issue" and brief "Issue IDs to merge (2 or more required)", but no explicit minimum; optional parsed flag --into (alias -i) prefers a canonical parent and includes that issue in the merge if it was not already listed.packages/cli/src/commands/issue/merge.ts:299-304 that --into always designates an issue that participates in the merge as the preferred parent. The implementation appends flags.into to positional args; duplicate positional/--into representations are later collapsed by numeric-ID deduplication in resolveAllIssues.packages/cli/src/commands/issue/merge.ts:306-318: validation uses effectiveArgs.length < 2; with one positional it suggests sentry issue merge CLI-K9 --into CLI-15H, otherwise it shows sentry issue merge CLI-K9 CLI-15H CLI-15N; the error reports the original args.length; then resolveAllIssues(effectiveArgs, cwd) resolves issues and orderForMerge(issues, flags.into, cwd) orders them.packages/cli/src/commands/issue/merge.ts:319-334: merge IDs come from ordered.map((i) => i.id); when --into is present, requestedParentId is groupIds[0]; mergeIssues(org, groupIds) performs the merge; numeric parent and child IDs are mapped back to short IDs for display. --into remains a preference rather than a guarantee because Sentry may choose another parent, typically the issue with the largest event count.customUsage must override raw parser placeholders.event send; required array positional behavior in issue merge; and compound customUsage behavior for both affected commands.