Skip to content

Add: "Using Static Data" guide#283

Open
SentientTurtle wants to merge 1 commit intoesi:mainfrom
SentientTurtle:main
Open

Add: "Using Static Data" guide#283
SentientTurtle wants to merge 1 commit intoesi:mainfrom
SentientTurtle:main

Conversation

@SentientTurtle
Copy link
Copy Markdown
Contributor

The current info page for the Static Data Export, under 'Services and Resources' has a few tips.

Adding more of these probably warrants such guides/tips/other info being split off into a dedicated page under 'Guides and Examples'

This PR is a first draft at such a page, migrating the "Celestial Names" guide and "Security Offices" tip into the new "Using Static Data" guide, and adding new sections on TypeLists, Remote Skill injection/"Skills on Demand", and the usage of data relating to wormhole systems.

Proposed scope would be small guides for things that are unintuitive about the static data because of unstated logic or "magic constants" that cannot be derived from the SDE.

This PR also includes a slight tweak to the 'System Security' page, clarifying that page's applicability to both ESI and SDE.

Specific feedback requests:

  • The section on "Remote Skill Injection"/"Skills on Demand" is currently named "Remote Skills". I'm not fond of this section title, but neither the (semi)official title nor colloquial names for the feature seem very widely known or consistently used. 😔
  • Ordering of the sections within the page. Currently has a loose "alphabetical, grouped roughly by related or dependant topics" ordering. (e.g. the skills section follows after the typelist section) If this order doesn't feel logical it should be changed.
  • The example code snippet for TypeLists doesn't strictly follow the logic described in the text; A consequence of implementing the rules in Python while keeping the code easy to read. Not sure if this makes the section more confusing.

+ minor fix to system-security.md
@SentientTurtle SentientTurtle requested review from a team as code owners May 7, 2026 21:57
@fc-pinky
Copy link
Copy Markdown
Contributor

fc-pinky commented May 8, 2026

Very nice work! Thank you for taking this on!

My only comment is in the Python snippet, as that isnt completely how typeLists work. I will give some example code Monday about that if nobody did so before me :)

Btw tldr, an item in the includedTypes but in the excludedGroup is still on the list. Worded differently: includedTypes wins from excludedGroups, and includedGroups wins from excludedCategoried.

But it might be easier to understand with code :)

Edit: on second look, it might just be easier to give an example how to resolve all types in a typeList, rather than "is this type in the list". That might be the more common case people will work from. And makes checking for items in a list more trivial.

Comment thread docs/guides/staticdata.md
Comment on lines +59 to +63
A TypeList consists of a set of included Categories, Groups, and Types, and a set of excluded Categories, Groups, and Types. A given type is included in a typelist if any of the following match:

* The type's categoryID is included in `includedCategoryIDs` but not in `excludedCategoryIDs` and the type's groupID and typeID are not in `excludedGroupIDs` and `excludedTypeIDs` respectively.
* The type's groupID is included in `includedGroupIDs` but not in `excludedGroupIDs` and the type's typeID is not in `excludedTypeIDs`
* The type's typeID is included in `includedTypeIDs` but not in `excludedTypeIDs`
Copy link
Copy Markdown
Contributor

@fc-pinky fc-pinky May 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
A TypeList consists of a set of included Categories, Groups, and Types, and a set of excluded Categories, Groups, and Types. A given type is included in a typelist if any of the following match:
* The type's categoryID is included in `includedCategoryIDs` but not in `excludedCategoryIDs` and the type's groupID and typeID are not in `excludedGroupIDs` and `excludedTypeIDs` respectively.
* The type's groupID is included in `includedGroupIDs` but not in `excludedGroupIDs` and the type's typeID is not in `excludedTypeIDs`
* The type's typeID is included in `includedTypeIDs` but not in `excludedTypeIDs`
A TypeList consists of a set of included Categories, Groups, and Types, and a set of excluded Categories, Groups, and Types. To get the full list of all types in a TypeList, do the following (in this order):
* Add all items with a category in `includedCategoryIDs` to the list.
* Remove all items with a category in `excludedCategoriesIDs` from the list.
* Add all items with a group in `includedGroupIDs` to the list.
* Remove all items with a group in `excludedGroupIDs` from the list.
* Add all items in `includedTypeIDs` to the list.
* Remove all items in `excludedTypeIDs` from the list.

In other words, it is not "include - exclude", but it is "((typesInIncludedCategory - typesInExcludedCategory + typesInIncludedGroup) - typesInExcludedGroup + includedType) - excludedType". And there is a fundamental difference. For example, this is possible:

Typelist contains category A, but excludes A.b, but includes A.b.587

(where A.b is a group within category A, and A.b.587 is an item within group A.b.)

The way you describe it, that won't be possible. I have no clue if such an inclusion/exclusion/inclusion pair is used, so in effect your description might have an identical result. However, that is not how typelists work.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, that's an oversight on my part, I did not intend that difference and didn't check whether the edge cases apply. Slipped in when trying to build the explanation around the example.

Copy link
Copy Markdown
Member

@joaomlneto joaomlneto May 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other ideas that occurred to me:

In functional/transform style:

result =
    includedCategoryTypes
    - excludedCategoryTypes
    + includedGroupTypes
    - excludedGroupTypes
    + includedTypes
    - excludedTypes

Or math-like:

$$\texttt{result}=\Big(((\texttt{categoryIncludes} \setminus \texttt{categoryExcludes})\cup\texttt{groupIncludes})\setminus\texttt{groupExcludes}\cup\texttt{includedTypes}\Big)\setminus\texttt{excludedTypes}$$

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants