- validateOptions : remplit les champs manquants et corrige les clés invalides (détection précédemment inopérante car getXByKey renvoie l'objet par défaut) - generateCharacteristics : ne mélange plus le tableau avant affectation, la priorité des caractéristiques (high → medium → low) est respectée - Exports manquants : convertSkillToMgt2eFormat, popRandomItems, ERROR_CODES, TravellerNpcError - Tests : import des globals via @jest/globals (obligatoire en ESM), suppression de l'import obsolète buildMgt2eBaseActorSystem, attente corrigée pilot.smallCraft, test des doublons aligné sur le dédoublonnage réel (noms complets, spécialisations conservées) - AGENTS.md : section Testing mise à jour - README.md : ajouté
3.6 KiB
AGENTS.md — mgt2-compendium-amiral-denisov
First read
.github/copilot-instructions.md— packs, icons, module.json conventions (this file builds on it, don't repeat it)
No package manager / no build
There is no package.json, no lockfile, no bundler. JavaScript is plain ESM loaded directly by FoundryVTT. Do not run npm install or any build command.
Commands
5 chat commands registered at runtime (not declared in module.json):
| Command | Entrypoint | Dialog |
|---|---|---|
/commerce |
scripts/commerce.js |
CommerceDialog (3 tabs) |
/pnj |
scripts/npc.js |
NpcDialog (4 tabs) |
/rencontre |
scripts/npc.js |
same dialog (tab 2) |
/mission |
scripts/npc.js |
same dialog (tab 3) |
/sector |
scripts/sector.js |
SectorMapApp (IFRAME Traveller Map, clics→chat) |
/subsector |
scripts/sector.js |
SectorMapApp (IFRAME) |
Commands are registered via ChatLogV2.CHAT_COMMANDS — not Hooks.on("chatMessage") as the copilot-instructions say (that file is stale). See commerce.js:15 and npc.js:15 for the actual pattern.
Framework quirks
- ApplicationV2 +
HandlebarsApplicationMixinfor all dialogs. - Foundry v13/v14 dual code paths: some hooks must handle both jQuery (v13) and DOM (v14) APIs.
- Dice rolls:
await new Roll(formula).evaluate()— always async. - Skill FQN format for
game.i18n: e.g.pilot.spacecraft,electronics.computers,gunner.turret.
Runtime systems (run at ready hook, GM only)
-
Migration (
mgt2eMigration.js): converts legacy item types to mgt2e (armor→armour, equipment→item/augment, computer→hardware, etc.). Tracked viagame.settingsversion flag. Forced re-run requires deleting the setting. -
NPC RollTable sync (
npcRollTableSync.js): writes D66 tables fromscripts/data/npcTables.jsinto thetables-pnjcompendium pack. Checksums to avoid redundant writes.
Testing
Deux fichiers de test, pas de build :
# Tests Jest (globals importés via @jest/globals, flag ESM requis)
NODE_OPTIONS="--experimental-vm-modules" npx jest scripts/tests/travellerNpcGenerator.test.js
# Mini-runner maison (Jest rapporte un faux positif « at least one test »)
node scripts/tests/allyEnemyGenerator.test.js
travellerNpcGenerator.test.js: Jest (describe/it/expect), mock FoundryVTT fait main, ~1100 lignes. Couvre : utilitaires, lookups, validation, caractéristiques/compétences, conversion de compétences, génération complète, ModuleCache, erreurs, config validation.allyEnemyGenerator.test.js: son propre runner (test()/assertEqual), 39 tests, à lancer avecnodedirectement.- Config Jest minimale dans
jest.config.cjs(testMatch+transform: {}). - Pas de CI test step — à lancer manuellement.
Versioning
module.json→"version"is the single source of truth.- Git tag format:
v1.3.0(CI stripsv). - No changelog file.
CI/CD (Gitea)
- Only triggers on
release: [published]— not on push/PR. - Builds a zip archive of
module.json + assets/ + packs/ + scripts/ + styles/ + templates/and uploads to the release. - No test step in CI.
Deprecated packs (still on disk, NOT in module.json)
packs/arme/→ superseded byarmespacks/carriere/→ superseded bycarrierespacks/talent-psy/→ superseded bytalents-psioniques
Do not re-add them to module.json. They remain for historical data recovery only.
All content is in French
Labels, comments, commit messages, UI strings, icon file names, rule references — everything. Check French naming before searching/grepping.