1818- Ruby DX team @Shopify
1919- Key collaborator: tompng (Tomoya Ishida)
2020
21- ### Slide 3 — Bold claim
21+ ### Slide 3 — Rubydex
22+ - A Ruby code indexer — ` Shopify/rubydex `
23+ - Static code intelligence for Ruby
24+ - Alexandre Terrasa's talk: "Blazing-fast Code Indexing for Smarter Ruby Tools"
25+
26+ ### Slide 4 — Bold claim
2227- "The future of Ruby's documentation is about AI"
2328
24- ### Slide 4 — What AI needs (part 1)
29+ ### Slide 5 — What AI needs from documentation (part 1)
2530- AI likes ** clear, accurate documentation**
2631- Misinformation gets amplified by AI
2732
28- ### Slide 5 — What AI needs (part 2)
33+ ### Slide 6 — What AI needs from documentation (part 2)
2934- AI likes ** Markdown** — it reads and writes it natively
3035- AI likes ** clear intent** — type signatures tell it what code does
3136
32- ### Slide 6 — What AI needs (part 3)
37+ ### Slide 7 — What helps AI write documentation
3338- AI likes ** quick, deterministic feedback**
3439- Coverage checks, missing reference warnings — not "try and see"
3540
36- ### Slide 7 — The twist
41+ ### Slide 8 — The twist
3742- "All of these help human developers too."
3843- These aren't AI requirements — they're good documentation requirements
3944
40- ### Slide 8 — RDoc wasn't providing these
45+ ### Slide 9 — RDoc wasn't providing these
4146- Old theme, no live preview, incomplete Markdown, no type info
4247- Parser couldn't handle modern Ruby
4348
44- ### Slide 9 — So here's what we did
49+ ### Slide 10 — So here's what we did
4550- "...to make RDoc work for us, and our agents"
4651
4752---
4853
49- ## Section 2: Here's What We Did (~ 16 min)
54+ ## Section 2: Here's What We Did (~ 14-16 min)
55+
56+ ### Slide 11 — Before: Darkfish
57+ - Screenshot of old Darkfish theme
5058
51- ### Slide 10 — Aliki theme (quick)
52- - Before: Darkfish screenshot → After: Aliki screenshot
59+ ### Slide 12 — After: Aliki
5360- Dark mode, mobile, fuzzy search, method signature cards
5461- "Named after my cat. Ships in Ruby 4.0."
5562
56- ### Slide 11 — Server mode
63+ ### Slide 13 — Server mode demo
5764- ` rdoc --server ` — live-reload documentation preview
58- - Demo: edit a file → browser auto-refreshes
65+ - Demo video: edit a file → browser auto-refreshes
66+
67+ ### Slide 14 — Server mode details
68+ - ` rdoc --server ` features
5969- Zero external dependencies, incremental re-parsing
70+ - Connects to Prism for faster re-parse
6071
61- ### Slide 12 — The parser problem
72+ ### Slide 15 — The parser problem
6273- RDoc's Ruby parser used Ripper (token-stream based)
74+ - Ripper is slow
6375- Couldn't handle modern Ruby syntax
64- - Parser logic and comment handling tightly coupled
6576
66- ### Slide 13 — tompng's rewrites
77+ ### Slide 16 — tompng's rewrites
6778- Pipeline diagram: where the 3 subsystems sit in RDoc
6879 - Ruby parser → Prism AST visitor
6980 - Comment directive parser (` :call-seq: ` , ` :nodoc: ` )
7081 - Inline formatting engine → structured InlineParser
7182- 43 PRs over 20 months
7283
73- ### Slide 14 — What the rewrites changed
74- - Code example: before/after (e.g., Ripper tokens vs Prism AST visit)
75- - "Three subsystem rewrites. Invisible to users, foundational for everything else."
84+ ### Slide 17 — Bug fix example: ` __FILE__ `
85+ - Before/after comparison showing how ` __FILE__ ` was rendered
86+ - Before: recognized as ` <code> ` → broken display
87+ - After: rendered as plain text
7688
77- ### Slide 15 — Why Markdown?
89+ ### Slide 18 — What the rewrites changed
90+ - Prism benchmark: 0.69s vs 0.97s (Ripper) on 112 files (~ 30% faster)
91+ - Before/after code: Ripper tokens vs Prism AST visit
92+
93+ ### Slide 19 — Markdown in RDoc
7894- Markdown is the universal format — humans and AI both read and write it
7995- RDoc markup is Ruby-specific, not widely known
80- - "If you can write a GitHub README, you can contribute to Ruby documentation"
81-
82- ### Slide 16 — Markdown: the coupling problem
83- - Pipeline diagram:
84- ```
85- Markdown parser ──┐ ┌─────────────┐
86- ├─► RDoc::Markup ───►│ Shared │
87- RDoc parser ──┘ nodes with │ InlineParser │──► HTML
88- RDoc strings │ & Formatters │
89- inside └─────────────┘
90- ```
96+ - "If you can write a GitHub README, you can write Ruby documentation"
97+
98+ ### Slide 20 — The coupling problem
99+ - Pipeline diagram: Markdown parser and RDoc parser both feed through shared InlineParser
91100- Every Markdown fix is a two-format fix
92101
93- ### Slide 17 — Markdown: concrete example
94- - ` ~~strikethrough~~ ` → ` <del>text</del> ` as plain string
95- - SharedInlineParser didn't recognize ` <del> ` → silently broken
102+ ### Slide 21 — Example: ` ~~strikethrough~~ `
103+ - Before/after: ` ~~text~~ ` → broken in v6.11.0, correct ` <del> ` now
96104- Fix touches shared code → must verify RDoc markup still works
97105
98- ### Slide 18 — Markdown: what's improved
99- - Strikethrough, heading anchors, table fixes, syntax highlighting
100- - GFM spec comparison test suite
101- - Migration started: ` standard_library_md.html ` in Ruby 3.4+
106+ ### Slide 22 — Bash syntax highlighting
107+ - Before/after: bash code blocks — no highlighting vs proper sh-* tokens
102108
103- ### Slide 19 — RBS type signatures
109+ ### Slide 23 — C syntax highlighting
110+ - Before/after: C code blocks — no highlighting vs proper c-keyword tokens
111+
112+ ### Slide 24 — Inline styling in tables
113+ - Before/after: `` `code` `` in table cells was broken, now works
114+
115+ ### Slide 25 — GFM compatibility table
116+ - Feature comparison: GFM vs RDoc v6.11.0 vs RDoc current
117+ - 4 fixed, 1 regressed, 7 still broken in both
118+
119+ ### Slide 26 — RBS type signatures
104120- The ` #: ` inline annotation syntax
105- - Example:
106- ``` ruby
107- # : (String name, ?Integer age) -> User
108- def create_user (name , age = nil )
109- ```
110121- RDoc extracts and displays in HTML and ` ri `
111122
112- ### Slide 20 — RBS in HTML demo
123+ ### Slide 27 — RBS in HTML output
113124- Screenshot: class page with type signatures rendered
114125- Type names are clickable links to their documentation
115126
116- ### Slide 21 — AI helped us get here
117- - RDoc is huge and complex — without dedicated maintainers, change was slow
118- - tompng and I became active in 2024 — progress, but limited
119-
120- ### Slide 22 — AI accelerated the pace
121- - Since mid-2025, AI helped me increase my output significantly
122- - tompng's work was his own — but AI helped me keep up with reviewing it
123- - "The pace is accelerating. Not because we're working harder, but because we have better tools."
124-
125127---
126128
127- ## Section 3: What's Still Ahead (~ 8 min)
129+ ## Section 3: What's Still Ahead (~ 8-9 min)
128130
129- ### Slide 23 — RDoc's priority
131+ ### Slide 28 — RDoc's priority [ CONTRIBUTING ]
130132- Better contributing experience
131- - Target: Ruby's official docs (docs.ruby-lang.org) and gem docs
133+ - Target: Ruby's official docs and gem docs
132134- Make documentation easier to write and maintain
133135
134- ### Slide 24 — Setting good standards
136+ ### Slide 29 — Setting good standards [ CONTRIBUTING ]
135137- RBS signatures are a start — structured, machine-readable contracts
136138- We'll revisit supported directives for clarity
137- - Whether users adopt a type checker is their choice — RDoc supports both
138139
139- ### Slide 25 — Better tools for writing docs
140- - For humans: server mode
141- - For AI agents: improved CLI
142- - ` rdoc -C ` coverage: what's missing or incorrect
143- - ` ri --format=markdown ` : query Ruby docs directly
140+ ### Slide 30 — Better tools for writing docs [ CONTRIBUTING]
141+ - For humans: ` rdoc --server ` (live preview)
142+ - For AI agents: ` rdoc -C ` (coverage — what's missing)
143+ - For AI agents: ` ri --format=markdown ` (query docs directly)
144144
145- ### Slide 26 — For consuming documentation
146- - For humans: Aliki theme improved the reading experience
145+ ### Slide 31 — For consuming documentation [ LLM-READY DOCS ]
146+ - For humans: Aliki improved the reading experience
147147- For AI: we evaluated and found nothing proven yet
148148
149- ### Slide 27 — We prototyped llms.txt
150- - The most complete standard for LLM-friendly docs
151- - 10% adoption across 300k domains, zero measurable impact on AI citations
152- - No major LLM provider officially consumes it
153-
154- ### Slide 28 — Markdown output for AI?
155- - No standard for serving Markdown versions of documentation pages
156- - We considered generating Markdown output from RDoc
157- - Prioritizing this now creates more risk than reward
158-
159- ### Slide 29 — Rustdoc tried this too
160- - Rustdoc RFC (rust-lang/rfcs #3751 ): proposed LLM-friendly text output
161- - Community rejected it: "This should be an external tool"
149+ ### Slide 32 — Rustdoc: community and maintainers said no [ LLM-READY DOCS]
150+ - RFC #3751 proposed LLM-friendly text output for Rustdoc
162151- T-rustdoc team: "Very likely not the desired format within 3 months, never mind 3 years"
152+ - Community consensus: "This should be an external tool"
153+ - Footnote: github.com/rust-lang/rfcs/pull/3751
163154
164- ### Slide 30 — The landscape
165- - No major doc generator has shipped AI-specific output features
166- - All AI-docs integration happens at the consumption layer (MCP servers, Dash, DevDocs)
167- - Doc generators should focus on producing good output
168- - "If I missed anything in this space, I'd love to hear about it after the talk"
169-
170- ### Slide 31 — Documentation has more leverage now
171- - docs.ruby-lang.org is what AI models train on and what AI tools reference
172- - In the AI age, every improvement to Ruby's docs gets amplified
155+ ### Slide 33 — ExDoc: shipped it [ LLM-READY DOCS]
156+ - ExDoc v0.40.0 (Jan 2026): Markdown output formatter + llms.txt
157+ - Enabled by default — every Elixir project gets it
158+ - First major doc tool to ship AI-oriented output
173159
174- ### Slide 32 — Types in docs, not type checking at generation
175- - Endoh benchmark (March 2026): Ruby is #1 for AI code generation ($0.36/run)
176- - Adding a type checker at generation time costs 2-3× overhead
177- - Types already in documentation give AI the information without that cost
160+ ### Slide 34 — We prototyped llms.txt [ LLM-READY DOCS]
161+ - The most complete standard for LLM-friendly docs
162+ - ~ 10% adoption across 300K domains, zero measurable impact on AI citations
163+ - No major LLM provider officially consumes it
164+ - Footnote: SE Ranking study (seranking.com/blog/llms-txt)
178165
179- ### Slide 33 — The honest constraint
180- - The AI consumption space moves fast
181- - Nothing is proven effective yet
182- - We keep the foundation solid and wait for the dust to settle
166+ ### Slide 35 — RDoc: studying while building the foundation [ LLM-READY DOCS ]
167+ - We're watching how these approaches play out
168+ - Priority now: make the documentation better at the source
169+ - Any AI-specific format risks being obsolete in months
183170
184171---
185172
186173## Section 4: Recap + Close (~ 2 min)
187174
188- ### Slide 34 — Summary
189- - In the AI age, documentation has more leverage than ever
175+ ### Slide 36 — Summary
176+ - AI reads Ruby's docs too now — improving them helps everyone
190177- RDoc's priority: make docs easier to write and maintain
191178- The foundation is rebuilt: Prism, Markdown, server mode, RBS, Aliki
192179
193- ### Slide 35 — Call to action
180+ ### Slide 37 — Try it today
194181- Contribute to Ruby documentation — it's Markdown now
195182- Try ` rdoc --server ` for your own projects
196- - Links:
197- - github.com/ruby/rdoc
198- - docs.ruby-lang.org
183+ - github.com/ruby/rdoc
184+ - docs.ruby-lang.org
199185
200- ### Slide 36 — Thank you
186+ ### Slide 38 — Thank you
201187- Thank tompng (Tomoya Ishida), Shopify Ruby DX team, Ruby committers
202- - Questions?
188+ - @ st0012 (GitHub), @ st0012 .dev (BlueSky)
203189
204190---
205191
@@ -210,24 +196,25 @@ All supporting research is in `research/`:
210196- ` ruby_prs.md ` — 41 PRs in ruby/ruby since Oct 2025
211197- ` current_features.md ` — Feature state analysis
212198- ` llms_txt_adoption.md ` — llms.txt adoption data
213- - ` ruby_skills_repo.md ` — ruby-skills repo analysis
214199- ` callseq_vs_rbs.md ` — call-seq vs RBS comparison
215200- ` markdown_rdoc_coupling.md ` — Markdown/RDoc architectural coupling
216201- ` tompng_prism_work.md ` — tompng's contributions
202+ - ` tompng_comment_formatting_rewrites.md ` — InlineParser replacement details
217203- ` type_sigs_ai_performance.md ` — Deep research: types + AI (10 sources, verified)
218204- ` ai_documentation_skills.md ` — Documentation tools + AI landscape
219205- ` markdown_for_agents.md ` — Markdown for AI agents: approaches and open questions
220206- ` rustdoc_llm_rfc.md ` — Rustdoc LLM RFC discussion (rust-lang/rfcs #3751 )
207+ - ` gfm_comparison_v6110_vs_current.md ` — GFM feature comparison with actual HTML output
221208
222209## Timing Budget
223210
224211| Section | Time | Slides |
225212| ---------| ------| --------|
226- | 1. The hook | 3-4 min | 9 |
227- | 2. Here's what we did | ~ 14-16 min | 13 |
228- | 3. What's still ahead | ~ 8-9 min | 11 |
213+ | 1. The hook | 3-4 min | 10 |
214+ | 2. Here's what we did | ~ 14-16 min | 17 |
215+ | 3. What's still ahead | ~ 8-9 min | 8 |
229216| 4. Recap + close | ~ 2 min | 3 |
230- | ** Total** | ** ~ 28-30 min** | ** 36 ** |
217+ | ** Total** | ** ~ 28-30 min** | ** 38 ** |
231218
232219## Working with the Slides
233220
0 commit comments