Repository navigation
docs(dxl): restore per-model content flattened by the e-Manual migration - #91
Merged
Merged
Conversation
…lattened
The Jekyll e-Manual selected control-table content with
{% if page.product_group == ... %} branches. The migration kept only one
branch per include, so every X model ended up sharing the same text even
where the e-Manual had distinguished them. MX/EX/P/PRO/Y got per-series
partials and were unaffected; the X series lost its intra-series variation.
Restore the missing branches as dedicated partials and repoint the models:
- Protocol Type(13): XL330/XC330/XM335 support S.BUS, iBUS and RC-PWM
(values 20/21/22). The pages showed the Protocol 1.0/2.0 table instead.
- Quick Start: XL330 and XC330-M181/M288 run at 3.7~6.0V but were told to
use a 12V SMPS. Now recommends LB-041 as the e-Manual does.
- Safety warnings: the waterproof XW series was told to keep water away
and its IP68 operating limit was missing. XL330 regained the 3.3V TTL
logic note, and the X330/X335 family the stable-power-supply advice
(LB-041 for the 5V models, LB-020 for the 12V ones in Korean).
- Drive Mode(10): X540 regained Master/Slave Mode on Bit 1 and the whole
Dual Mode section (sync cable table and diagrams). X540 and XW now list
Position/Velocity/Current/PWM as the inverted quantities.
- Secondary(Shadow) ID(12): the XW example wrote to LED(65), a register
the XW series does not have. Uses Torque Enable(64) instead.
- Communication circuit: XL330/XC330-M181/M288 get the 3.3V circuit,
XM335 the X335 circuit and pin diagram, 2XL430/2XC430 the 2X pin
diagram, in place of the generic 5V ones.
- Indirect Address/Data: indirect_data.mdx mixed both branches and gave
XL430-W250 contradictory addresses. The X330/X335 family now states its
real 64 ~ 251 range and drops the Indirect Address 29 ~ 56 note, which
applies to registers those models do not have.
- Goal PWM(548): RH-P12-RN described the P-series PWM Control Mode, which
it does not implement.
Where the e-Manual branch itself was stale, the model's own control table
won: the X330 indirect range is 64 ~ 251, not the 64 ~ 227 upstream says.
Terminology follows the partials already migrated here (Master/Slave),
not the newer Leader/Follower wording upstream.
Verified by a full EN + KO build and by grepping the generated HTML for
each affected model; untouched models still render the shared text.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The Indirect Address/Data example allocated LED(65), a register the XW series does not have, so the walkthrough was not reproducible on those models and [LED(65)] resolved to a #led65 anchor absent from the page. Use Torque Enable(64) instead: it is a writable 1-byte RAM register on every XW model, which is what the example requires, and it is the same substitution the e-Manual already makes for the Secondary ID example on these models. Unlike the branches restored in b52c3ca, the e-Manual does not vary this include by product group - it carries the LED example for the XW pages too, so this corrects the source rather than restoring a lost branch. Affects XW430-T200/T333 and XW540-H260/T140/T260. Verified by a full EN + KO build: no #led65 reference remains on the XW pages and the other X models still render the LED example. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
b52c3ca split several shared partials so that models the e-Manual had distinguished stop rendering each other's text. That leaves a trap: someone opening warning.mdx sees no sign that five variants of it exist, so a fix to the shared safety text lands in one file out of six. Head each base partial with the list of files that have to change with it. The variants already say why they were split; this closes the other direction. MDX comments, so nothing reaches the rendered page. Also record the convention in DOCS_STRUCTURE.md: how variants are named, that both directions get a comment, and that partials do not take props - none of the 947 in the repo do, and splitting the file is how this repo has always handled per-model differences. Written down so the next person weighing conditional rendering can see the decision rather than reopen it. Verified by compiling all 15 edited partials with the MDX compiler. The local production build currently crashes with an access violation (0xC0000005), but it does so on the pushed commit too with these changes stashed, so it is the build environment rather than this change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
f99cd56 added a section describing how variant partials are named and why partials do not take props. Removing it at the author's request; the file goes back to what it was at f430943. The cross-reference comments that commit put at the head of each base partial stay - those are what actually keep a shared edit from missing its variants.
…anch A second audit swept the e-Manual for per-product Liquid branches, this time including short-value branches, the Korean includes, page-level conditionals and variable substitution. The first pass had filtered probes to prose lines of 50+ characters, which is exactly the wrong filter for this defect class - most of these differences are a number, a register name or a table row. Five clusters, all in the X series: Min/Max Voltage Limit(34, 32) - the include had four branches and docs kept the dxl_xl430 one, which no page even uses: XL430 does not include this file. So all 23 X models rendered 6.5~14.0 V while their own control tables said 3.1~7.0 (XL330, XC330-M181/M288), 5.5~14.0 (XC330-T181/T288, XM335-T323) or 9.5~16.0 (the rest). Every one of those pages contradicted itself. Values now come from each model's control table, which is the authority here. Velocity Limit(44) - XL330/XC330/XM335 allow 0 ~ 2,047 and predate the V42 default change; they were being shown 0 ~ 1,023 plus a note that does not apply to them. Current-based Position Control Mode - the branch excludes the XL430 group, so docs kept the minority branch and dropped the mode from 28 models across six partials: the Goal Position(116) table row, and the mode lists in Moving Status(123), Min/Max Position Limit, Position Trajectory, Velocity Trajectory and the Profile description. Bus Watchdog(98) - three defects in one file. Goal Current(102) was missing from the read-only Goal Value list, the RS-485-only models (XD430, XD540, XW430-T333, XW540-T140/T260) were told they also have TTL, and XL330 carried a "from firmware v38" note that predates its firmware line. Position PID / Velocity PI Gain - register 126 is Present Load on the XL430 group and Present Current everywhere else; only Present Load survived, and with no link definition it rendered as literal bracketed text. Korean and English had drifted apart in places - KO already carried Current-based mode in four of the six partials and already said Present Current - so each locale was fixed from its own current state rather than assumed to mirror the other. Verified by compiling all 85 changed files with the MDX compiler and by cross-checking every repointed model against the value in its own control table. Full site build to follow. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ped in
The e-Manual picks these version strings with {% assign %} rather than an
if/else around the prose, so the first audit's branch scan never saw them.
Each shared partial ended up hardcoding one arm of the assign.
Startup Configuration(60) and Backup Ready(147) arrive in V46 on XL330 and
XC330, V45 elsewhere. Both partials said V45 to all 34 importers.
Torque On by Goal Update follows the same split, so Drive Mode(10) carried
the same wrong version for those six models.
Drive Mode(10) also opens differently on the dxl_x430 group, where the
e-Manual states the feature arrives in firmware V38. That sentence was
absent for all eight of them.
The "Time-based Profile is available from firmware V42" note is suppressed
for XL330 in both Profile Acceleration(108) and Profile Velocity(112); its
firmware line starts above V42, so the note only misleads there.
A reader checking whether their unit is new enough was getting a number that
belongs to a different product.
KO and EN again differed in where the note already sat, so each locale was
edited from its own state. Verified by compiling all 40 changed files.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ty modes Baud Rate(8): XL330 and XC330 stop at value 6 and carry a measurable margin of error on 115,200 and 57,600; XM335-T323 shares that range but defaults to 3 (1M bps) rather than 1. All 35 importers were shown the 0 ~ 7 table with a 4.5M row none of those seven models has. Each page's own control table already said 0 ~ 6, so the detail section contradicted the summary above it. Profile Velocity(112): the mode list applies to Current-based Position Control Mode only on X430, X540, XW540 and MX-64/106(2.0). English kept the two-mode string for all 32 X importers; Korean had kept the three-mode string for the same 32, so the two locales were wrong about different halves of the fleet. Both now start from the two-mode text with one variant carrying the third mode. MX-28(2.0), which the e-Manual excludes, no longer shares the MX-64/106 text. The e-Manual condition here is itself malformed - `=="dxl_x540" page.product_group =="dxl_xw540"` is missing an `or` - so this follows the evident intent rather than what Liquid would actually evaluate. Every repointed model was cross-checked against the Baud Rate row in its own control table. All changed files compile. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
XL-320 shares the X-series partials but not the X-series register map. It was being told Status Return Level is at 68, Registered Instruction at 69, Max Torque at 14, Torque Limit at 34, Return Delay Time at 9, and that shutdown behaviour is described under Alarm LED(17)/Shutdown(18) - a register XL-320 does not have. The real addresses are 17, 47, 15, 35, 5 and Shutdown(18). Present Position is at 37 on XL-320, not 36. That partial has XL-320 as its only importer, so it is corrected in place rather than split. Return Delay Time turned out to need only the XL-320 variant: the Protocol 1.0 models import the ax/ copy, which already says 5. Worth recording why that was not obvious - a `grep "x/<name>.mdx"` also matches `ax/<name>.mdx`, so the consumer counts I worked from were inflated. The repointing itself was done with the full `_partials/x/` prefix and was never affected, but the non-X partial families still need their own pass. Verified by reading the Return Delay Time address out of all 51 importing model pages and confirming each now matches the partial it imports. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Found by walking the partial families the first sweep never reached. My earlier consumer counts came from `grep "x/<name>.mdx"`, which also matches `ax/<name>.mdx`, so the p/, pro/, mx/ and y/ families had gone unexamined. PRO(A) and RH-P12-RN were sharing the PRO shutdown text, which names Shutdown(48), Torque Enable(562) and Hardware Error Status(892). Their own control tables put those at 63, 512 and 518. Ten PRO models keep the original; the six -RA models and RH-P12-RN get the corrected addresses. RH-P12-RN's Min/Max Voltage Limit section said 150 ~ 350 while its control table two screens above said 150 ~ 300. RH-P12-RN also showed the PRO external-port photo; the e-Manual gives it its own, now copied across. The 2XC430-W250 page called the product "2XL430-W250" in its introduction and again in the Control Table caution - the e-Manual substitutes the model name at both points and only the 2XL430 string was migrated. Y series was checked and is clean: the migration split y_y_warning_ra / _mb correctly, so the lubricant handling warnings reach the R and A models that need them, and only the M models get the brake-sequence Torque Enable text. An import-resolution check over all 9,201 @site partial references caught a KO variant I had repointed six pages to without creating; that file now exists and the check passes. Preferring it to a full build here because the local build crashes intermittently - three separate attributions for that turned out to be coincidence, and the same command both succeeds and segfaults. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…D files Image filenames and download URLs are the kind of short difference the first audit's prose filter dropped, so this class went unnoticed until now. XW is a waterproof series with its own connectors. Its RS-485 section showed the generic X-series pin photo instead of the two XW photos, and the horn alignment step showed the X430 marking picture. Both are now the XW images. horn_bearing_replacement_x had only XW importers yet carried the non-XW branch wholesale - not just the wrong picture but the Gear Replacement and DYNAMIXEL Calibration sections that the e-Manual withholds from XW. Removed, and the heading no longer promises gear replacement. Corrected in place since no other model reads that file. Drawings pointed at the wrong products: 2XL430-W250 offered 2XC430 CAD files, XD430-T210/T350 offered the generic X430 set instead of their XD-430.N101.I101 files, and the four XC430 models offered XL430-W250 New/Old. Someone downloading from those pages got a different actuator's geometry. Each new variant was checked for reference-style links with no matching definition, so no "Download" line renders as bare bracketed text. All 34 changed files compile and all 9,201 partial imports resolve. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ments
Searching for the RS-485 section MX had lost turned up a different failure mode
than flattened branches: 47 places where the converter wrote a placeholder
comment - {/* nested include: en/dxl/foo.md */} - and never brought the content
across. Nothing rendered there at all.
control_table_opmode_note (28 sites) explains that Present Position reports a
continuous 4-byte range while torque is off, and lists the three events that
reset it to a single-turn absolute value. Anyone reading a position outside
0~4095 had no explanation on the page. Restored with the right register per
family: 132 on X, 580 on P and PRO(A), 611 on PRO, and the matching Homing
Offset of 20 or 13.
led_policy (4) is the LED status chart - booting, factory reset, shutdown,
bootloader. The X540 group, MX-106 and MX-106(2.0) also blink it three times
for Follower mode, so those ten models get a variant carrying that row.
pinout_warning (5) warns that connector pinouts differ by manufacturer and
must be checked before wiring. That is a safety notice and it was rendering
as nothing.
hollow_cabling (6), led_policy_pro (2) and download_center_notice (2) round
out the set.
MX also regained the RS-485 Communication section: the e-Manual withholds it
from the AX series only, but all nine importers shared the AX copy, so the six
MX models - which are sold in RS-485 form - documented only TTL.
One thing worth recording: my first fill wrote English into all 23 Korean
files, because the locale test looked for '/i18n/ko/' against paths that start
with 'i18n/ko/'. Caught by grepping the Korean tree for English strings, then
reverted with git checkout and redone. Both locales verified by counting each
language's own phrases afterwards.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ter the split
In Jekyll every page ended with {% include common_link.md %}, so the link
definitions it held covered every reference on that page no matter which
include had written it. MDX compiles each partial as its own module, so a
definition in common_link.mdx now reaches nothing but common_link.mdx.
The file survived the migration with all 119 definitions and has been inert
ever since. Partials that happened to carry their own definitions kept working;
126 references across 70 partials did not. Compiling one of them produces no
anchor element at all - the register name renders as plain text, so "see
[Present Position(552)]" is a dead end for the reader.
Definitions are resolved against the pages that actually import each partial
rather than generated from a slug rule, because the headings are not uniform:
97 matched a heading or explicit anchor directly, 20 belong to combined
headings such as Max/Min Position Limit(76, 84) where two registers share one
section, and the last 9 were already solved correctly in the English partials
and just had to be carried to Korean.
Verified by compiling the previously link-free partials and confirming they now
emit anchors, and by re-running the scan to zero.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The page exists, is complete, and matches its e-Manual source, but no sidebar entry pointed at it, so the only way to reach it was to already know the URL. Its four XW siblings are all listed. Found by diffing every document under docs/ against the ids referenced in sidebars/. Of 856 documents, 225 are unregistered, but only one of those is a DYNAMIXEL model page - the rest are aisapiens and software sections written after the migration, and all but six of those are reachable through links from other pages. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…files
The migration fix-up had grown 115 partial variants, most of them a whole
copy of the base file with one register address, firmware version, model
name or image path changed. Every later correction had to be applied to
each copy, and the 파본 comments were the only thing tying them together.
Docusaurus passes props to an imported partial, so a base file can carry
the default in place ({props.addr ?? 9}) and the one model that differs
passes the value from its page (<ReturnDelayTime addr={5} />). 41 base
partials now take props and 88 variant files (45 English, 43 Korean) are
gone. Where a whole paragraph or note comes and goes, the block is wrapped
in a small Show component instead. Headings never go inside it: the table
of contents is built at compile time and would keep them.
Kept as files: variants that differ by a table row, a list item, a heading
or a whole section (led_follower, baudrate_2, goal_position_2_xl430,
drivemode_x540, protocol_type_rc, 485_ttl_connection_mx,
ttl_connection_x330, the drawings, p_548_goal_pwm_rh, warning_xw). The
four warning variants that only added the stable-power bullet were
identical and are now one file, warning_x330.
Four base files had no importer left because XL-320 was their only reader
and had been repointed to a variant; the variant content moved back into
the base.
Two content fixes fell out of this. The Korean XL-320 page was still
showing Status Return Level(68) and Registered Instruction(69) because its
variants had been created without the corrected addresses; the values now
come from the page, so both locales agree. And the ID partial's note about
Status Return Level still said 68 on XL-320 in both locales; it takes an
srl prop now.
Verified by resolving all 9,221 @site partial imports, compiling the 157
changed MDX files, and building each locale and reading the rendered HTML:
props land where they should, hidden notes are absent, and Show-wrapped
:::note blocks render as admonitions. The local build only passes with
DOCUSAURUS_ON_BROKEN_LINKS=warn because three imitation_learning overview
pages on main link to a route that does not exist.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Compared the rendered HTML of 90 DXL model pages against the Jekyll e-Manual (register addresses, numbers and units, ranges, firmware versions, key phrases) and fixed what differed on our side. - XL-320: write its content straight into xl320.mdx instead of branching the shared X partials. Ten XL-320-only partials are inlined and removed, and the four shared partials that carried XL-320 props go back to their plain wording. Torque Enable is (24) and the value is 1 ~ 2 bytes. - Ranges written as "N~M" were parsed as GFM strikethrough on 24 pages. 265 places now read "N ~ M", including the non-DXL pages that had the same problem. - Drive Mode: no "Time-based Profile since V42" note on X330 and XM335, which never had an earlier firmware. - RH-P12-RN(A): control table intro and Torque Enable(512) come from the PRO(A) partial with RH-specific warning text, not from PRO. - MX(2.0): Return Delay Time points at address 9, not the Protocol 1.0 address 5. - Shutdown: encoder error, input voltage default, firmware 41 note and LED wording follow each model. - Performance graph note: high-voltage wording for XH430-V, XH540-V and XW540-H260. - Operating Mode(11): restore the note that Present Position is reset when the mode changes. Where the e-Manual body contradicts its own control table, our pages follow the table. English and Korean are changed symmetrically. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
One conflict, in _partials/x/horn_bearing_replacement_x.mdx. This branch made that partial XW-only and dropped its gear replacement section, while main rewrote the iframe attributes inside that same section. Kept this branch's version. The section lives on in assembly_430_540_gear_replacement.mdx, which took main's iframe fix through the automatic merge. All 9,241 @site and relative imports in the merged tree resolve. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Reverts 1c483bb. The page stays hidden as it is on main: reachable by URL but not listed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
One conflict, in docs/systems/omx/specifications/hardware.mdx: both sides fixed the same "N~M" strikethrough bug in the actuator table. Kept main's wording (en dash), which is what the OMX pages now use. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The graph images on the 75 DYNAMIXEL model pages (English and Korean) are plain markdown images, so each one rendered at its own pixel size. The sources come in eleven sizes, from 365px to 647px wide, and the pages looked uneven next to each other. A CSS rule in custom.css targets the image directly under the "Performance Graph" / "성능 그래프" heading, using the heading id Docusaurus generates, and sets it to 700px wide. It shrinks with the column on narrow screens and keeps the aspect ratio. No page edits. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…) and Y pages Found by loading every DXL model page in a headless browser. - Y series (12 pages): the Indirect Address note partial closed its admonition twice, so a literal ":::" appeared in the body text. Dropped the duplicate in the English and Korean partials. - Y series control table: the hand-written <table> had <tr> rows directly under <table>, which React flags as a hydration mismatch. Wrapped the rows in <tbody>. - P and PRO(A) partials (11 files, English and Korean): <div class=...> is not valid in JSX and React warned on every page that imports them. Changed to className. The class has no styles, so the pages look the same. After the change the P, PRO(A), Y and RH-P12-RN pages load with no console warnings. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ROBOTIS-Yang
requested review from
nhw-robotis
and removed request for
sunghowoo
October 16, 2026 01:51
GyuH13
approved these changes
Oct 16, 2026
nhw-robotis
approved these changes
Oct 16, 2026
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.
Summary
When the e-Manual moved from Jekyll to Docusaurus, the Liquid branches inside the shared DYNAMIXEL includes collapsed into a single branch. Many model pages ended up showing another model's register addresses, firmware versions, images or notes. This PR restores the per-model content and checks the result against the e-Manual, page by page.
This replaces #83, which was closed because it also listed XW540-H260 in the sidebar. That page stays unlisted here, as on
main.What changed
<Show when>component. 88 value-only variant files were folded back into their base files. XL-320 content is written directly inxl320.mdx, because its register map is AX-style and nearly every shared X partial would need an exception.N~Mwere parsed as GFM strikethrough on 24 pages. 265 places now readN ~ M, including non-DXL pages with the same problem. The OMX hardware page keeps the en-dash form thatmainalready uses.custom.cssrenders all of them at 700px wide, keyed on the heading id, so no page edits were needed. The three smallest sources (XL330-M288, XL430-W250, MX-106) are upscaled and look slightly soft; replacing those images with larger exports would fix that.Verification
main: all 9,243@siteand relative imports resolve, the DXL MDX files compile, and the Korean build succeeded with no broken-link warnings (checked before the latestmainmerge). None of the 891 Korean pages contains a<del>element.Intentional differences from the e-Manual
Notes for reviewers
mainare included. The first had one conflict in_partials/x/horn_bearing_replacement_x.mdx(this branch made that partial XW-only;mainrewrote iframe attributes in the section this branch removed; the section lives on inassembly_430_540_gear_replacement.mdx). The second had one conflict insystems/omx/specifications/hardware.mdx, resolved withmain's wording.future.v4faster toolchain. This happens onmainas well and is unrelated to content.🤖 Generated with Claude Code