Repository navigation
Releases: dr0v3rr/tabletop-conduit
Release list
Conduit v0.2.35
Conduit v0.2.35
Fixes a Charisma (and other ability) over-count for D&D Beyond characters built on the 2024 origin rules.
What changed
- Ungranted species ability increases no longer apply. Under the 2024 rules, ability-score
increases come from your background, not your species — so D&D Beyond leaves the old species
bonus in the data flagged "not granted." Conduit was summing it anyway, inflating the score (e.g. a
Gem Dragonborn's legacy +2 Charisma was being added, making every CHA roll +2 too high).
Conduit now drops an ungranted species ability increase, matching D&D Beyond.
The fix is tightly scoped to that one case: granted species bonuses, and feat/background ability
bonuses (half-feats, your chosen ASI — which D&D Beyond applies even when it flags them "not
granted"), are all still counted, as are proficiencies. Verified against the DDB-matched golden
characters — every existing value is unchanged. Tests: 398 passing.
Conduit v0.2.34
Conduit v0.2.34
Security update: ships a patched Electron runtime.
What changed
- Electron updated 43.4.1 → 43.7.7. Fixes a high-severity advisory (sandboxed preload code-cache
poisoning by a compromised renderer) — relevant because Conduit loads remote pages (Roll20, D&D
Beyond, poke5e) in its panes. Same major version, so no behaviour change; the app was boot-tested on
the new runtime. - Dependency audit cleaned up. Resolved the remaining runtime-adjacent advisories via
npm audit fix(14 → 8 findings; the Electron runtime is now clean). The 8 that remain are all inside the
electron-builderbuild toolchain — dev-only, never shipped in the app, and left as-is because their
only fix is a breaking toolchain change that would risk the release pipeline for no user-facing gain.
No application code changed. Tests: 395 passing.
Conduit v0.2.33
Conduit v0.2.33
Corrects Pokémon type effectiveness to poke5e's rules: capped at ×2 / ×½ / ×0 — no ×4 or ×¼.
What changed
- Type effectiveness is now capped (poke5e-correct). poke5e uses D&D-style
resistance/vulnerability — per its rules, "there is no
'double vulnerability' or 'double resistance' due to dual types." Earlier releases used the
video-game stacking rule (×4 / ×¼). Now a Pokémon is Vulnerable ×2, Resistant ×½,
Immune ×0, or Normal ×1 — never ×4 or ×¼ — and a type that's super-effective on one half of a
dual type but resisted on the other cancels to normal. This affects both the damage Conduit applies
and the type-matchup shown in the Defenses block (on screen and on the printable sheet).- Example: Snom (Ice/Bug) is now Vulnerable to Fire ×2 (was ×4); Ralts (Psychic/Fairy) Resists
Fighting ×½ (was ×¼) and is Immune to Dragon.
- Example: Snom (Ice/Bug) is now Vulnerable to Fire ×2 (was ×4); Ralts (Psychic/Fairy) Resists
Matches poke5e's own client (which buckets by vulnerability / resistance / immunity and applies the
capped multiplier). Tests: 395 passing.
Conduit v0.2.32
Conduit v0.2.32
Pokémon now show their type matchup — weaknesses, resistances, and immunities — in the Defenses block, on screen and on the printable sheet.
What changed
- Type-matchup defenses for poke5e. Select a Pokémon and the Defenses block now lists its
Weak (×4 / ×2), Resist (×½ / ×¼), and Immune (×0) types, derived from its own type(s) via
the type chart — each as a type-colored chip. It uses the same chip language as the D&D Beyond
resist/immune/vulnerable block, so both systems read the same way, and it pairs with the damage math
Conduit already applies (a hit that's halved or doubled now shows why). - On the printable sheet too. The exported PDF gains a Defenses section — the Pokémon's type
matchup, or a D&D Beyond character's damage resistances/immunities/vulnerabilities.
Behind the scenes: a new tested typeMatchup() on the existing type chart, reused by both the sheet and
the PDF; D&D Beyond defenses are unchanged. Reviewed for injection/regression before shipping. Tests:
395 passing.
Conduit v0.2.31
Conduit v0.2.31
A D&D Beyond currency bar, and a fix so attunement-only item bonuses (Cloak/Ring of Protection) only count when the item is actually attuned.
What changed
- D&D Beyond currency. Load a D&D Beyond character and the Inventory section now shows a Currency
bar — all five coins (PP/GP/EP/SP/CP) as editable fields, plus an Amount + coin + Add / Remove
adjuster so you can add or remove any quantity at once (not just one at a time). Changes sync to
D&D Beyond through its own coin-transaction API; it reads your live balance first and never lets a
coin drop below zero. (Owned characters only; read-only sheets just show the totals.) - Attunement is respected for item bonuses. Items whose bonus requires attunement — Cloak of
Protection, Ring of Protection, and the like — were applying their +1 (to saves, skills, checks)
even when the item was equipped but not attuned. D&D Beyond flags attunement on the bonus itself
rather than the item, which Conduit's check missed. Now such a bonus only counts once the item is
attuned, matching D&D Beyond. (After toggling attunement on D&D Beyond, re-sync the character in
Conduit to see the change.) - Roll20 restore fix. A campaign whose name slugifies to "sessions" is now restored on launch
instead of being mistaken for the Roll20 login page.
Behind the scenes: the currency endpoint was taken from D&D Beyond's own request (verified with a live
round-trip), and the whole release went through an adversarial security/correctness review. Tests: 392
passing.
Conduit v0.2.30
Conduit v0.2.30
Held items for your Pokémon, a whole-team long rest, and Conduit now reopens your Roll20 game — still logged in.
What changed
- Held items. Select a Pokémon and the Items section now shows its held items (the trainer bag
still shows when the trainer is selected). + Add held item opens a picker of poke5e's held-item
catalogue; ✕ removes one. Changes sync to poke5e, and each shows its wording on hover. - Long rest — this one or the whole team. On an owned trainer with more than one Pokémon, 🌙 Long
Rest now asks the scope: This Pokémon (or the trainer) vs. Whole team. A team rest restores
full HP, every move's PP, and clears status for every Pokémon in one go. - Roll20 session restored on launch. Conduit now reopens the Roll20 game/editor you were last in,
instead of dropping you on the Roll20 home page (it falls back to your "My Games" dashboard when
there's nothing to restore). Your login is kept across restarts as before. - One window per profile. Conduit now enforces a single instance — launching it again focuses the
existing window instead of opening a second copy. (Two copies would share and clobber the same saved
Roll20 / D&D Beyond / poke5e login — the cause of occasional "logged out on relaunch" surprises.)
Behind the scenes: the held-items + team-rest and the session changes each went through an adversarial
security/correctness review before shipping; held items were also verified with a live add/read/remove
round-trip. Tests: 390 passing.
Conduit v0.2.29
Conduit v0.2.29
Read move/ability details on hover, Pokédex move text wraps, and pasted note images can be resized.
What changed
- Hover for full details. Hover a move, spell, or weapon on the character sheet to read its full
wording (plus a quick meta line — type, casting, range, PP) right there, without pushing it to
Roll20 first. Pokédex moves get the same card, which also shows the action cost, range, duration,
PP, and how the move scales at higher levels. - Pokédex move text wraps. Long move descriptions in the Pokédex were clipped to a single line;
each move now shows its full text, wrapped, under a clean header line. - Resize note images. Pasted or captured images are downscaled to keep notes small, which can
leave them hard to read. Click an image in a note to get resize handles on its right edge — drag to
make it as large (or small) as you like. The aspect ratio is kept, and the size sticks across saves
and restarts.
Behind the scenes: this release was reviewed by an adversarial security/correctness pass before
shipping. The note sanitizer now keeps a validated numeric image width (no styles, units, or
expressions) so resized images persist safely; two hover/resize edge cases found in review were fixed.
Tests: 387 passing.
Conduit v0.2.28
Conduit v0.2.28
Fixes the poke5e trainer page spinning/crashing after a Pokémon was edited.
What changed
- Empty status no longer breaks poke5e. poke5e's Pokémon status column must be a real status
(Poisoned, Asleep, …) or empty — but it treats a stored blank ("") differently from truly empty,
and its own trainer/party page crashes on the blank (the page would just spin).add_pokemonand
some existing Pokémon leave that blank behind, and any Conduit write (HP, EXP, status, the added-
Pokémon type fix) was faithfully carrying it back. Conduit now always clears a blank status to
"none" on every Pokémon write, so the trainer page loads — and a Pokémon that already had the bad
value is healed the next time Conduit saves it (e.g. after an HP change or a rest).
This is the real cause of the "trainer page won't load" issue from the last couple of releases. No
settings or data-format changes — existing trainers and Pokémon carry over. Tests: 385 passing.
Conduit v0.2.27
Conduit v0.2.27
Added Pokémon get their types set correctly, rests restore PP, Pokémon damage types are covered, and advantage/disadvantage rolls are clearly labelled.
What changed
- Added Pokémon now load on poke5e. poke5e's
add_pokemondoesn't accept a type, so a Pokémon
added through Conduit was left with an empty type — which poke5e's own trainer page couldn't render
(it would spin/crash). Conduit now sets the species' types immediately after adding, so newly-added
Pokémon open and delete normally on poke5e. - Long / Short rest. New 🌙 Long rest and 🌗 Short rest buttons sit next to Initiative. A Long rest
restores HP and all move PP and clears status; a Short rest is announced for shared tracking. - Pokémon damage types. The damage-type picker is now source-aware: on a poke5e sheet it lists the
18 Pokémon types (Bug, Rock, Fairy, …) instead of the D&D set. Damage dealt to a Pokémon applies the
standard type-effectiveness multiplier against its defending type(s) — super-effective, not-very-
effective, and immunities all stack for dual types. - Advantage/disadvantage is labelled. poke5e's default roll card shows a single total, so a
keep-highest/keep-lowest roll looked like an ordinary one. The roll field is now labelled
"Roll (Advantage — keep highest)" / "(Disadvantage — keep lowest)" so it's unmistakable. - Simpler Pokédex catch. "Catch…" in the Pokédex now just rolls the catch, the same as throwing a
Poké Ball from the bag — no extra prompts.
Behind the scenes: a new tested Pokémon type-effectiveness chart, plus an audit confirming the
add_pokemon/update_pokemon/update_trainer signatures all match poke5e's current API. Tests: 381
passing.
Conduit v0.2.26
Conduit v0.2.26
Trainer money in the bag, item names back, and trainer sync repaired after poke5e's API changes.
What changed
- Trainer money (₽). The Inventory section now shows your trainer's money, and — when you own the
trainer — lets you edit it. Changes sync straight to poke5e (the same value shown in poke5e's own
Inventory tab). - Item names fixed. poke5e moved its item catalogue (
/items.json→/data/items.json), which had
turned every standard bag item into "(unnamed item)". Conduit now reads the new location, and no
longer caches an empty catalogue on a hiccup, so item names are back. - Trainer sync repaired. poke5e changed its
update_trainerAPI — Conduit's trainer write (HP, and
now money) was silently failing against the old signature. Conduit now matches poke5e's current
full-row format exactly, so writing back to your trainer works again.
Behind the scenes: a full audit of every poke5e write endpoint confirmed the rest (Pokémon HP/status/
EXP, moves, inventory items, add/remove Pokémon) still match. No data-format changes on our side —
existing trainers, archives, and settings carry over. Tests: 376 passing.
Downloads
Grab the installer for your platform below; verify against SHA256SUMS. Builds are unsigned — see the
first-launch notes in docs/RELEASES.md.