Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
Contributor
Author
Contributor
Author
Contributor
Author
Contributor
Author
1 similar comment
Contributor
Author
Restructure the public site around the products that actually exist, remove every staging entry point, and make FernDesk sync production-only. Public IA - docs.json: Get started | Chat | Code | Bot | CLI | API | Changelog, with Get started -> Build by product -> API reference -> Operate mirroring a platform docs site. Home rewritten in that order, replacing the help-center "How can we help" landing. - Design is gone as a product vertical: pages, tab, footer entry, home card, banner, and the five links pointing at it. Its one durable idea — a document panel beside a conversation — is Chat's canvas and stays documented there. - Folded duplicate hubs into their product pages (chat/code/bot/design overview -> index, chat/streaming -> chat/how-it-works, code/cli -> CLI, platform -> api/overview, getting-started/desktop -> downloads). 87 pages, 87 nav entries, no orphans, with redirects for every removed path. Staging - Removed the staging mirror: no staging pages, nav, redirects, or copy. The sync refuses any FERNDESK_TARGET but production, the workflow no longer offers a staging choice, and check-docs-site now fails on staging in navigation, redirects, or page copy. FernDesk sync correctness - Article identity is now the Mintlify `path:<rel>` marker, not the slug. FernDesk rewrites a taken slug (`chat` -> `chat-8hul5`), so resolving by slug made a cache-losing run miss its article and create another copy — the cause of the live site's nine `index-*` articles and duplicate hubs. The scan indexes by path, reports duplicates, and the cache carries the path index. - FERNDESK_RETIRE=1 unpublishes duplicates and articles whose page is gone, keeping the canonical article and never touching a hand-written one. Also: AGENTS.md rewritten as the source of truth for this tree, README and scripts/FERNDESK.md updated for FernDesk, and the retired fake-UI SVG plates plus their generator deleted. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
"Designer" was the upstream renderer's name for the pack, but it reads as the retired Design product on a site where Design is not a vertical. Name the pack for what it is. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Two drift classes this refactor fixed by hand are now checked, so the next change cannot quietly reintroduce them. - **Orphaned pages.** An MDX page no navigation entry reaches still syncs to FernDesk and still gets indexed, but no reader can navigate to it. That is how the tree grew a second hub for every product (`chat/overview` beside `chat/index`). CI now fails on any page the sidebar cannot reach. - **Catalog drift.** `problems/index.mdx` is hand-maintained while the pages beside it are generated in lockstep with the backend. CI now checks both directions: every problem page is linked from the index, and every link has a page. Both are covered by new cases in check-docs-site.test.sh (orphan, catalog missing a page, catalog linking a ghost code). Content pass alongside it: - The CLI hub's card grid duplicated the sidebar entry for entry. It now keeps a curated set of six cards and lists the rest in a table, so the page adds orientation instead of repeating navigation. - `getting-started/settings` and `security/overview` carried near-identical Data & privacy tables. Settings now says where each control lives; Security stays the canonical account of what each one stores and means. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- The quickstart listed the four surfaces twice: once as a step, then again as a card grid. The card grid stays, with its descriptions. - System status said "check status.cortex.foundation" three times and closed on a note about brand colours and domain hosting, which is internal reasoning rather than something a reader needs. The page now states what the status site covers and when to use it, once. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
echobt
force-pushed
the
droid/2a5c5e50-docs-ferndesk-prod-refactor
branch
from
September 16, 2026 13:55
a750bd9 to
b55a47f
Compare
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.
What this changes
Restructures
docs.cortex.foundationaround the products that actually exist, removes every public staging entry point, and makes the FernDesk sync production-only.The live site was serving a staging mirror at
/staging/*, a Design vertical in the nav and footer, and duplicate hub pages under hashed slugs (/chat-8hul5beside/chat-5ywlo, nineindex-*articles). Home was a generic help-center landing ("How can we help"). All four are addressed here.Public IA
docs.jsonnow reads as a platform docs site:Get started | Chat | Code | Bot | CLI | API | Changelog
with Home ordered Get started → Build by product → API reference → Operate, replacing the help-center landing.
/chat/canvases.chat|code|bot|design/overview→ the product index,chat/streaming→chat/how-it-works,code/cli→ the CLI tab,platform→api/overview,getting-started/desktop→getting-started/downloads.redirectsentry for every removed path. An internal-link audit reports 0 broken links.No public staging
FERNDESK_TARGETmust beproduction; anything else exits2before a single API call. The workflow no longer offers a staging choice.check-docs-site.mjsnow fails on staging in navigation, redirects, or page copy, with three new cases incheck-docs-site.test.shholding the line.FernDesk sync correctness (root cause of the noisy slugs)
FernDesk rewrites a slug it considers taken — a create for
chatis stored aschat-8hul5. The sync resolved identity by slug, so a run that lost its cache scanned the section, saw nochat, and created the page again under a fresh hash. That is how the public site accumulated duplicate hubs and nineindex-*articles.Identity is now the
path:<rel>marker written intokeywords, which survives the rewrite:by_slug,by_path, andduplicates.DUPLICATESline andSUMMARY.duplicatesreport a page with more than one article.FERNDESK_RETIRE=1unpublishes duplicates and articles whose page no longer exists — keeping the canonical article, and never touching a hand-written FernDesk article (nosource:mintlifymarker).Docs
AGENTS.mdrewritten as the source of truth for this tree: IA contract, the allowed public products, writing rules, visual rules, what must never be published, the FernDesk sync rules including path identity, and the check commands.README.mdandscripts/FERNDESK.mdupdated for FernDesk (not Mintlify-only), the production-only rule, and the retire path.scripts/generate-docs-frames.pydeleted.Test plan
index-*copies, a stalestaging/index): keeps one canonical per path, retires the rest, skips the hand-written article.Not in this PR
node scripts/check-docs-site.mjs ../backendif you want the router check too.Follow-up after merge
Deleting and renaming pages does not remove their FernDesk articles — the sync upserts and never deletes. Once this lands on
main, run the sync with retire enabled to unpublish the staging mirror, the duplicate hubs, and the removed pages:or dispatch the workflow with retire checked. It unpublishes; it never deletes.