452 lines
16 KiB
TypeScript
452 lines
16 KiB
TypeScript
import {
|
|
BUILD_FIT_CONTRACT_VERSION,
|
|
BUILD_FIT_REQUIRED_FIELD_KEYS,
|
|
type BuildFitContractV1,
|
|
} from "../types/buildFit";
|
|
|
|
export const BUILD_FIT_PROFILE_CORPUS_VERSION = "build-fit-profile-corpus-v2" as const;
|
|
|
|
/**
|
|
* Curated production candidates. Each profile has a bounded source-review
|
|
* lifetime, Golden/adversarial coverage, and no authority outside its explicit
|
|
* assumptions. The separate evidence ranker remains read-only and never uses
|
|
* Roll-Efficiency as a Build-Fit input.
|
|
*/
|
|
export const curatedBuildFitProfiles: readonly BuildFitContractV1[] = [
|
|
{
|
|
version: BUILD_FIT_CONTRACT_VERSION,
|
|
id: "furina-off-field-solo-hydro-c0-c1",
|
|
revision: 1,
|
|
character: {
|
|
id: "furina",
|
|
name: "Furina",
|
|
},
|
|
target: {
|
|
id: "off-field-solo-hydro-c0-c1",
|
|
label: "Off-field DPS + Support · Solo Hydro · C0-C1",
|
|
role: "sub_dps",
|
|
description: "Ousia off-field personal damage and Burst support in a team where Furina is the only Hydro character.",
|
|
assumptions: [
|
|
"Furina is constellation 0 or 1; constellation 2 changes her HP and damage balance, while constellation 4 materially lowers her Energy Recharge requirement.",
|
|
"Furina is the only Hydro character and uses her Burst once per rotation.",
|
|
"Weapon, Favonius procs, rotation, and team Energy contributions must be supplied as explicit aggregate context.",
|
|
"The profile targets Ousia off-field damage and support, not constellation 2+ behavior, on-field attacks, or a no-Burst team.",
|
|
],
|
|
},
|
|
provenance: {
|
|
gameVersion: "Luna II",
|
|
reviewedAt: "2026-07-10T20:00:00.000Z",
|
|
validUntil: "2026-10-08T20:00:00.000Z",
|
|
sources: [
|
|
{
|
|
id: "kqm-furina-quick-guide-luna-ii",
|
|
label: "KQM Furina Quick Guide",
|
|
kind: "curated",
|
|
version: "Luna II",
|
|
reference: "https://keqingmains.com/q/furina-quickguide/",
|
|
},
|
|
{
|
|
id: "local-build-context-v1",
|
|
label: "Explicit local build context",
|
|
kind: "user",
|
|
version: "1",
|
|
reference: "local://build-fit/aggregate-context",
|
|
},
|
|
],
|
|
},
|
|
setPlans: [
|
|
{
|
|
id: "golden-troupe-4pc",
|
|
label: "Golden Troupe · 4pc",
|
|
tier: "preferred",
|
|
requirements: [{ setKey: "goldentroupe", pieces: 4 }],
|
|
reason: "The sourced guide identifies 4pc Golden Troupe as the personal-damage set for Furina's off-field Ousia Skill.",
|
|
},
|
|
],
|
|
mainStats: {
|
|
sands: [
|
|
{
|
|
stat: "Energy Recharge",
|
|
priority: 1,
|
|
reason: "Use when the explicit team and weapon context cannot otherwise reach the required Burst uptime.",
|
|
},
|
|
{
|
|
stat: "HP%",
|
|
priority: 1,
|
|
reason: "Use when the sourced Energy Recharge target is already met from the complete build context.",
|
|
},
|
|
],
|
|
goblet: [
|
|
{
|
|
stat: "HP%",
|
|
priority: 1,
|
|
reason: "Preferred for this pre-C2 Golden Troupe target according to the sourced guide.",
|
|
},
|
|
{
|
|
stat: "Hydro DMG Bonus",
|
|
priority: 2,
|
|
reason: "A sourced alternative that remains dependent on the surrounding build and team buffs.",
|
|
},
|
|
],
|
|
circlet: [
|
|
{
|
|
stat: "CRIT Rate",
|
|
priority: 1,
|
|
reason: "Choose the CRIT main stat needed to balance the complete build.",
|
|
},
|
|
{
|
|
stat: "CRIT DMG",
|
|
priority: 1,
|
|
reason: "Choose the CRIT main stat needed to balance the complete build.",
|
|
},
|
|
],
|
|
},
|
|
substats: [
|
|
{
|
|
stat: "Energy Recharge",
|
|
weight: 1,
|
|
reason: "Ordinal source priority: first until the explicit total-build requirement is met; not a damage multiplier.",
|
|
},
|
|
{
|
|
stat: "CRIT Rate",
|
|
weight: 0.8,
|
|
reason: "Ordinal source priority shared with CRIT DMG after Energy Recharge; not a damage multiplier.",
|
|
},
|
|
{
|
|
stat: "CRIT DMG",
|
|
weight: 0.8,
|
|
reason: "Ordinal source priority shared with CRIT Rate after Energy Recharge; not a damage multiplier.",
|
|
},
|
|
{
|
|
stat: "HP%",
|
|
weight: 0.6,
|
|
reason: "Ordinal source priority after Energy Recharge and CRIT; not a damage multiplier.",
|
|
},
|
|
],
|
|
aggregateTargets: [
|
|
{
|
|
stat: "Energy Recharge",
|
|
unit: "percent",
|
|
minimum: 200,
|
|
priority: "required",
|
|
reason: "The sourced guide lists 200%+ for Solo Hydro; exact weapon, Favonius, rotation, and team context remains explicit.",
|
|
},
|
|
],
|
|
evidenceRules: {
|
|
minimumExtractionConfidence: 88,
|
|
minimumFieldConfidence: 78,
|
|
requiredFieldKeys: [...BUILD_FIT_REQUIRED_FIELD_KEYS],
|
|
},
|
|
conflictPolicy: {
|
|
equippedByOtherCharacter: "warn",
|
|
assignedToOtherBuild: "warn",
|
|
},
|
|
},
|
|
{
|
|
version: BUILD_FIT_CONTRACT_VERSION,
|
|
id: "neuvillette-on-field-charged-attack",
|
|
revision: 1,
|
|
character: {
|
|
id: "neuvillette",
|
|
name: "Neuvillette",
|
|
},
|
|
target: {
|
|
id: "on-field-charged-attack",
|
|
label: "On-field Charged Attack DPS",
|
|
role: "main_dps",
|
|
description: "On-field Hydro damage focused on enhanced Charged Attacks with a complete Marechaussee Hunter set.",
|
|
assumptions: [
|
|
"Neuvillette is played as an on-field Charged Attack damage dealer rather than only as a driver for teammates.",
|
|
"His Charged Attack HP drain is available to maintain the Marechaussee Hunter four-piece effect.",
|
|
"Weapon, team, Favonius procs, Energy Recharge requirement, constellation, and rotation are external context and are not inferred from Artifacts.",
|
|
"This profile does not select a team or claim that a profile candidate proves character ownership.",
|
|
],
|
|
},
|
|
provenance: {
|
|
gameVersion: "Luna IV",
|
|
reviewedAt: "2026-07-10T20:00:00.000Z",
|
|
validUntil: "2026-10-08T20:00:00.000Z",
|
|
sources: [{
|
|
id: "kqm-neuvillette-quick-guide-luna-iv",
|
|
label: "KQM Neuvillette Quick Guide",
|
|
kind: "curated",
|
|
version: "Luna IV",
|
|
reference: "https://keqingmains.com/q/neuvillette-quickguide/",
|
|
}],
|
|
},
|
|
setPlans: [{
|
|
id: "marechaussee-hunter-4pc",
|
|
label: "Marechaussee Hunter · 4pc",
|
|
tier: "preferred",
|
|
requirements: [{ setKey: "marechausseehunter", pieces: 4 }],
|
|
reason: "The sourced guide identifies four-piece Marechaussee Hunter as Neuvillette's strongest general Charged Attack set, with stacks enabled by his HP drain.",
|
|
}],
|
|
mainStats: {
|
|
sands: [{
|
|
stat: "HP%",
|
|
priority: 1,
|
|
reason: "The sourced Charged Attack profile scales from HP.",
|
|
}],
|
|
goblet: [
|
|
{
|
|
stat: "Hydro DMG Bonus",
|
|
priority: 1,
|
|
reason: "The sourced default damage-facing Goblet choice for this profile.",
|
|
},
|
|
{
|
|
stat: "HP%",
|
|
priority: 2,
|
|
reason: "A sourced viable alternative whose exact value depends on weapon and team buffs.",
|
|
},
|
|
],
|
|
circlet: [
|
|
{
|
|
stat: "CRIT Rate",
|
|
priority: 1,
|
|
reason: "Use the CRIT main stat that balances the complete build.",
|
|
},
|
|
{
|
|
stat: "CRIT DMG",
|
|
priority: 1,
|
|
reason: "Use the CRIT main stat that balances the complete build.",
|
|
},
|
|
{
|
|
stat: "HP%",
|
|
priority: 2,
|
|
reason: "A sourced viable alternative with appropriately strong supporting substats.",
|
|
},
|
|
],
|
|
},
|
|
substats: [
|
|
{
|
|
stat: "Energy Recharge",
|
|
weight: 1,
|
|
reason: "Ordinal source priority until the explicit team and weapon requirement is met; this contract does not invent a universal threshold.",
|
|
},
|
|
{
|
|
stat: "CRIT Rate",
|
|
weight: 0.8,
|
|
reason: "Ordinal source priority shared with CRIT DMG; not a damage multiplier.",
|
|
},
|
|
{
|
|
stat: "CRIT DMG",
|
|
weight: 0.8,
|
|
reason: "Ordinal source priority shared with CRIT Rate; not a damage multiplier.",
|
|
},
|
|
{
|
|
stat: "HP%",
|
|
weight: 0.8,
|
|
reason: "Sourced HP scaling priority; not a damage multiplier.",
|
|
},
|
|
{
|
|
stat: "HP",
|
|
weight: 0.6,
|
|
reason: "Flat HP is a lower sourced priority than HP% for this profile.",
|
|
},
|
|
],
|
|
aggregateTargets: [],
|
|
evidenceRules: {
|
|
minimumExtractionConfidence: 88,
|
|
minimumFieldConfidence: 78,
|
|
requiredFieldKeys: [...BUILD_FIT_REQUIRED_FIELD_KEYS],
|
|
},
|
|
conflictPolicy: {
|
|
equippedByOtherCharacter: "warn",
|
|
assignedToOtherBuild: "warn",
|
|
},
|
|
},
|
|
{
|
|
version: BUILD_FIT_CONTRACT_VERSION,
|
|
id: "raiden-off-field-hyperbloom-trigger",
|
|
revision: 1,
|
|
character: {
|
|
id: "raidenshogun",
|
|
name: "Raiden Shogun",
|
|
},
|
|
target: {
|
|
id: "off-field-hyperbloom-trigger",
|
|
label: "Off-field Hyperbloom Trigger",
|
|
role: "reaction",
|
|
description: "Off-field Electro application focused only on triggering Hyperbloom with Elemental Mastery Artifact rules.",
|
|
assumptions: [
|
|
"Raiden remains off-field after activating her Skill and is the intended Hyperbloom trigger.",
|
|
"This excludes Burst DPS, Aggravate, Quickbloom, Overloaded, and personal-damage comparisons.",
|
|
"Another team member is the intended four-piece Deepwood Memories holder; Raiden-held Deepwood is a separate fallback, not this target.",
|
|
"Character level, team composition, weapon, and reaction ownership remain external context and are not inferred from Artifacts.",
|
|
],
|
|
},
|
|
provenance: {
|
|
gameVersion: "5.7",
|
|
reviewedAt: "2026-07-10T20:00:00.000Z",
|
|
validUntil: "2026-10-08T20:00:00.000Z",
|
|
sources: [{
|
|
id: "kqm-raiden-quick-guide-5-7",
|
|
label: "KQM Raiden Shogun Quick Guide",
|
|
kind: "curated",
|
|
version: "5.7",
|
|
reference: "https://keqingmains.com/q/raiden-quickguide/",
|
|
}],
|
|
},
|
|
setPlans: [
|
|
{
|
|
id: "flower-of-paradise-lost-4pc",
|
|
label: "Flower of Paradise Lost · 4pc",
|
|
tier: "preferred",
|
|
requirements: [{ setKey: "flowerofparadiselost", pieces: 4 }],
|
|
reason: "The sourced Hyperbloom section lists four-piece Flower of Paradise Lost as the highest-damage set for this narrow trigger target.",
|
|
},
|
|
{
|
|
id: "gilded-dreams-4pc",
|
|
label: "Gilded Dreams · 4pc",
|
|
tier: "alternative",
|
|
requirements: [{ setKey: "gildeddreams", pieces: 4 }],
|
|
reason: "The sourced guide lists four-piece Gilded Dreams as an EM-focused and resin-efficient alternative.",
|
|
},
|
|
],
|
|
mainStats: {
|
|
sands: [{
|
|
stat: "Elemental Mastery",
|
|
priority: 1,
|
|
reason: "The sourced Hyperbloom trigger table specifies Elemental Mastery.",
|
|
}],
|
|
goblet: [{
|
|
stat: "Elemental Mastery",
|
|
priority: 1,
|
|
reason: "The sourced Hyperbloom trigger table specifies Elemental Mastery.",
|
|
}],
|
|
circlet: [{
|
|
stat: "Elemental Mastery",
|
|
priority: 1,
|
|
reason: "The sourced Hyperbloom trigger table specifies Elemental Mastery.",
|
|
}],
|
|
},
|
|
substats: [{
|
|
stat: "Elemental Mastery",
|
|
weight: 1,
|
|
reason: "The sourced narrow trigger target treats Elemental Mastery as the only relevant Artifact substat; this is not a general Raiden profile.",
|
|
}],
|
|
aggregateTargets: [],
|
|
evidenceRules: {
|
|
minimumExtractionConfidence: 88,
|
|
minimumFieldConfidence: 78,
|
|
requiredFieldKeys: [...BUILD_FIT_REQUIRED_FIELD_KEYS],
|
|
},
|
|
conflictPolicy: {
|
|
equippedByOtherCharacter: "warn",
|
|
assignedToOtherBuild: "warn",
|
|
},
|
|
},
|
|
{
|
|
version: BUILD_FIT_CONTRACT_VERSION,
|
|
id: "nahida-off-field-deepwood-support",
|
|
revision: 1,
|
|
character: {
|
|
id: "nahida",
|
|
name: "Nahida",
|
|
},
|
|
target: {
|
|
id: "off-field-deepwood-support",
|
|
label: "Off-field Deepwood Support",
|
|
role: "support",
|
|
description: "Off-field Skill Dendro application and team support while Nahida is the intended Deepwood Memories holder.",
|
|
assumptions: [
|
|
"Nahida is used primarily off-field for Skill-based Dendro application and support.",
|
|
"Nahida is the intended team holder of four-piece Deepwood Memories; only one team member should supply that effect.",
|
|
"Weapon, team, rotation, Favonius, exact Energy Recharge requirement, and which teammate owns the highest Elemental Mastery remain external context.",
|
|
"The profile does not turn the conditional 900-1000 Elemental Mastery discussion into a hard universal target.",
|
|
],
|
|
},
|
|
provenance: {
|
|
gameVersion: "5.6",
|
|
reviewedAt: "2026-07-10T20:00:00.000Z",
|
|
validUntil: "2026-10-08T20:00:00.000Z",
|
|
sources: [{
|
|
id: "kqm-nahida-quick-guide-5-6",
|
|
label: "KQM Nahida Quick Guide",
|
|
kind: "curated",
|
|
version: "5.6",
|
|
reference: "https://keqingmains.com/q/nahida-quickguide/",
|
|
}],
|
|
},
|
|
setPlans: [{
|
|
id: "deepwood-memories-4pc",
|
|
label: "Deepwood Memories · 4pc",
|
|
tier: "preferred",
|
|
requirements: [{ setKey: "deepwoodmemories", pieces: 4 }],
|
|
reason: "The sourced guide describes four-piece Deepwood Memories as a useful generalist team set that Nahida can maintain reliably.",
|
|
}],
|
|
mainStats: {
|
|
sands: [{
|
|
stat: "Elemental Mastery",
|
|
priority: 1,
|
|
reason: "The sourced off-field table accepts Elemental Mastery Sands.",
|
|
}],
|
|
goblet: [
|
|
{
|
|
stat: "Elemental Mastery",
|
|
priority: 1,
|
|
reason: "The sourced off-field table accepts Elemental Mastery Goblet.",
|
|
},
|
|
{
|
|
stat: "Dendro DMG Bonus",
|
|
priority: 1,
|
|
reason: "The sourced off-field table accepts Dendro DMG Bonus Goblet.",
|
|
},
|
|
],
|
|
circlet: [
|
|
{
|
|
stat: "Elemental Mastery",
|
|
priority: 1,
|
|
reason: "The sourced off-field table accepts Elemental Mastery Circlet.",
|
|
},
|
|
{
|
|
stat: "CRIT Rate",
|
|
priority: 1,
|
|
reason: "The sourced off-field table accepts CRIT Circlet according to complete build context.",
|
|
},
|
|
{
|
|
stat: "CRIT DMG",
|
|
priority: 1,
|
|
reason: "The sourced off-field table accepts CRIT Circlet according to complete build context.",
|
|
},
|
|
],
|
|
},
|
|
substats: [
|
|
{
|
|
stat: "Energy Recharge",
|
|
weight: 1,
|
|
reason: "Ordinal source priority until the explicit team requirement is met; this contract does not invent a universal threshold.",
|
|
},
|
|
{
|
|
stat: "Elemental Mastery",
|
|
weight: 0.8,
|
|
reason: "Sourced off-field priority; not a damage multiplier.",
|
|
},
|
|
{
|
|
stat: "CRIT Rate",
|
|
weight: 0.6,
|
|
reason: "Sourced lower ordinal priority after Energy Recharge and Elemental Mastery; not a damage multiplier.",
|
|
},
|
|
{
|
|
stat: "CRIT DMG",
|
|
weight: 0.6,
|
|
reason: "Sourced lower ordinal priority after Energy Recharge and Elemental Mastery; not a damage multiplier.",
|
|
},
|
|
],
|
|
aggregateTargets: [],
|
|
evidenceRules: {
|
|
minimumExtractionConfidence: 88,
|
|
minimumFieldConfidence: 78,
|
|
requiredFieldKeys: [...BUILD_FIT_REQUIRED_FIELD_KEYS],
|
|
},
|
|
conflictPolicy: {
|
|
equippedByOtherCharacter: "warn",
|
|
assignedToOtherBuild: "warn",
|
|
},
|
|
},
|
|
];
|
|
|
|
export function findCuratedBuildFitProfile(id: string) {
|
|
return curatedBuildFitProfiles.find((profile) => profile.id === id) ?? null;
|
|
}
|