Build1 distinct publisher3 min readUpdated
One team's account of wiring government open data into agent-callable evidence: the failure mode is a valid response that is only page one, and an agent that reads a cap as "no records".
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
The silence is structural. An HTTP status describes the transport, not the scope of the answer, so a truncated result set and a complete one arrive as the same 200 with the same content type, and nothing in the payload is obliged to say which one you got [1]. ArcGIS feature services do expose `resultOffset` and `resultRecordCount`, and may signal that a transfer limit was exceeded; Socrata supports paging and query controls [2][3]. Both are opt-in for the client. An agent that never asked for page two has no way to learn that page two exists.
That maps badly onto how agent plumbing handles errors. Retry and backoff exist for the loud failures. A cap fails at no layer the agent inspects: the JSON parses, the fields are the fields, the row count is plausible, and an empty page reads exactly like an answer [1]. The CivicDataForge team's version of the consequence is blunter than mine. Ignore the paging contract, they write, and "the source returned 1,000 rows" quietly becomes "the jurisdiction has 1,000 records" [4].
Their response is a five-state decision vocabulary in place of a Boolean: EVIDENCE_FOUND, NO_PUBLISHED_MATCH, REVIEW_REQUIRED, SOURCE_UNAVAILABLE, SCOPE_INCOMPLETE [8]. Count what that is admitting. Four of the five states report the condition of the query rather than the content of the world [1]. On a wired-up public data source, the honest output most of the time is not a fact about a permit or an address, it is a description of how much you were allowed to see. Their example is an address lookup that returns no permit row, where NOT_PERMITTED is usually stronger than the evidence: the publisher may not cover the whole legal regime, the address may be formatted differently, the permit may live in another system, the source may be stale, or the query may simply have been incomplete [7].
The same logic runs through their health checks, which is where I would put the money. Availability is one of seven monitored dimensions, alongside schema compatibility, record-count behavior, source date integrity, freshness, content fingerprint and contract compatibility [12][2]. A source can be reachable and stale, can hold a stable schema while returning incomplete data, can change content without changing its URL and change its schema without failing a request [11]. When freshness cannot be measured they emit `freshness_not_measured` rather than let a reachability check imply it [13].
The cost of this is real and it lands on the collector, not the consumer. You have to discover the publisher's page limit, request every page in a stable order, track page count against observed rows and any source-reported total, and refuse a monitoring baseline outright when the selected query came back capped or partial [5]. That refusal is the load-bearing part: a partial page is fine for exploration, but it cannot prove a record disappeared between two runs [6]. In their evidence envelope, `complete` is a boolean on the scope object rather than on the record [10], which is the correct place for it, because the thing you are uncertain about is the query, not the row.
One caveat on provenance: this is a single self-published account from a team selling the architecture it describes, offered as the failure modes they hit rather than proof that government data can be made clean [14]. The pagination mechanics are checkable against the platform docs. The rest is a design argument, and it is a good one.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Government-data platforms often impose a maximum record count, and a response can be valid JSON with a 200 status and still represent only the first page; an empty page can look exactly like 'there are no records'.
ArcGIS feature services expose controls such as resultOffset and resultRecordCount, and may signal that a transfer limit was exceeded.
If a collector ignores those paging contracts, 'the source returned 1,000 rows' can quietly become 'the jurisdiction has 1,000 records', which are not the same statement.
Their collection rule is to discover the publisher's page limit, request every page in a stable order, track page count, observed row count and source-reported totals where available, reject a monitoring baseline when the selected query is capped, partial or structurally inconsistent, and bind the completed scope into a receipt.
Rejecting the capped or partial baseline is described as the important product decision: a partial page is useful for exploration but cannot prove that a record disappeared between two runs.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Platform mechanics documented, pipeline claims self-reported
Two evidence tiers sit in one article. The platform-level facts -- ArcGIS resultOffset/resultRecordCount and transfer-limit signalling, Socrata paging, Apify webhook retries -- are specific, falsifiable and pointed at official vendor documentation, so they are well grounded. Everything about CivicDataForge's own behavior (the five-step collection rule, the five-state vocabulary, the seven monitoring dimensions, the freshness_not_measured sentinel, the envelope schema) is a first-party description with no code, dataset, test result, jurisdiction list or third-party audit in the cluster. A single publisher, authored by the vendor, caps how high this can go.
Self-disclosed deployment only
The only adoption signals are the vendor's own statements that it operates on Apify Actors and publishes a Streamable HTTP MCP endpoint with machine-readable catalogs. There are no user counts, customers, downloads, integrations, jurisdiction coverage figures or third-party references anywhere in the cluster, so real-world uptake of this pattern beyond the authoring team is unevidenced.
Deliberately understated
The rhetoric runs below the evidence rather than above it. The post disclaims any promise of clean government data, argues its own decision vocabulary is intentionally less dramatic than a yes/no answer, refuses to synthesize a Boolean for consumers, and reports freshness_not_measured instead of inferring currency. Four of its five decision states describe query or source condition rather than a finding. The residual upward pressure is that this is vendor marketing whose central operational assertions cannot be checked, which is why the gap is modestly negative rather than strongly so.
Vendor-authored product narrative
The article is written by the CivicDataForge team about CivicDataForge, published on a developer-community platform, and closes by advertising the company's MCP endpoint and catalogs. Every failure mode described resolves into a capability the vendor says it provides, which is a clear promotional incentive. Offsetting factors keep this from scoring higher: the piece cites third-party official documentation, states limits on what its outputs prove, and makes no pricing, funding or competitive claims that would benefit from inflation.
Moderate-low: one vendor source, checkable platform layer
Confidence is limited by structure, not internal coherence. One publisher, one article, one interested author, and no adoption or verification data mean the assessment rests largely on self-report. It is lifted above the floor by the specificity and internal consistency of the technical content and by the fact that its platform-level claims about ArcGIS, Socrata and Apify are independently checkable against cited documentation.
build
The only way to prove a contract test can fail is to ship a server that lies1 distinct publisher
build
MCP 2026-07-28 drops the `result` wrapper, and your unit tests will not notice1 distinct publisher
product
Twin1's $20M bet: the unit of enterprise AI is one employee, not the org1 distinct publisher
build
Amazon Q executed code from any repo you opened, and it is not the only one1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 23, 2026