Skip to content

Commit e421db3

Browse files
committed
docs(dev): Record three gp-sphinx defects
Browsing the built site surfaced three defects that belong to the docs toolchain rather than to this server. Two are pre-alpha-old and live on the published site; none is worked around here, because a downstream patch would hide a defect in code this project does not own. sphinx-gp-llms emits a Markdown-twin link for every page while writing twins only for source documents, so genindex, py-modindex and search each link to a file that never exists -- the only three broken links among 228. sphinx-inline-tabs' tabs.js never reaches _static although its stylesheet does, so 103 pages log a 404. Switching survives on CSS alone; cross-group sync does not, which is visible on the installation page. The cause is not isolated and the entry says so rather than guessing. sphinx-autodoc-fastmcp strips FastMCP's prompt-argument note by matching the FastMCP 3 wording, which FastMCP 4 changed, so the note now renders seven times on the prompts page.
1 parent 0935a74 commit e421db3

2 files changed

Lines changed: 93 additions & 0 deletions

File tree

‎CHANGES‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ depends on the client, since measured agent CLIs do not send
8383
`completion/complete`. The retired claims are pinned as forbidden text, so the
8484
page cannot drift back to underclaiming a shipped feature.
8585

86+
**Defects owned by a dependency are written down**
87+
88+
{ref}`upstream-issues` gains three: Markdown-twin links emitted for generated
89+
pages that have no twin, `tabs.js` never reaching `_static` while its
90+
stylesheet does, and FastMCP 4's reworded prompt-argument note surviving into
91+
the rendered prompts page. None is worked around here.
92+
8693
**The toolset migration notes reach the migration page**
8794

8895
The 0.1.0a21 notes mapping the retired tiers onto `inspect`, `manage`,

‎docs/dev/upstream-issues.md‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,89 @@ rather than being deliberate.
4545
**Workaround.** None applied here. Narrowing it downstream would mean catching
4646
and re-raising in every handler, which trades a wrong error code for a worse
4747
one — the middleware exists precisely so handlers do not do that.
48+
49+
## sphinx-gp-llms: Markdown-twin links are emitted for pages that have no twin
50+
51+
**Status.** Drafted, not filed.
52+
53+
**Summary.** Two places disagree about which pages get a Markdown twin.
54+
`sphinx_gp_llms/__init__.py` sets `context["llms_md_url"] = pagename + ".md"`
55+
on `html-page-context`, which fires for every page. `_md_twins.py` writes the
56+
twins by iterating `app.env.found_docs`, which holds only real source
57+
documents. Sphinx's generated pages are not source documents, so they receive
58+
the link without the file.
59+
60+
**Why it matters.** Every site using the extension ships exactly three broken
61+
links — `genindex`, `py-modindex` and `search`. Sphinx does not warn, because
62+
these are raw template links rather than resolved references, so a `-W` build
63+
stays green and no gate catches them.
64+
65+
**Observed on this server.** Of 228 unique internal links across 129 built
66+
pages, these three are the only broken ones. The per-page link works
67+
everywhere else: `/index.md` resolves.
68+
69+
**Suggested fix.** Set `llms_md_url` only when a twin was actually written —
70+
gate it on `pagename in app.env.found_docs`, or on the same exclusion logic
71+
`_md_twins` already applies.
72+
73+
**Workaround.** None applied here.
74+
75+
## sphinx-inline-tabs: `tabs.js` is never copied, though `tabs.css` is
76+
77+
**Status.** Drafted, not filed. Cause not isolated.
78+
79+
**Summary.** `sphinx_inline_tabs` ships `tabs.css` and `tabs.js` side by side
80+
in one package static directory and registers both from `setup()`. Only the
81+
stylesheet reaches `_static`. The built `tabs.css` is byte-identical to the
82+
package's copy, so the static directory is being copied and the script alone
83+
is dropped.
84+
85+
**Why it matters.** Every page that loads the script — 103 of 129 here —
86+
logs a 404. The published site has the same defect.
87+
88+
**Observed on this server.** Tab *switching* still works, because the
89+
extension drives it through radio inputs and `:checked` rather than script.
90+
What breaks is cross-group synchronisation, which is the script's job: on the
91+
installation page, choosing `pip` in the first `uv`/`pip` group leaves the
92+
second group on `uv`, so two blocks describing one workflow disagree.
93+
94+
**Suggested fix.** Unknown. `sphinx-vite-builder` hooks before
95+
`copy_static_files` rather than filtering it, nothing in the toolchain
96+
touches `js_files` or `script_files`, and the theme's only reference to
97+
inline-tabs concerns bundled CSS. Isolating this needs someone with context
98+
on the asset pipeline.
99+
100+
**Workaround.** None applied here. Vendoring the script into this project's
101+
own `_static` would hide a defect that is live in production and is not this
102+
project's to own.
103+
104+
## sphinx-autodoc-fastmcp: FastMCP 4's prompt-argument note is no longer stripped
105+
106+
**Status.** Drafted, not filed.
107+
108+
**Summary.** FastMCP appends a schema hint to a prompt argument's
109+
description, and the collector strips it by matching the FastMCP 3 wording as
110+
a literal prefix. FastMCP 4 reworded it, so the note now survives into the
111+
rendered page. Both wordings need matching rather than one replacing the
112+
other, because one released collector serves projects on either major.
113+
114+
**Why it matters.** The note renders as documentation. It lands inside the
115+
prompt's argument table, appended to the authored description, so a reader
116+
sees machine text presented as prose.
117+
118+
**Observed on this server.** Seven occurrences of the FastMCP 4 wording on
119+
the built prompts page and none of the FastMCP 3 wording. The docs build
120+
stays green and emits no warning, so no gate here catches it. A row reads:
121+
"The shell command to run. Provide a value matching the following JSON
122+
schema: ... Encode non-string values as JSON."
123+
124+
**Suggested fix.** Match both wordings. FastMCP 3 emits "Provide as a JSON
125+
string matching the following schema:"; FastMCP 4 emits "Provide a value
126+
matching the following JSON schema:".
127+
128+
**Also.** The JSON inside that note renders with typographic quotes, because
129+
MyST's `replacements` extension reaches it. Stripping the note removes the
130+
symptom here, but any authored argument description containing literal JSON
131+
would be rewritten the same way.
132+
133+
**Workaround.** None applied here.

0 commit comments

Comments
 (0)