Dashboard › cli › Distillation
601c7508-083d-458f-8864-a2cf8267cbd8["lore_tm_v1_zpD1shRu_h7L9dE2ZUOtIcHfVOtnDOEY2-DGJNF3C4o","lore_tm_v1_UIAt702LdlYvpbZVODMnlpzP3v0InGWP5AlHdxWGfqU","lore_tm_v1_tWY5XgIsfVwrUdf2xGObBQk1_rksBCebCrYSEMCP7ds","lore_tm_v1_oGO091RMpf-X3zLQOLgGvlKJAdF3sYSIE85w4hYAUCU","lore_tm_v1_elA7n-G48oBx4PXaqjr4tu0zw2fpmtIiyg0apT6jUhE","lore_tm_v1_SCYU6rVpz_yYWafId2j73AIlgLEwKBMjdQT89vfhtsw","lore_tm_v1_CKVMVg5pE179J-_LqL5iHcaGiQ-7FGkTk1z3h-0OxAA","lore_tm_v1_iTfglTz801M-pJMjp864asC4SE-bIq3uFM80ysFUhQo","lore_tm_v1_jcNHvUyoSTQ0iMx_fyeTzz1OtbDDamy3HMTpfEL6_oo","lore_tm_v1_v7PBmEYlKJRgrqPLHPxpHxrTkNsHbSBjKRrP7bhSk8A","lore_tm_v1_jDPb-ljJ3JmMWzaw0rQ-CSkv-qouffmgC60f_mh1aLw","lore_tm_v1_puQEutyym-8omq8NOE73F_ygMVTImHqSl5XhzHROtks","lore_tm_v1_6nqM3Ztacq0XAQxu6oOvcd2g9r-xokfwGF0ZcABFXrA","lore_tm_v1_M9kQVQF7jGBBshbI2xuQHzT0t_CsN1UtsX221MIqxYQ","lore_tm_v1_o_sWtsEhexLH08qvOvQj3eEopardGIfQdUo8KAf4KIU","lore_tm_v1_eg_zK4BYR-Ql5gz8v_sDP0vivQe29ajUEjy5mCVs3a0","lore_tm_v1_u4lUZrFcL3by9riOKnxxb2JTuIj1dA0qpR8cBgSi8Fo","lore_tm_v1_E72dMgTSKH6gUGPV2OOYF1iv1nV7YIdfVqfN8L0C4rE","lore_tm_v1_lY2NoAXRhl1PWky_jMs7WHitng-g53h9boHhkcV_2gE","lore_tm_v1_QtowGiK-a5rkY6Uajka48etL2Emt5f57Si9WXH9Ifkg","lore_tm_v1_UIZsUnNmU9HzjwPjowZ_vMc8DtRqxnhUvwDXt5oUCkU","lore_tm_v1_YjZkQq1uitqV5Rhpj5IR6POo9t0VYIX1QLPalC2h-_8"]
in_progress at high priority; pending high-priority tasks were: address exact-tree review/CI findings and rerun validation, commit and push verified patch to PR #1558, update PR metadata and resolve the Copilot review thread, monitor exact-head CI and independent-review gates, and merge PR #1558 and verify merged state.fix/agent-conversation-reference-root-cause; its upstream origin/pr-1558 was gone. HEAD was fc5d50e2324e2b6bb2067976bf1515dab45224fb, and comparison base shown was bd065083c3b82677747b97a6cc7f5cf57532d3bc.fc5d50e23 fix(ci): skip risk labels for fork PRs, 285a589de fix(docs): derive command references from metadata, and 92dc1dab2 fix(docs): correct agent conversation argument syntax; preceding repository commits included bd065083c feat(local): Add Vercel Analytics (#1563), 4ca8818d1 feat(local): Add browser viewer for local telemetry (#1560), and 0e661a5f5 fix(org): log region URL parse failures in org list (#1539).bd065083c3b82677747b97a6cc7f5cf57532d3bc to fc5d50e2324e2b6bb2067976bf1515dab45224fb changed 35 files with 394 insertions and 157 deletions, spanning .github/workflows/pr-risk.yml, generated/reference documentation, generation scripts, agent-conversation commands, command/introspection/list/mutate libraries, and associated tests.fc5d50e23, no background reviewer/follow-up survived restart, and the prior correctness report remained authoritative; assistant planned fail-first coverage for three reported defects before implementation changes.packages/cli/src/commands/agent-conversation/view.ts defines canonical usage "[<org>/]<conversation-id>" and USAGE_HINT as sentry agent-conversation view [<org>/]<conversation-id>./. parseConversationTarget(target) therefore treats no slash as an auto-detected-org conversation ID, one slash as org/conversationId, and rejects multiple slashes or empty slash-delimited segments with validationError.parseConversationTarget() in packages/cli/src/commands/agent-conversation/view.ts trims input, uses the first and last slash positions to enforce at most one /, and returns { org, conversationId } or { conversationId }; errors use argument name "conversation-id" and hint sentry agent-conversation view [<org>/]<conversation-id>.viewCommand currently defines its sole positional as a required Stricli tuple parameter with placeholder "org/conversation-id" and brief "[<org>/]<conversation-id> - Org (optional) and conversation ID"; its function nevertheless checks if (!target?.trim()) and throws new ContextError("Conversation ID", USAGE_HINT, []).viewCommand examples are ordered: 1. sentry agent-conversation view conv-123 for auto-detected organization; 2. sentry agent-conversation view my-org/conv-123 for explicit organization; 3. sentry agent-conversation view my-org/conv-123 --json for JSON output.viewCommand resolves the organization with resolveOrg({ org: orgArg, cwd }), throws ContextError("Organization", USAGE_HINT) if unresolved, fetches with getConversationSpans(org, conversationId) under withProgress({ message: "Fetching conversation spans...", json: flags.json }), builds via buildTranscriptResult(conversationId, org, spans, title), sets result.truncated, and yields CommandOutput<TranscriptResult>.packages/cli/src/lib/command.ts, attachDocumentationMetadata() stores only the first docs.customUsage entry as __primaryUsage and stores examples as __examples.ALWAYS_STRIP are always stripped and the command never sees them. ALWAYS_STRIP currently contains only LOG_LEVEL_KEY.mergeGlobalFlags() in packages/cli/src/lib/command.ts detects command ownership of json, org, and project; begins stripKeys from ALWAYS_STRIP; injects missing LOG_LEVEL_KEY, verbose, org, and project global flags and marks injected keys for stripping; when output configuration exists, injects json if not command-owned and always builds fields.buildCommand() manually iterates generators with .next() to preserve the final return value/hint, runs the auth guard and .sentryclirc URL trust validation inside the recovery-capable try, invokes the original generator with cleanFlags, finalizes output, attempts maybeRecoverWithHelp() for positional "help" failures, and otherwise rethrows through handleOutputError().buildCommand() attaches __jsonSchema when an output schema exists and always attaches the unwrapped generator as __rawFunc for internal dispatchers that must bypass telemetry, auth guard, rc-trust, and output pipelines.--into always designates an issue that participates in an issue merge as the preferred parent.packages/cli/src/commands/issue/merge.ts, effectiveArgs is flags.into ? [...args, flags.into] : args, ensuring --into participates even if omitted from positionals; duplicate positional/--into forms are later collapsed by numeric-ID deduplication in resolveAllIssues.sentry issue merge is documented as requiring 2 or more issue IDs, while --into is an optional preferred canonical parent included in the merge if not already listed; -i aliases --into.issue merge validates effectiveArgs.length < 2; with one positional it suggests sentry issue merge CLI-K9 --into CLI-15H, otherwise it gives sentry issue merge CLI-K9 CLI-15H CLI-15N. The thrown message reports the original positional count via args.length.issue merge resolves effectiveArgs, orders issues with orderForMerge(issues, flags.into, cwd), sends numeric IDs through mergeIssues(org, groupIds), and treats --into as a preference rather than a guarantee because Sentry may choose a larger group by event count.packages/cli/plugins/sentry-cli/skills/sentry-cli/references/issue.md contains heading sentry issue merge <issue...> and examples including ordinary, --into, organization-qualified, and lowercase alias forms.apps/cli-docs/src/content/docs/commands/issue.md render the heading sentry issue merge <issue...> but its positional table currently shows [<issue...>], incorrectly suggesting the array positional is optional.agent-conversation viewβs synthetic positional optional so omission reaches the commandβs own error; 2. wrap formatUsageLine for commands with canonical usage; 3. record positional kind so array rows remain required.packages/cli/src/context.ts defines SentryContext with process, env, cwd, homeDir, configDir, stdout, stderr, stdin, and optional commandPrefix; buildContext() uses Stricliβs forCommand callback to set telemetry span name from prefix.join(".") and return context with that full prefix.packages/cli/test/helpers.ts function useTestConfigDir() creates a unique test config directory in beforeEach, sets SENTRY_CONFIG_DIR, closes the database and resets auth/identity caches before and after each test, restores the environment value, then runs cleanupTestDir(dir).SENTRY_CONFIG_DIR value and never delete it. Deleting process.env.SENTRY_CONFIG_DIR can break test files loading after an afterEach because module-level code or hooks may observe undefined.preload.ts always sets SENTRY_CONFIG_DIR, so savedConfigDir is always defined in practice; useTestConfigDir() intentionally omits an else branch to avoid the delete process.env anti-pattern.packages/cli/src/lib/error-reporting.ts silences OutputError, network failures, all expected AuthError states, ApiError statuses strictly greater than 400 and below 500, and child-process CliError messages beginning Process exited with code; each maps respectively to output_error, network_error, auth_expected, api_user_error, or process_exit.ContextError is deliberately not silenced because its volume is used to drive auto-detection and UX improvements; API 400 remains captured as a CLI-authored malformed-request defect, while unparseable user --query input is converted to ValidationError at the command boundary.Sentry.metrics.distribution("cli.error.silenced", 1, { attributes }); attributes include error_class and reason, plus api_status for ApiError and auth_reason for AuthError. Silenced user API errors also log cli.api_error_silenced with status, endpoint, and detail.packages/cli/node_modules/@stricli/core/dist/index.js defines run(app, inputs, context) by awaiting runApplication(app, inputs, context) and assigning context.process.exitCode ??= exitCode.