Every entry here is one build on the Builds tab, 1:1, newest first.
-
A run that collected nothing now tells you what to change, instead of only that it collected
nothing. A subreddit name, term or link this actor could not read ended the run cleanly, so the
run page said "Delivered 0 rows of 1 asked for across 0 inputs." and stopped there — 48
characters, no cause and no next step. Two things were wrong. The count of values it could not
read was kept on the run's own record and never printed, so a run whose only fault was a typo
named nothing at all. And nothing on the page said what to put there instead. The line now
carries that count, in words rather than internal codes, and on a run that delivered nothing it
adds one plain sentence for the biggest cause: the box to use and a working value to copy for an
unreadable input, what a missing or private subreddit means, what a search that matched nothing
means, why a /user/ or /wiki/ link is not a door Reddit serves, and which of those a second run
would change. A run that did deliver is unchanged — it is not lectured about the one input that
missed. No price, input field, output column or charged event changed.
-
The store page now shows a real post row before you spend anything. The page listed every column and never showed one, so the only way to see what you were buying was to run it. A real delivered row — the Reddit ID and permalink, the subreddit, the title and body, the score, the upvote ratio, the comment count and the media type — now sits directly above the column table, built by this actor's own parser from a harvested subreddit listing. No price, input field, output column or charged event changed.
-
A run whose posts your own filters all turned away now says what you asked for instead of reporting nothing at all. When a subreddit or a search served a full page and every post on it fell outside your date window, was marked over 18 with adult posts switched off, or had already been delivered to your account, the run recorded itself as having been asked for nothing — no ask, no rows, no explanation, on a page that still cost us to read. From this build those posts are counted in your own words, each kind on its own uncharged row that names the setting to change, and the run's record shows the rows you asked for beside the rows you got. Nothing about what you are charged moves: a post a filter drops has never been charged and still is not, and the rows that were already in your account are still delivered once and billed once.
-
A brief refusal from the source no longer costs you a whole search or a whole pasted post. A subreddit listing already waited a rate limit out and carried on; a search and a pasted post link did not. On those two, a few seconds of "slow down" ended the work — the query came back as unreadable and the post you named by link came back as a row saying to re-run — while the run's own time limit sat almost entirely unspent. From this build every input waits the same bounded way: up to two short pauses, shared between the post and its comment pages, and never a pause the run has no time left to take. A refusal that is an answer rather than weather is still never retried, and nothing about what you are charged moves.
-
A search inside a subreddit now honours the Timeframe box — and leaving that box alone changes nothing about what you get. Reddit's in-subreddit search accepts a time window and this actor never sent one, so "Timeframe" quietly did nothing on that door while it worked everywhere else. It works there now, with one deliberate exception: the default, week, is still not sent, so a run that leaves Timeframe untouched searches the whole of a subreddit's history exactly as it always has. Pick hour, day, month, year or all to bound one of those searches. The suite now checks every value you can pick against the source's own refusal, which lists the words it takes, so a renamed value stops a release instead of a run.
-
When a sort cannot rank inside your Timeframe, the run now says so instead of handing you an unfiltered listing that looks filtered. "Top" ranks inside a time window; "hot", "new", "rising" and "best" are orderings of what is in a subreddit right now and have no window to rank inside, so your Timeframe was quietly dropped on those and the posts came back unfiltered with nothing saying as much. A run that picked a Timeframe other than the default now carries one uncharged row naming exactly where it applied and where it could not, and pointing at the sort that would honour it. The posts themselves are delivered and charged exactly as before — they are the subreddit and the sort you asked for.
-
A brief "slow down" from the data feed no longer costs you the rest of the subreddit. When
the feed behind this actor answered with a rate limit, a server error or an unreadable reply
part-way through a listing, the run used to give up on that subreddit within a few seconds: you
kept the posts collected up to that point and the rest of your result limit came back as a walk
the feed had cut short. From this build the run waits the refusal out, up to twice per subreddit,
and asks for the same page again; a feed that clears carries on to your result limit, and only a
feed that still refuses afterwards ends the walk. The waiting is bounded by your run clock — no
wait is taken that the remaining time cannot fit — and it stops immediately at your maximum cost
per run. A subreddit that is missing, private or banned is never waited on, because waiting
cannot change it.
-
A walk that really was cut short is unchanged: the posts already collected are still
delivered, and nothing that did not arrive carries a result fee.
-
A link in your rows can never carry a network address, whatever form it arrives in. Every link
this actor delivers already went through our own URL hygiene before reaching your dataset, and that
pass had a gap: where an upstream body writes its links with HTML-escaped separators (& in
place of &), the address parameter was not recognised by name and could survive into a row. It is
now removed however the link is written — escaped, plain or legacy separators, upper or lower case,
and inside a link that wraps another link. Nothing else in a link moves: the expiry, the signature
and every routing parameter are delivered exactly as they were served, so the links keep working
exactly as before. No column, no input, no price and no charge changes.
-
Every row that ends a walk now says which bound ended it, and what you already had when it
did. A subreddit or search walk that had already delivered rows and then hit a read failure
said "There was no result fee — please re-run" on its row — over rows that were in your dataset
and charged. It now opens with what was already delivered, points at those rows (each says what
it cost), and denies a fee only for the part that was never collected. The same honesty covers a
walk that came back short: "the rest does not exist to collect" is now said only when the listing
itself ran out, while this actor's own depth ceilings — 40 pages of one subreddit, 5 of one
search, 20 comment pages of one thread — and your own date window each say so in their own words,
as a limit on that run rather than a verdict about Reddit, with the setting that moves it. No
column, no input, no price and no charge changes.
-
A walk our own reading depth cut no longer publishes as a run that got everything it asked
for. When a subreddit or search walk stopped at this actor's own depth — 40 pages of one
subreddit, 5 of one search — while Reddit was still serving, the uncharged note row said so, but
the run's own record quietly shrank what you asked for down to what the walk reached: a 100-row
ask that our depth cut to 40 was recorded as 40 asked and 40 delivered. The rows behind our own
depth are now counted and named (skipped.page_cap, in the "Never charged" table), so the ask
stays the one you sent and the depth we chose is a number you can see. A listing that genuinely
ran out, and your own date window, are unchanged — there the rest is not there to collect.
Nothing about your rows, your columns, your status line, your charges or your prices changes.
-
The same is now true of a comment thread deeper than this actor reads. With comments on, a
post whose thread ran past the 20 comment pages this actor buys for one post was recorded as
having delivered everything asked for: the note on the post row already said the bound was ours,
while the run's own record counted only the comments the walk reached. A thread our depth cut 100
comments short of your "Max comments per post" now counts and names those 100
(skipped.page_cap, in the "Never charged" table), so the ask stays the one you sent. Your own
"Max comments per post" ending a thread is unchanged — that is your setting, nothing was refused
and nothing is counted — and so is a thread that simply ran out. No row, no column, no charge and
no price changes.
-
Internal only: the two clean stops this actor already counts — a post your own over-18 switch
turned away, and a target above this actor's 200-per-run ceiling — are now named as such in the
shared run-outcome ledger we read internally. Nothing about your rows, your columns, your status
line, your charges or your prices changes, and there is no reason to re-run anything.
-
The "asked for" number on a run with comments on is now counted in rows. With
includeComments on, a subreddit or search walk counted what it asked for in POSTS while it
delivered posts and comment rows, so the run's status line and the requested field on the run
summary could read lower than the rows the run actually handed over — "Delivered 10 rows of 3
asked for". Both now say 11. Only that number moves: the same rows are collected in the same
order, and nothing about your charges, your columns or your prices changes.
First public build.