Skip to content
Skip to documentation content

Command / Reports / Report Details

Report Details

Inspect one structured battle report and set its optional operation association.

At a glance

Route: /workspaces/{workspace_id}/reports/{report_id}.

Who can open this page: collection. 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

Battle report shows subject and second-resolution reported time, attacker/defender alliance and account plus roster village label/map link. Troop sections group by side and section index, with optional section label and identity. Columns are ten unit slots plus Hero; icon tribe uses 1–3, otherwise tribe 1. Line 1 is Total, line 2 Casualties and other supported lines Injured. Missing counts show ?. Additional information shows captured section labels and values when present. Statistics, when any value is known, shows attacker and defender Combat strength, Supply before, Supply lost and Resources lost. Operation is a selectable dropdown including No operation and this workspace’s operations.

Who fills in each field

Field or data What it means Who fills it in Can it be changed here? When it updates
Report subject, time and parties Captured subject, reported timestamp, attacker/defender account, alliance and village coordinates; roster hydrates names/game links. extension-collected, roster-ingest Read-only Report submitted by connected extension; roster labels hydrated on read
Troop rows and combat statistics Captured ten unit slots plus hero, Total/Casualties/Injured lines and eight optional attacker/defender statistics; backend does not recompute combat strength. extension-collected Read-only Accepted structured report upload
Operation association Optional operation call assignment of a report within the workspace. signed-in-member collection Report association update
Additional information Optional captured labels and value lists grouped by report side and section. extension-collected Read-only Accepted structured report upload

Calculations

Report tile coordinates

report.map-tile — Decode captured Travian map tile ID into coordinates.

Rule: Require1<=d<=401^2; position=d-1; x=(position%401)-200; y=200-(position//401). Invalid bounds returnNone. Report combat statistics remain collected, not recomputed.

Input Who fills it in Unit Optional Fallback
village_d extension-collected one-based map tile ID No Required; no fallback

Output unit: coordinate pair. Precision: Exact integer. Rounding: No rounding. Clamp: No output clamp. Timezone: not-applicable.

Out-of-range tile returnsNone. Row orientation reverses y from map row index. Collector supplies tile IDs; no matching JavaScript coordinate decoder was found.

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

Used on: Report Details

Synthetic tile 1 decodes to (−200, 200); tile 80401 decodes to (0, 0). Party tile IDs are required at upload; missing troop-section tile IDs fall back to the matching party tile. Invalid decoded tiles reject the upload rather than silently inventing coordinates.

Freshness and updates

Collected rows and report statistics update on accepted uploads; Trapitan stores supplied combat statistics rather than deriving them from troop counts. The current collector interprets visible report time as UTC; upload validation removes microseconds and treats naive time as UTC while preserving explicit offsets. The displayed timestamp has seconds and no timezone suffix; it is report time, not last capture time. Roster hydration supplies current player IDs and village names on reads, falling back to coordinate labels. Operation is stored member input; changing it saves automatically, while future matching extension upserts preserve it.

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
Open report or return to Reports signed-in-member Verified collection, enabled entitlement; report scoped to workspace; no filters on the detail
Change operation association signed-in-member Verified collection, same origin; report and selected operation belong to workspace

In Trapitan, choose an operation or No operation. The dropdown temporarily disables itself and shows Saving… then Saved. A failed save restores the saved selection and says Could not save. There is no call-owner/operation-owner or current-linked-account requirement on this association endpoint: verified collection and the common entitlement gate apply, with same-origin and workspace-scoped report/operation checks. Back to reports returns to the list.

States and edge cases

A missing or cross-workspace report returns 404. If all eight statistics values are unknown the Statistics card is omitted; with any known value, other unknown cells show ?. Additional information is absent when none was captured. Troop grouping does not invent missing lines or values, and no separate trapped-status label is rendered. Coordinates come from decoded report tile IDs, not a 801-wide map calculation. Invalid upload tiles are rejected; absent section tile/account use the matching party values. Missing roster names fall back to (x|y), and missing player IDs leave plain account text.

Reports, Operation Calls, Members.

Source references

Source reviewed: 2026-10-07

Source references

Stable page ID: command.report-detail.

  • src/trapitan/api/routes/web.py
  • src/trapitan/web/templates/report_detail.html
  • extension/chromium/lib/reports.js
  • src/trapitan/reports.py
  • src/trapitan/api/routes/extension_collection.py
  • src/trapitan/authorization/dependencies.py
  • src/trapitan/authorization/policy.py
  • src/trapitan/api/routes/guards.py

Calculation report.map-tile:

  • Canonical implementation: src/trapitan/reports.py — coordinates_from_report_d.
  • Dependency: src/trapitan/reports.py — REPORT_MAP_SIZE.
  • Dependency: src/trapitan/reports.py — REPORT_MAP_RADIUS.