docs: migrate Quest 5 docs into Starlight, content-accuracy pass - #2108
Draft
alexwarren wants to merge 113 commits into
Draft
docs: migrate Quest 5 docs into Starlight, content-accuracy pass#2108alexwarren wants to merge 113 commits into
alexwarren wants to merge 113 commits into
Conversation
Executes phases 1-5 of docs-migration-plan.md: 746 pages copied from the v5 branch's docs/ into site/src/content/docs/, internal links resolved and rewritten against the real source tree, referenced images/audio/ examples copied into site/public/, sidebar rebuilt from the original Jekyll parent/grand_parent hierarchy into nested Starlight groups, and the docs.textadventures.co.uk wildcard redirect added. Phase 6 (removing docs/ from the v5 branch) is left for a follow-up - that's a destructive change on a different branch. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…betizing it
The reconstructed Quest 5 sidebar was ignoring the just-the-docs nav_order
values and sorting every group alphabetically, and it wrapped everything in
a synthetic "Quest 5 Reference" header that didn't exist in the source nav.
Also, the v5 "guides" directory was landing in this site's own pre-existing
Guides section (introduction/hosting/webplayer) instead of nesting under
"Other Guides", where its own frontmatter parent chain actually places it.
Rebuilds the sidebar generator to sort by nav_order (falling back to
alphabetical only where the source had none, matching just-the-docs'
own behavior), fold every directory hub page (functions/index.md,
attributes/index.md, etc.) into the same parent/child tree instead of
bolting them on as flat siblings, and place the reconstructed groups
directly at the sidebar root next to Guides rather than under a wrapper.
Moves docs/guides/* to other_guides/ to match its real parent ("Other
Guides"), keeping this site's own guides/ untouched.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Migration was discarding nav_exclude, which surfaced two pages that were never supposed to be in the sidebar. style_guide.md was a true orphan - unlinked from anywhere and full of stale Jekyll-specific instructions (e.g. "must link to the .html version") - so it's just removed rather than kept as dead weight. functions/index_allfunctions.md is different: it's deliberately linked from functions/index.md's "alphabetical order" callout, just never meant to clutter the Functions sidebar group, so it gets Starlight's direct equivalent (sidebar.hidden) instead of deletion. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…s via autogenerate
Functions/ has its own extra tier that autogenerate can't see: 319 pages
sit flat on disk, but their frontmatter chains up through 15 real category
hub pages (fn-attributes.md "Functions for Attributes", fn-scope.md
"Scope Functions", etc.) before reaching the Functions root. Using
{ autogenerate: { directory: "functions" } } listed all 319 as flat
siblings and lost that middle tier entirely - same problem for every
other directory group, just that none of the others happened to have a
hidden layer to lose.
Replaces the DIR_HUBS/autogenerate approach with one full explicit tree
built from every migrated page's original parent/nav_order frontmatter,
not just the top-level ones - this generalizes correctly to functions/'s
3-level structure without needing to special-case it.
Also fixes an unrelated bug this surfaced: Astro lowercases every slug
path segment (githubSlug), so the one mixed-case filename in the whole
tree (functions/currentDateUTC.md) was actually routable only at
/functions/currentdateutc - both the sidebar config and the inbound link
from index_allfunctions.md pointed at the wrong-case URL. Renamed the
file rather than special-case slug casing everywhere a route is computed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… URL, add community links - ask_about.md and ask_tell.md both inherited the generic "Handling ASK/TELL" title from the source, even though they're complementary but different pages (one introduces SAY/TALK TO/ASK ABOUT generally, the other is a deep dive on building the ASK/TELL system). Retitled to "Ways to Talk to NPCs" and "Building an Ask/Tell System" respectively - content untouched. - 5 pages linked to their own siblings via absolute URLs back to docs.textadventures.co.uk instead of a relative link (objectlistsort, shop, displaymoney, text_processor, quickparams) - normalized to internal links so they don't depend on that domain forever. - Set astro.config.mjs `site` so the sitemap integration stops warning and actually emits sitemap-index.xml. - guides/introduction.md's "Where's all the documentation?" section still said the docs were "a work in progress" living on the old Quest 5 site and would "be migrated to this site soon" - that's done now, so it points at the new Overview/Tutorial instead, and gained a "Getting help" section (Discord, GitHub Discussions, issue tracker) since nothing else in the site surfaced those. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Checked further: the archived docs.textadventures.co.uk page for Jay Nabonne's PathLib exists on the Wayback Machine, but its own Download link doesn't work either - the local archive.textadventures.co.uk forum export shows the author deleted the v0.7 and v0.8 attachments himself years ago on the original thread, and the export format doesn't capture attachments at all for v0.9 to check further. Not recoverable, and not worth chasing - the actual PathLib_GetPathExt/PathLib_AddEntry code this page needs is already pasted in full a few paragraphs down, so nothing here was actually broken beyond the attribution link itself. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The previous fix dropped the dead PathLib link but left "Jay Nabonne wrote a path-finding library we can use." pointing at nothing. The code is already inline a few paragraphs down, so say that instead. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Starlight expands every sidebar group by default; just-the-docs (the old theme) collapsed everything until you clicked in. With ~750 pages now in one tree, fully expanded made the sidebar unusably long. Starlight still auto-expands whichever group contains the current page, so this doesn't change discoverability - just the default state. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…split Cuts 13 stub/landing pages, merges 11 duplicate/derivative pages into their targets, and fixes the resulting sidebar entries and cross-links, per docs-migration-triage/triage-decisions.md. Also sweeps ~30 pages that described a Quest 5-era split between a desktop editor and a more limited web editor (drag-and-drop vs. a Move button, missing Attributes tab, upload workarounds, etc.). Quest Viva ships one unified AppShell editor now, so that split no longer exists; instructions are collapsed into a single accurate path, verified against the running editor rather than guessed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Most screenshots in the migrated Quest 5 docs show the old desktop/web editor, which no longer exists — Quest Viva has one unified AppShell editor now. Adds tests/e2e/docs-screenshots/ (shared helpers in lib.mjs plus one capture script per doc page) to regenerate them against the live editor instead of by hand, and a .claude/skills/docs-screenshots skill documenting the approach and gotchas (no id/aria-label hooks on property fields, real ellipsis chars in placeholders, ambiguous tab labels like "Object" vs "Objects"). Pilot covers tutorial/creating_a_simple_game.md's 7 screenshots. Capture viewport is kept narrow (960px) and cropped to actual content per shot (not the full window) so text stays legible once Starlight scales the image down to its content column width. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds 6 more capture-*.mjs scripts covering using_scripts.md, custom_attributes.md, using_containers.md, moving_objects_during_the_game.md, interacting_with_objects.md (editor-chrome shots only — Switchonoffplay.png is an in-game player screenshot, out of scope), and using_timers_and_turn_scripts.md — regenerating 16 stale Quest 5 editor screenshots against the current AppShell editor. lib.mjs grows addVerb, addAdvancedElement, addScriptCommand, ifExpressionSelect/ ifObjectSelect, and toggleFeature to support the script-editor (if/then/else), timer, and feature-toggle UI these pages exercise. SKILL.md's stated viewport (1280x800) is corrected to the 960x800 the harness actually uses. custom_commands.md and more_things_to_do_with_objects.md are skipped this round — both are blocked by a real AppShell editor bug (multi-control simplepattern/ scriptdictionary sub-editors render nothing) surfaced while building this batch and flagged separately. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…hots harness Extends the Playwright docs-screenshot harness with two previously-deferred capabilities: openPreview/sendCommand drive the toolbar Preview button into a live WasmPlayer tab so a capture script can screenshot actual gameplay (not just editor chrome), and capture()'s new cursorAt option draws a synthetic mouse pointer, since a real screenshot never captures the OS cursor. Applied both to the 3 pages already covered by the harness: using_containers.md gains Containerfridgeplayer.png (opening the fridge to see the custom contents prefix in play), and using_scripts.md/custom_attributes.md restore the mouse pointer that the original Quest 5 screenshots had in Addif.png, Addif3.png and Printexpression.png (confirmed by diffing against the pre-6d4a6460 versions). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ects.md screenshots These two tutorial pages were blocked since the last docs-screenshot round by an AppShell bug where the Command element's Pattern field and the Use/Give per-object script list rendered nothing. That bug is now fixed, confirmed via tests/e2e/verify-appshell-multi-control-editors.mjs passing clean, so this extends the docs-screenshot harness to both pages. more_things_to_do_with_objects.md is fully done (7/7 images, including a tiny inline icon crop for Add.png). custom_commands.md is 3/4 (Commandsay, Commandweigh, Checkforattribute) — the 4th, Say_to_troll.png, hit a different, still-unimplemented gap (the Switch script command's case-list editor renders nothing), flagged separately for a follow-up fix. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
First wave of the ~47-page non-tutorial backlog (root site/public/images/ + other_guides/), covering 9 images across 10 single-image pages: Debugger.png (shared by about_types.md and debugging_your_game.md, via WasmPlayer's editor-preview debugger), Pov1.png (changing_the_player_object.md), Talk3.png (conversations.md), status2.png (status_attributes.md), Templates.png (changing_templates.md), text_processor_text.png (text_processor.md), type_attributes.png (using_inherited_types.md), verb_element.png (using_verbs.md), and ShowMenu.png (showing_a_menu.md). A prior classification pass (Explore agent) sorted the 47 pages into ~30 pure-editor, ~4 pure-player, ~5 external/out-of-scope, and ~6 mixed pages. This wave covers the simplest single-image editor pages as a first slice. ask_about.md's Asktell3.png hit a real gap - ScriptDictionaryEditor.svelte (shared by Ask/Tell topics and Use/Give's per-object list) supports adding and removing entries but not renaming an existing one's key, which the doc page specifically demonstrates - flagged separately, page left for later. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Covers 12 images across 8 pages: cloak_of_darkness.md (cod01.png), patrolling_npcs.md (patrol1.png - Set variable/If/Call-function-with-parameters script on a custom string-list attribute), commands.md (CommandHelp.png, CommandAttack.png), other_guides/starting_inventory.md and other_guides/implementing_components_of_an_object.md (one image each), speak_to.md (Talk1.png only - Talk2.png needs the still-unimplemented Switch case-list editor), memory_or_wiki.md (memory1.png, memory2.png - the latter demonstrates AppShell recognising a known library function, DoAskTell, and swapping the generic "+ param" list for named fields matching its actual signature), and score_health_money.md (increase_decrease.png, increase.png, you_died.png). Two recurring gotchas hit repeatedly this round, now worth remembering: scrolled-input text truncation (a .fill()'d field showing its tail, not its start, unless scrollLeft is reset) and same-label field collision once a page has more than one row sharing a label like "Set variable" or "else if" (must anchor on the specific nth occurrence of the label/branch itself, not a page-wide following:: sweep, or fills land in the wrong row). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Regenerates 21 editor screenshots across 6 pages (character_creation.md, editor_user_interface_elements.md, exits.md, convert.md, asking_a_question.md, switchable.md) against the current AppShell editor. lib.mjs gains two reusable helpers found along the way: - setScriptCodeView: types raw quest-script into a script's Code view and switches back to Visual editor — much faster than reconstructing nested scripts via addScriptCommand, and the only way to reach "get input" (intentionally removed from the Add Script Command picker, superseded by GetInput(), but still fully editable once present). - capture() now grows the viewport to fit content taller than the fixed 960x800 frame (e.g. deeply nested get-input/show-menu chains) instead of silently truncating. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Regenerates all 8 editor screenshots in site/src/content/docs/containers.md against the current AppShell editor (chest/backpack containers, locking, limited-container volume/count, open/add-object trap scripts). Found the doc's "Require all keys" checkbox (Quest 5.8+) has no corresponding code path in the current container_lockable type — flagged as a follow-up task, not fixed here; lockandkey.png captured faithfully without it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
docs/containers.md has described a "Require all keys" checkbox since 2018, claiming it shipped in Quest 5.8, but it was never actually implemented in code (verified across the full git history back to the 2014 commit that added multi-key locking). Adds it for real: a new requireallkeys attribute on container_lockable (default true, so existing behaviour is unchanged) plus an AnyKeyAvailable function used when it's unticked, and the corresponding Container-tab checkbox. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Regenerates the 4 of 7 editor screenshots in site/src/content/docs/ask_simple_question.md that don't depend on the Switch cases editor (menu1/1a/2/5.png). menu3/4/4a.png all render the Switch command's Cases as a raw "[scriptdictionary]" placeholder — the same unimplemented-control gap already flagged as task_082ae91c and fixed upstream in PR #2090 (open, not yet merged); left at their old Quest 5 screenshots pending that merge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Now that PR #2090 (Switch cases editor) is merged, regenerates the remaining 3 of 7 screenshots that were blocked (menu3/4/4a.png), expanding each case row so the actual per-case script content is visible rather than the collapsed "▶ case" summary. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Now that PR #2091 (ScriptDictionaryEditor rename/edit-key support) is merged, captures Mary's "dr black" topic renamed to "dr doctor black" via the new Edit Key affordance — previously blocked entirely (no rename UI existed). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Now that PR #2090 (Switch cases editor) is merged, regenerates Talk2.png (the topic-menu + switch example) — previously blocked. Talk1.png re-verified unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Now that PR #2090 (Switch cases editor) is merged, regenerates Say_to_troll.png — previously blocked. The doc gives no exact code for this "Additional Example (Advanced)" beyond the command pattern and "a different response for different characters, and a default too", so the switch's case/message content here is a reasonable invented match for that description, not transcribed from the doc. Commandsay/Commandweigh/ Checkforattribute.png re-verified unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Now that PR #2090 (Switch cases editor) is merged, captures the nested ShowMenu/switch/ShowMenu example — previously blocked. Confirms a multi-key case ("Green", "Blue") also renders correctly as one case row. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Part 1/2/3 were a single continuous guide split for old-wiki pagination, each ending with an explicit "in part N we will..." handoff to the next. Merged into howto/ux/customising_the_ui.md, relying on Starlight's right-hand page TOC for navigation instead of three separate sidebar entries. Along the way, fixed a genuine duplicate-heading bug that predated the merge - Part 1 had two H2 sections both titled "JavaScript" - by folding the second (a one-paragraph transition into jQuery) into the jQuery section's lead-in instead. Redirects for the old three URLs point into the merged page: Part 1 to the top, Part 2 and 3 to the #elements and #testing anchors where their content now starts. Updated the 4 in-repo cross-links that pointed at the old pages. Zombie Apocalypse (Part 1)/(Part 2) were considered for the same treatment but left as separate pages - unlike this reference-style guide, they're a single continuous ~900-line "build this game" tutorial project, the same kind of sequential hands-on content the main Tutorial section already keeps as separate chapters rather than one page. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Extends the earlier page-title casing pass to H2-H4 headings within page content, e.g. "Basic Controls" -> "Basic controls", "A Note About Lists and Dictionaries" -> "A note about lists and dictionaries". Same rule as before: capitalize only the first word and genuine proper nouns/acronyms (Quest, GitHub, HTML, ID, RPG, etc.); code spans and quoted UI strings within a heading are left untouched. Explicitly excludes the merged Language Reference pages (scripts, functions, attributes, elements, types, js) - their H2 headings are literal function/attribute/command/element names, not prose section titles, so changing their case would misrepresent real identifiers rather than fix a style inconsistency. Also excludes 6 CSS-property H3s in the newly-merged "Customising the UI" page (color, background-color, width, opacity, border, background-image) for the same reason - they're literal CSS property syntax. Anchor slugs are unaffected throughout, since heading-derived anchors are already lowercased regardless of display casing - no redirects or cross-link updates needed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The "Troubleshooting" guide section under Guides was a set of 2012-era teacher-contributed helpsheets that had drifted from actual troubleshooting into ad-hoc recipes, all of which already had a better, current home: locked exits/doors in exits.md, yes/no questions in asking_a_question.md, timers in using_timers_and_turn_scripts.md/status_attributes.md, sounds in adding_sounds.md, the object-prefix fix in the main tutorial, and the "monster behind a door" puzzle already had a proper duplicate at other_guides/timelimitedpuzzles.md. Removes the 11 helpsheet pages, their index, the nav entry, and their now-orphaned screenshots (keeping the 5 still referenced by timelimitedpuzzles.md). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Covers three pages left over after the recent doc cuts: timelimitedpuzzles.md (5 images, kept from the deleted helpsheets/ track), the switch-script page (3 images, was blocked on the Switch case-list editor which has since shipped), and copy_and_paste_code.md (1 image, TV's look script in Code View). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Covers the three remaining pure-player pages: ui-style.md (classic interface,
colour-blend background with command bar off, cursor-only command bar with
panes off), ui-custom.md (CSS-styled game panes in four colour schemes), and
custom_panes.md (a custom HTML hit-points indicator bar).
ui-custom.md's JS.setCss("#status", ...) call is a no-op against the current
engine (the element was intentionally renamed to "#qv-status" in 42cdd9b),
so the top status bar keeps its default look in all four captures rather
than picking up the doc's styling - captured faithfully as the engine
actually behaves; flagged separately as a doc/engine follow-up.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…p.md
overview.md (6 images) is a broad illustrative tour rather than tutorial
prose, so the scenes are representative: editor tree/Setup, initial player
view, a room picture in the game pane (new original placeholder graphic,
not a copy of any existing artwork), a Verbs if/else script, a distinct
dark custom-UI theme, and a fresh Gamebook draft's default scaffolded page
(matches the old screenshot's content without any editing needed).
showing_a_map.md: Map.png and Map2.png (the two-room map feature basics)
via the Interface tab's map toggle + room Map tab sizing/colour/label
fields, screenshotting and auto-trimming the #gridPanel canvas. The other
5 images on that page (map3-7) illustrate specific multi-room layout edge
cases - matched-loop distances, path border types, up/down levels - that
need much more elaborate room graphs and are left for a follow-up pass.
lib.mjs: createLocalDraft gained an optional gameType param ('Gamebook')
for the overview-gamebook.png capture.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
SetUpShop.png (a Function with shop/stock params and its foreach/Call function body) and StartShop.png (game Start script calling it) - the latter confirms a user-defined function, once already declared elsewhere in the same draft, gets recognised by the "Call function" picker and rendered with named parameter fields rather than the generic +param form, same as built-in functions. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The one remaining image from adding_sounds.md (deferred out of the main capture script since it needs a WasmPlayer preview, not editor chrome) - the native HTML5 <audio controls> widget renders regardless of whether the src resolves to a real file, so no audio asset was needed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…erge) Two rooms (Lobby W/Lobby E, sized 3x2 so the effect is visible) with a zero-length exit and complementary Path East/Path West border types on their shared side, demonstrating how two separate rooms can read as one continuous space on the map. map3/map4/map5/map6 (matched-loop-distance and up/down-level scenarios) still need much more elaborate, precisely- measured room graphs and remain deferred. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Completes the last page in the docs screenshot regeneration effort. map3/map4/map5 build a growing room graph matching the doc's own worked arithmetic: a 3-room diagonal loop (Lounge/Lobby/Kitchen, all 2x2) plus Garden hanging off Kitchen (map3); a second loop closed through Garden-Gazebo-Garage-Kitchen with mismatched distances so the new exits visibly don't meet (map4); then fixed by widening Garage to 2x2 and setting the Kitchen<->Garage exit length to 3 on both sides, matching Garden<->Gazebo's own total (map5). map6 demonstrates up/down exits rendering the previous level faded behind the current one. Also fixes a real bug in the exit-length helper (affecting map7.png too, now corrected): clicking an exit's "direction → destination" summary link selects the *destination room*, not the exit - matching a gotcha already documented for a different page. Selecting the exit's own tree row also turned out to need explicit scoping and expansion: a room's [data-value] is shared by three different elements (the ARIA treeitem, the clickable label, and the - possibly collapsed - content container holding its children), and re-selecting a room after adding an exit to it doesn't reliably re-expand the branch. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Rebuilt against the actual pre-migration screenshot (recovered from commit 9c6f2cc) after review caught several misses in the first pass: - The Lobby W <-> Lobby E exit only had its length set to 0 on one side. Exit length is per-direction (not shared between the two auto-created reciprocal exits), so the un-set reciprocal left a stray visible connector between the two "merged" rooms - the same "remember to change both directions" lesson this page's own map5.png fix already applied, missed here on a different exit. - Lobby/Lounge/Kitchen had no fill colours at all (original has peach/ yellow/sky-blue). - The Lobby E -> Lounge exit was a straight "north" instead of the original's diagonal "northeast". - Lounge and Kitchen had lost their labels. - The original has extra exit stubs off Lobby W, Lounge, and Kitchen trailing off-frame to unbuilt rooms - added stub destination rooms (Corridor/Study/Pantry/Cellar) so those lines render too. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…mages The player dot (and the view's pan/recentre after it) animate toward their new position over several requestAnimationFrame ticks rather than snapping instantly (src/PlayerCore/Resources/grid.js's onFrame()/drawPlayer - playerVector/offsetVector are plain top-level `var`s in a non-module script, so reachable as window globals). sendCommand() only waits for the game-logic turn to finish, not this separate canvas animation, so a screenshot taken right after the last movement command could catch the dot mid-slide - confirmed by the user noticing the dot's position looked slightly off across several of these captures. Added a wait for both vectors to null out (onFrame's own "arrived" signal) before every grid screenshot in capture-showing-a-map.mjs. Re-ran all 7 captures: only map3.png and map5.png actually changed pixels (the dot settling into its true final position instead of a fractionally-earlier frame); everything else was already landing on the right frame by luck. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
capture() was screenshotting the editor mid-edit, showing the toolbar's "Unsaved"/"Saving..." pill and the "only stored in this browser" backup banner in most captures. It now saves and dismisses the banner first (skipped when a modal dialog is the subject of the shot, since its backdrop blocks the click). Also fixes capture-overview.mjs's Bob to use "Male character (named)" so the room description reads "Bob" instead of "a Bob", and swaps an ambiguous text=watch wait in capture-tutorial-creating-a-simple-game.mjs for the shared addVerb() helper, which was hanging on an invisible responsive-mode duplicate label. Regenerates all 129 affected screenshots.
… sync check Cross-referenced every <function> in src/Engine/Core/*.aslx against the function reference pages and found 150 undocumented functions plus a few stale entries for functions that no longer exist (removed Scope* functions, a non-existent ListVisible). - Document the previously-unreferenced Pages dialogue-tree system (ShowPage/GoToPage/HasSeenPage/EndPageDialogue) in user-interface.md - Add a new gamebook.md page for Gamebook-mode functions (flags, counters, page navigation) that had no home in the existing category taxonomy - Add real entries for ~54 other author-facing functions across attributes/core/objects/general/clothing/scope/string.md - Add internal-core.md placeholders for the ~96 remaining internal functions - Remove/fix stale entries referencing removed or non-existent functions - Add site/scripts/check-function-docs.mjs, wired into CI, which fails if a Core.aslx function has no doc entry, or a doc entry no longer matches any current library or hard-coded function Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Cross-referencing functions/scope.md's RemoveLookOnlyExits against CoreScopes.aslx turned up an undocumented exit attribute; add it to the attribute reference and link it from RemoveLookOnlyExits. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The page-level intro already states games shouldn't normally need to call these directly, so repeating that on every heading was pure boilerplate left over from the merge. RequestSave keeps a standalone "Deprecated." note since that was unique information.
The .aslx download link was broken since the Jekyll migration - the game file was never carried over. Recovered the original from the old docs repo's history and added it under site/public/examples/, matching the existing PlayAudioExample.aslx convention. Also moved the page out from under the beginner Tutorial (where it read as a mandatory "second tutorial") into Guides, since its content is meaningfully more advanced than the tutorial series. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The earlier heading-casing pass (018a8d6) only searched for `##`/`###` ATX-style headings and missed Markdown's underline-style (setext) H2 headings entirely, so ~530 headings across the site stayed title-cased and in the older two-line format. Converts every setext H2 to `## `, and sentence-cases each using the same rule as before: capitalize only the first word and genuine proper nouns/acronyms, leaving code spans, quoted UI strings, and literal in-game command syntax (e.g. SAY, TAKE ALL) untouched. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…guage Adds a custom TextMate grammar for Quest's script DSL (mirroring the editor's own CodeMirror language definition), registered with Starlight/Shiki so ```quest fences render with real syntax highlighting instead of plaintext. Classifies and tags nearly every code block in the docs (fenced and legacy 4-space-indented) by language - quest, xml, js, regex, or css, using Shiki's built-in grammars where applicable. Blocks that are genuinely non-code (game transcripts, verb-pattern tables, runtime error messages) are deliberately left untagged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Several fenced code blocks carried leftover leading whitespace from their original 4-space-indented Markdown form (or from manual indentation), so the rendered code started a few columns in instead of flush against the block edge. Strips each block's common leading whitespace while preserving relative nesting indentation; skips the handful of blocks nested inside list items, where the indentation is structural. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…dings
- Regenerate Switchonoffplay.png against the current WasmPlayer instead
of the old Quest 5 desktop editor screenshot.
- Remove manual "Next:" links from tutorial pages that duplicated
Starlight's automatic prev/next pagination.
- Move Cloak of Darkness to a top-level slug so its URL matches its
"Guides" sidebar placement, with a redirect from the old path.
- Convert italic pseudo-headings ("Improved LISTEN" and 22 others in
the `request` script command reference) to real headings, so they
get anchors and show up in the page's table of contents.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The per-request headings from the previous commit worked but bloated the page's TOC (23 entries for what's now legacy/obsolete surface area). A table is a better fit: one row per request name with its effect and modern alternative, with the three entries that need more than a one-liner (Show/Hide, SetCompassDirections, SetInterfaceString) kept as prose below it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Sort the request reference table by request name.
- Link every "Use instead" cell to a real target where one exists;
JS.* alternatives link to their entry on /js/. RequestSave's
requestsave() has no documented target anywhere, so it stays
unlinked.
- Add missing /js/ entries (panesVisible, setCompassDirections,
setGameName) that games already call in several howto pages but
the JS reference itself never documented, and fix uiShow/uiHide
being out of alphabetical order there.
- Fix a pre-existing typo in the SetCompassDirections example
("whatever" instead of "south" as the seventh direction).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Since there's no code-level allowlist distinguishing "public" JS.* functions from playercore.js internals (JS.foo literally window.evals "foo(...)"), used "does an existing howto page already tell authors to call this" as the public-surface signal. howto/ux/customising_the_ui.md turned out to already be showing a much larger JS.* catalog than js/index.md documented: - addExternalStylesheet, AddYouTube, Grid_ClearAllLayers, hideBorder, setBackground, setGamePadding, setGameWidth, showStatusVisible, TurnOffHyperlinksUnderline, and the six SetMenu* colour/font functions - all real, all already recommended to authors elsewhere, none previously documented on the JS reference page itself. Also fixed two accuracy bugs found while cross-checking against playercore.js: - setCss's own example called JS.setCSS (wrong case - the actual function is setCss, so that example would have silently failed). - uiShow/uiHide claimed only 3 elements were valid targets; the implementation takes any CSS selector ($(element).show()/.hide()), with #gamePanes as the one special-cased name. Replaced scripts/index.md's stale, incomplete duplicate of setInterfaceString's valid element names (missing StatusLabel, TypeHereLabel, ContinueLabel) with a link to js/index.md's already-correct list, rather than fixing the same list in two places. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
WriteToLog was removed entirely in #1924 alongside the dead "write log to file" feature, but Core.aslx's Log function is inlined into every published game (see Core Library Semantics in CLAUDE.md) - an already-published game with game.writelogtofile set still calls JS.WriteToLog(text) on every Log() call, which now throws since the function no longer exists anywhere in the runtime. Restoring it as a no-op (as it already was before #1924) fixes that without reviving the removed feature for newly-authored games. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…nd Wait Checked each of the 23 request names against RequestScript.cs's actual WorldModelVersion gating rather than trust the inherited "obsolete as of 5.x" annotations: - FontName/FontSize error unconditionally for WorldModelVersion >= 540 (which includes 600, the default for every game saved today) with no restore path - genuinely dead, so removed from the table entirely rather than kept as a documented-but-broken row. - Pause and Wait are gated only for 550..<600 and 540..<600 respectively - both work again at WorldModelVersion 600. Commit 0a0b544/44669ece ("introduce WorldModelVersion 600, restore sync script support") deliberately undeprecated them because the TCS-based async rewrite made the old sync-blocking versions more usable than their callback-based replacements. Dropped the stale "Obsolete"/"Deprecated" annotations accordingly. - Stripped the remaining "(as of 5.x)" version-history annotations throughout - not useful to a reader authoring a new game today. Also moved the Show/Hide pane-selector list and SetCompassDirections' ordering rules out of the request table's trailing prose and onto the actual JS.uiShow/uiHide/setCompassDirections entries on /js/, since that's the API a reader ends up using - the request row now just links there instead of duplicating the detail locally. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ture games GamebookCore.aslx (which defines these) isn't included in a Text Adventure game's library chain, only Core.aslx/CorePages.aslx is - so add matching implementations to CorePages.aslx, using the same options-stringdictionary mechanism as the Gamebook versions. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Pages had no documentation at all - add a tutorial chapter building a branching conversation with Bob, a deeper "Building a conversation with Pages" guide under NPCs & Dialogue, and cross-links from Introduction to conversations and Handling SPEAK TO. Verbs were used from the first tutorial chapter onward but never got a deeper treatment the way commands do - add a chapter combining the two (a custom SIT command invoking the sofa's own verb script), and fix an existing inaccuracy in the verb name/attribute table in How to use verbs found while verifying it against CoreCommands.aslx. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Mirrors the existing Gamebook "Add page link"/"Remove page link" adder entries in GamebookCoreEditorScriptsPages.aslx, for the Text Adventure versions of these functions added in a prior commit. English, German and Spanish translations included - verified with tools/i18n/audit.mjs --strict. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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
site/)Test plan
npm run buildandnpm run lintinsite/are clean🤖 Generated with Claude Code