{"record":{"id":"97aa9171ad2f0230","repo":"mastra-ai/mastra","slug":"tripwire-triggered-by-processor-id","errorCode":null,"errorMessage":"Tripwire triggered by ${processor.id}","messagePattern":"Tripwire triggered by (.+?)","errorType":"exception","errorClass":"TripWire","httpStatus":null,"severity":"error","filePath":"packages/core/src/processors/runner.ts","lineNumber":511,"sourceCode":"    retryCount,\n    rotateResponseMessageId,\n  }: {\n    workflow: ProcessorWorkflow;\n    messageList: MessageList;\n    stepNumber: number;\n    steps: Array<StepResult<any>>;\n    requestContext?: RequestContext;\n    writer?: ProcessorStreamWriter;\n    memory?: MastraMemory;\n    resourceId?: string;\n    threadId?: string;\n    abortSignal?: AbortSignal;\n    retryCount: number;\n    rotateResponseMessageId?: () => string;\n  }): Promise<void> {\n    for (const processor of workflow.__stateSignalProcessors ?? []) {\n      const abort = <TMetadata = unknown>(reason?: string, options?: TripWireOptions<TMetadata>): never => {\n        throw new TripWire(reason || `Tripwire triggered by ${processor.id}`, options, processor.id);\n      };\n\n      await this.runComputeStateSignal({\n        processor,\n        messageList,\n        stepNumber,\n        steps,\n        requestContext,\n        writer,\n        abort,\n        processorState: this.getProcessorState(processor.id),\n        memory,\n        resourceId,\n        threadId,\n        abortSignal,\n        retryCount,\n        rotateResponseMessageId,\n      });","sourceCodeStart":493,"sourceCodeEnd":529,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/core/src/processors/runner.ts#L493-L529","documentation":"Inside the state-signal execution loop, the runner defines an abort(reason?, options?) helper for each processor; when the processor calls abort() without a reason, this default message is thrown as a TripWire tagged with the processor's id. It signals the processor deliberately stopped the run, but gave no explanation.","triggerScenarios":"A processor's computeStateSignal implementation calls abort() (or abort(undefined, someOptions)) — i.e. a deliberate tripwire with no reason string — executed via runComputeStateSignal during runWorkflowComputeStateSignals or runProcessInputStep.","commonSituations":"Custom processors that call abort() conditionally but omit the reason argument; third-party processors with incomplete abort handling; content-moderation processors rejecting input without messaging.","solutions":["Find the processor named in the TripWire (processor.id) and pass a descriptive reason to abort('why').","Handle the TripWire in your agent/run code (catch and inspect tripwire.processorId/retry/metadata).","If the abort is unintentional, fix the processor's condition that triggers it.","Add metadata to the abort options so downstream handlers can act on structured data."],"exampleFix":"// before\nabort();\n// after\nabort('Input flagged by moderation policy', { retry: false, metadata: { score } });","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  await agent.generate(input);\n} catch (e) {\n  if (e?.name === 'TripWire') {\n    console.error(`Processor ${e.processorId} aborted without a reason`);\n    // route to fallback behavior or surface to user\n  } else throw e;\n}","preventionTips":["Always pass a reason string when calling abort() in custom processors.","Review third-party processors for abort() calls without reasons.","Test processors' reject paths so trips are intentional and documented."],"tags":["tripwire","processors","state-signal","abort"],"backgroundTag":"processor-tripwire","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}