profile: publish the tool index and source the data claims - #4
Merged
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 inpackages/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_searchalone 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-mcpruns 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_contributioncarries 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:
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_atnext to the source's ownas_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 atapps/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.