@randomplay/data 0.0.1
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/LICENSE +21 -0
- package/README.md +26 -0
- package/cleaned/audit/mihoyo-buhflipexplode.source-conflicts.json +282 -0
- package/cleaned/audit/nicole.acceptance.json +45 -0
- package/cleaned/audit/v1-agent-source-candidates.json +467 -0
- package/cleaned/audit/yanagi.acceptance.json +102 -0
- package/cleaned/golden/v1-replay-report.json +399 -0
- package/dist/index.d.mts +173 -0
- package/dist/index.mjs +223 -0
- package/dist/source-manifest-pBseE3aE.d.mts +41 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.mjs +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "fairy-v1-golden-replay-report-v1",
|
|
3
|
+
"parserVersion": "golden-v1-replay-v0.1.0",
|
|
4
|
+
"generatedAt": "2026-05-05T18:20:00+08:00",
|
|
5
|
+
"policy": {
|
|
6
|
+
"scope": "V1 true-data replay harness baseline after DD-002: 19 anchors in V1, G13/G18/G19/G20 deferred.",
|
|
7
|
+
"releaseGate": "releaseReady becomes true only when all V1 anchors pass executable replay and blockingDiagnostics is zero.",
|
|
8
|
+
"manualAcceptance": "G22/G23 use lo-user manual acceptance records tied to the sourceTextHash values in v1-agent-source-candidates.json; A/B effects are replayed as explicit inactive/active snapshot states, and C is skill-level parameterized."
|
|
9
|
+
},
|
|
10
|
+
"v1AnchorIds": [
|
|
11
|
+
"G01",
|
|
12
|
+
"G02",
|
|
13
|
+
"G03",
|
|
14
|
+
"G04",
|
|
15
|
+
"G05",
|
|
16
|
+
"G06",
|
|
17
|
+
"G07",
|
|
18
|
+
"G08",
|
|
19
|
+
"G09",
|
|
20
|
+
"G10",
|
|
21
|
+
"G11",
|
|
22
|
+
"G12",
|
|
23
|
+
"G14",
|
|
24
|
+
"G15",
|
|
25
|
+
"G16",
|
|
26
|
+
"G17",
|
|
27
|
+
"G21",
|
|
28
|
+
"G22",
|
|
29
|
+
"G23"
|
|
30
|
+
],
|
|
31
|
+
"deferredAnchorIds": [
|
|
32
|
+
"G13",
|
|
33
|
+
"G18",
|
|
34
|
+
"G19",
|
|
35
|
+
"G20"
|
|
36
|
+
],
|
|
37
|
+
"summary": {
|
|
38
|
+
"v1AnchorCount": 19,
|
|
39
|
+
"passed": 19,
|
|
40
|
+
"pendingHarness": 0,
|
|
41
|
+
"blocked": 0,
|
|
42
|
+
"deferred": 4,
|
|
43
|
+
"blockingDiagnostics": 0,
|
|
44
|
+
"releaseReady": true
|
|
45
|
+
},
|
|
46
|
+
"anchors": [
|
|
47
|
+
{
|
|
48
|
+
"id": "G01",
|
|
49
|
+
"status": "passed",
|
|
50
|
+
"sourceRefs": [
|
|
51
|
+
{
|
|
52
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
53
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
54
|
+
"sourceAnchor": "da/da-versions.live.json#2.7.3.versionEnemies[0]"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
58
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
59
|
+
"sourceAnchor": "assets/zzz/enemies.live.json#27300"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"notes": [
|
|
63
|
+
"Default boss defense multiplier replays against sourced DA slot 0 boss context."
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "G02",
|
|
68
|
+
"status": "passed",
|
|
69
|
+
"sourceRefs": [
|
|
70
|
+
{
|
|
71
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
72
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
73
|
+
"sourceAnchor": "da/da-versions.live.json#2.7.3.versionEnemies[0]"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
77
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
78
|
+
"sourceAnchor": "assets/zzz/enemies.live.json#27300"
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"notes": [
|
|
82
|
+
"Corrupted-shield state uses the core 1.8x defense multiplier with sourced boss context."
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "G03",
|
|
87
|
+
"status": "passed",
|
|
88
|
+
"sourceRefs": [
|
|
89
|
+
{
|
|
90
|
+
"sourceId": "lo-user-excel",
|
|
91
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
92
|
+
"sourceAnchor": "代理人属性!A37:AF37"
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"notes": [
|
|
96
|
+
"Crit expected value uses 1 + critRate * critDamage."
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "G04",
|
|
101
|
+
"status": "passed",
|
|
102
|
+
"sourceRefs": [
|
|
103
|
+
{
|
|
104
|
+
"sourceId": "zzz-data-introduction",
|
|
105
|
+
"sourceVersion": "2026-05-05",
|
|
106
|
+
"sourceAnchor": "docs/reference/zzz-data-introduction.txt:121-123"
|
|
107
|
+
}
|
|
108
|
+
],
|
|
109
|
+
"notes": [
|
|
110
|
+
"Executable bucket-scan replay reproduces the guide's 199.17%, 268.61%, and 161.67% penetration-vs-damage-bonus breakpoints."
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "G05",
|
|
115
|
+
"status": "passed",
|
|
116
|
+
"sourceRefs": [
|
|
117
|
+
{
|
|
118
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
119
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
120
|
+
"sourceAnchor": "da/da-versions.live.json#2.7.3.versionEnemies[0]"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
124
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
125
|
+
"sourceAnchor": "assets/zzz/enemies.live.json#27300"
|
|
126
|
+
}
|
|
127
|
+
],
|
|
128
|
+
"notes": [
|
|
129
|
+
"Sheer damage skips defense while regular damage sees corrupted-shield defense."
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "G06",
|
|
134
|
+
"status": "passed",
|
|
135
|
+
"sourceRefs": [
|
|
136
|
+
{
|
|
137
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
138
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
139
|
+
"sourceAnchor": "da/da-versions.live.json#2.7.3.versionEnemies[0]"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
143
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
144
|
+
"sourceAnchor": "assets/zzz/enemies.live.json#27300"
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
"notes": [
|
|
148
|
+
"Sheer vs default boss ratio replays with the same sourced boss context."
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"id": "G07",
|
|
153
|
+
"status": "passed",
|
|
154
|
+
"sourceRefs": [
|
|
155
|
+
{
|
|
156
|
+
"sourceId": "lo-user-excel",
|
|
157
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
158
|
+
"sourceAnchor": "代理人属性!A37:AF37"
|
|
159
|
+
}
|
|
160
|
+
],
|
|
161
|
+
"notes": [
|
|
162
|
+
"Two fractional segments ceil before summing."
|
|
163
|
+
]
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"id": "G08",
|
|
167
|
+
"status": "passed",
|
|
168
|
+
"sourceRefs": [
|
|
169
|
+
{
|
|
170
|
+
"sourceId": "lo-user-excel",
|
|
171
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
172
|
+
"sourceAnchor": "代理人属性!A37:AF37"
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
"notes": [
|
|
176
|
+
"Anomaly Mastery floors before buildup."
|
|
177
|
+
]
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "G09",
|
|
181
|
+
"status": "passed",
|
|
182
|
+
"sourceRefs": [
|
|
183
|
+
{
|
|
184
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
185
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
186
|
+
"sourceAnchor": "da/da-versions.live.json#2.7.3.versionEnemies[0]"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
190
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
191
|
+
"sourceAnchor": "assets/zzz/enemies.live.json#27300"
|
|
192
|
+
}
|
|
193
|
+
],
|
|
194
|
+
"notes": [
|
|
195
|
+
"buhflipexplode DA baseDaze/versionDazeMult feeds enemy.dazeCap; replay asserts daze ratio display floors the percentage value."
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "G10",
|
|
200
|
+
"status": "passed",
|
|
201
|
+
"sourceRefs": [
|
|
202
|
+
{
|
|
203
|
+
"sourceId": "lo-user-excel",
|
|
204
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
205
|
+
"sourceAnchor": "代理人属性!A37:AF37"
|
|
206
|
+
}
|
|
207
|
+
],
|
|
208
|
+
"notes": [
|
|
209
|
+
"Frost maps to Ice and Auric Ink maps to Ether for both resistanceZone and anomaly-buildup-resistance."
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"id": "G11",
|
|
214
|
+
"status": "passed",
|
|
215
|
+
"sourceRefs": [
|
|
216
|
+
{
|
|
217
|
+
"sourceId": "lo-user-excel",
|
|
218
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
219
|
+
"sourceAnchor": "代理人属性!A37:AF37"
|
|
220
|
+
}
|
|
221
|
+
],
|
|
222
|
+
"notes": [
|
|
223
|
+
"Frost/Auric use Ice/Ether damage-bonus panel fields."
|
|
224
|
+
]
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"id": "G12",
|
|
228
|
+
"status": "passed",
|
|
229
|
+
"sourceRefs": [
|
|
230
|
+
{
|
|
231
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
232
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
233
|
+
"sourceAnchor": "da/da-versions.live.json#2.7.3.versionEnemies[0]"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
237
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
238
|
+
"sourceAnchor": "assets/zzz/enemies.live.json#27300"
|
|
239
|
+
}
|
|
240
|
+
],
|
|
241
|
+
"notes": [
|
|
242
|
+
"Boss trigger-count threshold and physical 1.2x multiplier replay from core constants."
|
|
243
|
+
]
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"id": "G14",
|
|
247
|
+
"status": "passed",
|
|
248
|
+
"sourceRefs": [
|
|
249
|
+
{
|
|
250
|
+
"sourceId": "lo-user-excel",
|
|
251
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
252
|
+
"sourceAnchor": "代理人属性!A37:AF37"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"sourceId": "lo-user-excel",
|
|
256
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
257
|
+
"sourceAnchor": "代理人属性!A4:AF4"
|
|
258
|
+
}
|
|
259
|
+
],
|
|
260
|
+
"notes": [
|
|
261
|
+
"Virtual contribution rows include Bangboo exclusion and overflow handling."
|
|
262
|
+
]
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"id": "G15",
|
|
266
|
+
"status": "passed",
|
|
267
|
+
"sourceRefs": [
|
|
268
|
+
{
|
|
269
|
+
"sourceId": "lo-user-excel",
|
|
270
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
271
|
+
"sourceAnchor": "代理人属性!A37:AF37"
|
|
272
|
+
}
|
|
273
|
+
],
|
|
274
|
+
"notes": [
|
|
275
|
+
"All seven disorder formula paths replay, including polarity disorder."
|
|
276
|
+
]
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"id": "G16",
|
|
280
|
+
"status": "passed",
|
|
281
|
+
"sourceRefs": [
|
|
282
|
+
{
|
|
283
|
+
"sourceId": "lo-user-excel",
|
|
284
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
285
|
+
"sourceAnchor": "代理人属性!A37:AF37"
|
|
286
|
+
}
|
|
287
|
+
],
|
|
288
|
+
"notes": [
|
|
289
|
+
"Disorder daze-level zone uses formula actor level 60."
|
|
290
|
+
]
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"id": "G17",
|
|
294
|
+
"status": "passed",
|
|
295
|
+
"sourceRefs": [
|
|
296
|
+
{
|
|
297
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
298
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
299
|
+
"sourceAnchor": "da/da-versions.live.json#2.7.3.versionEnemies[0]"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"sourceId": "buhflipexplode-zzz-da",
|
|
303
|
+
"sourceVersion": "2026-05-05T0445Z",
|
|
304
|
+
"sourceAnchor": "assets/zzz/enemies.live.json#27300"
|
|
305
|
+
}
|
|
306
|
+
],
|
|
307
|
+
"notes": [
|
|
308
|
+
"Corrupted shield cleanse uses sourced DA boss maxHp as event base."
|
|
309
|
+
]
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"id": "G21",
|
|
313
|
+
"status": "passed",
|
|
314
|
+
"sourceRefs": [
|
|
315
|
+
{
|
|
316
|
+
"sourceId": "lo-user-excel",
|
|
317
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
318
|
+
"sourceAnchor": "代理人属性!A37:AF37"
|
|
319
|
+
}
|
|
320
|
+
],
|
|
321
|
+
"notes": [
|
|
322
|
+
"One-agent Yixuan path has no teammate modifiers and keeps sheer defense skip."
|
|
323
|
+
]
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"id": "G22",
|
|
327
|
+
"status": "passed",
|
|
328
|
+
"sourceRefs": [
|
|
329
|
+
{
|
|
330
|
+
"sourceId": "lo-user-excel",
|
|
331
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
332
|
+
"sourceAnchor": "代理人核心技描述!D4:J4"
|
|
333
|
+
}
|
|
334
|
+
],
|
|
335
|
+
"notes": [
|
|
336
|
+
"Nicole defense reduction is manually accepted by lo-user and replayed as explicit inactive/active snapshot states.",
|
|
337
|
+
"Inactive keeps the default defenseZone; active applies the 40% defense reduction from core passive level 7."
|
|
338
|
+
]
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "G23",
|
|
342
|
+
"status": "passed",
|
|
343
|
+
"sourceRefs": [
|
|
344
|
+
{
|
|
345
|
+
"sourceId": "lo-user-excel",
|
|
346
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
347
|
+
"sourceAnchor": "代理人核心技描述!D4:J4"
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"sourceId": "lo-user-excel",
|
|
351
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
352
|
+
"sourceAnchor": "代理人核心技描述!D23:J23"
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"sourceId": "lo-user-excel",
|
|
356
|
+
"sourceVersion": "2.6.0_R14028417",
|
|
357
|
+
"sourceAnchor": "代理人技能描述!C298"
|
|
358
|
+
}
|
|
359
|
+
],
|
|
360
|
+
"notes": [
|
|
361
|
+
"Yanagi disorder boost is manually accepted by lo-user and replayed as explicit inactive/active snapshot states.",
|
|
362
|
+
"Yanagi polarity-disorder EX Special template supports skill levels 1-16; level 12 yields 96 base-damage extra from 300 anomaly proficiency.",
|
|
363
|
+
"Three-agent virtual contribution trace includes Yixuan, Nicole, and Yanagi."
|
|
364
|
+
]
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"id": "G13",
|
|
368
|
+
"status": "deferred",
|
|
369
|
+
"sourceRefs": [],
|
|
370
|
+
"notes": [
|
|
371
|
+
"Deferred to V1.x by @lo-user on 2026-05-05; requires data-driven anomaly-threshold rule composition."
|
|
372
|
+
]
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"id": "G18",
|
|
376
|
+
"status": "deferred",
|
|
377
|
+
"sourceRefs": [],
|
|
378
|
+
"notes": [
|
|
379
|
+
"Deferred to V1.x by D-13; requires non-DA enemy / part-break data expansion."
|
|
380
|
+
]
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"id": "G19",
|
|
384
|
+
"status": "deferred",
|
|
385
|
+
"sourceRefs": [],
|
|
386
|
+
"notes": [
|
|
387
|
+
"Deferred to V1.x by D-13; requires non-DA enemy / part-break data expansion."
|
|
388
|
+
]
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"id": "G20",
|
|
392
|
+
"status": "deferred",
|
|
393
|
+
"sourceRefs": [],
|
|
394
|
+
"notes": [
|
|
395
|
+
"Deferred to V1.x by D-13; requires non-DA enemy / part-break data expansion."
|
|
396
|
+
]
|
|
397
|
+
}
|
|
398
|
+
]
|
|
399
|
+
}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { a as CleanedDataKind, i as CleanedDataArtifact, n as SourceManifest, o as CleanedGameDataArtifact, r as SourceManifestEntry, t as DistributionPolicy } from "./source-manifest-pBseE3aE.mjs";
|
|
2
|
+
import { GameData, SourceDocument, SourceRef } from "@randomplay/core";
|
|
3
|
+
|
|
4
|
+
//#region src/sources.d.ts
|
|
5
|
+
type DataSourceKind = Extract<SourceDocument["kind"], "excel" | "mihoyoWiki" | "thirdPartySite">;
|
|
6
|
+
type DataSourceStatus = "awaitingFile" | "discoveryOnly" | "readyForAdapter" | "requiresReview";
|
|
7
|
+
interface FetchPolicy {
|
|
8
|
+
mode: "manualUpload" | "httpGet";
|
|
9
|
+
maxRequestsPerMinute: number;
|
|
10
|
+
cacheRequired: boolean;
|
|
11
|
+
conditionalRequestsPreferred: boolean;
|
|
12
|
+
requiresUserAgent: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface SourceComplianceNote {
|
|
15
|
+
robotsTxt: "notApplicable" | "notFound" | "found" | "notChecked";
|
|
16
|
+
termsStatus: "notApplicable" | "notFound" | "found" | "requiresHumanReview";
|
|
17
|
+
redistribution: "privateUntilReviewed" | "cleanedDataOnly" | "requiresHumanReview";
|
|
18
|
+
notes: readonly string[];
|
|
19
|
+
}
|
|
20
|
+
interface DataSourceDescriptor {
|
|
21
|
+
id: string;
|
|
22
|
+
kind: DataSourceKind;
|
|
23
|
+
label: string;
|
|
24
|
+
url?: string;
|
|
25
|
+
fileNameHint?: string;
|
|
26
|
+
status: DataSourceStatus;
|
|
27
|
+
formalDataReady: boolean;
|
|
28
|
+
parserTargets: readonly string[];
|
|
29
|
+
sourceVersionStrategy: string;
|
|
30
|
+
discoveredAssets?: readonly string[];
|
|
31
|
+
fetchPolicy: FetchPolicy;
|
|
32
|
+
compliance: SourceComplianceNote;
|
|
33
|
+
}
|
|
34
|
+
declare const dataSourceDescriptors: readonly [{
|
|
35
|
+
readonly id: "lo-user-excel";
|
|
36
|
+
readonly kind: "excel";
|
|
37
|
+
readonly label: "lo-user provided ZZZ data workbook";
|
|
38
|
+
readonly fileNameHint: "data/source/excel/data.xlsx";
|
|
39
|
+
readonly status: "readyForAdapter";
|
|
40
|
+
readonly formalDataReady: false;
|
|
41
|
+
readonly parserTargets: readonly ["agent skill multipliers", "daze multipliers", "W-Engine passives", "Drive Disc set effects", "agent enhancement / potential activation fields"];
|
|
42
|
+
readonly sourceVersionStrategy: "Use the retained workbook hash plus the workbook-provided version marker from 首页!A1.";
|
|
43
|
+
readonly discoveredAssets: readonly ["data/source/excel/data.xlsx", "data/source/excel/META.md", "data/source/excel/workbook-audit.json"];
|
|
44
|
+
readonly fetchPolicy: {
|
|
45
|
+
readonly mode: "manualUpload";
|
|
46
|
+
readonly maxRequestsPerMinute: 0;
|
|
47
|
+
readonly cacheRequired: true;
|
|
48
|
+
readonly conditionalRequestsPreferred: false;
|
|
49
|
+
readonly requiresUserAgent: false;
|
|
50
|
+
};
|
|
51
|
+
readonly compliance: {
|
|
52
|
+
readonly robotsTxt: "notApplicable";
|
|
53
|
+
readonly termsStatus: "requiresHumanReview";
|
|
54
|
+
readonly redistribution: "cleanedDataOnly";
|
|
55
|
+
readonly notes: readonly ["The workbook is retained in git under data/source/excel/ as a raw/source archive.", "The workbook and derived audit artifacts must not be published in the @randomplay/data package.", "Use workbook-audit.json for sheet/column discovery; do not infer typed modifiers from text without deterministic parser support or manual acceptance."];
|
|
56
|
+
};
|
|
57
|
+
}, {
|
|
58
|
+
readonly id: "mihoyo-zzz-critical-assault";
|
|
59
|
+
readonly kind: "mihoyoWiki";
|
|
60
|
+
readonly label: "Mihoyo ZZZ wiki Critical Assault map";
|
|
61
|
+
readonly url: "https://baike.mihoyo.com/zzz/wiki/channel/map/13/108";
|
|
62
|
+
readonly status: "readyForAdapter";
|
|
63
|
+
readonly formalDataReady: false;
|
|
64
|
+
readonly parserTargets: readonly ["Deadly Assault period list", "three selectable period buffs", "three boss room detail texts and challenge targets", "official Chinese labels and descriptions", "Mihoyo/buhflipexplode zh/en source-text anchors"];
|
|
65
|
+
readonly sourceVersionStrategy: "Use the retained snapshot id plus fetch-manifest hashes for the channel and entry_page API payloads.";
|
|
66
|
+
readonly discoveredAssets: readonly ["data/source/raw/mihoyo/zzz-da/2026-05-05T0850Z/channel-108/periods.json", "data/source/raw/mihoyo/zzz-da/2026-05-05T0850Z/parsed/period-details.json", "data/source/raw/mihoyo/zzz-da/2026-05-05T0850Z/alignment/mihoyo-buhflipexplode.json", "data/source/raw/mihoyo/zzz-da/2026-05-05T0850Z/fetch-manifest.json"];
|
|
67
|
+
readonly fetchPolicy: {
|
|
68
|
+
readonly mode: "httpGet";
|
|
69
|
+
readonly maxRequestsPerMinute: 12;
|
|
70
|
+
readonly cacheRequired: true;
|
|
71
|
+
readonly conditionalRequestsPreferred: true;
|
|
72
|
+
readonly requiresUserAgent: true;
|
|
73
|
+
};
|
|
74
|
+
readonly compliance: {
|
|
75
|
+
readonly robotsTxt: "notFound";
|
|
76
|
+
readonly termsStatus: "requiresHumanReview";
|
|
77
|
+
readonly redistribution: "cleanedDataOnly";
|
|
78
|
+
readonly notes: readonly ["robots.txt returned HTTP 404 on 2026-05-05.", "The target page returned HTTP 200 with cache-control max-age=300.", "The rendered Nuxt page shell does not contain detail content; use public JSON API payloads and parse embedded rich-text HTML fragments.", "entry_page requests must include x-rpc-wiki_app: zzz to avoid cross-namespace content_id collisions.", "Do not crawl authenticated or private APIs; use public wiki responses only."];
|
|
79
|
+
};
|
|
80
|
+
}, {
|
|
81
|
+
readonly id: "buhflipexplode-zzz-da";
|
|
82
|
+
readonly kind: "thirdPartySite";
|
|
83
|
+
readonly label: "buhflipexplode Deadly Assault data";
|
|
84
|
+
readonly url: "https://www.buhflipexplode.org/zzz/da/";
|
|
85
|
+
readonly status: "readyForAdapter";
|
|
86
|
+
readonly formalDataReady: false;
|
|
87
|
+
readonly parserTargets: readonly ["deadly assault version entries", "enemy HP/daze/anomaly multipliers", "boss buff metadata", "Deadly Assault score / HP display algorithm evidence", "algorithm drift manifest"];
|
|
88
|
+
readonly sourceVersionStrategy: "Use the accepted raw snapshot id plus fetch-manifest and algorithm-manifest hashes.";
|
|
89
|
+
readonly discoveredAssets: readonly ["data/source/raw/buhflipexplode/2026-05-05T0445Z/da/da-versions.live.json", "data/source/raw/buhflipexplode/2026-05-05T0445Z/assets/zzz/enemies.live.json", "data/source/raw/buhflipexplode/2026-05-05T0445Z/assets/zzz/buffs.live.json", "data/source/raw/buhflipexplode/2026-05-05T0445Z/da/da.js", "data/source/raw/buhflipexplode/2026-05-05T0445Z/algorithm-manifest.json"];
|
|
90
|
+
readonly fetchPolicy: {
|
|
91
|
+
readonly mode: "httpGet";
|
|
92
|
+
readonly maxRequestsPerMinute: 12;
|
|
93
|
+
readonly cacheRequired: true;
|
|
94
|
+
readonly conditionalRequestsPreferred: true;
|
|
95
|
+
readonly requiresUserAgent: true;
|
|
96
|
+
};
|
|
97
|
+
readonly compliance: {
|
|
98
|
+
readonly robotsTxt: "notFound";
|
|
99
|
+
readonly termsStatus: "requiresHumanReview";
|
|
100
|
+
readonly redistribution: "cleanedDataOnly";
|
|
101
|
+
readonly notes: readonly ["robots.txt returned HTTP 404 on 2026-05-05.", "The site describes itself as fan-created and non-commercial.", "The about page links source code at https://github.com/spiritfxxxx/buhflipexplode-src.", "The source repository has a GPL-3.0 LICENSE for code; do not copy GPL JS into Fairy runtime packages.", "The about page says most images/data are officially sourced from in-game and public fandoms.", "D-12 locks option B: retain GPL JS for audit only; runtime implementation must remain independent MIT code.", "Retained JSON payloads are filtered to live versions only; non-live / beta / leaks config is excluded."];
|
|
102
|
+
};
|
|
103
|
+
}];
|
|
104
|
+
type DataSourceId = (typeof dataSourceDescriptors)[number]["id"];
|
|
105
|
+
declare function getDataSourceDescriptor(id: string): DataSourceDescriptor;
|
|
106
|
+
//#endregion
|
|
107
|
+
//#region src/adapters.d.ts
|
|
108
|
+
interface SourceFetchContext {
|
|
109
|
+
now: string;
|
|
110
|
+
cacheDir?: string;
|
|
111
|
+
userAgent?: string;
|
|
112
|
+
}
|
|
113
|
+
interface RawSourceFetchResult<TPayload = unknown> {
|
|
114
|
+
sourceId: string;
|
|
115
|
+
sourceVersion: string;
|
|
116
|
+
fetchedAt: string;
|
|
117
|
+
payload: TPayload;
|
|
118
|
+
url?: string;
|
|
119
|
+
fileName?: string;
|
|
120
|
+
contentType?: string;
|
|
121
|
+
}
|
|
122
|
+
interface ParsedSourceRecord {
|
|
123
|
+
id: string;
|
|
124
|
+
sourceAnchor?: string;
|
|
125
|
+
dataPath?: string;
|
|
126
|
+
raw: unknown;
|
|
127
|
+
}
|
|
128
|
+
interface ParsedSourceBatch {
|
|
129
|
+
sourceId: string;
|
|
130
|
+
sourceVersion: string;
|
|
131
|
+
formalDataReady: boolean;
|
|
132
|
+
records: readonly ParsedSourceRecord[];
|
|
133
|
+
notes: readonly string[];
|
|
134
|
+
}
|
|
135
|
+
interface SourceAdapter<TPayload = unknown> {
|
|
136
|
+
sourceId: string;
|
|
137
|
+
fetch(context: SourceFetchContext): Promise<RawSourceFetchResult<TPayload>>;
|
|
138
|
+
parse(raw: RawSourceFetchResult<TPayload>, context: SourceFetchContext): Promise<ParsedSourceBatch>;
|
|
139
|
+
}
|
|
140
|
+
declare function createDiscoveryOnlyAdapter(descriptor: DataSourceDescriptor): SourceAdapter<never>;
|
|
141
|
+
//#endregion
|
|
142
|
+
//#region src/ingest.d.ts
|
|
143
|
+
interface CreateEmptyGameDataOptions {
|
|
144
|
+
gameVersion: string;
|
|
145
|
+
dataVersion: string;
|
|
146
|
+
sourceVersion: string;
|
|
147
|
+
generatedAt: string;
|
|
148
|
+
sources: readonly SourceDocument[];
|
|
149
|
+
schemaVersion?: string;
|
|
150
|
+
}
|
|
151
|
+
declare function createEmptyGameData(options: CreateEmptyGameDataOptions): GameData;
|
|
152
|
+
declare function assertDiscoveryOnlyGameData(gameData: GameData): void;
|
|
153
|
+
//#endregion
|
|
154
|
+
//#region src/metadata.d.ts
|
|
155
|
+
declare const DATA_SOURCE_SKELETON_PARSER_VERSION = "@randomplay/data-source-skeleton-v0.1.0";
|
|
156
|
+
interface BuildSourceDocumentOptions {
|
|
157
|
+
sourceVersion: string;
|
|
158
|
+
parsedAt: string;
|
|
159
|
+
fetchedAt?: string;
|
|
160
|
+
parserVersion?: string;
|
|
161
|
+
gameVersion?: string;
|
|
162
|
+
fileName?: string;
|
|
163
|
+
licenseNote?: string;
|
|
164
|
+
}
|
|
165
|
+
interface BuildSourceRefOptions {
|
|
166
|
+
sourceVersion?: string;
|
|
167
|
+
sourceAnchor?: string;
|
|
168
|
+
dataPath?: string;
|
|
169
|
+
}
|
|
170
|
+
declare function buildSourceDocument(descriptor: DataSourceDescriptor, options: BuildSourceDocumentOptions): SourceDocument;
|
|
171
|
+
declare function buildSourceRef(descriptor: Pick<DataSourceDescriptor, "id">, options?: BuildSourceRefOptions): SourceRef;
|
|
172
|
+
//#endregion
|
|
173
|
+
export { BuildSourceDocumentOptions, BuildSourceRefOptions, CleanedDataArtifact, CleanedDataKind, CleanedGameDataArtifact, CreateEmptyGameDataOptions, DATA_SOURCE_SKELETON_PARSER_VERSION, DataSourceDescriptor, DataSourceId, DataSourceKind, DataSourceStatus, DistributionPolicy, FetchPolicy, ParsedSourceBatch, ParsedSourceRecord, RawSourceFetchResult, SourceAdapter, SourceComplianceNote, SourceFetchContext, SourceManifest, SourceManifestEntry, assertDiscoveryOnlyGameData, buildSourceDocument, buildSourceRef, createDiscoveryOnlyAdapter, createEmptyGameData, dataSourceDescriptors, getDataSourceDescriptor };
|