Module artifacts

Source
Expand description

Artifacts — collection handlers, acquisition, and the two Aspect rules that do not ride on a trigger fire.

Three of the six Aspect rules hang off a trigger and live in crate::logic::stones («Нарастание», «Первый удар», «Фоновый голос»); the remaining three hang off the fight’s own moments and live here: «Теневой круг» on the heartbeat, «Входящий залп» and «Поочерёдный вход» on the flip.

§Provenance

Every effect fired from this module goes through [crate::logic::stones::OverlordLogic::run_stone_effect], whose combat output is built CombatEventOrigin::Proc and whose bookkeeping output (EntityIncrAttribute) carries no provenance at all and is not trigger surface. Nothing here builds a combat event itself. That is what keeps the artifact from closing the loop the Core/Proc boundary exists to prevent: an artifact rebroadcasts effects, and a rebroadcast effect can never fire the trigger that would rebroadcast it again.

The second loop guard is that an artifact-driven fire never feeds the flip gauge: run_stone_effect’s gauge return value is deliberately dropped at every call site in this module. Without it, «Входящий залп» could fill the gauge, flip, and volley again — the one cascade that is not covered by the Core/Proc boundary, because a flip is a state transition rather than a combat event and carries no provenance to inherit.

The third guard is artifact.flip.rev: one flip runs at most one volley even if GlobalFlip reaches the hook more than once.