@tapestry-mud/cli 0.8.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.
@@ -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.