docs: resolve the 20 orphaned pages — 10 re-nav'd, 10 deleted with redirects (#2253) - #2293
docs: resolve the 20 orphaned pages — 10 re-nav'd, 10 deleted with redirects (#2253)#2293GigaHierz wants to merge 4 commits into
Conversation
palango
left a comment
There was a problem hiding this comment.
Reviewed the full change set against the PR head (6579bf5). The mechanics mostly check out: all ten new nav entries exist on disk with no duplicates, all ten redirect destinations exist and are in nav, docs.json parses, check-orphans.sh passes at head, and the /build#celo-l2-mainnet anchor resolves. Fifteen findings survived verification; twelve are inline comments on the diff, and the three below anchor on lines outside it.
Ranked, most severe first: 1. legacy-URL redirect chains (inline, docs.json:573) 2. from-ethereum content errors (inline) 3. migrating-to-viem Alfajores content and broken examples (inline) 4. hardhat prerequisites dead-end (inline) 5. mis-aimed deletion redirects (inline, docs.json:609) 6. socialconnect redirects not tightened (below) 7. orphan-gate blind spots (inline, check-orphans.sh) 8. circular foundry.toml promise (inline) 9. Foundry invisible in list and sidebar (inline) 10. segment-dropping wildcards (below) 11. nonexistent "Edit this page" control (inline) 12. stale duplicate lede (inline) 13. emoji headings on the socialconnect page (inline) 14. wit-oracle fence tags (inline) 15. orphaned image assets (below).
Socialconnect redirects not tightened (docs.json 3085, 2229, 753/761/789/3321). This PR adds build-on-celo/build-on-socialconnect to navigation, which was the recorded precondition for re-pointing these. /build/build-on-socialconnect (line 3085) is the page's own legacy path and still lands on /build-on-celo/index. /protocol/socialconnect (2229) still leaves the site for self.xyz, a different product per the Self/SocialConnect split in AGENTS.md section 7. The identity-concept sources at 753, 761 and 3321 still point at the ContractKit ODIS API page, as does 789, whose #using-the-mapping-for-payment fragment matches no heading there while the socialconnect page opens with exactly that payments use case. The ODIS-specific sources (769, 821, 3337) are fine as they are.
Segment-dropping wildcards (docs.json 2609, 2613). /developer/setup/:slug* and /developer/migrate/:slug* both rewrite to /tooling/overview/:slug*, dropping a path segment, so all six legacy /developer/setup/* URLs and /developer/migrate/from-ethereum 404. This predates the PR, but the PR retires the setup pages and publishes from-ethereum, and it forecloses the one-line wildcard fix because the corrected targets are now redirect sources themselves. While the redirect set is open: explicit /developer/setup/* entries mirroring the new block at 573-596, plus /developer/migrate/from-ethereum and the three celo-for-eth-devs sources (1433, 1513, 1557) pointed at /tooling/overview/migrate/from-ethereum, which now answers exactly that question.
Orphaned image assets. Deleting replit.mdx and wallet.mdx leaves img/doc-images/deploy-replit/ (12 PNGs, 6.9 MB) and img/doc-images/testnet-wallet/ (6 PNGs, 1.0 MB) with zero references anywhere in the tree. Nothing in CI catches unreferenced images, so git rm -r both directories in this PR while the deletions are in context.
| }, | ||
| "redirects": [ | ||
| { | ||
| "source": "/tooling/overview/setup/overview", |
There was a problem hiding this comment.
These ten redirects cover the current paths of the deleted pages, but older wildcards further down the array rewrite legacy URLs onto these same paths, and Mintlify only takes one hop. Six URLs that resolved at the base commit now 404:
/developer/verify/foundry(wildcard at line 2585)/network/alfajores/disclaimer,/network/baklava/disclaimer,/network/celo-sepolia/disclaimer(2745/2753/2761)/wallet/coinbase-wallet(2789)/build/support(the/build/:slug*wildcard at 2557 matches before the specific/build/supportentry at 3149, which is now dead code)
Each needs a specific entry above the wildcard, pointing at the final destination already chosen here. AGENTS.md section 2: point at the final page, not at another redirect.
| --- | ||
| title: Celo for Ethereum Developers | ||
| og:description: Overview of the similarities and differences between the Celo and Ethereum blockchains. | ||
| description: Overview of the similarities and differences between the Celo and Ethereum blockchains |
There was a problem hiding this comment.
Adding this page to navigation publishes content that contradicts the canonical pages:
- Line 78 says Celo "uses EigenLayer as the data settlement layer". It is EigenDA, for data availability (AGENTS.md section 7,
/operate/specification/eigenda). - Line 16 says "1 second block finality" and line 78 "all blocks are finalized immediately... no need to wait for more than 1 block confirmation". AGENTS.md rules out the 1-second-finality phrasing; L2 finality follows Ethereum (
/operate/specification/finality). - Line 84 has a reversed link,
(transaction types)[/what-is-celo/...], which renders as plain text, and even fixed the path dead-ends: the/what-is-celo/using-celo/protocol/:slug*wildcard rewrites to singular/home/protocol/transaction/...while the page lives undertransactions/. The working target is/home/protocol/transactions/transaction-types. - Lines 67-107 still recommend Celo Rosetta and celo-blockchain and describe L1 epoch-block receipt behavior.
Worth a content pass before this enters the sidebar, or hold the page back for #2257.
| --- | ||
| title: Migration document from Contractkit | ||
| og:description: How to migrate from ContractKit to viem. | ||
| description: How to migrate from ContractKit to viem |
There was a problem hiding this comment.
This page enters the nav with content AGENTS.md rules out and code that does not run:
- Alfajores references at lines 21, 194 and 234 ("Alfajores (44787) is retired - do not reference it"). Line 234's Alfajores USDm address is passed as
feeCurrencyon a mainnet client at line 247, which reverts on chain. tokenAddresses["StableToken]at lines 156 and 174 is an unterminated string literal.publicClient.getAddresses()(42),walletClient.sendSignedTransaction(...)(80) andsendTransactionstraight aftersimulateContract(185) are not viem APIs; AGENTS.md: every example that stays must run.- The title is "Migration document from Contractkit" with no
sidebarTitle, so that misspelled label is what the sidebar shows, while the sunset banners on the sibling pages call this "the migration guide".Migrating to viemwould match.
Either fix the page in this PR or hold it out of nav until it is fixed; publishing as-is ships broken examples on the recommended migration path.
| - [Using Windows](/tooling/overview/setup/windows) | ||
| - [Using Mac](/tooling/overview/setup/mac) | ||
| - [Using Replit](/tooling/overview/setup/replit) | ||
| Node.js and a package manager installed locally, and an account funded from the [Celo Sepolia faucet](https://faucet.celo.org/celo-sepolia). To deploy without a local environment, use [Remix](/tooling/dev-environments/remix) instead. |
There was a problem hiding this comment.
This sentence replaces the only route readers had to account-creation guidance, and the guide now dead-ends: the config below requires process.env.MNEMONIC with derivation path m/44'/52752'/0'/0, and after this PR no page in the repo explains how to obtain one. The natural reading of the new prerequisite (MetaMask plus faucet) does not produce a usable mnemonic either; tooling/wallets/metamask/use.mdx says MetaMask cannot export or import along the Celo derivation path. Cheapest fix: link celocli account:new (tooling/libraries-sdks/cli/account.mdx, in nav) with a note on the derivation path, or switch the example to a private-key account.
| "destination": "/tooling/testnets/celo-sepolia/index" | ||
| }, | ||
| { | ||
| "source": "/tooling/wallets/coinbase-wallet", |
There was a problem hiding this comment.
Three of the new destinations do not answer the question the deleted page answered (AGENTS.md section 2: redirect to the nearest page that answers the same question):
- This one: tooling/wallets/index.mdx never mentions Coinbase and has no chain params. The deleted page's
wallet_addEthereumChain/wallet_watchAssetcontent survives near-verbatim at/tooling/wallets/metamask/setup(in nav), which is the better target. /tooling/overview/setup/wallet(585) goes to the Celo Sepolia network page, which has faucet links but nothing on creating or importing a wallet;/tooling/wallets/metamask/add-celo-testnet-to-metamaskcovers both./tooling/overview/setup/replit(589) goes to a dev-environments index that never mentions Replit or any no-install path;/tooling/dev-environments/remixis the surviving browser-only option, as the new hardhat.mdx prerequisite itself says.
| - [Using Remix](/developer/verify/remix) | ||
| - [Using CeloScan](/developer/verify/celoscan) | ||
| - [Using Hardhat](/developer/verify/hardhat) No newline at end of file | ||
| - [Using Hardhat](/tooling/contract-verification/hardhat) |
There was a problem hiding this comment.
Foundry is missing from this list even though the "Using Foundry" section is two lines below it, and it is also absent from the Contract Verification sidebar group in docs.json, so someone scanning either surface sees four methods and concludes Foundry is not covered. Minimum fix: add - [Using Foundry](#using-foundry) here. The symmetric alternative is to keep foundry.mdx as a fifth page in the group alongside Hardhat, Blockscout, Remix and Celoscan.
| - Longer-form discussion: the [Celo Forum](https://forum.celo.org/). | ||
| - Updates: the [DevDesk mailing list](https://embeds.beehiiv.com/eeadfef4-2f0c-45ce-801c-b920827d5cd2) and [CeloDevs on X](https://x.com/CeloDevs). | ||
|
|
||
| Something missing or unclear in these docs? [Open an issue](https://github.com/celo-org/docs/issues/new) or use "Edit this page" at the bottom of any page. |
There was a problem hiding this comment.
docs.json has no feedback key, and Mintlify only renders the suggest-edits control when feedback.suggestEdit is configured, so there is no "Edit this page" at the bottom of any page; a reader following this instruction finds nothing. The sentence came over from the deleted support page, but since it is being rewritten anyway: either add the feedback block to docs.json in this PR or drop the clause and keep the issue link.
|
|
||
|
|
||
|
|
||
| How to verify contracts deployed on Celo. |
There was a problem hiding this comment.
Leftover from the rewrite: this line plus the --- under it restate the frontmatter description right above the new lede at line 11, so the page opens with the same sentence twice and a stray rule. Suggest deleting lines 7-9. While in the file, ## Verify Contracts on Celo on line 13 should be sentence case; the AGENTS.md heading rule explicitly covers rewritten pages.
| --- | ||
| title: Introduction to SocialConnect | ||
| og:description: A beginner's guide to understanding and using SocialConnect | ||
| description: How SocialConnect maps phone numbers and other identifiers to Celo addresses |
There was a problem hiding this comment.
Publishing this page while editing its frontmatter leaves all four headings against the AGENTS.md heading rules this same PR applies to wit-oracle.mdx: emoji in every heading, a question heading on a non-FAQ page, and "Further Reading", which AGENTS.md names as an out-of-vocabulary synonym. The emoji also end up in the generated anchor slugs, so plain #key-features-style deep links scroll nowhere, and mint broken-links does not validate anchors. Separately, the page has zero internal links (everything points at socialconnect-docs.vercel.app), which makes the AGENTS.md-canonical page for phone-number mapping a dead end in the link graph.
| * https://docs.witnet.io/smart-contracts/witnet-data-feeds/addresses | ||
| */ | ||
| constructor(IWitnetPriceRouter _router)) | ||
| constructor(IWitnetPriceRouter _router) { |
There was a problem hiding this comment.
Good catch on the constructor. The fence this block sits in is still tagged javascript though, as are the other two on the page: lines 36 and 106 are Solidity, and the snippet at line 76 mixes Python calls with // comments and parses in neither language. Since this PR already edits inside the first block, worth retagging the fences and fixing the line-76 snippet in the same pass.
There was a problem hiding this comment.
Fences and the constructor are fixed. The web3 snippet parses as Python now, but it still won't run: the ABI string types _id as bytes32 while the call passes four bytes.
web3 7.16.0
bytes32 + bytes.fromhex("9ed884be") -> MismatchedABI
bytes4 + bytes.fromhex("9ed884be") -> OK 0xd2476bd49ed884be00...
The bytes32 is the wrong half, not the argument. The Solidity block above already calls router.valueFor(bytes4(0x24beead4)), and Witnet types these IDs as bytes4 upstream: IWitPriceFeedsLegacy.sol declares latestPrice(bytes4 feedId) and documents hash() as returning "the ERC-2362 identifier of the given data feed caption string, truncated to bytes4". So "type": "bytes4" and "internalType": "bytes4", argument unchanged. That moves the selector from 0xf78eea83 to 0xd2476bd4, so it is not cosmetic; as written the snippet calls a function the proxy does not have.
Same block, smaller: the heading above it still reads #### Javascript example over a python fence.
One thing beyond this PR. IWitnetPriceRouter no longer exists in witnet-solidity-bridge: the interfaces directory now carries IWitPriceFeeds.sol with computeID4/getPrice(ID4), and the router shape has moved under legacy/. Both Solidity blocks on the page import a path upstream dropped. Worth its own issue rather than growing this one.
…directs (#2253) Applies the decisions recorded in the orphan-audit sheet. Every .mdx file on disk is now reachable from docs.json navigation, and the CI orphan check added in #2252 goes from report-only to gating. Re-nav'd in their current tab, no path moves: - tooling/overview/migrate/from-ethereum -> Tooling > Overview - build-on-celo/build-with-usat -> Build on Celo > Use Cases - build-on-celo/build-on-socialconnect -> Build on Celo > Use Cases - tooling/oracles/wit-oracle -> Tooling > Oracles - tooling/wallets/ledger/eip712-workaround-> Tooling > Wallets > Ledger Wallet - five ContractKit pages -> Tooling > Libraries & SDKs > ContractKit Deleted, each with a redirect to the nearest page that answers the same question: the six tooling/overview/setup pages, build-on-celo/support, tooling/contract-verification/foundry, tooling/testnets/celo-sepolia/disclaimer and tooling/wallets/coinbase-wallet. Three of those carried content that existed nowhere else, so it was folded into a live page before the delete rather than dropped: - the Celo Sepolia terms and conditions -> an Accordion on the testnet page - the support channels -> a "Get support" section on build-on-celo/index - the forge verify-contract commands -> a "Using Foundry" section on the contract-verification overview, which previously did not mention Foundry at all Inbound links repointed rather than left to redirects: the Hardhat page linked to three deleted setup pages, and the Foundry page linked to the deleted verification page. Also on the pages this touches: - og:description -> description on the nine re-nav'd pages that had it, so they carry a description into llms.txt now that they are reachable (#2239). - wit-oracle: emoji heading removed, and a Solidity example fixed that could not compile (`constructor(IWitnetPriceRouter _router))` -> `... _router) {`). - contract-verification overview: stale /developer/verify/* links updated to current paths. Verified: `scripts/check-orphans.sh` reports no orphan pages; `mintlify broken-links` reports no broken links. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…fixes, gate coverage Review fixes on #2253. Redirects. Mintlify takes one hop, and array order decides which entry matches, so a specific source below a wildcard is dead code. Six legacy URLs reached a page this PR deletes and would have 404d; three more were a regression from #2291, where /build/:slug* shadowed the thirdweb entries. Explicit entries for all of them now sit above the wildcards, along with the /developer/setup/* and /developer/migrate/from-ethereum paths that the segment-dropping wildcards never resolved. A resolver over the full array now reports zero chains, zero dead destinations and zero shadowed sources. Three redirect targets did not answer the deleted page's question: coinbase-wallet now goes to the MetaMask setup page that carries the same wallet_addEthereumChain content, setup/wallet to add-celo-testnet-to-metamask, and setup/replit to Remix, the surviving browser-only path. With socialconnect in navigation, the six identity-concept sources that pointed at the ContractKit ODIS API page now reach it, and the celo-for-eth-devs sources reach from-ethereum. Content on the pages this PR publishes: - from-ethereum said Celo "uses EigenLayer as the data settlement layer" (it is EigenDA, for data availability), claimed 1-second finality, had a reversed markdown link to a path that does not resolve, recommended the archived celo-org/rosetta, and linked precompiles at celo-blockchain v1.3.2. The precompile list now points at core/vm/celo_contracts.go in op-geth. - migrating-to-viem shipped code that cannot run: an unterminated string literal in two blocks, publicClient.getAddresses(), walletClient.sendSignedTransaction, and sendTransaction after simulateContract. The CeloTokens helper returned pairs, so indexing it by name never worked; it now returns a lookup. The Alfajores USDm address was passed as feeCurrency on a mainnet client — eth_call symbol() at that address on forno.celo.org returns no code. Replaced with the mainnet USDm address, verified to return "USDm". - hardhat's prerequisites dead-ended: the config needs a mnemonic on Celo's derivation path and no page explained how to get one. Now links celocli account:new and notes MetaMask cannot produce one. - contract-verification lost a duplicated lede, gained Foundry in its method list, and no longer promises a foundry.toml block that does not exist. - socialconnect lost its emoji headings, its question heading and "Further Reading", and gained a Related section — it had no internal links at all. - wit-oracle's Solidity blocks were tagged javascript, and the web3.py snippet parsed in neither language. - build-on-celo/index no longer points at an "Edit this page" control; docs.json has no feedback key, so it does not render. The orphan gate had two blind spots that became load-bearing once it fails CI: pages referenced by href or root were invisible to it, and .md was not matched at all. Both fixed, with tests confirming an orphaned .md is caught and an href-only reference is not a false positive. Deletes img/doc-images/deploy-replit and img/doc-images/testnet-wallet — 18 files, 7.9 MB, unreferenced once replit.mdx and wallet.mdx are gone. Verified: scripts/check-orphans.sh reports no orphan pages; mintlify broken-links reports no broken links. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
6579bf5 to
a3ce702
Compare
|
All 15 addressed in Finding 1 + 10 — redirect precedence. Confirmed the mechanism and it was worse than the six URLs you listed. I wrote a resolver that walks the array in order, expands Finding 2 — from-ethereum. Every item was right. EigenLayer→EigenDA, the finality phrasing, the reversed link and its non-resolving path. On the two you flagged as L1 leftovers I checked before rewriting: Finding 3 — migrating-to-viem. All four code defects confirmed. The one worth recording: so it would revert exactly as you said. Also: the Findings 4, 5, 6, 8, 9, 11, 12, 13, 14 — all applied as suggested. For 5 I took your three targets. For 9 I did the minimum fix (Foundry in the list); keeping Finding 7 — orphan gate. Both gaps closed, and I tested them rather than assuming: The Finding 15 — both directories gone, 18 files, 7.9 MB. One thing I did not do: add the
|
|
Reopening finding 11 — I got the call wrong, and the answer is more annoying than either of us assumed. The docs used to have an edit-a-page control and it is wanted back, so "drop the clause" was not the right resolution. But your diagnosis was correct and the fix you offered is not available: Zero hits for all four. There is no The closest supported mechanism is a custom entry in The GitHub-search alternative ( So this PR now carries the site-wide contextual entry after all, which is a bigger footprint than an orphan-audit PR would normally take. Say the word and I will split it out into its own PR — it is one object in
|
The sentence this replaces named an "Edit this page" control that does not render. Rather than promise a control, it names the repository and the flow GitHub provides from there. The context-menu entry that restores the per-page affordance is split out into its own PR, since it is a site-wide UI change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
c5c313a to
46500e9
Compare
|
Split done — the context-menu change is now #2297, and this PR is back to the orphan audit plus its review fixes only. What stayed here is one sentence on
|
| @@ -13,7 +13,7 @@ For a general overview of the Celo network and architecture, see [the Celo Overv | |||
|
|
|||
| ## What is Celo's Relationship to Ethereum? | |||
There was a problem hiding this comment.
Required change. Putting this page in the sidebar brings its headings under the AGENTS.md heading rules, the same ones this PR applied to socialconnect and wit-oracle.
Line 14 is a question heading on a page that is not an FAQ (AGENTS.md:72). Title case is still on lines 14, 23, 58, 89, 93, 99 and 103. AGENTS.md:71 does say not to mass-retitle old pages for case alone, but it scopes that to pages you are not otherwise touching, and this PR rewrites four sections of this one.
| @@ -2178,7 +2312,7 @@ | |||
| }, | |||
| { | |||
| "source": "/protocol/socialconnect", | |||
There was a problem hiding this comment.
Required change. /protocol/identity/index at line 2230 still points at https://self.xyz/. With this line fixed the two legacy identity paths now disagree: /celo-codebase/protocol/identity/index reaches the SocialConnect page this PR adds to nav, while /protocol/identity/index leaves the site for a different product. AGENTS.md section 7 keeps Self and SocialConnect apart, so self.xyz does not answer the identifier-mapping question. Give it the same destination as this line.
Closes #2253. Stacked on #2291 — base is
GigaHierz/2255-thirdweb-one-page, since the orphan check can only flip to gating once the three thirdweb orphans are also gone. Review that one first; this retargets tomainautomatically when it merges.What changed
All 20 non-thirdweb orphans resolved per the decisions in the audit sheet (the
Removecolumn plus itsNotes). Every.mdxon disk is now reachable fromdocs.jsonnavigation.Re-nav'd — current tab, no path moves (10)
tooling/overview/migrate/from-ethereumbuild-on-celo/build-with-usatbuild-on-celo/build-on-socialconnecttooling/oracles/wit-oracletooling/wallets/ledger/eip712-workaroundcontractkit/{data-encryption-key, migrating-to-viem, migrating-to-contractkit-v1, migrating-to-contractkit-v2, notes-web3-with-contractkit}Deleted with a redirect (10)
The six
tooling/overview/setup/*pages,build-on-celo/support,tooling/contract-verification/foundry,tooling/testnets/celo-sepolia/disclaimer,tooling/wallets/coinbase-wallet. Each redirect points at the nearest page that answers the same question, and none of them point at another redirect source.Two places the sheet and the repo disagreed
Worth a look, because in both cases the sheet's inbound-link count was 0 and the repo says otherwise.
1.
build-on-celo/build-on-socialconnect— kept, not deleted. MarkedRemove=TRUEwith inbound = 0, but it is linked from six in-nav pages:home/wallets.mdx:10,tooling/wallets/index.mdx:11,build-on-celo/build-with-self.mdx:50,build-on-celo/build-on-minipay/overview.mdx:102,contractkit/odis.mdx:25,contractkit/migrating-to-contractkit-v1.mdx:45. Re-nav'd into Use Cases next tobuild-with-self; all six links keep working. Please correct the row.2.
tooling/contract-verification/foundry— deleted, but its content was kept. Also marked inbound = 0; in facttooling/dev-environments/foundry.mdx:112linked to it, and deleting it outright would have left Foundry as the only deploy path in the docs with no verification instructions while Hardhat, Remix, Blockscout and Celoscan all keep theirs. Theforge verify-contractcommands are now a "Using Foundry" section on the contract-verification overview — a page that did not mention Foundry at all before — and the redirect lands there.Same treatment for the other two deletes that held unique content: the Celo Sepolia terms and conditions became an
<Accordion>on the testnet page, and the support channels became a "Get support" section onbuild-on-celo/index. Nothing that only existed on a deleted page was dropped.Inbound links repointed, not papered over
tooling/dev-environments/hardhat.mdxlisted three deleted setup pages as its prerequisites; that block is now a single sentence naming the actual prerequisites.tooling/dev-environments/foundry.mdx:112points at the new anchor.The CI check now gates
continue-on-error: trueremoved from.github/workflows/docs-validation.yml, and the stale "report-only" comment updated inscripts/check-orphans.sh. A new page that is not added to navigation now fails CI.Incidental fixes on pages this already touches
og:description→descriptionon the nine re-nav'd pages that carried it. These pages are enteringllms.txtfor the first time and would otherwise arrive with no description at all (Migrate frontmatter og:description to description on non-legacy pages #2239).tooling/oracles/wit-oracle.mdx: emoji heading removed per AGENTS.md, and the Solidity example fixed —constructor(IWitnetPriceRouter _router))had an unbalanced paren and a missing brace, so it could not compile. The sheet's "update to sepolia" note is already satisfied: docs(partners): link provider address catalogs instead of hardcoding partner contract addresses #2278 removed the hardcoded addresses, and the page describes Mainnet contracts with a mainnet RPC.tooling/contract-verification/index.mdx: the four/developer/verify/*links were stale redirect sources; now current paths.Verification
Unblocks #2256 (decides
coinbase-walletandledger/eip712-workaround), #2257 (decidesfrom-ethereumanddevelopment-chain), #2258 and #2259.