eve-fit-engine 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,7 +25,7 @@ projected effects, and structure fuel/service stats.
25
25
  release gate and the engine's correctness ground truth.
26
26
  - **Differential harness** — `npm run diff`: generates 4 fits for *every*
27
27
  published ship and compares every stat against a headless **pyfa-org/Pyfa**
28
- oracle. 1646/1676 fits (98.2%) match exactly; the residual is a documented
28
+ oracle. 1662/1676 fits (99.2%) match exactly; the residual is a documented
29
29
  set of pyfa float/modelling/per-ship quirks (see
30
30
  [`test/diff/known-diffs.mjs`](test/diff/known-diffs.mjs)). Exits 0 on no
31
31
  *unexpected* diffs; `--strict` re-lists the accepted set as failures.
@@ -99,6 +99,13 @@ tracked and ported, then re-checked against **both** the fixture suite
99
99
  (`npm run test:pyfa`) and the per-ship differential harness (`npm run diff`)
100
100
  before release. See [`MAINTENANCE.md`](./MAINTENANCE.md) for the update flows.
101
101
 
102
+ ## Contributing
103
+
104
+ See [`CONTRIBUTING.md`](./CONTRIBUTING.md) — the step-by-step guide to setup,
105
+ every internal command, the two validation suites (`npm run test:pyfa` +
106
+ `npm run diff`), how to add fixtures / port effects, the pyfa-pin recalibration
107
+ flow, and the project's hard rules.
108
+
102
109
  ## Licence
103
110
 
104
111
  GPL-3.0-or-later. Copyright (C) 2026 Capsuleers.app. This is free software; see
package/dist/index.cjs CHANGED
@@ -4217,11 +4217,15 @@ function collectDrains(ctx, dataset) {
4217
4217
  }
4218
4218
  continue;
4219
4219
  }
4220
+ const seen = /* @__PURE__ */ new Set();
4220
4221
  for (const eid of m.effectIDs) {
4221
4222
  const effect = dataset.effects.get(eid);
4222
4223
  if (!effect) continue;
4223
4224
  const entry = drainEntryFromEffect(effect, m);
4224
4225
  if (!entry) continue;
4226
+ const sig = `${entry.cycleMs}|${entry.capNeed}|${entry.clipSize}|${entry.reloadMs}|${entry.isInjector ? 1 : 0}|${entry.disableStagger ? 1 : 0}`;
4227
+ if (seen.has(sig)) continue;
4228
+ seen.add(sig);
4225
4229
  drains.push(entry);
4226
4230
  if (entry.capNeed > 0 && entry.cycleMs > 0) {
4227
4231
  totalGrossDrain += entry.capNeed / (entry.cycleMs / 1e3);
package/dist/index.js CHANGED
@@ -4215,11 +4215,15 @@ function collectDrains(ctx, dataset) {
4215
4215
  }
4216
4216
  continue;
4217
4217
  }
4218
+ const seen = /* @__PURE__ */ new Set();
4218
4219
  for (const eid of m.effectIDs) {
4219
4220
  const effect = dataset.effects.get(eid);
4220
4221
  if (!effect) continue;
4221
4222
  const entry = drainEntryFromEffect(effect, m);
4222
4223
  if (!entry) continue;
4224
+ const sig = `${entry.cycleMs}|${entry.capNeed}|${entry.clipSize}|${entry.reloadMs}|${entry.isInjector ? 1 : 0}|${entry.disableStagger ? 1 : 0}`;
4225
+ if (seen.has(sig)) continue;
4226
+ seen.add(sig);
4223
4227
  drains.push(entry);
4224
4228
  if (entry.capNeed > 0 && entry.cycleMs > 0) {
4225
4229
  totalGrossDrain += entry.capNeed / (entry.cycleMs / 1e3);
package/dist/node.cjs CHANGED
@@ -4245,11 +4245,15 @@ function collectDrains(ctx, dataset) {
4245
4245
  }
4246
4246
  continue;
4247
4247
  }
4248
+ const seen = /* @__PURE__ */ new Set();
4248
4249
  for (const eid of m.effectIDs) {
4249
4250
  const effect = dataset.effects.get(eid);
4250
4251
  if (!effect) continue;
4251
4252
  const entry = drainEntryFromEffect(effect, m);
4252
4253
  if (!entry) continue;
4254
+ const sig = `${entry.cycleMs}|${entry.capNeed}|${entry.clipSize}|${entry.reloadMs}|${entry.isInjector ? 1 : 0}|${entry.disableStagger ? 1 : 0}`;
4255
+ if (seen.has(sig)) continue;
4256
+ seen.add(sig);
4253
4257
  drains.push(entry);
4254
4258
  if (entry.capNeed > 0 && entry.cycleMs > 0) {
4255
4259
  totalGrossDrain += entry.capNeed / (entry.cycleMs / 1e3);
package/dist/node.js CHANGED
@@ -4221,11 +4221,15 @@ function collectDrains(ctx, dataset) {
4221
4221
  }
4222
4222
  continue;
4223
4223
  }
4224
+ const seen = /* @__PURE__ */ new Set();
4224
4225
  for (const eid of m.effectIDs) {
4225
4226
  const effect = dataset.effects.get(eid);
4226
4227
  if (!effect) continue;
4227
4228
  const entry = drainEntryFromEffect(effect, m);
4228
4229
  if (!entry) continue;
4230
+ const sig = `${entry.cycleMs}|${entry.capNeed}|${entry.clipSize}|${entry.reloadMs}|${entry.isInjector ? 1 : 0}|${entry.disableStagger ? 1 : 0}`;
4231
+ if (seen.has(sig)) continue;
4232
+ seen.add(sig);
4229
4233
  drains.push(entry);
4230
4234
  if (entry.capNeed > 0 && entry.cycleMs > 0) {
4231
4235
  totalGrossDrain += entry.capNeed / (entry.cycleMs / 1e3);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve-fit-engine",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Pyfa-parity EVE Online ship & structure fitting calculation engine. Inject an SDE dataset + a fit, get the full derived stat block (offense, defense, capacitor, navigation, targeting, fitting, projected, structure).",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "type": "module",