feat: defer advanced build calculations
Validate and deploy production / validate (push) Canceled after 0s
Validate and deploy production / deploy (push) Canceled after 0s
Validate and deploy staging / validate (push) Successful in 27s
Validate and deploy staging / deploy (push) Successful in 54s

This commit is contained in:
jb
2026-08-02 03:07:12 -04:00
parent c61b9832dd
commit d09b6220ee
19 changed files with 1485 additions and 1267 deletions
+74 -58
View File
@@ -353,13 +353,13 @@ equipment opens the searchable real-data catalog and its compatible
configuration controls. Do not display a prototype option that the current
loadout schema cannot save.
Calculation readiness belongs at the point of resolution. Mark an incomplete
Equipment readiness belongs at the point of resolution. Mark an incomplete
matrix cell with a compact red text indicator and status rail, then let the cell
open the editor that resolves it. The live calculation rail summarizes blocked
output in one compact row. Do not repeat every missing slot in a large error
panel. Keep system-owned blockers, such as an unpublished calculation profile,
visible in that compact summary because the player cannot resolve them from a
loadout cell.
open the editor that resolves it. The live totals rail summarizes deterministic
equipped-item totals. Separate panels label conditional Talent outcomes, weapon
and Skill DPS, encounter assumptions, activation profiles, rotations, and
simulation as `COMING SOON`; they do not report calculation-profile blockers as
current player errors.
The builder uses three workbench columns on wide screens, moves the live summary
below the matrix and editor at intermediate widths, and stacks all three regions
@@ -1707,10 +1707,10 @@ cards and augment editor cards reduce to a single column while retaining
The builder is a three-rail tactical workbench: compact equipment positions on
the left, the currently selected item editor in the center, and a sticky live
calculation summary on the right. At medium widths the summary becomes a
full-width lower rail; on mobile all three rails stack, with equipment first,
editing second, and results third. Equipment positions remain explicit even when
empty so loadout completeness is always visible.
totals summary on the right. At medium widths the summary becomes a full-width
lower rail; on mobile all three rails stack, with equipment first, editing
second, and results third. Equipment positions remain explicit even when empty
so players can see loadout completeness.
Use the shared `BuilderPicker` for builder catalogs and Attribute pools. It
combines an always-visible current selection with a searchable overlay, icon or
@@ -1721,11 +1721,11 @@ such as the single-exotic-weapon rule are explained rather than hidden.
Numeric instance values display their authoritative minimum and maximum beside
the field and clamp to that range on completion. Always-on item rolls, fixed
bonuses, inherited profiles, enabled augments, and activated set bonuses feed
the live totals immediately. Conditional mechanics state their calculation mode
and readiness. Maximum Potential uses their best-case state; Custom Scenario
uses the source-defined advanced assumptions saved with the loadout. Exclude a
mechanic that lacks a required assumption and label it `REQUIRES ASSUMPTIONS`.
This distinction must remain clear without relying on color.
the live totals immediately. Current Builder and shared Build pages stop at
these deterministic equipped-item totals. Conditional Talent outcomes, weapon
and Skill DPS, encounter assumptions, activation profiles, rotations, and
simulation remain planned. Render those capabilities as separate `COMING SOON`
panels, with visible text rather than color alone.
Loadout summaries name selected Talents, Attributes and their exact values,
nodes, and Skill Chips. Do not replace these selections with configured item
@@ -2309,14 +2309,14 @@ source program, where authors may edit its exposed branch, state, and outcome
controls. The recipe label records provenance only. `REPLACE PROGRAM` requires
an inline confirmation that states all existing branches will be discarded.
Builder Controls define source-specific advanced scenario assumptions. Authors
choose toggle, slider, or numeric input and provide a label, Agent guidance,
default value, best-case value, and numeric bounds when applicable. Group these
controls behind the builder's advanced scenario surface. Maximum Potential uses
best-case values. Custom Scenario uses saved Agent values. A required cadence or
environmental value with no supplied assumption keeps the mechanic out of the
calculation and displays `REQUIRES ASSUMPTIONS`; the editor and runtime never
invent a cadence.
Builder Controls define source-specific scenario assumptions for the planned
player simulation. ISAC authors choose toggle, slider, or numeric input and
provide a label, Agent guidance, default value, best-case value, and numeric
bounds when applicable. The current player UI does not render these controls or
read their saved values. It uses an explicit `COMING SOON` panel for the future
advanced scenario surface. The authored contract still requires the runtime to
report `REQUIRES ASSUMPTIONS` when a required cadence or environmental value is
missing; the editor and runtime never invent a cadence.
Use `--shd-model-surface` and `--shd-model-border` for mechanic programs,
calculation revisions, and field calibration. The blue information rail marks
@@ -2482,9 +2482,16 @@ anchor scrolling and sticky-state transitions.
#### Builder calculation modes
The loadout builder places one required two-option `SegmentedChoice` above
combat assumptions. The persisted `maximum` and `custom` values use these
visible labels:
The current Builder and shared Build pages do not expose calculation modes or
combat assumptions. They show deterministic equipped-item totals and reserve
conditional Talent outcomes, weapon and Skill DPS, encounter assumptions,
activation profiles, rotations, and simulation behind explicit `COMING SOON`
panels.
Loadout schema version 4 retains `maximum`, `custom`, conditional state,
encounter-assumption, and per-ability activation fields for compatibility. The
current player UI ignores those fields. When player simulation ships, one
required two-option `SegmentedChoice` will use these visible labels:
- `MAXIMUM POTENTIAL` calculates a configured ceiling. It applies conditional
effects at peak state and treats selected abilities as firing on cooldown
@@ -2492,40 +2499,42 @@ visible labels:
- `CUSTOM SCENARIO` exposes encounter assumptions and source-defined advanced
controls for a player-defined scenario.
New loadouts select `MAXIMUM POTENTIAL`. The interface labels Maximum results as
a modeled ceiling so players do not read them as typical encounter performance.
Maximum hides granular assumption fields without deleting their saved values.
Returning to Custom restores those values.
The planned interface selects `MAXIMUM POTENTIAL` for new loadouts and labels
its results as a modeled ceiling. Maximum will hide granular assumption fields
without deleting their saved values. Returning to Custom will restore those
values.
Custom mode gives each unlocked conditional effect three state controls:
The planned Custom mode gives each unlocked conditional effect three state
controls:
- `OFF` excludes the effect.
- `PEAK` applies its configured maximum stacks.
- `ENCOUNTER` models stack buildup and expiry from weapon RPM, magazine size,
reload time, hit rate, firing activity, and encounter duration.
Users may override encounter assumptions on one effect without changing the
global Custom profile. Open the advanced scenario surface to show only the
toggle, slider, and numeric controls defined by that effect's owning source. The
effect card shows uptime, activation count, and applied stack state beside the
mode. A mechanic that needs an undefined cadence or another missing scenario
input displays `REQUIRES ASSUMPTIONS`; the builder withholds its calculated
contribution until the author or player supplies that input.
The planned advanced scenario surface will let users override one effect without
changing the global Custom profile. It will show only the toggle, slider, and
numeric controls defined by that effect's owning source. The effect card will
show uptime, activation count, and applied stack state beside the mode. A
mechanic that needs an undefined cadence or another missing scenario input will
display `REQUIRES ASSUMPTIONS`; the simulation will withhold its contribution
until the author or player supplies that input.
Maximum and Custom use radio semantics, an explicit selected label, keyboard
arrow navigation, and the standard orange selected rail. Results repeat the
active calculation mode in text. On mobile, the global mode control and Custom
assumption fields stack into full-width targets of at least 44 pixels. Mode
changes use the standard pressed feedback; reduced-motion preferences remove
transitions without hiding the state change.
The future Maximum and Custom control will use radio semantics, an explicit
selected label, keyboard arrow navigation, and the standard orange selected
rail. Results will repeat the active calculation mode in text. On mobile, the
global mode control and Custom assumption fields will stack into full-width
targets of at least 44 pixels. Mode changes will use the standard pressed
feedback; reduced-motion preferences will remove transitions without hiding the
state change.
Combat result panels show normal, critical, headshot, and critical-headshot
values with burst, sustained, and encounter DPS. Conditional stack telemetry
lists the mode, uptime, activations, average and peak stacks, ending stacks,
buildup time, and maintained state. A result with missing equipment, Attribute
bindings, rules, or assumptions displays `INSUFFICIENT DATA` and a concrete
remediation list. The interface withholds combat numbers until it has the
required inputs.
The future combat result panels will show normal, critical, headshot, and
critical-headshot values with burst, sustained, and encounter DPS. Conditional
stack telemetry will list the mode, uptime, activations, average and peak
stacks, ending stacks, buildup time, and maintained state. A result with missing
equipment, Attribute bindings, rules, or assumptions will display
`INSUFFICIENT DATA` and a concrete remediation list. Until this interface ships,
the player pages show `COMING SOON` instead of combat numbers.
### Specialization loadout composer
@@ -2541,16 +2550,19 @@ ranks remain visible with their lock state. The builder permits a row after the
user buys every available Rank 1 and Rank 2 in preceding rows and enforces the
49-point limit. Cost telemetry lists Credits and components beside each rank.
Each ability panel exposes one compact activation control: Off, On Cooldown, or
Custom Rate. Custom Rate adds uses per minute. Every enabled ability has its own
target count. Skill result cards show the ability name, activation count,
single-target DPS, total-target DPS, and a combined summary. They state that
Skills can critically hit and multi-shot but cannot headshot.
Player ability panels currently expose equipped definitions and deterministic
item contributions. Planned simulation panels display `COMING SOON` instead of
activation controls or Skill DPS. The future interface will offer Off, On
Cooldown, or Custom Rate, with uses per minute and a target count for each
enabled ability. Future Skill result cards will show activation count,
single-target DPS, total-target DPS, and a combined summary. They will state
that Skills can critically hit and multi-shot but cannot headshot.
Saved loadouts store focus, node ranks, nine Skill Chips, conditional modes,
encounter assumptions, and per-ability activation profiles. The builder accepts
only the current complete structure. Invalid local drafts are discarded; invalid
server records are removed through a backed-up database migration.
only the current complete structure for compatibility. Current player pages
ignore the simulation fields. Invalid local drafts are discarded; invalid server
records are removed through a backed-up database migration.
### Calculation revision controls
@@ -2581,6 +2593,10 @@ revision identity and before the manual stage and profile controls. Reuse the
language, identifies the active or edited base revision, and previews changes to
stages, weapon profiles, and Skill profiles.
ISAC keeps revision editing, calibration, assisted suggestions, publication, and
the calculation AI assistant available for continued model authoring. The
current Builder and shared Build pages do not consume their output.
Agents without `ai.calculation.generate` see the collapsed `PERMISSION REQUIRED`
state. Agents with the permission may request and apply a draft, but the panel
leaves every manual calculation control available. Applying a draft fills the