'array', ]; public function automation(): BelongsTo { return $this->belongsTo(Automation::class); } /** * Idempotent lookup for the state row of a given node within an automation, * creating an empty row on first access. Use this in poll/fire actions that * need to read or update an internal watermark. */ public static function for(string $automationId, string $nodeId): self { return self::firstOrCreate( ['automation_id' => $automationId, 'node_id' => $nodeId], ['data' => []], ); } }