@tapestry-mud/cli 0.9.0 → 0.10.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/CLAUDE.md +42 -0
- package/bin/tapestry.js +14 -1
- package/package.json +5 -2
- package/specs/README.md +59 -0
- package/specs/engine-management.md +140 -0
- package/specs/harvest.md +159 -0
- package/specs/lint.config.json +1 -0
- package/specs/pack-lifecycle.md +206 -0
- package/specs/registry-auth.md +127 -0
- package/specs/validate.md +70 -0
- package/src/commands/pack.js +3 -0
- package/src/commands/publish.js +2 -0
- package/src/commands/types.js +15 -0
- package/src/lib/ts-build.js +22 -0
- package/types/tapestry-engine.d.ts +630 -0
- package/validation-ledger.md +29 -0
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
// Canonical typings for the tapestry.* engine API, surfaced as the module "@tapestry/engine".
|
|
2
|
+
// Source of truth: src/Tapestry.Scripting/Modules/*.cs Build() return shapes.
|
|
3
|
+
// tapestry-cli vendors a copy (Phase B "tapestry types") and lays it into each pack's types/ dir.
|
|
4
|
+
// Keep in sync with the IJintApiModule set and tie to the engine version.
|
|
5
|
+
// The index-signature safety net on each namespace keeps the ESM pack migration mechanical:
|
|
6
|
+
// any method not grepped here still type-checks as `any` under strict:false/noImplicitAny:false.
|
|
7
|
+
declare module "@tapestry/engine" {
|
|
8
|
+
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Shared types
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
|
|
13
|
+
export type EntityId = string;
|
|
14
|
+
|
|
15
|
+
export interface CommandDef {
|
|
16
|
+
name: string;
|
|
17
|
+
aliases?: string[];
|
|
18
|
+
priority?: number;
|
|
19
|
+
roles?: string[];
|
|
20
|
+
override?: boolean;
|
|
21
|
+
args?: Record<string, any>;
|
|
22
|
+
visibleTo?: (player: any) => boolean;
|
|
23
|
+
handler: (actor: any, resolved: any) => void;
|
|
24
|
+
[key: string]: any;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface BehaviorDef {
|
|
28
|
+
name: string;
|
|
29
|
+
priority?: number;
|
|
30
|
+
override?: boolean;
|
|
31
|
+
handler: (...args: any[]) => any;
|
|
32
|
+
[key: string]: any;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// abilities
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
export const abilities: {
|
|
39
|
+
forget(...args: any[]): any;
|
|
40
|
+
getDefinition(...args: any[]): any;
|
|
41
|
+
getDisplayName(...args: any[]): any;
|
|
42
|
+
getLearnedAbilities(...args: any[]): any;
|
|
43
|
+
getProficiency(...args: any[]): any;
|
|
44
|
+
increaseProficiency(...args: any[]): any;
|
|
45
|
+
learn(...args: any[]): any;
|
|
46
|
+
queue(...args: any[]): any;
|
|
47
|
+
register(def: any): void;
|
|
48
|
+
search(...args: any[]): any;
|
|
49
|
+
setProficiency(...args: any[]): any;
|
|
50
|
+
[key: string]: any;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// admin
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
export const admin: { [key: string]: any };
|
|
57
|
+
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
// alignment
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
export const alignment: {
|
|
62
|
+
bucket(...args: any[]): any;
|
|
63
|
+
get(...args: any[]): any;
|
|
64
|
+
history(...args: any[]): any;
|
|
65
|
+
set(...args: any[]): any;
|
|
66
|
+
[key: string]: any;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// args
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
export const args: {
|
|
73
|
+
registerType(...args: any[]): any;
|
|
74
|
+
resolve(...args: any[]): any;
|
|
75
|
+
[key: string]: any;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
// authoring
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
export const authoring: {
|
|
82
|
+
clearRoomAttribute(...args: any[]): any;
|
|
83
|
+
createArea(...args: any[]): any;
|
|
84
|
+
createRoom(...args: any[]): any;
|
|
85
|
+
getArea(...args: any[]): any;
|
|
86
|
+
getAreaRooms(...args: any[]): any;
|
|
87
|
+
getAreas(...args: any[]): any;
|
|
88
|
+
recommendEnabled(...args: any[]): any;
|
|
89
|
+
setAreaAttribute(...args: any[]): any;
|
|
90
|
+
setAreaDescription(...args: any[]): any;
|
|
91
|
+
setAreaLore(...args: any[]): any;
|
|
92
|
+
setAreaName(...args: any[]): any;
|
|
93
|
+
setAreaShort(...args: any[]): any;
|
|
94
|
+
setAreaTheme(...args: any[]): any;
|
|
95
|
+
setRoomAttribute(...args: any[]): any;
|
|
96
|
+
setRoomDescription(...args: any[]): any;
|
|
97
|
+
setRoomExit(...args: any[]): any;
|
|
98
|
+
setRoomName(...args: any[]): any;
|
|
99
|
+
[key: string]: any;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// classes
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
export const classes: {
|
|
106
|
+
get(...args: any[]): any;
|
|
107
|
+
getEligibleClasses(...args: any[]): any;
|
|
108
|
+
getPlayerClass(...args: any[]): any;
|
|
109
|
+
register(...args: any[]): any;
|
|
110
|
+
setClass(...args: any[]): any;
|
|
111
|
+
[key: string]: any;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
// combat
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
export const combat: {
|
|
118
|
+
applyAC(...args: any[]): any;
|
|
119
|
+
applyDamage(...args: any[]): any;
|
|
120
|
+
engage(...args: any[]): any;
|
|
121
|
+
flee(...args: any[]): any;
|
|
122
|
+
formatDamageVerb(...args: any[]): any;
|
|
123
|
+
getCombatants(...args: any[]): any;
|
|
124
|
+
isInCombat(...args: any[]): any;
|
|
125
|
+
removeFromAllCombat(...args: any[]): any;
|
|
126
|
+
savingThrow(...args: any[]): any;
|
|
127
|
+
setPrimaryTarget(...args: any[]): any;
|
|
128
|
+
[key: string]: any;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
// commands
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
export const commands: {
|
|
135
|
+
register(def: CommandDef): void;
|
|
136
|
+
categories(...args: any[]): any;
|
|
137
|
+
listForPlayer(...args: any[]): any;
|
|
138
|
+
[key: string]: any;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// config
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
export const config: {
|
|
145
|
+
get(...args: any[]): any;
|
|
146
|
+
[key: string]: any;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
// connections
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
export const connections: {
|
|
153
|
+
create(...args: any[]): any;
|
|
154
|
+
getAll(...args: any[]): any;
|
|
155
|
+
getForRoom(...args: any[]): any;
|
|
156
|
+
remove(...args: any[]): any;
|
|
157
|
+
[key: string]: any;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
// consumables
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
export const consumables: {
|
|
164
|
+
consume(...args: any[]): any;
|
|
165
|
+
[key: string]: any;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
// ---------------------------------------------------------------------------
|
|
169
|
+
// currency
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
export const currency: {
|
|
172
|
+
addGold(...args: any[]): any;
|
|
173
|
+
getGold(...args: any[]): any;
|
|
174
|
+
setGold(...args: any[]): any;
|
|
175
|
+
[key: string]: any;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// ---------------------------------------------------------------------------
|
|
179
|
+
// data
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
export const data: {
|
|
182
|
+
loadYaml(relativePath: string): any;
|
|
183
|
+
[key: string]: any;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
// dice
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
export const dice: {
|
|
190
|
+
roll(...args: any[]): any;
|
|
191
|
+
[key: string]: any;
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
// doors
|
|
196
|
+
// ---------------------------------------------------------------------------
|
|
197
|
+
export const doors: {
|
|
198
|
+
close(...args: any[]): any;
|
|
199
|
+
getDoor(...args: any[]): any;
|
|
200
|
+
hasKey(...args: any[]): any;
|
|
201
|
+
lockDoor(...args: any[]): any;
|
|
202
|
+
open(...args: any[]): any;
|
|
203
|
+
unlock(...args: any[]): any;
|
|
204
|
+
[key: string]: any;
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
// ---------------------------------------------------------------------------
|
|
208
|
+
// effects
|
|
209
|
+
// ---------------------------------------------------------------------------
|
|
210
|
+
export const effects: {
|
|
211
|
+
apply(entityId: EntityId, effect: any): void;
|
|
212
|
+
getActive(...args: any[]): any;
|
|
213
|
+
hasEffect(...args: any[]): any;
|
|
214
|
+
[key: string]: any;
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
// ---------------------------------------------------------------------------
|
|
218
|
+
// equipment
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
export const equipment: {
|
|
221
|
+
equip(...args: any[]): any;
|
|
222
|
+
getEmptyText(...args: any[]): any;
|
|
223
|
+
getSlots(...args: any[]): any;
|
|
224
|
+
setEmptyText(...args: any[]): any;
|
|
225
|
+
transferAll(...args: any[]): any;
|
|
226
|
+
unequip(...args: any[]): any;
|
|
227
|
+
unequipAll(...args: any[]): any;
|
|
228
|
+
unequipAllSilent(...args: any[]): any;
|
|
229
|
+
unequipByKeyword(...args: any[]): any;
|
|
230
|
+
[key: string]: any;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
// ---------------------------------------------------------------------------
|
|
234
|
+
// essence
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
export const essence: {
|
|
237
|
+
format(...args: any[]): any;
|
|
238
|
+
register(...args: any[]): any;
|
|
239
|
+
[key: string]: any;
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
// events
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
245
|
+
export const events: {
|
|
246
|
+
on(name: string, handler: (evt: any) => void): void;
|
|
247
|
+
publish(name: string, data?: any): void;
|
|
248
|
+
[key: string]: any;
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
// ---------------------------------------------------------------------------
|
|
252
|
+
// flags
|
|
253
|
+
// ---------------------------------------------------------------------------
|
|
254
|
+
export const flags: {
|
|
255
|
+
playerHasFlag(...args: any[]): any;
|
|
256
|
+
setPlayerFlag(...args: any[]): any;
|
|
257
|
+
[key: string]: any;
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
// ---------------------------------------------------------------------------
|
|
261
|
+
// flows
|
|
262
|
+
// ---------------------------------------------------------------------------
|
|
263
|
+
export const flows: {
|
|
264
|
+
register(...args: any[]): any;
|
|
265
|
+
trigger(...args: any[]): any;
|
|
266
|
+
[key: string]: any;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// ---------------------------------------------------------------------------
|
|
270
|
+
// gmcp
|
|
271
|
+
// ---------------------------------------------------------------------------
|
|
272
|
+
export const gmcp: {
|
|
273
|
+
send(...args: any[]): any;
|
|
274
|
+
[key: string]: any;
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
// help
|
|
279
|
+
// ---------------------------------------------------------------------------
|
|
280
|
+
export const help: {
|
|
281
|
+
categories(...args: any[]): any;
|
|
282
|
+
list(...args: any[]): any;
|
|
283
|
+
query(...args: any[]): any;
|
|
284
|
+
[key: string]: any;
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
// ---------------------------------------------------------------------------
|
|
288
|
+
// inventory
|
|
289
|
+
// ---------------------------------------------------------------------------
|
|
290
|
+
export const inventory: {
|
|
291
|
+
destroy(...args: any[]): any;
|
|
292
|
+
drop(...args: any[]): any;
|
|
293
|
+
examineItem(...args: any[]): any;
|
|
294
|
+
fillItem(...args: any[]): any;
|
|
295
|
+
findInRoom(...args: any[]): any;
|
|
296
|
+
getAll(...args: any[]): any;
|
|
297
|
+
getAllFromContainer(...args: any[]): any;
|
|
298
|
+
getContents(...args: any[]): any;
|
|
299
|
+
getFromContainer(...args: any[]): any;
|
|
300
|
+
getItemDetails(...args: any[]): any;
|
|
301
|
+
give(...args: any[]): any;
|
|
302
|
+
pickUp(...args: any[]): any;
|
|
303
|
+
putAllInContainer(...args: any[]): any;
|
|
304
|
+
putInContainer(...args: any[]): any;
|
|
305
|
+
transferAll(...args: any[]): any;
|
|
306
|
+
transferAllSilent(...args: any[]): any;
|
|
307
|
+
[key: string]: any;
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
// ---------------------------------------------------------------------------
|
|
311
|
+
// items
|
|
312
|
+
// ---------------------------------------------------------------------------
|
|
313
|
+
export const items: {
|
|
314
|
+
spawnToInventory(...args: any[]): any;
|
|
315
|
+
[key: string]: any;
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
// ---------------------------------------------------------------------------
|
|
319
|
+
// mobs
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
export const mobs: {
|
|
322
|
+
registerBehavior(...args: any[]): void;
|
|
323
|
+
registerCommand(...args: any[]): void;
|
|
324
|
+
registerScript(...args: any[]): void;
|
|
325
|
+
command(...args: any[]): any;
|
|
326
|
+
getProperties(...args: any[]): any;
|
|
327
|
+
getTicksSinceLastAction(...args: any[]): any;
|
|
328
|
+
invokeHook(...args: any[]): any;
|
|
329
|
+
recordAction(...args: any[]): any;
|
|
330
|
+
spawnMob(...args: any[]): any;
|
|
331
|
+
[key: string]: any;
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
// ---------------------------------------------------------------------------
|
|
335
|
+
// notifications
|
|
336
|
+
// ---------------------------------------------------------------------------
|
|
337
|
+
export const notifications: {
|
|
338
|
+
enqueue(...args: any[]): any;
|
|
339
|
+
[key: string]: any;
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
// ---------------------------------------------------------------------------
|
|
343
|
+
// packs
|
|
344
|
+
// Cross-pack sharing is native import/export, NOT packs.*; only introspection survives.
|
|
345
|
+
// ---------------------------------------------------------------------------
|
|
346
|
+
export const packs: {
|
|
347
|
+
list(): any[];
|
|
348
|
+
getAll(): any[];
|
|
349
|
+
[key: string]: any;
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
// ---------------------------------------------------------------------------
|
|
353
|
+
// portals
|
|
354
|
+
// ---------------------------------------------------------------------------
|
|
355
|
+
export const portals: {
|
|
356
|
+
getKeywordExits(...args: any[]): any;
|
|
357
|
+
[key: string]: any;
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
// ---------------------------------------------------------------------------
|
|
361
|
+
// progression
|
|
362
|
+
// ---------------------------------------------------------------------------
|
|
363
|
+
export const progression: {
|
|
364
|
+
calculateMobXp(...args: any[]): any;
|
|
365
|
+
deduct(...args: any[]): any;
|
|
366
|
+
getInfo(...args: any[]): any;
|
|
367
|
+
getLevel(...args: any[]): any;
|
|
368
|
+
getTracks(...args: any[]): any;
|
|
369
|
+
grant(...args: any[]): any;
|
|
370
|
+
groupShare(...args: any[]): any;
|
|
371
|
+
registerTrack(...args: any[]): any;
|
|
372
|
+
[key: string]: any;
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
// ---------------------------------------------------------------------------
|
|
376
|
+
// quests
|
|
377
|
+
// ---------------------------------------------------------------------------
|
|
378
|
+
export const quests: {
|
|
379
|
+
abandon(...args: any[]): any;
|
|
380
|
+
getState(...args: any[]): any;
|
|
381
|
+
hasQuestMarker(...args: any[]): any;
|
|
382
|
+
offer(...args: any[]): any;
|
|
383
|
+
registerScript(...args: any[]): any;
|
|
384
|
+
[key: string]: any;
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
// ---------------------------------------------------------------------------
|
|
388
|
+
// races
|
|
389
|
+
// ---------------------------------------------------------------------------
|
|
390
|
+
export const races: {
|
|
391
|
+
getAll(...args: any[]): any;
|
|
392
|
+
getStatCap(...args: any[]): any;
|
|
393
|
+
register(...args: any[]): any;
|
|
394
|
+
[key: string]: any;
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
// ---------------------------------------------------------------------------
|
|
398
|
+
// rarity
|
|
399
|
+
// ---------------------------------------------------------------------------
|
|
400
|
+
export const rarity: {
|
|
401
|
+
formatInline(...args: any[]): any;
|
|
402
|
+
register(...args: any[]): any;
|
|
403
|
+
[key: string]: any;
|
|
404
|
+
};
|
|
405
|
+
|
|
406
|
+
// ---------------------------------------------------------------------------
|
|
407
|
+
// registry
|
|
408
|
+
// ---------------------------------------------------------------------------
|
|
409
|
+
export const registry: {
|
|
410
|
+
conflicts(...args: any[]): any;
|
|
411
|
+
list(...args: any[]): any;
|
|
412
|
+
summary(...args: any[]): any;
|
|
413
|
+
[key: string]: any;
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
// ---------------------------------------------------------------------------
|
|
417
|
+
// respond
|
|
418
|
+
// ---------------------------------------------------------------------------
|
|
419
|
+
export const respond: {
|
|
420
|
+
suppress(...args: any[]): any;
|
|
421
|
+
[key: string]: any;
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
// ---------------------------------------------------------------------------
|
|
425
|
+
// rest
|
|
426
|
+
// ---------------------------------------------------------------------------
|
|
427
|
+
export const rest: {
|
|
428
|
+
getRestState(...args: any[]): any;
|
|
429
|
+
setRestState(...args: any[]): any;
|
|
430
|
+
[key: string]: any;
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
// ---------------------------------------------------------------------------
|
|
434
|
+
// returnaddress
|
|
435
|
+
// ---------------------------------------------------------------------------
|
|
436
|
+
export const returnaddress: {
|
|
437
|
+
clear(...args: any[]): any;
|
|
438
|
+
get(...args: any[]): any;
|
|
439
|
+
has(...args: any[]): any;
|
|
440
|
+
[key: string]: any;
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
// ---------------------------------------------------------------------------
|
|
444
|
+
// rooms
|
|
445
|
+
// ---------------------------------------------------------------------------
|
|
446
|
+
export const rooms: {
|
|
447
|
+
getByPack(...args: any[]): any;
|
|
448
|
+
getEntryPoints(...args: any[]): any;
|
|
449
|
+
getExits(...args: any[]): any;
|
|
450
|
+
[key: string]: any;
|
|
451
|
+
};
|
|
452
|
+
|
|
453
|
+
// ---------------------------------------------------------------------------
|
|
454
|
+
// schedule
|
|
455
|
+
// ---------------------------------------------------------------------------
|
|
456
|
+
export const schedule: {
|
|
457
|
+
everyForEach(...args: any[]): any;
|
|
458
|
+
[key: string]: any;
|
|
459
|
+
};
|
|
460
|
+
|
|
461
|
+
// ---------------------------------------------------------------------------
|
|
462
|
+
// shop
|
|
463
|
+
// ---------------------------------------------------------------------------
|
|
464
|
+
export const shop: {
|
|
465
|
+
buy(...args: any[]): any;
|
|
466
|
+
findShopInRoom(...args: any[]): any;
|
|
467
|
+
listings(...args: any[]): any;
|
|
468
|
+
sell(...args: any[]): any;
|
|
469
|
+
value(...args: any[]): any;
|
|
470
|
+
[key: string]: any;
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
// ---------------------------------------------------------------------------
|
|
474
|
+
// skills
|
|
475
|
+
// ---------------------------------------------------------------------------
|
|
476
|
+
export const skills: {
|
|
477
|
+
advanceSkillTier(...args: any[]): any;
|
|
478
|
+
getProficiency(...args: any[]): any;
|
|
479
|
+
setProficiency(...args: any[]): any;
|
|
480
|
+
[key: string]: any;
|
|
481
|
+
};
|
|
482
|
+
|
|
483
|
+
// ---------------------------------------------------------------------------
|
|
484
|
+
// stacking
|
|
485
|
+
// ---------------------------------------------------------------------------
|
|
486
|
+
export const stacking: {
|
|
487
|
+
getStacks(...args: any[]): any;
|
|
488
|
+
[key: string]: any;
|
|
489
|
+
};
|
|
490
|
+
|
|
491
|
+
// ---------------------------------------------------------------------------
|
|
492
|
+
// stats
|
|
493
|
+
// ---------------------------------------------------------------------------
|
|
494
|
+
export const stats: {
|
|
495
|
+
addBaseAttribute(...args: any[]): any;
|
|
496
|
+
addVital(...args: any[]): any;
|
|
497
|
+
get(...args: any[]): any;
|
|
498
|
+
getDisplayName(...args: any[]): any;
|
|
499
|
+
restoreVitals(...args: any[]): any;
|
|
500
|
+
setBase(...args: any[]): any;
|
|
501
|
+
[key: string]: any;
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
// ---------------------------------------------------------------------------
|
|
505
|
+
// time
|
|
506
|
+
// ---------------------------------------------------------------------------
|
|
507
|
+
export const time: {
|
|
508
|
+
hour(...args: any[]): any;
|
|
509
|
+
period(...args: any[]): any;
|
|
510
|
+
[key: string]: any;
|
|
511
|
+
};
|
|
512
|
+
|
|
513
|
+
// ---------------------------------------------------------------------------
|
|
514
|
+
// training
|
|
515
|
+
// ---------------------------------------------------------------------------
|
|
516
|
+
export const training: {
|
|
517
|
+
findTrainerInRoom(...args: any[]): any;
|
|
518
|
+
getCap(...args: any[]): any;
|
|
519
|
+
getTrainsAvailable(...args: any[]): any;
|
|
520
|
+
grantTrains(...args: any[]): any;
|
|
521
|
+
practice(...args: any[]): any;
|
|
522
|
+
setCap(...args: any[]): any;
|
|
523
|
+
setTrainable(...args: any[]): any;
|
|
524
|
+
trainStat(...args: any[]): any;
|
|
525
|
+
[key: string]: any;
|
|
526
|
+
};
|
|
527
|
+
|
|
528
|
+
// ---------------------------------------------------------------------------
|
|
529
|
+
// ui
|
|
530
|
+
// ---------------------------------------------------------------------------
|
|
531
|
+
export const ui: {
|
|
532
|
+
help(...args: any[]): any;
|
|
533
|
+
panel(...args: any[]): any;
|
|
534
|
+
width(...args: any[]): any;
|
|
535
|
+
[key: string]: any;
|
|
536
|
+
};
|
|
537
|
+
|
|
538
|
+
// ---------------------------------------------------------------------------
|
|
539
|
+
// watch
|
|
540
|
+
// ---------------------------------------------------------------------------
|
|
541
|
+
export const watch: {
|
|
542
|
+
start(...args: any[]): any;
|
|
543
|
+
stop(...args: any[]): any;
|
|
544
|
+
[key: string]: any;
|
|
545
|
+
};
|
|
546
|
+
|
|
547
|
+
// ---------------------------------------------------------------------------
|
|
548
|
+
// weather
|
|
549
|
+
// ---------------------------------------------------------------------------
|
|
550
|
+
export const weather: {
|
|
551
|
+
current(...args: any[]): any;
|
|
552
|
+
[key: string]: any;
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
// ---------------------------------------------------------------------------
|
|
556
|
+
// world
|
|
557
|
+
// ---------------------------------------------------------------------------
|
|
558
|
+
export const world: {
|
|
559
|
+
send(entityId: EntityId, text: string): void;
|
|
560
|
+
getProperty(entityId: EntityId, key: string): any;
|
|
561
|
+
setProperty(entityId: EntityId, key: string, value: any): void;
|
|
562
|
+
addRole(...args: any[]): any;
|
|
563
|
+
addTag(...args: any[]): any;
|
|
564
|
+
buildInfo(...args: any[]): any;
|
|
565
|
+
createEntity(...args: any[]): any;
|
|
566
|
+
disconnectPlayer(...args: any[]): any;
|
|
567
|
+
findEntitiesByName(...args: any[]): any;
|
|
568
|
+
findEntityByTag(...args: any[]): any;
|
|
569
|
+
findPlayerByName(...args: any[]): any;
|
|
570
|
+
getAllEntities(...args: any[]): any;
|
|
571
|
+
getCurrentTick(...args: any[]): any;
|
|
572
|
+
getEntitiesByTag(...args: any[]): any;
|
|
573
|
+
getEntitiesInRoom(...args: any[]): any;
|
|
574
|
+
getEntity(...args: any[]): any;
|
|
575
|
+
getEntityDisposition(...args: any[]): any;
|
|
576
|
+
getEntityKeywords(...args: any[]): any;
|
|
577
|
+
getEntityRoles(...args: any[]): any;
|
|
578
|
+
getEntityRoomId(...args: any[]): any;
|
|
579
|
+
getEntityTags(...args: any[]): any;
|
|
580
|
+
getEntityType(...args: any[]): any;
|
|
581
|
+
getExitTarget(...args: any[]): any;
|
|
582
|
+
getItemsInWorld(...args: any[]): any;
|
|
583
|
+
getNpcsInWorld(...args: any[]): any;
|
|
584
|
+
getOnlinePlayers(...args: any[]): any;
|
|
585
|
+
getPropertyRegistry(...args: any[]): any;
|
|
586
|
+
getRoomArea(...args: any[]): any;
|
|
587
|
+
getRoomBiome(...args: any[]): any;
|
|
588
|
+
getRoomDescription(...args: any[]): any;
|
|
589
|
+
getRoomExits(...args: any[]): any;
|
|
590
|
+
getRoomExitsById(...args: any[]): any;
|
|
591
|
+
getRoomName(...args: any[]): any;
|
|
592
|
+
getRoomOccupants(...args: any[]): any;
|
|
593
|
+
getRoomProperties(...args: any[]): any;
|
|
594
|
+
getRoomsInArea(...args: any[]): any;
|
|
595
|
+
getRoomTags(...args: any[]): any;
|
|
596
|
+
getTagRegistry(...args: any[]): any;
|
|
597
|
+
getVisibleEntities(...args: any[]): any;
|
|
598
|
+
hasRole(...args: any[]): any;
|
|
599
|
+
hasTag(...args: any[]): any;
|
|
600
|
+
isTagKnown(...args: any[]): any;
|
|
601
|
+
moveEntity(...args: any[]): any;
|
|
602
|
+
placeEntity(...args: any[]): any;
|
|
603
|
+
purgeEntities(...args: any[]): any;
|
|
604
|
+
removeEntity(...args: any[]): any;
|
|
605
|
+
removeRole(...args: any[]): any;
|
|
606
|
+
removeTag(...args: any[]): any;
|
|
607
|
+
renderAreaMap(...args: any[]): any;
|
|
608
|
+
sameArea(...args: any[]): any;
|
|
609
|
+
searchTemplates(...args: any[]): any;
|
|
610
|
+
sendMotd(...args: any[]): any;
|
|
611
|
+
sendPrivate(...args: any[]): any;
|
|
612
|
+
sendRoomDescription(...args: any[]): any;
|
|
613
|
+
sendToAll(...args: any[]): any;
|
|
614
|
+
sendToRoom(...args: any[]): any;
|
|
615
|
+
sendToRoomExcept(...args: any[]): any;
|
|
616
|
+
sendToRoomExceptMany(...args: any[]): any;
|
|
617
|
+
sendToRoomExceptSleeping(...args: any[]): any;
|
|
618
|
+
setClass(...args: any[]): any;
|
|
619
|
+
setRace(...args: any[]): any;
|
|
620
|
+
teleportEntity(...args: any[]): any;
|
|
621
|
+
triggerDisposition(...args: any[]): any;
|
|
622
|
+
[key: string]: any;
|
|
623
|
+
};
|
|
624
|
+
|
|
625
|
+
// ---------------------------------------------------------------------------
|
|
626
|
+
// whoAmI - returns the pack name the calling code lexically belongs to.
|
|
627
|
+
// Attribution is a property of module scope, not a dynamic global.
|
|
628
|
+
// ---------------------------------------------------------------------------
|
|
629
|
+
export function whoAmI(): string;
|
|
630
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Validation ledger
|
|
2
|
+
|
|
3
|
+
Adjudication record for `specs/` capability drafts. One line per finding:
|
|
4
|
+
`date | file | finding | verdict (fixed / below-bar / not-real) | why`.
|
|
5
|
+
|
|
6
|
+
Read before judging; never re-report an adjudicated finding as new.
|
|
7
|
+
|
|
8
|
+
## Findings
|
|
9
|
+
|
|
10
|
+
2026-06-13 | validate.md | All 10 anchors verified; four required sections present | not-real | Pass 1: no issues found.
|
|
11
|
+
2026-06-13 | registry-auth.md | All 30 anchors verified (paths, 0o600 mode, 60s skew, OIDC audience, trust endpoints) | not-real | Pass 1: no issues found.
|
|
12
|
+
2026-06-13 | engine-management.md | All 30 anchors verified (image default, ports 4000/4001, .tapestry.pid, channels, pull-fallback) | not-real | Pass 1: no issues found.
|
|
13
|
+
2026-06-13 | harvest.md | "computeAreaStates iterates data/areas/ alphabetically" -- code iterates readdir order (l.32) and sorts the OUTPUT (l.76) | below-bar | Observable behavior (status prints alphabetically) is correct; cited range 26-77 covers the sort. "iterates" is imprecise mechanism wording, not a wrong behavior claim. Adjudicator re-verified.
|
|
14
|
+
2026-06-13 | harvest.md | --minor/--major anchor bin/tapestry.js:406-408 vs actual ~408-409 | below-bar | Off by ~2 lines; cited region clearly contains the flag behavior.
|
|
15
|
+
2026-06-13 | harvest.md | file-sink completion message anchor :55-56 vs print on l.55 | below-bar | Off by 1 line; message present at cited region.
|
|
16
|
+
2026-06-13 | harvest.md | Quoted completion message "This .tgz is a portable, installable pack" is truncated vs full string | below-bar | Spec paraphrases the lead of the message; not presented as the complete literal. Core claim accurate.
|
|
17
|
+
2026-06-13 | pack-lifecycle.md | enable.js anchor :4-9 vs tapestry.yaml check at ~8-10 | below-bar | Off by 1-2 lines; require stmts at 4-5, behavior present in cited region.
|
|
18
|
+
2026-06-13 | pack-lifecycle.md | link.js anchor :33-38 for "requires tapestry.yaml and existing path" | below-bar | requireProject at l.34, path check 35-38; behavior present and correct in cited range.
|
|
19
|
+
2026-06-13 | pack-lifecycle.md | UNVERIFIED marker (update.js:39 passes no token, install does) | below-bar | Code fact verified correct: update.js:39 calls resolve(deps,url) w/o token; install passes token. Uncertainty is about the IMPACT (private-pack updates), honestly marked. No action; leave marker for owner or resolve in a draft if desired.
|
|
20
|
+
2026-06-13 | engine-management.md | start bullet quotes "Engine started (PID <pid>)" for binary/source; source actually prints "Engine started via dotnet run (PID <pid>)" (engine-manager.js:220) | below-bar | Bullet's cited anchors (96-99 docker, 168-171 binary) support the quoted strings exactly; source's extra "via dotnet run" is an over-generalization of the literal, not a wrong behavior claim. Pass 2 adversarial.
|
|
21
|
+
2026-06-13 | pack-lifecycle.md | install package-arg bullet (install.js:92-106) claimed entry is "pinned at ^version" for BOTH @scope/name and @scope/name@range; code only re-pins when !rawRange (install.js:101), explicit range kept as-is | fixed | Pass 2 BLOCKER. Routed to draft fix; bullet rewritten to describe both cases with anchors install.js:92-105 + 101-103. Re-graded by adjudicator and a fresh skeptic: correct. Re-lint OK (file 61->62 anchor lines).
|
|
22
|
+
|
|
23
|
+
## Pass log
|
|
24
|
+
|
|
25
|
+
- Pass 1 (per-file anchor walk, 5 agents): 0 blockers. 10 below-bar logged.
|
|
26
|
+
- Pass 2 (adversarial refutation, 2 agents): 1 new blocker (install.js pinning) -> fixed; 1 below-bar (engine start message).
|
|
27
|
+
- Post-fix Pass A (adjudicator re-grade of corrected bullet): clean.
|
|
28
|
+
- Post-fix Pass B (mechanical re-lint + fresh skeptic): clean.
|
|
29
|
+
- Stopping rule met: two consecutive passes, zero new blockers. Corpus validated 2026-06-13.
|