New tasks for roll retries.
This commit is contained in:
8
TASKS.md
8
TASKS.md
@@ -8,7 +8,7 @@ This ExecPlan is a living document. The sections `Progress`, `Surprises & Discov
|
|||||||
|
|
||||||
After this change, a Rolemaster skill can opt into an automatic retry when its first result lands in specific “skipp” bands. The player will be able to toggle that behavior while creating or editing a Rolemaster open-ended skill, roll the skill, and then see the retry clearly in the campaign log card through a special badge and readable summary text. The detailed roll view will still show enough information to explain why the retry happened and what final result was recorded.
|
After this change, a Rolemaster skill can opt into an automatic retry when its first result lands in specific “skipp” bands. The player will be able to toggle that behavior while creating or editing a Rolemaster open-ended skill, roll the skill, and then see the retry clearly in the campaign log card through a special badge and readable summary text. The detailed roll view will still show enough information to explain why the retry happened and what final result was recorded.
|
||||||
|
|
||||||
For this feature, a “skipp” means a Rolemaster open-ended percentile skill roll whose first fully evaluated result, including the skill expression modifier and any low-end subtraction chain, lands in one of the retry windows before any retry bonus is applied. This plan preserves the user-provided thresholds exactly: results `77`, `78`, and `79` grant a retry with `+5`; results `81` through `110` grant a retry with `+10`; result `80` does not retry.
|
For this feature, a “skipp” means a Rolemaster open-ended percentile skill roll whose first fully evaluated result, including the skill expression modifier and any low-end subtraction chain, lands in one of the retry windows before any retry bonus is applied. This plan preserves the user-provided thresholds exactly: results `77` through `90` grant a retry with `+5`; results `91` through `110` grant a retry with `+10`.
|
||||||
|
|
||||||
## Progress
|
## Progress
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ For this feature, a “skipp” means a Rolemaster open-ended percentile skill r
|
|||||||
Rationale: The request explicitly asks for “a toggle for a rolemaster skill.” A skill-group default would widen scope into template inheritance and create unclear behavior for ad hoc custom rolls.
|
Rationale: The request explicitly asks for “a toggle for a rolemaster skill.” A skill-group default would widen scope into template inheritance and create unclear behavior for ad hoc custom rolls.
|
||||||
Date/Author: 2026-04-04 / Codex
|
Date/Author: 2026-04-04 / Codex
|
||||||
|
|
||||||
- Decision: The retry windows are interpreted literally from the request: `77-79 => +5`, `81-110 => +10`, `80 => no retry`.
|
- Decision: The retry windows are interpreted literally from the request: `77-90 => +5`, `91-110 => +10`. A result of `111` counts as success and doesn't need to be retried.
|
||||||
Rationale: The user gave concrete inclusive and exclusive bounds. Preserving those exact bounds avoids silently changing game rules inside the plan.
|
Rationale: The user gave concrete inclusive and exclusive bounds. Preserving those exact bounds avoids silently changing game rules inside the plan.
|
||||||
Date/Author: 2026-04-04 / Codex
|
Date/Author: 2026-04-04 / Codex
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ Run targeted Rolemaster service and API tests from `D:\Code\RpgRoller`:
|
|||||||
|
|
||||||
dotnet test RpgRoller.Tests/RpgRoller.Tests.csproj --filter "FullyQualifiedName~ServiceRolemasterRollTests|FullyQualifiedName~RolemasterApiTests|FullyQualifiedName~PayloadBudgetTests"
|
dotnet test RpgRoller.Tests/RpgRoller.Tests.csproj --filter "FullyQualifiedName~ServiceRolemasterRollTests|FullyQualifiedName~RolemasterApiTests|FullyQualifiedName~PayloadBudgetTests"
|
||||||
|
|
||||||
Acceptance is that there are explicit tests for a `+5` retry case, a `+10` retry case, a non-retry case at `80`, and a disabled-skill case that proves the old result path remains unchanged.
|
Acceptance is that there are explicit tests for a `+5` retry case, a `+10` retry case, and a disabled-skill case that proves the old result path remains unchanged.
|
||||||
|
|
||||||
### Milestone 3: Surface the retry in the workspace and lock the behavior
|
### Milestone 3: Surface the retry in the workspace and lock the behavior
|
||||||
|
|
||||||
@@ -164,7 +164,7 @@ Expected final command transcript:
|
|||||||
|
|
||||||
Validation is complete only when all of the following are true.
|
Validation is complete only when all of the following are true.
|
||||||
|
|
||||||
The backend proves rule correctness. There must be a unit test where the first attempt result is `78` and the stored final result comes from a retry with `+5`. There must be another where the first attempt result is `81` or another value inside the second band and the stored final result comes from a retry with `+10`. There must be a test where the first attempt result is exactly `80` and no retry occurs. There must be a test where the skill toggle is disabled and an otherwise eligible first result still does not retry.
|
The backend proves rule correctness. There must be a unit test where the first attempt result is `78` and the stored final result comes from a retry with `+5`. There must be another where the first attempt result is `96` or another value inside the second band and the stored final result comes from a retry with `+10`. There must be a test where the skill toggle is disabled and an otherwise eligible first result still does not retry.
|
||||||
|
|
||||||
The persistence layer proves round-trip safety. A test must create a skill with the toggle enabled, persist the database, reload state, and confirm the skill still exposes `RolemasterRetryOnSkipp = true`.
|
The persistence layer proves round-trip safety. A test must create a skill with the toggle enabled, persist the database, reload state, and confirm the skill still exposes `RolemasterRetryOnSkipp = true`.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user