Skip to content

profile: publish the tool index and source the data claims - #4

Merged
stxkxs merged 1 commit into
mainfrom
feat/agent-readable-tool-index
Aug 19, 2026
Merged

stxkxs merged 1 commit into
mainfrom
feat/agent-readable-tool-index

Conversation

@stxkxs

@stxkxs stxkxs commented Aug 19, 2026

Copy link
Copy Markdown
Member

Closes the two sharpest findings from the 2026-08-18 sweep: the ai_systems D (an agent-native company whose front door was prose-only) and the receipts contradiction (a product selling citations asserting undated numbers about itself).

All facts here were measured by citature-core against the live lake and the shipped code. Nothing is inferred from README copy.

The tool index

Fourteen live tools in two families, plus the actor catalog.

Contracts are the tool descriptions exactly as registered in apps/actors/mcp/src/server.ts. Not paraphrased — an agent reading this page and an agent reading the server now see the same text. Re-typing them would have forked the guardrail language away from its single source in packages/core/src/guardrails.ts.

The actor table is deliberately separate from the tool table, because the mapping is not 1:1 — 14 tools ship across 7 query actors plus the MCP server, and opportunity_search alone spans SAM.gov and Grants.gov. One-row-per-actor would have implied one tool each.

All eight actor URLs verified to resolve (HTTP 200) before publishing.

The MCP endpoint is deliberately absent

citature-mcp runs as an Apify Standby actor, so its host is assigned by the platform at start and lives in the Console — not anywhere in the repo. The page says exactly that and points at the listing.

On a surface whose entire premise is that nothing is asserted without a locator, a plausible-looking endpoint would have been the worst defect available to ship. This is a marked gap, not an oversight. It needs a human with Console access to fill.

The data claims

217M+ is kept, because it was checked and it holds. conformed/fact_contribution carries 217,588,079 rows, 217,574,406 of them inside the 2020–2026 cycles. Both halves of the sentence are accurate. The + makes it a floor, which only grows.

"Refreshed nightly" was ambiguous, not false — and the ambiguity is what made it dangerous here:

reading true?
"the pipeline runs nightly against the source of record" ✅ all four sources
"the data is new every night" ❌ FEC and Grants.gov

The ingest runs nightly and FEC correctly reports skipped — caught up to horizon, because FEC publishes bulk files on the two-year election cycle. Nothing is broken. But a reader pairing the old sentence with a five-week-old FEC watermark would reasonably conclude it was. Cadence is now stated per source — which is both true and a stronger claim, because it shows the upstream is modelled rather than assumed.

No as-of date is printed, and that's the deliberate choice. A date typed into markdown is a promise with a shelf life — it becomes the next stale claim the moment nobody regenerates it. The real receipt is per-answer: every answer already carries retrieved_at next to the source's own as_of, and the page now says so. That property regenerates itself; a hand-typed date does not.

The rules

Now quotes the guardrail literals verbatim instead of paraphrasing. Those strings are single-sourced and ship in every receipt envelope and tool description; the profile had drifted into its own wording — the same fork this PR fixes elsewhere.

Not this repo's to fix

The same 217M+ sentence is hand-written at apps/actors/catalog/src/index.ts:244,247, so it is live in the Apify store listings too. That surface belongs to citature-core. Flagging so the claim doesn't get edited into two different wordings.

The org profile claimed "agent-native tools" and "one MCP server" while
offering an agent nothing but prose — no tool names, no contracts, no way
in. It also asserted "217M+ itemized contribution records" and "refreshed
nightly" with no locator and no date, on a page whose stated promise is
that nothing is asserted without a locator you can re-fetch.

────────────────────── The tool index ──────────────────────

Adds all fourteen live tools in two families, with the actor catalog
beneath. Contracts are the tool descriptions exactly as registered in the
MCP server, so an agent reading this page and an agent reading the server
see the same text rather than two drifting paraphrases.

The actor table is separate from the tool table on purpose: the mapping is
not one-to-one. Fourteen tools ship across seven query actors plus the MCP
server, and `opportunity_search` alone spans SAM.gov and Grants.gov. A
one-row-per-actor table would have implied one tool each.

All eight actor URLs verified to resolve before publishing.

The MCP connection host is deliberately absent. citature-mcp runs as an
Apify Standby actor, so its host is assigned by the platform at start and
exists in the console rather than anywhere quotable. The page says so and
points at the listing instead. On a surface whose premise is that every
claim carries a locator, a plausible-looking endpoint would have been the
worst available defect — the page states the gap rather than filling it.

──────────────────────── The claims ────────────────────────

"217M+ across the 2020–2026 cycles" is kept, because it was checked and it
holds: 217,588,079 rows in the conformed contribution table, 217,574,406
of them inside those cycles. The "+" makes it a floor, which only grows.

"Refreshed nightly" was ambiguous rather than false, and the ambiguity is
what made it dangerous here. The pipeline does run nightly against all
four sources; the FEC data is not new nightly, because FEC publishes bulk
files on the two-year election cycle and the ingest correctly reports
"caught up to horizon" in between. A reader pairing the old sentence with
a five-week-old FEC watermark would reasonably conclude something was
broken. Cadence is now stated per source, which is both true and a
stronger claim, since it shows the upstream is modelled rather than
assumed.

No as-of date is printed, and that is the deliberate choice rather than an
omission. A date typed into markdown is a promise with a shelf life and
becomes the next stale claim the moment nobody regenerates it. The real
receipt is per-answer: every answer already carries `retrieved_at` next to
the source's own `as_of`, and the page now says so.

───────────────────────── The rules ─────────────────────────

"The rules" now quotes the guardrail literals verbatim instead of
paraphrasing them. Those strings are single-sourced in the core package
and ship in every receipt envelope and every tool description; the profile
had drifted into its own wording, which is the same fork this change fixes
everywhere else.

Note for the storefront: the same 217M sentence is hand-written in the
actor catalog and therefore live in the Apify listings too. That surface
is not this repository's to edit.

Co-authored-by: stxkxsbot <275011021+stxkxsbot@users.noreply.github.com>
@stxkxs
stxkxs merged commit 37b4fb5 into main Aug 19, 2026
2 checks passed
@stxkxs
stxkxs deleted the feat/agent-readable-tool-index branch August 19, 2026 06:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant