Skip to content

docs: add Changelog and Blog tabs powered by Mintlify Update component#296

Open
prasanna-anchorage wants to merge 5 commits into
mainfrom
docs/blog-and-changelog
Open

docs: add Changelog and Blog tabs powered by Mintlify Update component#296
prasanna-anchorage wants to merge 5 commits into
mainfrom
docs/blog-and-changelog

Conversation

@prasanna-anchorage
Copy link
Copy Markdown
Contributor

Summary

  • Adds two new top-level Mintlify tabs to the docs site, both built on Mintlify's native <Update> primitive so we get subscribable RSS without any custom tooling.
  • Changelog (/changelog) — curated, per-meaningful-release timeline. Backfilled with three entries covering the Solana preset wave, HTTP-gateway chain_metadata + content digests (PR feat: forward chain_metadata and expose digests in HTTP gateway #287), and surfpool mainnet-fork fuzz integration (PR test: surfpool mainnet-fork integration for built-in IDL fuzz path #202).
  • Blog (/blog) — stub list linking to full essay pages. Launches with Composable by design: how Solana presets stack — a concept piece that ties the recent preset wave to the build-time preset registry (visualsign-solana/build.rs) and the InstructionVisualizer / SolanaIntegrationConfig composition seams. Composability is the through-line.
  • Free RSS feeds at /changelog/rss.xml and /blog/rss.xml, courtesy of Mintlify's built-in <Update>-driven feed generation. No custom generator script, no CI diff check.
  • Adds docs/changelog/_drafts/ with a README documenting the in-PR fragment workflow: contributors drop drafts close to the change, maintainers batch them into <Update> blocks at curation time.

Composability emphasis

The blog essay walks through how 14+ recent Solana protocols shipped without touching any existing decoder or the core parser: each new directory under src/chain_parsers/visualsign-solana/src/presets/ is auto-registered by build.rs, dispatch is via visualize_with_any() matching on program id, and unknown_program always sorts last as the catch-all. The seams are the product — that's the headline.

Test plan

  • Mintlify auto-deploy preview renders /changelog with three <Update> blocks stacked, tag chips visible.
  • Mintlify auto-deploy preview renders /blog with one <Update> stub linking to the full essay page.
  • /blog/2026-05-13-composable-solana-presets renders the full essay with frontmatter title and description applied.
  • /changelog/rss.xml returns valid RSS 2.0 with three items and <category> elements per tag.
  • /blog/rss.xml returns valid RSS 2.0 with one item.
  • No broken internal links (manual review of /chains/solana, /changelog, /blog/... cross-links).
  • Voice guide adherence: sentence case, em-dashes, second-person, no Anchorage standalone, no / — all confirmed via grep at authoring time.

🤖 Generated with Claude Code

Adds two new top-level Mintlify tabs:

- /changelog with stacked <Update> blocks for curated release notes,
  backfilled with three entries covering the Solana preset wave,
  HTTP-gateway chain_metadata + digests, and surfpool mainnet-fork tests.
- /blog with one Update stub linking to the launch essay
  "Composable by design: how Solana presets stack" — a concept piece
  anchored in the build-time preset registry and the InstructionVisualizer
  composition seams.

Both surfaces ship subscribable RSS at /changelog/rss.xml and /blog/rss.xml
using Mintlify's built-in <Update>-driven feed generation — no custom
generator script or CI diff check.

Adds docs/changelog/_drafts/ with a README documenting the in-PR fragment
workflow: contributors drop draft fragments here, maintainers batch them
into Update blocks at curation time.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 13, 2026 16:54
@mintlify
Copy link
Copy Markdown
Contributor

mintlify Bot commented May 13, 2026

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
visualsign-parser 🟢 Ready View Preview May 13, 2026, 4:55 PM

Adds a minimal Containerfile that installs the `mint` CLI (npm package
`mint`, the official Mintlify CLI) on top of node:20-alpine. The docs
directory is bind-mounted at runtime so edits show up live in the dev
server — the image only carries the CLI.

Adds docs/Makefile with `make dev`, `make broken-links`, `make shell`,
and `make rss` targets. ENGINE defaults to docker; set ENGINE=podman to
swap. PORT defaults to 3000.

Updates docs/CLAUDE.md to point at `make -C docs dev` as the simplest
way to start the dev server, with a fallback note for host-installed
CLI users.

Verified locally: image builds in ~50s, `mint --version` returns 4.2.560.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Mintlify-powered Changelog and Blog sections to the docs site, using <Update> entries for release notes, blog stubs, and RSS feed generation.

Changes:

  • Adds Changelog and Blog tabs to docs.json.
  • Adds a changelog page with three release entries.
  • Adds a blog index, full Solana presets essay, and changelog draft workflow docs.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
docs/docs.json Adds top-level Changelog and Blog navigation tabs.
docs/changelog/_drafts/README.md Documents the draft fragment workflow for changelog entries.
docs/changelog.mdx Adds the new Update-based changelog page.
docs/blog.mdx Adds the new Update-based blog landing page.
docs/blog/2026-05-13-composable-solana-presets.mdx Adds the full Solana presets composability essay.
Comments suppressed due to low confidence (12)

docs/blog/2026-05-13-composable-solana-presets.mdx:49

  • This overstates the current Ethereum behavior. The only production call path I found for LayeredRegistry<ContractRegistry> ignores request options and returns LayeredRegistry::new(...), with wallet-provided token overrides left as a TODO in src/chain_parsers/visualsign-ethereum/src/lib.rs:191-208; with_request is only used in examples/tests. Please rephrase this as a planned capability or document the behavior that exists today.
If you're **integrating VisualSign into a wallet**, composability shows up at the data layer too. The Ethereum side uses `LayeredRegistry<T>` to compose wallet-provided overrides on top of compiled-in defaults — wallets can ship their own opinions about token metadata without forking VisualSign. The Solana side currently composes through fixed IDL + preset layers; wallet-side overlays are the natural next step.

docs/blog/2026-05-13-composable-solana-presets.mdx:53

  • This overstates the Surfpool setup as not needing a live cluster. The current test utility always configures an upstream mainnet RPC URL by default and the Surfpool tests are documented as requiring network access, so this should say the tests avoid executing directly on a live cluster while still needing live RPC access for the fork.
If you're **writing tests**, surfpool (PR #202) composes real Solana mainnet state into the local harness. Tests run against forked chain data, which catches drift between IDL assumptions and on-chain reality without a live cluster.

docs/blog.mdx:9

  • The stub names layered registries as one of the three composition primitives, but the full essay's "three pieces" are the built-in IDL parser, protocol-specific preset overlays, and the build-time registry. This mismatch makes the teaser inaccurate; it should refer to the build-time registry unless the essay is reorganized.
  Adding a new protocol to VisualSign rarely touches existing code. The recent Solana preset wave is a useful proof point: 14 protocols shipped without changes to existing decoders or the core parser. This post walks through the three composition primitives — the built-in IDL parser, protocol-specific preset overlays, and layered registries — and why each preset is a pure addition rather than a modification. [Read the full post](/blog/2026-05-13-composable-solana-presets).

docs/blog/2026-05-13-composable-solana-presets.mdx:34

  • available_visualizers() is described as a generated slice, but the generated function currently returns a Vec<Box<dyn InstructionVisualizer>> (build.rs formats pub fn available_visualizers() -> Vec<...>). Please use Vec, list, or collection here to avoid misleading readers who look for a slice API.
`available_visualizers()` is the generated slice. `unknown_program` always sorts last, so it catches anything no specific preset claimed. A preset registered for Jupiter's program id has zero knowledge of MetaDAO's preset, and vice versa. The dispatch lookup is the only coupling.

docs/blog/2026-05-13-composable-solana-presets.mdx:18

  • This is not quite accurate for new preset contributors: adding a preset directory is not the only registration step because src/chain_parsers/visualsign-solana/src/presets/mod.rs must also get a pub mod {snake_name}; entry (the solana-add-idl skill documents this as Step 4). build.rs discovers the visualizer for the generated registry, but Rust still needs the module declared.
3. **A build-time registry.** `build.rs` scans `src/presets/` and emits a generated `available_visualizers()` function — one `Box::new(<Dir>::<Pascal>Visualizer)` per directory. The build comment in the script puts the design intent plainly: "this should allow us to functionally compose instructions at the time of display." There is no central registration site to edit. Adding a directory is the registration.

docs/blog/2026-05-13-composable-solana-presets.mdx:43

  • This repeats the same registration inaccuracy: preset PRs do need to touch the shared src/chain_parsers/visualsign-solana/src/presets/mod.rs module list so the new directory is compiled, even though build.rs handles the generated visualizer registry. Please avoid saying nothing outside the preset directory changes.
Nothing else moved. Reviewers read each preset PR in isolation. CI sees no ripple.

docs/blog/2026-05-13-composable-solana-presets.mdx:57

  • The claim that there is "no list to drift out of sync" is contradicted by the required pub mod ... list in src/chain_parsers/visualsign-solana/src/presets/mod.rs, which must be updated for each new preset. The generated visualizer registry reduces one source of drift, but the module list still exists.
"Composable by design" is a phrase. The work is in keeping the seams clean as surface area grows. Build-time discovery of presets means there's no list to drift out of sync. Field builders mean two contributors emitting the same content produce identical bytes. A typed IDL view between the raw instruction and the preset means presets only see well-shaped input.

docs/blog/2026-05-13-composable-solana-presets.mdx:47

  • This contributor-facing checklist omits the shared module registration step. The solana-add-idl skill's Step 4 requires adding pub mod {snake_name}; to src/chain_parsers/visualsign-solana/src/presets/mod.rs, so describing the change as only one new directory will leave readers with an incomplete process.
If you're **adding a new Solana protocol**, the design pushes you toward a particular shape: one IDL, one visualizer, one config, a handful of fixtures, one new directory. The same shape your reviewer expects, the same shape we expect from ourselves. The `solana-add-idl` skill scaffolds this for you when the protocol exposes an on-chain IDL.

docs/blog.mdx:9

  • Calling each preset a "pure addition rather than a modification" is misleading because adding a Solana preset currently also modifies the shared src/chain_parsers/visualsign-solana/src/presets/mod.rs module list. The statement should distinguish generated registry discovery from the still-manual Rust module declaration.
  Adding a new protocol to VisualSign rarely touches existing code. The recent Solana preset wave is a useful proof point: 14 protocols shipped without changes to existing decoders or the core parser. This post walks through the three composition primitives — the built-in IDL parser, protocol-specific preset overlays, and layered registries — and why each preset is a pure addition rather than a modification. [Read the full post](/blog/2026-05-13-composable-solana-presets).

docs/blog/2026-05-13-composable-solana-presets.mdx:16

  • This does not match the current Solana preset interface. VisualizerContext passes raw Instruction data plus the IDL registry, and presets such as jupiter_borrow call parse_instruction_with_idl(&instruction.data, ...) and inspect discriminators themselves before building fields; they are not handed a precomputed typed IDL view by the core layer. Please rephrase the architecture so contributors do not expect a typed view to be provided automatically.
1. **A built-in IDL parser.** Any Anchor-style program with an IDL gets a typed view of each instruction — discriminator, account list, argument values — produced generically from the IDL alone. This is the `src/idl/` module. It does not know about Jupiter or Kamino.

2. **Protocol-specific preset overlays.** A preset is a small unit that says "for *this* program id, take the typed view and produce these human-readable fields." Presets implement `InstructionVisualizer` and declare which program id they handle via `SolanaIntegrationConfig`. They never parse bytes; they consume the IDL view and call field builders (`create_text_field`, `create_amount_field`, `create_raw_data_field`) to shape output. Each preset lives in its own directory.

docs/blog/2026-05-13-composable-solana-presets.mdx:57

  • The final sentence is inaccurate with the current API: presets receive VisualizerContext with raw Solana Instruction data and are responsible for invoking the IDL parser/fallback handling, so they do not "only see well-shaped input." This should be softened or updated to describe the actual raw-instruction-plus-IDL-registry boundary.
"Composable by design" is a phrase. The work is in keeping the seams clean as surface area grows. Build-time discovery of presets means there's no list to drift out of sync. Field builders mean two contributors emitting the same content produce identical bytes. A typed IDL view between the raw instruction and the preset means presets only see well-shaped input.

docs/blog/2026-05-13-composable-solana-presets.mdx:18

  • This is presented as a direct quote from build.rs, but the current comment does not match it exactly (allow use ... at the time of display too). Either quote the source verbatim or paraphrase without quotation marks.
3. **A build-time registry.** `build.rs` scans `src/presets/` and emits a generated `available_visualizers()` function — one `Box::new(<Dir>::<Pascal>Visualizer)` per directory. The build comment in the script puts the design intent plainly: "this should allow us to functionally compose instructions at the time of display." There is no central registration site to edit. Adding a directory is the registration.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docs/changelog.mdx Outdated

Subscribe via RSS at [`/changelog/rss.xml`](/changelog/rss.xml). Entries are tagged so you can filter by audience (`Wallet API`, `Contributors`, `Security`, `Ecosystem`), chain, or theme.

<Update label="2026-05-12 — Solana preset wave" description="14 new protocols decoded" tags={["Wallet API", "Contributors", "Solana"]}>
description: "Adding a new protocol to VisualSign rarely touches existing code. Here's how the IDL parser, preset overlays, and a build-time registry compose into one signable payload."
---

In the last few weeks, VisualSign gained decoding for Jupiter (Borrow, Earn, Perpetuals, v6 route_v2), Kamino (Borrow, Vault, Farms, Limit Orders), Meteora (DLMM, DAMM V2), MetaDAO (Futarchy, Conditional Vault), Orca Whirlpool, Onre App, Neutral Trade, DFlow Aggregator, and Exponent Finance. Fourteen protocols. Each PR added a single directory under `src/chain_parsers/visualsign-solana/src/presets/` and a handful of fixtures. None of them changed how any of the other presets decode, and none of them touched the core parser.
Comment thread docs/blog.mdx
Subscribe via RSS at [`/blog/rss.xml`](/blog/rss.xml). Posts are tagged by chain and theme. Each entry below is a stub — click through for the full essay.

<Update label="2026-05-13 — Composable by design: how Solana presets stack" tags={["Solana", "Architecture", "Contributors"]}>
Adding a new protocol to VisualSign rarely touches existing code. The recent Solana preset wave is a useful proof point: 14 protocols shipped without changes to existing decoders or the core parser. This post walks through the three composition primitives — the built-in IDL parser, protocol-specific preset overlays, and layered registries — and why each preset is a pure addition rather than a modification. [Read the full post](/blog/2026-05-13-composable-solana-presets).
@@ -0,0 +1,49 @@
# Changelog drafts

PR authors of user-facing changes drop a fragment here. A maintainer batches drafts into one or more `<Update>` blocks on `../changelog.mdx` when a meaningful release ships, then deletes the consumed drafts.
Comment thread docs/changelog.mdx Outdated
</Update>

<Update label="2026-05-12 — Surfpool mainnet-fork integration for IDL fuzz testing" description="PR #202" tags={["Contributors", "Solana"]}>
The built-in Solana IDL parser path is now fuzz-tested against real mainnet state via Surfpool. Composing live chain state into the local test harness catches drift between IDL assumptions and on-chain reality, without requiring a live cluster.
Comment thread docs/blog.mdx
description: "Concept exploration, design pieces, and deeper dives from the VisualSign team."
---

Subscribe via RSS at [`/blog/rss.xml`](/blog/rss.xml). Posts are tagged by chain and theme. Each entry below is a stub — click through for the full essay.
Breaks the single changelog page into:

- /changelog -- landing/index with CardGroup linking to both streams
  and a short orientation (release tagging, authoring workflow, tag
  vocabulary).
- /changelog/chain-parsers -- Solana preset wave (v0.646.0 -- v0.649.0)
  and Surfpool fuzz integration (v0.647.0).
- /changelog/fundamentals -- HTTP gateway chain_metadata + content
  digests (v0.648.0).

Each `<Update>` block now carries `description="v0.X.Y"` pointing to the
first release tag that contains the change (looked up via
`git tag --contains <sha> --sort=v:refname | head -1`).

Two separate RSS feeds:
- /changelog/chain-parsers/rss.xml
- /changelog/fundamentals/rss.xml

Subscribers pick the stream they care about: wallet integrators may
follow fundamentals only; preset authors follow chain-parsers.

Updates the _drafts/README.md fragment format to require a `category`
field (chain-parsers | fundamentals) and explains how the maintainer
fills `description` with the release tag at curation time.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`chain_parsers` is the repo directory; readers care about the chain.
Replaces /changelog/chain-parsers with one page per supported chain,
each with its own RSS feed:

- /changelog/solana       (Solana preset wave + Surfpool moved here)
- /changelog/ethereum     (stub; populates with next meaningful release)
- /changelog/sui          (stub)
- /changelog/tron         (stub)
- /changelog/fundamentals (unchanged)

The landing /changelog now shows a CardGroup with all five streams.
docs.json groups the Changelog tab into Overview, Chain streams, and
Fundamentals so each surface is discoverable in the sidebar.

Drops the chain name from `tags={...}` on per-chain Update blocks since
the page already conveys the chain. Updates _drafts/README.md so the
fragment `category` field is one of solana | ethereum | sui | tron |
fundamentals.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`core` is clearer than `fundamentals` and matches the language already
used to describe `src/visualsign/` elsewhere in the docs (Core types,
core library, etc.). Avoids the branding overload that "VisualSign"
would have, since the entire repo is VisualSign.

- /changelog/fundamentals -> /changelog/core
- Card label "Fundamentals" -> "Core"
- nav group "Fundamentals" -> "Core"
- _drafts/README.md category vocabulary updated

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants