Conversation
- Clear log and cleanly replay history up to the target step on back navigation - Add reactive pager for multiline MUD outputs with desktop space/enter shortcuts and mobile tap bar - Reposition Exit button to top-right header across viewports
- Reconstructed step history when navigating backward in tutorial steps to maintain a coherent log state. - Added a reactive pager for chunking large MUD outputs into readable pages on constrained displays. - Implemented keyboard (Space/Enter) and touch tap interactions for pager navigation. - Fixed input handling to allow space bar typing within commands without inadvertently triggering the pager. - Repositioned the tutorial Exit button anchored at top-right on header bar.
- Reconstruct terminal log and replay history on back step navigation - Split large MUD outputs (>8 lines) into 6-line pages with sticky pager bar - Add Space/Enter/PageDown keyboard paging and touch-friendly tap-to-advance - Queue and defer next-step triggers while pager is active to preserve order - Hide empty quest action cards on story beats without ask commands - Position Exit Tutorial button at top right of header frame across viewports
…al pager - Clear and replay log history up to target index when navigating backwards (`goToStep`). - Implement reactive terminal pager supporting text chunking, weighted image lines, and live scroll overflow. - Add keyboard (Space/Enter/PageDown) and touch/mobile (`.tut-pager-banner`) advancement controls. - Defer queued step advancement until remaining pages/scroll overflow are fully revealed. - Ensure Exit button position is anchored at top-right across viewports.
- Clean step log rewind and state replay on step back/pill navigation - Implement reactive terminal pager measuring DOM scroll overflow - Support Space, Enter, PageDown key navigation and mobile/touch tap banner - Position Exit Tutorial button in top-right header corner
… pager - Clear terminal log and reconstruct step history when navigating backward in tutorial player - Add reactive terminal output pager for overflow content handling desktop keyboard and mobile tap controls - Debounce scroll detection to hide pager banner while actively scrolling
- Rewind step navigation (`goToStep`) now cancels auto-advance timers, resets `log.value`, and cleanly replays step elements up to target step without orphan prompts. - Integrate reactive terminal pager directly into the input bar when log overflows, handling keyboard (Space/PageDown/Enter) and touch/mouse interactions without virtual keyboard pops on mobile. - Add dynamic DOM scroll monitoring via `ResizeObserver` and scroll events.
- Rewind step navigation (`goToStep`) now cancels auto-advance timers, resets `log.value`, and cleanly replays step elements up to target step without orphan prompts. - Integrate reactive terminal pager directly into the input bar when log overflows, handling keyboard (Space/PageDown/Enter) and touch/mouse interactions without virtual keyboard pops on mobile. - Support inline markdown images (``) in frontmatter story beats and step responses with dynamic pager state recalculations on image load. - Stream Chapter 15 screenshots via step story beats to keep initial load compact and enable step-by-step keyboard pagination. - Update `TUTORIAL.md` contributor documentation.
…move escaped newlines - Rewind step navigation (`goToStep`) now cancels auto-advance timers, resets `log.value`, and cleanly replays step elements up to target step without orphan prompts. - Integrate reactive terminal pager directly into the input bar when log overflows, handling keyboard (Space/PageDown/Enter) and touch/mouse interactions without virtual keyboard pops on mobile. - Support inline markdown images (``) in frontmatter story beats and step responses with dynamic pager state recalculations on image load. - Stream Chapter 15 screenshots via step story beats to keep initial load compact and enable step-by-step keyboard pagination. - Convert all literal `\n` newlines in tutorial chapter files to natural YAML multiline scalars (`|`). - Update `TUTORIAL.md` authoring guide to advise contributors on using YAML block scalars instead of `\n`.
…elative image paths
…elative image paths
…elative image modal preview
Contributor
Reviewer's GuideThe tutorial player now rebuilds and rewinds interactive steps, provides reactive paging for overflowing terminal output, renders relative Markdown images with a click-to-enlarge lightbox, and updates tutorial content and validation to support multiline image-bearing story beats. Sequence diagram for tutorial output paging and step rewindsequenceDiagram
participant User
participant TutorialPlayer
participant Log as TerminalLog
participant Pager
User->>TutorialPlayer: goToStep(targetIdx)
TutorialPlayer->>TutorialPlayer: clearAutoAdvanceTimer()
TutorialPlayer->>TutorialPlayer: rebuild log through target step
TutorialPlayer->>Log: scrollLog()
Log-->>Pager: overflow detected
Pager->>Pager: updatePagerState()
User->>TutorialPlayer: pageForward() via Space, Enter, or PageDown
TutorialPlayer->>Log: scrollBy()
Log-->>Pager: scroll event
Pager->>Pager: updatePagerState()
Pager-->>User: show current page and More prompt
Sequence diagram for tutorial image lightbox previewsequenceDiagram
participant User
participant TutorialPlayer
participant Log as TerminalLog
participant Lightbox
TutorialPlayer->>Log: render Markdown image
User->>Log: click tut-img-embed
Log->>TutorialPlayer: handleLogClick(event)
TutorialPlayer->>Lightbox: openImageModal(src, alt)
Lightbox-->>User: display enlarged image and caption
User->>TutorialPlayer: press Escape or close button
TutorialPlayer->>Lightbox: closeImageModal()
Lightbox-->>User: hide preview
Flow diagram for relative Markdown image renderingflowchart LR
A[Markdown image in story beat] --> B[formatInlineMarkdown]
B --> C[Normalize assets path]
C --> D[Apply withBase]
D --> E[Render tut-img-embed]
E --> F[Click opens lightbox]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
Contributor
There was a problem hiding this comment.
Hey - I've found 4 issues
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="docs/.vitepress/theme/components/TutorialPlayer.vue" line_range="319" />
<code_context>
-function renderStepLog() {
- subStepIdx.value = 0
+function goToStep(targetIdx) {
+ clearAutoAdvanceTimer()
+ if (targetIdx < 0) targetIdx = 0
</code_context>
<issue_to_address>
**issue (bug_risk):** goToStep does not clear `entry.value`, so navigating with a step pill or rewind leaves a partially typed command in the input and allows that stale command to be submitted against the newly selected step.
**Triggers:** When the user has typed a command and then navigates backward or selects another step before submitting it.
**Suggested fix:** Set `entry.value = ''` while reconstructing the step state in `goToStep`.
```suggestion
finished.value = false
entry.value = ''
```
</issue_to_address>
### Comment 2
<location path="docs/.vitepress/theme/components/TutorialPlayer.vue" line_range="338-339" />
<code_context>
+ if (step) {
+ if (step.ask) {
+ newLog.push({ kind: 'echo', text: step.ask })
+ const rawRes = step.response || step.example || mumeResponses.value[step.ask.toLowerCase()] || ''
+ const body = rawRes ? rawRes.replace(/^>[^\n]*\n?/, '') : ''
+ if (body) {
+ newLog.push({ kind: 'example', body })
</code_context>
<issue_to_address>
**issue (broader_impact):** The rewind replay looks up a response using the canonical `step.ask` rather than the accepted command that originally produced it, so a step whose response exists only under an accepted alias is replayed without its MUD output.
**Triggers:** When a step has an accepted alias and `step.response` is absent, while `mumeResponses` is keyed by that alias instead of the canonical `ask`.
**Suggested fix:** Persist or derive the actual accepted command used for each completed step, or search all accepted aliases when reconstructing the response.
</issue_to_address>
### Comment 3
<location path="docs/.vitepress/theme/components/TutorialPlayer.vue" line_range="31-33" />
<code_context>
+ const cleanAlt = alt.replace(/"/g, '"')
+ let cleanSrc = src.trim().replace(/"/g, '"')
+
+ if (cleanSrc.includes('assets/')) {
+ cleanSrc = '/assets/' + cleanSrc.split('assets/')[1]
+ }
+
</code_context>
<issue_to_address>
**issue (bug_risk):** Any image URL containing `assets/` is forcibly rewritten to a site-local `/assets/...` path, so external URLs such as `https://cdn.example.com/assets/image.png` are changed to `/assets/image.png` and fail to load.
**Triggers:** When tutorial Markdown contains an external image URL whose hostname or path includes `assets/`.
**Suggested fix:** Normalize only the intended relative `public/assets` paths and leave absolute `http://`, `https://`, and data URLs unchanged.
```suggestion
if (/^(?:\.\.\/|\.\/)*public\/assets\//.test(cleanSrc)) {
cleanSrc = '/assets/' + cleanSrc.split('public/assets/')[1]
}
```
</issue_to_address>
### Comment 4
<location path="docs/.vitepress/theme/components/TutorialPlayer.vue" line_range="188" />
<code_context>
+ }
+
+ // Intercept Space or PageDown for paging if output overflow is active and input is empty or unfocused
+ if (isScrollOverflowActive.value && !isScrolling.value) {
+ const isInputFocused = document.activeElement === inputEl.value
+ if (e.key === 'PageDown' || (e.key === ' ' && (!isInputFocused || !entry.value.trim()))) {
+ e.preventDefault()
+ pageForward()
}
}
</code_context>
<issue_to_address>
**nitpick (bug_risk):** The global key handler intercepts `PageDown` whenever pager overflow is active, even when the command input is focused and contains text, so PageDown cannot be used normally while entering a command and is always converted into pager navigation.
**Triggers:** When output is overflowing and the user presses PageDown while the input is focused.
**Suggested fix:** Apply the same empty-or-unfocused input guard to PageDown that is applied to Space, unless pager navigation is explicitly intended to override input editing.
```suggestion
if ((e.key === 'PageDown' || e.key === ' ') && (!isInputFocused || !entry.value.trim())) {
```
</issue_to_address>Sourcery assessment
Approval pending. 3 findings to address first.
Blocking findings: docs/.vitepress/theme/components/TutorialPlayer.vue:319, docs/.vitepress/theme/components/TutorialPlayer.vue:339, docs/.vitepress/theme/components/TutorialPlayer.vue:33
…elative image modal preview
adhocmedia
added a commit
to adhocmedia/mume.github.io
that referenced
this pull request
Sep 21, 2026
Rebuild the interactive tutorial as a real-map walkthrough of Black Hill Village, on top of Nils's upstream engine (pager + image lightbox, MUME#64). - 16 chapters: adds a "What is MUME?" intro; reorders so Movement & Doors (ch4, Common Room -> Kitchen -> open trapdoor -> Cellar) precedes Examining (ch5, in the cellar); real room descriptions throughout. - Maps are inline story-beat images per the new TUTORIAL.md guidance (dropped the custom `map:` frontmatter and its bespoke figure code). - Rooms auto-displayed after `change spam all off` are brief (name + occupants + exits); explicit `look` stays full. - Fixes: spam command, equipment vs inventory ordering, parry (not dodge) on wimpy mood, snake combat text, give-to-Irelm, bare-command accepts. - Update MumeCommandGuide + Newcomers/home/play links to the new numbering. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
adhocmedia
added a commit
to adhocmedia/mume.github.io
that referenced
this pull request
Sep 21, 2026
Rebuild the interactive tutorial as a real-map walkthrough of Black Hill Village, on top of Nils's upstream engine (pager + image lightbox, MUME#64). - 16 chapters: adds a "What is MUME?" intro; reorders so Movement & Doors (ch4, Common Room -> Kitchen -> open trapdoor -> Cellar) precedes Examining (ch5, in the cellar); real room descriptions throughout. - Maps are inline story-beat images per the new TUTORIAL.md guidance (dropped the custom `map:` frontmatter and its bespoke figure code). - Rooms auto-displayed after `change spam all off` are brief (name + occupants + exits); explicit `look` stays full. - Fixes: spam command, equipment vs inventory ordering, parry (not dodge) on wimpy mood, snake combat text, give-to-Irelm, bare-command accepts. - Update MumeCommandGuide + Newcomers/home/play links to the new numbering. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
adhocmedia
added a commit
to adhocmedia/mume.github.io
that referenced
this pull request
Sep 22, 2026
Rebuild the interactive tutorial as a real-map walkthrough of Black Hill Village, on top of Nils's upstream engine (pager + image lightbox, MUME#64). - 16 chapters: adds a "What is MUME?" intro; reorders so Movement & Doors (ch4, Common Room -> Kitchen -> open trapdoor -> Cellar) precedes Examining (ch5, in the cellar); real room descriptions throughout. - Maps are inline story-beat images per the new TUTORIAL.md guidance (dropped the custom `map:` frontmatter and its bespoke figure code). - Rooms auto-displayed after `change spam all off` are brief (name + occupants + exits); explicit `look` stays full. - Fixes: spam command, equipment vs inventory ordering, parry (not dodge) on wimpy mood, snake combat text, give-to-Irelm, bare-command accepts. - Update MumeCommandGuide + Newcomers/home/play links to the new numbering. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This branch was successfully deployed
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.
Implements step rewind replay, integrated reactive MUD output pager, click-to-enlarge image lightbox modal, relative image paths in Markdown files, and test validation.
Summary by Sourcery
Enhance the tutorial player with rewindable steps, automatic output paging, and image lightbox previews while validating and documenting embedded Markdown assets.
New Features:
Bug Fixes:
Enhancements:
Documentation:
Tests: