dsh-metaphysics 0.50.1 → 0.55.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/CHANGELOG.md +1070 -957
- package/README.md +364 -353
- package/client.almanac.js +129 -0
- package/client.chart.js +167 -0
- package/client.chenggu.js +129 -0
- package/client.convert.js +129 -0
- package/client.daliuren.js +166 -0
- package/client.fengshui.js +128 -0
- package/client.js +667 -18497
- package/client.liuyao.js +166 -0
- package/client.mbti.js +129 -0
- package/client.name.js +129 -0
- package/client.numerology.js +129 -0
- package/client.qimen.js +166 -0
- package/client.star.js +129 -0
- package/client.tarot.js +166 -0
- package/client.xiaoliuren.js +129 -0
- package/client.zeri.js +129 -0
- package/docs/assets/dsh-metaphysics-group.jpg +0 -0
- package/docs/assets/verification-badge.svg +13 -0
- package/engine/almanac.js +4 -4
- package/engine/bazi.js +13 -2
- package/engine/classics.js +559 -546
- package/engine/diff.js +156 -6
- package/engine/fingerprint.js +76 -0
- package/engine/geju.js +475 -455
- package/engine/index.js +374 -8
- package/engine/interpret-knowledge.js +484 -484
- package/engine/interpret-plain.js +383 -380
- package/engine/interpret.js +1867 -1864
- package/engine/shensha.js +6 -3
- package/engine/trace.js +270 -0
- package/index.js +32 -3
- package/package.json +112 -106
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +8620 -7100
- package/docs/assets/dsh-metaphysics-group.png +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,957 +1,1070 @@
|
|
|
1
|
-
## 0.
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
|
|
91
|
-
## 0.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
|
|
101
|
-
## 0.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
- **测试**:`test/
|
|
111
|
-
|
|
112
|
-
## 0.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
-
|
|
140
|
-
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
-
|
|
160
|
-
-
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
- **测试**:新增 `test/
|
|
191
|
-
|
|
192
|
-
## 0.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
-
|
|
197
|
-
-
|
|
198
|
-
-
|
|
199
|
-
-
|
|
200
|
-
-
|
|
201
|
-
|
|
202
|
-
## 0.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
-
|
|
207
|
-
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
-
|
|
221
|
-
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
-
|
|
248
|
-
-
|
|
249
|
-
-
|
|
250
|
-
-
|
|
251
|
-
-
|
|
252
|
-
|
|
253
|
-
## 0.
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
-
|
|
258
|
-
-
|
|
259
|
-
-
|
|
260
|
-
-
|
|
261
|
-
-
|
|
262
|
-
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
-
|
|
270
|
-
-
|
|
271
|
-
-
|
|
272
|
-
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
-
|
|
297
|
-
-
|
|
298
|
-
-
|
|
299
|
-
-
|
|
300
|
-
-
|
|
301
|
-
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
-
|
|
309
|
-
-
|
|
310
|
-
-
|
|
311
|
-
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
-
|
|
321
|
-
-
|
|
322
|
-
-
|
|
323
|
-
-
|
|
324
|
-
-
|
|
325
|
-
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
-
|
|
333
|
-
-
|
|
334
|
-
-
|
|
335
|
-
-
|
|
336
|
-
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
-
|
|
345
|
-
-
|
|
346
|
-
-
|
|
347
|
-
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
-
|
|
354
|
-
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
-
|
|
361
|
-
-
|
|
362
|
-
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
-
|
|
373
|
-
-
|
|
374
|
-
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
-
|
|
386
|
-
-
|
|
387
|
-
-
|
|
388
|
-
-
|
|
389
|
-
|
|
390
|
-
## 0.
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
-
|
|
395
|
-
-
|
|
396
|
-
-
|
|
397
|
-
-
|
|
398
|
-
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
-
|
|
420
|
-
-
|
|
421
|
-
-
|
|
422
|
-
-
|
|
423
|
-
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
-
|
|
432
|
-
-
|
|
433
|
-
-
|
|
434
|
-
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
-
|
|
444
|
-
-
|
|
445
|
-
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
-
|
|
456
|
-
-
|
|
457
|
-
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
-
|
|
464
|
-
-
|
|
465
|
-
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
-
|
|
476
|
-
-
|
|
477
|
-
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
-
|
|
486
|
-
-
|
|
487
|
-
-
|
|
488
|
-
-
|
|
489
|
-
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
-
|
|
497
|
-
- `
|
|
498
|
-
-
|
|
499
|
-
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
-
|
|
507
|
-
-
|
|
508
|
-
-
|
|
509
|
-
-
|
|
510
|
-
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
-
|
|
530
|
-
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
-
|
|
536
|
-
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
-
|
|
544
|
-
-
|
|
545
|
-
-
|
|
546
|
-
-
|
|
547
|
-
-
|
|
548
|
-
|
|
549
|
-
## 0.
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
-
|
|
554
|
-
-
|
|
555
|
-
-
|
|
556
|
-
-
|
|
557
|
-
-
|
|
558
|
-
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
-
|
|
570
|
-
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
-
|
|
582
|
-
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
- 新增 `
|
|
609
|
-
|
|
610
|
-
-
|
|
611
|
-
|
|
612
|
-
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
-
|
|
620
|
-
-
|
|
621
|
-
|
|
622
|
-
-
|
|
623
|
-
|
|
624
|
-
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
-
|
|
636
|
-
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
-
|
|
647
|
-
-
|
|
648
|
-
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
-
|
|
667
|
-
-
|
|
668
|
-
|
|
669
|
-
-
|
|
670
|
-
|
|
671
|
-
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
-
|
|
732
|
-
|
|
733
|
-
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
-
|
|
778
|
-
-
|
|
779
|
-
-
|
|
780
|
-
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
-
|
|
805
|
-
|
|
806
|
-
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
-
|
|
823
|
-
-
|
|
824
|
-
-
|
|
825
|
-
|
|
826
|
-
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
-
|
|
831
|
-
|
|
832
|
-
-
|
|
833
|
-
-
|
|
834
|
-
|
|
835
|
-
-
|
|
836
|
-
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
-
|
|
844
|
-
-
|
|
845
|
-
|
|
846
|
-
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
-
|
|
876
|
-
|
|
877
|
-
- `
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
-
|
|
894
|
-
-
|
|
895
|
-
|
|
896
|
-
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
-
|
|
901
|
-
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
-
|
|
914
|
-
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
-
|
|
919
|
-
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
-
|
|
955
|
-
-
|
|
956
|
-
-
|
|
957
|
-
-
|
|
1
|
+
## 0.55.0(2026-10-31)
|
|
2
|
+
|
|
3
|
+
补齐口径对照里的紫微九派,并把邮件反馈里的两处显示口径收紧:五合不再直接写「合化」,自化与生年/大限/流年四化分三层显示。
|
|
4
|
+
|
|
5
|
+
- **口径对照补全**(`engine/diff.js`):紫微由闰月、真太阳时两组扩到 11 组,新增亮度表、庚干四化、天马、天空、截空旬空、魁钺、天伤天使、长生、晚子时九类流派开关。默认档与另一档都取自引擎枚举,平铺参数与 `schools` 嵌套都能读;非法值回落默认。切换后 `schools` / `rules.schools` 只是口径回显,不再计入盘面差异。
|
|
6
|
+
- **同一张表**:面板折叠卡、独立页、`tools/caliber-diff.mjs` 与工具 `diff: true` 仍共用 `CALIBER_SWITCHES`;紫微卡一次列 11 行,summary 先给「几组影响此盘」。`shadow` / `trace` 属于派生展示,不再参与对照,避免面板里每组开关都被影子盘回显误报成「有变化」。
|
|
7
|
+
- **五合措辞**(`engine/bazi.js`):干支关系只标「有合」,摘要与面板写「戊癸合(化火待定)」;是否真化仍由化气格条件另判,不把「合」直接说成「化」。
|
|
8
|
+
- **四化分层**(`src/panel-kit.js`):生年四化实心、大限/流年四化空心、自化改为彩色字 + 虚下划线,图例补「虚下划线=自化」,宫位详情同步;自化块带读屏说明。
|
|
9
|
+
- **公开对拍补奇门**(`tools/verification.mjs`):接入 `test/fixtures/qimen-20.json` 的 20 个时辰 × 9 宫 = 180 个宫位,逐宫核四柱、局数、值符、值使、星门神与天盘干;报告从 457 行增到 **477 行**,新增「奇门」筛选与卡片。徽章改为披露「128 例 · 5 剔除 · 312 紫微 · 20 奇门 · 12 交运」。
|
|
10
|
+
- **CI 同源加固**:构建产物与对拍报告的 `git diff` 前先 `git add -N`,新增的 `client.*.js`、报告页或徽章不再因 untracked 而漏检;`release` 走同一套判据。自动发布指纹补入报告生成器与两份对拍 fixture。
|
|
11
|
+
- **工具输出克隆**(`engine/index.js`):`jsonSafe` 不再 `JSON.parse(JSON.stringify())`,改为等价递归深拷贝(NaN→null、-0→0、Date→ISO、数组空位→null、对象内 undefined/函数丢键、循环引用抛错),省掉每次 `compute` 建一遍几百 KB 中间字符串。21 个体系 21 组样本改动前后输出逐字节相同、影子盘 ID 不变。
|
|
12
|
+
- **三合表单源**(`engine/shensha.js` / `engine/almanac.js`):将星/驿马/桃花的 `trioKey` 与黄历「三合吉配」「煞方」原本各自维护的三合成员表,改为从 `engine/sanhe.js` 的 `SANHE_GROUPS` 派生,全仓只剩一份三合成员表。
|
|
13
|
+
- **测试**:`test/caliber-diff.test.mjs` 由 129 条扩到 205 条——11 组开关、默认档/另一档枚举、嵌套读取、回显忽略、九派逐项能改盘、shadow/trace 不参与对照、11 行渲染;`test/relations.test.mjs` 补五合「待定」与五组干合;`test/layout.test.mjs` 补自化分层与图例;`test/verification.test.mjs` 补奇门 20 例与改坏值符的检出。统计 **107 个测试文件 / 4925 条断言**,七道闸全绿。
|
|
14
|
+
- **文档**:README 口径对照、精度与口径、公开对拍三处同步;独立页「方法与验证」补奇门 20 例。
|
|
15
|
+
- **版本说明**:截至本版提交时,npm latest 仍是 **0.50.5**;0.51.0–0.54.0 未单独发布,能力均并入 0.55.0。发布后 latest 会从 0.50.5 直接跳到 0.55.0。
|
|
16
|
+
|
|
17
|
+
## 0.54.0(2026-10-31)
|
|
18
|
+
|
|
19
|
+
把「验了什么、差在哪」做成公开页:新增 `docs/verification.html` 与 README 顶部徽章,报告数字与 CI 共用 `tools/verification.mjs` 一个数据源。
|
|
20
|
+
|
|
21
|
+
- **128 条卦例**:《卜筮正宗》成对 93 条 + 静卦 35 条,逐条核本变卦、动爻数、卦宫、缺爻、旬空;源 138 条中被剔除的 5 条连同原书理由逐条列出(动爻标记冲突、缺爻冲突、卦宫冲突、静卦核对失败)。
|
|
22
|
+
- **312 张紫微盘 × 34 条格局 = 10,608 条判定**:沿用 `test/ziwei-patterns.test.mjs` 的扫描盘(1950–2025、月日时错开)与独立谓词——只读星位与四化,不调用引擎格局函数;34 条每条至少命中一次,命中分布列在报告折叠区。
|
|
23
|
+
- **12 个交运案例**:覆盖阳年男女顺逆、闰日 02-29、真太阳时、立春/晚子时边界、长间隔与 ΔT 近似区间;独立复算取节、三日折一年比例、`jiao/startAge` 同源、闰日十年后退位与口径标注。
|
|
24
|
+
- **报告页**:`docs/verification.html` 自包含,无外链脚本 / 样式;可按「一致 / 剔除 + 理由 / 不一致」与体系(六爻 / 紫微 / 交运)筛选,附搜索与 34 格局命中分布;窄屏表格横向滚动,深色跟随系统。README 顶部徽章 `docs/assets/verification-badge.svg` 由同一生成器写出,0 处不符时为绿色。
|
|
25
|
+
- **CI 同源**:新增 `test/verification.test.mjs`(23 条)直接 import 生成器,断言 128 / 312 / 12 / 0 不符、剔除项带理由、报告与徽章和生成结果逐字节一致;并故意改坏一条卦宫判定,要求校验器立刻标「不一致」。CI 增加「重建报告 + `git diff`」步骤,`release` 也会重建并校验报告;任何判定变化或忘记重建,CI 都会红。
|
|
26
|
+
- **测试**:统计 **107 个测试文件 / 4836 条断言**,七道闸全绿。报告页 390×844 深色无横向溢出,筛选按钮与表格可读。
|
|
27
|
+
|
|
28
|
+
## 0.53.0(2026-10-31)
|
|
29
|
+
|
|
30
|
+
把 `client.js` 按 tab 拆开:入口只留界面与懒加载器,引擎落到 15 个自包含分块,首屏 gzip 从 0.52 的 334KB 降到 71KB(目标 < 100KB)。
|
|
31
|
+
|
|
32
|
+
- **拆包协议**:DSH 客户端模块支持 `require.async("./client.<name>.js")`,分块用 `__ModuleLoader__.load({ id, chunk, factory })` 注册。入口 `client.js` 不再内联 `engine/*.js`,只保留 panel-kit / app / core;新增 `src/engine-lazy.js`,按当前 tab 取分块,并把该块统一入口的导出合并到同一个 `Engine` 对象。分块自包含,宿主与入口都缓存已加载的块。
|
|
33
|
+
- **分组**:chart(八字 / 紫微 / 合盘 / 人生 K 线)、name、fengshui、liuyao(六爻 / 梅花)、qimen、daliuren、tarot、almanac、convert、zeri、chenggu、xiaoliuren、star、numerology、mbti,共 15 块,覆盖全部 19 个 tab。互相依赖的体系(如合盘双方、八字交叉紫微)落在同一块,避免运行时同步 require 另一个分块。
|
|
34
|
+
- **安全降级**:`buildModule` 的 import 解构改为 `(__mods.x || {})`,统一入口对未随块加载的体系引用能安全落空,只有实际被调用的体系需要在场。入口在 `require.async` 缺失时给出明确的宿主版本提示,不静默白屏。
|
|
35
|
+
- **界面**:`run()` 与切到人格 tab 前先 `await ensureEngine(k)`,加载期间显示「正在加载本页需要的引擎…」;MBTI 题面不再在未加载时缓存空问卷;独立页与旧宿主没有分块加载器时回退到现成的完整 `Engine`,离线页行为不变。
|
|
36
|
+
- **构建与自检**:`tools/build-client.mjs` 生成入口 + `client.<name>.js`,并清理已下线分块的旧文件;`tools/check-bundle.mjs` 现在同时校验入口与每个分块的编译、注册名、返回 `Engine`、与源码逐字节一致,并守住入口 gzip < 100KB;`release` 的产物 diff 与 tarball 关键文件加入分块。构建日志按 UTF-8 字节数报告,不再用字符串长度低估中文体积。
|
|
37
|
+
- **体积**:入口 `client.js` 239KB(UTF-8)/ gzip 71KB;最大分块 chart 179KB gzip,六爻 128KB、奇门 123KB、塔罗 122KB、六壬 118KB、起名 98KB,速查类 46–68KB、人格 55KB。首次打开只下载入口,排盘时才取当前 tab 的块。
|
|
38
|
+
- **测试**:新增 `test/chunks.test.mjs`(102 条):19 个 tab 全映射、15 个分块的注册名 / 自包含 / 体积、入口体积与懒加载、19 个体系的分块引擎与源码逐字节一致、切回 chart 仍能排紫微、分块缓存不重复拉取、无 interpret 的分块不抹掉 DIRECTIONS。统计 **106 个测试文件 / 4813 条断言**,七道闸全绿。
|
|
39
|
+
- **界面验证**:CDP 真机视口 390×844 深色:`innerWidth = scrollWidth = 390`、结果区 366px、`prefers-color-scheme: dark = true`、正文底色 `rgb(18,17,13)`、推导链入口在;无横向溢出。940×900 浅色 `scrollWidth = 940`、结果区 888px。
|
|
40
|
+
|
|
41
|
+
## 0.52.0(2026-10-31)
|
|
42
|
+
|
|
43
|
+
把「结论怎么来的」摊开:新增 A1 推导链 `trace: true`,六爻 / 八字 / 紫微逐层返回 `{field, rule, inputs, result, source}`,面板用右侧抽屉逐级展开。
|
|
44
|
+
|
|
45
|
+
- **六爻五层**:纳甲(本卦上下卦 → 六爻干支)→ 六亲(卦宫五行 → 逐爻六亲)→ 世应(八宫世位 → 世 / 应爻)→ 伏神(用神不上卦时取本宫首卦同位,附飞伏生克与出伏判定)→ 旺衰(月建 / 日辰 → 用神五态与全卦逐爻状态)。未选询问方向时明确写「未选询问方向(综合),未取用神」,不再误写成「未指定所问之事」。
|
|
46
|
+
- **八字两层**:旺衰分值(日主 / 月令权重 / 通根 / 天干帮扶耗泄 → 分值、档位与 detail)与格局取用(月令格与取格依据、十神分量、调候 → 主格 / 兼格、喜忌、有争议五行)。
|
|
47
|
+
- **紫微一层**:格局命中条件(命宫、五行局、命主身主、命中数 → 逐条命中的格局与 evidence;未命中时写明只是不在已收录清单内)。
|
|
48
|
+
- **只读与可复现**:`buildTrace` 只读 `compute` 结果,不重算、不读时间与随机,`trace` 开关前后盘面逐字节一致、影子盘 ID 不变;生成失败只挂 `traceError`,不影响主结果。`renderText` 追加【推导链】段,宿主 `metaphysics_chart` 同步暴露 `trace` 布尔参数。
|
|
49
|
+
- **界面**:结果顶部新增「推导链」入口(显示层级链与层数),点开为右侧抽屉;每层用 `<details>` 逐级展开,先给规则与结构化输入,再给结果与出处。关闭按钮 44px、遮罩与 Esc 可关、关闭后焦点回入口;窄屏抽屉占满 100vw,深色只换变量,打印隐藏。六爻的询问方向一开始就参与 compute(否则用神会退成综合),改方向时只按新方向重算用神 / 旺衰 / 伏神三层,不重摇一卦。独立页 `#out` 的入场动画从「位移 + 淡入」改为纯淡入——`transform` 动画会为 fixed 子元素建立 containing block,曾把抽屉关在结果卡片里。
|
|
50
|
+
- **测试**:新增 `test/trace.test.mjs`(61 条):五层 / 两层 / 一层的字段与顺序、每层 rule / inputs / result / source、伏神在爻上与不上卦两种分支、未选方向说明、改方向 refresh 不重摇也不改原结果、trace 不改盘与不改影子盘 ID、文本层、面板抽屉与转义、面板 / 独立页接线、宿主 schema 与执行。统计 **105 个测试文件 / 4711 条断言**,七道闸全绿。
|
|
51
|
+
- **界面验证**:390×844 深色下抽屉贴视口右侧(`rect = 0,0,390,844`)、5 层、首层展开、关闭按钮 44px、无横向溢出;关闭后 `aria-hidden=true`。900px 浅色与既有结果卡均无溢出。
|
|
52
|
+
|
|
53
|
+
## 0.51.0(2026-10-31)
|
|
54
|
+
|
|
55
|
+
给每张盘一个可复制的「影子盘」ID,并把 `client.js` 真正压缩(路线图 A4 + D1)。
|
|
56
|
+
|
|
57
|
+
- **A4 影子盘(引擎)**:新增 `engine/fingerprint.js`(规范化 JSON + 35 位短哈希,纯函数)。`compute({ shadow: true })` 在结果上挂 `shadow: { id, baseId, version, system, payload, reproducible, asOfPinned }`。`id` 含版本,`baseId` 不含版本;同一组归一化参数(键序无关、默认值等价、地址与等值经度等价)在任何机器上得到同一 ID,版本升级只改 `id`、不改 `baseId`。
|
|
58
|
+
- **版本 diff**:`shadowDiff(previous, current)` 只在 `baseId` 相同时比对,复用 `engine/diff.js` 的标签 / 根因 / 分类,返回「几处变化、根因字段旧值→新值、连带分类」;`compute({ shadow: true })` 的结果可直接比,也可以比 `shadowSnapshot()` 存下的轻量快照。面板与独立页把快照写进本地存储(最多 24 张盘),同盘重排时自动与上次比对,升级后展开就能看到字段级差异。
|
|
59
|
+
- **随机起卦不撞 ID**:塔罗 / 六爻未给 `seed` 时,实际抽到的牌面 / 六爻值会算进指纹,两次不同抽牌得到不同 ID,并标「不可复算」;给定 `seed` 或六爻值时同参数同 ID。八字 / 紫微未固定 `asOf` 时提示「流年随此刻变化」。
|
|
60
|
+
- **界面**:结果上方新增影子盘卡(ID 等宽、一键复制、版本与基础指纹),有跨版本 / 跨次变化时展开「与上次同盘比对」;共享调色板,深色只换变量,窄屏复制按钮 44px、无横向溢出,打印时强制展开并隐藏复制按钮。面板与独立页同一渲染路径。
|
|
61
|
+
- **工具**:宿主 `metaphysics_chart` 新增 `shadow` 布尔参数,版本从 `package.json` 注入;`renderText` 追加【影子盘】行。独立页由 `build-html` 注入 `window.__MP_VER`,不再落到 `dev`。
|
|
62
|
+
- **D1 压缩**:`tools/build-client.mjs` 用 esbuild(`minify + target es2020 + charset utf8`)压缩,未安装时退回保守去注释;`client.js` 从 **983KB → 640KB**,gzip **329KB**。`check-bundle` 改为在未压缩源码上逐模块定位、对真实文件做整文件与宿主形态执行,并与压缩重建结果逐字节比对;CI 增加 `npm ci`;`client-bundle` 新增体积断言(低于源码 80%、gzip < 360KB),并改走统一断言工具(失败会真正退出非零)。路线图原定 gzip < 100KB,不做内容拆分与懒加载无法达到,这里按实际体积设闸并写明。
|
|
63
|
+
- **界面验证**:390×844 深色下 `scrollWidth = 390`、卡片宽 366、复制按钮 44px、卡片底色 `rgb(33,31,24)`;900px 浅色下卡片 848、复制按钮 40px;模拟旧版本存档后自动 diff 正确显示「版本变化 + 1 处字段」。
|
|
64
|
+
- **测试**:新增 `test/shadow.test.mjs`(55 条):ID 确定性 / 键序 / 默认值 / 参数敏感性 / 体系 / asOf、地址与经度等价、版本只改 id、随机牌面不撞 ID、diff 根因与分类、文本层、面板转义与复制按钮、localStorage 自动对盘、宿主 schema 与版本注入。统计 **104 个测试文件 / 4650 条断言**,七道闸全绿。
|
|
65
|
+
|
|
66
|
+
## 0.50.5(已发布 2026-10-31)
|
|
67
|
+
|
|
68
|
+
修 GitHub issue #1:「身弱喜火土,给分析成忌火土了」——顺带修掉同源的「同一五行同时出现在喜用与忌神」。
|
|
69
|
+
|
|
70
|
+
- **问题在哪**:`engine/geju.js` 的 `yongshenOf` 先按扶抑定喜忌,再让调候在「调候优先」时把 `climate.avoidElement` 插进 `avoid`;如果这个五行本来就在扶抑的 `favor` 里(例:偏弱己土燥盘,火为印、喜火,调候又忌火),两份列表就会重叠。摘要行仍写「喜水火土……忌金木」,但面板、解读、喜忌筛选各取一份,用户看到的就是「一会儿喜火、一会儿忌火」。身强寒湿盘的水同理。
|
|
71
|
+
- **修法**:调候所忌若已在 `favor`,不再插入 `avoid`,改记入 `disputed`(元素、扶抑角色、调候气候),喜用保留该行;调候所需要素仍按原逻辑从 `avoid` 移除。新增 `disputedTenGods`;`detail`、摘要「用神」「寒暖」行、解读「用神」「寒暖」节、白话、面板用神行与寒暖卡都标「有争议」,并说明「保留在喜用,不列入忌」。没有冲突的盘不出现该标记。
|
|
72
|
+
- **口径**:这是「两派并存」的显式标注,不改旺衰、不改调候判断、不替用户选边;扶抑与调候仍然各自成立,只是不允许同一行同时被判喜与忌。
|
|
73
|
+
- **界面验证**:390px 宽度下,争议行在 366px 内折 2 行,喜忌行与寒暖卡(338/338)均无横向溢出;浅色正文对比度 4.77:1、深色 7.73:1。
|
|
74
|
+
- **测试**:新增 `test/yongshen-disputed.test.mjs`(23 条):两张真实争议盘(1962-03-22 偏弱燥火、2000-01-01 偏强寒湿水)的 favor/avoid/disputed/disputedTenGods、无冲突盘不误报、216 盘扫描喜忌无交集、文本 / 解读 / 白话 / 面板四处可见、白话与解读内嵌一致。统计 **103 个测试文件 / 4593 条断言**,七道闸全绿。
|
|
75
|
+
- **讨论群二维码**:GitHub README 的外部图片会被改写成 `camo.githubusercontent.com`,部分网络下断链;改挂 GitHub Release 附件直链(不经 camo / raw),并保留微信邀请链接兜底。Chrome 内实测 1161×1623 正常加载,README-only,不改运行时与断言数。
|
|
76
|
+
|
|
77
|
+
## 0.50.4(已并入 0.50.5)
|
|
78
|
+
|
|
79
|
+
把「口径对照」从命令行搬到结果下面:同一个盘只换一个开关(晚子时 / 真太阳时 / 闰月归月 / 奇门取局 / 晚子时归日),差在哪几个字,现在展开就能看见。
|
|
80
|
+
|
|
81
|
+
- **缺口在哪**:`engine/diff.js` 与 `tools/caliber-diff.mjs` 0.24 起就有,但只停在 CLI;面板与独立页切口径后只给新盘,用户不知道变的是日柱、命宫还是起运。紫微与奇门的差异还落成 `soul.ganzhi`、`siZhu.day` 这种原始路径,读不出来。
|
|
82
|
+
- **引擎**(`engine/index.js`):新增 `caliberCompare(args)`,按 `CALIBER_SWITCHES` 把**当前口径**与**另一档**各排一次,返回 `{currentLabel, altLabel, total, summary, roots, categories}`;对照前剔掉 `cross / verifyPast / question / direction` 等只影响解析与附加模块的参数。`renderText` 在 `result.caliber` 存在时追加【口径对照】段。
|
|
83
|
+
- **标签与根因**(`engine/diff.js`):补紫微(命宫 / 身宫 / 宫位 / 星曜 / 大限 / 飞星 / 格局)与奇门(四柱 / 局数 / 阴阳遁)的标签;`soul.ganzhi`、`siZhu.day`、`ju`、`dayun.jiao.at` 等进入根因表。口径回显字段(`juMethod / juMethodNote / lateZiHourMode / leapPolicy`)不再算差异——此前奇门两张完全相同的盘会被报成「2 处」,非闰月紫微也会凭空多 1 处。
|
|
84
|
+
- **界面**(`src/panel-kit.js` / `src/app.js` / `src/web-ui.js`):结果下新增折叠的「口径对照」卡;summary 先用一句话说「几组开关中几组影响此盘」,展开后逐行给「当前 · A → 换成 · B」、根因旧值→新值、连带分类计数。只对八字 / 紫微 / 奇门出现;对照失败时不影响主结果。卡内走共享调色板,深色只换变量;窄屏隐藏「展开」提示、summary 保持 44px 触摸目标;打印时强制展开。
|
|
85
|
+
- **工具与 CLI**:根 `index.js` 新增 `diff: true`(默认关,每次多排 2–3 张盘);`tools/caliber-diff.mjs` 改用同一个 `caliberCompare`,开关表只维护一份;`tools/build-client.mjs` 把 `diff` 模块打进 `client.js`。
|
|
86
|
+
- **口径**:只列同一组输入下的逐字段差异与根因,不判哪套口径更准,不改盘、不折吉凶;没有根因时如实写「无单一根因」(例如真太阳时只改起运时刻、不改柱)。`total` 是变化字段数,不是分数。
|
|
87
|
+
- **验证**:390×844 同源 iframe 实测(1996-01-19 23:40 · 安徽池州):`scrollWidth 375 < innerWidth 390`,对照卡 351px,展开后无横向溢出;强制展开深色媒体块后卡底 `#211f18`、正文与注 6.74:1、标题 6.49:1。
|
|
88
|
+
- **测试**:`test/caliber-diff.test.mjs` 由 19 条扩到 129 条——开关表、标签 / 根因、口径回显忽略、八字 / 紫微 / 奇门真实盘独立复算(当前→另一档方向、`total / summary / roots` 与 `diffObjects` 对拍)、无变化与无根因边界、XSS 转义、面板 / 独立页 / 工具接线。统计 **102 个测试文件 / 4570 条断言**,七道闸全绿。
|
|
89
|
+
- **文档**:讨论群二维码换新图(`docs/assets/dsh-metaphysics-group.jpg`,11 月 6 日前有效),README 有效期同步;旧 PNG 删除、改用新文件名,避免旧图缓存继续命中。不涉及运行时与断言数。
|
|
90
|
+
|
|
91
|
+
## 0.50.3(已并入 0.50.5)
|
|
92
|
+
|
|
93
|
+
给「岁运提示」补上最后一段干支关系:大运与本命四柱的伏吟 / 反吟。以前只比「大运 × 流年」和「流年 × 本命柱」,大运压到本命柱上的那一步一直空着,知识卡的 note 也明写着「未逐年标注」。
|
|
94
|
+
|
|
95
|
+
- **引擎**(`engine/bazi.js`):逐年 `suiyun.signals` 新增 `大运伏吟`(当值大运与本命某柱干支相同)与 `大运反吟`(天克地冲),对年 / 月 / 日 / 时四柱逐柱比对;target 写成「第N步大运·某柱」,detail 写明具体干支。整步大运都在,随每年重复列出,note 与解析层都写明「不当成逐年加重」。原四类信号与顺序不变,`岁运并临` 仍优先于同一组大运的 `运年反吟`。
|
|
96
|
+
- **接线**:摘要、解析层、面板沿用旧路径;摘要与面板 chip 对「大运」类信号也带柱位(`大运反吟(第8步大运·日柱)`),面板 chip 悬停仍给完整依据。`suiyunClassicOf` 口径不变:任一类信号出现就附《三命通会·卷二·总论岁运》原文。
|
|
97
|
+
- **口径**:仍只标干支重复与对冲,不折分数、不判吉凶;大运伏吟/反吟是整步十年的背景,不是逐年加码。选这一条而不是六爻应期具体日期,是因为后者在清单里明确要先建 20 条以上《卜筮正宗》应验日期对拍集,缺语料时输出日期等于拍脑袋。
|
|
98
|
+
- **文档与知识卡**:`bazi-suiyun` 由「四类」改「六类」,note 改为交代「连续多年出现、不逐年加重」;README「岁运提示」、清单 §3 与 0.50.3 说明块同步。
|
|
99
|
+
- **测试**:`test/suiyun.test.mjs` 的独立参照补上两类(六类信号逐条复算),新增 1950 盘钉住「大运伏吟整步重复 2026–2028」、同年 type+target 不重复、摘要与面板柱位、知识卡六类与 note;`test/sanming.test.mjs` 的无信号样例改用 1996-02-18(1984-10-18 在新口径下已有大运信号)。统计 **102 个测试文件 / 4460 条断言**,七道闸全绿。
|
|
100
|
+
|
|
101
|
+
## 0.50.2(已并入 0.50.5)
|
|
102
|
+
|
|
103
|
+
给 0.49.0 的「人元司权」补上原文出处:录入《三命通会》卷二·论人元司事(典藏网 7529),并如实并列该本与本插件不同的日数分法。
|
|
104
|
+
|
|
105
|
+
- **缺口在哪**:0.49.0 起每张八字盘都会算「生在本月第几日、哪一干当权」,知识卡却只写「之说见《渊海子平》」,没有卷次、没有链接,解释层也没有一句原文——这是全插件少数「有算法、无出处」的地方。
|
|
106
|
+
- **原文**(`engine/classics.js`):新增 `smt-renyuan`,照录「故支吕所藏者主命,谓之人元……寅中有艮土用事五日,丙火长生五日,甲木二十日;二月建卯,卯中有甲木用事七日,乙木二十三日」,81 字逐字核验通过;来源本写作「支吕」,按「异文不改字」原样保留,不替它改字或圆场。
|
|
107
|
+
- **口径分歧**:该本寅月作 5/5/20、卯月作 7/23,本插件通行 30 日表作 7/7/16、10/20;`plain` 与解析层都写明「不是同一套分法、不改取格」,两表并列。新增 scene「人元」,与「岁运」一样不进五条取条表:`compute` 在有 `renyuan` 时挂 `r.renyuanClassic`,摘要人元行加「原文见《三命通会·卷二·论人元司事》」、解析层人元节附原文与白话、面板经通用 section 渲染自动出现;`RENYUAN_TABLE`、旺衰与取格一行未改。
|
|
108
|
+
- **知识卡**:`bazi-yueling-siquan` 的 detail/source/note 补上 7529 与 5/5/20,状态仍为 `variant`。
|
|
109
|
+
- **文档**:README「古籍原文」「人元司权」「致谢」三处、清单 §二.1 / §三表 / §四.1 与 0.50.2 说明块同步。
|
|
110
|
+
- **测试**:`test/classic-quotes.test.mjs` +4(scene 枚举加「人元」、原文/出处/plain、不进五条),`test/sanming.test.mjs` 由 17 条改为 18 条并 +11(结果层/摘要/解析层/面板/知识卡),`test/renyuan.test.mjs` +11(用 `RENYUAN_TABLE` 独立对照原文日数、结果层接线、5/5/20 可见)。统计 **102 个测试文件 / 4432 条断言**,七道闸全绿。
|
|
111
|
+
|
|
112
|
+
## 0.50.1(已发布 2026-10-30)
|
|
113
|
+
|
|
114
|
+
宿主侧栏面板的首屏与独立页并轨:三组卡片、最近用过、分组↔平铺、窄屏收纳,全部从同一份数据生成,不再「页面一套、侧栏一套」。
|
|
115
|
+
|
|
116
|
+
- **缺口在哪**:0.39.0 给独立页做了分组首屏(问一件事 / 看一个人 / 查日子、最近用过、分组↔平铺),面板一直是 19 个 tab 平铺加自己那套 `.mp-tabs`——既没有最近用过,也没有「每组先露 4 项」的收纳;窄侧栏里 tab 条先吃掉大半屏,卡片与表单被推到下面。
|
|
117
|
+
- **唯一数据源**(新增 `src/groups.mjs`):三组标题、白话提示与 19 个入口(含「人生K」铺满整行)只写一份。`tools/build-html.mjs` 用它在构建时生成页面分组 HTML;`tools/build-client.mjs` 用 `JSON.stringify` 注入 `window.__MPGroups` 给面板。页面产物与面板不再各抄一份,`test/panel-first-screen.test.mjs` 逐项对拍页面生成的入口与数据源。
|
|
118
|
+
- **面板首屏**(`src/app.js`):React 版分组卡片(`.mp-tgroup` / `.mp-tool`)、最近用过(`mp.recent.tabs`,最多 3 条,先过 TABS 白名单)、分组↔平铺开关(`mp.first.view`,默认分组)、窄屏折叠(「还有 N 个」/「收起」,带 `aria-expanded`)。两套入口共用 `activate` → `recordRecent` + `switchTo`,排盘参数与结果路径不变。
|
|
119
|
+
- **平铺 tab 重构**:19 个 tab 从「分段控件」改为圆角胶囊网格(与独立页同形),窄屏单行横滑、44px 触摸目标;分组视图下 tab 条整体隐藏(`.mp-tabs.hide`)。
|
|
120
|
+
- **收纳用容器查询**:侧栏宽度不等于窗口宽度,`@container (max-width:560px)` 让 420px 侧栏与 390px 手机都按「每组 4 项 + 还有 N 个」收,不再用窗口媒体查询猜。
|
|
121
|
+
- **口径**:分组只是另一套入口——19 个 tab 原样保留,不改变任何默认值、排盘参数与结果;存储不可用(隐私模式)只少记「最近用过」,面板照常可用。
|
|
122
|
+
- **测试**:新增 `test/panel-first-screen.test.mjs` 40 条——分组数据、唯一数据源、页面产物对拍、面板接线、折叠与降级。统计 **102 个测试文件 / 4406 条断言**,七道闸全绿。
|
|
123
|
+
|
|
124
|
+
## 0.50.0(已并入 0.50.1)
|
|
125
|
+
|
|
126
|
+
知识卡 `liuyao-yingqi` 一直写着「应期只作时间窗口的提示」,引擎却一行都没给:用神旺衰算了、伏神出伏算了,轮到「什么时候见分晓」只剩「未做」。这一版把诚实的那一半补上——列出该留意的地支与快慢方向,仍不给具体日期。
|
|
127
|
+
|
|
128
|
+
- **引擎**(`engine/liuyao.js`):新增 `yingqiWindow(result, useGod, { monthBranch })`。用神在卦上取用神、不上卦取伏神,每支列出逢值(本支)、逢冲(对支)、逢合(六合支)三支;用神旬空时本支追加「出空填实」、对支追加「冲空」。快慢按月建五态:旺 / 相 → 偏速,休 / 囚 / 死 → 偏缓,月破或旬空 → 待解,缺月建 → 未定;用神两现时逐支归并去重,快慢不一致记未定。结果挂在 `r.yingqi`。
|
|
129
|
+
- **四处可见**:摘要加「应期线索:偏缓 · 逢值/逢冲辰 · …(只列地支,不出日期)」;解析层新增「应期线索」一节,逐条写月态与触发支;白话加一句「应期上大体偏远……不换算成具体哪天」;面板在伏神与进退之间加一排 chip(偏速绿、待解琥珀)。
|
|
130
|
+
- **口径**:只做「该留意哪一支」与快慢方向——不换算日期、不排先后、不判忌神受制、不叠动变连环;近事以日计、远事以月计,用哪把尺由事情远近决定,不代选。知识卡 `liuyao-yingqi` 仍为 `variant`,`liuyao-yingqi-exact` 仍为 `todo`(具体日期未做)。
|
|
131
|
+
- **口径变更连带**:解析层「未纳入」原写「应期仍未做」,现改为「应期的具体日期未做」;`test/liuyao-chufu.test.mjs` 第 212 行同步改断言(从锁旧句改为锁新句),不涉及伏神判定本身。
|
|
132
|
+
- **文档**:README「六爻」「精度与口径」两条、清单 §3.1 / §4.3 与 0.50.0 说明块同步;package description 补「应期线索」。
|
|
133
|
+
- **测试**:新增 `test/liuyao-yingqi.test.mjs` 73 条——12 支冲合独立复算、64 卦 × 13 组月建(12 支 + 缺月建)× 4 方向 3328 盘逐条复算(月态 / 月破 / 旬空 / 快慢 / 归并去重)、旬空 / 月破 / 用神两现 / 伏神 / 缺月建 / 两现快慢不一六条边界、四处可见与不出现日期、旧结果兼容、确定性。统计 **101 个测试文件 / 4366 条断言**,七道闸全绿。
|
|
134
|
+
|
|
135
|
+
## 0.49.3(已并入 0.50.1)
|
|
136
|
+
|
|
137
|
+
离线页(`命理排盘.html`)的「农历」tab 一直是坏的:转换方向那条分段控件从来没显示出来,农历日期怎么填都被判格式错;同一次真机检查还量出深色主题下「选中态实心底上的白字」只有约 3:1。这一版把断链接通,把强调面文字换成变量(两套配色各自过 WCAG),并顺手收掉窄屏闰月勾选框被拉高的毛病。
|
|
138
|
+
|
|
139
|
+
- **断链**(`src/web-ui.js`):① `setTab` 的速查子表单显隐漏了 `#qk-convert`,只有「公历 → 农历」的默认分支能跑,切到「农历 → 公历」的入口根本看不到;② 农历日期正则写成 `/^(d{4})-(d{1,2})-(d{1,2})$/`(少反斜杠),`d` 被当字面量,任何输入都匹配失败;③ 日期标签用硬编码名单判「起卦」,convert 漏在名单外被标成「起卦日期(公历)」。现改为与面板同一套正则,标签跟随 `TIME_KIND` 的 date 类写成「日期(公历)」。
|
|
140
|
+
- **深色强调面**(`tools/build-html.mjs`):深色块里的 `.tab.on,.seg button.on,.go{color:#14130f}` 写在基础规则之前,同优先级被后面的 `color:#fff` 盖掉——深色下实际是白字压浅珊瑚底,约 3:1。改为 `--accent-bg / --accent-bg2 / --on-accent / --on-accent-soft` 四个变量,7 处实心强调面(印章、选中 tab、分组卡片、评分格、主按钮、分段按钮、追问/chip)统一走变量。浅色仍是白字压 `#a72c23 → #7d1f18`(6.9 / 9.8:1),深色改为深字压 `#f0a38e → #e2755f`(9.1 / 6.1:1),渐变两端都 ≥4.5:1;页面样式里不再出现 `color:#fff`。
|
|
141
|
+
- **口径**:这是一次设计口径变更,先把 `test/theme.test.mjs` 第三节改成锁变量与逐端对比度(含副文字按 alpha 叠色后复算),再改实现;`test/first-screen.test.mjs` 里锁旧元素规则的一条同步换成 `--on-accent` 规则。
|
|
142
|
+
- **窄屏(≤640px)**:`#qk-convert` 独占整行,方向分段按钮不再折行;闰月改用 `.field.check`,勾选框保持 18px,触摸区由外层 label 撑到 44px(此前继承输入框的 `min-height:44px`,变成 18×44 长条)。
|
|
143
|
+
- **验证**:真 390×844(CDP 设备模拟)浅/深各跑一遍——无横向溢出(scrollW=390)、`农历2026年九月十七 ⇄ 2026-10-26` 正常出结果、日期标签为「日期(公历)」、勾选框 18×18、tab 与主按钮触摸目标 44/48px。
|
|
144
|
+
- **测试**:新增 `test/convert-ui.test.mjs` 31 条(两个入口同一套正则、2026-9-17 与闰六月前后边界、每个 `#qk-*` 都有显隐接线、闰月与 datetime 透传、格式错误文案走 textContent);`test/theme.test.mjs` 现为 65 条。统计 **100 个测试文件 / 4293 条断言**,七道闸全绿。
|
|
145
|
+
|
|
146
|
+
## 0.49.2(已并入 0.50.1)
|
|
147
|
+
|
|
148
|
+
黄历卡片里的二十八宿,把「壁水貐」写成了「壁水獝」、「胃土雉」写成了「胃土彘」——两个字都只是动物名,不影响排盘、宜忌与宿值日,但它是用户每天在摘要和面板上能看到的原文。这一版按通行二十八宿名逐字改正,并把整张表在测试里独立重录一遍,逐字对拍。
|
|
149
|
+
|
|
150
|
+
- **数据**(`engine/almanac.js`):`MANSIONS` 的壁宿动物 `獝` → `貐`、胃宿动物 `彘` → `雉`;宿名仍按「宿·五行·动物」写法,其余 26 宿未动。四宫、吉凶、五行、值日轮转规则一行未改。
|
|
151
|
+
- **口径**:值日宿仍按「日支 + 星期」定,28 日一循环;壁宿落周三(水)、胃宿落周六(土),与七曜一致。本次只改动物名,不改任何日期落到哪一宿。
|
|
152
|
+
- **文案**:`engine/almanac.js` 顶部「诚实边界」注释同步——二十八宿、胎神、值日神、吉神方位已收录,未收录的只剩逐日全量吉凶神煞与彭祖百忌(旧注释把已收录项也写成了「未收录」,与返回值的 `scope` 打架)。
|
|
153
|
+
- **测试**:新增 `test/almanac-xiu.test.mjs` 60 条——通行表在测试里独立录 28 行逐字对拍(含壁水貐、胃土雉)、四宫各七、动物不重、12 支 × 7 日的七曜顺序、13 段 56 天的 28 日循环与 28 日不重不漏、2026 全年不再出现「獝」「彘」、壁/胃的星期锚点、结果层/文本摘要/面板三处可见、同日两次逐字段一致、400 天宿五行与星期七曜一致。统计 **99 个测试文件 / 4262 条断言**,七道闸全绿。
|
|
154
|
+
|
|
155
|
+
## 0.49.1(已并入 0.50.1)
|
|
156
|
+
|
|
157
|
+
「岁运提示」是引擎里唯一一节没有原文支撑的能力:逐年标出岁运并临 / 运年反吟 / 流年伏吟反吟,读法却是自己写的;知识卡 `bazi-suiyun` 的出处只写「见《三命通会》《渊海子平》」,没有卷次也没有链接。这一版补上《三命通会》卷二「总论岁运」原文,并顺手记下一处口径分歧。
|
|
158
|
+
|
|
159
|
+
- **原文**(`engine/classics.js`):新增 `smt-suiyun`(卷二·总论岁运,典藏网 7539),照录「行运以生月为运元,最怕行运与太岁冲克,若岁运冲月必祸;若岁运与日相对,谓之返吟,岁运压日,谓之伏吟,二者不利六亲,非横破财,不为吉兆。」——用 `verify-quotes.pl` 对章页逐字核验通过(67 字,连续子串),白话自撰。
|
|
160
|
+
- **口径分歧写进 plain**:原文的「返吟」指岁运与日柱相对、「伏吟」指岁运压日;本插件按通行用法取「干支相同为伏吟、天克地冲为反吟」,两者并列、不合并。末句「不利六亲、破财」是旧说的重话,只作变动提示。新增 `scene: '岁运'`,不挂格局 tag。
|
|
161
|
+
- **不进五条上限**(`suiyunClassicOf`):`classicsFor` 仍是「格局两条 + 气候两条 + 总纲一条」;岁运原文只在 `liunian` 真有信号时随该节出现——原文讲的正是冲克,没冲没克时挂出来只会误导。结果挂 `r.suiyunClassic`。
|
|
162
|
+
- **三处可见**:摘要「岁运提示」行末加「古籍见《三命通会·卷二·总论岁运》」;解析层「岁运提示」节补原文与白话;面板岁运 chip 下加一行原文(悬停看白话,样式只走 `--muted`),无信号时三处都不出现。
|
|
163
|
+
- **知识卡**(`engine/interpret-knowledge.js`):`bazi-suiyun` 的 source 换成带链接的《三命通会》卷二·总论岁运,detail 写明返吟/伏吟的定义分歧;状态仍 `variant`。
|
|
164
|
+
- **口径**:只补出处与定义对照,四类信号的判定、分档与「不判吉凶」的边界一行不动。
|
|
165
|
+
- **文档**:README「古籍原文」「岁运提示」与致谢、清单 §二·7 与文末注同步;三命通会条目 16 → 17。
|
|
166
|
+
- **测试**:`test/sanming.test.mjs` +14 条(原文抽检、章名/链接、scene 与 tag、不进五条表、有/无信号两向的结果层/摘要/解析层/面板表现、知识卡出处),条目计数 16 → 17;`test/classic-quotes.test.mjs` +4 条(原文、出处、plain 口径)并把 scene 枚举加入「岁运」。统计 **98 个测试文件 / 4202 条断言**,七道闸全绿。
|
|
167
|
+
|
|
168
|
+
## 0.49.0(已并入 0.50.1)
|
|
169
|
+
|
|
170
|
+
「月令是什么」此前只答到月支本气:知识卡 `bazi-yueling-siquan` 写着「月内分日轮值」,引擎却一个字段都没给,面板与摘要里也看不到「生在本月第几日、哪一干当权」。这一版把《渊海子平》的人元司权分日落进引擎与解释层,补上清单 §3.3 里挂得最久的争议项。
|
|
171
|
+
|
|
172
|
+
- **引擎**(`engine/bazi.js`):新增 `RENYUAN_TABLE` 与 `renyuanOf(monthBranch, birthJdn, termJd)`——固定通行 30 日表(余气 → 中气 → 本气,合计 30 日,如寅月戊7丙7甲16),从「节」的当日算第 1 日,日差取本盘所用时刻(含真太阳时)所在日;第 31 日以后不硬分摊,按本气算并标 `beyond`。返回当权干与五行、所在日段、下一段距今天数、是否在本柱藏干表内。结果挂在 `bazi.renyuan`,并带 `term`(起算的节与时刻)。
|
|
173
|
+
- **摘要**(`engine/index.js`):节气行后加一行「人元:X月第N日,干+五行司权(各段日数)」,超出 30 日表时注明。
|
|
174
|
+
- **解析层**(`engine/interpret.js`):新增「人元司权」一节,说明从哪个节起算、这一日谁当权、下一段几日起交;同时写明分日只作解释层细节,**不改取格**;司权表比本柱藏干表宽的地方(子月壬、卯月甲、午月丙、酉月庚、亥月戊只出现在司权表)两表各照原样。
|
|
175
|
+
- **知识卡**(`engine/interpret-knowledge.js`):`bazi-yueling-siquan` 的 detail 与 note 补齐实现口径,状态仍为 `variant`——7/7/16、9/3/18 等分法未并列实现,轮值不参与旺衰与取格。
|
|
176
|
+
- **口径**:只认「节」不认「气」;节当日为第 1 日;30 日表固定,不按流派切换;第 31 日起按本气;司权与取格、旺衰解耦,删掉该字段后 `primary` / `favor` 逐字不变。
|
|
177
|
+
- **文档**:README「人元司权」一条;清单 §3.3 与 §4.1 同步,并补实现说明块。
|
|
178
|
+
- **测试**:新增 `test/renyuan.test.mjs` 361 条——逐支核表(合计 30、连续、五行、末段为本气、2–3 段)、纯边界(首日/末日/下一段/第 31 日/第 0 日夹取)、12 张真实盘独立复算日差、已知盘 1990-05-12(巳月第 7 日庚)与 1990-11-08(亥月第 1 日戊,不在藏干表)、2023-06-05(第 31 日按本气)、立春前后 30 分钟切换、删字段不改格、确定性、摘要/解析层/知识卡口径,并禁绝「一定/必然/注定/百分百」。统计 **98 个测试文件 / 4185 条断言**,七道闸全绿。
|
|
179
|
+
|
|
180
|
+
## 0.48.0(已并入 0.50.1)
|
|
181
|
+
|
|
182
|
+
在 390×844 的真视口(无头 Edge + DevTools 协议,浅色与系统深色各跑一遍)里把「交叉验证」和三张表量了一遍:大运表六列排到 748px,屏幕只露出左半边,右边界既没有渐隐也没有「还能滑」的提示;交叉验证是五段「八字——…;紫微——…;判断:…」的长句连读;表头 11px 的 `--label` 对 `--band` 只有 3.51:1;目录链接 22px、证据摘要 33px、名词解释 22px,都够不着 44px 的触摸目标。这一版按测量结果改样式与结构,`test/theme.test.mjs` 锁的深色/打印/窄屏规则一条没动,七道闸全绿。
|
|
183
|
+
|
|
184
|
+
- **交叉验证改对照卡**(`engine/crosscheck.js`、`src/panel-kit.js`):新增 `crossSection(cross)`,把文本和 `items` 一起交给面板——同一份数据两个去处,面板不用再拆文本。每个方面一张卡:标题行带「同向 / 有张力 / 互补」语气标签(绿 / 琥珀 / 蓝),八字、紫微各占一栏,注释放最后一行;≤640px 改单列,标签跟正文走。Markdown 与工具输出仍是原来的五行文本,口径不变。
|
|
185
|
+
- **三张表不再横着截断**:渲染时给每个 `td` 打 `data-label`、表头加 `scope="col"`;≤640px 隐藏表头,一行一张卡、每格用列名当行标,首列抬成卡头。390px 下大运表从 748px 横滑变成 342px 宽的可读卡片,触发事件表同理(418px → 342px);宽屏与打印仍是原表格。
|
|
186
|
+
- **对比度**:表头从 `--label` 改 `--ink2`(浅色 3.51 → 10.53:1,深色 9.98:1);卡内标签与备注用 `--muted`(5.29 / 6.74:1)。三档标签、目录链接、正文在两套变量下逐对算 WCAG 亮度比,全部 ≥4.5:1。
|
|
187
|
+
- **触摸目标**:窄屏目录改单行横滑胶囊(隐藏滚动条、首尾留 11px),链接与证据摘要、名词解释摘要统一 `min-height:44px`;390px 实测全部 44px,折叠标题 ≥46px。正文宽度不变,页面横向溢出为 0。
|
|
188
|
+
- **入口统一**:独立页与面板都改用 `Engine.crossSection`,不再各自拼 `crossText`。
|
|
189
|
+
- **侧栏也生效**:dsh 侧栏是「窗口宽、报告窄」,`@media` 不触发;`.mp-it` 声明为查询容器,同一批窄屏规则另挂一份 `@container (max-width:640px)`。实测把报告放进 420px 容器(窗口 1280px):表格 1092px → 396px 且不再横滑、目录链接 44px、对照卡单列,与 390px 视口下的结果一致。
|
|
190
|
+
- **测试**:新增 `test/narrow-report.test.mjs` 52 条——结构(五张卡、十个分栏、`data-label` 数量、转义)、窄屏样式规则(含容器查询版)、触摸目标、两套调色板逐对对比度,并反向锁住「表头若改回 label 会掉到 3.51:1」。统计 **97 个测试文件 / 3824 条断言**,七道闸全绿。
|
|
191
|
+
|
|
192
|
+
## 0.47.1(已并入 0.50.1)
|
|
193
|
+
|
|
194
|
+
交叉验证是 README 里挂了很久的能力,但测试只在外围点了六下(条目数、三档词、文本出现),五项判定的阈值、性别分支与节奏真值表一条没锁;顺手查出两处「说得比数据多」的文案。
|
|
195
|
+
|
|
196
|
+
- **测试补真**(新增 `test/crosscheck.test.mjs`,71 条):把交叉验证当纯函数测——事业「官杀 + 食伤 ≥ 2」、财富「财 ≥ 2」、感情按性别取「妻星(财)/ 夫星(官杀)」的 1.9 / 2.0 边界;节奏用 5 档 × 煞星轻重共 10 组真值表逐格核判断与说明;再用 10 张真实盘 × 男女共 20 组,从原始 `godStats` / 宫位星曜 / 大运档位独立复算五项判断与文案;另锁条目恰好五项、次序固定、只带六个字段(没有合并分数)、输入不被改写、两次调用同结果、八字入口与紫微入口的对照逐字节一致、`crossText` 五行结构。用「事业阈值 2 改成 3」做过变异检查:2 条立即变红,恢复后 71 条全绿。
|
|
197
|
+
- **文案与实现对齐**(`engine/crosscheck.js`):① 节奏一项原先只有一句「一边顺、一边压」,但八字大运为「平」时也会套用——1980-03-05、2005-01-13 等盘就是「平 + 紫微煞星 2 颗」。现在按实情分三句:八字顺而紫微煞星多、八字偏紧而紫微平静、八字为平而紫微煞星多,各写各的处理方式。② 大限没取到时,紫微侧原来写成「大限未取到;无煞星」,把缺数据说成了没有问题;现在只写「大限未取到」。③ 任一侧当前阶段缺失(八字未起运、紫微大限不在范围)时,判断由「同向 / 有张力」改为「互补」,说明里点名缺的是哪边,并写明「不下两边对照的结论」——不再拿「没取到」冒充「没问题」。
|
|
198
|
+
- **口径**:五项仍只并列、不合并成总分;三档仍是同向 / 有张力 / 互补,「互补」现在也明确承担「只有一边有信号」这一情形。健康项固定「互补」不变。
|
|
199
|
+
- **文档**:README「精度与口径」补一条,写明缺一侧时的标法与节奏说明的分档。
|
|
200
|
+
- **测试**:96 个测试文件 / 3772 条断言,七道闸全绿。
|
|
201
|
+
|
|
202
|
+
## 0.47.0(已并入 0.50.1)
|
|
203
|
+
|
|
204
|
+
四墓月(辰戌丑未)此前只取月令本气,藏干透了也用不上、三合会成了局也看不见;同一段代码还把戊辰、戊戌、己丑、己未当成建禄,把透干/会支取到的劫财写成「劫财格」。这一版把《子平真诠》十六「论杂气如何取用」落进引擎与原文库。
|
|
205
|
+
|
|
206
|
+
- **取格三级**(`engine/geju.js`):杂气月按「透干 → 三合会支 → 本气」取格。藏干透到年/月/时干仍优先;没有透干时,若其余三支与月支凑齐同一三合局,取局中五行对应的那一藏干(甲生辰月、年支申日支子 → 取水印);三合不齐才回本气。依据里写明走的是哪一条(透于某干 / 某某会成某局 / 以月令本气取格),会支只认三合、不认三会方。
|
|
207
|
+
- **两处误标**:`base.god === '比肩'` 原先一律给建禄格,戊辰、戊戌、己丑、己未这类「本气比肩但不在禄位」的杂气月因此冒称建禄——现加禄位校验,改判比肩格并在依据里点明「禄在巳、不在辰」;杂气月由透干或会支取到劫财时,按原文「透乙则用月劫」改判月劫格,不再落到「劫财格」。
|
|
208
|
+
- **原文与知识卡**(`engine/classics.js`、`engine/interpret-knowledge.js`):新增 `zp-zaji`(十六、论杂气如何取用,典藏网 53636),原文照录「何谓透干……透而又会,则透与会并用」、白话自撰。用神总纲位由三选一改为四选一:化气 > 四墓杂气 > 组合 > 通用总纲,杂气与组合同现时取杂气;位次不增,整节仍以 5 条为限。知识卡 `bazi-zaji-quyong` 补一条,标「各家有异说」。
|
|
209
|
+
- **口径**:原文「兼透则兼用」只给原则,落到单一格名必须择一,本插件取最先透出的那一干;会支只认三合、不认三会方;不判原文所说的「有情 / 无情」。这几点写进 README 与清单,不替分歧圆场。
|
|
210
|
+
- **测试**:新增 `test/zaji.test.mjs` 52 条,用 9 张真实盘正反两向钉住——透干压会支(1996-01-19)、会支取用(1985-02-03 / 2005-01-13 / 2002-10-13)、三合不齐回本气(1992-04-05)、非杂气月不启用会支(1979-11-13 / 1985-09-15)、建禄不误标(1989-03-05 / 1983-08-20 / 1990-04-13)、月劫三路(1985-04-05 / 1996-08-05 / 1990-10-28),并核总纲位次序、上限、确定性、摘要/解释层/面板与知识卡。`test/classic-quotes.test.mjs` +5 条,把总纲位改判为四选一并加原文抽检。统计 **95 个测试文件 / 3701 条断言**,七道闸全绿。
|
|
211
|
+
|
|
212
|
+
## 0.46.5(已发布 2026-10-30)
|
|
213
|
+
|
|
214
|
+
「问进对话」只把盘面摘要和问题送进对话,模型得自己再推一遍结论——同一张盘,面板里读到的「说人话」和对话开场可能不是一套口径。这一版把面板已算好的白话结论一并交给模型。
|
|
215
|
+
|
|
216
|
+
- **缺口在哪**(`engine/followup.js`):`askPrompt` 只读 `r.summary`,而 `interpret(r, ask)` 产出的 `answer`(直答)与 `plain`(说人话)只存在于面板结果对象 `it` 里。用户点「问进对话」后,模型看到的是原始盘面,开场结论全靠现场发挥;问法或流派稍有出入,就会与面板上的结论打架。
|
|
217
|
+
- **改动**:`askPrompt(r, { interpret })` 新增可选解析对象;有 `interpret` 时,在「所问」与「盘面摘要」之间插入「开场结论」小节,原样带上 `answer`(直答)与 `plain`(说人话),并把回答要求第 1 条改成「先沿用上面的开场结论,再用一句不用术语的话说清主线」。调用方没传时回退读 `r.interpret`(`compute({ withInterpret: true })` 的结果);两者都没有就完全不加这一节,固定骨架保持原样。
|
|
218
|
+
- **接线**(`src/app.js`):面板两处调用都带 `interpret: result.it`;`LAST` 增加 `it` 字段,输入框右侧的「命理·问」也能拿到同一份白话底稿,而不是只带摘要。
|
|
219
|
+
- **账面**:1996 盘(所问「今年考运」)提问文本 2353 → 2669 字,底稿只多 316 字(直答 106 + 说人话 144 + 小节标题),没有把提问撑成小作文;未传解析时逐字不变。
|
|
220
|
+
- **口径**:底稿只做「同一口径」的搬运,不改写、不摘要;模型仍被要求压成一句无术语的话,避免直接复读盘面术语。
|
|
221
|
+
- **测试**:`test/ask-prompt.test.mjs` +13 条——底稿小节存在且排在摘要之前、直答/说人话原样带入、回答要求指向底稿、未传解析时不加小节、`r.interpret` 自动回退、空解析对象不加空小节、无问题时底稿不说「先答所问」、带底稿仍逐字确定;`test/client-bundle.test.mjs` +2 条锁住面板两处调用都带 `interpret`、桥的 `LAST` 保留解析对象。统计 **94 个测试文件 / 3643 条断言**,七道闸全绿。
|
|
222
|
+
|
|
223
|
+
## 0.46.4(已并入 0.46.5)
|
|
224
|
+
|
|
225
|
+
0.46.3 有三处「写进了文案、没落进代码」:文末分歧清单只列前 4 条、面板仍显示「问题:(未填写)/先答所问」、归属稳定性测试并不存在。这一版把三处补齐,并把它们钉进断言。
|
|
226
|
+
|
|
227
|
+
- **分歧清单不再截断**(`engine/interpret.js`):`caveats.slice(0, 4)` 让 1996 盘的 13 条分歧只显示 4 条,另有 9 条不在任何段落、其中 7 条原注整份报告都读不到——与 0.46.3 写的「信息不丢」相反。现在按状态拆开:「待核实」仍归「尚未实现(不猜)」并附原注;其余分歧逐条列出(已展开的只留条目名,未展开的附原注),同一句原注不会出现两遍。
|
|
228
|
+
- **没问事就别喊「答所问」**(`src/panel-kit.js`、`engine/index.js`):奇门只选方向时,面板回显原来是「问题:(未填写)|询问方向:财运」,直答标题也固定写「先答所问」。现在没填问题只回显方向,标题改为「先看结论」;填了问题仍用「先答所问」。奇门的直答也从泛泛的「五个维度」改为「排盘事实、用神、宫位条件几节」,并点明所选方向。
|
|
229
|
+
- **测试补真**(`test/interpret-dedupe.test.mjs`,28 条):归属稳定性按 7 个方向 × 有事/无事 逐一对拍「卡片→维度」签名;分歧清单断言行数等于条目数、未展开条目的原注必须在、已展开的不重复贴;`knowledgeCount` 同时与「唯一卡片数」「逐维挂载总数」独立核对;面板侧用源码锁住旧「(未填写)」串已删除。0.46.3 里那句没有测试支撑的说法,至此才有对应断言。
|
|
230
|
+
- **口径**:信息完整优先于尾部紧凑——文末清单从 4 行回到 13 行,1996 盘解析文本 9099 → 9965 字(无问题)/ 10051 字(有问题),`knowledgeCount` 仍为 10,正文五维没有新增复读。
|
|
231
|
+
- **测试**:新增 94 个文件 / 3628 条断言,七道闸全绿。
|
|
232
|
+
|
|
233
|
+
## 0.46.3(已并入 0.46.5)
|
|
234
|
+
|
|
235
|
+
同一段「规则注解」在报告里复读了两三遍:1996 示例盘的 29 条注解里,只有 16 张是不同的卡。这次把注解改成「一张卡全报告只挂一次、每维最多 3 条」,没填问题时也不再假称「你问的这件事」。
|
|
236
|
+
|
|
237
|
+
- **缺口在哪**(`engine/interpret.js` 的 `enrichPlain`):知识卡按维度静态挂载,而 `knowledgeFor(system, dimKey)` 对「整体运势 / 事业发展 / 健康」会返回同一批通用条目,于是「月令不是一个月」「大运管十年基调」「同一个格,子平真诠怎么用、三命通会怎么取」这类解释在正文里出现 2–3 次,把五段判断冲散。实测 1996 盘:整体 14 条、事业 10 条(9 条重复)、感情 3 条(2 条重复)、健康 2 条(两条全重复)——29 条里 16 张不同,段落被复读切成碎片。
|
|
238
|
+
- **改动**:先按固定维度次序(整体 → 工作 → 事业 → 感情 → 健康)分派,已出现过的 id 跳过,每维再截到 3 条。次序用固定表而不是显示顺序,是因为「所问之事」会把某一维提前——按显示顺序先到先得的话,同一张盘换个问法,注解归属就整体搬家(归属稳定性测试在 0.46.4 补上)。文末「这套规则有多稳」对已展开的条目只留一句索引,不再贴一遍全文;被截掉的分歧条目也应进文末清单(0.46.4 修正:此处当时实际只列了前 4 条,另有 9 条及其 7 条原注被漏掉)。
|
|
239
|
+
- **顺手**(`engine/interpret-plain.js`、`engine/interpret.js`):没填问题时抬头不再写「问题:(未填写)」,正文也不再假称「具体到你问的这件事」——改成「没指定问题,就按……的顺序往下看」。这是「读者视角」的最后一点漏:没问问题却硬答「你问的这件事」,最容易被当成模板腔(面板侧的回显与「先答所问」标题在 0.46.4 一并修正)。
|
|
240
|
+
- **账面**:1996 盘解析文本 11862 → 9099 字(−23%),`knowledgeCount` 29 → 10,五维正文之间不再有整块复读。
|
|
241
|
+
- **测试**:`test/interpret-knowledge.test.mjs` +5 条——同卡不重复、每维 ≤3、`knowledgeCount` 与实际挂载一致、无问题时抬头不写「未填写」、正文不假称「你问的这件事」。统计 **93 个测试文件 / 3600 条断言**,七道闸全绿。
|
|
242
|
+
|
|
243
|
+
## 0.46.2(已并入 0.46.5)
|
|
244
|
+
|
|
245
|
+
离线页的「验前事 / 生时校正」原来是原生控件:年份框 21px、按钮 31px 灰底;窄屏下三档判断按钮 22px,追问框 37px、导出按钮 39px,「点任一宫位看详情」只有 2.25:1。
|
|
246
|
+
|
|
247
|
+
- **缺口在哪**:这两块由 `web-ui.js` 输出 `.mp-btn` / `.mp-input`,但基础样式只写在 DSH 宿主的 `src/app.js` 里(且用的是 `--dsw-*` 变量),离线页从没定义过——于是年份与类型退回 21px 原生输入框,「算贴合度 / 计算候选时辰」退回 31px 灰按钮,和整页的米色卡片明显不是一套。
|
|
248
|
+
- **实测口径**:用无头 Chrome 通过 CDP 在 390px 视口、浅色/深色两套配色下逐个点开 19 个 tab,量 `#out` 内溢出、可点区域尺寸与文字对比度。修复前:验前事三档按钮 32×22、年份框 21px、按钮 31px;全页每个 tab 的追问框 37px、导出按钮 39px;紫微提示条 2.25:1。
|
|
249
|
+
- **改动**(只碰页面层与结果区模板):`tools/build-html.mjs` 给页面补一套同变量的 `.mp-verify/.mp-rect` 按钮与输入框样式(含聚焦环),窄屏把三档按钮排成等分三列、标签独占一行,`.mp-chip` / 验前事按钮 / 年份与类型框 / 追问框 / 导出按钮统一抬到 44px,追问输入改 16px 避免 iOS 聚焦缩放;`src/panel-kit.js` 的 `.pp-soon` 由 `--faint` 改 `--muted`(浅色 4.77:1、深色 7.73:1);`src/web-ui.js` 删掉两处把按钮压到 12px/31px 的行内样式。
|
|
250
|
+
- **口径不变**:颜色全走既有页面变量,深色仍是只换变量;`test/theme.test.mjs` 锁定的打印、深色、窄屏 tab 规则一条未动(50 条断言原样通过)。
|
|
251
|
+
- **测试**:新增 `test/ui-controls.test.mjs`(15 条)——页面控件样式、无硬编码色、窄屏 44px、提示条对比度(从变量声明取色独立复算)。修复后复测:19 个 tab × 浅/深 0 处横向溢出、0 个 <44px 控件、0 处对比度 <3:1。统计 **93 个测试文件 / 3595 条断言**(+15),七道闸全绿。
|
|
252
|
+
|
|
253
|
+
## 0.46.1(已并入 0.46.5)
|
|
254
|
+
|
|
255
|
+
偏财格不再引《论正财》,七杀格补上三命对照:九个走月令的格,这才真正做到「子平在前、三命在后」各一条。
|
|
256
|
+
|
|
257
|
+
- **缺口在哪**:三命通会此本正财、偏财分章,引擎却让两格共用 tag「财」——1996 示例盘就是偏财格,古籍节里挂的却是《三命通会·卷六·论正财》。七杀格更只有子平《论偏官》一条,没有三命对照,而 README 已写「同一个格,子平真诠在前讲怎么用,三命通会紧随作对照」。
|
|
258
|
+
- **两条原文**(`engine/classics.js`):`smt-piancai`(卷六·论偏财 7650,「乃众人之财也……切忌有姊妹兄弟分夺」)与 `smt-guansha-liu`(卷五·官煞去留杂论 7599,「天干透者易去,月支所藏者难去」)。均按典藏网章页逐字核验(2/2 通过),照录不加省略号,plain 为白话自撰。
|
|
259
|
+
- **七杀为何取「官煞去留杂论」**:该本三命通会没有单列「论偏官」章,硬凑一篇改名就是造出处;取同卷讲官煞混杂去留的这一篇作对照,章名照录,plain 写明「七杀格遇正官混杂,就按这一篇看取舍」。
|
|
260
|
+
- **接线**:`GEJU_KEY` 把正财格、偏财格拆成两个 tag,子平《论财》同时标「正财」「偏财」,于是两格都是子平在前、三命本格章在后;七杀格 / 偏官格指向官煞篇。5 条上限、专旺从格先占位、总纲位三选一均未动,其余盘选条逐字节不变。
|
|
261
|
+
- **文档与知识卡**:`bazi-sanming-duizhao` 补写「此本正财偏财分章、七杀无专章」;清单四·1 与 README 致谢的「十四篇」改对为十六篇;README 里写死的「90 个测试文件 / 3423 条断言」改为「取自断言基线」,避免每轮过期。
|
|
262
|
+
- **测试**:`test/sanming.test.mjs` 的条目分组由「章名是否以论开头」改为显式 id 清单(官煞篇不是「论」字题),新增偏财 / 七杀配对与正反两向(偏财不引正财章、正财不误取偏财章);`test/classic-quotes.test.mjs` 用 1996 偏财盘钉住对照条;`test/tongguan.test.mjs` 的 1996 选条期望同步为 `smt-piancai`。统计 **92 个测试文件 / 3580 条断言**(+13),七道闸全绿。
|
|
263
|
+
|
|
264
|
+
## 0.46.0(已并入 0.46.5)
|
|
265
|
+
|
|
266
|
+
紫微补齐九类流派开关:此前只做了闰月三档,换派只能拿到默认盘;现在每一项都能单独切换,且不传时盘面与旧版完全一致。
|
|
267
|
+
|
|
268
|
+
- **缺口在哪**:0.42.0 把参考项目的「其余九类流派开关」明确留作后续,引擎里亮度、庚干四化、天马、天空、截空旬空、魁钺、天伤天使、长生起点、晚子时都只有一种写法;工具 schema 也没有对应参数,模型侧无法要求「按全书派排」。
|
|
269
|
+
- **改动**(`engine/ziwei.js`):新增 `ZIWEI_SCHOOL_DEFAULTS` / `ZIWEI_SCHOOL_OPTIONS` / `ziweiSchoolsOf`,九个开关逐个落到安星与起盘——`brightnessSchool` 四套亮度数值表按星逐年转中文(QS/XD1 七档、ZZ/XD2 五档);`gengYearSihua` 五个庚干四化变体;`tianmaSchool` 年支/生月三合;`tiankongSchool` 不排/年支顺行/加生时;`jiekongSchool` 不排/单星/正副/占验,启用时同时排旬空副旬;`kuiyueSchool` 四派魁钺(生年与流年同表);`tianshiTianshang` 中州派阴男阳女互换;`changshengSchool` 火土派把土五局长生起点从申改寅;`lateZishi` next-day 时 23:00 后起盘日顺延。
|
|
270
|
+
- **接线**:`engine/index.js` 透传九个平铺参数与嵌套 `schools`(八字 × 紫微交叉验证同样生效);根 `index.js` 的 MCP schema 新增九个字段与枚举;摘要只在改动默认时补一行【流派】,默认盘不多噪音。
|
|
271
|
+
- **口径**:不传或传非法值一律回默认,默认仍是 49 星盘面;庚干变体只作用于生年四化,宫干自化与大限/流年四化不随之改变(已写进 `rules.schools`)。
|
|
272
|
+
- **测试**:新增 `test/ziwei-schools.test.mjs`(73 条)——默认盘逐字节不变、九项各自独立生效、非法值回退、嵌套参数、compute 透传与摘要。统计 **92 个测试文件 / 3567 条断言**(+73),七道闸全绿。
|
|
273
|
+
|
|
274
|
+
## 0.45.2(已并入 0.46.5)
|
|
275
|
+
|
|
276
|
+
玄空的 `period` 非整数不再静默落回九运,而是按入参错误报 `E_INPUT`。
|
|
277
|
+
|
|
278
|
+
- **缺口在哪**:`engine/index.js` 只把 `Number.isInteger(period)` 传给引擎,`2.5` 或字符串 `"9"` 会被直接丢掉,`buildXuankong` 随后走缺省分支排九运——调用方拿到的是一张看似正常的盘,而不是「运写错了」。
|
|
279
|
+
- **改动**:`buildXuankong` 先校验「显式给了 period 就必须是整数」(`null` / `undefined` 仍算未给),不符合与越界共用同一条 `E_INPUT` 文案;`index.js` 不再预先过滤 period,原样交给引擎判定。
|
|
280
|
+
- **口径不变**:合法 1–9 的整数仍优先于 `fortuneYear`;未给 period 时仍按 `fortuneYear` 定运,再缺省九运并注明。
|
|
281
|
+
- **测试**:`test/fengshui-xuankong.test.mjs` 补 4 条(非整数/字符串报错、错误码、`null` 仍缺省),`test/tool-fengshui.test.mjs` 补 2 条(两种非整数在工具层都显示 `[E_INPUT]`)。统计 **91 个测试文件 / 3494 条断言**(+6),七道闸全绿。
|
|
282
|
+
|
|
283
|
+
## 0.45.1(已并入 0.46.5)
|
|
284
|
+
|
|
285
|
+
风水引擎的入参校验改走统一错误工厂,工具层不再把「坐向写错」这类调用错误标成内部异常。
|
|
286
|
+
|
|
287
|
+
- **缺口在哪**:`engine/fengshui.js` 的坐向、性别、生日、运越界都裸抛 `new Error`,到 `index.js` 的工具 catch 里没有 `code`,一律落到 `[E_INTERNAL]`;模型侧据此会把「参数该改」误判成「插件坏了」。
|
|
288
|
+
- **改动**:六处入参校验改用 `fail('E_INPUT', …)`——非 24 山、命卦缺性别、命卦缺完整生日、缺坐向、坐向不对宫、运越界。`mingGua` 落中宫的「命卦计算异常:落中宫」是内部一致性守卫,不是入参错误,仍保持无码 → `E_INTERNAL`。
|
|
289
|
+
- **口径不变**:文案、判定条件与结果字段均未改,只补错误码;工具层现有 `code || E_INTERNAL` 的透传逻辑不用动。
|
|
290
|
+
- **测试**:`test/tool-fengshui.test.mjs` 补 7 条(+7)——运越界与坐向不对宫各加一条码断言,另表驱动五组入参错误,要求文案匹配且前缀恒为 `[E_INPUT]`。统计 **91 个测试文件 / 3488 条断言**(+7),七道闸全绿。
|
|
291
|
+
|
|
292
|
+
## 0.45.0(已并入 0.46.5)
|
|
293
|
+
|
|
294
|
+
把「通关」从一句取象变成可复核的结构判定:用神与忌神相战时,指出五行里唯一能接上的那一行,并如实报它在局中的分量。
|
|
295
|
+
|
|
296
|
+
- **缺口在哪**:`engine/geju.js` 的文案一直写「身中和,先取调候与通关」,但引擎从未算过通关;`classics.js` 也只录了寒暖/燥湿等滴天髓条目,没有通神论「通关」原文。
|
|
297
|
+
- **判定口径**(`engine/geju.js` 的 `tongguanOf`):只在「用神与克它的忌神两行在局中各 ≥1.5 分」时成立相战;通关行由五行生克唯一确定(克方所生、又生用神,金克木以水为关),按分量分「可通 / 关弱 / 为忌 / 未通」四档,`usable` 仅指「可通」。通关行若在本盘属忌神,只标「为忌」、不当桥用;只写进用神 detail、摘要与解释层,不折分数、不断吉凶,也不判通关之力够不够用。
|
|
298
|
+
- **原文与选条**(`engine/classics.js`):新增 `dt-tongguan`(通神论·通关,典藏网 153091,原句照录「关内有织女,关外有牛郎,此关若通也,相邀入洞房」)。只在 `usable` 时占一位,并让泛论「用神配气候」让位;寒暖/燥湿的具体条目照留,整节仍以 5 条为限。未通的盘(如 1996 盘)经典选条保持原样。
|
|
299
|
+
- **知识卡**(`engine/interpret-knowledge.js`):新增 `bazi-tongguan`,标 `variant` 并写明分歧——各家对「两神相战」取哪两神不一(日主与官杀 / 用神与忌神 / 局中最旺两行),本插件固定取用神与克它的忌神。知识库 50 条(15 / 34 / 1)。
|
|
300
|
+
- **已知边界**:调候与扶抑可能给出同一行同时在喜在忌(扫射中约四分之一盘);本插件不改写喜忌表,通关判定按现表计算,并在清单里写明。
|
|
301
|
+
- **测试**:新增 `test/tongguan.test.mjs`(58 条)——五组相克各给唯一通关行、1.4/1.5 阈值与四档分类、喜忌顺序与空结果、24 年逐月真实盘独立重算与确定性、可通/未通两盘的经典选条、摘要/解释层/面板可见性与知识卡。统计 **91 个测试文件 / 3481 条断言**(+58),七道闸全绿。
|
|
302
|
+
|
|
303
|
+
## 0.44.2(已并入 0.46.5)
|
|
304
|
+
|
|
305
|
+
补齐模型侧调用玄空的最后一环:工具 schema 声明 `action:'xuankong'` 与 `period`,并让「今年」只补进命卦。
|
|
306
|
+
|
|
307
|
+
- **缺口在哪**:玄空下卦在引擎与两个界面都能用,但模型工具 `metaphysics_chart` 的 `action` 枚举只有 natal / advise / assess / generate,没有 `xuankong`,也没有 `period` 参数——对话里让模型排玄空,schema 层面就过不去。
|
|
308
|
+
- **另一个隐患**:`run()` 原先把「没给 fortuneYear 就补今年」的规则写成「fengshui 且不是 advise」,玄空一旦可调用,缺省会得到 fortuneYear=今年,九运缺省提示永远不出现,按年定运与默认九运两种口径悄悄混在一起。现在只对 natal(含未写 action 的缺省)补年份,玄空严格走 `period` → `fortuneYear` → 九运并注明。
|
|
309
|
+
- **改动**(`index.js`):`action` 枚举加 `xuankong`;新增 `period`(1–9,优先于 fortuneYear);`sitting` / `facing` / `fortuneYear` 与 `system` 的说明同步覆盖玄空;年份补全条件收窄到 natal。
|
|
310
|
+
- **口径不变**:显式 `period` 优先;给了 `fortuneYear` 按该年定运并回运程起止;两者都没有才缺省九运(2024–2043)并写明提示。
|
|
311
|
+
- **测试**:新增 `test/tool-fengshui.test.mjs`(19 条)——枚举与 period 声明、显式运不注入年份、按年定运的起止、缺省九运且不被今年顶替、命卦仍默认今年、非法运与坐向不自洽在工具层报错。统计 **90 个测试文件 / 3423 条断言**(+19),七道闸全绿。
|
|
312
|
+
|
|
313
|
+
## 0.44.1(已并入 0.46.5)
|
|
314
|
+
|
|
315
|
+
风水结果在 DSH 侧栏与独立页同步换了展示:从一段摘要文本变成方位网格,侧栏主按钮文案也按 tab 归位。
|
|
316
|
+
|
|
317
|
+
- **为什么**:上一轮把玄空下卦算出来了,但结果只是 `renderText` 的文本墙——九宫运/山/向挤在方括号里,旺山旺向与表法只能逐字读。侧栏面板里这个问题更明显(没有等宽排版)。
|
|
318
|
+
- **共用一份渲染**(`src/panel-kit.js` 的 `pp.fengshuiHTML`):侧栏(`src/app.js`)与独立页(`src/web-ui.js`)都挂到同一个函数,改一处两边同步。
|
|
319
|
+
- **玄空**:按后天八卦三行九宫(巽离坤 / 震中兑 / 艮坎乾),每宫依次列运/山/向三数;与当运相同的数高亮(中宫运数本身即当运,故 9 运、8 运各 3 处高亮);卡头写山盘/向盘的入中星与顺逆,以及「盘面」「表法」两个独立 chip;下方事实行写当运落宫、合十、表法说明。
|
|
320
|
+
- **八宅命卦**:八向格(中宫留空)标星名与吉/凶,四吉四凶各四;给了流年时加一行年紫白(入中星 + 八宫星名)。
|
|
321
|
+
- **门主灶**:同一张八向格 + 门/灶/床/厕四行 + 命宅配(给了生辰才有)。
|
|
322
|
+
- 所有文本走 `esc()`,布局文案或宅卦名里塞 `<img>` / `<script>` 不会变成标签。
|
|
323
|
+
- **侧栏动作按钮**:速查类 tab(黄历/农历/择日/称骨/小六壬/星座/生命数字/人生K/风水/起名)由「起卦」改为「看结果」,奇门为「起局」,空状态提示同步改成「填好参数,点『看结果』」。
|
|
324
|
+
- **没改什么**:引擎与输出字段未动,仍是展示层改动;`meta.scope` 与免责声明原文照旧。
|
|
325
|
+
- **测试**:新增 `test/fengshui-ui.test.mjs`(43 条)——九宫顺序与 27 个数、当运高亮、9 运无局与 8 运乾巽到山到向两套盘、八宅四吉四凶与年紫白、门主灶四行与命宅配、转义、侧栏/独立页接线与按钮文案。统计 **89 个测试文件 / 3404 条断言**(+43),七道闸全绿。
|
|
326
|
+
|
|
327
|
+
## 0.44.0(已并入 0.46.5)
|
|
328
|
+
|
|
329
|
+
风水补上一直挂着的玄空飞星:不是只加一张表,而是把「运盘 → 山盘 → 向盘」的挨星规则真正跑通,并让盘面与通行旺山旺向表逐运对得上。
|
|
330
|
+
|
|
331
|
+
- **缺口在哪**:README 的风水段一直明写「不含玄空各运盘」。八宅命卦、大游年、年紫白都是单星飞布,缺的正是玄空最核心的**下卦三盘**:当运星入中排运盘,再取坐宫/向宫的运星入中排山盘、向盘,最后看当运山星是否到坐、当运向星是否到向。
|
|
332
|
+
- **关键口径(这一轮最容易踩错的地方)**:山盘/向盘的顺逆**不是**按坐山本身的阴阳,而是按「入中运星的本宫(本位卦)同元龙之山」的阴阳;五黄入中时按本山阴阳。按本山阴阳会把旺山旺向算成每运固定的六局,与通行二十四山旺山旺向表(一运、九运无局)对不上;改按本宫同元龙后,九运旺山旺向表与盘面逐运吻合。
|
|
333
|
+
- **新增能力**(`engine/fengshui.js`):`periodOfYear`(1864 起一运、每运 20 年、九运 180 年一轮)、`MOUNTAIN_META`(24 山三元龙与阴阳)、`xuankongChart` 与 `action:'xuankong'`。输出九宫逐宫的 `运/山/向`、山盘与向盘的入中星与顺逆依据、当运星落宫、山星/向星合十宫位,以及**表法**旺山旺向(通行表)与**盘面**旺山旺向(当运星是否落坐/向)两套结论并列;两者口径不同,不合并、不互相覆盖,文案里写明差在哪。缺省运为九运(2024–2043)并给出提示,也可传 `period`(1–9)或 `fortuneYear`。
|
|
334
|
+
- **没做什么**:替卦 / 兼向、年月日时飞星、形峦与现场勘舆、具体应期。`meta.scope` 与免责声明逐条写明。
|
|
335
|
+
- **界面**:面板与独立页的风水速查加第三个模式「玄空」,坐山/朝向沿用 24 山输入,另加「运(1–9)」输入;结果仍走摘要文本,九宫按「巽离坤 / 震中兑 / 艮坎乾」三行排出。
|
|
336
|
+
- **测试**:新增 `test/fengshui-xuankong.test.mjs`(119 条)——三元九运边界、24 山三元龙阴阳逐条、七张公开盘面数字(含双星会向、五黄入中)、每运 12 局三盘均为 1–9 排列、**盘面旺山旺向与通行表逐运一致**(两套独立数据互证)、坐向互通、216 局确定性、运的来源与输入边界、`compute` 接线与摘要。统计 **88 个测试文件 / 3361 条断言**(+119),七道闸全绿。
|
|
337
|
+
|
|
338
|
+
## 0.43.1(已并入 0.46.5)
|
|
339
|
+
|
|
340
|
+
专旺格与从格终于有原文可读:三命通会里其实有七篇专章,此前清单写的「三书没有可整段照录的专章」是错的。
|
|
341
|
+
|
|
342
|
+
- **缺口在哪**:`docs/知识扩展与待核实清单.md` 四·1 一直写着「专旺格与从格暂无对应的单章原文条目(三书里没有可整段照录的专章),暂不硬凑」。核对典藏网目录后发现三命通会卷六有曲直、炎上、从革、润下、稼穑五篇,卷五有弃命从煞、卷六有弃命从财——正好对着引擎里已有的专旺五格与从财格、从杀格。于是这一轮不是「补口径」,是补上本可以早就有的原文。
|
|
343
|
+
- **七条原文**(`engine/classics.js`):`smt-quzhi`(卷六·曲直 7630)、`smt-yanshang`(卷六·炎上 7631)、`smt-congge`(卷六·从革 7632)、`smt-runxia`(卷六·润下 7633)、`smt-jiasi`(卷六·稼穑 7634)、`smt-congsha`(卷五·弃命从煞 7598)、`smt-congcai`(卷六·弃命从财 7652)。原文取连续段落照录、不加省略号也不改写;白话自撰。原文里「多主眼疾」「破家不仁之人」这类旧说重话照录,但明确只记原文、不拿来断人。
|
|
344
|
+
- **接线**(`classicsFor`):命中的专旺格 / 从财格 / 从杀格先取单章原文,排在月令格之前——专旺或从格是这张盘的定义性结构,先占位才不会被后面两条气候与总纲挤掉;整节仍以 5 条为上限,不额外放宽。从儿格(食伤)、从强格(印 / 比劫)三书里没有可整段照录的专章,`SPECIAL_CLASSIC` 不登记、不硬凑,测试里用两张真实盘反向核过「不误配」。
|
|
345
|
+
- **知识库 49 条**:新增 `bazi-zhuanwang-yuanwen`(专旺五格的成格条件比「身强」细)与 `bazi-congge-yuanwen`(弃命相从、见根气即破格),均标 `variant`——专旺是否必须成方局、从格是否允许微根,各家宽严不一;只列结构与原文,不断贵贱,也不补专旺的破格条件。顺手把清单表格里漏登的三条历史条目(紫微三方四正复合飞化、六爻用神旺衰、六爻全卦逐爻旺衰)补齐,表格从 44 行对到 49 条。
|
|
346
|
+
- **口径修正**:清单四·1 与 README 致谢里「三书没有专章 / 只取七条」的说法一并改对,写明「十四篇:论十神七篇 + 专旺五格与弃命从煞、从财七篇」,并注明从儿、从强仍未录。
|
|
347
|
+
- **测试**:`test/classic-quotes.test.mjs` 新增七张真实盘(曲直 / 炎上 / 从革 / 润下 / 稼穑 / 从财 / 从杀)逐格核「命中的单章排第一、why 点名、仍守 5 条上限」,另加从儿 / 从强两条反向用例、limit 截断、摘要与解释层可见;`test/sanming.test.mjs` 条目数由 7 改为 14(并拆出「7 论十神 + 7 格局篇」两个计数),逐条核原文、章名、典藏网链接、链接互不重复、tag 不与月令十神混用,并钉住两张新知识卡。统计 **87 个测试文件 / 3242 条断言**(+57),七道闸全绿。
|
|
348
|
+
|
|
349
|
+
## 0.43.0(已并入 0.46.5)
|
|
350
|
+
|
|
351
|
+
解读从「五维度 + 若干节」升级成可读的报告:紫微补逐宫与分层格局,八字补命局框架、画像、流年叙述与专业建议;措辞收进两份独立词库,引擎与说法彻底分开。
|
|
352
|
+
|
|
353
|
+
- **缺口在哪**:此前的解读只有五个维度和几张表——维度说得对,但不成篇。用户拿到紫微盘,看不到「这十二个宫各自是什么味道」;拿到八字盘,看不到「这个人的框架、长什么样、哪一年顺」,只能自己去拼盘面。对照市面上的成篇解读,差的是**结构与措辞**这两层,不是数据。
|
|
354
|
+
- **紫微新增四块**(`engine/interpret.js`):① **命身底色**——命宫主星 + 亮度 + 双星组合 + 身宫落点一句话说清;② **逐宫分析**——十二宫各一条 `【宫·支】主星(亮度)|吉星|煞星|四化`,下接「读法」;③ **三层格局**——有利格局 / 结构提示 / 忌格提醒,每条写 `名称 · 人话 · 依据(盘面事实) · 做法`,按 tone 着色;④ **行动建议**四条。只把六煞(擎羊/陀罗/火星/铃星/地空/地劫)写进五个维度,其余杂曜留在逐宫,避免一眼看去全是星名。
|
|
355
|
+
- **八字新增四节**:**命局框架**(日主/用神/格局三行,末尾一句命局基调)、**正面画像**(外在取象 / 性格底色 / 事业与家庭)、**流年时间轴**(近三年逐条给档位与理由,用「可能性」措辞并声明档位不是断语)、**专业建议**(喜用落地 / 忌神自觉 / 地支关系 / 调候四件可做的事)。
|
|
356
|
+
- **两份词库**(新增 `engine/ziwei-words.js`、`engine/bazi-words.js`):紫微侧 12 宫取象、14 主星(别称/关键词/得地与失地两种语气/长处/要留意的点)、24 组双星、14 煞星、18 吉星、四化落宫、七档亮度、34 条格局读法;八字侧 10 天干取象、10 颗十神 + 5 组(十神权重底层给的是组名,组与单颗各有一套话)、旺衰 × 用神方向的六种命局基调、地支冲合刑害破的手感。**词库不含判断条件**——要不要说、说哪一条由引擎决定,换个排盘引擎结论也不会被说反。
|
|
357
|
+
- **命局基调按权重取**:`frameToneOf(level, favorRoles)` 只看角色不动分数;调用方先把 `favorRoles` 按十神权重排好再传入,于是「身强喜食伤财官杀」取到的是分量最重那一支(泄),而不是固定顺序的第一条。强档没有对应基调时回落「泄」、弱档回落「生」,都写明理由。
|
|
358
|
+
- **面板**:分节支持 tone(左框线 + 标题色:有利绿、提示橙、忌格红)与 `**加粗**`、换行分段(此前整节挤成一坨);逐宫、三层格局各有独立锚点,目录可跳。
|
|
359
|
+
- **术语表**(`engine/interpret-plain.js`):补 庙旺 / 三方四正 / 命主 / 身主 / 五行局 / 自化 / 飞星 / 正曜 / 借对宫 / 双星 / 墓库 / 伏吟 / 反吟 十三条,仍按「正文里真的出现过」才展示,并按体系取不同释义。
|
|
360
|
+
- **顺手改掉两处重复**:紫微「说人话」不再复述直答里的命宫与身宫,改说「你与环境怎么互动」与重心;八字性格底色的单颗十神只补「落在哪个角色上」,不再把组的那句抄一遍。
|
|
361
|
+
- **测试**:新增 `test/ziwei-words.test.mjs`(55 条)与 `test/bazi-words.test.mjs`(46 条)——词库条目数与引擎表一一对应(34 条格局名与 `PATTERN_TONE` 双向零差集)、双星 key 必须能拆成两颗真实主星、亮度三档齐全、煞星不写成判决、基调优先序与回落、地支关系去重与「自刑优先于刑」、四节存在且引用本盘真实字段、面板把 `**` 与换行渲染成 `<b>` 与段落、全文无 undefined/NaN。**87 个测试文件 / 3185 条断言**,七道闸全绿。
|
|
362
|
+
- **边界**:词库只给倾向与做法,不下断语;格局读法覆盖现有 34 条,新增格局未入词库时按 tone 回落成通用句而不是现编;逐宫只写星曜与四化,不叠大限流年的三层算力;健康维度只用煞星星情,不给脏腑诊断。
|
|
363
|
+
|
|
364
|
+
## 0.42.0(已并入 0.46.5)
|
|
365
|
+
|
|
366
|
+
紫微的闰月从两档补到三档,默认换成主流排盘的「按日切分」;顺手修掉流年斗君二次换月。
|
|
367
|
+
|
|
368
|
+
- **缺口在哪**:此前只有「闰月按本月」与 `leapAsNext`(整月归次月)两档,默认按本月。闰月后半月出生的人,主流排盘按次月起盘,我们却按本月,命宫、身宫、五行局、十四主星位置、大限起运、流月斗君整条链都差一个月——盘看起来完整,宫位却系统性偏移。
|
|
369
|
+
- **三档口径**(`engine/ziwei.js` 新增 `LEAP_POLICIES` / `leapPolicyOf` / `effectiveLunarMonth`):`split`(默认,1–15 归本月、16 起归次月,按日切分)、`next`(整月归次月)、`prev`(整月归本月);`leapAsNext: true` 保留为 `next` 的旧写法,`leapMonth` 优先于它。不认识的取值回落到默认,不抛错。工具参数同步成枚举,`rules.leapMonth` 写明三档与默认。
|
|
370
|
+
- **为何改默认**:参考开源项目 [ziwei-doushu](https://github.com/Renhuai123/ziwei-doushu)(MIT)的流派配置与其 150 组金标准盘对照结论——主流排盘默认「月中分界」。我们不引入其引擎,只采纳这一条排盘口径,并把它做成可切回的开关;不想换的人传 `leapMonth: 'prev'` 即回到旧口径。
|
|
371
|
+
- **盘里能看见**:`lunar` 保留 `monthRaw`(原始闰月)与换算后的 `month`、`leapPolicy`,闰月另给一句说明(「闰4月按日切分……本盘闰月21日按5月」);摘要的农历行写成「2020年闰4月21日(按5月起盘)」,不再把 21 日写成「闰5月21日」;面板宫盘抬头同样处理。
|
|
372
|
+
- **修掉一个旧 bug**:`flowOf` 里的流年斗君此前用 `chart.lunar.month`(已是换算后的月)再按 `leapAsNext` 加一次月,闰月 + `leapAsNext` 会多推一个月。现在起盘时只换一次,流月/流日/流时全部直接读换算结果。
|
|
373
|
+
- **边界**:闰十二月十六起回绕到正月只换月序、不老一岁(闰腊月极罕见,明写不猜);1–15/16–30 的分界按通行「月中」,不提供逐日自由配置;不引入参考项目的其余九类流派开关(庚年四化变体、亮度流派、安天马/天空/截空等),留作后续。
|
|
374
|
+
- **测试**:新增 `test/ziwei-leap.test.mjs`(44 条)——2020 闰四月的初十/十五/十六/廿一四个边界、三档口径函数与默认/别名/未知值回落、起盘月与命宫紫微斗君逐项对照、前半月 split 与 prev 同盘、`leapAsNext` 与 `next` 等价、斗君只换一次月、非闰月三档排出同一张盘、compute 透传与摘要/面板文案。**85 个测试文件 / 3084 条断言**,七道闸全绿。
|
|
375
|
+
|
|
376
|
+
## 0.41.0(已并入 0.46.5)
|
|
377
|
+
|
|
378
|
+
起名补上一直被写在「不做」里的两层:**五格剖象**(天格/人格/地格/外格/总格 + 81 数理 + 三才)与**音韵检查**。此前 README 明写「不做五格(需康熙字典笔画)与音韵」,等于把最常被问的两件事推给用户;这一轮把笔画与读音数据补全,再按通行算法落地。
|
|
379
|
+
|
|
380
|
+
- **数据层**(新增 `engine/name-data.js`):391 个用字逐字补**拼音、声调、康熙笔画**(按繁体字形与偏旁本字计:华→華14、马→馬10、静→静16、涛→濤18、灵→靈24、兰→蘭23、丰→豐18、书→書10、画→畫12、云→雲12、风→風9、阳→陽17;氵→水4、艹→艸6、辶→辵7、阝左→阜8、阝右→邑7);单姓笔画表约 120 个(王4/李7/张11/刘15/陈16/罗20/郑19),复姓 13 个逐字存(欧阳 15/17、司马 5/10、夏侯 10/9…);81 数理取通行本,分吉/半吉/凶三档。数据与字库由测试逐条对齐——391 条一一对应,多一个字少一个字都会红。
|
|
381
|
+
- **五格**(`engine/name.js` 新增 `wuge`):单姓双名 天格=姓+1、人格=姓末+名首、地格=名两字和、外格=总−人+1、总格=全部;单姓单名 地格=名+1、**外格固定 2**(没有「外侧」,通行本记 2,不是 1);复姓 天格=两字和、外格=总−人+1(等价于复姓单名的「姓首字+1」)。数理超 81 按 −80 回绕(104→24),三才取天/人/地个位对五行,再按生克给一句「一路相生 / 相连相克 / 吉凶各派看法不一」,不折算分数。
|
|
382
|
+
- **缺笔画不半算**:任一字查不到康熙笔画,整体返回 `available:false` 并点名是哪个字,提示用 `strokeOverrides`(逐字)或 `surnameStrokes`(按姓)补;补进来的字在结果与面板里都标「用户指定」。姓超两字、姓不在表、只给名不给姓,都走同一条「算不了」的路,不拿简体笔画或猜测顶上。
|
|
383
|
+
- **音韵**(新增 `phonetics`):只报可数的事实——全名同调、相邻同声母、相邻同韵母、相邻同音(叠字),再按条数判「顺口 / 略拗 / 拗口」。声母先切 zh/ch/sh,y/w 按拼写当声母。**不做语义谐音**(需要词库),摘要与注释都写明「谐音、方言读法还得自己读三遍」。
|
|
384
|
+
- **排序而非判定**:生成候选名把五格格数当第三顺位(合喜用 → 两字异行 → 五格 → 性别倾向 → 字库序),注释写清「是排序不是吉名判定」;姓的笔画不在表里时这一轮不按五格排序,也不伪造。
|
|
385
|
+
- **四处可见**:摘要各加一行【五格】【音韵】;面板新增五格格阵(5 列,吉/半吉/凶各配色)、笔画行(用户指定标「(指定)」)、三才行与音韵行(拼音+调、声调序列、水平徽标、逐条问题),算不了时显示原因而不是空白;生成候选的每个名字带「五格 N/5 吉」与音韵水平 chip。
|
|
386
|
+
- **顺手修掉一处静默丢参**:页面上「评名字」虽然显示出生日期,`src/web-ui.js` 与 `src/app.js` 却在提交前 `delete args.datetime`,于是填了生辰也永远得到「给出生年月日才能判断」;现在生辰填了就传、空着才删,评估能按喜用判,面板里的八字行也随之出现。
|
|
387
|
+
- **测试**:新增 `test/name-wuge.test.mjs`(103 条)——数据完整性(读音表与字库双向零差集、声调 1–4、笔画 1–40、拼音正则、81 条数理档位)、康熙锚点(静16/涛18/灵24/兰23/丰18/书10/画12/云12/风9/阳17 等 16 字与 7 个姓)、81 回绕、四类姓氏结构的五格数与吉凶、三才、缺笔画/超长姓/无名的落点、笔画覆盖与来源标注、音韵四类问题与顺口反例(王沐宸)、compute 接线与面板渲染,以及两处入口不再丢生辰。**84 个测试文件 / 3040 条断言**,七道闸全绿。
|
|
388
|
+
- **边界**:81 数理各派对少数数取法有出入,按通行本取一套;五格只是传统数理游戏,不参与喜用判定,也不改结论。
|
|
389
|
+
|
|
390
|
+
## 0.40.0(已并入 0.46.5)
|
|
391
|
+
|
|
392
|
+
六爻的伏神补上「出伏条件」:飞伏生克与月建日辰并列摆出,归成四档,只判条件、不出应期。
|
|
393
|
+
|
|
394
|
+
- **缺口在哪**:知识卡 `liuyao-fushen` 一直写着伏神看「日月生扶」,引擎却只算飞伏生克(飞生伏 / 伏生飞 / 飞克伏 / 伏克飞 / 比和)——月建、日辰从未落到伏神那一爻上。卡上是口径、盘上没有实现,这一轮把这一层补上。
|
|
395
|
+
- **四档判定**(`engine/liuyao.js` 新增 `fushenAccess`,挂 `result.fushenAccess`):先并列两栏——助(飞生伏、伏克飞、日辰生、日辰比和、月建旺、月建相)与压(飞克伏、日辰克、月破);有助无压为「可出」、有助有压为「有助有压」、有压无助为「受压难出」、两者都无为「未得助」;没有飞伏关系时记「飞伏未知」,不猜。
|
|
396
|
+
- **四处可见**:摘要单列「伏神出伏:第2爻可出」;解析在飞伏段后逐条写该爻的月建(五行、五态、是否月破)、日辰(五行、五关系)与助压明细;白话按档位补一句(「出得来」是条件、不等于马上应验);面板在旺衰 chip 下单列一排(可出绿,有助有压 / 受压难出赭)。
|
|
397
|
+
- **口径与边界**:四档只并列条件,不排「飞伏与日月谁先谁后」的各家优先级;月破算压、伏神旬空只标出而不并入档位,都是明写的取法,不假装是共识。**应期仍未做**——这一层只回答「现在出不出得来」,不给具体日期;`docs/知识扩展与待核实清单.md` 的四·3 与文末注同步写明「条件是条件、应期另算」。
|
|
398
|
+
- **测试**:新增 `test/liuyao-chufu.test.mjs`(53 条)——用独立的五行生克与相冲表复算 64 卦 × 4 个询问方向 × 12 个月 × 12 日 = 6,048 组,要求逐组零不符、四档都出现、四种真实飞伏关系都覆盖;四条从真实盘里挑的边界(地雷复·学业 寅卯「可出」、亥卯「有助有压」、地火明夷·财 子子「受压难出」、地山谦·财 午辰「未得助」);缺月建只看日辰、飞伏关系未知、伏神旬空只标不改档、传 null 不抛四条兜底;摘要/解析/白话/面板四层可见、旧结果兼容、断言输出里没有应期字段。统计 **83 个测试文件 / 2937 条断言**,七道闸全绿。
|
|
399
|
+
|
|
400
|
+
## 0.39.0(已并入 0.46.5)
|
|
401
|
+
|
|
402
|
+
首屏从「19 个 tab 平铺」改成按目的分三组,并保留一键切回平铺。此前第一次来的人得先猜「梅花」「称骨」是什么;现在按「问一件事 / 看一个人 / 查日子」分组,每项带一句白话。同一轮还改了「问进对话」的提问模板:原来它只约束证据与口气,模型答出来是一串带引用的术语流,读的人不知道这张盘在说什么。
|
|
403
|
+
|
|
404
|
+
- **三组入口**(`tools/build-html.mjs`):问一件事(六爻/梅花/塔罗/奇门/六壬/小六壬)、看一个人(八字/紫微/合盘/人格/称骨/数字/人生K)、查日子(黄历/择日/农历/星座/风水/起名)——19 项一个不落,顺序按用途重排,不按引擎模块排。
|
|
405
|
+
- **每项一句白话**:「摇六次,问一件事」「四柱看一生格局」「挑个办事的好日子」,不用先懂术语再点。
|
|
406
|
+
- **最近用过**(`src/web-ui.js`):只记入口名与时间,最多 3 条,存 `mp.recent.tabs`;点入口、点起卦/排盘、人格问卷提交时记录,首屏默认 tab 不记;`localStorage` 读写都包 try/catch,隐私模式下只是不记,不影响使用;读回的值先过「当前页面真实入口」白名单,不直接拼进选择器。
|
|
407
|
+
- **平铺回退**:19 个 tab 原样保留在页面上,右上角「分组 / 平铺」一键切换并记住选择(`mp.first.view`),旧用户的肌肉记忆不受影响。
|
|
408
|
+
- **手机端**:每组先露 4 项,其余折在「还有 N 个」后面(`nth-child(n+5)` + `.open`),三组铺完不再把表单推到第二屏以下;桌面三列、中屏一列。
|
|
409
|
+
- **样式**:卡片沿用纸色 + 朱红(选中项实心),深色下文字反色;打印时首屏分组、视图开关与 tab 条一律不打印,纸面仍是「抬头 + 盘面 + 解读」。
|
|
410
|
+
- **追问读不懂**(`engine/followup.js`、`test/ask-prompt.test.mjs`):此前「回答要求」只有三条——引到具体柱/宫/爻、没依据就说看不出来、别给绝对断言。这三条只管**证据**与**口气**,不管**可读性**,于是照它答出来的东西是一串带引用的术语流:知道「甲有问题、乙有问题」,却不知道这张盘到底在说什么。现在模板先交代一句「读者不懂命理」,再给一套骨架:**开头一句不用术语的结论**(只读这句也该有收获)→ 判断**最多两条、按重要性排序**,每条分 `盘面|白话|倾向|边界` 四行(盘面只引字段不掺解释;白话把上一行的术语当场翻掉,一个词只翻一次、不连续堆三个以上;倾向用「更可能……」讲清现实含义;边界写清何时不成立,盘面没给的直接写「这盘里看不出来」)→ 收尾一句「**如果只记一件事**」,给可核对、可动手的观察点并点明它出自哪条依据。`调候 / 化气 / 通关 / 空亡 / 争合` 单独点名要求落地;「格局很好」「运程不顺」这类没有信息的空话禁掉。
|
|
411
|
+
- **默认问法也改口**:空问题时原来问「请先总览这张盘」,而「总览」本身就在邀请逐字段复述——模型当然照着摘要念一遍。改成「先用一句白话讲清这张盘的主线,再指出最值得注意的一两处,并说明每处的具体依据」。
|
|
412
|
+
- **固定骨架有长度上限**:抬头 + 回答要求约 520 字,不随 `maxChars` 变;测试里那条「固定骨架本身不超过 900 字」专门盯它别长成小作文。顺带修掉一条会误报的旧断言——原来写「整段提问 < 800 字」,骨架一长就红,现在拆成「摘要正文真的截到 maxChars」与「骨架另有上限」两条,各盯各的。
|
|
413
|
+
- **测试**:新增 `test/first-screen.test.mjs`(44 条)——三组名称与顺序、19 项与平铺集合逐一对齐、每项都有白话、记录时机(入口/主按钮/问卷)、存储上限与去重、读写失败降级、手机折叠与 aria、两套入口共用 `activate`、深色反色与打印隐藏。其中 `.recent[hidden]` 一条专盯「`display:flex` 盖掉 `[hidden]`」——首版就踩了,没记录时页头挂着一个空的「最近用过」。`test/ask-prompt.test.mjs` 由 46 条增至 54 条(骨架四行齐全、无术语结论、难词点名、收尾句、空话黑名单、默认问法改口)。统计 **83 个测试文件 / 2937 条断言**,七道闸全绿。
|
|
414
|
+
|
|
415
|
+
## 0.38.2(已发布 2026-10-29)
|
|
416
|
+
|
|
417
|
+
紫微格局修掉三处「写得像实现了、其实永远不成立」的判定:夹局的方向、羊陀夹忌、刑囚夹印;顺手把 34 条目录从 README 的 31 条补全,并用独立谓词逐条钉死。
|
|
418
|
+
|
|
419
|
+
- **夹局不分左右**(`engine/ziwei.js` 的 `jia`):旧写法只认「A 在命宫前一宫、B 在后一宫」这一种顺序,但「夹」只要求两星分居命宫前后。实测 69,120 张盘:**昌曲夹命 0/8、羊陀夹命 0/1,474 从未命中**,日月夹命(237:231)、左右夹命(470:457)、魁钺夹命(283:292)各漏约一半。改为两向都认;`test/ziwei-patterns.test.mjs` 用镜像方向的真实盘(1955-01-02、1955-06-22、1956-02-14 等)钉住。
|
|
420
|
+
- **羊陀夹忌**:擎羊恒在禄存 +1、陀罗恒在禄存 −1,两星只能夹**禄存**那一宫;旧判据要求「化忌两侧是羊陀」,几何上不可能(1,553 张符合的盘一次都没报)。改为「化忌与禄存同宫」,证据文本写明化忌落在哪一支。
|
|
421
|
+
- **刑囚夹印**:廉贞与天相永远隔偶数宫,字面上的「廉贞、擎羊夹天相」同样不成立(17,568 张盘两向皆零)。按通行说法改为「廉贞天相同**守命宫**于子午、擎羊同宫」——源文说的是「守命」,所以判的是命宫那一宫,廉相羊同宫在别的宫位不报;evidence 写明三颗星同守哪一宫;命宫卯酉、廉贞天相对照遇擎羊的变体未纳入,写进 README 口径。三条来源:知乎「刑囚夹印」、sohu 格局文、ziwei-yun「天相不可能被廉贞和擎羊二星所夹」。
|
|
422
|
+
- **34 条目录补齐**:README 原列 31 条,且把 武贪同行、火贪铃贪 归在吉格(引擎一直是中性)、`双禄交流 / 命无正曜 / 杀破狼` 完全没写。现按引擎口径分三组列出(吉 20 / 中性 5 / 忌 9),`PATTERN_TONE` 改为导出供测试比对;README 与目录的一致性由测试直接解析 README 断言。
|
|
423
|
+
- **结构统计补中性**:`patternSummary` 增 `neutral`,摘要行改成「吉格 N、中性 K、忌格 M」——此前中性格计入 count 却不出现在统计里,count 会大于两档之和。
|
|
424
|
+
- **不新增能力、不动知识库**:知识库仍 47 条(本轮是判定口径修正,不是新规则);格局仍只描述结构、不折吉凶分数。
|
|
425
|
+
- **测试**:新增 `test/ziwei-patterns.test.mjs`(79 条)——34 条目录与 README 三组逐名对齐;312 张盘 × 34 条用独立谓词(只读星位与四化,不调引擎判定)复算,要求每条「零不符且至少命中一次」,专门防死规则;夹局镜像方向、羊陀夹命 ⇔ 禄存守命、羊陀夹忌 ⇔ 化忌同禄存、刑囚夹印守命(含「非命宫同宫不报」反向盘)、摘要计数与确定性各自钉住。故意把 `jia` 改回有序写法时该文件 11 条变红。统计 **81 个测试文件 / 2832 条断言**,七道闸全绿。
|
|
426
|
+
|
|
427
|
+
## 0.38.1(已并入 0.38.2)
|
|
428
|
+
|
|
429
|
+
古籍库补上《子平真诠》论格局成败的两章,并把「用神总纲」一位改成按盘取;顺手修掉 why 里拼出「论论财」的旧文案。
|
|
430
|
+
|
|
431
|
+
- **两条原文**(`engine/classics.js`):`zp-chengbai`(九、论用神成败救应,「成中有败,必是带忌;败中有成,全凭救应」)与 `zp-bianhua`(十、论用神变化,「藏庚透壬,则化为财。凡此之类皆用神之变化也」),均照录中华典藏网 53629 / 53630,白话自撰。
|
|
432
|
+
- **为什么是这两章**:0.37.0 起古籍节覆盖了「月令格 × 两书对照」与「调候」,但化气格只剩气候与总纲,组合(官印相生、伤官见官等)没有任何原文可读——这两章正是判「化气成不成」「成格有没有带忌」的出处。
|
|
433
|
+
- **总纲位三选一,不另加位次**:`classicsFor` 的第五条仍是「用神总纲」位——有化气格取「论用神变化」,见组合取「论用神成败救应」,其余取「论用神」通用总纲。上限没有从 5 放宽,也没有让泛论挤掉针对这张盘的话;同盘同时有化气与组合时取「变化」,why 写明取舍。
|
|
434
|
+
- **文案 bug**:此前 why 用 `${书名}论${章名}` 拼,而章名本身已带「论」,实际输出成「子平真诠论论财」「三命通会论论正财」。改为「书名「章名」一条 / 另取」,章节标题去掉序号与开头的「论」;测试加「why 不出现论论」的断言。
|
|
435
|
+
- **知识库 47 条**:新增 `bazi-geju-chengbai`(成中带忌、败中有救)与 `bazi-huagi-bianhua`(月令藏干与合局改变取用),均标 `variant`——成格条件、化气成立条件各家宽严不一,只并列原文与方向,不逐盘判成破。`docs/知识扩展与待核实清单.md` 的条数、统计与注记同步;顺手把上一轮注记里写错的版本号 0.37.2 改回 0.38.0。
|
|
436
|
+
- **口径边界**:专旺格、从格仍没有对应的单章原文(三书里没有可整段照录的专章),不硬凑;古籍节仍只负责「书上怎么说」,不把原文折算成吉凶分数。
|
|
437
|
+
- **测试**:`test/classic-quotes.test.mjs` 新增 13 条(两章原文抽检与典藏网出处、why 无双「论」、三选一互斥、1996 盘取「变化」、化气/组合/无特格三种落点);`test/sanming.test.mjs` 新增 7 条(总纲换条后仍保住两书对照、两张知识卡的出处与「不当断语」口径)。统计 **80 个测试文件 / 2753 条断言**,七道闸全绿。
|
|
438
|
+
|
|
439
|
+
## 0.38.0(已并入 0.38.2)
|
|
440
|
+
|
|
441
|
+
补上知识卡里已经写了、引擎却一直没做的一层:**岁运并临与伏吟反吟的逐年提示**。此前 `bazi-suiyun` 卡说「只作变动提示」,但盘面里没有任何地方标出是哪一年,等于只有口径、没有实现。
|
|
442
|
+
|
|
443
|
+
- **四类信号**(`engine/bazi.js` 给每条流年加 `suiyun`):**岁运并临**(当值大运与流年干支相同)、**运年反吟**(大运与流年天克地冲)、**流年伏吟**(流年与年/月/日/时柱干支相同)、**流年反吟**(流年与某柱天克地冲)。每条信号带 `type` / `target` / `detail`,另给 `note` 写明口径。
|
|
444
|
+
- **当值大运怎么取**:流年按立春起算,取与「该年立春到次年立春」区间相交的大运;交运落在这一年里时,前后两步都在本年当过值,两条并列。没有用虚岁近似,也不把交运日抹平。
|
|
445
|
+
- **天克地冲的判据**:天干相克 **且** 地支相冲,缺一不算。例如丙子年对丙午年柱是同干相冲,不标反吟;这条单独在测试里构造验证。
|
|
446
|
+
- **口径与边界**:只标干支重复与对冲,不折分数、不判吉凶——「岁运并临主大凶」一说不采,摘要与解析都写明「只标变动,仍看该年是否动到用神」。大运与原局之间的伏吟反吟未逐年标,四柱十神的引化也未叠入;起运前只有流年这一侧能成立。
|
|
447
|
+
- **四处可见**:摘要加一行「岁运提示(只标干支变动,不判吉凶):2030庚戌 岁运并临;…」;解析新增「岁运提示」节,逐年写清当值大运与每条的出处;白话只在最近一个命中处补一句「变化感强一点,不是好消息也不是坏消息」;面板在流年 chip 下方单列一排提示,chip 悬停给逐条依据。旧结果(没有 `suiyun` 字段)照常渲染,解析退回「近十年没有」的保守说法。
|
|
448
|
+
- **账面口径修正**(`docs/知识扩展与待核实清单.md`):知识库实际已是 45 条(诸家一致 15 / 各家有异说 29 / 待核实 1),清单头部还写着 42 条、统计还停在 15/27/1,一并改对;「岁运并临吉凶」一行补上「已落引擎与界面」。
|
|
449
|
+
- **测试**:新增 `test/suiyun.test.mjs`(102 条)——不复用引擎判定,按「月柱干支顺逆推八步」与「立春区间相交」两套独立写法复算 10 张盘 × 10 年;扫描全部样本核四类信号与事实一致(并临必然同干支、反吟必然天克地冲、伏吟必然同柱);构造同干相冲(丙子 vs 丙午)不算反吟、起运前无大运、年内交运两步并列三条边界;钉住确定性、摘要/解析/白话/面板四处可见、旧结果兼容与知识卡口径。统计 **80 个测试文件 / 2733 条断言**,七道闸全绿。
|
|
450
|
+
|
|
451
|
+
## 0.37.1(已并入 0.38.2)
|
|
452
|
+
|
|
453
|
+
界面深修一轮,重点在窄屏:19 个 tab 不再吃掉首屏,两列表单不再被按钮挤成 134px;六爻的化进/化退补上力重。
|
|
454
|
+
|
|
455
|
+
- **桌面抬头改竖排**(`tools/build-html.mjs`):品牌一行、tab 条一行。tab 从右对齐的 flex 换行改为 `repeat(auto-fit,minmax(74px,1fr))` 等宽网格,每格同宽、末行左对齐,不再出现「起名 人格」两项孤零零挂在右边、与上一行错开半个身位。
|
|
456
|
+
- **窄屏 tab 改单行横滑**:3 列网格是为六个 tab 写的,tab 涨到 19 个后要占七行(约 340px),首屏只剩输入框。改回单行横滑,44px 触摸目标、`scrollbar-width:none` + `::-webkit-scrollbar{display:none}` 藏掉滚动条、首尾各留 12px 呼吸位;切到靠后的 tab 时 `scrollTabIntoView()` 把当前项滚到可视区中间(`prefers-reduced-motion` 下用瞬时跳转),避免「页面变了、高亮停在屏幕外」。
|
|
457
|
+
- **窄屏表单两列修好**:根因是 `.go{grid-column:4}`、`.go.ghost{grid-column:3}` 写死给桌面四列,窄屏两列时这两条会生成第 3、4 列隐式 auto 轨道,把两个正文列挤到 134px,性别与按钮全被压扁。窄屏改为「看示例/排盘」分别落在第 1、2 列,性别与出生地各占整行,三个勾选项两两成对,收尾不再留空格。
|
|
458
|
+
- **人格页重做**(`src/panel-kit.js`):结果卡原本是「四行细条 + 段落堆叠」,字小、无层级;现在按「类型抬头(大字类型码 + 名称/关键词 + 已答题数)→ 四维瓦片(双极字母 + 取值条 + 一句取向)→ 一句 → 优势/留意(绿/赭左线两张卡)→ 认知功能链(主导高亮)→ 工作/关系/学习/课题分节」分层。问卷态改成两列编号清单,桌面一眼扫完 24 题。同时把卡片抬头从 `<header>` 改成 `<div>`:页面级 `header{flex-direction:column}` 会把卡片抬头也压成竖排。
|
|
459
|
+
- **顶层卡片没拿到调色板**(根因):变量块只挂在 `.pp,.mp-it` 上,而人格、黄历、称骨、人生 K 线、起名、速查这些卡片是直接插进 `#out` 的兄弟节点,`var(--band)`/`var(--card)` 全部失效 → 卡片退化成没底色、没边框的一堆字,这正是人格页看着丑的主因。变量块扩到 `.mp-al/.mp-cg/.mp-kline/.mp-mb/.mp-nm/.mp-quick` 等全部顶层卡片,`test/theme.test.mjs` 的断言同步改为「各顶层卡共享同一份变量」。
|
|
460
|
+
- **人格问卷改分页问答**(`src/web-ui.js`、`src/app.js`、`tools/build-html.mjs`、`src/panel-kit.js`):原来是一个「24 题分数」文本框——让用户自己数 24 个数字,像在填表格。现在照常见在线测评的做法:**4 题一页、共 6 页**,每题 1–5 五格单选(完全不像 / 不太像 / 说不准 / 有点像 / 很像我),顶部有进度条与「第 n / 6 页 · 已答 x / 24」,底部是上一页 / 下一页 / 看结果 / 清空。答满 12 题就能先出结果(与引擎的 `E_INPUT` 门槛一致),不够时按钮禁用并写明还差几题;最后一页收起「下一页」,「看结果」与原主按钮二选一,不再重复两个入口。题目与 1–5 的说法都从引擎的问卷态取(`compute({system:'mbti'})`),前端不抄一份;答案按题序存成数组,末尾连着没答的去掉再交给 `answers`,中途未答的按引擎口径算「跳过」。独立页与 DSH 面板共用同一套分页交互(面板是 `MbtiQuiz` 组件);结果不进「最近排过」——答案没存进历史,重放还原不了问卷。
|
|
461
|
+
- **人格页输入区**:问卷与日期无关,起卦日期/时刻在人格 tab 下隐藏(面板与独立页同步);问卷整行独占,窄屏下 5 格缩字体与内边距、按钮整行、44px 触摸目标;深色下选中格文字随强调色反色(与 tab / 主按钮同一口径)。
|
|
462
|
+
- **桌面副本可同步**:新增 `--desktop` 与 `npm run build:desktop`,一次把同一份页面写到仓库根和 `~/Desktop/命理排盘.html`。桌面那份是手工拷的产物,源码一改就旧;现在构建就能刷新,页面左上角的版本徽标用来核对。README 三处说明同步更新。
|
|
463
|
+
- **变量补全与观感**:共享变量块补齐 `--ink3/--fx/--sans/--kai`(此前多条形同虚设的字体、次级色规则因此失效)与 `--shadow`,深色另给一套;盘面卡片统一 12px 圆角与外阴影,古籍引文块改为左侧朱线 + 楷体悬挂缩进,`:focus-visible` 统一描边,结果入场只做一次轻微上浮并尊重 `prefers-reduced-motion`。
|
|
464
|
+
- **六爻 · 化进/化退力重**(`engine/liuyao.js` 新增 `jinTuiPower`,挂 `result.jinTuiPower`):此前只标方向,现在把每条进退放回月建五态落档——旺相 → 后劲足(退则退得缓)、休囚 → 后劲有限(退则退得实)、死 → 进得虚、逢月破 → 月破失据、缺月建 → 只报趋势;旬空只标出、不改结论。摘要单列「进退力重」一行;解析在「卦体关系」里逐条写清月建、日辰与档位,「未纳入」删去该项(保留用神两现权重与伏神出伏应期);白话加一句;面板单列一排 chip(后劲足/退得缓绿、其余赭)。只给档位、不折加权分数,吉凶仍落在用神/忌神那一层判。
|
|
465
|
+
- **测试**:`test/theme.test.mjs` 第五节改为「单行横滑 + 藏滚动条 + 首尾呼吸位 + 44px 触摸目标 + 切 tab 自动滚入视野 + 两列内按钮不生成额外轨道」,共 50 条断言;`test/mbti.test.mjs` 新增分页问卷一节(25 条)——离线页容器/样式、web-ui 的每页 4 题与 12 题门槛、事件委托、面板 `MbtiQuiz` 单跑校验(一页 4 题、刻度来自引擎、进度文案、按钮禁用与末页无「下一页」)、题面不复制到页面/面板;`test/liuyao-jintui.test.mjs` 新增第六节(27 条)——五态两行档位逐档复算、月破与缺月建两条边界、旬空只标不改结论、摘要/解析/白话/面板四处可见、旧结果不出该排。统计 **79 个测试文件 / 2631 条断言**,七道闸全绿。
|
|
466
|
+
|
|
467
|
+
## 0.37.0(已并入 0.38.2)
|
|
468
|
+
|
|
469
|
+
古籍库从两本扩到三本:接入《三命通会》卷五、卷六论十神七条,与《子平真诠》同一格局并列对照。
|
|
470
|
+
|
|
471
|
+
- **三命通会 7 条**(`engine/classics.js` 登记 `sanming` 书目):论正官、论正财、论印绶、论食神、论伤官、论阳刃、论建禄各一条,原文照录通行本、逐条给典藏网章节链接,白话释义自撰。选条标准只有一条——与「格局取用」直接相关;神煞、女命、六亲等卷暂不录入。
|
|
472
|
+
- **同格两书并列**:同一个「月令格」,先取《子平真诠》那一条(讲怎么用:顺逆、成败、救应),再取《三命通会》同格一条作对照(讲怎么取、怕什么)。例如正官格:子平真诠讲「刑冲破害为忌、生之护之为喜」,三命通会讲「六格之首,止许一位,多则不宜」。两条各给一句 why,不合并、不调和成一句断语。
|
|
473
|
+
- **条数上限 5**:格局两条 + 气候两条 + 用神总纲一条,正好把默认位占满;未匹配到两书同格时只出一条,不硬凑。
|
|
474
|
+
- **面板书名修正**(`src/panel-kit.js`):此前面板把非子平真诠的条目一律标成「滴天髓」,接入第三本后会串成「滴天髓·卷六·论正财」;改为按书目映射书名,`test/sanming.test.mjs` 钉住这一点。
|
|
475
|
+
- **知识库**:新增 `bazi-sanming-duizhao`(两书分工:一重「用」、一重「取」与「忌」,并列而不合并),全库 **45 条**。
|
|
476
|
+
- **口径**:只录与格局取用直接相关的七条,不声称覆盖全书;两书成书年代与流派不同,用语有出入,照录通行本、不做校勘改字,也不替两家调和。
|
|
477
|
+
- **测试**:新增 `test/sanming.test.mjs`(40 条)——书目与七条完整性、原文逐字抽检、七格「子平在前、三命在后」的对照选取、why 文案、上限与去重、确定性与 limit、摘要/解释层/面板三处可见、知识卡。`test/classic-quotes.test.mjs` 同步改为三书、条目 ≥26、单盘取 2–5 条。统计 **79 个测试文件 / 2571 条断言**,七道闸全绿。
|
|
478
|
+
|
|
479
|
+
## 0.36.0(已并入 0.38.2)
|
|
480
|
+
|
|
481
|
+
把 `docs/知识扩展与待核实清单.md` 里登记的两处缺口补上:紫微的「三方四正一起飞」、六爻的「全卦逐爻旺衰」。0.35.x 的面板修复随这一版一起发。
|
|
482
|
+
|
|
483
|
+
- **紫微 · 三方四正复合飞化**(`engine/ziwei.js` 新增 `flyComposite`,挂 `chart.flyComposite`):单宫飞化只回答「这一宫自己去找谁」,这一层把本宫、对宫与两个三合宫共四宫的宫干四化一起摊开——四宫各化禄权科忌,共 16 条,按落宫归堆,落到同一宫就是会照。四类会聚单独成型:**双忌会**(同宫收到 ≥2 个忌)、**禄忌同宫**(禄随忌走)、**三化以上会宫**、**自化**(宫干化出去又落回本宫)。摘要加【三方四正飞化】行(会聚标签 + 四化去向按宫去重);解析新增「三方四正飞化」节,写清哪几股力会到哪一宫;白话加一句「N 股力最后挤在 X 这件事上」;面板并排 chip,悬停给飞入清单。
|
|
484
|
+
- **紫微 · 口径**:会聚判定只看「落在同一宫」这一条结构事实,不折分数、不断吉凶,也未叠大限流年四化;星未上盘时只记星、不记落宫(`to: null`)。三方四正四宫由命宫 +4/+8/+6 推得,与格局识别用的那一套同源。
|
|
485
|
+
- **六爻 · 全卦逐爻旺衰**(`engine/liuyao.js` 新增 `hexagramStrength`,挂 `result.hexStrength`):与用神旺衰同一套判定(月令五态、日辰五关系、月破/暗动/冲空),区别只在不挑用神——六爻每一爻都给一次,世应、动爻、旬空另标,并给出五态分布 `counts`、最旺/最弱爻与世应各自的状态。
|
|
486
|
+
- **六爻 · 不依赖用神**:此前旺衰只在取到用神时才算,没指定所问之事就一片空白;现在 `hexStrength` 在 `buildLiuyao` 之后独立计算,没给 `direction` 也能看整张卦的气。
|
|
487
|
+
- **六爻 · 口径**:只报状态、不折分数;「未纳入」删去「全卦逐爻的月建旺衰」,保留化进化退的实际力重、用神两现取舍、伏神出伏应期三项。
|
|
488
|
+
- **知识库**:新增 `ziwei-sanfang-fei`(复合飞化的会照取法与各家分歧)与 `liuyao-quanggu-shuai`(全卦旺衰与「用神只是一处落点」),并把 `ziwei-feixing` 的 note 从「未做完整飞星串连」更正为「串连与复合飞化已做、未叠大限流年」。全库 **44 条**。
|
|
489
|
+
- **自我介绍与讨论群(只在仓库页)**:README 文末新增「关于:一个人做的插件,欢迎来聊」——写明这是个人作品、能力有限,欢迎就断法口径、神煞取法、解析措辞进群讨论,报 bug 请带输入与结果;`docs/assets/dsh-metaphysics-group*.png` 放群二维码。**不进插件运行时**:面板与离线页不加这条提示,市场条目与 `locale` 描述也只说能力、不说作者(提醒只出现一次,在仓库 README)。市场条目与 `locale` 另补齐了 0.35–0.36 两项新能力。
|
|
490
|
+
- **测试**:新增 `test/ziwei-fly-triad.test.mjs`(44 条)与 `test/liuyao-hex-shuai.test.mjs`(53 条)——四化表与五态五关系都用另一套写法逐格复算(16 条飞化、12 卦 × 3 月 × 6 爻)、归堆与会聚独立过滤比对、60 张盘结构自洽且会聚非死规则、四种冲法构造验证、摘要/解析/白话/面板四处可见、旧结果兼容、确定性。统计 **78 个测试文件 / 2531 条断言**,七道闸全绿。
|
|
491
|
+
|
|
492
|
+
## 0.35.1(已并入 0.38.2)
|
|
493
|
+
|
|
494
|
+
修一个会让整个命理面板白屏的崩溃,并让它以后能自己把错误说出来。
|
|
495
|
+
|
|
496
|
+
- **崩溃根因**(`src/app.js`):为了给「问进对话」记住上一张盘,加了一个 `useEffect` 去写 `LAST`,但它落在 `const [result, setResult] = useState(null)` **之前**;React 首渲时读依赖数组撞上 TDZ,抛 `ReferenceError: Cannot access 'result' before initialization`,整个面板渲染失败——桌面端看到的就是「侧栏有『命理』、点开一片空白」。已把该 effect 移到 `result` 声明之后。
|
|
497
|
+
- **渲染兜底**(新增 `PanelGuard`,`React.Component` 的错误边界):面板里任何一层组件抛错时,把错误原文与前 14 行栈直接铺在面板上,并附「__PP / Engine / React / 版本」环境行——不再白屏,也不用开 devtools 才能报错。
|
|
498
|
+
- **版本可见**:构建时把 `package.json` 的版本注入 `window.__MP_VER`,侧栏标题显示为「命理 v0.35.1」;`__ModuleLoader__.load` 的模块描述里也带 `version`。以后一眼能确认应用加载的是哪份构建。
|
|
499
|
+
- 测试与闸门不变:**76 个测试文件 / 2434 条断言**,七道闸全绿。
|
|
500
|
+
|
|
501
|
+
## 0.35.0(已并入 0.38.2)
|
|
502
|
+
|
|
503
|
+
面板可以直接把提问送进对话窗了:排完盘点「问进对话」,这张盘的摘要和你的问题会变成一条正常的用户消息,由对话里的模型接着答。
|
|
504
|
+
|
|
505
|
+
- **提问模板**(`engine/followup.js` 新增 `askPrompt`):四段——一句说明(不用重排盘)、`体系 / 所问` 两行、`——盘面摘要——`(取 `compute` 的 `summary`,超 3000 字截断并标「摘要已截断」)、`——回答要求——`(引到具体柱/宫/爻、没依据就说「这盘里看不出来」、不给绝对化断言)。只做文本组装,不调模型、不改盘,返回 `{text, question, system, label, chars, truncated}`。
|
|
506
|
+
- **对话桥**(`src/app.js`):往会话作用域槽位 `conversation.input.right` 注册一个不画界面的组件,从 slot props 取 `inputActions`;点按钮时 `setDraft(text)` 写草稿再 `submit()`,走输入框正常的回车路径——有回合在跑时排队,不打断当前回答。桥没挂上(插件刚装、还没重启,或 Harness 改了槽位名)时退回复制剪贴板并提示,不报错。
|
|
507
|
+
- **按钮位置**:结果卡下方的追问行,「追问」(本地按盘面字段直接答)旁边多一个「问进对话」,两者共用同一个问题输入框。
|
|
508
|
+
- **离线页不动**:`命理排盘.html` 没有 Harness 对话窗,所以只有「追问」,不出现这个按钮。
|
|
509
|
+
- 测试:新增 `test/ask-prompt.test.mjs`(46 条:字段结构、体系名翻译、问题原样带入、摘要截断与占位、六套体系各跑一遍、无绝对化表述、传 null 不抛、确定性);`test/client-bundle.test.mjs` 增加对话桥注册与「提问 → setDraft → submit」源码通路的断言(现在注册三个槽)。
|
|
510
|
+
- 统计:**76 个测试文件 / 2431 条断言**(当时),七道闸全绿。
|
|
511
|
+
|
|
512
|
+
# 更新记录
|
|
513
|
+
|
|
514
|
+
版本按「一组可感知的改动」发,README 与市场条目描述随能力同步。
|
|
515
|
+
|
|
516
|
+
0.23.0–0.33.0 都只提交在本地、没有单独发到 npm;这些内容随 **0.34.0** 一并发布。npm 上的 latest 从 0.22.0 直接跳到 0.34.0,`npm i dsh-metaphysics` 装到的就是这一版。
|
|
517
|
+
|
|
518
|
+
0.35.0–0.38.1 同样只提交在本地;这些内容随 **0.38.2** 一并发布(2026-10-29),npm 上的 latest 从 0.34.0 直接跳到 0.38.2。
|
|
519
|
+
|
|
520
|
+
0.39.0–0.46.4 同样只提交在本地;这些内容随 **0.46.5** 一并发布(2026-10-30),npm 上的 latest 从 0.38.2 直接跳到 0.46.5。
|
|
521
|
+
|
|
522
|
+
0.47.0–0.50.0 同样只提交在本地;这些内容随 **0.50.1** 一并发布(2026-10-30),npm 上的 latest 从 0.46.5 跳到 0.50.1。
|
|
523
|
+
|
|
524
|
+
## 0.34.0(已发布)
|
|
525
|
+
|
|
526
|
+
六爻补上**用神旺衰**:月建给这一段时令的气,日辰给当天的扶克。此前用神只算到「落在哪一爻、与卦体怎么对」,旺不旺一律写「仍要月建日辰」,等于把最关键的一半留白。
|
|
527
|
+
|
|
528
|
+
- **月令五态**:爻五行与月支五行同气为旺、受月令生为相、生月令为休、克月令为囚、被月令克为死(`monthStateOf`)。
|
|
529
|
+
- **日辰五关系**:站在爻这一边说——日辰生我为「日生」、克我为「日克」、同气为「比和」,反过来是我泄日辰(「泄」)或我耗日辰(「耗」)(`dayRelationOf`)。
|
|
530
|
+
- **三种冲法分开命名**:月建冲爻为**月破**,日辰冲静爻为**暗动**,日辰冲旬空之爻为**冲空**,日辰冲动爻为**逢日辰冲**;不再混成一句「被冲」。
|
|
531
|
+
- **月建从哪来**:给了 `datetime`(或 `asOf`)就按节气换月、与八字同源(复用奇门的 `buildSnapshot`)取月支;没给时间就不编月建,只报日辰那一半,摘要里也看不出凭空多出的月份。
|
|
532
|
+
- **四处可见**:摘要加「用神旺衰:月建 午(火) 用神月建相 · 用神与日辰比和」;解析「用神落位与卦体」节加「时令对用神」段(逐爻写月建态与日辰关系、冲法);面板加一排旺衰 chip(旺/相/得日辰生用 ok 色,死/囚/月破/受日辰克/泄/耗用 warn 色);白话加一句「眼下这阵子对这件事是帮着的/不太帮忙/有帮有压」。
|
|
533
|
+
- **口径**:这一层只报状态标签,不折成分数、不断成败;全卦逐爻的旺衰仍未做(现在只算到用神那几爻),化进化退叠上月建日辰后的实际力重也仍未做。
|
|
534
|
+
- **知识库**:新增 `liuyao-yongshen-shuai`(variant)讲五态、五关系与三种冲法,note 写明各家对月破/暗动/冲空取法不完全一致。全库 **42 条**。
|
|
535
|
+
- **发版工具**:新增 `tools/verify-publish.mjs` 与 `--verify-only` 模式——核对以「tarball 能下载、字节与 registry 记的 shasum 一致、关键文件在包里」为准,因为 npm 会先让版本条目可见、附件晚几分钟才落盘(0.34.0 发布时就撞上过这段空窗,`npm publish` 的成功字样并不作数)。
|
|
536
|
+
- **测试**:新增 `test/liuyao-shuai.test.mjs`(52 条)——地支五行 12 支、月令五态与日辰关系各 144 格逐格用另一套写法复算、12 张静卦 × 3 个月建逐爻复算、月破/暗动/冲空/逢日辰冲四种冲法各自构造验证、标签次序、缺月建与缺用神的退化路径、摘要/解析/面板/白话四处可见、旧结果(无 `useGodStrength`)不炸、确定性。统计 **75 个测试文件 / 2379 条断言**(含发布核对工具的 35 条自测)。
|
|
537
|
+
|
|
538
|
+
## 0.33.0
|
|
539
|
+
|
|
540
|
+
奇门补上**天盘干的两层**:干对月令的旺衰,以及干与所落宫的生克。此前旺衰只算门与星,干只出现在击刑/入墓这类硬条件里,落宫关系(干与宫谁克谁)完全没说。
|
|
541
|
+
|
|
542
|
+
- **干宫生克**:新增 `stemPalaceRelation(stem, palace)`(`engine/qimen.js`),只吃「天干五行 + 洛书宫五行」,输出 干克宫 / 宫克干 / 干生宫 / 宫生干 / 比和 五种,附五行与一句说明;与门宫关系(门迫、宫制门)并列,**各说各的、不折成一个分数**,两者同时成立时分别列出。
|
|
543
|
+
- **干旺衰**:`STEM_ELEMENT`(甲乙木、丙丁火、戊己土、庚辛金、壬癸水)并入同一套旺相休囚死判定;每宫多 `stemElement` / `stemRelation` / `stemState` 三个字段,中五宫同样有(无门但干与星照算),汇总到 `states.stem`。
|
|
544
|
+
- **三处可见**:摘要【旺衰】行改为「门 … 星 … 干 …」;解读「月令旺衰」段加入天盘干一行与「干宫的落宫关系另算:宫克干 9宫辛、2宫癸;干生宫 7宫己…」;面板事实表新增**「干旺衰」「干宫生克」两行**,九宫格每格底部补干宫关系与干旺衰小字。
|
|
545
|
+
- **口径**:天盘干只认三奇六仪(甲隐于六仪、盘面不出现),所以干旺衰实际覆盖 9 个符号;干宫生克是「天盘干对地盘宫」,不是天盘干对地盘干的**十干克应**——后者 100 组仍未做(各家措辞不一,需先定底本)。
|
|
546
|
+
- **知识库**:`qimen-wangshuai` 扩写为「门、星与天盘干」;新增 `qimen-gan-shengke`(variant)讲干宫五态与「不折分数」,note 写明各家取象宽窄不一、十干克应未做。全库 **41 条**(诸家一致 15 / 各家有异说 25 / 待核实 1)。
|
|
547
|
+
- **测试**:新增 `test/qimen-gan.test.mjs`(53 条)——用天干五行与宫五行重推 10 干 × 9 宫 = 90 组全部复算;合成盘验五侧与缺参;扫 60 个真实盘逐宫核 `stemElement` / `stemRelation` / `stemState`(含中五宫),要求 9 个天盘干、五种干宫关系、五种状态都出现(防死表);`states.stem` 与逐宫一致;三处可见 + 转义;旧结果(无 stemState/stemRelation)不炸;确定性。统计 **73 个测试文件 / 2292 条断言**。
|
|
548
|
+
|
|
549
|
+
## 0.32.0
|
|
550
|
+
|
|
551
|
+
八字大运补上**交运时刻(日 / 时辰级)**——此前只有「几岁几月起运」,交运年份在边界处可能差一年内;清单里的 `bazi-dayun-jiaoqi` 从「待核实」转成「各家有异说」。
|
|
552
|
+
|
|
553
|
+
- **口径**:三日折一年。交运时刻 = 出生时刻 + 「出生 → 起运那一侧节令」的真实天数 × 365.2422/3(≈121.7474)。这一条比例同时兑现古法三条换算——3 日折 1 年、1 日折 4 个月(≈121.75 天)、1 时辰折 10 日(≈10.15 天);顺排数到下一节、逆排数到上一节。
|
|
554
|
+
- **每步大运**:在「同月同日同时刻」换,公历闰日(2 月 29 日交运)十年后退到 2 月 28 日;每步带 `fromDate` / `toDate`,八步首尾相接。
|
|
555
|
+
- **结果字段**:`dayun.jiao = { at, jd, scaleDaysPerDay, yearDays, spanDays, from:{name,time}, frame, offsetMinutes, note }`,旧的 `dayun.startAge` 与 `toNextJieDays` 原样保留(向后兼容);交运时刻与四柱同口径(真太阳时盘上就是真太阳时,`frame` 写明)。
|
|
556
|
+
- **三处可见**:摘要「大运:… 起运;交运 1998-08-08 02:51(平太阳时,距芒种 24.7197 天,三日折一年)」;解读「时间窗」节首行给交运时刻与换算说明,大运表新增**「交运」列**;面板运势曲线头部与页脚写交运时刻,大运 chip 的悬停标题带该步交运日期。
|
|
557
|
+
- **知识库**:`bazi-dayun-jiaoqi` 由 todo 改写为 variant——讲清放大口径、同月同日同时刻换、闰日退位,并注明各家对「一年折几日」取法不一(本插件固定 365.2422 日,与按 360 日折算的流派会差一两天)。全库仍 40 条(诸家一致 15 / 各家有异说 24 / 待核实 1)。
|
|
558
|
+
- **测试**:新增 `test/bazi-jiaoyun.test.mjs`(58 条)——比例与三条换算、用 `partsToJd` 独立复算偏移、顺逆取节令、八步相接与每步 10 年、闰日退位(1987-10-10 盘交运 1988-02-29 → 1998-02-28)、22 个盘的全日期合法性扫描、真太阳时口径、四处可见、旧结果兼容、确定性。`test/report.test.mjs` 的大运表断言改为按表头取列号(加列不再让它失败)。统计 **72 个测试文件 / 2239 条断言**。
|
|
559
|
+
|
|
560
|
+
## 0.31.0
|
|
561
|
+
|
|
562
|
+
新增第十九套体系:**十六型人格(mbti)**——一份 MBTI **风格**的 24 题问卷。这不是命理,是用户点名要的「isfp / infp 这种问答判断」;口径上单独写清它**不是官方 MBTI 量表**(题目、计分、常模都是自建的,不与任何商业量表对齐),结果只作自我参照。
|
|
563
|
+
|
|
564
|
+
- 新模块 `engine/mbti.js`(纯 ESM、零依赖、确定性计算):`DIMENSIONS`(EI/SN/TF/JP 四维,各带两侧白话与平手侧 I/N/F/P)、`QUESTIONS`(24 题,四维各 6 题,左右交错)、`FUNCTION_STACKS`(16 型 → 四功能码)、`FUNCTIONS`(八种认知功能各一句)、`TYPES`(16 型文案:称号、关键词、一句话、3 条优势、2 条留意、工作/关系/学习/课题)、`mbtiPaper()`(发卷)、`buildMbti({ answers })`(计分)。
|
|
565
|
+
- **计分**:每题净分 =(分数 − 3)× 侧向(题目的 `side` 是该题「像我」时的加分侧),维度净分大于 0 取左字母、小于 0 取右字母、= 0 按平手侧取并标「临界」;强度按「净分 / (答数 × 2)」分四档(临界 ≤12%、轻微 ≤30%、明显 ≤60%、很强)。跳过某题传 `null`(也接受 `''`)不计入分母,**至少答 12 题**才出口径;非数组或超过 24 个报 `E_INPUT`,分值不是 1–5 整数报 `E_RANGE`。
|
|
566
|
+
- **三处可见**:`compute({ system:'mbti' })` 不给 `answers` 时先返回 24 道题与量表说明;给了就返回类型 + 四维强度 + 认知功能栈 + 工作/关系/学习/课题;摘要分节写【十六型人格】【四维】【优势】【留意】【课题】【认知功能】【工作】【关系】【学习】与末行口径声明。
|
|
567
|
+
- **面板与独立页**:侧栏新增「人格」tab(`src/app.js`),独立页新增 `data-tab="mbti"` 与 `#for-mbti` 输入块(`tools/build-html.mjs`),两处都是「24 个分数(1–5,空格或逗号分隔;留空先发问卷)」一个输入框;结果由 `pp.mbtiHTML` 渲染成四维强度条 + 双栏优势/留意 + 认知功能 chips + 四段白话,问卷态则列 24 题清单。tab 从 18 个变 19 个,`test/standalone.test.mjs` 的 tab 清单断言同步。
|
|
568
|
+
- **工具 schema**:`system` enum 与描述加入 `mbti`,新增 `answers` 参数(24 个 1–5 整数,可含 `null`);`locale/en.json` 与 `zh.json` 的体系数从十八/十套速查改为十九/十一套,并点名十六型人格。
|
|
569
|
+
- **不进知识库**:十六型人格不属命理体系、也没接解读层(`interpret()` 不处理它),所以 `engine/interpret-knowledge.js` 仍是 40 条;它的口径声明写在结果自身的 `note` 与 README「精度与口径」里。
|
|
570
|
+
- 测试 `test/mbti.test.mjs` 63 条:问卷结构(24 题、四维各 6 题、左右两侧题数相同、题号唯一、平手侧齐全);试卷模式;**四组样例 × 四维独立复算**(另写「左分 − 右分」实现核净分、取值与类型);强度四档边界;全左=ESTJ、全右=INFP、全 3 分按平手取 INFP;16 型全覆盖且每型文案齐全(3 优势 / 2 留意 / 四场景)、功能栈 4 个合法码;入参校验 8 类;跳题按维度扣减答数、整维跳过标「未作答」;摘要与面板三处可见、转义、旧结果不炸;确定性与「同维同侧换题序不改分」。统计 **71 个测试文件 / 2181 条断言**。
|
|
571
|
+
|
|
572
|
+
## 0.30.0(待发布)
|
|
573
|
+
|
|
574
|
+
六爻的**用神落位与卦体联动**:以前解释层只有一句「问工作看官鬼」,并没有真的把用神取出来,所以「用神持世」「用神化退」「用神在六冲卦」这些话都无从对上。现在用神会真的落到某一爻上,再与卦体、动变、旬空串起来看。
|
|
575
|
+
|
|
576
|
+
- `engine/liuyao.js` 新增 `YONGSHEN_RULES`(七档取用)、`yongshenOf(result, { direction, gender, liuqin })`、`PURE_BY_PALACE`(宫 → 首卦,供伏神取用)、飞伏生克表 `WUXING_SAY`/`RELATION_LABEL`。
|
|
577
|
+
- **取用口径**:求财与男命妻缘看妻财、工作职位考核看官鬼、文书合同学历看父母、健康以官鬼为病(子孙为医药)、出行以世爻为用、感情男看妻财女看官鬼;未指明所问之事则不取用神,只给提示,不硬凑。
|
|
578
|
+
- **用神不上卦就取伏神**:回到本宫首卦(八纯卦)找同六亲的爻位,列出伏神与飞神,并按五行标出「飞生伏 / 伏生飞 / 飞克伏 / 伏克飞 / 比和」;首卦同一六亲两现时标「伏神两现」,两句都列出来、**不代选**,也不出出伏日期。
|
|
579
|
+
- **与卦体联动**:六冲卦(主散)、六合卦(主成)、变六冲、变六合、内外卦伏吟、内外卦反吟(并注明来源是地支全冲还是八卦正对)、用神化进 / 化退、用神旬空、用神持世 / 临应 / 发动。标签始终挂「用神」二字,避免把全卦的动势误当成用神的处境。
|
|
580
|
+
- **四处可见**:摘要新增 `用神:官鬼(工作、职位、考核)→ 2爻甲寅木(内卦)` 与 `用神联动:…`;解析在「卦体关系」之后新增「用神落位与卦体」节;面板在卦体 chips 之后加用神 chip 行;白话直答与整段白话各带一句「你问的这件事,在卦里对应第 2 爻」。
|
|
581
|
+
- 知识库按实现重写 `liuyao-yongshen`(七档取用,settled)与 `liuyao-fushen`(伏神取法与两现不代选,variant+note),全库 **40 条**(15 诸家一致 / 23 异说 / 2 待核实)。
|
|
582
|
+
- 测试 `test/liuyao-yongshen.test.mjs` 54 条:七档取用与感情分男女、出行用世;64 卦 × 5 档取用位置逐一核;伏神用 classics.json 里 **56 条带「缺爻」标注的卦例**对拍(伏神位必须等于本宫首卦同位,且与典籍原录的缺爻一致,100 处命中);飞伏生克方向独立按五行复算;卦体联动标签两侧都验;旬空两侧都验;摘要/解析/面板/白话四处可见;旧结果(无 `useGod`)不炸。统计 **70 个测试文件 / 2118 条断言**(当时)。
|
|
583
|
+
|
|
584
|
+
## 0.29.0(待发布)
|
|
585
|
+
|
|
586
|
+
紫微的**四化飞星串连**:宫干定四化、四化定落宫,再顺着这条化从落宫接着飞下去——把「命宫化忌进父母宫,父母宫又化忌进福德宫」这种逐宫传递,一路跟到它绕回来为止。
|
|
587
|
+
|
|
588
|
+
- `engine/ziwei.js` 新增 `FLY_TYPES`、`flyStarOf(stem, type)`、`flyStars(chart)`、`flyChain(chart, { from, type, maxSteps })`、`flyChains(chart, { from })`;`buildZiwei()` 结果新增 `fly`(12 宫 × 四化 = 48 条飞化)与 `flyChains`(命宫出发的四支链)。
|
|
589
|
+
- **两条口径**:①飞化只认宫干四化表(中州派表,庚干作太阳禄、武曲权、太阴科、天同忌),星落在哪一宫就写哪一宫,落回本宫记**自化**;②串连只跟**同一支化**逐宫跳,最多 12 步,回到走过的宫即记「成环」。因为「一个宫 → 一个宫」是函数映射,完整盘上每条链必然成环——实测链长为 1、3、4、5、6 步。
|
|
590
|
+
- **三处可见**:摘要新增 `【命宫飞星】禄:命宫→官禄→父母→命宫(成环)…`;解析在「四化」之后新增「四化飞星」节,逐跳写 `命宫(丙)化忌廉贞→父母`、点出成环与自化,并声明「这一层只描方向与牵引,不断吉凶」;面板在四化 chips 之后加四支飞化 chip(`飞忌 命→父母→福德→财帛→交友→父母↺`,title 给逐跳依据)。白话直答也带一句「这几件事是连着转的」。
|
|
591
|
+
- 知识库新增 2 条:`ziwei-feixing`(飞星派 vs 三合派、庚干异说,标 `variant`)、`ziwei-jichuanji`(串连走几跳、借对宫飞化各派不一,本插件走满 12 宫或成环即停,标 `variant`)。
|
|
592
|
+
- 测试 `test/ziwei-fly.test.mjs` 42 条:测试内**独立录入**十天干四化表核 40 条;固定盘 48 条飞化的落宫/地支/自化与盘面 `selfHua` 两处互证;四支链逐步核「宫干 → 化星 → 落宫」与首尾相接;换一张盘核 12 宫出发全成环;固定盘回归快照(禄/权/科/忌四条路径逐字);摘要/解读/白话/面板三处可见;旧结果(缺 `fly`)不炸。统计 **69 个测试文件 / 2064 条断言**。
|
|
593
|
+
|
|
594
|
+
## 0.28.0(待发布)
|
|
595
|
+
|
|
596
|
+
离线单文件页 `命理排盘.html` 改为**随 npm 包分发**:之前它只是本地产物(默认写到包目录之外),订阅者装完插件手里并没有这份页面;现在它就在包里。
|
|
597
|
+
|
|
598
|
+
- `tools/build-html.mjs` 的默认输出从 `path.resolve(root, '..', '命理排盘.html')` 改为 `path.resolve(root, '命理排盘.html')`——写进包根,`--out <路径>` 仍可另存(例如同步桌面那份手边的拷贝)。
|
|
599
|
+
- `package.json` 的 `files` 增加 `命理排盘.html`,`exports` 增加 `"./命理排盘.html"`:既会被 npm 发出去,也能用 `require.resolve('dsh-metaphysics/命理排盘.html')` 拿到绝对路径。
|
|
600
|
+
- 重新生成一份进包:`node tools/build-html.mjs` → 689907 字符 / 887419 字节(UTF-8),单文件零依赖,十八个 tab 齐全。外部 URL 只有三类:仓库链接、典籍出处链接(点开才联网)、可选的地理编码在线查询。
|
|
601
|
+
- **介绍同步**:`README.md` 特性表加「离线单文件页(随包分发)」并新增小节,写明包内路径、`require.resolve` 用法、与面板同源同版本、以及只在这两处会联网;`SUBMIT.md` 与市场条目 `submit/xuanfu-web__dsh-metaphysics.yml` 的 en/zh 描述都补上这一句。
|
|
602
|
+
- 测试 `test/standalone.test.mjs` 新增 4 条:`files` 里带离线页、`exports` 能解析、**仓库根那份与 `page()` 逐字相同**(防止改了源码忘了重建、把旧页面发给订阅者)、构建默认目标在包根而不是包外。统计 **68 个测试文件 / 2022 条断言**。
|
|
603
|
+
|
|
604
|
+
## 0.27.0(待发布)
|
|
605
|
+
|
|
606
|
+
六爻的「化进神 / 化退神」:动爻变出的地支与本爻同五行、且在顺次上往前一步,这一爻就有后劲;倒着退一步则渐消。
|
|
607
|
+
|
|
608
|
+
- `engine/liuyao.js` 新增 `jinTuiOf(from, to)`、常量 `JIN_TUI_PAIRS` 与 `JIN_OF`/`TUI_OF` 两张单向表;`bodyRelations()` 返回值新增 `jinTui: [{ position, from, to, type: '进'|'退' }]`。
|
|
609
|
+
- **判定口径**:八对顺次——木 寅→卯、火 巳→午、金 申→酉、水 亥→子,土四支成环 丑→辰→未→戌→丑。同五行但不相邻(如寅→辰)不算;同支不变不算;跨五行不算。
|
|
610
|
+
- `bodyLabels()` 在爻伏吟 / 爻反吟之后追加「化进神 5、6」「化退神 4」(进在前),面板 / 摘要 / 解读 / 白话读同一份标签。
|
|
611
|
+
- **三处可见**:摘要「卦体:」行带化进 / 化退;「解读」的「卦体关系」节逐爻写清本支→变支并声明「同一爻化进,也得看用神旺不旺」;面板 chip 化进用 ok 色、化退用 warn 色。
|
|
612
|
+
- 知识库新增 2 条:`liuyao-jintui`(settled,机制与八对表)、`liuyao-jintui-yong`(variant,讲用神化进为得力 / 忌神化进为患加剧,并注明土之进退次序各家不完全一致)。
|
|
613
|
+
- 测试新增 `test/liuyao-jintui.test.mjs` 49 条:五行分组独立生成八对进神再与 12×12 全枚举重算比对、12 条语料卦例逐字对拍、静卦与跨五行不硬凑、摘要 / 面板 chip / 旧结果兼容。`test/liuyao-body.test.mjs` 的 23 条对拍改为只核卦体标签(化进 / 化退另由新测试负责)。统计 **68 个测试文件 / 2018 条断言**。
|
|
614
|
+
|
|
615
|
+
## 0.26.0(当时)
|
|
616
|
+
|
|
617
|
+
奇门的「月令旺衰」:八门与九星各自对月支五行分旺、相、休、囚、死,回答「这个符号当下有多少气」。
|
|
618
|
+
|
|
619
|
+
- `engine/qimen.js` 新增 `monthState(element, monthElement)`、`monthElementOf(branch)`、`groupByState(items, monthElement)` 与只读表 `QIMEN_STATE_TABLES`(门/星/月支三张五行表)。
|
|
620
|
+
- **判定口径**:与月令同气为旺、月令所生为相、生月令为休、克月令为囚、被月令克为死。以月支五行为尺(寅卯木、巳午火、申酉金、亥子水、辰戌丑未土),八门与九星各用自己的五行去对;月令取四柱月支,与节气月同一口径。
|
|
621
|
+
- 排盘结果新增 `month: { branch, element }` 与 `states: { gate: {旺,相,休,囚,死}, star: … }`;每个宫多 `gateState` / `starState`(中五宫只有星的)。
|
|
622
|
+
- **三处可见**:摘要多一行「【旺衰】月令 午(火) 门 旺 景门 相 死门/生门 …」;「解读」新增「月令旺衰」节,列出五态归属、五态定义,并声明这一层只说明力量强弱、不折吉凶(门旺而宫克门仍受制);面板奇门盘下方键值表加「月令」「门旺衰」「星旺衰」三行。
|
|
623
|
+
- 知识库新增 2 条(`qimen-wangshuai` 为 settled,`qimen-wangshuai-yong` 标 variant 并写明「按时令/落宫论」的流派差异)。
|
|
624
|
+
- 测试新增 `test/qimen-wangshuai.test.mjs` 36 条:三张表与传世说法对拍、五行对月令的组合全部用测试内独立生克表重算、归堆不重不漏、60 个真实盘逐宫核对门/星状态与月令来源、五态在真实盘里都能出现、摘要/解读/面板三处接线、旧结果缺字段不炸。统计 **67 个测试文件 / 1969 条断言**。
|
|
625
|
+
|
|
626
|
+
## 0.25.0(当时)
|
|
627
|
+
|
|
628
|
+
奇门的「宫位条件」补齐两块:六仪击刑、三奇入墓——和门迫一样,都是天盘干落到某个宫就成立的硬条件,只作条件、不打分。
|
|
629
|
+
|
|
630
|
+
- `engine/qimen.js` 新增 `jiXingOf()` / `ruMuOf()` 与只读表 `QIMEN_CONDITION_TABLES`,排盘结果多一个 `conditions: { jiXing, ruMu }`(每项 `{palace, stem, zhi, basis}`)。
|
|
631
|
+
- **判定口径**:
|
|
632
|
+
- 击刑按地支相刑定宫:甲子戊震三(子刑卯)、甲戌己坤二(戌刑未)、甲申庚艮八(申刑寅)、甲午辛离九(午自刑)、甲辰壬巽四(辰自刑)、甲寅癸巽四(寅刑巳)。只判天盘六仪,地盘不计。
|
|
633
|
+
- 入墓按五行墓库定宫:乙木墓未(坤二)、丙丁火墓戌(乾六)。只判天盘三奇;六仪、八门、九星的入墓说法不统一,留白。
|
|
634
|
+
- **三处可见**:摘要多一行「【宫位条件】击刑 … 入墓 …」;「解读」的「宫位条件」段把门迫/宫制门/击刑/入墓并列,每条带依据(如「甲午辛,午自刑」),并声明不自动等同于用神受制;面板奇门盘下方键值表加「击刑」「入墓」两行。
|
|
635
|
+
- 知识库新增 2 条(`qimen-jixing` / `qimen-rumu`,均标 variant 并写明流派差异)。
|
|
636
|
+
- 测试新增 `test/qimen-rules.test.mjs` 49 条:表与「地支相刑 → 该支所在宫」的独立推导逐条对拍、合成宫位验成立/不成立两侧、60 个真实盘扫查(六仪与三奇都能触发,防表变死数据;所标之宫与盘中天盘干一致)、摘要/解读/面板三处接线、旧结果缺 `conditions` 不炸。统计 **66 个测试文件 / 1930 条断言**。
|
|
637
|
+
|
|
638
|
+
## 0.24.0(当时)
|
|
639
|
+
|
|
640
|
+
六爻多了「卦体」这一层:六冲卦、六合卦、卦伏吟、卦反吟、爻伏吟、爻反吟,全部由纳甲地支实配推导,并用《增删卜易》体例的 23 条带断语卦例逐条对拍。
|
|
641
|
+
|
|
642
|
+
- `engine/liuyao.js` 新增 `hexBody()` / `bodyRelations()` / `bodyLabels()`:结果里多一个 `body` 字段(`ben` / `bian` 的六冲六合、`fuYin`、`fanYin.by: ['chong'|'pair']`、`yaoFuYin`、`yaoFanYin`),并挂 `body.labels` 供面板与文本共用同一份措辞。
|
|
643
|
+
- **判定口径(可复核)**:
|
|
644
|
+
- 六冲卦 = 六爻地支正好配成子午、寅申、辰戌三组对冲。按纳甲实排共 **10 支**:八纯卦 + 天雷无妄 + 雷天大壮(传统只认八纯,故知识条目按 variant 写并注明分歧)。
|
|
645
|
+
- 六合卦 = 配成子丑、寅亥、卯戌、辰酉、巳申、午未三组相合,正好 **8 支**,与传世名单完全吻合;六冲与六合无交集,重支之卦(如雷水解)不判。
|
|
646
|
+
- 卦伏吟 = 变卦某宫三支与本卦对应宫逐位相同,且**卦确实变了**;纳甲上只有乾震共用子寅辰/午申戌,所以只会出在乾↔震互换。
|
|
647
|
+
- 卦反吟 = 地支三爻全冲,或本卦之宫与变卦之宫在后天八卦上正对(乾巽/坎离/艮坤/震兑);爻伏吟、爻反吟按动爻本支与变支同支/相冲判。
|
|
648
|
+
- **三处可见**:摘要末尾「卦体:」一行;「解析与详解」新增「卦体关系」一节(讲聚散、原地、反复,并声明「标签只说明动势,吉凶仍归用神」),整体维度「依据」加一行卦体;面板六爻卡在爻线下方加 chip 行。
|
|
649
|
+
- 白话层(直答 / 说人话)各补一句卦体的话;知识库新增 4 条(`liuyao-liuchong` / `liuyao-liuhe` / `liuyao-fanyin` / `liuyao-fuyin`)。
|
|
650
|
+
- 测试新增 `test/liuyao-body.test.mjs` 63 条:六合 8 支与传世表对拍、六冲 10 支(含「只认八纯」的差异说明)、伏吟「卦未变不算伏吟」回归、反吟两路分判、23 条卦例逐字对拍;统计 **65 个测试文件 / 1881 条断言**(当时)。
|
|
651
|
+
|
|
652
|
+
## 0.23.0(未单独发布,并入 0.34.0)
|
|
653
|
+
|
|
654
|
+
八字结果里多了「古籍原文」:格局、十神喜忌、调候三条线,各引原书一句,并附白话释义与出处。
|
|
655
|
+
|
|
656
|
+
- 新增 `engine/classics.js`:**19 条**原文摘句——`子平真诠` 10 章(论用神、论用神配气候得失、论正官、论财、论印绶、论食神、论偏官、论伤官、论阳刃、论建禄月劫)+ `滴天髓` 通神论 9 条(寒暖、燥湿、衰旺、中和、官杀、伤官、月令、体用、精神),照录中华典藏网通行本,逐条带章名与 url。
|
|
657
|
+
- **匹配规则明确**:先按月令格局取对应十神章(如偏财格 → 论财),再按气候取《滴天髓》寒暖 / 燥湿,再补《论用神配气候得失》,最后以《论用神》兜底;去重后限 4 条,每条写明「为什么取这条」。
|
|
658
|
+
- **三处可见**:八字摘要末尾【古籍】四行;「解析与详解」新增「古籍原文」一节;面板八字卡在寒暖/穷通之后新增古籍块(书名·章、原句、白话释义)。
|
|
659
|
+
- 口径:原文照录通行本(各本有异文),释义为白话自撰;不把原句改写成结论,也不合并不同流派的说法。
|
|
660
|
+
- 测试新增 `test/classic-quotes.test.mjs` 34 条(19 条完整性、10 处原文定值抽检、匹配规则、解释层/摘要/面板接线);统计 **64 个测试文件 / 1818 条断言**。
|
|
661
|
+
|
|
662
|
+
## 0.22.0(已发布)
|
|
663
|
+
|
|
664
|
+
起名不再只是「未收录」三个字:逐字给出五行、判定与可换字。
|
|
665
|
+
|
|
666
|
+
- 字库 190 → **391 字**(常用名用字为主,按木/火/土/金/水五行分段):丰(火)、秋(金,秋收成熟)、林(木)这类常见字不再掉「未收录」。
|
|
667
|
+
- **逐字判定**:`assessName` 每个字返回五行、释义、性别倾向、来源(`lib` 自建字库 / `user` 你传入的 `charElements` / `none` 未收录)、是否合喜用;未收录的字不猜五行,但会给出**同喜用五行的可换字**(如「秋」不合喜用 → 可换坤(土)、垚(土))。
|
|
668
|
+
- **不替用户下判断**:没给生辰时 `favorable` 返回 `null`(不判合不合),结论分「无生辰 / 全未收录 / 全合 / 部分合 / 全不合」五档,并把统计(几个字、几个已知、几个合喜用、字库共几字)写出来。
|
|
669
|
+
- **候选去同质化**:`generateNames` 三轮选名(新字 + 新五行组合 → 新字 → 放开)× 字库顺序打散 × 两字异行优先,避免「清一色梓桐」。同一盘 8 个候选示例:李炎梓(火木)、李坤桐(土木)、李楠灿(木火)、李楷垚(木土)、李培炫(土火)、李炜城(火土)、李柏松(木木)、李煜烨(火火)。
|
|
670
|
+
- **面板**新增起名卡(`pp.nameHTML`):逐字大字 + 五行 chip + 来源徽标 + 合/不合喜用 + 可换字、八字与喜用一行、结论;生成卡按「名 + 五行 chips + 释义」逐行排,不再是纯文本块。
|
|
671
|
+
- 工具参数新增 `charElements`(`{字: 木|火|土|金|水}`,自定义字五行,未收录字也能参与判定);`name` 的出生信息允许省 `datetime` 用 `year/month/day`。
|
|
672
|
+
- 测试新增 `test/names.test.mjs` 39 条(字库规模与去重、丰秋林逐字判定、未收录字 + 可换字、charElements 生效与非法忽略、无生辰不判、候选全合喜用、面板结构与接线);统计 **63 个测试文件 / 1784 条断言**。
|
|
673
|
+
|
|
674
|
+
## 0.21.0(已发布)
|
|
675
|
+
|
|
676
|
+
《穷通宝鉴》120 格逐条入库:同一「日主 + 月令」该取什么,书上怎么写的,全都摆出来。
|
|
677
|
+
|
|
678
|
+
- 新增 `engine/qiongtong.js`:十天干 × 十二月令共 120 格,每格含用神顺序(首取在前)、原文摘句、出处章号;
|
|
679
|
+
- 用神顺序据通行整理表(knowyourbazi 整理表,首格为首选),原文摘句照录 [luckclub.cn](https://www.luckclub.cn/bazi/004/)《穷通宝鉴》每章首段(去掉「徐乐吾曰」评注);
|
|
680
|
+
- 数据里的 `quoteStems` 是「原文首段依次提到的天干」,与整理表首取不同处可对照阅读(如正月庚金:表首取戊,原文先举丙);
|
|
681
|
+
- 原文全章未见某用神字时(丁酉缺「丙」、癸未缺「壬」)直接写 note「按整理表录入,待以善本核对」,不替它圆场。
|
|
682
|
+
- **取用**:调候优先时,寒暖判定定「这一盘缺什么」,穷通宝鉴定「这一格书上取什么」;两者不同向时以调候为先,界面与解释层把两套并列写出,不悄悄合并。
|
|
683
|
+
- **评分**:流年天干正落在该格首取时 +0.3,次取 +0.15,理由写明「天干丙正是丑月乙日的首取(穷通宝鉴)」;该干属忌神时不给这笔分。
|
|
684
|
+
- **解释层**新增「穷通宝鉴」一节:格(「乙日生于十二月」)+ 用神与首取 + 原文摘句 + 章号;「未纳入」一栏同步改成「已录 120 格,整理表口径、异文处已标 note」。
|
|
685
|
+
- **面板**寒暖卡下新增穷通宝鉴块:用神 chips(首取高亮)、原文引句、章号;文本摘要「寒暖:」一行后追加「穷通:十二月乙取丙(首取丙)」。
|
|
686
|
+
- 新增 `tools/qiongtong-scrape.mjs`(抓 113 章原文,缓存不入库)与 `tools/qiongtong-build.mjs`(生成 `engine/qiongtong.js`),数据可复现。
|
|
687
|
+
- 测试 `test/qiongtong.test.mjs` 31 条:120 格齐全、用神字合法、原文摘句非空、月令月名一致、定值(乙丑取丙、庚寅首取戊/原文先举丙、丁酉与癸未的 note、未知输入返回 null)、1996 寒湿盘接入(detail/评分/解释/面板)。
|
|
688
|
+
- 统计:62 个测试文件 / 1745 条断言;client.js 44 模块。
|
|
689
|
+
|
|
690
|
+
## 0.20.0(已发布)
|
|
691
|
+
|
|
692
|
+
调候(寒暖燥湿)不再是脚注:从「扶抑为主 + 一句提示」改成「调候优先 + 扶抑校验」的判定层。
|
|
693
|
+
|
|
694
|
+
- 新增 `engine/tiaohou.js`:按月令基础温度、全局火水比例、湿土燥土给出 **寒 / 寒湿 / 寒燥 / 湿滞 / 平 / 燥 / 燥热 / 温热** 八档气候,附温度与燥湿量化值和依据(如「季冬丑月、火0、水1.8、湿土2处」);由此定调候所取(寒湿取丙火、燥热取壬水)与所忌。偏寒偏燥明显时判「调候优先」,否则「扶抑为主」。
|
|
695
|
+
- **用神仲裁**:调候所需与扶抑喜忌冲突时显式裁决并说明理由(「寒暖失衡时再补强弱也难受」),不冲突时写「两套取法同向,不必取舍」;`method` 字段改成「调候优先 + 扶抑校验」/「扶抑为主 + 调候校验」,读得出来用了哪套。
|
|
696
|
+
- **评分接入调候**:流年/大运评分里,调候优先时天干地支合调候所需加权,合所忌扣权,寒局再逢水再扣(「地支子水加重寒湿」)。以 1996-01-19 盘为例:2020 庚子由「平 0.5」改为「忌 −0.8」并写明水助寒湿;2026 丙午「大吉 4.0」写明「寒湿之局得丙火,解冻」。
|
|
697
|
+
- **解释层**新增「寒暖燥湿」一节:气候判定 + 体感白话(按日主五行各写一句)+ 调候取忌 + 仲裁;八字文本摘要加「寒暖:」一行。
|
|
698
|
+
- **面板**在「用神」下新增寒暖卡:气候标签、调候优先徽标、寒—平—热标尺、调候取/忌/依据、白话叙述;独立页与面板共用。
|
|
699
|
+
- 口径:调候由月令与全局寒暖燥湿判定,未逐条录入《穷通宝鉴》120 条;调候与扶抑的优先级各家有争论,界面与文档都写明采用的是「调候优先、扶抑校验」。
|
|
700
|
+
- 测试新增 `test/tiaohou.test.mjs`(32 条:寒/热两盘、仲裁同向与冲突、评分方向与上下限、解释节、摘要行、面板卡);统计 61 个测试文件 / 1714 条断言。
|
|
701
|
+
|
|
702
|
+
## 0.19.0(已发布)
|
|
703
|
+
|
|
704
|
+
黄历、择日、公农历互转三处按「吉历」的用法补齐(只吸收合适的那部分,不搬它的小工具):
|
|
705
|
+
|
|
706
|
+
- **黄历增强**:值日十二神(黄道/黑道)、十二时辰吉凶(五鼠遁定干支 + 时家十二神,逐时标吉凶)、二十八宿(吉凶/七政/禽/宫)、胎神、财神/喜神/福神/阳贵/阴贵方位、日柱纳音、六合三合吉配生肖;值日神/二十八宿/胎神/吉神方位与 lunar-javascript 逐日对拍(60 天仅交节当日 1 处日界差异,已注明口径)。
|
|
707
|
+
- **择日扩充**:事项从 13 类扩到 27 类(领证/提亲/收送聘金/满月酒/交易/投资/签订合同/搬家入宅/装修建造/试车买车/旅行/赴任/访亲友/入学…),面板与独立页按「常用 / 婚嫁 / 生活 / 建造 / 工商」五组下拉归类;打分与冲属相排除口径不变。
|
|
708
|
+
- **公农历互转 `convert`**:新增体系。公历 → 农历(农历年月日、闰月、干支四柱、生肖)与农历 → 公历(闰月须显式指定,小月无三十报错),往返自洽;只知道农历生日时可先转公历再排盘。工具层与面板、独立页都已接入。
|
|
709
|
+
- 面板与独立页 tab 由 17 个扩到 **18 个**;黄历 tab 有专属卡片(值日徽标、宜忌、四格、吉神方位、十二时辰吉凶网格)。
|
|
710
|
+
- 测试新增 `test/tools3.test.mjs`(14 条:黄历新增字段定值、五鼠遁、十二时辰吉凶、公农历往返/闰月/报错、择日分组与冲属相排除、渲染与接线)。
|
|
711
|
+
|
|
712
|
+
## 0.18.4(已发布)
|
|
713
|
+
|
|
714
|
+
称骨补上**称骨歌原文**与白话释义(此前只有自撰的分档批语):
|
|
715
|
+
|
|
716
|
+
- 新增通行本《称骨歌》52 首(二两一钱 … 七两二钱),`CHENGGU_SONG` 按骨重(钱)索引,原文照录;
|
|
717
|
+
各版本有异文,断句标点统一为「,;,。」
|
|
718
|
+
- `buildChenggu` 新增 `song` 字段:`{ text, plain, title, source }`;`plain` 是白话释义(自撰,明确不是原文),
|
|
719
|
+
超出 21–72 钱时给出「未见通行本歌诀」而不是编一首
|
|
720
|
+
- 文本摘要把「歌诀」与「释义」分两段;口径里写明歌诀为通行本、释义为白话自撰
|
|
721
|
+
- 新增 `PP.chengguHTML`:四项骨重表格 + 合计与分档徽标 + 歌诀(两行竖排大字)+ 释义 + 口径;
|
|
722
|
+
面板与独立页的称骨 tab 改用它(原先落到通用文本块)
|
|
723
|
+
- 新增 `test/chenggu.test.mjs`(18 条):52 档齐全且都是四句、关键档位不串行、白话不是原文、
|
|
724
|
+
summary 两段、渲染器四项与口径、两处界面接线
|
|
725
|
+
- 统计:59 个测试文件 / 1668 条断言
|
|
726
|
+
|
|
727
|
+
## 0.18.3(已发布)
|
|
728
|
+
|
|
729
|
+
K 线的第二轮打磨(0.18.2 之后的可读性修正):
|
|
730
|
+
|
|
731
|
+
- 大运段名从图顶挪到图下的条纹带里,不再和「最高/最低岁」标记抢位置;段名居中,条带随大运交替着色
|
|
732
|
+
- 5 年 / 10 年均线在右缘标出末端数值,两条贴太近时自动上下错开
|
|
733
|
+
- 纵轴补 0/25/50/75/100 刻度,横轴补「年龄(岁)」与「每岁一分 · 满分 100」;影线用 `clipPath`
|
|
734
|
+
夹在绘图区内,贴边的影线不再溢出
|
|
735
|
+
- 新增统计条:全段均值、最好大运、最差大运、波动幅度。旺衰落在换档阈值附近时只给均值与波动,不给
|
|
736
|
+
「最好/最差大运」的顺位
|
|
737
|
+
- 图高由 300 提到 322,给刻度与段名条留位
|
|
738
|
+
- `test/kline.test.mjs` 增到 29 条(段名条、均线末端值、纵轴刻度、统计条、最好/最差大运)
|
|
739
|
+
- 统计:58 个测试文件 / 1650 条断言
|
|
740
|
+
|
|
741
|
+
## 0.18.2(已发布)
|
|
742
|
+
|
|
743
|
+
人生 K 线从「等宽文本 + ASCII」升级成真正的蜡烛图,并嵌进八字结果:
|
|
744
|
+
|
|
745
|
+
- 新增 `PP.trendChart` / `PP.trendHTML`:实体=该岁相对上一岁的涨跌、影线=±4 分;叠 5 年 / 10 年均线、
|
|
746
|
+
大运交替底色与分界虚线(段名标顶部)、0–100 固定量程网格、年龄刻度、最高/最低岁标记;悬停看逐年
|
|
747
|
+
「多少岁 / 哪一年 / 什么干支 / 多少分 / 落在哪步大运」。颜色全走 CSS 变量,深浅色与打印跟随
|
|
748
|
+
- 「人生K线」tab 不再输出纯文本摘要,直接给图 + 大运分段 chips + 高低年份;数据不足或空值时安全退回文本
|
|
749
|
+
- **八字结果底部直接嵌同一张 K 线**(面板与独立页在排八字时顺带算一次 `trend`),与原有的
|
|
750
|
+
「人生运势曲线」(大运阶梯 + 流年折线)并存:曲线看趋势形态,K 线看逐年涨跌
|
|
751
|
+
- 新增 `test/kline.test.mjs`(23 条):结构、坐标不越界、无 NaN、空/单点安全、旺衰边界不出高低结论、
|
|
752
|
+
两处嵌入点都在源码里
|
|
753
|
+
- 统计:58 个测试文件 / 1644 条断言
|
|
754
|
+
|
|
755
|
+
## 0.18.1(已发布)
|
|
756
|
+
|
|
757
|
+
元数据与检索入口同步,**无运行时行为变化**:
|
|
758
|
+
|
|
759
|
+
- 把「玄学 / 算命 / 占卜 / 运势」加进 `package.json` 关键词与描述、`locale/*.json`、市场条目描述、README 与工具描述——之前只写「命理排盘」,用户搜「玄学」搜不到;现在搜「玄学」应能命中
|
|
760
|
+
- 工具描述补一条触发条件:用户只搜「玄学」或问「有什么玄学工具」时也应介绍本插件
|
|
761
|
+
- 排盘逻辑、输出与测试断言不变;仅 UA 随版本号更新(`dsh-metaphysics/0.18.1`)
|
|
762
|
+
|
|
763
|
+
## 0.18.0(已发布)
|
|
764
|
+
|
|
765
|
+
吸收同生态另一款命理插件「玄机阁」(dsh-xuanji,MIT)的能力:**按行为规格独立实现,不 vendor 源码、
|
|
766
|
+
不引入 iztro / lunar-javascript 依赖**,引擎仍为零外部依赖的纯 ESM。
|
|
767
|
+
|
|
768
|
+
### 九套速查体系(新增)
|
|
769
|
+
|
|
770
|
+
每套都有 `engine/*.js` + 工具分支 + 面板/独立页入口 + 测试,口径固定、同日同结果:
|
|
771
|
+
|
|
772
|
+
- **黄历 almanac**:农历、四柱干支(年柱按立春、月柱按节)、建除十二神、宜忌简表、冲煞与财喜神方位、
|
|
773
|
+
上一/下一节气、每日一卦。与 lunar-javascript 对拍四组日期(日柱/月柱/年柱/农历/建除全一致);
|
|
774
|
+
唯一差异是交节当日「上一节气」的日界口径(我们按正午判已交节),已记入 `meta.scope`
|
|
775
|
+
- **择日 zeri**:13 类事项 × 建除适配打分,逐日分「推荐 / 可用 / 回避」,当事人属相冲煞日直接排除,
|
|
776
|
+
每条回避都带理由;明确是「排序引导」,不是吉凶断语
|
|
777
|
+
- **称骨 chenggu**:年/月/日/时四项骨重求和与分档批语。年表按 `(农历年-4)%60` 查 60 甲子,
|
|
778
|
+
月日时各一张表;对拍公开黄历页修正了初版错表(1990-08-15 巳时应为**五两六钱**,不是五两五钱)
|
|
779
|
+
- **小六壬 xiaoliuren**:时间起课(农历月/日/时三掐)与报数起课(三个 1–99),六宫吉凶与白话断语
|
|
780
|
+
- **星座 star**:太阳星座档案 + 当日四维基调;基调由日期哈希确定性生成,同一天同一星座永远一致,
|
|
781
|
+
明写「不是随机数,也不是模型编的」
|
|
782
|
+
- **生命数字 numerology**:生命路径数 / 生日数 / 态度数,11/22/33 主数保留,逐数给数义与课题;
|
|
783
|
+
与八字是两套口径,混问时会说明不可互相印证
|
|
784
|
+
- **人生 K 线 trend**:复用八字的旺衰、大运、流年十神,按固定计分表给 1–100 岁逐年分与 K 线形态、
|
|
785
|
+
分大运 ASCII 走势、最佳/最差年份。旺衰恰好落在换档阈值(±0.3)时只给提示、不给顺位结论
|
|
786
|
+
- **风水 fengshui**:八宅命卦(1900s/2000s 男女公式、立春界)、大游年四吉四凶、流年九宫飞星
|
|
787
|
+
(2026 一白入中为锚)、24 山门主灶布局倾向、命宅配调停文案;`scope` 明写不含玄空各运盘与现场勘舆
|
|
788
|
+
- **起名 name**:评估现有名字或生成候选名;按八字喜用五行(偏强喜克泄耗、偏弱喜生扶)匹配 241 字
|
|
789
|
+
自建字库,未收录的字如实标「未收录」。**不做五格剖象**(需康熙字典笔画)与音韵判断
|
|
790
|
+
|
|
791
|
+
### 1986–1991 夏令时自动校正
|
|
792
|
+
|
|
793
|
+
`engine/dst.js`:中国 1986–1991 年夏季行夏令时,钟面时间比标准时快 1 小时。八字/紫微/合盘/验前事/
|
|
794
|
+
生时校正/人生 K 线/风水在排盘前统一校正,跨日时回退到前一天 23:xx 并给出 `dst.note`;
|
|
795
|
+
`dst: false` 可显式关闭(出生证已是真实太阳口径时用)。修正了「夏令时出生按钟面时间排盘差一个时辰」的口径错误。
|
|
796
|
+
|
|
797
|
+
### 合婚明细层(hepan 增强)
|
|
798
|
+
|
|
799
|
+
原有总分与三维度**不动**,新增 `detail`:属相六合/三合/六冲/相害/相刑、天干五合、双向十神、
|
|
800
|
+
跨盘地支关系、年命纳音生克、吉凶象计数分档(上 / 中上 / 中 / 需磨合)。冲刑害一律中性叙述,不断「必分」。
|
|
801
|
+
|
|
802
|
+
### 界面
|
|
803
|
+
|
|
804
|
+
- 面板与独立页 tab 由 8 个扩到 **17 个**:九套速查体系各有自己的最小输入;速查结果走通用 `pp.quickHTML`
|
|
805
|
+
(等宽文本 + 标题),不套命盘模板
|
|
806
|
+
- 八字面板补传 `verifyPast`,验前事区块终于会在面板里出现(此前只有独立页有)
|
|
807
|
+
- 独立页「方法页」同步体系清单与已知边界
|
|
808
|
+
|
|
809
|
+
### 视觉升级三项(沿用本次工作树)
|
|
810
|
+
|
|
811
|
+
视觉升级三项,均不改计算口径、不新增判断:
|
|
812
|
+
|
|
813
|
+
- **色板拉开层级**:`--bg` 压深作「桌面」(`#fffdf8 → #f6f1e6`),`--card` 提到近白(`#fffefb → #fffdf8`),
|
|
814
|
+
band / tri / soul / sel / link 一并拉开。`--hair` 随底色同步加深(`#efe9dc → #e9e2d3`),否则比背景还亮、
|
|
815
|
+
发丝线会变成高光。深色块用同一套逻辑(底更沉、卡片更亮)。
|
|
816
|
+
改动前 `--bg` 与 `--card` 只差 1/255,卡片与底色几乎同色,一切「卡片」都浮不起来。
|
|
817
|
+
前景色(ink / muted / red / lu / 十神组)一个未动,对比度、打印样式、可访问性不受影响
|
|
818
|
+
- **人生运势曲线**:新增 `pp.curveHTML()`(渲染在八字盘「大运」节内)——大运作阶梯、流年作折线,
|
|
819
|
+
叠在同一坐标系;背景五条档位色带(绿=吉 / 灰=平 / 红=忌),标出全程最高运与最低运,
|
|
820
|
+
今年流年点加粗描边,悬停看逐年「年份(年龄)干支 档位 分值」。
|
|
821
|
+
纯内联 SVG、零依赖,颜色走 CSS 变量,深浅色自动跟随
|
|
822
|
+
- 纵轴固定量程 −2.2 ~ 3.2(引擎实测 score ∈ [−2, 3.2]):固定而非自适应,不同盘之间才可比
|
|
823
|
+
- 数据不足两步大运则不画(不画半张图);缺 `luck` 字段、传 null / 空对象均不崩
|
|
824
|
+
- 新增 `test/curve.test.mjs` 36 条:几何不越界、色带无缝、阶梯形态、点与引擎数据对齐、
|
|
825
|
+
刻度不重叠、安全与无障碍、边界不崩
|
|
826
|
+
- **三套内联 SVG 符号**(零依赖、零外部请求,一律 `currentColor` 跟随主题):
|
|
827
|
+
- **爻线**:原先 span + 背景色拼接、靠 `flex gap:18%` 留阴爻间隙,字号一变间隙就飘;
|
|
828
|
+
改为 104×12 内联 SVG,间隙按画布坐标固定(两段各 43 + 间隙 18 = 104)。三种尺寸共用一份几何
|
|
829
|
+
- **动爻标记**:沿用传统老阳 ○ / 老阴 ×,非动爻留同宽空位,六列对齐不抖;爻线列由 112px 放宽到 128px
|
|
830
|
+
- **五行符号**:12×12 描边图标,形状取各元素最易辨识的意象(木=树 / 火=焰 / 土=「土」字骨 /
|
|
831
|
+
金=菱形 / 水=波纹),接入五行分类 chip 与用神喜忌行
|
|
832
|
+
- **八卦小象**:14×10 三爻 SVG,接在梅花上下卦标题前;爻位由 `TRI_BITS` 自下而上翻转后渲染
|
|
833
|
+
- 新增 `test/symbols.test.mjs` 79 条:三种尺寸几何、阴爻两段+间隙恰为满宽、八个卦逐爻位校验、
|
|
834
|
+
五条元素路径互不相同、整合到六爻/梅花/八字盘、既有结构回归护栏、无脏值无注入面
|
|
835
|
+
- 全量 57 文件 / 1621 条 PASS(原 1362),`test:ci` 七道闸全绿
|
|
836
|
+
- 新增 `test/tools.test.mjs` 65 条 + `test/tools2.test.mjs` 68 条:黄历对拍、择日排除冲属相、
|
|
837
|
+
称骨四项和、小六壬递推、星座边界、生命数字主数、DST 开关、人生 K 线边界、风水坐向、起名未收录字
|
|
838
|
+
|
|
839
|
+
## 0.17.1(已发布)
|
|
840
|
+
|
|
841
|
+
同步更新,**无运行时行为变化**:
|
|
842
|
+
|
|
843
|
+
- README 与仓库现状对齐:补齐奇门 / 合盘(八套体系)、0.16–0.17 的报告化与可核验能力、安装示例版本
|
|
844
|
+
- CI 自检加固:新增 `tools/check-bundle.mjs` 产物自检闸(逐模块编译 client.js、核对与源码一致),`test:ci`
|
|
845
|
+
先构建再检查;`ask.test` 不再读取仓库外的生成物
|
|
846
|
+
- 仅 UA 字符串随版本号更新(`dsh-metaphysics/0.17.1`),排盘逻辑与输出不变
|
|
847
|
+
|
|
848
|
+
## 0.17.0(已发布)
|
|
849
|
+
|
|
850
|
+
对应「晚子时开关 / 验前事 / 生时校正」三条用户反馈:
|
|
851
|
+
|
|
852
|
+
- **晚子时开关**:面板与独立页新增「晚子时换日」(八字/紫微/合盘)与奇门「归当日/归次日」;
|
|
853
|
+
之前引擎已支持 `lateZi` / `lateZiHourMode`,但 UI 没有暴露,用户无法自己调
|
|
854
|
+
- **验前事**:工具参数 `verifyPast`(年数)+ 面板/独立页「验前事」区块——列出过去若干年的
|
|
855
|
+
流年信号(冲/合/刑、档位、十神),用户自评「准/不准/不确定」,用 `verifyFit` 算贴合度并给建议;
|
|
856
|
+
**只读,不重排、不改盘**;贴合度低时先提示核对出生时间/时区/晚子时
|
|
857
|
+
- **生时校正**:`engine/rectify.js` + 工具参数 `rectify`/`events`——对候选时辰逐一排盘,
|
|
858
|
+
按固定规则(事件类别 × 当年十神/关系/档位)打分,返回候选排序与并列说明;
|
|
859
|
+
规则显式可复核,明确「只缩小范围、不替代出生记录」
|
|
860
|
+
- 测试:新增 `test/verify.test.mjs` 25 条;全量 53 个文件 / 1362 条 PASS
|
|
861
|
+
|
|
862
|
+
## 0.16.0(已发布)
|
|
863
|
+
|
|
864
|
+
报告化改版,对应与 Seeself 对比后的 R1–R8:
|
|
865
|
+
|
|
866
|
+
- **R1 报告骨架**:解析顶部新增「一页读懂」五条摘要(整体 / 事业 / 财富 / 感情 / 节奏);
|
|
867
|
+
目录锚点跳转;新增三张表——八字「大运表 / 流年表 / 触发事件表」、紫微「大限表 / 流年表 / 触发事件表」,
|
|
868
|
+
全部由已有引擎字段摊平,不新增判断;打印加 `break-inside:avoid` 与表格换行规则
|
|
869
|
+
- **R2 证据卡**:每个维度的「依据」从一行灰字升级为可展开的 `<details>` 证据卡
|
|
870
|
+
(盘面事实 + 技法标签),并给每个维度打「置信度 强/中/弱」(只按证据条数分档,不引新算法);
|
|
871
|
+
文本输出同步:依据行尾附 `置信度:…`
|
|
872
|
+
- **R3 追问模式**:新增 `engine/followup.js` 与工具参数 `ask`——围绕已算好的盘回答
|
|
873
|
+
「某一年 / 某方面」的问题(如「2027 年事业怎么样」),只取盘面已有字段,不重排、不猜测;
|
|
874
|
+
找不到年份/未识别方面时明确说找不到并给出可问范围。面板与独立页都加了追问输入框
|
|
875
|
+
- **R4 示例报告**:面板与独立页各加「看示例」,固定示例盘(1990-05-12 14:30 男 石家庄)
|
|
876
|
+
走与真实排盘完全相同的渲染路径,无示例专用分支
|
|
877
|
+
- **R5 交叉验证层**:新增 `engine/crosscheck.js` 与工具参数 `cross`——八字 × 紫微对
|
|
878
|
+
事业/财富/感情/身体/节奏五项并列对照,标注「同向 / 有张力 / 互补」;只作对照,不合并数值
|
|
879
|
+
- **R6 量化表达**:八字/紫微各加「量化口径」分节——明确量化只到档位(十神权重、宫位计数),
|
|
880
|
+
不换算金额、不给疾病诊断;新增 `test/report-extra.test.mjs` 断言不出现金额区间
|
|
881
|
+
- **R7 方法与验证页**:独立页内置静态「方法与验证」(体系、对拍 128 条、测试与闸门、口径、已知边界),
|
|
882
|
+
离线可开
|
|
883
|
+
- **R8 导出与分享**:面板与独立页加「导出 .md」(盘面 + 解析 + 交叉验证 + 追问),
|
|
884
|
+
独立页保留打印/存 PDF
|
|
885
|
+
- 测试:新增 `test/report.test.mjs` 36 条、`test/report-extra.test.mjs` 31 条;
|
|
886
|
+
全量 52 个文件 / 1335 条 PASS
|
|
887
|
+
|
|
888
|
+
## 0.15.0(已发布)
|
|
889
|
+
|
|
890
|
+
- **性能**:节气按需计算、牛顿初值用回归年、容差放宽;八字单盘 2.70ms → 1.60ms
|
|
891
|
+
- **口径差异对照**:`engine/diff.js` + `tools/caliber-diff.mjs`,区分根因字段与连带变化
|
|
892
|
+
- **白话四层**:直答 / 说人话 / 每维一句话 / 追问建议;术语按体系区分
|
|
893
|
+
- **规则知识库**:28 条(出处 + 可信度 + 尚未实现清单)
|
|
894
|
+
- **卦例对拍扩容**:《卜筮正宗》从 19 条扩到 **128 条**(93 成对 + 35 静卦),
|
|
895
|
+
新增核对动爻个数、缺爻(伏神)、旬空;排除的 5 条连同理由留在
|
|
896
|
+
`tools/data-boshizhengzong.mjs` 的 `excluded`
|
|
897
|
+
- **引擎入参守卫(P0)**:新增 `engine/validate.js` 的 `assertCivil()`,`buildBazi / buildZiwei /
|
|
898
|
+
buildDaliuren / buildQimen / buildHepan / buildZiweiHepan / buildSnapshot` 入口统一校验;
|
|
899
|
+
坏入参从裸 `TypeError` 改为 `E_INPUT`,文案写清「该传什么」(15 类坏输入有契约测试)
|
|
900
|
+
- 统一错误工厂 `engine/fail.js`;梅花的 datetime / 数字起卦错误也改为 `E_INPUT`
|
|
901
|
+
- **缓存层统一(P0)**:新增 `engine/lru.js`(上限 + TTL + 命中率),节气瞬时/单年/三年窗口/
|
|
902
|
+
地址四处缓存改为同一工厂;`DSH_METRICS=1` 时 `renderText` 打印各缓存命中率
|
|
903
|
+
(实测紫微盘 `termInstant` 命中 75%)
|
|
904
|
+
- **规则表单一真源(P0 收尾)**:`engine/nayin.js`(六十甲子纳音,bazi/ziwei 共用)、
|
|
905
|
+
`engine/sanhe.js`(三合四局 + 单支归属,bazi/hepan/daliuren 共用);纳甲本就在 `liuyao.js` 一份
|
|
906
|
+
- `test/tables.test.mjs`:纳音 60 项与八字导出逐项一致、三合同局判定与五行等价、
|
|
907
|
+
乾为天纳甲起例,并用静态检查防止有人再把表复制回各模块
|
|
908
|
+
|
|
909
|
+
## 0.14.3(已发布)
|
|
910
|
+
|
|
911
|
+
- **经典通例对拍**:新增 `test/fixtures/classics.json` 与 `test/classics.test.mjs`,把典籍里的规则表当作期望值来验实现——
|
|
912
|
+
- 六爻:京房八宫卦序的宫属与世应(八纯上爻、一至五世依次、游魂四爻、归魂三爻),64 卦全表
|
|
913
|
+
- 六壬:日干寄宫(甲寅乙辰丙戊巳丁己未庚申辛戌壬亥癸丑)、中气换将(雨水登明亥将起,12 个中气抽样)
|
|
914
|
+
- 紫微:纳音定五行局、紫微天府以寅申为轴相照
|
|
915
|
+
- 出处与录入方式写在 fixture 的 `meta.sources`,由 `tools/gen-classics-fixture.mjs` 生成,不从引擎输出反推
|
|
916
|
+
- 说明:录入的是**通例表**(规则级),不是某本书的例课原文;例课需要可引用的原文,见 README「对拍」
|
|
917
|
+
- **卦象/牌阵类也给出「依据」**:六爻列本卦/变卦、世应爻位与六亲六神、动爻、日辰、卦宫;梅花列本卦/互卦/变卦、体用与生克、动爻;六壬列课体、三传、月将、旬空与青龙/朱雀/六合/天后/白虎/子孙是否出现;塔罗列牌阵与牌位、主轴牌、正逆位计数与元素分布
|
|
918
|
+
- 至此六个有维度的体系(八字/紫微/六爻/梅花/六壬/塔罗)都能核对依据;奇门走分节形态,事实本就写在 section 正文里
|
|
919
|
+
- **《增删卜易》卦例对拍**:从 PDF 电子本(有文字层)录入 9 条原文卦例——「月建 + 日干支 + 本卦 → 变卦」,出处精确到章(元神忌神衰旺章第十、月将章第十六、日辰章第十七、独发章第三十一、星煞章第三十三、用神元神忌神仇神章第九)。引擎须按 64 卦表还原这一对(名字、翻爻、变卦生成)
|
|
920
|
+
- 《卜筮正宗》(复城道长精校)此前是**扫描版 PDF、无文字层**;这次拿到同一版本的 **docx**(有文字层),从中提取 138 条带「占事」的卦例,99 条卦名可唯一解析,收 19 条进 `boshizhengzong`
|
|
921
|
+
- 每条核对:本卦 → 变卦、卦宫(宫 + 五行,与八宫表互证)、有日期的样本还核旬空
|
|
922
|
+
- 书中「空亡」与通用旬空不一致的例子(丙辰日作戌亥,应为子丑)只记卦名卦宫、不断言空亡;1 条卦宫与八宫表冲突(表格串行)不收,原因写在 fixture 的 `meta.sources`
|
|
923
|
+
- 原文用字保留异体(遯/遁、干/乾),动爻**不录**——原书卦象图在 PDF 里被压成一行,位置不可靠,硬录等于造数据
|
|
924
|
+
- **六爻补旬空**:`buildLiuyao` 现在输出 `xunShou`(旬首)与 `xunKong`(旬空两位),文本摘要多一行「旬首:甲午 旬空:辰巳」;六旬表与「丙辰日空子丑」都有断言
|
|
925
|
+
- **双 UI 收口(第一步)**:新增 `src/core.js`,把「爻值解析」「问事体系」「数字输入」三条规则收成单一来源,`app.js` 与 `web-ui.js` 都改为调用 `window.__MPCore`;构建脚本把 core 一并打进 `client.js` 与独立 HTML
|
|
926
|
+
- 单测 `test/core.test.mjs`(21 条)直接加载浏览器文件验证;`ask.test.mjs` 改为检查「单一来源 + 两端委托」
|
|
927
|
+
- 表单编排(参数拼装)仍各留一份,下一步再收
|
|
928
|
+
- **修合盘面板**:合盘的主方性别/出生地被漏在 `bazi|ziwei` 分支之外——0.14.1 起引擎把性别改为必填,面板点「合盘」会直接报 `你(主方)的gender 必须是 male 或 female`,看起来像"合盘不对"。现在三体系共用同一分支,合盘四柱与单盘一致(实测 庚午 辛巳 丁丑 丁未 对 庚午 辛巳 丁丑 丁未)
|
|
929
|
+
- **奇门进面板**:新增「奇门」tab,起局时刻 + **换局规则**(fieldset + legend + `role="radiogroup"` 的原生 radio:拆补 / 超神接气 / 置闰,附 `details` 说明),`juMethod` 透传给引擎;盘面下新增 `qimenFactsHTML`,用 `dl > div > dt/dd` 列出局数、节气、四柱、值符、值使、旬首、空亡、驿马、换局规则、晚子时——事实与解读区的结论分开,全部走 `esc()`
|
|
930
|
+
- 尚未做(下一步):三栏 Grid 布局、`<template>` 渲染、显式状态机(idle/missing_input/…)、960/1200 断点的布局断言
|
|
931
|
+
- **独立页补齐合盘 / 奇门**:`命理排盘.html` 由六个 tab 变八个
|
|
932
|
+
- 合盘:对方出生日期/时刻/性别/出生地 + 「合盘方式」八字/紫微切换;主方同样带性别与真太阳时,四柱与单盘一致
|
|
933
|
+
- 奇门:换局规则用 `fieldset + legend + role="radiogroup"` 的原生 radio(拆补/超神接气/置闰,附 `details`),加「询问方向(定用神)」;结果 = 九宫盘 + `dl` 事实表 + 分节解读;换规则重起局、换方向只重出解读
|
|
934
|
+
- `build-html` 导出 `page()` 且直接运行时才写盘,`test/standalone.test.mjs` 直接对生成源码做结构断言(24 条)
|
|
935
|
+
- **解析深化:把"怎么推出来的"也写出来**
|
|
936
|
+
- 八字 / 紫微新增四段:**看盘顺序**(月令→旺衰→用神→格局→大运→流年/命宫→三方→四化→大限,逐步引用实际值)、**时间窗**(当前与后续大运 + 近五年流年,带档位与理由)、**交叉校验**(喜忌分量对比、大运与流年同向/反向、调候与扶抑是否一致)、**未纳入**(没算什么、哪些流派差异会改变轻重)
|
|
937
|
+
- 六爻 / 六壬补**看卦/看课顺序**(卦宫→世应→动爻→用神→日辰→变卦;月将→四课→三传→课体→神将)与**未纳入**
|
|
938
|
+
- 这些段落全部由盘面数据推出,不新增断语;`test/deep.test.mjs` 41 条断言校验结构、关键步骤与"无占位值"
|
|
939
|
+
- 测试:44 个文件 / 1147 条 PASS
|
|
940
|
+
|
|
941
|
+
## 0.14.2 —— 口径、复现与性能(已发布)
|
|
942
|
+
|
|
943
|
+
- **1929 年前的节气改用当时的地方时**:`termInstantJd` 与农历共用同一套换算(1929-01-01 前为北京地方平时 UTC+7.7611,之后东八区),并顺手修正切点常量的半天偏移。此前农历切换、节气一律 +8,1929 年前出生者在交节前后约 14 分钟内可能月柱整柱错位
|
|
944
|
+
- **晚子时口径统一**:`lateZi`(八字/六壬)与 `lateZiHourMode`(奇门)互为别名,一个概念不再有两个参数名;四套体系的摘要都会写明实际采用的口径(换日 / 不换日)。默认值保持原样(八字/六壬换日、奇门不换日),不偷偷改盘
|
|
945
|
+
- **无经度必须告警**:没给出生地/经度时,八字与紫微摘要首行出现 ⚠(此前只在一行括号里提一句,海外出生很容易被忽略)
|
|
946
|
+
- **可复现**:塔罗/六爻新增 `seed`(同 seed 同结果,可回放、可对拍);塔罗 `castAt` 由 `asOf` 决定;八字流年可用 `asOf` 钉死基准年(此前锚在"当前年份",隔年重算结论就变了);六爻的日辰(六神起法)也可用 `asOf` 固定,不再随本机日期漂移
|
|
947
|
+
- **默认离线**:工具新增 `geocode: 'offline' | 'online'`,默认 `offline`——内置坐标表已到地级市,足够真太阳时;只有显式开启才会把出生地原文发给 Nominatim。地址解析加 6 小时缓存,UA 补上版本与仓库地址
|
|
948
|
+
- **性能**:`termInstantJd` / `termWindow` 按年缓存(农历换算一次要问几百次中气,而 VSOP87 是全引擎最贵的一段)
|
|
949
|
+
- 紫微盘 10.9ms → **0.5ms**,奇门 8.1ms → **0.07ms**,八字 2.4ms → **0.4ms**
|
|
950
|
+
- 全量回归 15.8s → **3.3s**
|
|
951
|
+
- **无障碍**:结果区补 `role="region"` + `aria-live="polite"`,错误提示 `role="alert"`,通知 `role="status"`
|
|
952
|
+
- **工具层**:`geocode` / `seed` 进 schema,`asOf` 说明覆盖紫微/八字/塔罗三个体系;非法 `geocode` 值报 `E_INPUT`
|
|
953
|
+
- **CI**:新增 `tools/check-html-sinks.mjs`(innerHTML 拼接必须经过白名单转义函数)与 `tools/check-patterns.mjs`(engine 纯净性、日志、`var`、`debugger`、`new Date()`/`Math.random` 白名单),正/负向都验证过
|
|
954
|
+
- **稳定性扫射**:`test/fuzz.test.mjs` —— 用固定种子随机 12 组生日跑遍八个体系,覆盖参数矩阵、边界日期(1600/2400/闰年/1929 切换点)、解析层与"同参数两次结果字节一致"
|
|
955
|
+
- **自刑补齐**:辰午酉亥两柱同见判「自刑」,大运/流年支与原局同支也按自刑处理。此前 `buildRelations` 遇到同支直接跳过,四柱里 3 个辰也不会报刑
|
|
956
|
+
- **权重口径显式化**:五行占比(1/0.5/0.3)与日主通根(1.2/0.6/0.3)各自命名并注明用途——数值未变,只是不再像"同一件事写了两份"
|
|
957
|
+
- **解析加「依据」**:八字与紫微的五个维度各附一行盘面事实(日主旺衰、月令、喜忌、大运流年、宫位主星、煞星),面板渲染 `mp-it-dev`、文本渲染「 依据:…」;卦象类的依据行在 0.14.3 补齐
|
|
958
|
+
- **解析失败不再变空壳**:builder 抛错时面板显示「⚠ 解析生成失败」并把原因转义后带出,文本摘要同样标出;此前只返回一个空 dimensions 的对象,用户看到的是"没有解析"
|
|
959
|
+
- **结构不变量**:`test/invariants.test.mjs` —— 不依赖外部样盘,用"盘面自身必须成立"的性质守算法:紫微 12 宫支互异/大限连续覆盖、奇门八门八神各一次、六十四卦一一对应、四柱纳音与世应合法。金标准只能覆盖少量样盘,不变量对每张盘都成立
|
|
960
|
+
- 测试:39 个文件 / 1011 条 PASS(新增 historical-tz、repro、caliber、tool-geo、fuzz、relations、evidence、invariants 八组)
|
|
961
|
+
|
|
962
|
+
## 0.14.1 —— 先让「通过」可信
|
|
963
|
+
|
|
964
|
+
这一版不加新体系,只补三件会静默出错的地基:测试的失败信号、渲染层的转义、入参的拒绝。
|
|
965
|
+
|
|
966
|
+
- **测试不再假绿**:`test/_harness.mjs` 统一断言,任何一条 FAIL 都让进程非零退出。此前 bazi / calendar / liuyao / lunar / shensha / tarot / ziwei / e2e / layout 九个文件只 `console.log`,断言写错也 exit 0,`npm test` 恒报 27/27
|
|
967
|
+
- `tools/check-assertions.mjs`:每个文件的 PASS 条数锁进 `test/assertion-baseline.json`,删断言即失败(`npm run test:baseline` 显式重建)
|
|
968
|
+
- `tools/verify-tests-can-fail.mjs`:故意写错一条断言,必须变红——保护「测试本身」
|
|
969
|
+
- **两处 XSS**:塔罗面板的「所问」与解读段落回显(`src/panel-kit.js`)、独立页错误提示(`src/web-ui.js`)此前把用户原文拼进 `innerHTML`;现改为 `esc()` 与 `textContent`,并加 `test/security.test.mjs` 回归
|
|
970
|
+
- **入参校验与错误码**:`compute()` 新增 `E_INPUT / E_RANGE / E_LINES / E_COUNT / E_ASOF / E_PARTNER / E_SYSTEM`
|
|
971
|
+
- 日期按月份天数与闰年校验(`1990-02-30`、`2026-04-31` 不再静默滚到下个月)
|
|
972
|
+
- `bazi / ziwei / hepan` 的 gender 改为必填(缺省按男命排会让大运/大限方向整个反掉)
|
|
973
|
+
- 六爻爻数 ≠ 6 时报错(不再悄悄换成随机卦);塔罗张数非 1/3/5 时报错;`asOf` 非法时报错(不再静默用「此刻」)
|
|
974
|
+
- 工具层 `execute()` 统一包上 `[错误码]` 前缀,内部异常不再以堆栈式文案直出
|
|
975
|
+
- **合盘口径与单盘对齐**:合盘现在把 `address / longitude / trueSolar / lateZi` 分别透传给双方(工具层也会为 `partner.address` 解析经度)。此前合盘完全忽略地址,同一次出生在单盘是 丁丑 日、在合盘里却是 戊寅 日
|
|
976
|
+
- 新增 `test/hepan.test.mjs`:断言「合盘里的你 == 单盘的你」,八字与紫微两条链路都覆盖
|
|
977
|
+
- **解析文案修复**:`命局身身强`(level 已含「身」)、`调候上还初夏`(硬拼连接词)、同一段两次「调候上…」、大运与流年档位并成一句导致建议前后矛盾
|
|
978
|
+
- 新增 `test/interpret-copy.test.mjs`:对 8 个体系的实际输出做病句/重复/未定义值扫描
|
|
979
|
+
- 测试新增 `test/args.test.mjs`(40 条)、`test/security.test.mjs`(10 条)、`test/hepan.test.mjs`(7 条)、`test/interpret-copy.test.mjs`(63 条),全量 31 个文件 893 条 PASS
|
|
980
|
+
- CI 增加「断言数不低于基线」与「测试自检」两步
|
|
981
|
+
|
|
982
|
+
## 0.14.0 —— 奇门、合盘与节气精度(此前只存在于工作树,本版一并落库)
|
|
983
|
+
|
|
984
|
+
- 新增**奇门遁甲**(时家转盘:拆补 / 超神接气 / 置闰三派取局、值符值使、九宫、空亡驿马)与对应解读
|
|
985
|
+
- 新增**合盘**:八字合盘(日主关系 / 夫妻宫 / 五行互补)与紫微合盘(命宫、夫妻宫、五行局)
|
|
986
|
+
- 节气计算改用 **VSOP87B 截断级数 + 岁差 + 章动 + 光行差**,与 NAOJ 历要项对拍偏差降到 1 分钟内
|
|
987
|
+
- `parseDateTime` 对 ΔT 覆盖范围(1900–2100)之外的年份给出精度提示,摘要顶部标 ⚠
|
|
988
|
+
- `geocodeAddress` 支持地址更细时联网(Nominatim)兜底,失败退回内置坐标表
|
|
989
|
+
- 六壬补神煞与格局文案;紫微补流月/流日/流时并接入盘面与解读
|
|
990
|
+
- `tools/qimen-divergence.mjs`:枚举三派取局的分裂样本,供排盘差异核对
|
|
991
|
+
|
|
992
|
+
## 0.13.6
|
|
993
|
+
|
|
994
|
+
- 修 `npm run release` 的发布后核对:npm 的发布是异步的(PUT 返回 202,registry 生效实测要 1–4 分钟),脚本原来 30 秒就判定失败
|
|
995
|
+
- 改为对 tarball 轮询 HEAD,最多等 6 分钟;超时只提示「已提交,稍后自查」而不报错
|
|
996
|
+
- 顺手核对 `dist-tags`,`latest` 不指向新版本时给出 `npm dist-tag add` 的建议
|
|
997
|
+
|
|
998
|
+
## 0.13.5
|
|
999
|
+
|
|
1000
|
+
- 新增 `npm run release`(`tools/release.mjs`):一条命令走完「测试 → 构建 → 校验产物 → 发 npm」,token 只从环境变量 `NPM_TOKEN` 读,临时 `.npmrc` 用后即删
|
|
1001
|
+
- 发布前会拦下三种情况:git 工作区不干净、`client.js` 与源码不同步、registry 上已有同版本
|
|
1002
|
+
- `-- --dry-run` 只跑到校验;本机没装 npm CLI 时用 `NPM_CLI=/path/to/npm-cli.js` 指定
|
|
1003
|
+
|
|
1004
|
+
## 0.13.4
|
|
1005
|
+
|
|
1006
|
+
- 新增 `npm run build` / `npm run build:html` / `npm test`:`tools/test-all.mjs` 顺序跑完 20 个测试文件并汇总退出码,省掉手敲一长串 `node test/*.mjs`
|
|
1007
|
+
- `daliuren` / `meihua` 两处旧测试统一成 `PASS/FAIL` 计数风格(此前只打印 `all pass`,CI 里数不出断言数)
|
|
1008
|
+
- 补 `CHANGELOG.md`;`engines.node` 声明 `>=18`;SUBMIT 文档补提交状态与阻塞说明
|
|
1009
|
+
- 新增 GitHub Actions(`.github/workflows/test.yml`):先构建并校验 `client.js` 与源码一致,再跑全部回归
|
|
1010
|
+
|
|
1011
|
+
## 0.13.3
|
|
1012
|
+
|
|
1013
|
+
- **工具层打通「解析与详解」**:`compute()` 把 `question` / `direction` 透传给 `interpret()`;工具 schema 新增 `withInterpret`、`direction`(综合/财运/事业/感情/健康/学业/出行)与 `asOf`(流月流日流时的基准时刻);`renderText()` 在带解析时附上解析正文与免责声明
|
|
1014
|
+
- 修 `layout` 测试沿用旧类名 `.pn`(0.13.2 已改 `.ft-pn`)导致的假失败
|
|
1015
|
+
- 未知体系报错改为列出六种体系(原文案仍写着「紫微斗数尚未接入」)
|
|
1016
|
+
- `package.json` 补 `author` / `repository` / `homepage` / `bugs`;中英文案重写
|
|
1017
|
+
- 市场条目描述同步到当前能力(主星庙旺、流月流日流时、解析)
|
|
1018
|
+
- README 注明真太阳时只按经度修正、未含历史时区与夏令时
|
|
1019
|
+
|
|
1020
|
+
## 0.13.2
|
|
1021
|
+
|
|
1022
|
+
- 叶子类名按语义补前缀(`bz-` / `dt-` / `flow-` / `ft-` / `ct-` / `hb-` / `ss-` / `ask-` 等 192 处),消除泛词类名复用隐患
|
|
1023
|
+
|
|
1024
|
+
## 0.13.1
|
|
1025
|
+
|
|
1026
|
+
- 修三个潜伏的结构性缺陷:孤立「身」角标残骸、解析详解块调色板失效、320px 下六爻盘横向溢出
|
|
1027
|
+
- 打印时折叠的详解自动展开;宫格补 `aria-expanded` 同步
|
|
1028
|
+
|
|
1029
|
+
## 0.13.0
|
|
1030
|
+
|
|
1031
|
+
- 八字四柱表按专业排盘版式重排(四列并排、无竖线、干支大字、十神分组着色、藏干逐行)
|
|
1032
|
+
- 末行新增五行旺相休囚死;修 `td.big` 选择器长期失效
|
|
1033
|
+
|
|
1034
|
+
## 0.12.0
|
|
1035
|
+
|
|
1036
|
+
- 紫微补流月 / 流日 / 流时(斗君逐级下推),接入盘面与解读
|
|
1037
|
+
|
|
1038
|
+
## 0.11.0
|
|
1039
|
+
|
|
1040
|
+
- 深色主题(盘面颜色全变量化)、存为 PDF / 打印、修 390px 下塔罗 tab 被裁
|
|
1041
|
+
|
|
1042
|
+
## 0.10.0
|
|
1043
|
+
|
|
1044
|
+
- 紫微宫位可点击展开详情、三方四正联动;修「身宫整格消失」的类名撞车
|
|
1045
|
+
|
|
1046
|
+
## 0.9.0
|
|
1047
|
+
|
|
1048
|
+
- 紫微十四主星加庙旺得利平不陷亮度标注;塔罗面板可选 1/3/5 张牌阵
|
|
1049
|
+
|
|
1050
|
+
## 0.8.x
|
|
1051
|
+
|
|
1052
|
+
- 0.8.0 起卦 tab 新增「所问之事 + 询问方向」,解读按问题展开;解析区可折叠
|
|
1053
|
+
- 0.8.1 紫微解读补化科、流年四化不再截断
|
|
1054
|
+
- 0.8.2 手机竖屏紫微盘恢复 4×4 宫盘
|
|
1055
|
+
- 0.8.3 竖屏布局改用容器查询,修窄侧栏下盘面挤成一团
|
|
1056
|
+
|
|
1057
|
+
## 0.7.0
|
|
1058
|
+
|
|
1059
|
+
- 新增「解析与详解」模块:五维度解析、卦象卦辞爻辞动爻、塔罗连贯解读,带免责提示
|
|
1060
|
+
|
|
1061
|
+
## 0.6.0
|
|
1062
|
+
|
|
1063
|
+
- 六爻 / 梅花 / 六壬面板重绘(真爻线、体用标注、天地盘方盘);输入区区分出生时间与起卦时刻
|
|
1064
|
+
|
|
1065
|
+
## 0.5.0
|
|
1066
|
+
|
|
1067
|
+
- 八字 42 神煞(七类、双查法)+ 格局 / 用神 / 大运流年评分
|
|
1068
|
+
- 紫微 34 格局、大限一览、流年四化
|
|
1069
|
+
- 塔罗模块重写:78 张牌、牌阵位义、6–8 段解读、体系声明
|
|
1070
|
+
- 首个进入插件市场投稿流程的版本(awesome-dsh-plugin PR)
|