SG Ground Truth

How it works

Every entry is what a live Flow Production Tracking site answered when a script asked it one question. Nothing here comes from the documentation.

What is on it

pageanswersholds
Entity typesWhat is required to create one, what does it link to, how is it identified19 types
Field typesWhat does this data type read, write and clear as, and what can I filter it with24 types, each with an operator vocabulary and a value matrix
EndpointsWhat does this call take, and what does it answer69 calls, each with a recorded response and its status codes
FiltersWhich relations does this type accept, and what value does each one takeGenerated from the field-type cards, so it cannot drift from them
RecipesHow do I do this, and what does it return14 tasks, each with the real response and the errors hit on the way
FindingsWhat does it do here, where the docs are silent or wrong54 questions, grouped by the phase they bite in

Read it

Nothing to install. Clone it and give an agent one line.

git clone https://github.com/ksallee/sg-groundtruth
Read sg-groundtruth/corpus/INDEX.md first.
Open the door it names for the rules, and an entry only when a rule needs its evidence.

8 KB, generated: every entry by name, and which door answers the thing you already hold. A door under corpus/doors/ carries one line per entry and that entry's rules, copied whole. The entries behind them are much larger.

Fetch it

Or do not clone at all. Every page here has a markdown twin at its own URL with .md appended, and /llms.txt is the map: every entry by name, and the door to open for each way in.

Read https://sg-groundtruth.vercel.app/llms.txt first.
Open the door it names for the rules, and an entry only when a rule needs its evidence.
urlis
/llms.txt25 KB. The map: every entry by name with the URL of its markdown, and the door to open for each way in
/doors/field_types.mdOne door: a line per entry and that entry's rules, copied whole. Every door is on /doors
/findings.mdOne section, under the grouping its page draws
/findings/026_result_order.mdOne entry, which is corpus/findings/026_result_order.md byte for byte

The frontmatter is on a twin because it is what a client selects on: scope, phase, endpoints, tags, coverage. A twin is the shipped file and never the merged one, so it is the api level whatever the reading level on the page says. /sitemap.xml lists the rendered pages.

Mount it over MCP

The same corpus as 6 tools, so an agent looks up one entry instead of loading the index. Standard library only. Call filter_operators before building anything that filters.

PYTHONPATH=src python -m sg_groundtruth.mcp

PYTHONPATH is not optional: the package is not installed. Registration, for Claude Code and any other stdio client: docs/mcp.md.

Call the API with it

FPT is the client every probe here uses, so the corpus was measured through it. It holds a bearer, re-authenticates when it expires, and raises FPTError on a non-2xx with the body intact.

pip install sg-groundtruth
from sg_groundtruth.client import FPT

fpt = FPT.from_env()                  # FPT_API_SITE_URL, _SCRIPT_NAME, _API_KEY
page = fpt.get("/entity/versions")    # the parsed body: data, links

75 lines, requests and nothing else. get, post, put and delete take a path and pass every other keyword to requests, so params, json and files work as they do there. The wheel is the client and the tools, never the corpus: that is read from a clone, because every entry names the probe that produced it and re-running it is the point.

Put your own site in it

These pages cover any Flow PT site. One command measures yours: custom entities, field names, status vocabularies, projects.

cd sg-groundtruth
claude
/sg-groundtruth-setup

The command loads with the session, so start the agent inside the clone.

stepwhat happens
1Asks what you want run. It measures nothing silently
2Checks the toolchain
3Asks for five values, and says what each is for
4Proves them with two read-only probes
5Writes your site's documentation to corpus.local/
6Serves it on localhost, then hands you the four commands above
Writes to your siteNothing, unless a probe is run with --write
Project it may write intoThe sandbox you name, and no other
Where your data goescorpus.local/, gitignored, never leaves your machine

Add to it

commandwhat it does
/probe <question>Asks one question against your own site and records what came back.
/recipe <task>Records a call you got working, its real response, and the errors you hit.
/sg-groundtruth-adopt <path>Reads code that already calls this API. Each distinct call becomes a recipe, and each retry loop, sleep and swallowed error becomes a probe.
/inspect-site [project]Measures one project and proposes a profile, with the evidence beside it.

Probes

A probe asks one question, prints what the API answered, and deletes anything it created. It never writes the corpus: an agent reads the output and writes the entry.

python probes/017_filter_operators.py

Every entry names the probe that produced it. Run it against your own site to check.

Scopes

Every file declares a scope.

scopetrue ofpublic
apiAny Flow PT site: status codes, error strings, value shapes, operator vocabulariesYes. The default, and all a public build has
siteOne site: which custom entities are enabled, which fields exist, valid_values, /preferencesNo
projectOne project inside it: hidden_values, page columns, fill ratesNo

valid_values is byte-identical at every scope. Only hidden_values varies by project, so "which statuses can I use" has no site-level answer (probe 009).

Badges mark the scope: blue api, orange site, green project. A public build has only api.

The overlay

/sg-groundtruth-setup writes corpus.local/. These pages read it and render its sections beside the api ones. It is gitignored, so it cannot reach a deployment.

Drop a markdown file in the matching directory. Nothing has to be registered.

corpus.local/site/findings/<nnn>_<slug>.md               one Flow PT site
corpus.local/site/findings/field_types/<type>.md
corpus.local/site/findings/entity_types/<Type>.md
corpus.local/site/recipes/<nnn>_<slug>.md
corpus.local/projects/<id>/findings/<nnn>_<slug>.md       one project inside it
corpus.local/projects/<id>/findings/field_types/<type>.md
corpus.local/projects/<id>/findings/entity_types/<Type>.md
corpus.local/projects/<id>/recipes/<nnn>_<slug>.md

Frontmatter is the shape the shipped corpus uses. The scope must match the directory, so a local measurement cannot ship as a general fact. A scope: project file also names its project. Every field: site/README.md.

MCP servers for Flow PT

These call the API. This corpus says what the API does. An agent given both has to be told which is which.

Each is MIT licensed and maintained. What is recorded was read from their source at a pinned commit, in RESEARCH-mcp.md. Nothing was installed and no agent was measured using one.

serverwhat it is
fpt-mcpPython. Bundles its own REST reference. This corpus adds the operator vocabulary per data type, and the condition that ends a paged read.
ShotgunMcpGoGo. Per-data_type operator and value tables. The matrix here was measured against a live site, and covers the color type and the read shapes for float and status_list.
shotgrid-mcp-serverPython, on PyPI, wrapping shotgun_api3. Its status resource exposes a field's valid values. The usable set is those minus hidden_values, which it does not subtract for you (field_types/status_list).

Every entry on this site is the output of a probe in probes/. The corpus is generated by running those probes against a live Flow Production Tracking site, not written from memory.

Not affiliated with or endorsed by Autodesk. Flow Production Tracking is their product; this is an independent record of how its REST API answers.