Ten minutes is plenty. Pick two to four scenarios that interest you, try them, mark each as Works, Problem or Skipped, and press Send report. Partial reports are what we want: one scenario tested on your own phone is more useful than none. You can come back later and send another report with different scenarios. (All 34 scenarios together take about 74 minutes; nobody needs to do them all.)
Short on ideas? Use a quick pick, which highlights a small set:
3. Cloud Account Register, Save, Restore & Login in a Brand-New Session
4. New Player Guide: Passkey Setup, Cross-Device & Owlbear Sync
Quick Setup: How to Test OHCS in Owlbear Rodeo (Jump to S29–S32)
Add Custom Extension (GM once): Log in at owlbear.rodeo open your profile Extensions panel (puzzle piece icon or Dashboard Extensions) click + Add Extension paste: https://hypertekst.net/ohcs/manifest.json(or https://hypertekst.net/ohcs-beta/manifest.json for Beta; optional shared 3D dice tray: https://hypertekst.net/hammerdice-owlbear/manifest.json)
Enable in Room: Open or create a Room click ... (More) Extensions in the top-left toggle Oath Hammer Character Sheet ON. The shield/hammer icon now appears in the top-left bar for you and all players in that room.
Unlock License Key inside Owlbear (1-Click): Because browsers isolate third-party iframes inside owlbear.rodeo, click Pop Out in the indigo Owlbear VTT bar at the top of the sheet (which opens a top-level hypertekst.net window and automatically syncs your unlocked 7-word key back into Owlbear), OR click License Copy Key on your standalone tab and Paste Key inside Owlbear.
Resize, Pop Out & Roll: Use Wide 960px to expand the popover in-place, Pop Out for a draggable sheet window, or Dice for a compact floating Dice Roller + Session Roll Log. Every roll pops a map-wide banner toast at the top of the Owlbear room and logs to Roll Log.
Register on Device 1 (After Unlocking Your 7-Word Key): Open History in the top toolbar (or open License Cloud Account). Enter your Email and a Password (min 6 characters) and click Register Account. Your unlocked 7-word license key, custom homebrew rules, and character roster are automatically uploaded to your private Supabase vault.
Enable Authenticator App 2FA (Optional, Recommended): Once signed in inside History (or via License 2FA & History), click Setup 2FA, scan the QR code (or copy the secret) into 1Password / Apple Passwords / Google Authenticator, enter the 6-digit code, and click Verify & Activate 2FA.
Sign In on Any New Device or Owlbear Rodeo (1-Step Restore): On a brand-new phone, tablet, laptop, or inside Owlbear Rodeo where the initial Enter Oath Hammer License Key modal appears, expand Cloud Account: Register, Sign In or Sync Vault, enter your Email + Password (+ 2FA code if enabled), and click Sign In & Restore. It unlocks the encrypted rulebook and restores your characters in one click without typing the 7-word key.
Edit one field in each section: skills, weapons, gear, oaths, abilities, spells, notes.
Add and remove an ability and a spell.
Expected
No field is stuck or overlaps another.
All edits persist after reload.
Full-page capture of a filled character.
S10 Portrait and gallery1 min
Images are stored locally with the character.
Steps
Click the portrait frame, pick an image.
Remove it again.
Add 2 gallery images.
Expected
Images show immediately and survive reload.
Large images do not freeze the page.
D. Dice & Combat
S11 Skill roll2 min
Tapping a skill opens a pre-filled pool.
Steps
Tap the roll button next to Fighting.
Check the White/Red/Black counts.
Toggle Luck, +1 and -1 modifiers, then Roll.
Expected
Pool matches attribute + ranks.
White die colour stays white, Red red, Black black (also in dark mode).
Successes are counted correctly, exploding dice are marked.
Skill roll
S12 Roll result1 min
Results are readable and correct.
Steps
Roll 5 times.
Count successes by hand for at least two rolls.
Expected
Manual count matches the displayed total.
Roll result
S13 Weapon attack and SV2 min
Attack roll computes Success Value against defense.
Steps
Press Attack on Weapon 1, Roll.
Raise defender Defense with +.
Expected
Net SV drops by one per defense point and never goes below 0.
Weapon attack and SV
S14 Weapon damage2 min
Damage = base DMG + SV, with traits applied.
Steps
Press Damage on Weapon 1.
Add +2 SV.
Check AP and traits listed.
Expected
Total equals weapon DMG + SV.
Trait buttons apply and can be removed.
Weapon damage
S15 Free dice roller1 min
Ad-hoc pools without a character stat.
Steps
Open Dice from the toolbar.
Set 3 white, 2 red, 1 black, Roll.
Reset.
Expected
Counts can not go negative.
Reset clears pool and modifiers.
Free dice roller
E. Rules Reference
S16 Rules help search2 min
In-app rules text is findable.
Steps
Open Rules Help.
Search "grit", then switch category tabs.
Click a "?" next to a weapon or skill on the sheet.
Expected
Results filter as you type.
The "?" opens the matching entry directly.
Rules help search
S17 Homebrew vs. Errata: Create, Rename, Use & Submit ( Patches)4 min
Create or rename homebrew items, tweak core rules without overwriting canonical stats, use them on your sheet with badges, and submit to Discord.
Steps
Open Custom Rules (" Patches" in the toolbar or sheet actions bar).
Errata vs. Homebrew Mode: Notice the "Entry Mode" selector at the top of the builder form. Keep it on " Homebrew / Custom Rule (Preserves Core)" (default), pick Category "Weapons" (or " Gear / Talisman / Trinket" or "R Weapon Rune / Crafting Mod"), load existing "Flail", change DMG from "M+2" to "M+4", and click " Save to Active Custom Rules / Patch". Notice how it saves as " Flail (Homebrew)" so canonical "Flail" (M+2) stays untouched. (Switching Entry Mode to " Official Errata / Book Fix" modifies the core rule in-place for book typo fixes.)
Create, Add Mechanical Effects & Rename: Click "+ Create New Entry", enter Name "Sunblae" (typo), pick a Range preset, type "abc" into DMG to test input validation, fix DMG to "M+3", AP "2", click trait pills ("Fast", "Versatile"), optionally click "+ Add Effect" in the Mechanical Effects Builder (`skill_mod`, `skill_color`, `stat_mod`, `weapon_mod`, `tracker_pip`), and click " Save". Then click " Edit" next to "Sunblae" in the Staged List, fix the name to "Sunblade", and click " Save" again.
Use on Sheet & Help: Close the modal, open a Weapon, Gear, or Rune slot dropdown, and equip " Sunblade" or " Flail (Homebrew)" (under Custom / Homebrew). Check the active bonuses/traits and open " Rules Help" to see the badge.
Submit to Discord: Re-open " Patches" and click " Submit Patch to Discord" (or " Download .ohcs-patch.json").
Expected
In Homebrew mode, tweaking a core item auto-suffixes " (Homebrew)" so the canonical rulebook entry remains intact; Errata mode patches in-place.
Clicking " Edit" on any staged row loads it back into the form; changing its name and saving renames it in-place (replacing the old name in the staged list and updating any equipped slot on the sheet).
Equipped homebrew items show a badge in dropdowns, active traits, and Rules Help, and trigger the violet TWEAKED banner.
Submitting posts to #ohcs-patches with HOMEBREW / ERRATA tags and deduplicates identical submissions for 5 minutes.
Custom Rules & Patches modal showing Homebrew vs. Official Errata mode, Edit/Rename, and staged badges.
Export your custom rules as a shareable .ohcs-pack.json compendium, install or toggle community packs, and inspect License Key status.
Steps
Open " Packs" (Keys & Compendia Pack Manager) from the top toolbar or sheet actions bar.
Inspect the " Core Rules License Vault" status card (showing Unlocked status and 1-click " Copy 7-Word Key").
Under " Local Homebrew & Custom Rules", click " Export Custom Pack" to download your active homebrew rules as a shareable .ohcs-pack.json file.
Under " Installed Compendium Packs (.ohcs-pack.json)", click " Install .ohcs-pack.json", select the file you just exported, and test toggling the pack Enabled / Disabled.
Expected
" Export Custom Pack" packages your active custom weapons, armor, spells, abilities, and oaths into a clean .ohcs-pack.json compendium file.
Installed packs appear in the Pack Manager list where they can be toggled ON/OFF or removed at any time, immediately updating sheet dropdowns.
F. Roster & Data
S18 Multiple characters3 min
Roster switching never mixes data.
Steps
New character, name it "Test A".
Clone it, rename to "Test B", change Might.
Switch between them.
Delete "Test B".
Expected
Each character keeps its own values.
Delete asks for confirmation and removes only that entry.
Multiple characters
S19 Export & Import Character JSON (with Homebrew / Locked Module Stubs)3 min
Characters move between devices without loss—even if the receiving browser does not have the character's homebrew pack installed.
Steps
Equip a homebrew weapon (e.g. " Sunblade" from S17) on your character and click " Export JSON".
Open a second browser or Incognito window (unlocked with your key, or with the custom rule deleted/disabled) where "Sunblade" is not installed.
Click " Import" and load the exported character JSON.
Expected
Imported character loads all stats, notes, abilities, and portrait intact.
Even if "Sunblade" is missing from the local compendium, the weapon dropdown preserves " Sunblade [Imported]" with its combat stats (DMG, AP, Range, Traits) intact instead of resetting to "None", and displays a notice in the top banner and Packs modal.
S19b 25-Step Undo History, Kanka Entity Save & Supabase Cloud License/Character Sync ( History)3 min
Undo accidental edits with 1 click, persist character data on Kanka entities, and sign in on any new device to restore both your 7-word license key and character roster.
Steps
Click " History" in the top toolbar or sheet action bar to open the Character Undo, Backup History & Cloud Sync modal.
Test Undo & Clipboard: Click " Save Checkpoint", change an attribute on the sheet, then re-open " History" and click " Undo Last Change" (or click " Restore" on any of the last 25 snapshots). Test " Copy Character" and " Paste Character".
Test Supabase Cloud Account (License + Roster Sync): Under " Supabase Cloud Account", register or sign in with Email + Password (optional TOTP 2FA supported). Click " Push to Cloud" to back up your unlocked 7-word license key, custom rules, and character roster.
New-Device 1-Step Restore: Open an Incognito window (where the initial 7-word License Vault modal appears), expand " Have a Cloud Account? Sign In to Restore License Key & Characters", and click " Sign In & Restore".
Expected
Every stat edit automatically records into the 25-snapshot per-character ring buffer; " Undo Last Change" immediately restores the previous state.
When embedded in Kanka, clicking " Save to Kanka" persists all attributes plus ohcs_state_json directly to the Kanka entity.
Signing into your Cloud Account on a brand-new device automatically unlocks the 7-word encrypted rules vault, restores custom homebrew rules, and loads your character roster in one step.
Two pages, no clipped boxes, no duplicated inputs.
Dice colours print correctly.
Print media emulation.
G. Look & Layout
S21 Dark mode1 min
Theme switch is complete and readable.
Steps
Switch theme to Dark, then Auto, then Light.
Expected
No white boxes left in dark mode.
Dice colours unchanged.
Choice survives reload.
Dark mode
S22 Phone layout3 min
One-handed use on a phone.
Steps
Open on a phone (or devtools at 390 px).
Tap a text field.
Tap the top-row Encounter and Roller tabs, then tap or swipe through the bottom-row section tabs.
Expected
No zoom-in when tapping inputs (iOS).
Sticky 2-row top navigation shows character badge, `[ Encounter, Roller]`, and horizontal section tabs without floating footer buttons covering sheet text.
All buttons meet touch target size and are easy to hit with a thumb.
Phone layout
S23 Phone screen navigation2 min
Section cards switch cleanly.
Steps
Tap or swipe horizontally (``/``) through every section tab, and swipe vertically (``/`` edge gesture) or tap Encounter.
Rotate the device or widen above 768 px to check All vertical scroll / Expand All.
Expected
Active tab highlights cleanly with no empty screens or clipped controls.
Layout adapts on rotation without losing input; Tablet/Desktop exposes full-sheet vertical `All` view.
Phone screen navigation
S24 Phone dice roller1 min
Dice usable on small screens.
Steps
Tap Roller (or click an attack/skill) on the phone and roll.
Expected
Inline sliding roller card keeps vitals accessible; Roll button is reachable with the thumb and results are never hidden behind edges.
Phone dice roller
H. Channels & Offline
S25 Beta preview on stable (TWEAKED)2 min
Users always know when they are not on plain stable.
Steps
On /ohcs/, press "Beta Features".
Then press "Turn Off Beta Preview" in the banner.
Expected
Violet TWEAKED banner and ring appear, then disappear.
Beta preview on stable (TWEAKED)
S26 Beta instance2 min
Beta is clearly labelled and does not damage stable data.
Steps
Open https://hypertekst.net/ohcs-beta/.
Edit a character, then return to /ohcs/.
Use "Restore stable backup" if needed.
Expected
Amber BETA INSTANCE banner and "[BETA]" in tab title.
Stable still opens your characters.
S27 Changelog & Beta Feature Voting2 min
Users can see what changed and vote on which beta features promote to stable.
Steps
Open the Changelog from the toolbar on stable or beta.
Review the "Beta vs. Stable Changes" comparison table.
Cast votes ( Want / Tweak / Skip) on features (Vitals, Pips, Resets, Delving, Split, Roster).
Add optional comments in the feedback box and click " Submit Votes to Discord" (or " Copy Summary").
Expected
Version shown matches footer; table compares stable vs. beta capabilities.
Tapping vote buttons toggles selection and persists in your browser.
Submitting sends formatted votes to Discord #ohcs-patches (or copies summary if unauthenticated).
Changelog & Beta Feature Voting
S28 Install and offline3 min
Works as an installed app without network.
Steps
Install the app (browser menu or "Install" button).
Open it once online, then enable airplane mode.
Open again, edit, roll dice, open rules.
Expected
App loads offline with rules unlocked.
Edits persist after going back online.
I. Owlbear Rodeo VTT
S29 GM Setup: Create Room & Enable Extensions3 min
Only the GM needs an Owlbear Rodeo account and adds the extension manifest once for the room.
Steps
Log in at https://www.owlbear.rodeo (GM account required; players do not need accounts).
In your profile Dashboard -> Extensions -> click "+ Add Extension" (Custom Extension) and paste: https://hypertekst.net/ohcs/manifest.json
(Optional) Also add the shared room dice tray manifest: https://hypertekst.net/hammerdice-owlbear/manifest.json
Create or open a Room, click the "..." (More) menu -> Extensions, and toggle "Oath Hammer Character Sheet" ON for this room.
Expected
The Oath Hammer shield/hammer icon appears in the top-left action bar of the Owlbear room for the GM and all players.
Players joining the room automatically get the extension icon without installing any manifest URL themselves.
S30 Player Join, Auto-Unlock via Pop-Out or Copy Key2 min
Players join via room link, get admitted by the GM, and unlock the Owlbear iframe via 1-click Pop-Out or Copy/Paste.
Steps
GM copies the Room URL (or clicks Invite) and sends it to the player (or opens an Incognito window to simulate a player).
Player opens the room URL and enters a display name (no Owlbear account login required).
GM clicks "Allow" on the Knocking notification at the top-left to admit the player as a Player role.
Unlock inside Owlbear: Because browsers partition iframe storage inside owlbear.rodeo, either click " Pop Out Sheet" in the Owlbear VTT bar (which opens a top-level hypertekst.net window and automatically syncs your unlocked license key back into the Owlbear iframe), OR click " License" -> " Copy Key" on your standalone tab and " Paste Key" inside Owlbear.
Expected
The 420x720 character sheet popover opens inside Owlbear Rodeo with the indigo Owlbear VTT bar at the top.
Clicking " Pop Out Sheet" (or using " Copy Key" -> " Paste Key") unlocks the Owlbear iframe and caches the key for future sessions.
420x720 Owlbear Rodeo extension popover with VTT Control Bar.
S31 Resize Popover (420px / 960px), Pop-Out Windows & Character Management3 min
Players can resize the Owlbear popover, pop out the Sheet or Dice Roller into movable windows, and create/import PCs.
Steps
Compact vs. Wide Popover: By default, the 420x720 popover starts on the " Stats" card with header details collapsed so there is no long vertical scroll. Click " Wide 960px" in the Owlbear VTT bar to expand the popover to the full 3-column sheet (or " Compact 420px" to shrink back).
Pop-Out Windows: Click " Pop Out Sheet" to open a freely movable/resizable character sheet window, or click " Pop Out Dice" to open a compact floating Dice Roller & Session Roll Log window.
Create / Export / Import PC: Click "+ New" -> " Character Wizard", or use " Export JSON" / " Import" to exchange character files.
Expected
" Wide 960px" dynamically resizes the Owlbear popover via OBR.action.setWidth(960).
Popped-out Sheet and Dice windows can be dragged to a second monitor and relay all rolls straight into the Owlbear room.
Owlbear VTT bar with Wide 960px toggle, Pop Out Sheet, Pop Out Dice, and Roster controls.
S32 Session Roll Log, Owlbear Map Toasts & Room Sync2 min
Every roll is logged with history in the built-in Roll Log, pops a toast on the Owlbear map, and syncs to HammerDice Owlbear.
Steps
Roll any Skill (e.g. Fighting) or Weapon Attack from the Owlbear popover or from a popped-out Sheet/Dice window.
Inspect the " Roll Log" feed inside the Dice Roller (and test " Copy Log" / " Clear").
Observe the Owlbear Rodeo room notification banner at the top of the map and (if installed) the HammerDice Owlbear extension tray.
Expected
1) Built-in Roll Log: Records a scrolling session history (up to 40 rolls) showing player name ( local / room), timestamp, White/Red/Black die chips with explosion markers (), and net Successes.
2) Owlbear Map Notification: Calls OBR.notification.show(...) so everyone in the room sees a banner toast at the top of the map.
3) Room Metadata & Cross-Window Sync: Writes net.hypertekst.hammerdice/lastRoll and rollHistory to OBR.room.setMetadata (syncing with HammerDice Owlbear and other players' sheets) and broadcasts across BroadcastChannel to popped-out windows.
J. Portrait Lightbox, Community Directory, Campaigns & Discord Bot (S33–S36)
S33 Multi-Picture Portrait Gallery & Full-Format Lightbox Viewer2 min
Upload multiple character pictures, switch active thumbnail, and inspect full-format resolution in the lightbox modal.
Steps
In the Character Portrait frame (top-left), click " Upload" (or drag-and-drop 2–4 image files).
Click thumbnails in the gallery strip below the portrait to switch the active primary portrait.
Click the main portrait image (or " View Full") to open the Full-Format Lightbox Viewer (#oh-lightbox-modal).
Use the / buttons or Left/Right arrow keys to cycle through portraits and Escape to close.
Expected
All uploaded portraits appear in the thumbnail strip (up to 8 per character) and persist in local storage and exported .ohcs.json files.
Clicking the portrait or " View Full" opens the full-screen lightbox showing the full-format image, counter ("Portrait X of N"), and keyboard navigation.
S34 Cloud Autosave, Public Publishing Opt-In & Community Directory Search3 min
Verify automatic cloud sync for active cloud accounts, opt-in public character publishing, and as-you-type FTS directory search.
Steps
Open " Cloud" (#btn-cloud-sync) and sign in with an active cloud account.
Verify "Auto-save to Cloud when signed in" (#oh-cloud-autosave-toggle) is checked, edit a field on the sheet, and wait 2.5 seconds.
Optionally check " Publish active character to Community Directory" (#oh-cloud-public-toggle) and enter a short public summary.
Click " Directory" (#btn-open-directory), search as you type in #oh-dir-search-input, and test " Import Copy" and " Copy Link".
Expected
Edits automatically sync to the cloud and update the #oh-cloud-autosave-badge timestamp without manual clicks.
Characters remain private by default unless published; published characters appear in the Community Directory with autocomplete suggestions and can be imported as a local copy or opened via ?char=<uuid>.
S35 Campaign Creation, Character Application/Invite & House Rules Sync3 min
Create a campaign, link a character via application or invite URL, and sync campaign house rules & custom equipment.
Steps
Open " Directory" (#btn-open-directory) and switch to the " Campaigns & Party" tab.
Create a new campaign (slug, name, setting) or browse an existing recruiting campaign.
Click " Apply with Active Character" (or open a ?campaign=<id>&invite=<code> link) and approve the character link as GM.
Click " Push My Custom Equipment to Campaign" (as GM) and " Sync Campaign House Rules & Equipment" (as Player).
Expected
Players can apply or join via invite link even if their character is not publicly published in the directory.
Syncing campaign house rules merges the campaign's custom equipment and rules into the player's local OHCS workbench.
Export/import a .marshalcy-campaign.json bundle into /marshalcy/ Wiki & Dossiers, and test Discord Bot DM Key Manager commands.
Steps
In OHCS (" Campaigns & Party") or Marshalcy (/marshalcy/ " Wiki & Dossiers"), click " Export Campaign Bundle" or " Sync OHCS Party".
In /marshalcy/, open " Wiki & Dossiers", inspect a party member's dossier, and click a portrait thumbnail to open the full-format lightbox (#marshalcyLightbox).
In Discord (Server or Direct Message with the OHCS Bot), run /ohcs-character search, /ohcs-campaign list, or (as Admin) /ohcs-keys list and /ohcs-keys check.
Expected
Marshalcy displays the active campaign party dossiers and opens full-resolution character portraits in #marshalcyLightbox.
The Discord bot responds in both server channels and Direct Messages (DMs), listing keys, answering whether a given email/user has a key (and which one), and providing interactive Key Manager buttons/modals.
Sending
Send report opens the sheet in a new tab. Once the sheet is unlocked with your key, the report goes to our Discord channel and you see a confirmation at the bottom of the sheet. Only scenarios you marked are included. If sending fails, use Copy and paste the text in Discord or a GitHub issue.
Screenshots generated automatically from the current build on 2026-10-30. Actual appearance may differ slightly.