That item is a free pull. In run, free pulls are kept in a different list than the rest of storage while you are in-run. After you free the king, they are all in the storage list.
At the moment, the "pull" command looks only at the free pull list if you are in Hardcore and only at the storage list otherwise.
I'm in a Normal run now.
storage_amount() does look at both storage and free pulls, however.
> pull special edition Batfellow comic
[special edition Batfellow comic] requested, but none available.
That item is out of Standard, isn't it? take_storage() does not use the "pull" command; it goes directly to StorageRequest.
> ash $item[special edition Batfellow comic].storage_amount()
It didn't actually get an item. Looking at my DEBUG log:
> ash take_storage( $item[special edition Batfellow comic], 1 )
Pulling items from storage...
That item is too old to be used on this path.
It'd be nice if StorageRequest detected that.
Yes, that is the message that KoL itself puts into chat. KoL also responds with the "that item is too old" in Results:
> /pull special edition Batfellow comic
Pulling 1 special edition Batfellow comic.
So, in response:
1) The "pull" command should work for free pulls in Normal as well as hardcore.
2) I cannot reproduce your storage_amount() issue; that counts both storage and free pulls. It works for me.
3) If you are in a Standard restricted run, you cannot pull items that are too old. We should not even try - and give an error. And we should detect the error if you try it anyway via visit_url()
4) /pull goes to KoL chat - and KoL itself does not check "out of standard" up front. It tries and fails to pull.