@randomplay/data 0.0.4 → 0.1.0
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 +28 -2
- package/cleaned/audit/nanoka-coverage-matrix.json +1390 -0
- package/cleaned/audit/nanoka-disorder-daze-level-audit.json +134 -0
- package/cleaned/audit/nanoka-disorder-formula-audit.json +106 -0
- package/cleaned/audit/nanoka-drift-report/phase3-sync-000-foundation.json +43 -0
- package/cleaned/audit/nanoka-drift-report/phase3-sync-001-g01-g26.json +2633 -0
- package/cleaned/audit/nanoka-drift-report/phase3-sync-002-g27-g28.json +2829 -0
- package/cleaned/audit/nanoka-drive-disc-slot-stat-audit.json +86 -0
- package/cleaned/audit/nanoka-snapshot-diff-history.json +29 -0
- package/cleaned/audit/nicole.acceptance.json +1 -1
- package/cleaned/audit/source-migration-field-diff.json +407 -0
- package/cleaned/audit/v1-agent-source-candidates.json +1 -1
- package/cleaned/audit/yanagi.acceptance.json +1 -1
- package/cleaned/golden/v1-replay-report.json +83 -5
- package/cleaned/runtime/game-data.json +236 -0
- package/dist/index.d.mts +1621 -1
- package/dist/index.mjs +905 -1
- package/package.json +14 -5
- package/source-registry.json +199 -0
|
@@ -0,0 +1,1390 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "nanoka-coverage-matrix/v0.1",
|
|
3
|
+
"generatedAt": "2026-05-15T18:46:10+08:00",
|
|
4
|
+
"status": "phase-4-runtime-cutover-gate",
|
|
5
|
+
"sourceVersion": "manifest.zzz.live",
|
|
6
|
+
"canonicalSchemas": [
|
|
7
|
+
"packages/core/src/schema/game-data.ts",
|
|
8
|
+
"packages/core/src/schema/battle-snapshot.ts",
|
|
9
|
+
"packages/core/src/schema/common.ts",
|
|
10
|
+
"packages/core/src/schema/modifier.ts"
|
|
11
|
+
],
|
|
12
|
+
"statusValues": [
|
|
13
|
+
"verified-from-nanoka",
|
|
14
|
+
"needs-tl-research",
|
|
15
|
+
"needs-owner-research",
|
|
16
|
+
"deferred"
|
|
17
|
+
],
|
|
18
|
+
"sourcePolicies": [
|
|
19
|
+
"nanoka",
|
|
20
|
+
"derived-from-source-registry",
|
|
21
|
+
"implementation-owned",
|
|
22
|
+
"archived-audit-baseline",
|
|
23
|
+
"out-of-scope",
|
|
24
|
+
"removed-out-of-product-scope"
|
|
25
|
+
],
|
|
26
|
+
"sampleSources": [
|
|
27
|
+
{
|
|
28
|
+
"id": "nanoka-character-yixuan-1371",
|
|
29
|
+
"entityType": "agent",
|
|
30
|
+
"entityId": "1371",
|
|
31
|
+
"url": "https://static.nanoka.cc/zzz/3.0.2+15625449/zh/character/1371.json",
|
|
32
|
+
"version": "3.0.2+15625449",
|
|
33
|
+
"releaseChannel": "research",
|
|
34
|
+
"fetchedAt": "2026-05-15T00:21:07+08:00",
|
|
35
|
+
"contentSha256": "6cb0a652f92d9daf0e6cd382d757c7755d543f9013defb61799b747aaf2b8868",
|
|
36
|
+
"server": "latest-snapshot",
|
|
37
|
+
"approvedForCleanedOutput": false,
|
|
38
|
+
"evidenceUse": "research-only-until-owner-approval"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "nanoka-character-nekomata-1021",
|
|
42
|
+
"entityType": "agent",
|
|
43
|
+
"entityId": "1021",
|
|
44
|
+
"url": "https://static.nanoka.cc/zzz/3.0.2+15625449/zh/character/1021.json",
|
|
45
|
+
"version": "3.0.2+15625449",
|
|
46
|
+
"releaseChannel": "research",
|
|
47
|
+
"fetchedAt": "2026-05-15T00:21:07+08:00",
|
|
48
|
+
"contentSha256": "85186a7568c11ff9f56e2085bf561485f0548ff29fc70e686c8aa3dca2b0f961",
|
|
49
|
+
"server": "latest-snapshot",
|
|
50
|
+
"approvedForCleanedOutput": false,
|
|
51
|
+
"evidenceUse": "research-only-until-owner-approval"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "nanoka-character-soldier11-1041",
|
|
55
|
+
"entityType": "agent",
|
|
56
|
+
"entityId": "1041",
|
|
57
|
+
"url": "https://static.nanoka.cc/zzz/3.0.2+15625449/zh/character/1041.json",
|
|
58
|
+
"version": "3.0.2+15625449",
|
|
59
|
+
"releaseChannel": "research",
|
|
60
|
+
"fetchedAt": "2026-05-15T00:21:07+08:00",
|
|
61
|
+
"contentSha256": "8acde3e5c3849a371c5a2fefe32bd38e2b96397067a73e27cd5a69296550fcc1",
|
|
62
|
+
"server": "latest-snapshot",
|
|
63
|
+
"approvedForCleanedOutput": false,
|
|
64
|
+
"evidenceUse": "research-only-until-owner-approval"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "nanoka-bangboo-plugboo-54008",
|
|
68
|
+
"entityType": "bangboo",
|
|
69
|
+
"entityId": "54008",
|
|
70
|
+
"url": "https://static.nanoka.cc/zzz/3.0.2+15625449/zh/bangboo/54008.json",
|
|
71
|
+
"version": "3.0.2+15625449",
|
|
72
|
+
"releaseChannel": "research",
|
|
73
|
+
"fetchedAt": "2026-05-15T00:21:07+08:00",
|
|
74
|
+
"contentSha256": "2afc34c8b72b3a7dc6e18d945e83c12784a742817e4ce760ee8c4c17aa3b0261",
|
|
75
|
+
"server": "latest-snapshot",
|
|
76
|
+
"approvedForCleanedOutput": false,
|
|
77
|
+
"evidenceUse": "research-only-until-owner-approval"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "nanoka-monster-dullahan-30000",
|
|
81
|
+
"entityType": "enemy",
|
|
82
|
+
"entityId": "30000",
|
|
83
|
+
"url": "https://static.nanoka.cc/zzz/3.0.2+15625449/zh/monster/30000.json",
|
|
84
|
+
"version": "3.0.2+15625449",
|
|
85
|
+
"releaseChannel": "research",
|
|
86
|
+
"fetchedAt": "2026-05-15T00:21:07+08:00",
|
|
87
|
+
"contentSha256": "46eebea2270e748a6057d152a05a3296f2601efaccf299667318025f44bf492a",
|
|
88
|
+
"server": "latest-snapshot",
|
|
89
|
+
"approvedForCleanedOutput": false,
|
|
90
|
+
"evidenceUse": "research-only-until-owner-approval"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "nanoka-weapon-yixuan-signature-14137",
|
|
94
|
+
"entityType": "wEngine",
|
|
95
|
+
"entityId": "14137",
|
|
96
|
+
"url": "https://static.nanoka.cc/zzz/3.0.2+15625449/zh/weapon/14137.json",
|
|
97
|
+
"version": "3.0.2+15625449",
|
|
98
|
+
"releaseChannel": "research",
|
|
99
|
+
"fetchedAt": "2026-05-15T00:21:07+08:00",
|
|
100
|
+
"contentSha256": "a0d7dfe24f24a5cfc623e750c33bbea7aead9952283d670861b9a67e814a667d",
|
|
101
|
+
"server": "latest-snapshot",
|
|
102
|
+
"approvedForCleanedOutput": false,
|
|
103
|
+
"evidenceUse": "research-only-until-owner-approval"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "nanoka-equipment-woodpecker-31000",
|
|
107
|
+
"entityType": "driveDisc",
|
|
108
|
+
"entityId": "31000",
|
|
109
|
+
"url": "https://static.nanoka.cc/zzz/3.0.2+15625449/zh/equipment/31000.json",
|
|
110
|
+
"version": "3.0.2+15625449",
|
|
111
|
+
"releaseChannel": "research",
|
|
112
|
+
"fetchedAt": "2026-05-15T00:21:07+08:00",
|
|
113
|
+
"contentSha256": "6af7dcce6a1863b1d801e54621056b2f92baab2c31672a4ed6c2cb1ff3fcf508",
|
|
114
|
+
"server": "latest-snapshot",
|
|
115
|
+
"approvedForCleanedOutput": false,
|
|
116
|
+
"evidenceUse": "research-only-until-owner-approval"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"id": "nanoka-manifest",
|
|
120
|
+
"entityType": "sourceManifest",
|
|
121
|
+
"entityId": "zzz",
|
|
122
|
+
"url": "https://static.nanoka.cc/manifest.json",
|
|
123
|
+
"version": "manifest",
|
|
124
|
+
"releaseChannel": "source-registry",
|
|
125
|
+
"fetchedAt": "2026-05-15T11:55:00+08:00",
|
|
126
|
+
"contentSha256": "91494c2c3bfda6ec47beccbf71066506ab0a315513aa751cf30e4c3a1dc0817d",
|
|
127
|
+
"server": "source-registry",
|
|
128
|
+
"approvedForCleanedOutput": true,
|
|
129
|
+
"evidenceUse": "live-version-gate"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"id": "nanoka-character-nekomata-live-1021",
|
|
133
|
+
"entityType": "agent",
|
|
134
|
+
"entityId": "1021",
|
|
135
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/character/1021.json",
|
|
136
|
+
"version": "2.8",
|
|
137
|
+
"releaseChannel": "stable",
|
|
138
|
+
"fetchedAt": "2026-05-15T12:20:00+08:00",
|
|
139
|
+
"contentSha256": "9d5a3226975802371089816df50a5cd1bfcdb2ccb75bdc4b2f50d4e756ba1375",
|
|
140
|
+
"server": "live",
|
|
141
|
+
"approvedForCleanedOutput": true,
|
|
142
|
+
"evidenceUse": "release-gate-evidence"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"id": "nanoka-bangboo-plugboo-live-54008",
|
|
146
|
+
"entityType": "bangboo",
|
|
147
|
+
"entityId": "54008",
|
|
148
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/bangboo/54008.json",
|
|
149
|
+
"version": "2.8",
|
|
150
|
+
"releaseChannel": "stable",
|
|
151
|
+
"fetchedAt": "2026-05-15T12:20:00+08:00",
|
|
152
|
+
"contentSha256": "02a203d3bcdf5b6c1d756e0a5f2957658a13b889305da5dbd8ce27f9a8dbee60",
|
|
153
|
+
"server": "live",
|
|
154
|
+
"approvedForCleanedOutput": true,
|
|
155
|
+
"evidenceUse": "release-gate-evidence"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"id": "nanoka-weapon-yixuan-signature-live-14137",
|
|
159
|
+
"entityType": "wEngine",
|
|
160
|
+
"entityId": "14137",
|
|
161
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/weapon/14137.json",
|
|
162
|
+
"version": "2.8",
|
|
163
|
+
"releaseChannel": "stable",
|
|
164
|
+
"fetchedAt": "2026-05-15T12:20:00+08:00",
|
|
165
|
+
"contentSha256": "0f1c6fd4e391a2968d3d4246dc0b82abdb6e98c63b75dd31dc3a578d78ebaeab",
|
|
166
|
+
"server": "live",
|
|
167
|
+
"approvedForCleanedOutput": true,
|
|
168
|
+
"evidenceUse": "release-gate-evidence"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "nanoka-equipment-woodpecker-live-31000",
|
|
172
|
+
"entityType": "driveDisc",
|
|
173
|
+
"entityId": "31000",
|
|
174
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/equipment/31000.json",
|
|
175
|
+
"version": "2.8",
|
|
176
|
+
"releaseChannel": "stable",
|
|
177
|
+
"fetchedAt": "2026-05-15T12:20:00+08:00",
|
|
178
|
+
"contentSha256": "4190f6084521aead931a28ada9a44e6d9cd26a7fdb2401ffd0ab4e00a257f1ec",
|
|
179
|
+
"server": "live",
|
|
180
|
+
"approvedForCleanedOutput": true,
|
|
181
|
+
"evidenceUse": "release-gate-evidence"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"id": "nanoka-boss-live-index-2.8",
|
|
185
|
+
"entityType": "deadlyAssaultIndex",
|
|
186
|
+
"entityId": "boss",
|
|
187
|
+
"url": "https://static.nanoka.cc/zzz/2.8/boss.json",
|
|
188
|
+
"version": "2.8",
|
|
189
|
+
"releaseChannel": "stable",
|
|
190
|
+
"fetchedAt": "2026-05-15T12:20:00+08:00",
|
|
191
|
+
"contentSha256": "d9519738c6100082760f59bb92fd17fdba93afb853c845b1c90d0718788a79f9",
|
|
192
|
+
"server": "live",
|
|
193
|
+
"approvedForCleanedOutput": true,
|
|
194
|
+
"evidenceUse": "release-gate-evidence"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"id": "nanoka-boss-live-69036",
|
|
198
|
+
"entityType": "deadlyAssaultPeriod",
|
|
199
|
+
"entityId": "69036",
|
|
200
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/boss/69036.json",
|
|
201
|
+
"version": "2.8",
|
|
202
|
+
"releaseChannel": "stable",
|
|
203
|
+
"fetchedAt": "2026-05-15T12:20:00+08:00",
|
|
204
|
+
"contentSha256": "781cb67799e6fb8c0438ab57ac5536507b85292161342f9870c18f42d890989f",
|
|
205
|
+
"server": "live",
|
|
206
|
+
"approvedForCleanedOutput": true,
|
|
207
|
+
"evidenceUse": "release-gate-evidence"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"id": "nanoka-character-yixuan-live-1371",
|
|
211
|
+
"entityType": "agent",
|
|
212
|
+
"entityId": "1371",
|
|
213
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/character/1371.json",
|
|
214
|
+
"version": "2.8",
|
|
215
|
+
"releaseChannel": "stable",
|
|
216
|
+
"fetchedAt": "2026-05-15T12:20:00+08:00",
|
|
217
|
+
"contentSha256": "710c0e2fa5fca2779819b76c23a4abf8d445ba7e4a2f1cbfccd9145185143c94",
|
|
218
|
+
"server": "live",
|
|
219
|
+
"approvedForCleanedOutput": true,
|
|
220
|
+
"evidenceUse": "release-gate-evidence"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"id": "nanoka-monster-dullahan-live-30000",
|
|
224
|
+
"entityType": "enemy",
|
|
225
|
+
"entityId": "30000",
|
|
226
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/monster/30000.json",
|
|
227
|
+
"version": "2.8",
|
|
228
|
+
"releaseChannel": "stable",
|
|
229
|
+
"fetchedAt": "2026-05-15T13:20:00+08:00",
|
|
230
|
+
"contentSha256": "99b2286a6a5a3847f067cfc06bd5c5c44b4a3eb2b1b5609df7af820eea55e855",
|
|
231
|
+
"server": "live",
|
|
232
|
+
"approvedForCleanedOutput": true,
|
|
233
|
+
"evidenceUse": "release-gate-evidence"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"id": "nanoka-monster-greta-live-30004",
|
|
237
|
+
"entityType": "enemy",
|
|
238
|
+
"entityId": "30004",
|
|
239
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/monster/30004.json",
|
|
240
|
+
"version": "2.8",
|
|
241
|
+
"releaseChannel": "stable",
|
|
242
|
+
"fetchedAt": "2026-05-15T13:20:00+08:00",
|
|
243
|
+
"contentSha256": "33a80f1ea374967371614bfde889fb3a01306e592c70c027b3cca2e4b5fa2e65",
|
|
244
|
+
"server": "live",
|
|
245
|
+
"approvedForCleanedOutput": true,
|
|
246
|
+
"evidenceUse": "release-gate-evidence"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"id": "nanoka-monster-ruthless-fiend-live-200141",
|
|
250
|
+
"entityType": "enemy",
|
|
251
|
+
"entityId": "200141",
|
|
252
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/monster/200141.json",
|
|
253
|
+
"version": "2.8",
|
|
254
|
+
"releaseChannel": "stable",
|
|
255
|
+
"fetchedAt": "2026-05-15T13:20:00+08:00",
|
|
256
|
+
"contentSha256": "d54d3a1660b3a66ff88c247c05f02beade5ead797a1efcb7c5bc97a952e71c05",
|
|
257
|
+
"server": "live",
|
|
258
|
+
"approvedForCleanedOutput": true,
|
|
259
|
+
"evidenceUse": "release-gate-evidence"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"id": "nanoka-monster-notorious-hati-live-200014",
|
|
263
|
+
"entityType": "enemy",
|
|
264
|
+
"entityId": "200014",
|
|
265
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/monster/200014.json",
|
|
266
|
+
"version": "2.8",
|
|
267
|
+
"releaseChannel": "stable",
|
|
268
|
+
"fetchedAt": "2026-05-15T13:20:00+08:00",
|
|
269
|
+
"contentSha256": "b49e34aab1a3372a8a43a91cbc6a3ef04328296d3f55822114743030275abb57",
|
|
270
|
+
"server": "live",
|
|
271
|
+
"approvedForCleanedOutput": true,
|
|
272
|
+
"evidenceUse": "release-gate-evidence"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"id": "nanoka-monster-notorious-armored-hati-live-200034",
|
|
276
|
+
"entityType": "enemy",
|
|
277
|
+
"entityId": "200034",
|
|
278
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/monster/200034.json",
|
|
279
|
+
"version": "2.8",
|
|
280
|
+
"releaseChannel": "stable",
|
|
281
|
+
"fetchedAt": "2026-05-15T13:20:00+08:00",
|
|
282
|
+
"contentSha256": "6404adfb840c41fdab456a8e2ffb0e07963272d9a0bb27ad0e2e61858357b1b4",
|
|
283
|
+
"server": "live",
|
|
284
|
+
"approvedForCleanedOutput": true,
|
|
285
|
+
"evidenceUse": "release-gate-evidence"
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"id": "nanoka-monster-miasma-priest-live-30033",
|
|
289
|
+
"entityType": "enemy",
|
|
290
|
+
"entityId": "30033",
|
|
291
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/monster/30033.json",
|
|
292
|
+
"version": "2.8",
|
|
293
|
+
"releaseChannel": "stable",
|
|
294
|
+
"fetchedAt": "2026-05-15T13:20:00+08:00",
|
|
295
|
+
"contentSha256": "f5c9809560273f63fc0525b73e7291a6f754a1d850c642bc6458ec396ca8dbb2",
|
|
296
|
+
"server": "live",
|
|
297
|
+
"approvedForCleanedOutput": true,
|
|
298
|
+
"evidenceUse": "release-gate-evidence"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"id": "nanoka-monster-notorious-pompey-live-300211",
|
|
302
|
+
"entityType": "enemy",
|
|
303
|
+
"entityId": "300211",
|
|
304
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/monster/300211.json",
|
|
305
|
+
"version": "2.8",
|
|
306
|
+
"releaseChannel": "stable",
|
|
307
|
+
"fetchedAt": "2026-05-15T13:20:00+08:00",
|
|
308
|
+
"contentSha256": "6cab369294b398403bb6d7710e00418231f94d1487ae092cc69854467ead60e0",
|
|
309
|
+
"server": "live",
|
|
310
|
+
"approvedForCleanedOutput": true,
|
|
311
|
+
"evidenceUse": "release-gate-evidence"
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"id": "nanoka-character-nicole-live-1031",
|
|
315
|
+
"entityType": "agent",
|
|
316
|
+
"version": "2.8",
|
|
317
|
+
"releaseChannel": "live",
|
|
318
|
+
"server": "global",
|
|
319
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/character/1031.json",
|
|
320
|
+
"approvedForCleanedOutput": true,
|
|
321
|
+
"evidenceUse": "phase3-g22-passive-candidate-gate"
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"id": "nanoka-character-yanagi-live-1221",
|
|
325
|
+
"entityType": "agent",
|
|
326
|
+
"version": "2.8",
|
|
327
|
+
"releaseChannel": "live",
|
|
328
|
+
"server": "global",
|
|
329
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/character/1221.json",
|
|
330
|
+
"approvedForCleanedOutput": true,
|
|
331
|
+
"evidenceUse": "phase3-g23-passive-candidate-gate"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"id": "nanoka-bangboo-penguinboo-live-53001",
|
|
335
|
+
"entityType": "bangboo",
|
|
336
|
+
"version": "2.8",
|
|
337
|
+
"releaseChannel": "live",
|
|
338
|
+
"server": "global",
|
|
339
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/bangboo/53001.json",
|
|
340
|
+
"approvedForCleanedOutput": true,
|
|
341
|
+
"evidenceUse": "phase3-g24-bangboo-candidate-gate"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"id": "nanoka-bangboo-sharkboo-live-54001",
|
|
345
|
+
"entityType": "bangboo",
|
|
346
|
+
"version": "2.8",
|
|
347
|
+
"releaseChannel": "live",
|
|
348
|
+
"server": "global",
|
|
349
|
+
"url": "https://static.nanoka.cc/zzz/2.8/zh/bangboo/54001.json",
|
|
350
|
+
"approvedForCleanedOutput": true,
|
|
351
|
+
"evidenceUse": "phase3-g25-bangboo-candidate-gate"
|
|
352
|
+
}
|
|
353
|
+
],
|
|
354
|
+
"rows": [
|
|
355
|
+
{
|
|
356
|
+
"fieldId": "metadata.sources",
|
|
357
|
+
"canonicalPath": "GameData.sources[]",
|
|
358
|
+
"fieldClass": "required",
|
|
359
|
+
"sourcePolicy": "derived-from-source-registry",
|
|
360
|
+
"status": "verified-from-nanoka",
|
|
361
|
+
"nanokaEndpoint": "https://static.nanoka.cc/manifest.json and https://static.nanoka.cc/zzz/{sourceVersion}/{locale}/{entityType}/{id}.json",
|
|
362
|
+
"rawFieldPaths": [
|
|
363
|
+
"/zzz/live",
|
|
364
|
+
"/zzz/latest",
|
|
365
|
+
"/zzz/available"
|
|
366
|
+
],
|
|
367
|
+
"transformRule": "derive SourceDocument rows from source registry entries: sourceVersion=configuredLiveVersion and fetchedAt from registry; contentHash, liveVersionRef, approvedLiveVersions[], and URL allowlist remain in data/source-registry.json and are verified by CI",
|
|
368
|
+
"sampleEntity": "nanoka-manifest",
|
|
369
|
+
"rawAvailable": true,
|
|
370
|
+
"promotable": true,
|
|
371
|
+
"blockedBy": [],
|
|
372
|
+
"notes": "Task #148 closes the source-registry contract: data/source-registry.json and package mirror are byte-identical, contentHash is sha256-prefixed, configuredLiveVersion is approved, and verify:source-registry gates the live-version policy."
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"fieldId": "metadata.sourceRefs",
|
|
376
|
+
"canonicalPath": "SourceRef.sourceId/sourceAnchor/sourceVersion/dataPath",
|
|
377
|
+
"fieldClass": "required",
|
|
378
|
+
"sourcePolicy": "derived-from-source-registry",
|
|
379
|
+
"status": "verified-from-nanoka",
|
|
380
|
+
"nanokaEndpoint": "all promoted nanoka rows",
|
|
381
|
+
"rawFieldPaths": [
|
|
382
|
+
"/assets/*/url",
|
|
383
|
+
"/assets/*/localPath",
|
|
384
|
+
"/assets/*/sourceVersion",
|
|
385
|
+
"/assets/*/sha256"
|
|
386
|
+
],
|
|
387
|
+
"transformRule": "derive SourceRef anchors from parsed adapter metadata records: sourceId/sourceVersion from ParsedSourceBatch, sourceAnchor=asset.url, dataPath=retained raw fixture path; content hashes and liveVersionRef resolve through source-registry/source-manifest by sourceId and retained path",
|
|
388
|
+
"sampleEntity": "nanoka-bangboo-plugboo-live-54008",
|
|
389
|
+
"rawAvailable": true,
|
|
390
|
+
"promotable": true,
|
|
391
|
+
"blockedBy": [],
|
|
392
|
+
"notes": "Task #148 adds buildSourceRefsForParsedBatch() and fail-loud tests requiring sourceAnchor and dataPath for every retained nanoka metadata record. This promotes the metadata contract only; runtime cleaned-data cutover remains blocked by row-specific gates."
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"fieldId": "metadata.snapshotDiffHistory",
|
|
396
|
+
"canonicalPath": "planned GameData.sources[].snapshotDiffHistory / package audit metadata",
|
|
397
|
+
"fieldClass": "derived",
|
|
398
|
+
"sourcePolicy": "derived-from-source-registry",
|
|
399
|
+
"status": "verified-from-nanoka",
|
|
400
|
+
"nanokaEndpoint": "https://static.nanoka.cc/manifest.json and approved versioned nanoka snapshots",
|
|
401
|
+
"rawFieldPaths": [
|
|
402
|
+
"/zzz/available",
|
|
403
|
+
"/zzz/live",
|
|
404
|
+
"/zzz/latest"
|
|
405
|
+
],
|
|
406
|
+
"transformRule": "R4.a: derive numeric patch history by diffing approved-live snapshot hashes and raw JSON numeric paths; latest/pre-release snapshots are research-only unless lo-user approves them",
|
|
407
|
+
"sampleEntity": "nanoka-manifest",
|
|
408
|
+
"rawAvailable": true,
|
|
409
|
+
"promotable": true,
|
|
410
|
+
"blockedBy": [
|
|
411
|
+
"field:additional-approved-live-version-required-for-non-empty-history"
|
|
412
|
+
],
|
|
413
|
+
"notes": "No dedicated patch-note/changelog prose endpoint was found in PR #54. This row represents snapshot-derived numeric diff history only; officialPatchNoteText stays not-found and prose changelog is not fabricated.",
|
|
414
|
+
"auditArtifact": "data/cleaned/audit/nanoka-snapshot-diff-history.json"
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
"fieldId": "metadata.aliases",
|
|
418
|
+
"canonicalPath": "GameData.aliases",
|
|
419
|
+
"fieldClass": "required",
|
|
420
|
+
"sourcePolicy": "implementation-owned",
|
|
421
|
+
"status": "deferred",
|
|
422
|
+
"nanokaEndpoint": null,
|
|
423
|
+
"rawFieldPaths": [],
|
|
424
|
+
"transformRule": "derive from D-11 naming policy and source-term mapping",
|
|
425
|
+
"sampleEntity": null,
|
|
426
|
+
"rawAvailable": false,
|
|
427
|
+
"promotable": false,
|
|
428
|
+
"blockedBy": [
|
|
429
|
+
"implementation-owned-not-nanoka-row"
|
|
430
|
+
]
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"fieldId": "agents.identity",
|
|
434
|
+
"canonicalPath": "GameData.agents.*.id,label,source,sourceAliases",
|
|
435
|
+
"fieldClass": "required",
|
|
436
|
+
"sourcePolicy": "nanoka",
|
|
437
|
+
"status": "verified-from-nanoka",
|
|
438
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
439
|
+
"rawFieldPaths": [
|
|
440
|
+
"/id",
|
|
441
|
+
"/code_name",
|
|
442
|
+
"/name",
|
|
443
|
+
"/icon",
|
|
444
|
+
"/skin"
|
|
445
|
+
],
|
|
446
|
+
"transformRule": "map id/code_name/name from the approved live character detail into stable agent id and LocalizedLabel; current schema accepts zh/en labels",
|
|
447
|
+
"sampleEntity": "nanoka-character-nekomata-live-1021",
|
|
448
|
+
"rawAvailable": true,
|
|
449
|
+
"promotable": true,
|
|
450
|
+
"blockedBy": []
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
"fieldId": "agents.enums",
|
|
454
|
+
"canonicalPath": "GameData.agents.*.attribute,agentSpecialty",
|
|
455
|
+
"fieldClass": "required",
|
|
456
|
+
"sourcePolicy": "nanoka",
|
|
457
|
+
"status": "verified-from-nanoka",
|
|
458
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
459
|
+
"rawFieldPaths": [
|
|
460
|
+
"/element_type",
|
|
461
|
+
"/special_element_type",
|
|
462
|
+
"/weapon_type",
|
|
463
|
+
"/camp",
|
|
464
|
+
"/hit_type"
|
|
465
|
+
],
|
|
466
|
+
"transformRule": "map approved-live source enum ids to fairy Attribute and AgentSpecialty enum values through aliases",
|
|
467
|
+
"sampleEntity": "nanoka-character-nekomata-live-1021",
|
|
468
|
+
"rawAvailable": true,
|
|
469
|
+
"promotable": true,
|
|
470
|
+
"blockedBy": []
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
"fieldId": "agents.basePanel",
|
|
474
|
+
"canonicalPath": "GameData.agents.*.baseStatsByLevel",
|
|
475
|
+
"fieldClass": "derived",
|
|
476
|
+
"sourcePolicy": "nanoka",
|
|
477
|
+
"status": "verified-from-nanoka",
|
|
478
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
479
|
+
"rawFieldPaths": [
|
|
480
|
+
"/stats/hp_max",
|
|
481
|
+
"/stats/hp_growth",
|
|
482
|
+
"/stats/attack",
|
|
483
|
+
"/stats/attack_growth",
|
|
484
|
+
"/stats/defence",
|
|
485
|
+
"/stats/defence_growth",
|
|
486
|
+
"/level/*"
|
|
487
|
+
],
|
|
488
|
+
"transformRule": "derive base panel as stats[key] + level[promotionPhase][key] + stats[key_growth] * (level - 1) / 10000; retained live Nekomata level-60 panel sample is covered by nanoka-panel tests",
|
|
489
|
+
"sampleEntity": "nanoka-character-nekomata-live-1021",
|
|
490
|
+
"rawAvailable": true,
|
|
491
|
+
"promotable": true,
|
|
492
|
+
"blockedBy": [],
|
|
493
|
+
"notes": "This promotes GameData baseStatsByLevel only. Snapshot final panel and promotion extra stats remain separate rows."
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"fieldId": "agents.promotionExtraStats",
|
|
497
|
+
"canonicalPath": "GameData.agents.*.baseStatsByLevel extras / AgentSnapshot.panel final extras",
|
|
498
|
+
"fieldClass": "derived",
|
|
499
|
+
"sourcePolicy": "nanoka",
|
|
500
|
+
"status": "verified-from-nanoka",
|
|
501
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
502
|
+
"rawFieldPaths": [
|
|
503
|
+
"/id",
|
|
504
|
+
"/extra_level/*/max_level",
|
|
505
|
+
"/extra_level/*/extra/*/prop",
|
|
506
|
+
"/extra_level/*/extra/*/name",
|
|
507
|
+
"/extra_level/*/extra/*/value"
|
|
508
|
+
],
|
|
509
|
+
"transformRule": "derive structured promotion-extra runtime data from approved live character detail where /id matches the requested agent id; map prop 11101 -> maxHp raw, 12101 -> attack raw, and 20101 -> critRate basis-points / 10000. Phase 3 drift rulings and Phase 4 cutover clear the runtime gate; final AgentSnapshot.panel remains user-provided unless an explicit cleaned-data loader consumes this row.",
|
|
510
|
+
"sampleEntity": "nanoka-character-nekomata-live-1021",
|
|
511
|
+
"rawAvailable": true,
|
|
512
|
+
"promotable": true,
|
|
513
|
+
"blockedBy": [],
|
|
514
|
+
"notes": "Task #150 promotes promotion extra stats as structured source evidence. Live Nekomata and Yixuan samples prove deterministic unit mapping; Phase 3 rulings plus Phase 4 cutover allow runtime cleaned data to consume approved-live nanoka rows while final user snapshot panel values remain user-provided.",
|
|
515
|
+
"supportingSampleEntities": [
|
|
516
|
+
"nanoka-character-nekomata-live-1021",
|
|
517
|
+
"nanoka-character-yixuan-live-1371"
|
|
518
|
+
]
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
"fieldId": "agents.combatPanelStats",
|
|
522
|
+
"canonicalPath": "AgentSnapshot.panel crit/pen/anomaly/impact/energy/adrenaline/sheer fields",
|
|
523
|
+
"fieldClass": "required",
|
|
524
|
+
"sourcePolicy": "nanoka",
|
|
525
|
+
"status": "verified-from-nanoka",
|
|
526
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
527
|
+
"rawFieldPaths": [
|
|
528
|
+
"/stats/crit",
|
|
529
|
+
"/stats/crit_damage",
|
|
530
|
+
"/stats/pen_delta",
|
|
531
|
+
"/stats/pen_rate",
|
|
532
|
+
"/stats/element_abnormal_power",
|
|
533
|
+
"/stats/element_mystery",
|
|
534
|
+
"/stats/break_stun",
|
|
535
|
+
"/stats/sp_recover",
|
|
536
|
+
"/stats/rp_max",
|
|
537
|
+
"/stats/rp_recover"
|
|
538
|
+
],
|
|
539
|
+
"transformRule": "raw stat fields exist; map source integer units to snapshot panel decimals before promotion",
|
|
540
|
+
"sampleEntity": "nanoka-character-yixuan-1371",
|
|
541
|
+
"rawAvailable": true,
|
|
542
|
+
"promotable": false,
|
|
543
|
+
"blockedBy": [
|
|
544
|
+
"field:stat-unit-mapping-required"
|
|
545
|
+
]
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
"fieldId": "agents.ruptureStats",
|
|
549
|
+
"canonicalPath": "AgentSnapshot.panel.sheerForce/sheerDamageBonus and rupture rule inputs",
|
|
550
|
+
"fieldClass": "required",
|
|
551
|
+
"sourcePolicy": "nanoka",
|
|
552
|
+
"status": "verified-from-nanoka",
|
|
553
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
554
|
+
"rawFieldPaths": [
|
|
555
|
+
"/stats/rbl",
|
|
556
|
+
"/stats/rbl_correction_factor",
|
|
557
|
+
"/stats/rbl_probability"
|
|
558
|
+
],
|
|
559
|
+
"transformRule": "raw rbl fields exist; validate semantic mapping from rbl/rbl_correction_factor/rbl_probability to fairy rupture coefficients",
|
|
560
|
+
"sampleEntity": "nanoka-character-yixuan-1371",
|
|
561
|
+
"rawAvailable": true,
|
|
562
|
+
"promotable": false,
|
|
563
|
+
"blockedBy": [
|
|
564
|
+
"field:rupture-semantic-mapping-required"
|
|
565
|
+
]
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"fieldId": "agents.skills.segmentNumbers",
|
|
569
|
+
"canonicalPath": "GameData.skills.*.segments.*.multiplierByLevel/dazeMultiplierByLevel and AttackSegment multipliers",
|
|
570
|
+
"fieldClass": "required",
|
|
571
|
+
"sourcePolicy": "nanoka",
|
|
572
|
+
"status": "verified-from-nanoka",
|
|
573
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
574
|
+
"rawFieldPaths": [
|
|
575
|
+
"/skill/*/description/*/param/*/param/{skillId}/damage_percentage",
|
|
576
|
+
"/skill/*/description/*/param/*/param/{skillId}/damage_percentage_growth",
|
|
577
|
+
"/skill/*/description/*/param/*/param/{skillId}/stun_ratio",
|
|
578
|
+
"/skill/*/description/*/param/*/param/{skillId}/stun_ratio_growth",
|
|
579
|
+
"/skill/*/description/*/param/*/param/{skillId}/attribute_infliction"
|
|
580
|
+
],
|
|
581
|
+
"transformRule": "divide approved-live percentage-like integer fields by 10000; derive per-level table from base plus growth after formula verification",
|
|
582
|
+
"sampleEntity": "nanoka-character-nekomata-live-1021",
|
|
583
|
+
"rawAvailable": true,
|
|
584
|
+
"promotable": true,
|
|
585
|
+
"blockedBy": []
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
"fieldId": "agents.skills.metadata",
|
|
589
|
+
"canonicalPath": "GameData.skills.*.tags,attribute,segments.*.damageType/hitCount/defaultTags",
|
|
590
|
+
"fieldClass": "required",
|
|
591
|
+
"sourcePolicy": "nanoka",
|
|
592
|
+
"status": "verified-from-nanoka",
|
|
593
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
594
|
+
"rawFieldPaths": [
|
|
595
|
+
"/skill_list/*/element_type",
|
|
596
|
+
"/skill_list/*/hit_type",
|
|
597
|
+
"/skill_list/*/name",
|
|
598
|
+
"/skill_list/*/desc"
|
|
599
|
+
],
|
|
600
|
+
"transformRule": "raw skill list element_type/hit_type/name/desc exists; map source enum ids to fairy attack tags, attributes, damage types, and hit groups before promotion",
|
|
601
|
+
"sampleEntity": "nanoka-character-yixuan-1371",
|
|
602
|
+
"rawAvailable": true,
|
|
603
|
+
"promotable": false,
|
|
604
|
+
"blockedBy": [
|
|
605
|
+
"field:skill-tag-mapping-required"
|
|
606
|
+
]
|
|
607
|
+
},
|
|
608
|
+
{
|
|
609
|
+
"fieldId": "agents.mindscapeAndPotential",
|
|
610
|
+
"canonicalPath": "GameData.agents.*.mindscapeCinema/potentialActivation",
|
|
611
|
+
"fieldClass": "optional",
|
|
612
|
+
"sourcePolicy": "nanoka",
|
|
613
|
+
"status": "verified-from-nanoka",
|
|
614
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
615
|
+
"rawFieldPaths": [
|
|
616
|
+
"/talent",
|
|
617
|
+
"/potential",
|
|
618
|
+
"/potential_detail",
|
|
619
|
+
"/extra_level"
|
|
620
|
+
],
|
|
621
|
+
"transformRule": "talent appears to carry Mindscape-like six-level raw text; potential/potential_detail appears for some agents and must be mapped separately to potentialActivation; extra_level remains promotion extra stats, not Mindscape",
|
|
622
|
+
"sampleEntity": "nanoka-character-soldier11-1041",
|
|
623
|
+
"supportingSamples": [
|
|
624
|
+
"nanoka-character-nekomata-1021"
|
|
625
|
+
],
|
|
626
|
+
"rawAvailable": true,
|
|
627
|
+
"promotable": false,
|
|
628
|
+
"blockedBy": [
|
|
629
|
+
"field:mindscape-potential-semantic-mapping-required"
|
|
630
|
+
]
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
"fieldId": "agents.passiveModifiers",
|
|
634
|
+
"canonicalPath": "GameData.agents.*.corePassiveModifiers",
|
|
635
|
+
"fieldClass": "optional",
|
|
636
|
+
"sourcePolicy": "nanoka",
|
|
637
|
+
"status": "verified-from-nanoka",
|
|
638
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
639
|
+
"rawFieldPaths": [
|
|
640
|
+
"/passive",
|
|
641
|
+
"/talent",
|
|
642
|
+
"/skill/*/description/*/desc"
|
|
643
|
+
],
|
|
644
|
+
"transformRule": "passive/talent/skill text exists; formal corePassiveModifiers require deterministic typed modifier templates before promotion",
|
|
645
|
+
"sampleEntity": "nanoka-character-nicole-live-1031",
|
|
646
|
+
"rawAvailable": true,
|
|
647
|
+
"promotable": false,
|
|
648
|
+
"blockedBy": [
|
|
649
|
+
"typed-modifier-template-required"
|
|
650
|
+
],
|
|
651
|
+
"supportingSampleEntities": [
|
|
652
|
+
"nanoka-character-nicole-live-1031",
|
|
653
|
+
"nanoka-character-yanagi-live-1221",
|
|
654
|
+
"nanoka-character-yixuan-live-1371"
|
|
655
|
+
],
|
|
656
|
+
"notes": "Phase 3 Step 1 adds approved-live Nicole and Yanagi character detail samples for G22/G23 passive candidate coverage; typed modifier template remains unresolved before formal promotion."
|
|
657
|
+
},
|
|
658
|
+
{
|
|
659
|
+
"fieldId": "adrenaline.maxAdrenaline",
|
|
660
|
+
"canonicalPath": "GameData.agents.*.baseStatsByLevel.*.maxAdrenaline / AgentSnapshot.panel.maxAdrenaline",
|
|
661
|
+
"fieldClass": "required",
|
|
662
|
+
"sourcePolicy": "nanoka",
|
|
663
|
+
"status": "verified-from-nanoka",
|
|
664
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
665
|
+
"rawFieldPaths": [
|
|
666
|
+
"/stats/rp_max"
|
|
667
|
+
],
|
|
668
|
+
"transformRule": "canonical naming lock: nanoka stats.rp_max is Adrenaline cap points; promote as maxAdrenaline with identity transform (live Yixuan 120 -> 120)",
|
|
669
|
+
"sampleEntity": "nanoka-character-yixuan-live-1371",
|
|
670
|
+
"rawAvailable": true,
|
|
671
|
+
"promotable": true
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
"fieldId": "adrenaline.automaticAdrenalineAccumulation",
|
|
675
|
+
"canonicalPath": "GameData.agents.*.baseStatsByLevel.*.automaticAdrenalineAccumulation / AgentSnapshot.panel.automaticAdrenalineAccumulation",
|
|
676
|
+
"fieldClass": "required",
|
|
677
|
+
"sourcePolicy": "nanoka",
|
|
678
|
+
"status": "verified-from-nanoka",
|
|
679
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
680
|
+
"rawFieldPaths": [
|
|
681
|
+
"/stats/rp_recover"
|
|
682
|
+
],
|
|
683
|
+
"transformRule": "canonical naming + unit lock: nanoka stats.rp_recover / 100 = automaticAdrenalineAccumulation points per second (live Yixuan 200 -> 2)",
|
|
684
|
+
"sampleEntity": "nanoka-character-yixuan-live-1371",
|
|
685
|
+
"rawAvailable": true,
|
|
686
|
+
"promotable": true
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
"fieldId": "skills.resonanceRecovery",
|
|
690
|
+
"canonicalPath": "GameData.skills.*.segments[].resonanceRecoveryByLevel",
|
|
691
|
+
"fieldClass": "required",
|
|
692
|
+
"sourcePolicy": "nanoka",
|
|
693
|
+
"status": "verified-from-nanoka",
|
|
694
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
695
|
+
"rawFieldPaths": [
|
|
696
|
+
"/skill/*/description/*/param/*/param/*/fever_recovery",
|
|
697
|
+
"/skill/*/description/*/param/*/param/*/fever_recovery_growth"
|
|
698
|
+
],
|
|
699
|
+
"transformRule": "canonical naming + unit lock: nanoka fever_recovery / 1000 = base Resonance/Decibel recovery, fever_recovery_growth / 1000 = per-level growth (live Yixuan 71500 -> 71.5)",
|
|
700
|
+
"sampleEntity": "nanoka-character-yixuan-live-1371",
|
|
701
|
+
"rawAvailable": true,
|
|
702
|
+
"promotable": true
|
|
703
|
+
},
|
|
704
|
+
{
|
|
705
|
+
"fieldId": "skills.adrenalineRecovery",
|
|
706
|
+
"canonicalPath": "GameData.skills.*.segments[].adrenalineRecoveryByLevel",
|
|
707
|
+
"fieldClass": "required",
|
|
708
|
+
"sourcePolicy": "nanoka",
|
|
709
|
+
"status": "verified-from-nanoka",
|
|
710
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json",
|
|
711
|
+
"rawFieldPaths": [
|
|
712
|
+
"/skill/*/description/*/param/*/param/*/rp_recovery",
|
|
713
|
+
"/skill/*/description/*/param/*/param/*/rp_recovery_growth"
|
|
714
|
+
],
|
|
715
|
+
"transformRule": "canonical naming + unit lock: nanoka rp_recovery / 10000 = base Adrenaline recovery, rp_recovery_growth / 10000 = per-level growth (live Yixuan 5200 -> 0.52)",
|
|
716
|
+
"sampleEntity": "nanoka-character-yixuan-live-1371",
|
|
717
|
+
"rawAvailable": true,
|
|
718
|
+
"promotable": true
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"fieldId": "bangboos.identity",
|
|
722
|
+
"canonicalPath": "GameData.bangboos.*.id,label,source,skillIds,sourceAliases",
|
|
723
|
+
"fieldClass": "required",
|
|
724
|
+
"sourcePolicy": "nanoka",
|
|
725
|
+
"status": "verified-from-nanoka",
|
|
726
|
+
"nanokaEndpoint": "/{locale}/bangboo/{id}.json",
|
|
727
|
+
"rawFieldPaths": [
|
|
728
|
+
"/id",
|
|
729
|
+
"/code_name",
|
|
730
|
+
"/name",
|
|
731
|
+
"/icon",
|
|
732
|
+
"/skill"
|
|
733
|
+
],
|
|
734
|
+
"transformRule": "map id/code_name/name and skill keys to cleaned Bangboo row and skill ids",
|
|
735
|
+
"sampleEntity": "nanoka-bangboo-plugboo-live-54008",
|
|
736
|
+
"rawAvailable": true,
|
|
737
|
+
"promotable": true,
|
|
738
|
+
"blockedBy": []
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
"fieldId": "bangboos.basePanel",
|
|
742
|
+
"canonicalPath": "GameData.bangboos.*.baseStatsByLevel / BangbooSnapshot.panel",
|
|
743
|
+
"fieldClass": "derived",
|
|
744
|
+
"sourcePolicy": "nanoka",
|
|
745
|
+
"status": "verified-from-nanoka",
|
|
746
|
+
"nanokaEndpoint": "/{locale}/bangboo/{id}.json",
|
|
747
|
+
"rawFieldPaths": [
|
|
748
|
+
"/stats/attack",
|
|
749
|
+
"/stats/attack_upgrade",
|
|
750
|
+
"/stats/hp_max",
|
|
751
|
+
"/stats/hpupgrade",
|
|
752
|
+
"/stats/defence",
|
|
753
|
+
"/stats/def_upgrade",
|
|
754
|
+
"/stats/break_stun",
|
|
755
|
+
"/stats/element_abnormal_power",
|
|
756
|
+
"/level/*"
|
|
757
|
+
],
|
|
758
|
+
"transformRule": "derive Bangboo base panel as stats[key] + level[promotionPhase][key] + stats[key_upgrade] * (level - 1) / 10000; retained live Plugboo level-60 attack matches G26 shipped Excel value 8057.0996 and is covered by nanoka-panel tests",
|
|
759
|
+
"sampleEntity": "nanoka-bangboo-plugboo-live-54008",
|
|
760
|
+
"rawAvailable": true,
|
|
761
|
+
"promotable": true,
|
|
762
|
+
"blockedBy": [],
|
|
763
|
+
"supportingSampleEntities": [
|
|
764
|
+
"nanoka-bangboo-plugboo-live-54008",
|
|
765
|
+
"nanoka-bangboo-penguinboo-live-53001",
|
|
766
|
+
"nanoka-bangboo-sharkboo-live-54001"
|
|
767
|
+
],
|
|
768
|
+
"notes": "Phase 3 Step 1 adds approved-live Penguinboo and Sharkboo samples for G24/G25 candidate coverage."
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
"fieldId": "bangboos.skillSegments",
|
|
772
|
+
"canonicalPath": "GameData.bangbooSkills.*.segments.* multiplier/daze/anomaly",
|
|
773
|
+
"fieldClass": "required",
|
|
774
|
+
"sourcePolicy": "nanoka",
|
|
775
|
+
"status": "verified-from-nanoka",
|
|
776
|
+
"nanokaEndpoint": "/{locale}/bangboo/{id}.json",
|
|
777
|
+
"rawFieldPaths": [
|
|
778
|
+
"/skill_prop/{skillId}/1001/main",
|
|
779
|
+
"/skill_prop/{skillId}/1002/main",
|
|
780
|
+
"/skill_prop/{skillId}/element_accumulation_value"
|
|
781
|
+
],
|
|
782
|
+
"transformRule": "divide multiplier-like integer fields by 10000; divide buildup fields by 100 when mapping to current golden notation",
|
|
783
|
+
"sampleEntity": "nanoka-bangboo-plugboo-live-54008",
|
|
784
|
+
"rawAvailable": true,
|
|
785
|
+
"promotable": true,
|
|
786
|
+
"blockedBy": [],
|
|
787
|
+
"supportingSampleEntities": [
|
|
788
|
+
"nanoka-bangboo-plugboo-live-54008",
|
|
789
|
+
"nanoka-bangboo-penguinboo-live-53001",
|
|
790
|
+
"nanoka-bangboo-sharkboo-live-54001"
|
|
791
|
+
],
|
|
792
|
+
"notes": "Phase 3 Step 1 adds approved-live Penguinboo and Sharkboo samples for G24/G25 candidate coverage."
|
|
793
|
+
},
|
|
794
|
+
{
|
|
795
|
+
"fieldId": "bangboos.element",
|
|
796
|
+
"canonicalPath": "GameData.bangbooSkills.*.attribute / AttackSegment.attribute",
|
|
797
|
+
"fieldClass": "required",
|
|
798
|
+
"sourcePolicy": "nanoka",
|
|
799
|
+
"status": "verified-from-nanoka",
|
|
800
|
+
"nanokaEndpoint": "/{locale}/bangboo/{id}.json",
|
|
801
|
+
"rawFieldPaths": [
|
|
802
|
+
"/id",
|
|
803
|
+
"/skill/*/level/*/desc"
|
|
804
|
+
],
|
|
805
|
+
"transformRule": "derive Bangboo skill attribute from exact colored damage phrase in approved live skill descriptions; require source /id to match the requested Bangboo id and all matched damage-text evidence to resolve to one canonical Attribute. Do not parse team passive modifiers in this gate.",
|
|
806
|
+
"sampleEntity": "nanoka-bangboo-plugboo-live-54008",
|
|
807
|
+
"rawAvailable": true,
|
|
808
|
+
"promotable": true,
|
|
809
|
+
"blockedBy": [],
|
|
810
|
+
"notes": "Task #152 promotes Bangboo element as a structured source artifact from live Plugboo skill damage text. Plugboo active and chain skill descriptions both resolve to electric; passive/team-buff text remains deferred under bangboos.teamPassiveModifiers."
|
|
811
|
+
},
|
|
812
|
+
{
|
|
813
|
+
"fieldId": "bangboos.teamPassiveModifiers",
|
|
814
|
+
"canonicalPath": "GameData.modifiers or Bangboo passive modifiers",
|
|
815
|
+
"fieldClass": "deferred",
|
|
816
|
+
"sourcePolicy": "nanoka",
|
|
817
|
+
"status": "deferred",
|
|
818
|
+
"nanokaEndpoint": "/{locale}/bangboo/{id}.json",
|
|
819
|
+
"rawFieldPaths": [
|
|
820
|
+
"/skill"
|
|
821
|
+
],
|
|
822
|
+
"transformRule": "V1.1 Path X intentionally excludes Bangboo passive/team-buff modifiers until typed source templates are accepted",
|
|
823
|
+
"sampleEntity": "nanoka-bangboo-plugboo-54008",
|
|
824
|
+
"rawAvailable": true,
|
|
825
|
+
"promotable": false,
|
|
826
|
+
"blockedBy": [
|
|
827
|
+
"scope:v1.1-path-x-numeric-only",
|
|
828
|
+
"typed-modifier-template-required"
|
|
829
|
+
]
|
|
830
|
+
},
|
|
831
|
+
{
|
|
832
|
+
"fieldId": "enemies.identity",
|
|
833
|
+
"canonicalPath": "GameData.enemies.*.id,label,rank,sourceAliases",
|
|
834
|
+
"fieldClass": "required",
|
|
835
|
+
"sourcePolicy": "nanoka",
|
|
836
|
+
"status": "verified-from-nanoka",
|
|
837
|
+
"nanokaEndpoint": "/{locale}/monster/{id}.json",
|
|
838
|
+
"rawFieldPaths": [
|
|
839
|
+
"/id",
|
|
840
|
+
"/monster_id",
|
|
841
|
+
"/name",
|
|
842
|
+
"/group_id",
|
|
843
|
+
"/monster_info/*/type",
|
|
844
|
+
"/monster_info/*/tag"
|
|
845
|
+
],
|
|
846
|
+
"transformRule": "map live monster detail identity fields to cleaned enemy ids and rank after selected monster_info variant mapping; full catalog promotion waits for enemy catalog scope lock",
|
|
847
|
+
"sampleEntity": "nanoka-monster-dullahan-live-30000",
|
|
848
|
+
"rawAvailable": true,
|
|
849
|
+
"promotable": false,
|
|
850
|
+
"blockedBy": [
|
|
851
|
+
"field:full-enemy-catalog-required"
|
|
852
|
+
],
|
|
853
|
+
"supportingSampleEntities": [
|
|
854
|
+
"nanoka-monster-dullahan-live-30000",
|
|
855
|
+
"nanoka-monster-greta-live-30004",
|
|
856
|
+
"nanoka-monster-ruthless-fiend-live-200141",
|
|
857
|
+
"nanoka-monster-notorious-hati-live-200014",
|
|
858
|
+
"nanoka-monster-notorious-armored-hati-live-200034",
|
|
859
|
+
"nanoka-monster-miasma-priest-live-30033",
|
|
860
|
+
"nanoka-monster-notorious-pompey-live-300211"
|
|
861
|
+
]
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
"fieldId": "enemies.variantMapping",
|
|
865
|
+
"canonicalPath": "GameData.enemies.* and golden enemy ids",
|
|
866
|
+
"fieldClass": "required",
|
|
867
|
+
"sourcePolicy": "nanoka",
|
|
868
|
+
"status": "verified-from-nanoka",
|
|
869
|
+
"nanokaEndpoint": "/{locale}/monster/{id}.json",
|
|
870
|
+
"rawFieldPaths": [
|
|
871
|
+
"/id",
|
|
872
|
+
"/name",
|
|
873
|
+
"/monster_id",
|
|
874
|
+
"/monster_info/{monster_id}",
|
|
875
|
+
"/monster_info/{monster_id}/code_name",
|
|
876
|
+
"/monster_info/{monster_id}/tag",
|
|
877
|
+
"/monster_info/{monster_id}/stats"
|
|
878
|
+
],
|
|
879
|
+
"transformRule": "select detail.monster_id, require monster_info[monster_id], and map approved live samples to fairy cleaned enemy ids and G13/G18/G19/G20 golden rows. Phase 3 drift rulings and Phase 4 cutover clear the runtime gate.",
|
|
880
|
+
"sampleEntity": "nanoka-monster-dullahan-live-30000",
|
|
881
|
+
"rawAvailable": true,
|
|
882
|
+
"promotable": true,
|
|
883
|
+
"blockedBy": [],
|
|
884
|
+
"supportingSampleEntities": [
|
|
885
|
+
"nanoka-monster-dullahan-live-30000",
|
|
886
|
+
"nanoka-monster-greta-live-30004",
|
|
887
|
+
"nanoka-monster-ruthless-fiend-live-200141",
|
|
888
|
+
"nanoka-monster-notorious-hati-live-200014",
|
|
889
|
+
"nanoka-monster-notorious-armored-hati-live-200034",
|
|
890
|
+
"nanoka-monster-miasma-priest-live-30033",
|
|
891
|
+
"nanoka-monster-notorious-pompey-live-300211"
|
|
892
|
+
]
|
|
893
|
+
},
|
|
894
|
+
{
|
|
895
|
+
"fieldId": "enemies.levelDefaults",
|
|
896
|
+
"canonicalPath": "GameData.enemies.*.levelDefaults / EnemySnapshot maxHp,defense,baseDaze,dazeCap",
|
|
897
|
+
"fieldClass": "required",
|
|
898
|
+
"sourcePolicy": "nanoka",
|
|
899
|
+
"status": "verified-from-nanoka",
|
|
900
|
+
"nanokaEndpoint": "/{locale}/monster/{id}.json",
|
|
901
|
+
"rawFieldPaths": [
|
|
902
|
+
"/monster_info/*/stats/hp",
|
|
903
|
+
"/monster_info/*/stats/defence",
|
|
904
|
+
"/monster_info/*/stats/stun",
|
|
905
|
+
"/monster_info/*/curves"
|
|
906
|
+
],
|
|
907
|
+
"transformRule": "monster_info stats and curves exist for mapped live variants; derive level-specific enemy stats after level formula validation",
|
|
908
|
+
"sampleEntity": "nanoka-monster-dullahan-live-30000",
|
|
909
|
+
"rawAvailable": true,
|
|
910
|
+
"promotable": false,
|
|
911
|
+
"blockedBy": [
|
|
912
|
+
"field:enemy-level-formula-required"
|
|
913
|
+
],
|
|
914
|
+
"supportingSampleEntities": [
|
|
915
|
+
"nanoka-monster-dullahan-live-30000",
|
|
916
|
+
"nanoka-monster-greta-live-30004",
|
|
917
|
+
"nanoka-monster-ruthless-fiend-live-200141",
|
|
918
|
+
"nanoka-monster-notorious-hati-live-200014",
|
|
919
|
+
"nanoka-monster-notorious-armored-hati-live-200034",
|
|
920
|
+
"nanoka-monster-miasma-priest-live-30033",
|
|
921
|
+
"nanoka-monster-notorious-pompey-live-300211"
|
|
922
|
+
]
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
"fieldId": "enemies.resistance",
|
|
926
|
+
"canonicalPath": "GameData.enemies.*.resistance / EnemySnapshot.resistance",
|
|
927
|
+
"fieldClass": "required",
|
|
928
|
+
"sourcePolicy": "nanoka",
|
|
929
|
+
"status": "verified-from-nanoka",
|
|
930
|
+
"nanokaEndpoint": "/{locale}/monster/{id}.json",
|
|
931
|
+
"rawFieldPaths": [
|
|
932
|
+
"/monster_info/*/stats/fire_damage_res",
|
|
933
|
+
"/monster_info/*/stats/ice_damage_res",
|
|
934
|
+
"/monster_info/*/stats/electric_damage_res",
|
|
935
|
+
"/monster_info/*/stats/ether_damage_res",
|
|
936
|
+
"/monster_info/*/stats/physical_damage_res"
|
|
937
|
+
],
|
|
938
|
+
"transformRule": "damage/stun/buildup resistance fields exist for mapped live variants; map source integer units to fairy resistance decimals after unit mapping",
|
|
939
|
+
"sampleEntity": "nanoka-monster-dullahan-live-30000",
|
|
940
|
+
"rawAvailable": true,
|
|
941
|
+
"promotable": false,
|
|
942
|
+
"blockedBy": [
|
|
943
|
+
"field:resistance-unit-mapping-required"
|
|
944
|
+
],
|
|
945
|
+
"supportingSampleEntities": [
|
|
946
|
+
"nanoka-monster-dullahan-live-30000",
|
|
947
|
+
"nanoka-monster-greta-live-30004",
|
|
948
|
+
"nanoka-monster-ruthless-fiend-live-200141",
|
|
949
|
+
"nanoka-monster-notorious-hati-live-200014",
|
|
950
|
+
"nanoka-monster-notorious-armored-hati-live-200034",
|
|
951
|
+
"nanoka-monster-miasma-priest-live-30033",
|
|
952
|
+
"nanoka-monster-notorious-pompey-live-300211"
|
|
953
|
+
]
|
|
954
|
+
},
|
|
955
|
+
{
|
|
956
|
+
"fieldId": "enemies.anomalyThresholds",
|
|
957
|
+
"canonicalPath": "EnemySnapshot.anomalyThresholdModifiers / GameData.rules.anomalyThreshold",
|
|
958
|
+
"fieldClass": "required",
|
|
959
|
+
"sourcePolicy": "nanoka",
|
|
960
|
+
"status": "verified-from-nanoka",
|
|
961
|
+
"nanokaEndpoint": "/{locale}/monster/{id}.json",
|
|
962
|
+
"rawFieldPaths": [
|
|
963
|
+
"/element_abnormal",
|
|
964
|
+
"/monster_info/*/stats/base_buildup_ratio",
|
|
965
|
+
"/monster_info/*/stats/*_buildup_res",
|
|
966
|
+
"/monster_info/*/stats/*_buildup_curve"
|
|
967
|
+
],
|
|
968
|
+
"transformRule": "element_abnormal, base_buildup_ratio, buildup_res, and buildup_curve fields exist for mapped live variants; threshold/composition semantics remain blocked",
|
|
969
|
+
"sampleEntity": "nanoka-monster-dullahan-live-30000",
|
|
970
|
+
"rawAvailable": true,
|
|
971
|
+
"promotable": false,
|
|
972
|
+
"blockedBy": [
|
|
973
|
+
"field:anomaly-threshold-mapping-required"
|
|
974
|
+
],
|
|
975
|
+
"supportingSampleEntities": [
|
|
976
|
+
"nanoka-monster-dullahan-live-30000",
|
|
977
|
+
"nanoka-monster-greta-live-30004",
|
|
978
|
+
"nanoka-monster-ruthless-fiend-live-200141",
|
|
979
|
+
"nanoka-monster-notorious-hati-live-200014",
|
|
980
|
+
"nanoka-monster-notorious-armored-hati-live-200034",
|
|
981
|
+
"nanoka-monster-miasma-priest-live-30033",
|
|
982
|
+
"nanoka-monster-notorious-pompey-live-300211"
|
|
983
|
+
]
|
|
984
|
+
},
|
|
985
|
+
{
|
|
986
|
+
"fieldId": "enemies.dazeRecovery",
|
|
987
|
+
"canonicalPath": "GameData.enemies.*.dazeRecovery / EnemySnapshot.dazeRecoveryRate",
|
|
988
|
+
"fieldClass": "required",
|
|
989
|
+
"sourcePolicy": "nanoka",
|
|
990
|
+
"status": "verified-from-nanoka",
|
|
991
|
+
"nanokaEndpoint": "/{locale}/monster/{id}.json",
|
|
992
|
+
"rawFieldPaths": [
|
|
993
|
+
"/monster_info/*/stats/auto_recover_rate",
|
|
994
|
+
"/monster_info/*/stats/auto_recover_cd",
|
|
995
|
+
"/monster_info/*/stats/stun_reset_recover_cd",
|
|
996
|
+
"/monster_info/*/stats/stun_value_full_recover_cd",
|
|
997
|
+
"/monster_info/*/stats/destroy_recover_rate",
|
|
998
|
+
"/monster_info/*/stats/destroy_recover_cd"
|
|
999
|
+
],
|
|
1000
|
+
"transformRule": "auto_recover and stun recovery fields exist for mapped live variants; map source recovery units into fairy dazeRecoveryRate/time semantics after semantic mapping",
|
|
1001
|
+
"sampleEntity": "nanoka-monster-dullahan-live-30000",
|
|
1002
|
+
"rawAvailable": true,
|
|
1003
|
+
"promotable": false,
|
|
1004
|
+
"blockedBy": [
|
|
1005
|
+
"field:daze-recovery-semantic-mapping-required"
|
|
1006
|
+
],
|
|
1007
|
+
"supportingSampleEntities": [
|
|
1008
|
+
"nanoka-monster-dullahan-live-30000",
|
|
1009
|
+
"nanoka-monster-greta-live-30004",
|
|
1010
|
+
"nanoka-monster-ruthless-fiend-live-200141",
|
|
1011
|
+
"nanoka-monster-notorious-hati-live-200014",
|
|
1012
|
+
"nanoka-monster-notorious-armored-hati-live-200034",
|
|
1013
|
+
"nanoka-monster-miasma-priest-live-30033",
|
|
1014
|
+
"nanoka-monster-notorious-pompey-live-300211"
|
|
1015
|
+
]
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
"fieldId": "enemies.specialRules",
|
|
1019
|
+
"canonicalPath": "GameData.enemies.*.specialRules",
|
|
1020
|
+
"fieldClass": "optional",
|
|
1021
|
+
"sourcePolicy": "nanoka",
|
|
1022
|
+
"status": "verified-from-nanoka",
|
|
1023
|
+
"nanokaEndpoint": "/{locale}/monster/{id}.json",
|
|
1024
|
+
"rawFieldPaths": [
|
|
1025
|
+
"/desc",
|
|
1026
|
+
"/card_skill_desc",
|
|
1027
|
+
"/group_desc",
|
|
1028
|
+
"/monster_info/*/tag"
|
|
1029
|
+
],
|
|
1030
|
+
"transformRule": "enemy description, card skill text, group description, and tags exist; formal specialRules require deterministic typed modifier templates before promotion",
|
|
1031
|
+
"sampleEntity": "nanoka-monster-dullahan-live-30000",
|
|
1032
|
+
"rawAvailable": true,
|
|
1033
|
+
"promotable": false,
|
|
1034
|
+
"blockedBy": [
|
|
1035
|
+
"typed-modifier-template-required"
|
|
1036
|
+
],
|
|
1037
|
+
"supportingSampleEntities": [
|
|
1038
|
+
"nanoka-monster-dullahan-live-30000",
|
|
1039
|
+
"nanoka-monster-greta-live-30004",
|
|
1040
|
+
"nanoka-monster-ruthless-fiend-live-200141",
|
|
1041
|
+
"nanoka-monster-notorious-hati-live-200014",
|
|
1042
|
+
"nanoka-monster-notorious-armored-hati-live-200034",
|
|
1043
|
+
"nanoka-monster-miasma-priest-live-30033",
|
|
1044
|
+
"nanoka-monster-notorious-pompey-live-300211"
|
|
1045
|
+
]
|
|
1046
|
+
},
|
|
1047
|
+
{
|
|
1048
|
+
"fieldId": "wEngines.identity",
|
|
1049
|
+
"canonicalPath": "GameData.wEngines.*.id,label,source,sourceAliases",
|
|
1050
|
+
"fieldClass": "optional",
|
|
1051
|
+
"sourcePolicy": "nanoka",
|
|
1052
|
+
"status": "verified-from-nanoka",
|
|
1053
|
+
"nanokaEndpoint": "/{locale}/weapon/{id}.json",
|
|
1054
|
+
"rawFieldPaths": [
|
|
1055
|
+
"/id",
|
|
1056
|
+
"/code_name",
|
|
1057
|
+
"/name",
|
|
1058
|
+
"/icon",
|
|
1059
|
+
"/weapon_type"
|
|
1060
|
+
],
|
|
1061
|
+
"transformRule": "map weapon detail rows to W-Engine identity and compatible source aliases",
|
|
1062
|
+
"sampleEntity": "nanoka-weapon-yixuan-signature-live-14137",
|
|
1063
|
+
"rawAvailable": true,
|
|
1064
|
+
"promotable": true,
|
|
1065
|
+
"blockedBy": []
|
|
1066
|
+
},
|
|
1067
|
+
{
|
|
1068
|
+
"fieldId": "wEngines.baseStats",
|
|
1069
|
+
"canonicalPath": "GameData.wEngines.*.baseStatsByLevel / WEngineSnapshot",
|
|
1070
|
+
"fieldClass": "optional",
|
|
1071
|
+
"sourcePolicy": "nanoka",
|
|
1072
|
+
"status": "verified-from-nanoka",
|
|
1073
|
+
"nanokaEndpoint": "/{locale}/weapon/{id}.json",
|
|
1074
|
+
"rawFieldPaths": [
|
|
1075
|
+
"/base_property",
|
|
1076
|
+
"/rand_property",
|
|
1077
|
+
"/level/*",
|
|
1078
|
+
"/stars/*"
|
|
1079
|
+
],
|
|
1080
|
+
"transformRule": "weapon detail exposes base_property, rand_property, level, and stars; map property ids/formats and level/star formulas before promotion",
|
|
1081
|
+
"sampleEntity": "nanoka-weapon-yixuan-signature-14137",
|
|
1082
|
+
"rawAvailable": true,
|
|
1083
|
+
"promotable": false,
|
|
1084
|
+
"blockedBy": [
|
|
1085
|
+
"field:w-engine-stat-mapping-required"
|
|
1086
|
+
]
|
|
1087
|
+
},
|
|
1088
|
+
{
|
|
1089
|
+
"fieldId": "wEngines.passiveModifiers",
|
|
1090
|
+
"canonicalPath": "GameData.wEngines.*.passiveModifiers",
|
|
1091
|
+
"fieldClass": "optional",
|
|
1092
|
+
"sourcePolicy": "nanoka",
|
|
1093
|
+
"status": "verified-from-nanoka",
|
|
1094
|
+
"nanokaEndpoint": "/{locale}/weapon/{id}.json",
|
|
1095
|
+
"rawFieldPaths": [
|
|
1096
|
+
"/talents",
|
|
1097
|
+
"/desc2",
|
|
1098
|
+
"/desc3"
|
|
1099
|
+
],
|
|
1100
|
+
"transformRule": "weapon detail exposes talents for five refine levels and desc text; formal passiveModifiers require deterministic typed modifier templates before promotion",
|
|
1101
|
+
"sampleEntity": "nanoka-weapon-yixuan-signature-14137",
|
|
1102
|
+
"rawAvailable": true,
|
|
1103
|
+
"promotable": false,
|
|
1104
|
+
"blockedBy": [
|
|
1105
|
+
"typed-modifier-template-required"
|
|
1106
|
+
]
|
|
1107
|
+
},
|
|
1108
|
+
{
|
|
1109
|
+
"fieldId": "driveDiscs.identity",
|
|
1110
|
+
"canonicalPath": "GameData.driveDiscs.*.id,label,source,sourceAliases",
|
|
1111
|
+
"fieldClass": "optional",
|
|
1112
|
+
"sourcePolicy": "nanoka",
|
|
1113
|
+
"status": "verified-from-nanoka",
|
|
1114
|
+
"nanokaEndpoint": "/{locale}/equipment/{id}.json",
|
|
1115
|
+
"rawFieldPaths": [
|
|
1116
|
+
"/id",
|
|
1117
|
+
"/name",
|
|
1118
|
+
"/icon",
|
|
1119
|
+
"/icon2"
|
|
1120
|
+
],
|
|
1121
|
+
"transformRule": "map equipment detail rows to Drive Disc identity",
|
|
1122
|
+
"sampleEntity": "nanoka-equipment-woodpecker-live-31000",
|
|
1123
|
+
"rawAvailable": true,
|
|
1124
|
+
"promotable": true,
|
|
1125
|
+
"blockedBy": []
|
|
1126
|
+
},
|
|
1127
|
+
{
|
|
1128
|
+
"fieldId": "driveDiscs.setModifiers",
|
|
1129
|
+
"canonicalPath": "GameData.driveDiscs.*.twoPieceModifiers/fourPieceModifiers",
|
|
1130
|
+
"fieldClass": "optional",
|
|
1131
|
+
"sourcePolicy": "nanoka",
|
|
1132
|
+
"status": "verified-from-nanoka",
|
|
1133
|
+
"nanokaEndpoint": "/{locale}/equipment/{id}.json",
|
|
1134
|
+
"rawFieldPaths": [
|
|
1135
|
+
"/desc2",
|
|
1136
|
+
"/desc4"
|
|
1137
|
+
],
|
|
1138
|
+
"transformRule": "equipment detail and top-level equipment list expose desc2/desc4 in zh/en/ja/ko; formal twoPieceModifiers/fourPieceModifiers require deterministic typed modifier templates before promotion",
|
|
1139
|
+
"sampleEntity": "nanoka-equipment-woodpecker-31000",
|
|
1140
|
+
"rawAvailable": true,
|
|
1141
|
+
"promotable": false,
|
|
1142
|
+
"blockedBy": [
|
|
1143
|
+
"typed-modifier-template-required"
|
|
1144
|
+
]
|
|
1145
|
+
},
|
|
1146
|
+
{
|
|
1147
|
+
"fieldId": "driveDiscs.slotAndSubstatTables",
|
|
1148
|
+
"canonicalPath": "DriveDiscSnapshot.slot/setId and future GameData drive disc stat tables",
|
|
1149
|
+
"fieldClass": "removed-out-of-product-scope",
|
|
1150
|
+
"sourcePolicy": "out-of-scope",
|
|
1151
|
+
"status": "deferred",
|
|
1152
|
+
"nanokaEndpoint": "/equipment.json and /{locale}/equipment/{id}.json for set identity/effect text; slot/main/substat tables are out of V0.1.0 formal-data scope",
|
|
1153
|
+
"rawFieldPaths": [
|
|
1154
|
+
"/equipment.json/{id}/{locale}/desc2",
|
|
1155
|
+
"/equipment.json/{id}/{locale}/desc4",
|
|
1156
|
+
"/id",
|
|
1157
|
+
"/name",
|
|
1158
|
+
"/desc2",
|
|
1159
|
+
"/desc4"
|
|
1160
|
+
],
|
|
1161
|
+
"transformRule": "Owner decision (2026-05-15) removes Drive Disc slot/main/substat tables from V0.1.0 formal-data scope because user snapshot input supplies the final Agent panel after main/substats. Fairy consumes Drive Disc set identity and set-effect text from nanoka; do not synthesize slot, main-stat, substat, level, or stat-roll tables, and do not reverse-engineer user panel values in runtime.",
|
|
1162
|
+
"sampleEntity": "nanoka-equipment-woodpecker-live-31000",
|
|
1163
|
+
"rawAvailable": false,
|
|
1164
|
+
"promotable": false,
|
|
1165
|
+
"blockedBy": [
|
|
1166
|
+
"scope:user-provided-snapshot-boundary"
|
|
1167
|
+
],
|
|
1168
|
+
"auditArtifact": "data/cleaned/audit/nanoka-drive-disc-slot-stat-audit.json",
|
|
1169
|
+
"notes": "Task #154 exhausted approved live nanoka equipment index/detail and candidate slot/stat-table endpoints. Lo-user decision on 2026-05-15 locks option (a): V0.1.0 only needs final user-provided panel plus Drive Disc set effects, so this row is excluded from Phase 3 blocking drift and deferred to V1.x validation/recommendation scope."
|
|
1170
|
+
},
|
|
1171
|
+
{
|
|
1172
|
+
"fieldId": "deadlyAssault.periodsBossesBuffs",
|
|
1173
|
+
"canonicalPath": "BattleContext gameMode=hollowZeroAssault / DA source artifacts",
|
|
1174
|
+
"fieldClass": "required",
|
|
1175
|
+
"sourcePolicy": "nanoka",
|
|
1176
|
+
"status": "verified-from-nanoka",
|
|
1177
|
+
"nanokaEndpoint": "/boss.json and /{locale}/boss/{id}.json",
|
|
1178
|
+
"rawFieldPaths": [
|
|
1179
|
+
"/begin_time",
|
|
1180
|
+
"/name",
|
|
1181
|
+
"/end_time",
|
|
1182
|
+
"/zone/*/name",
|
|
1183
|
+
"/zone/*/stage_num",
|
|
1184
|
+
"/zone/*/goal_type",
|
|
1185
|
+
"/zone/*/monster_level",
|
|
1186
|
+
"/zone/*/s_rank_goal",
|
|
1187
|
+
"/zone/*/a_rank_goal",
|
|
1188
|
+
"/zone/*/b_rank_goal",
|
|
1189
|
+
"/zone/*/layer_buff/*/title",
|
|
1190
|
+
"/zone/*/layer_buff/*/desc",
|
|
1191
|
+
"/zone/*/selectable_buff/*/title",
|
|
1192
|
+
"/zone/*/selectable_buff/*/desc",
|
|
1193
|
+
"/zone/*/layer_room/*/monster_list",
|
|
1194
|
+
"/zone/*/layer_room/*/waves_num",
|
|
1195
|
+
"/zone/*/layer_room/*/monster_weakness",
|
|
1196
|
+
"/boss_adjust/*"
|
|
1197
|
+
],
|
|
1198
|
+
"transformRule": "derive structured Deadly Assault period, zone, rank-goal, buff, room, monster, weakness, and boss-adjustment runtime data from the approved nanoka live version; reject period rows with begin_time after configuredLiveSnapshotDate. Phase 3 drift rulings and Phase 4 cutover clear the runtime gate.",
|
|
1199
|
+
"sampleEntity": "nanoka-boss-live-69036",
|
|
1200
|
+
"rawAvailable": true,
|
|
1201
|
+
"promotable": true,
|
|
1202
|
+
"blockedBy": [],
|
|
1203
|
+
"supportingSamples": [
|
|
1204
|
+
"nanoka-boss-live-index-2.8"
|
|
1205
|
+
],
|
|
1206
|
+
"notes": "R1/R6 lock DA to nanoka. This row is promotable as structured DA source artifact after task #142; D-17/D-12 remain archived audit baselines and the runtime path is retained until Phase 4 cutover."
|
|
1207
|
+
},
|
|
1208
|
+
{
|
|
1209
|
+
"fieldId": "modifiers.formalTemplateContract",
|
|
1210
|
+
"canonicalPath": "TypedModifier handlerId,bucket,params,appliesTo,when,source",
|
|
1211
|
+
"fieldClass": "required",
|
|
1212
|
+
"sourcePolicy": "implementation-owned",
|
|
1213
|
+
"status": "deferred",
|
|
1214
|
+
"nanokaEndpoint": null,
|
|
1215
|
+
"rawFieldPaths": [],
|
|
1216
|
+
"transformRule": "typed modifiers are deterministic fairy templates with source refs; natural-language text cannot promote directly",
|
|
1217
|
+
"sampleEntity": null,
|
|
1218
|
+
"rawAvailable": false,
|
|
1219
|
+
"promotable": false,
|
|
1220
|
+
"blockedBy": [
|
|
1221
|
+
"implementation-owned-template-registry-required"
|
|
1222
|
+
]
|
|
1223
|
+
},
|
|
1224
|
+
{
|
|
1225
|
+
"fieldId": "rules.baseDamageFormula",
|
|
1226
|
+
"canonicalPath": "GameData.rules.damageFormula / calculate.getBaseDamage",
|
|
1227
|
+
"fieldClass": "implementation-owned",
|
|
1228
|
+
"sourcePolicy": "implementation-owned",
|
|
1229
|
+
"status": "deferred",
|
|
1230
|
+
"nanokaEndpoint": null,
|
|
1231
|
+
"rawFieldPaths": [],
|
|
1232
|
+
"transformRule": "fairy runtime formula contract; no nanoka row expected unless Product asks for source-backed formula tables",
|
|
1233
|
+
"sampleEntity": null,
|
|
1234
|
+
"rawAvailable": false,
|
|
1235
|
+
"promotable": false,
|
|
1236
|
+
"blockedBy": [
|
|
1237
|
+
"implementation-owned-runtime-formula"
|
|
1238
|
+
]
|
|
1239
|
+
},
|
|
1240
|
+
{
|
|
1241
|
+
"fieldId": "rules.rounding",
|
|
1242
|
+
"canonicalPath": "GameData.rules.rounding / trace rounding modes",
|
|
1243
|
+
"fieldClass": "implementation-owned",
|
|
1244
|
+
"sourcePolicy": "implementation-owned",
|
|
1245
|
+
"status": "deferred",
|
|
1246
|
+
"nanokaEndpoint": null,
|
|
1247
|
+
"rawFieldPaths": [],
|
|
1248
|
+
"transformRule": "fairy runtime rounding contract backed by existing golden anchors",
|
|
1249
|
+
"sampleEntity": null,
|
|
1250
|
+
"rawAvailable": false,
|
|
1251
|
+
"promotable": false,
|
|
1252
|
+
"blockedBy": [
|
|
1253
|
+
"implementation-owned-runtime-formula"
|
|
1254
|
+
]
|
|
1255
|
+
},
|
|
1256
|
+
{
|
|
1257
|
+
"fieldId": "rules.anomalyThresholdRankTriggerTable",
|
|
1258
|
+
"canonicalPath": "GameData.rules.anomalyThreshold / getAnomalyThreshold rank table",
|
|
1259
|
+
"fieldClass": "required",
|
|
1260
|
+
"sourcePolicy": "nanoka",
|
|
1261
|
+
"status": "verified-from-nanoka",
|
|
1262
|
+
"nanokaEndpoint": "/{locale}/monster/{id}.json or other nanoka config endpoint",
|
|
1263
|
+
"rawFieldPaths": [
|
|
1264
|
+
"/element_abnormal",
|
|
1265
|
+
"/monster_info/*/stats/base_buildup_ratio",
|
|
1266
|
+
"/monster_info/*/stats/*_buildup_res",
|
|
1267
|
+
"/monster_info/*/stats/*_buildup_curve"
|
|
1268
|
+
],
|
|
1269
|
+
"transformRule": "monster detail exposes candidate threshold/buildup fields; prove whether current rank/trigger threshold table is source-backed by nanoka or remains guide/runtime-owned",
|
|
1270
|
+
"sampleEntity": "nanoka-monster-dullahan-30000",
|
|
1271
|
+
"rawAvailable": true,
|
|
1272
|
+
"promotable": false,
|
|
1273
|
+
"blockedBy": [
|
|
1274
|
+
"field:anomaly-threshold-rule-source-required"
|
|
1275
|
+
]
|
|
1276
|
+
},
|
|
1277
|
+
{
|
|
1278
|
+
"fieldId": "rules.disorderFormula",
|
|
1279
|
+
"canonicalPath": "GameData.rules.disorder / getDisorderFormula",
|
|
1280
|
+
"fieldClass": "implementation-owned",
|
|
1281
|
+
"sourcePolicy": "implementation-owned",
|
|
1282
|
+
"status": "deferred",
|
|
1283
|
+
"nanokaEndpoint": null,
|
|
1284
|
+
"rawFieldPaths": [],
|
|
1285
|
+
"transformRule": "Fairy owns the runtime Disorder formula contract in core and verifies it through guide-anchored golden replay G15; approved live nanoka formula/rule/disorder endpoints are absent and entity indexes/details do not expose a Disorder formula table. Do not synthesize source-backed formula rows from entity text.",
|
|
1286
|
+
"sampleEntity": null,
|
|
1287
|
+
"rawAvailable": false,
|
|
1288
|
+
"promotable": false,
|
|
1289
|
+
"blockedBy": [
|
|
1290
|
+
"implementation-owned-runtime-formula"
|
|
1291
|
+
],
|
|
1292
|
+
"auditArtifact": "data/cleaned/audit/nanoka-disorder-formula-audit.json",
|
|
1293
|
+
"notes": "Task #156 classifies this as implementation-owned after nanoka failed-evidence audit. Existing trace sourceAnchor remains guide-3.4.1 and executable replay remains G15."
|
|
1294
|
+
},
|
|
1295
|
+
{
|
|
1296
|
+
"fieldId": "rules.disorderDazeLevelZone",
|
|
1297
|
+
"canonicalPath": "GameData.rules.dazeLevelZone / getDisorderDazeLevelMultiplier",
|
|
1298
|
+
"fieldClass": "implementation-owned",
|
|
1299
|
+
"sourcePolicy": "implementation-owned",
|
|
1300
|
+
"status": "deferred",
|
|
1301
|
+
"nanokaEndpoint": null,
|
|
1302
|
+
"rawFieldPaths": [],
|
|
1303
|
+
"transformRule": "Fairy owns the runtime Disorder daze-level zone formula contract in core and verifies it through guide-anchored golden replay G16; approved live nanoka daze-level/level-zone/formula endpoints are absent and entity indexes/details do not expose a Disorder daze-level formula table. Do not synthesize source-backed daze-level rows from entity text.",
|
|
1304
|
+
"sampleEntity": null,
|
|
1305
|
+
"rawAvailable": false,
|
|
1306
|
+
"promotable": false,
|
|
1307
|
+
"blockedBy": [
|
|
1308
|
+
"implementation-owned-runtime-formula"
|
|
1309
|
+
],
|
|
1310
|
+
"auditArtifact": "data/cleaned/audit/nanoka-disorder-daze-level-audit.json",
|
|
1311
|
+
"notes": "Task #158 classifies this as implementation-owned after nanoka failed-evidence audit. Existing trace sourceAnchor remains guide-3.4.2 and executable replay remains G16."
|
|
1312
|
+
},
|
|
1313
|
+
{
|
|
1314
|
+
"fieldId": "rules.attributeMapping",
|
|
1315
|
+
"canonicalPath": "GameData.rules.attributeMapping / frost/auric/resistance mappings",
|
|
1316
|
+
"fieldClass": "required",
|
|
1317
|
+
"sourcePolicy": "nanoka",
|
|
1318
|
+
"status": "verified-from-nanoka",
|
|
1319
|
+
"nanokaEndpoint": "/{locale}/character/{id}.json and /{locale}/monster/{id}.json or config endpoint",
|
|
1320
|
+
"rawFieldPaths": [
|
|
1321
|
+
"/special_element_type",
|
|
1322
|
+
"/monster_info/*/element",
|
|
1323
|
+
"/monster_info/*/stats/*_damage_res"
|
|
1324
|
+
],
|
|
1325
|
+
"transformRule": "character element_type/special_element_type and monster element/resistance fields exist; map source enum ids into fairy attribute/resistance semantics before promotion",
|
|
1326
|
+
"sampleEntity": "nanoka-character-yixuan-1371",
|
|
1327
|
+
"supportingSamples": [
|
|
1328
|
+
"nanoka-monster-dullahan-30000"
|
|
1329
|
+
],
|
|
1330
|
+
"rawAvailable": true,
|
|
1331
|
+
"promotable": false,
|
|
1332
|
+
"blockedBy": [
|
|
1333
|
+
"field:attribute-mapping-source-required"
|
|
1334
|
+
]
|
|
1335
|
+
},
|
|
1336
|
+
{
|
|
1337
|
+
"fieldId": "manualEvents.trueDamageAndPartBreak",
|
|
1338
|
+
"canonicalPath": "BattleSnapshot.manualEvents",
|
|
1339
|
+
"fieldClass": "implementation-owned",
|
|
1340
|
+
"sourcePolicy": "implementation-owned",
|
|
1341
|
+
"status": "deferred",
|
|
1342
|
+
"nanokaEndpoint": null,
|
|
1343
|
+
"rawFieldPaths": [],
|
|
1344
|
+
"transformRule": "manual event formulas are rules/guide-backed runtime inputs, not nanoka entity rows",
|
|
1345
|
+
"sampleEntity": null,
|
|
1346
|
+
"rawAvailable": false,
|
|
1347
|
+
"promotable": false,
|
|
1348
|
+
"blockedBy": [
|
|
1349
|
+
"implementation-owned-runtime-input"
|
|
1350
|
+
]
|
|
1351
|
+
}
|
|
1352
|
+
],
|
|
1353
|
+
"summary": {
|
|
1354
|
+
"totalRows": 45,
|
|
1355
|
+
"verifiedFromNanoka": 36,
|
|
1356
|
+
"needsTlResearch": 0,
|
|
1357
|
+
"needsOwnerResearch": 0,
|
|
1358
|
+
"deferred": 9,
|
|
1359
|
+
"promotableNow": 20,
|
|
1360
|
+
"notPromotableYet": 25
|
|
1361
|
+
},
|
|
1362
|
+
"openResearchItems": [
|
|
1363
|
+
"agent stat unit mapping for crit/pen/anomaly/impact/adrenaline",
|
|
1364
|
+
"rupture rbl semantic mapping",
|
|
1365
|
+
"skill tag/damageType/hitCount mapping",
|
|
1366
|
+
"mindscape/potential semantic mapping",
|
|
1367
|
+
"typed modifier templates for passives, W-Engines, Drive Discs, enemy rules, DA buffs, and Sentinel rows",
|
|
1368
|
+
"enemy level formula, resistance units, anomaly threshold mapping, and daze recovery semantics after variant mapping",
|
|
1369
|
+
"W-Engine stat/refine mapping",
|
|
1370
|
+
"DA boss_adjust, score/HP, field-rule, and period filter semantic mapping",
|
|
1371
|
+
"Sentinel canonical naming and unit normalization"
|
|
1372
|
+
],
|
|
1373
|
+
"liveVersionRef": "manifest.zzz.live",
|
|
1374
|
+
"sourceVersionResolved": "2.8",
|
|
1375
|
+
"latestResearchVersion": "3.0.2+15625449",
|
|
1376
|
+
"approvedLiveVersions": [
|
|
1377
|
+
"2.8"
|
|
1378
|
+
],
|
|
1379
|
+
"sourceVersionPolicy": {
|
|
1380
|
+
"liveVersionRef": "manifest.zzz.live",
|
|
1381
|
+
"defaultReleaseSourceVersion": "2.8",
|
|
1382
|
+
"approvedLiveVersions": [
|
|
1383
|
+
"2.8"
|
|
1384
|
+
],
|
|
1385
|
+
"latestResearchVersion": "3.0.2+15625449",
|
|
1386
|
+
"latestUsage": "research-and-drift-only",
|
|
1387
|
+
"cleanedOutputRule": "cleaned output must use manifest.zzz.live or an explicitly owner-approved version",
|
|
1388
|
+
"timeWindowRule": "time-windowed rows such as Deadly Assault periods must satisfy begin_time <= configuredLiveSnapshotDate"
|
|
1389
|
+
}
|
|
1390
|
+
}
|