This runbook covers TODOS.phase-72.72.13.2.9: offering an opt-in puzzle skip
after repeated attempts or configurable elapsed time.
The profile id is Input.PuzzleSkip.PerPlayer.V2. It persists per player,
defaults to PuzzleSkip.Off, applies during startup before gameplay, and is
exposed through Settings.Accessibility.PuzzleSkip.
Players can opt into PuzzleSkip.AttemptsOrElapsedTime. The offer appears only
in single-player story puzzle contexts after either the configured attempt
threshold or elapsed-time threshold is reached. The threshold rows are
Settings.Accessibility.PuzzleSkipAttempts and
Settings.Accessibility.PuzzleSkipElapsedTime, with defaults of 3 attempts and
120 seconds.
The mode evaluator uses FV2PuzzleSkipPolicy, FV2PuzzleSkipRequest, and
FV2PuzzleSkipOffer. Default policies cover Puzzle.Story.GlyphLock,
Puzzle.Krypt.ForgeGlyph, and Puzzle.Konquest.AncientRelay. An offered skip
requires player confirmation, includes a narrative summary, preserves rewards,
and completes the puzzle without a fail-state penalty.
Puzzle skip is blocked in ranked and tournament contexts, remains story-only, and does not alter authored frame data. If the feature is off or the thresholds are not met, narrative summaries and preserved rewards stay hidden.
Implementation signoff lives in
V2/ue/Content/V2/Input/Accessibility/PuzzleSkipOption_V2_Contract.json and
V2/ue/Tools/check-v2-puzzle-skip-option.py.
Verification#
Run these checks after changing puzzle skip:
python3 V2/ue/Tools/check-v2-puzzle-skip-option.py
python3 V2/ue/Tools/check-v2-input-module.py
python3 V2/ue/Tools/check-v2-modes-module.py
python3 V2/ue/Tools/check-v2-accessibility-feature-set.py
python3 V2/ue/Tools/check-v2-settings-ui.py
python3 V2/ue/Tools/check-v2-profile-save-game.py
python3 V2/ue/Tools/check-v2-persistence-module.py
python3 V2/ue/Tools/check-v2-ui-module.py
python3 V2/ue/Tools/check-v2-ci-workflow.py
python3 V2/tools/validate-v2-docs.py
python3 -m json.tool V2/ue/Content/V2/Input/Accessibility/PuzzleSkipOption_V2_Contract.json
Automation coverage:
V2.Input.ModuleV2.Modes.ModuleV2.Persistence.ModuleV2.Persistence.ProfileSave.AssetContractV2.UI.ModuleV2.UI.SettingsScreen.AssetContract