> ## Documentation Index
> Fetch the complete documentation index at: https://aceup.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Lessons

# Lessons — aceupdocs

* \[2026-09-11] **studio cannot push to GitHub over git; xhuntr can.** `git push`
  and even `git ls-remote` hang indefinitely from studio (they do not fail, they
  hang — `GIT_TERMINAL_PROMPT=0` does not make them fail fast either). Plain
  HTTPS to GitHub from studio is fine: `api.github.com` returns 200 in 0.2s and
  `github.com/<repo>.git/info/refs` correctly returns 401 for a private repo. So
  it is git's transport specifically, not the network and not credentials.
  → **Push from xhuntr.** `rsync -az --delete <repo>/ xhuntr:<same path>/` then
  `git push` there. Verified working: the whole 20 MB repo with 6 commits of
  history pushed in one go. The GitHub MCP (authenticated as `nxsdevv`) also
  works from studio for creating repos and reading files, so use it for
  verification.

* \[2026-09-11] **Two different "Mintlify MCP"s — do not conflate them.**
  `app.mintlify.com/<org>/<project>/products/mcp` is an MCP server Mintlify
  auto-generates **from** your published docs, for your readers' AI tools. It is
  unrelated to `https://mcp.mintlify.com`, the **admin** MCP used to edit and
  publish docs. Only the second one publishes anything, and it has **no
  asset-upload operation** — which is why a git-backed repo is the only route
  that carries the 30 screenshots.

* \[2026-09-11] **Build docs from the running code, never from the design
  artifacts.** `rhbot/docs/ARTIFACT-GAPS.md` exists because the shipped build and
  the Claude artifacts disagree on nearly every screen, and it says the build
  wins. Writing from `SCREENS.md` prose is what produced those gaps in the first
  place. One claim did slip through from artifact prose — that the public verify
  page shows a whole shared-table round — and was wrong: it is a four-field
  verifier form. Caught by grepping `public/verify/index.html`.

* \[2026-09-11] **Check `.env` for overrides before publishing any configured
  number.** `config.ts` parses money policy as `int(NAME, fallback, …)`, so a
  live override diverges silently from the code default — exactly how the XHuntr
  docs shipped wrong prices. Verified by counting keys (`grep -cE '^KEY=' .env`)
  without ever opening the file: all nine money keys absent, so the fallbacks are
  the live values.

* \[2026-09-11] **The Mintlify Admin MCP CAN publish — I was wrong to say it
  couldn't.** The token stored on xhuntr works from anywhere via plain JSON-RPC
  over HTTP; it is not tied to that box. Two gotchas cost time: Cloudflare
  1010-blocks a bare Python user-agent (send `User-Agent: node`), and a session
  goes stale after `save` merges, so `update_config` fails with
  `no_editor_metadata` until you `checkout` with a fresh `branch`. What it
  genuinely cannot do: upload assets (zero asset operations in the SDK,
  verified by search) and connect a GitHub repo (dashboard-only; `workflows.*`
  needs a Pro entitlement).

* \[2026-09-11] **Status codes are not verification — look at the page.** All 41
  pages returned 200 and 832 image refs resolved, and only `webshot` revealed
  CORS failures in the console. They turned out cosmetic, but the check that
  found them was the visual one, not the HTTP one. Equally, `create_node` on a
  path that already exists silently attaches to the existing file instead of
  seeding content: the homepage was an empty `index.mdx` and `/` served a
  redirect loop, while every status check said 200.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.