docs: resolve the 20 orphaned pages — 10 re-nav'd, 10 deleted with redirects (#2253) - #2293
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.
| * 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.
Type the Witnet valueFor ABI as bytes4, matching the Solidity block above and the upstream interface; the bytes32 form selected a function the proxy does not have. Rename the heading over that Python snippet. Sentence-case the from-ethereum headings the PR rewrites, and turn the question heading into a statement. Point /protocol/identity/index at the SocialConnect page, the same destination as /celo-codebase/protocol/identity/index.
…ing siblings - Point the four testnet disclaimer sources at /tooling/testnets/celo-sepolia/index instead of /tooling/testnets/celo-sepolia/disclaimer, which #2293 turned into a redirect source (Mintlify takes one hop, so all four 404'd) - Point /general/ecosystem/daos at /contribute-to-celo instead of the page #2301 deleted, matching its three siblings - Add /about-celo, /about-celo/manage/exchange and /about-celo/protocol/consensus above the /about-celo/:slug* wildcard, which would otherwise send them to 404s - Add the four testnet landing pages, /oracle and /network/cannoli - Add the nine /protocol/identity/* siblings, mirroring the /legacy/protocol/identity destinations already on main - Align the two new dappkit .../usage entries with main's contractkit convention Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ANALYTICS.md is internal maintainer documentation, deliberately not in docs.json navigation. The orphan check began enforcing when #2293 removed its continue-on-error, so it now fails on the same category of file it already excludes for README.md, AGENTS.md and CLAUDE.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ANALYTICS.md is internal maintainer documentation, deliberately not in docs.json navigation. The orphan check began enforcing when #2293 removed its continue-on-error, so it now fails on the same category of file it already excludes for README.md, AGENTS.md and CLAUDE.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.