@longzai-intelligence-debts/ledger 0.0.0-stage → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1013 @@
1
+ import "./rolldown-runtime-BqT_7tdF.js";
2
+ import { LziDebtsConfig } from "@longzai-intelligence-debts/config";
3
+ /**
4
+ * 注册表目录扫描工具
5
+ *
6
+ * fs 编排层,读侧统一入口:lint、index check 与 list 共用本扫描,文件枚举
7
+ * 口径单一
8
+ */
9
+ /**
10
+ * 扫描到的注册表条目
11
+ */
12
+ type ScannedDebt = {
13
+ /**
14
+ * 文件基名
15
+ *
16
+ * @remarks
17
+ * 含扩展名
18
+ */
19
+ basename: string;
20
+ /**
21
+ * 编号键
22
+ *
23
+ * @remarks
24
+ * 数字字符串原样,宽口径非编号形态为 null
25
+ */
26
+ key: string | null;
27
+ /**
28
+ * 绝对路径
29
+ */
30
+ absPath: string;
31
+ };
32
+ /**
33
+ * 扫描注册表目录
34
+ *
35
+ * @remarks
36
+ * 仅 `.md` 文件,按编号键升序,目录不存在返回空数组
37
+ * @param dirAbs - 注册表目录绝对路径
38
+ * @returns 扫描条目列表
39
+ */
40
+ declare function scanDebtsDir(dirAbs: string): ScannedDebt[];
41
+ /**
42
+ * debts README 索引差量核
43
+ *
44
+ * 只查不写。索引行人工登记、工具只检查不写入,与 decision 项目 index 先例
45
+ * 同款裁定。判定三态:缺行即文件在而索引无、多行即索引有而文件无、slug 漂
46
+ * 移即索引链接 slug 与实际文件 slug 不一致。报文附期望行供人工粘贴
47
+ *
48
+ * @remarks
49
+ * debts 索引方言为四列表格行,列为编号、标题、类型、状态。类型与状态是
50
+ * 技术债的首要追踪维度,表格行承载两列。链接引用提取复用 docs 平台
51
+ * registry-index 宽口径工厂,表格单元格内的链接天然可匹配
52
+ */
53
+ /**
54
+ * 索引差量发现条目
55
+ */
56
+ type IndexCheckFinding = {
57
+ /**
58
+ * 发现类别
59
+ *
60
+ * @remarks
61
+ * readme-missing 即 README 未建、missing 即缺行、stale 即多行、
62
+ * slug-drift 即 slug 漂移
63
+ */
64
+ kind: 'readme-missing' | 'missing' | 'stale' | 'slug-drift';
65
+ /**
66
+ * 相关文件
67
+ *
68
+ * @remarks
69
+ * posix 相对注册表目录
70
+ */
71
+ file: string;
72
+ /**
73
+ * 发现消息
74
+ */
75
+ message: string;
76
+ };
77
+ /**
78
+ * 索引差量结果
79
+ */
80
+ type IndexCheckResult = {
81
+ /**
82
+ * 新鲜判定
83
+ *
84
+ * @remarks
85
+ * 无任何发现
86
+ */
87
+ ok: boolean;
88
+ /**
89
+ * 发现列表
90
+ */
91
+ findings: IndexCheckFinding[];
92
+ /**
93
+ * 期望索引行列表
94
+ *
95
+ * @remarks
96
+ * 供人工粘贴
97
+ */
98
+ expectedLines: string[];
99
+ /**
100
+ * 注册表文件数
101
+ */
102
+ fileCount: number;
103
+ /**
104
+ * 索引引用数
105
+ */
106
+ indexedCount: number;
107
+ };
108
+ /**
109
+ * 索引差量入参
110
+ */
111
+ type IndexCheckInput = {
112
+ /**
113
+ * 注册表目录绝对路径
114
+ */
115
+ registryDirAbs: string;
116
+ };
117
+ /**
118
+ * 索引表行渲染入参
119
+ */
120
+ type IndexTableRowInput = {
121
+ /**
122
+ * 编号
123
+ */
124
+ number: string;
125
+ /**
126
+ * 标题
127
+ */
128
+ title: string;
129
+ /**
130
+ * 链接目标文件基名
131
+ */
132
+ target: string;
133
+ /**
134
+ * 债务类型中文名
135
+ */
136
+ typeLabel: string;
137
+ /**
138
+ * 状态中文名
139
+ */
140
+ statusLabel: string;
141
+ };
142
+ /**
143
+ * 渲染索引表行
144
+ *
145
+ * @param input - 索引表行渲染入参
146
+ * @returns 索引表行全文
147
+ */
148
+ declare function renderIndexTableRow(input: IndexTableRowInput): string;
149
+ /**
150
+ * 运行索引差量检查
151
+ *
152
+ * @remarks
153
+ * 只读,本函数不写任何文件
154
+ * @param input - 检查入参
155
+ * @returns 差量结果
156
+ */
157
+ declare function runIndexCheck(input: IndexCheckInput): IndexCheckResult;
158
+ /**
159
+ * lint 违例条目
160
+ */
161
+ type DebtsLintViolation = {
162
+ /**
163
+ * 规则名
164
+ */
165
+ rule: string;
166
+ /**
167
+ * 文件
168
+ *
169
+ * @remarks
170
+ * posix 相对仓库根
171
+ */
172
+ file: string;
173
+ /**
174
+ * 行号
175
+ *
176
+ * @remarks
177
+ * 1 起算
178
+ */
179
+ line: number;
180
+ /**
181
+ * 违例消息
182
+ */
183
+ message: string;
184
+ };
185
+ /**
186
+ * lint 结果
187
+ */
188
+ type DebtsLintResult = {
189
+ /**
190
+ * 基线豁免后的违例列表
191
+ */
192
+ violations: DebtsLintViolation[];
193
+ /**
194
+ * 扫描文件数
195
+ */
196
+ fileCount: number;
197
+ /**
198
+ * 基线豁免命中数
199
+ *
200
+ * @remarks
201
+ * 棘轮观测面
202
+ */
203
+ exemptedCount: number;
204
+ };
205
+ /**
206
+ * lint 入参
207
+ */
208
+ type DebtsLintInput = {
209
+ /**
210
+ * 仓库根绝对路径
211
+ */
212
+ root: string;
213
+ /**
214
+ * 解析后配置
215
+ */
216
+ config: LziDebtsConfig;
217
+ };
218
+ /**
219
+ * 运行 lint
220
+ *
221
+ * @remarks
222
+ * 全 scope 注册表,只读
223
+ * @param input - lint 入参
224
+ * @returns lint 结果,违例空列表为通过
225
+ */
226
+ declare function runDebtsLint(input: DebtsLintInput): DebtsLintResult;
227
+ /**
228
+ * normalize-header 迁移核
229
+ *
230
+ * 旧 blockquote 方言头部迁移为粗体标签正本形态:双方言解析头部九键,状态
231
+ * 值经词表映射补灯位,按规范序重排为正本行,H1 与正文原样保留。幂等即产
232
+ * 品等于原文时零变更。零丢失守卫即每字段值须在产物文本在场,命中失败拒绝
233
+ * 落盘。命令名与 issues 的 normalize-header 先例一致
234
+ */
235
+ /**
236
+ * 迁移形态
237
+ */
238
+ type NormalizeHeaderOutcome = 'rewritten' | 'unchanged' | 'failed';
239
+ /**
240
+ * 迁移结果
241
+ */
242
+ type NormalizeHeaderResult = {
243
+ /**
244
+ * 迁移形态
245
+ */
246
+ outcome: NormalizeHeaderOutcome;
247
+ /**
248
+ * 产物全文
249
+ *
250
+ * @remarks
251
+ * unchanged 与 failed 时为原文
252
+ */
253
+ content: string;
254
+ /**
255
+ * 结果说明
256
+ *
257
+ * @remarks
258
+ * failed 含失败原因
259
+ */
260
+ message: string;
261
+ };
262
+ /**
263
+ * 迁移单份债档头部
264
+ *
265
+ * @remarks
266
+ * 正本形态幂等零变更,状态值词表外或 H1 非法即 failed 不落盘
267
+ * @param content - 债档全文
268
+ * @returns 迁移结果
269
+ */
270
+ declare function normalizeDebtHeader(content: string): NormalizeHeaderResult;
271
+ /**
272
+ * debt 文档解析器
273
+ *
274
+ * 判定全部基于本解析器产物,口径单一真源在 format.utils。解析头部即 H1
275
+ * 与元数据行全集,正本粗体标签形态与旧 blockquote 方言均通吃,正本优先
276
+ * 命中,旧方言行号入产物供 lint 方言执法与翻态核拦截消费,另扫描正文固
277
+ * 定节命中次序与第四节内容
278
+ */
279
+ /**
280
+ * 解析后的 debt 头部与正文结构
281
+ */
282
+ type ParsedDebt = {
283
+ /**
284
+ * H1 编号
285
+ *
286
+ * @remarks
287
+ * 数字字符串原样
288
+ */
289
+ number: string;
290
+ /**
291
+ * H1 标题
292
+ */
293
+ title: string;
294
+ /**
295
+ * 债务类型中文名
296
+ *
297
+ * @remarks
298
+ * 行缺席为 null,词表判定归 lint
299
+ */
300
+ typeLabel: string | null;
301
+ /**
302
+ * 记录日期
303
+ *
304
+ * @remarks
305
+ * YYYY-MM-DD
306
+ */
307
+ date: string | null;
308
+ /**
309
+ * 状态中文名
310
+ *
311
+ * @remarks
312
+ * 行缺席为 null,词表判定归 lint
313
+ */
314
+ statusLabel: string | null;
315
+ /**
316
+ * 来源
317
+ */
318
+ source: string | null;
319
+ /**
320
+ * 关联
321
+ *
322
+ * @remarks
323
+ * 可选行缺席为 null
324
+ */
325
+ ref: string | null;
326
+ /**
327
+ * 清偿日期
328
+ *
329
+ * @remarks
330
+ * YYYY-MM-DD,行缺席为 null
331
+ */
332
+ settleDate: string | null;
333
+ /**
334
+ * 清偿记录
335
+ *
336
+ * @remarks
337
+ * 指向操作细节正本,行缺席为 null
338
+ */
339
+ settleRecord: string | null;
340
+ /**
341
+ * 豁免日期
342
+ *
343
+ * @remarks
344
+ * YYYY-MM-DD,行缺席为 null
345
+ */
346
+ waiveDate: string | null;
347
+ /**
348
+ * 豁免理由
349
+ *
350
+ * @remarks
351
+ * 行缺席为 null
352
+ */
353
+ waiveReason: string | null;
354
+ /**
355
+ * 头部元数据结束行下标
356
+ *
357
+ * @remarks
358
+ * 0 起算即首个非元数据非空行下标,正文起始参考,展示行号须加一
359
+ */
360
+ headerEndLine: number;
361
+ /**
362
+ * 状态行行号
363
+ *
364
+ * @remarks
365
+ * 0 表示状态行缺席,settle 与 waive 翻态定位用
366
+ */
367
+ statusLineIndex: number;
368
+ /**
369
+ * 首个旧方言元数据行下标
370
+ *
371
+ * @remarks
372
+ * 0 表示头部无旧方言行,非零即头部存在 blockquote 旧方言,供 lint 的
373
+ * 方言执法与翻态核的方言拦截消费
374
+ */
375
+ legacyHeaderLine: number;
376
+ /**
377
+ * 正文固定节命中次序
378
+ *
379
+ * @remarks
380
+ * 元素为节下标即 0 至 3,按出现次序记录,缺席节不出现
381
+ */
382
+ sectionHits: number[];
383
+ /**
384
+ * 第四节正文内容
385
+ *
386
+ * @remarks
387
+ * 节头与下一节头或文末之间的非空行拼接,节缺席或全空为 null
388
+ */
389
+ settleSectionContent: string | null;
390
+ };
391
+ /**
392
+ * 解析问题条目
393
+ */
394
+ type DebtParseIssue = {
395
+ /**
396
+ * 行号
397
+ *
398
+ * @remarks
399
+ * 1 起算,0 为全文级
400
+ */
401
+ line: number;
402
+ /**
403
+ * 问题消息
404
+ */
405
+ message: string;
406
+ };
407
+ /**
408
+ * 解析结果
409
+ */
410
+ type DebtParseResult = {
411
+ /**
412
+ * 解析后的头部与正文结构
413
+ *
414
+ * @remarks
415
+ * H1 非法时为 null
416
+ */
417
+ debt: ParsedDebt | null;
418
+ /**
419
+ * 解析问题列表
420
+ *
421
+ * @remarks
422
+ * 空列表为合法建档态
423
+ */
424
+ issues: DebtParseIssue[];
425
+ };
426
+ /**
427
+ * 解析 debt 文档全文
428
+ *
429
+ * @param content - 文档全文
430
+ * @returns 解析结果。骨架建档态即占位值可解析且无问题
431
+ */
432
+ declare function parseDebtDoc(content: string): DebtParseResult;
433
+ /**
434
+ * 正文固定节扫描结果
435
+ */
436
+ type SectionScanResult = {
437
+ /**
438
+ * 节命中次序
439
+ */
440
+ sectionHits: number[];
441
+ /**
442
+ * 第四节正文内容
443
+ *
444
+ * @remarks
445
+ * 节缺席或全空为 null
446
+ */
447
+ settleSectionContent: string | null;
448
+ };
449
+ /**
450
+ * debts 格式口径单一真源
451
+ *
452
+ * 全部格式口径即文件名形态、H1 形态、头部元数据行、债务类型与状态词表、
453
+ * 正文固定节、占位符集中于此模块。读侧解析器、lint 与索引差量和写侧模板
454
+ * 渲染共用同一真源,杜绝两套口径漂移,create 产物在构造上天然通过 lint。
455
+ * slug 段消费 docs 平台共享基础模块的编号域源串,全族同源
456
+ *
457
+ * @remarks
458
+ * debts 定位:语义分型技术债注册表。与 records 的无分型通道不同,本域
459
+ * 头部元数据带类型与状态两个词表维度,正文带固定四节结构,生命周期翻态
460
+ * 仅经 settle 与 waive 两条通道。头部元数据行正本为粗体标签形态即
461
+ * `**键**: 值`,与 issues 头部元信息行风格一致,状态值带灯位前缀。
462
+ * blockquote 全角冒号为旧方言,读侧宽容兼容,迁移经 normalize-header
463
+ */
464
+ /**
465
+ * 文件名形态
466
+ *
467
+ * @remarks
468
+ * 编号 3-4 位零填充加编号域宽收集 slug 加 `\.md`
469
+ */
470
+ declare const DEBT_FILENAME_PATTERN: RegExp;
471
+ /**
472
+ * slug 合法形态
473
+ *
474
+ * @remarks
475
+ * 编号域宽收集 ASCII kebab,与全族共享基础同源,允许数字
476
+ */
477
+ declare const ASCII_KEBAB_SLUG_PATTERN: RegExp;
478
+ /**
479
+ * H1 形态
480
+ *
481
+ * @remarks
482
+ * 编号入 H1,em dash 分隔,产品群编号注册表主流形态
483
+ */
484
+ declare const DEBT_H1_PATTERN: RegExp;
485
+ /**
486
+ * 债务类型行形态
487
+ *
488
+ * @remarks
489
+ * 粗体标签元数据行,值为类型中文名
490
+ */
491
+ declare const TYPE_LINE_PATTERN: RegExp;
492
+ /**
493
+ * 记录日期行形态
494
+ *
495
+ * @remarks
496
+ * 粗体标签元数据行,YYYY-MM-DD
497
+ */
498
+ declare const DATE_LINE_PATTERN: RegExp;
499
+ /**
500
+ * 状态行形态
501
+ *
502
+ * @remarks
503
+ * 粗体标签元数据行,值为灯位状态词表值
504
+ */
505
+ declare const STATUS_LINE_PATTERN: RegExp;
506
+ /**
507
+ * 来源行形态
508
+ *
509
+ * @remarks
510
+ * 粗体标签元数据行,非空
511
+ */
512
+ declare const SOURCE_LINE_PATTERN: RegExp;
513
+ /**
514
+ * 关联行形态
515
+ *
516
+ * @remarks
517
+ * 粗体标签元数据行,可选,非空
518
+ */
519
+ declare const REF_LINE_PATTERN: RegExp;
520
+ /**
521
+ * 清偿日期行形态
522
+ *
523
+ * @remarks
524
+ * 粗体标签元数据行,仅已清偿债在场,YYYY-MM-DD
525
+ */
526
+ declare const SETTLE_DATE_LINE_PATTERN: RegExp;
527
+ /**
528
+ * 清偿记录行形态
529
+ *
530
+ * @remarks
531
+ * 粗体标签元数据行,已清偿债可选,指向操作细节正本
532
+ */
533
+ declare const SETTLE_RECORD_LINE_PATTERN: RegExp;
534
+ /**
535
+ * 豁免日期行形态
536
+ *
537
+ * @remarks
538
+ * 粗体标签元数据行,仅已豁免债在场,YYYY-MM-DD
539
+ */
540
+ declare const WAIVE_DATE_LINE_PATTERN: RegExp;
541
+ /**
542
+ * 豁免理由行形态
543
+ *
544
+ * @remarks
545
+ * 粗体标签元数据行,仅已豁免债在场,非空
546
+ */
547
+ declare const WAIVE_REASON_LINE_PATTERN: RegExp;
548
+ /**
549
+ * 债务类型行旧方言形态
550
+ *
551
+ * @remarks
552
+ * blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
553
+ */
554
+ declare const LEGACY_TYPE_LINE_PATTERN: RegExp;
555
+ /**
556
+ * 记录日期行旧方言形态
557
+ *
558
+ * @remarks
559
+ * blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
560
+ */
561
+ declare const LEGACY_DATE_LINE_PATTERN: RegExp;
562
+ /**
563
+ * 状态行旧方言形态
564
+ *
565
+ * @remarks
566
+ * blockquote 元数据行即历史正本,值为无灯位旧词表值,读侧宽容兼容
567
+ */
568
+ declare const LEGACY_STATUS_LINE_PATTERN: RegExp;
569
+ /**
570
+ * 来源行旧方言形态
571
+ *
572
+ * @remarks
573
+ * blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
574
+ */
575
+ declare const LEGACY_SOURCE_LINE_PATTERN: RegExp;
576
+ /**
577
+ * 关联行旧方言形态
578
+ *
579
+ * @remarks
580
+ * blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
581
+ */
582
+ declare const LEGACY_REF_LINE_PATTERN: RegExp;
583
+ /**
584
+ * 清偿日期行旧方言形态
585
+ *
586
+ * @remarks
587
+ * blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
588
+ */
589
+ declare const LEGACY_SETTLE_DATE_LINE_PATTERN: RegExp;
590
+ /**
591
+ * 清偿记录行旧方言形态
592
+ *
593
+ * @remarks
594
+ * blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
595
+ */
596
+ declare const LEGACY_SETTLE_RECORD_LINE_PATTERN: RegExp;
597
+ /**
598
+ * 豁免日期行旧方言形态
599
+ *
600
+ * @remarks
601
+ * blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
602
+ */
603
+ declare const LEGACY_WAIVE_DATE_LINE_PATTERN: RegExp;
604
+ /**
605
+ * 豁免理由行旧方言形态
606
+ *
607
+ * @remarks
608
+ * blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
609
+ */
610
+ declare const LEGACY_WAIVE_REASON_LINE_PATTERN: RegExp;
611
+ /**
612
+ * 头部元数据键:债务类型
613
+ */
614
+ declare const TYPE_LINE_KEY = "债务类型";
615
+ /**
616
+ * 头部元数据键:记录日期
617
+ */
618
+ declare const DATE_LINE_KEY = "记录日期";
619
+ /**
620
+ * 头部元数据键:状态
621
+ */
622
+ declare const STATUS_LINE_KEY = "状态";
623
+ /**
624
+ * 头部元数据键:来源
625
+ */
626
+ declare const SOURCE_LINE_KEY = "来源";
627
+ /**
628
+ * 头部元数据键:关联
629
+ */
630
+ declare const REF_LINE_KEY = "关联";
631
+ /**
632
+ * 头部元数据键:清偿日期
633
+ */
634
+ declare const SETTLE_DATE_LINE_KEY = "清偿日期";
635
+ /**
636
+ * 头部元数据键:清偿记录
637
+ */
638
+ declare const SETTLE_RECORD_LINE_KEY = "清偿记录";
639
+ /**
640
+ * 头部元数据键:豁免日期
641
+ */
642
+ declare const WAIVE_DATE_LINE_KEY = "豁免日期";
643
+ /**
644
+ * 头部元数据键:豁免理由
645
+ */
646
+ declare const WAIVE_REASON_LINE_KEY = "豁免理由";
647
+ /**
648
+ * 渲染头部粗体标签元数据行
649
+ *
650
+ * @remarks
651
+ * 形态为 `**键**: 值` 即半角冒号加空格,与 issues 头部元信息行风格一致。
652
+ * 渲染器、翻态核、normalize 迁移核、桌面宿主与聚合的写侧共用本真源,
653
+ * 禁止各处手拼第二套形态
654
+ * @param key - 元数据键
655
+ * @param value - 元数据值
656
+ * @returns 头部元数据行全文
657
+ */
658
+ declare function renderHeaderLine(key: string, value: string): string;
659
+ /**
660
+ * 债务类型键全集
661
+ *
662
+ * @remarks
663
+ * `create --type` 的封闭枚举,lint 按对应中文名执法
664
+ */
665
+ declare const DEBT_TYPE_KEYS: readonly ['transition', 'architecture', 'implementation', 'test', 'dependency', 'documentation'];
666
+ /**
667
+ * 债务类型键
668
+ */
669
+ type DebtTypeKey = (typeof DEBT_TYPE_KEYS)[number];
670
+ /**
671
+ * 债务类型中文名正本词表
672
+ *
673
+ * @remarks
674
+ * 键为 ASCII 枚举供命令行消费,值为头部元数据行与索引表的中文名。
675
+ * transition 过渡债:过渡期措施即双轨回落锚点与兼容垫片,所有过渡
676
+ * 措施必须立档,清偿路径节必须写明退役判据。architecture 架构债:
677
+ * 分层越界、所有权错位、拓扑简化。implementation 实现债:已知次优
678
+ * 实现。test 测试债:关键路径缺测或测试薄弱。dependency 依赖债:
679
+ * 钉版、过期、重复依赖。documentation 文档债:文档缺失或与实现漂移
680
+ */
681
+ declare const CANONICAL_DEBT_TYPE_LABELS: Record<DebtTypeKey, string>;
682
+ /**
683
+ * 债务状态键全集
684
+ */
685
+ declare const DEBT_STATUS_KEYS: readonly ['open', 'settled', 'waived'];
686
+ /**
687
+ * 债务状态键
688
+ */
689
+ type DebtStatusKey = (typeof DEBT_STATUS_KEYS)[number];
690
+ /**
691
+ * 债务状态中文名正本词表
692
+ *
693
+ * @remarks
694
+ * 值带灯位前缀,与 issues 状态行风格一致。open 未清偿:债在册待偿付。
695
+ * settled 已清偿:经 settle 翻态,须回填清偿日期与第四节清偿记录。
696
+ * waived 已豁免:经 waive 翻态,须携带豁免日期与豁免理由,理由须含
697
+ * 用户裁定
698
+ */
699
+ declare const CANONICAL_DEBT_STATUS_LABELS: Record<DebtStatusKey, string>;
700
+ /**
701
+ * 债务状态中文名旧方言词表
702
+ *
703
+ * @remarks
704
+ * 无灯位纯中文历史形态,读侧反查宽容兼容,正本迁移经 normalize-header
705
+ * 映射灯位词表
706
+ */
707
+ declare const LEGACY_DEBT_STATUS_LABELS: Record<DebtStatusKey, string>;
708
+ /**
709
+ * 正文固定节键全集
710
+ *
711
+ * @remarks
712
+ * 次序即规范位次,一背景、二债务事实、三清偿路径、四清偿记录
713
+ */
714
+ declare const SECTION_KEYS: readonly ['背景', '债务事实', '清偿路径', '清偿记录'];
715
+ /**
716
+ * 正文固定节序数前缀
717
+ */
718
+ declare const SECTION_ORDINALS: readonly ['一', '二', '三', '四'];
719
+ /**
720
+ * 正文固定节头形态全集
721
+ *
722
+ * @remarks
723
+ * 下标与 `SECTION_KEYS` 对位,`## 一、背景` 形态
724
+ */
725
+ declare const SECTION_HEADER_PATTERNS: readonly RegExp[];
726
+ /**
727
+ * 正文前三节占位符
728
+ *
729
+ * @remarks
730
+ * 建档即骨架,内容随立档回填
731
+ */
732
+ declare const SECTION_PLACEHOLDER = "待补充";
733
+ /**
734
+ * 第四节占位符
735
+ *
736
+ * @remarks
737
+ * 收口即 settle 与 waive 前必须替换为实文,settle 门禁拦截占位收口
738
+ */
739
+ declare const SETTLE_SECTION_PLACEHOLDER = "待收口后回填";
740
+ /**
741
+ * 索引链接模式
742
+ *
743
+ * @remarks
744
+ * README 索引表单元格中的注册表文件链接,消费 docs 平台
745
+ * registry-index 基础模块的宽口径工厂。编号域方言,比对锚为链接
746
+ * 目标即编号加 slug,链接文本形态宽容,表格单元格内的链接天然可匹配
747
+ */
748
+ declare const INDEX_LINK_PATTERN: RegExp;
749
+ /**
750
+ * 正则捕获组安全取值
751
+ *
752
+ * @param match - 正则命中结果
753
+ * @param index - 捕获组下标
754
+ * @returns 捕获组值
755
+ * @throws {@link Error} 未命中或捕获组越界,即格式口径与调用侧失配
756
+ */
757
+ declare function captureGroup(match: RegExpMatchArray | null, index: number): string;
758
+ /**
759
+ * 从文件名提取编号键
760
+ *
761
+ * @param basename - 文件基名
762
+ * @returns 编号键即数字字符串原样,非编号形态为 null
763
+ */
764
+ declare function extractDebtKey(basename: string): string | null;
765
+ /**
766
+ * 判定日期字符串是否为真实存在的日历日期
767
+ *
768
+ * @param date - 日期字符串
769
+ * @returns 真实日历日期为 true
770
+ */
771
+ declare function isRealCalendarDate(date: string): boolean;
772
+ /**
773
+ * 按中文名反查债务类型键
774
+ *
775
+ * @param label - 类型中文名
776
+ * @returns 命中的类型键,未命中为 null
777
+ */
778
+ declare function debtTypeKeyFromLabel(label: string): DebtTypeKey | null;
779
+ /**
780
+ * 按中文名反查债务状态键
781
+ *
782
+ * @remarks
783
+ * 正本灯位词表与旧方言词表均通吃,正本优先命中
784
+ * @param label - 状态中文名
785
+ * @returns 命中的状态键,未命中为 null
786
+ */
787
+ declare function debtStatusKeyFromLabel(label: string): DebtStatusKey | null;
788
+ /**
789
+ * 状态中文名归一为灯位正本词表值
790
+ *
791
+ * @remarks
792
+ * 旧方言无灯位值经本函数映射为正本值,正本值原样返回,供 normalize
793
+ * 迁移核消费
794
+ * @param label - 状态中文名,正本或旧方言形态
795
+ * @returns 灯位正本词表值,词表外为 null
796
+ */
797
+ declare function canonicalizeDebtStatusLabel(label: string): string | null;
798
+ /**
799
+ * 债务状态翻转核
800
+ *
801
+ * settle 清偿与 waive 豁免共用的翻态内核:翻状态行值、在状态行后追加收口
802
+ * 元数据行。幂等守卫即目标态已达成时零变更返回,状态行零命中即拒绝假翻态。
803
+ * settle 前置门禁拦截占位收口,第四节清偿记录仍为占位时拒绝清偿,先回填
804
+ * 证据再收口。waive 理由强制含用户裁定,非裁定不得豁免。头部为旧
805
+ * blockquote 方言时拒绝翻态,先经 normalize-header 迁移为正本形态
806
+ */
807
+ /**
808
+ * 翻转成功结果
809
+ */
810
+ type FlipSuccess = {
811
+ /**
812
+ * 成功标记
813
+ */
814
+ ok: true;
815
+ /**
816
+ * 翻转后全文
817
+ *
818
+ * @remarks
819
+ * 幂等零变更时为原文
820
+ */
821
+ content: string;
822
+ /**
823
+ * 是否发生变更
824
+ *
825
+ * @remarks
826
+ * 幂等命中为 false
827
+ */
828
+ changed: boolean;
829
+ };
830
+ /**
831
+ * 翻转失败结果
832
+ */
833
+ type FlipFailure = {
834
+ /**
835
+ * 成功标记
836
+ */
837
+ ok: false;
838
+ /**
839
+ * 失败原因
840
+ */
841
+ error: string;
842
+ };
843
+ /**
844
+ * 翻转结果
845
+ */
846
+ type FlipOutcome = FlipSuccess | FlipFailure;
847
+ /**
848
+ * settle 入参
849
+ */
850
+ type SettleInput = {
851
+ /**
852
+ * 债档全文
853
+ */
854
+ content: string;
855
+ /**
856
+ * 清偿日期
857
+ *
858
+ * @remarks
859
+ * YYYY-MM-DD
860
+ */
861
+ date: string;
862
+ /**
863
+ * 清偿记录
864
+ *
865
+ * @remarks
866
+ * 可选,指向操作细节正本
867
+ */
868
+ settleRecord?: string;
869
+ };
870
+ /**
871
+ * 清偿翻态
872
+ *
873
+ * @param input - settle 入参
874
+ * @returns 翻转结果。已清偿债幂等零变更,仅未清偿债可清偿,第四节占位即拒
875
+ */
876
+ declare function settleDebtDoc(input: SettleInput): FlipOutcome;
877
+ /**
878
+ * waive 入参
879
+ */
880
+ type WaiveInput = {
881
+ /**
882
+ * 债档全文
883
+ */
884
+ content: string;
885
+ /**
886
+ * 豁免日期
887
+ *
888
+ * @remarks
889
+ * YYYY-MM-DD
890
+ */
891
+ date: string;
892
+ /**
893
+ * 豁免理由
894
+ */
895
+ reason: string;
896
+ };
897
+ /**
898
+ * 豁免翻态
899
+ *
900
+ * @param input - waive 入参
901
+ * @returns 翻转结果。已豁免债幂等零变更,理由须含用户裁定,仅未清偿债可豁免
902
+ */
903
+ declare function waiveDebtDoc(input: WaiveInput): FlipOutcome;
904
+ /**
905
+ * instance 模式渲染入参
906
+ */
907
+ type DebtTemplateValues = {
908
+ /**
909
+ * 编号
910
+ *
911
+ * @remarks
912
+ * 3-4 位零填充,编号门禁取号分配
913
+ */
914
+ number: string;
915
+ /**
916
+ * slug
917
+ *
918
+ * @remarks
919
+ * ASCII kebab,中文标题须显式 `--slug`
920
+ */
921
+ slug: string;
922
+ /**
923
+ * 一句话标题
924
+ */
925
+ title: string;
926
+ /**
927
+ * 债务类型键
928
+ *
929
+ * @remarks
930
+ * 渲染为中文名正本词表值
931
+ */
932
+ type: DebtTypeKey;
933
+ /**
934
+ * 记录日期
935
+ *
936
+ * @remarks
937
+ * YYYY-MM-DD
938
+ */
939
+ date: string;
940
+ /**
941
+ * 来源
942
+ *
943
+ * @remarks
944
+ * 出处与日期
945
+ */
946
+ source: string;
947
+ /**
948
+ * 关联
949
+ *
950
+ * @remarks
951
+ * 可选,缺席时省略关联行
952
+ */
953
+ ref?: string;
954
+ };
955
+ /**
956
+ * 渲染标准模板骨架
957
+ *
958
+ * @remarks
959
+ * skeleton 模式,占位符形态,供 template 命令展示与指南活样板消费
960
+ * @returns 骨架全文,以单个换行结尾
961
+ */
962
+ declare function renderDebtTemplateSkeleton(): string;
963
+ /**
964
+ * 渲染标准模板实例
965
+ *
966
+ * @remarks
967
+ * instance 模式,头部元数据代入实际值,正文保留占位形态,建档即骨架,
968
+ * 内容随立档与收口回填
969
+ * @param values - 实际值入参
970
+ * @returns 可直接落盘的 debt 文档全文,以单个换行结尾
971
+ */
972
+ declare function renderDebtTemplate(values: DebtTemplateValues): string;
973
+ /**
974
+ * 渲染注册表 README 格式存根
975
+ *
976
+ * @remarks
977
+ * init 命令落盘,一页式格式速览:定位、词表、建档与收口、索引纪律。
978
+ * 索引行人工登记,工具只检查不写入,与 decision 项目 index 先例同款裁定
979
+ * @param scopeTitle - scope 人类可读名
980
+ * @returns README 存根全文
981
+ */
982
+ declare function renderRegistryReadmeStub(scopeTitle: string): string;
983
+ /**
984
+ * 模板字段说明条目
985
+ *
986
+ * @remarks
987
+ * template 命令 `--format json` 载荷
988
+ */
989
+ type TemplateFieldDoc = {
990
+ /**
991
+ * 字段名
992
+ *
993
+ * @remarks
994
+ * 渲染入参名或元信息键
995
+ */
996
+ name: string;
997
+ /**
998
+ * 是否必填
999
+ */
1000
+ required: boolean;
1001
+ /**
1002
+ * 字段说明
1003
+ */
1004
+ description: string;
1005
+ };
1006
+ /**
1007
+ * 标准模板字段说明全集
1008
+ *
1009
+ * @remarks
1010
+ * 供 agent 与使用者程序化消费
1011
+ */
1012
+ declare const TEMPLATE_FIELDS: readonly TemplateFieldDoc[];
1013
+ export { ASCII_KEBAB_SLUG_PATTERN, CANONICAL_DEBT_STATUS_LABELS, CANONICAL_DEBT_TYPE_LABELS, DATE_LINE_KEY, DATE_LINE_PATTERN, DEBT_FILENAME_PATTERN, DEBT_H1_PATTERN, DEBT_STATUS_KEYS, DEBT_TYPE_KEYS, DebtParseIssue, DebtParseResult, DebtStatusKey, DebtTemplateValues, DebtTypeKey, DebtsLintInput, DebtsLintResult, DebtsLintViolation, FlipFailure, FlipOutcome, FlipSuccess, INDEX_LINK_PATTERN, IndexCheckFinding, IndexCheckInput, IndexCheckResult, IndexTableRowInput, LEGACY_DATE_LINE_PATTERN, LEGACY_DEBT_STATUS_LABELS, LEGACY_REF_LINE_PATTERN, LEGACY_SETTLE_DATE_LINE_PATTERN, LEGACY_SETTLE_RECORD_LINE_PATTERN, LEGACY_SOURCE_LINE_PATTERN, LEGACY_STATUS_LINE_PATTERN, LEGACY_TYPE_LINE_PATTERN, LEGACY_WAIVE_DATE_LINE_PATTERN, LEGACY_WAIVE_REASON_LINE_PATTERN, NormalizeHeaderOutcome, NormalizeHeaderResult, ParsedDebt, REF_LINE_KEY, REF_LINE_PATTERN, SECTION_HEADER_PATTERNS, SECTION_KEYS, SECTION_ORDINALS, SECTION_PLACEHOLDER, SETTLE_DATE_LINE_KEY, SETTLE_DATE_LINE_PATTERN, SETTLE_RECORD_LINE_KEY, SETTLE_RECORD_LINE_PATTERN, SETTLE_SECTION_PLACEHOLDER, SOURCE_LINE_KEY, SOURCE_LINE_PATTERN, STATUS_LINE_KEY, STATUS_LINE_PATTERN, ScannedDebt, SectionScanResult, SettleInput, TEMPLATE_FIELDS, TYPE_LINE_KEY, TYPE_LINE_PATTERN, TemplateFieldDoc, WAIVE_DATE_LINE_KEY, WAIVE_DATE_LINE_PATTERN, WAIVE_REASON_LINE_KEY, WAIVE_REASON_LINE_PATTERN, WaiveInput, canonicalizeDebtStatusLabel, captureGroup, debtStatusKeyFromLabel, debtTypeKeyFromLabel, extractDebtKey, isRealCalendarDate, normalizeDebtHeader, parseDebtDoc, renderDebtTemplate, renderDebtTemplateSkeleton, renderHeaderLine, renderIndexTableRow, renderRegistryReadmeStub, runDebtsLint, runIndexCheck, scanDebtsDir, settleDebtDoc, waiveDebtDoc };
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ import"./rolldown-runtime-BqT_7tdF.js";import{existsSync as e,readFileSync as t,readdirSync as n}from"node:fs";import{join as r,posix as i}from"node:path";import{NUMBERED_SLUG_PATTERN as a,NUMBERED_SLUG_SOURCE as o,buildIndexLinkPattern as s,extractIndexRefs as c}from"@longzai-intelligence-docs/core";const l=RegExp(`^(\\d{3,4})-(${o})\\.md$`),u=a,d=/^# (\d{3,4}) — (.+)$/,f=/^\*\*债务类型\*\*: (.+)$/,p=/^\*\*记录日期\*\*: (\d{4}-\d{2}-\d{2})$/,m=/^\*\*状态\*\*: (.+)$/,ee=/^\*\*来源\*\*: (.+)$/,h=/^\*\*关联\*\*: (.+)$/,te=/^\*\*清偿日期\*\*: (\d{4}-\d{2}-\d{2})$/,g=/^\*\*清偿记录\*\*: (.+)$/,_=/^\*\*豁免日期\*\*: (\d{4}-\d{2}-\d{2})$/,ne=/^\*\*豁免理由\*\*: (.+)$/,re=/^> 债务类型:(.+)$/,v=/^> 记录日期:(\d{4}-\d{2}-\d{2})$/,y=/^> 状态:(.+)$/,b=/^> 来源:(.+)$/,x=/^> 关联:(.+)$/,S=/^> 清偿日期:(\d{4}-\d{2}-\d{2})$/,C=/^> 清偿记录:(.+)$/,w=/^> 豁免日期:(\d{4}-\d{2}-\d{2})$/,T=/^> 豁免理由:(.+)$/,E=`债务类型`,D=`记录日期`,O=`状态`,k=`来源`,A=`关联`,j=`清偿日期`,M=`清偿记录`,N=`豁免日期`,P=`豁免理由`;function F(e,t){return`**${e}**: ${t}`}const I=[`transition`,`architecture`,`implementation`,`test`,`dependency`,`documentation`],L={transition:`过渡债`,architecture:`架构债`,implementation:`实现债`,test:`测试债`,dependency:`依赖债`,documentation:`文档债`},R=[`open`,`settled`,`waived`],z={open:`🔴 未清偿`,settled:`🟢 已清偿`,waived:`⚫ 已豁免`},B={open:`未清偿`,settled:`已清偿`,waived:`已豁免`},V=[`背景`,`债务事实`,`清偿路径`,`清偿记录`],H=[`一`,`二`,`三`,`四`],U=[/^## 一、背景$/,/^## 二、债务事实$/,/^## 三、清偿路径$/,/^## 四、清偿记录$/],W=`待补充`,G=`待收口后回填`,K=s({numberSource:`\\d{3,4}`,slugSource:o});function q(e,t){if(e===null||e[t]===void 0)throw Error(`正则捕获组 ${t} 未命中,格式口径内部错误`);return e[t]}function J(e){let t=/^(\d{1,4})[-._]/.exec(e);return t===null?null:q(t,1)}function Y(e){let[t,n,r]=e.split(`-`).map(e=>Number.parseInt(e,10));if(t===void 0||n===void 0||r===void 0)return!1;let i=new Date(Date.UTC(t,n-1,r));return i.getUTCFullYear()===t&&i.getUTCMonth()===n-1&&i.getUTCDate()===r}function X(e){for(let t of I)if(L[t]===e)return t;return null}function Z(e){for(let t of R)if(z[t]===e||B[t]===e)return t;return null}function ie(e){let t=Z(e);return t===null?null:z[t]}function Q(e){return ae(e)?n(e).filter(e=>e.endsWith(`.md`)&&e!==`README.md`).map(t=>({basename:t,key:J(t),absPath:r(e,t)})).sort((e,t)=>(e.key??`zzzz`).localeCompare(t.key??`zzzz`)):[]}function ae(e){try{return n(e).length>=0}catch{return!1}}function $(e){let t=e.split(`
2
+ `),n=[],r=d.exec(t[0]??``);if(r===null)return n.push({line:1,message:`首行须为「# NNNN — 标题」形态 H1,编号入 H1,em dash 分隔`}),{debt:null,issues:n};let i=/* @__PURE__ */ new Map,a=0,o=0,s=1;for(;s<t.length;){let e=t[s]??``;if(e.trim()===``){s+=1;continue}let n=[{pattern:f,key:E,legacy:!1},{pattern:p,key:D,legacy:!1},{pattern:m,key:O,legacy:!1},{pattern:ee,key:k,legacy:!1},{pattern:h,key:A,legacy:!1},{pattern:te,key:j,legacy:!1},{pattern:g,key:M,legacy:!1},{pattern:_,key:N,legacy:!1},{pattern:ne,key:P,legacy:!1},{pattern:re,key:E,legacy:!0},{pattern:v,key:D,legacy:!0},{pattern:y,key:O,legacy:!0},{pattern:b,key:k,legacy:!0},{pattern:x,key:A,legacy:!0},{pattern:S,key:j,legacy:!0},{pattern:C,key:M,legacy:!0},{pattern:w,key:N,legacy:!0},{pattern:T,key:P,legacy:!0}],r=!1;for(let{pattern:t,key:c,legacy:l}of n){let n=t.exec(e);if(n!==null){i.set(c,q(n,1)),c===`状态`&&(a=s),l&&o===0&&(o=s),r=!0;break}}if(r)s+=1;else break}let{sectionHits:c,settleSectionContent:l}=oe(t);return{debt:{number:q(r,1),title:q(r,2),typeLabel:i.get(`债务类型`)??null,date:i.get(`记录日期`)??null,statusLabel:i.get(`状态`)??null,source:i.get(`来源`)??null,ref:i.get(`关联`)??null,settleDate:i.get(`清偿日期`)??null,settleRecord:i.get(`清偿记录`)??null,waiveDate:i.get(`豁免日期`)??null,waiveReason:i.get(`豁免理由`)??null,headerEndLine:s,statusLineIndex:a,legacyHeaderLine:o,sectionHits:c,settleSectionContent:l},issues:n}}function oe(e){let t=[],n=-1;for(let r=0;r<e.length;r+=1){let i=e[r]??``;for(let e=0;e<U.length;e+=1)U[e]?.test(i)===!0&&(t.push(e),e===3&&(n=r+1))}let r=[];if(n>=0)for(let t=n;t<e.length;t+=1){let n=e[t]??``;if(n.startsWith(`## `))break;n.trim()!==``&&r.push(n.trim())}return{sectionHits:t,settleSectionContent:r.length===0?null:r.join(`
3
+ `)}}function se(e){return`| ${e.number} | [${e.title}](./${e.target}) | ${e.typeLabel} | ${e.statusLabel} |`}function ce(n){let i=[],a=Q(n.registryDirAbs).filter(e=>l.test(e.basename)),o=new Map(a.map(e=>{let t=l.exec(e.basename);return[t===null?e.key??e.basename:q(t,1),e]})),s=r(n.registryDirAbs,`README.md`),u=e(s)?c(t(s,`utf8`),K):/* @__PURE__ */ new Map;e(s)||i.push({kind:`readme-missing`,file:`README.md`,message:`注册表 README 未建,init 可落存根,索引行人工登记`});let d=[];for(let e of a){let n=l.exec(e.basename);if(n===null)continue;let r=q(n,1),a=q(n,2),o=$(t(e.absPath,`utf8`));d.push(se({number:r,title:o.debt?.title??a,target:e.basename,typeLabel:o.debt?.typeLabel??`未知类型`,statusLabel:o.debt?.statusLabel??`未知状态`})),u.has(r)?u.get(r)!==a&&i.push({kind:`slug-drift`,file:e.basename,message:`索引 slug 漂移:索引指向 ${r}-${u.get(r)}.md,实际为 ${e.basename}`}):i.push({kind:`missing`,file:e.basename,message:`索引缺行:${e.basename},期望行见报文,人工登记`})}for(let[e,t]of u)o.has(e)||i.push({kind:`stale`,file:`${e}-${t}.md`,message:`索引多行:引用 ${e}-${t}.md 但文件不存在,删除索引行或补文件`});return{ok:i.length===0,findings:i,expectedLines:d,fileCount:a.length,indexedCount:u.size}}function le(e){let n=[],r=0,a=0;for(let r of e.config.scopes){let o=Q(pe(e.root,r.registryDir));a+=o.length;for(let e of o)ue(n,i.join(r.registryDir,e.basename),e.basename,t(e.absPath,`utf8`))}let o=new Set(e.config.lint.baseline.map(e=>`${e.file}|${e.rule}`));return{violations:n.filter(e=>{let t=o.has(`${e.file}|${e.rule}`);return t&&(r+=1),!t}),fileCount:a,exemptedCount:r}}function ue(e,t,n,r){let i=l.exec(n);if(i===null){e.push({rule:`D-FILENAME`,file:t,line:0,message:`文件名须为「NNNN-<slug>.md」形态,编号 3-4 位零填充加 ASCII kebab`});return}let a=$(r);if(a.debt===null)for(let n of a.issues)e.push({rule:`D-H1`,file:t,line:n.line,message:n.message});else a.debt.number!==i[1]&&e.push({rule:`D-H1-NUMBER`,file:t,line:1,message:`H1 编号「${a.debt.number}」与文件名编号「${i[1]}」不一致`}),a.debt.legacyHeaderLine!==0&&e.push({rule:`D-HEADER-DIALECT`,file:t,line:a.debt.legacyHeaderLine+1,message:`头部元数据行为旧 blockquote 方言,运行 lzi-debts normalize-header 迁移为粗体标签正本形态`}),a.debt.typeLabel===null?e.push({rule:`D-TYPE-LINE`,file:t,line:a.debt.headerEndLine+1,message:`头部缺「**债务类型**: <类型中文名>」元数据行`}):X(a.debt.typeLabel)===null&&e.push({rule:`D-TYPE-LINE`,file:t,line:2,message:`债务类型「${a.debt.typeLabel}」不在词表内,合法值为 ${Object.values(L).join(`、`)}`}),a.debt.date===null?e.push({rule:`D-DATE-LINE`,file:t,line:a.debt.headerEndLine+1,message:`头部缺「**记录日期**: YYYY-MM-DD」元数据行`}):Y(a.debt.date)||e.push({rule:`D-DATE-REAL`,file:t,line:2,message:`记录日期「${a.debt.date}」非真实日历日期`}),a.debt.statusLabel===null?e.push({rule:`D-STATUS-LINE`,file:t,line:a.debt.headerEndLine+1,message:`头部缺「**状态**: <灯位状态词表值>」元数据行`}):Z(a.debt.statusLabel)===null&&e.push({rule:`D-STATUS-LINE`,file:t,line:2,message:`状态「${a.debt.statusLabel}」不在词表内,合法值为 ${Object.values(z).join(`、`)}`}),a.debt.source===null&&e.push({rule:`D-SOURCE-LINE`,file:t,line:a.debt.headerEndLine+1,message:`头部缺「**来源**: <出处>」元数据行`}),de(e,t,a.debt.sectionHits),fe(e,t,a.debt)}function de(e,t,n){for(let r=0;r<V.length;r+=1)n.includes(r)||e.push({rule:`D-SECTION-MISSING`,file:t,line:0,message:`正文缺固定节「${V[r]}」`});let r=-1;for(let i of n){if(i<=r){e.push({rule:`D-SECTION-ORDER`,file:t,line:0,message:`正文固定节乱序或重复,规范次序为背景、债务事实、清偿路径、清偿记录`});break}r=i}}function fe(e,t,n){let r=n.statusLabel===null?null:Z(n.statusLabel);r===`open`?(n.settleDate!==null||n.waiveDate!==null)&&e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`未清偿债不得携带清偿日期或豁免日期元数据行,翻态仅经 settle 与 waive 通道`}):r===`settled`?(n.settleDate===null?e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`已清偿债缺「**清偿日期**: YYYY-MM-DD」元数据行`}):Y(n.settleDate)||e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`清偿日期「${n.settleDate}」非真实日历日期`}),(n.settleSectionContent===null||n.settleSectionContent===`待收口后回填`)&&e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:0,message:`已清偿债第四节清偿记录须回填实文,不得保留占位`})):r===`waived`&&(n.waiveDate===null?e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`已豁免债缺「**豁免日期**: YYYY-MM-DD」元数据行`}):Y(n.waiveDate)||e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`豁免日期「${n.waiveDate}」非真实日历日期`}),n.waiveReason===null&&e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`已豁免债缺「**豁免理由**: <理由>」元数据行,理由须含用户裁定`}))}function pe(e,t){return`${e.replace(/\/+$/,``)}/${t}`}function me(e){let t=$(e);if(t.debt===null)return{outcome:`failed`,content:e,message:`H1 非法,无法定位头部迁移锚点`};if(t.debt.statusLabel===null)return{outcome:`failed`,content:e,message:`状态行缺席,灯位词表映射无输入`};let n=ie(t.debt.statusLabel);if(n===null)return{outcome:`failed`,content:e,message:`状态「${t.debt.statusLabel}」不在词表内,无法映射灯位词表`};let r=[{key:E,value:t.debt.typeLabel},{key:D,value:t.debt.date},{key:O,value:n},{key:j,value:t.debt.settleDate},{key:M,value:t.debt.settleRecord},{key:N,value:t.debt.waiveDate},{key:P,value:t.debt.waiveReason},{key:k,value:t.debt.source},{key:A,value:t.debt.ref}].filter(e=>e.value!==null),i=e.split(`
4
+ `),a=[i[0]??``,``,...r.map(e=>F(e.key,e.value)),``,...i.slice(t.debt.headerEndLine)].join(`
5
+ `),o=r.filter(e=>!a.includes(F(e.key,e.value)));return o.length>0?{outcome:`failed`,content:e,message:`零丢失守卫失败:字段 ${o.map(e=>e.key).join(`、`)} 未在产物在场`}:a===e?{outcome:`unchanged`,content:e,message:`头部已是粗体标签正本形态`}:{outcome:`rewritten`,content:a,message:`头部已迁移为粗体标签正本形态`}}function he(e){let t=$(e.content);if(t.debt===null)return{ok:!1,error:`债档 H1 非法,无法定位翻态锚点`};if(t.debt.legacyHeaderLine!==0)return{ok:!1,error:`头部元数据行为旧 blockquote 方言,先运行 lzi-debts normalize-header 迁移再翻态`};if(t.debt.statusLabel===z.settled)return{ok:!0,content:e.content,changed:!1};if(t.debt.statusLabel!==z.open)return{ok:!1,error:`状态为「${t.debt.statusLabel}」,仅未清偿债可清偿`};if(t.debt.settleSectionContent===null||t.debt.settleSectionContent===`待收口后回填`)return{ok:!1,error:`第四节清偿记录仍为占位,先回填清偿证据再执行 settle`};let n=[F(j,e.date)];return e.settleRecord!==void 0&&n.push(F(M,e.settleRecord)),{ok:!0,content:_e(e.content,t.debt.statusLineIndex,z.settled,n),changed:!0}}function ge(e){let t=$(e.content);if(t.debt===null)return{ok:!1,error:`债档 H1 非法,无法定位翻态锚点`};if(t.debt.legacyHeaderLine!==0)return{ok:!1,error:`头部元数据行为旧 blockquote 方言,先运行 lzi-debts normalize-header 迁移再翻态`};if(t.debt.statusLabel===z.waived)return{ok:!0,content:e.content,changed:!1};if(t.debt.statusLabel!==z.open)return{ok:!1,error:`状态为「${t.debt.statusLabel}」,仅未清偿债可豁免`};if(!e.reason.includes(`用户裁定`))return{ok:!1,error:`豁免理由须含「用户裁定」,非裁定不得豁免`};let n=[F(N,e.date),F(P,e.reason)];return{ok:!0,content:_e(e.content,t.debt.statusLineIndex,z.waived,n),changed:!0}}function _e(e,t,n,r){let i=e.split(`
6
+ `),a=i[t];if(a===void 0||!m.test(a))throw Error(`状态行定位失败,拒绝假翻态`);return i[t]=F(O,n),i.splice(t+1,0,...r),i.join(`
7
+ `)}function ve(e,t,n,r,i,a){let o=[`# ${e} — ${t}`,``,F(E,n),F(D,r),F(O,z.open),F(k,i)];return a!==void 0&&o.push(F(A,a)),o}function ye(){let e=[];for(let t=0;t<V.length;t+=1){let n=V[t],r=H[t],i=t===3?G:W;e.push(`## ${r}、${n}`,``,i,``)}return e}function be(){return[...ve(`<NNNN>`,`<一句话标题>`,`<债务类型中文名>`,`<YYYY-MM-DD>`,`<出处与日期>`,`<可选:关联条目链接,缺席省略本行>`),``,...ye()].join(`
8
+ `)}function xe(e){return[...ve(e.number,e.title,L[e.type],e.date,e.source,e.ref),``,...ye()].join(`
9
+ `)}function Se(e){return[`# ${e} debts 注册表`,``,"本目录是 lzi-debts 技术债注册表,文件名 `NNNN-<slug>.md`,编号独立序列。",``,`debts 定位:**语义分型的技术债注册表**,一债一档带生命周期。所有过渡措施必须立档,无档过渡即违规。`,``,`## 债务类型词表`,``,"- `transition` 过渡债:过渡期措施,含双轨回落锚点与兼容垫片,清偿路径节必须写明退役判据","- `architecture` 架构债:分层越界、所有权错位、拓扑简化","- `implementation` 实现债:已知次优实现","- `test` 测试债:关键路径缺测或测试薄弱","- `dependency` 依赖债:钉版、过期、重复依赖","- `documentation` 文档债:文档缺失或与实现漂移",``,`## 状态词表`,``,"- `🔴 未清偿`:债在册待偿付","- `🟢 已清偿`:经 `settle` 翻态,第四节须回填清偿记录","- `⚫ 已豁免`:经 `waive` 翻态,理由须含用户裁定",``,`## 建档与收口`,``,"- `lzi-debts create --title <t> --type <key> --source <src>` 取号经 numbering 插件,写入时刻确定,禁止手工定号","- `lzi-debts settle --number <n>` 先回填第四节清偿记录再清偿翻态","- `lzi-debts waive --number <n> --reason <r>` 豁免理由须含用户裁定","- `lzi-debts normalize-header` 旧 blockquote 方言头部迁移为粗体标签正本形态","- 标准模板:`lzi-debts template`,字段契约 `--format json`",``,`## 索引`,``,"- 索引行**人工登记**,工具只检查不写入:`lzi-debts index check` 报差量并附期望行",``,`| 编号 | 标题 | 类型 | 状态 |`,`| --- | --- | --- | --- |`,``,`## 头部元数据`,``,"- `**债务类型**: <类型中文名>` 强制","- `**记录日期**: YYYY-MM-DD` 强制","- `**状态**: <灯位状态词表值>` 强制","- `**来源**: <出处与日期>` 强制","- `**关联**: <条目链接>` 可选",``].join(`
10
+ `)}const Ce=[{name:`number`,required:!0,description:`scope 内编号,3-4 位零填充,由编号门禁取号分配,写入时刻确定`},{name:`slug`,required:!0,description:`ASCII kebab slug,小写字母、数字与连字符,禁中文,中文标题须显式 --slug`},{name:`title`,required:!0,description:`一句话标题`},{name:`债务类型`,required:!0,description:`封闭词表键即 transition、architecture、implementation、test、dependency、documentation,头部元数据行写对应中文名`},{name:`记录日期`,required:!0,description:`YYYY-MM-DD,头部粗体标签元数据行,强制`},{name:`状态`,required:!0,description:`三值灯位词表即 🔴 未清偿、🟢 已清偿、⚫ 已豁免,建档固定 🔴 未清偿,翻态仅经 settle 与 waive 通道`},{name:`来源`,required:!0,description:`出处与日期,头部粗体标签元数据行,强制`},{name:`关联`,required:!1,description:`关联条目链接,头部粗体标签元数据行,缺席省略整行`},{name:`正文四节`,required:!0,description:`固定四节即背景、债务事实、清偿路径、清偿记录,建档为占位,内容随立档与收口回填`}];export{u as ASCII_KEBAB_SLUG_PATTERN,z as CANONICAL_DEBT_STATUS_LABELS,L as CANONICAL_DEBT_TYPE_LABELS,D as DATE_LINE_KEY,p as DATE_LINE_PATTERN,l as DEBT_FILENAME_PATTERN,d as DEBT_H1_PATTERN,R as DEBT_STATUS_KEYS,I as DEBT_TYPE_KEYS,K as INDEX_LINK_PATTERN,v as LEGACY_DATE_LINE_PATTERN,B as LEGACY_DEBT_STATUS_LABELS,x as LEGACY_REF_LINE_PATTERN,S as LEGACY_SETTLE_DATE_LINE_PATTERN,C as LEGACY_SETTLE_RECORD_LINE_PATTERN,b as LEGACY_SOURCE_LINE_PATTERN,y as LEGACY_STATUS_LINE_PATTERN,re as LEGACY_TYPE_LINE_PATTERN,w as LEGACY_WAIVE_DATE_LINE_PATTERN,T as LEGACY_WAIVE_REASON_LINE_PATTERN,A as REF_LINE_KEY,h as REF_LINE_PATTERN,U as SECTION_HEADER_PATTERNS,V as SECTION_KEYS,H as SECTION_ORDINALS,W as SECTION_PLACEHOLDER,j as SETTLE_DATE_LINE_KEY,te as SETTLE_DATE_LINE_PATTERN,M as SETTLE_RECORD_LINE_KEY,g as SETTLE_RECORD_LINE_PATTERN,G as SETTLE_SECTION_PLACEHOLDER,k as SOURCE_LINE_KEY,ee as SOURCE_LINE_PATTERN,O as STATUS_LINE_KEY,m as STATUS_LINE_PATTERN,Ce as TEMPLATE_FIELDS,E as TYPE_LINE_KEY,f as TYPE_LINE_PATTERN,N as WAIVE_DATE_LINE_KEY,_ as WAIVE_DATE_LINE_PATTERN,P as WAIVE_REASON_LINE_KEY,ne as WAIVE_REASON_LINE_PATTERN,ie as canonicalizeDebtStatusLabel,q as captureGroup,Z as debtStatusKeyFromLabel,X as debtTypeKeyFromLabel,J as extractDebtKey,Y as isRealCalendarDate,me as normalizeDebtHeader,$ as parseDebtDoc,xe as renderDebtTemplate,be as renderDebtTemplateSkeleton,F as renderHeaderLine,se as renderIndexTableRow,Se as renderRegistryReadmeStub,le as runDebtsLint,ce as runIndexCheck,Q as scanDebtsDir,he as settleDebtDoc,ge as waiveDebtDoc};
@@ -0,0 +1 @@
1
+ import"node:module";export{};
package/package.json CHANGED
@@ -1,6 +1,46 @@
1
1
  {
2
2
  "name": "@longzai-intelligence-debts/ledger",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.0.3",
4
+ "description": "Longzai Intelligence Debts 注册表引擎",
5
+ "keywords": [
6
+ "debts",
7
+ "ledger",
8
+ "lint",
9
+ "longzai-intelligence",
10
+ "registry"
11
+ ],
12
+ "license": "UNLICENSED",
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "type": "module",
17
+ "main": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js"
23
+ }
24
+ },
25
+ "scripts": {
26
+ "build": "lzi-builder",
27
+ "build:prod": "NODE_ENV=production bun run build",
28
+ "prepublishOnly": "bun run build:prod",
29
+ "typecheck": "bun run typecheck:app && bun run typecheck:node && bun run typecheck:test",
30
+ "typecheck:app": "lzi-tsgo typecheck tsconfig/app.json",
31
+ "typecheck:node": "lzi-tsgo typecheck tsconfig/node.json",
32
+ "typecheck:test": "lzi-tsgo typecheck tsconfig/test.json",
33
+ "lint": "lzi-lint lint",
34
+ "lint:fix": "lzi-lint fix",
35
+ "test": "bun test",
36
+ "test:watch": "bun test --watch",
37
+ "test:coverage": "bun test --coverage"
38
+ },
39
+ "dependencies": {
40
+ "@longzai-intelligence-debts/config": "0.0.3",
41
+ "@longzai-intelligence-docs/core": "0.0.22"
42
+ },
43
+ "devDependencies": {
44
+ "@types/bun": "latest"
45
+ }
46
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.