Skip to content
Skip to documentation content

Command / Hero Equipment

Hero Equipment

Read recorded hero loadouts grouped into observation periods for roster accounts.

At a glance

Route: /workspaces/{workspace_id}/hero-equipment.

Who can open this page: Verified member and enabled entitlement with view_intelligence; sidebar additionally uses collection gate. The workspace must have enabled entitlement and an active, verified membership; ownership does not bypass verification. Sign in with Discord. Sidebar visibility is separate from endpoint permission. This documentation never submits workspace requests.

What you see

Accounts are ordered by roster name, with player ID displayed as #ID. Select an account group to reveal periods newest first. Every period shows Account, Period (from → to), Helmet, Body, Weapon, Utility, Boots and Horse. Known slot-aware catalog IDs render names; missing item IDs render — and unknown positive IDs render #ID. The page has no account/date filters or loadout editor.

Who fills in each field

Field or data What it means Who fills it in Can it be changed here? When it updates
Account and equipment slots Roster account name/player ID identify the observed target; extension supplies helmet, body, weapon, utility, boots and horse item IDs, rendered through slot-aware names. extension-collected, roster-ingest, backend-derived Read-only Roster reads and accepted equipment submissions
Observed from/to Backend UTC receipt timestamps bound consecutive matching latest signatures; they do not prove continuous game equipment state. backend-derived Read-only Accepted equipment submission; reload to see changes

Calculations

Equipment observation periods

equipment.period — Coalesce only consecutive matching latest equipment signatures.

Rule: Normalize every EQUIPMENT_SLOTS item to positive non-bool integer orNone; compare ordered tuple to latest period ordered observed_from DESC,id DESC under lock. Equal => observed_to=max(existing,observed_at); different/no latest => new period with from=to=observed_at. Historical matching earlier periods are not merged.

Input Who fills it in Unit Optional Fallback
items by slot extension-collected item IDs Yes Missing slot =>None
observed_at backend-derived timestamp No Required by helper; current collection caller supplies datetime.now(UTC)
Latest stored period backend-derived equipment period Yes No latest => create

Output unit: observation interval. Precision: Stored timestamp precision. Rounding: No rounding. Clamp: No output clamp. Timezone: Timezone-aware observation timestamps; current collection uses backend UTC receipt time.

A late equal observation cannot shorten observed_to. Invalid IDs/bool raise validation error. A changed late signature still creates a separate period; not proof of continuous equip time between captures.

Canonical implementation and dependencies: reviewed source symbols. Non-canonical mirrors: none registered.

Used on: Hero Equipment

The current collection handler supplies backend receipt time in UTC as observed_at. A synthetic identical loadout received at 10:00 and 10:15 extends its recorded end to 10:15; this does not establish what was equipped throughout the gap.

Freshness and updates

A connected extension supplies target roster player ID and six observed item IDs. The backend authorizes collection on the server, resolves that target roster account and timestamps accepted submissions with current UTC receipt time. Account names/IDs come from the roster. Reloading reads stored periods; expanding a group only changes local visibility. An interval describes matching recorded observations and cannot establish continuous equipment use across gaps.

Actions and permissions

Who can perform each action / Who can take action: each actor below needs the exact grant and conditions, independently of page visibility. All writes retain workspace scoping; same-origin checks apply as listed.

Action Actor Permission
Expand or collapse account signed-in-member view_intelligence; local visibility only, no history modification or account/time filters

In Trapitan, select an account group to expand or collapse its recorded periods. This does not change stored observations. Page access is view_intelligence, while the sidebar additionally uses the alliance collection gate; lack of a sidebar link and lack of page permission are different states.

States and edge cases

No hero equipment reported yet is the empty screen. Accounts with no stored period are absent. Missing slots are not inferred from a previous loadout. Nonpositive, noninteger or boolean IDs are invalid at the helper boundary. Collection can reject an unrecognized target roster player or unauthorized server; this read-only screen has no ingestion-error panel. A changed late signature remains a separate observation period, and an equal late observation cannot shorten its end.

Members, Reports, Troops Overview.

Source references

Source reviewed: 2026-10-07

Source references

Stable page ID: command.hero-equipment.

  • src/trapitan/api/routes/web.py
  • src/trapitan/web/templates/hero_equipment.html
  • src/trapitan/hero_equipment.py
  • src/trapitan/web/static/js/hero-equipment.js
  • src/trapitan/api/routes/extension_collection.py
  • src/trapitan/authorization/dependencies.py
  • src/trapitan/authorization/policy.py

Calculation equipment.period:

  • Canonical implementation: src/trapitan/hero_equipment.py — apply_equipment_transition.
  • Dependency: src/trapitan/hero_equipment.py — equipment_signature.
  • Dependency: src/trapitan/hero_equipment.py — period_signature.
  • Dependency: src/trapitan/hero_equipment.py — normalize_item_id.
  • Dependency: src/trapitan/hero_equipment.py — EQUIPMENT_SLOTS.
  • Dependency: src/trapitan/api/routes/extension_collection.py — submit_hero_equipment.