coding-agent-harness 1.0.7 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/CONTRIBUTING.md +9 -5
  3. package/README.md +12 -2
  4. package/README.zh-CN.md +10 -2
  5. package/SKILL.md +14 -3
  6. package/dist/build-dist.mjs +32 -6
  7. package/dist/check-dist-observation.mjs +73 -28
  8. package/dist/check-harness.mjs +0 -1
  9. package/dist/check-import-graph.mjs +44 -27
  10. package/dist/check-lite-forbidden-surfaces.mjs +121 -0
  11. package/dist/check-no-ts-nocheck.mjs +88 -0
  12. package/dist/check-runtime-emit.mjs +10 -3
  13. package/dist/check-type-boundaries.mjs +67 -8
  14. package/dist/commands/dashboard-command.mjs +52 -14
  15. package/dist/commands/migration-command.mjs +18 -8
  16. package/dist/commands/module-command.mjs +142 -0
  17. package/dist/commands/preset-command.mjs +65 -4
  18. package/dist/commands/registry.mjs +483 -0
  19. package/dist/commands/task-command.mjs +111 -53
  20. package/dist/harness.mjs +6 -303
  21. package/dist/lib/capability-registry.mjs +229 -53
  22. package/dist/lib/check-module-parallel.mjs +1 -6
  23. package/dist/lib/check-profiles.mjs +39 -46
  24. package/dist/lib/check-task-contracts.mjs +6 -4
  25. package/dist/lib/command-registry.mjs +248 -0
  26. package/dist/lib/core-shared.mjs +78 -3
  27. package/dist/lib/dashboard-data.mjs +203 -22
  28. package/dist/lib/dashboard-workbench.mjs +245 -21
  29. package/dist/lib/dashboard-writer.mjs +4 -1
  30. package/dist/lib/git-status-summary.mjs +0 -1
  31. package/dist/lib/governance-index-generator.mjs +7 -5
  32. package/dist/lib/governance-sync.mjs +46 -121
  33. package/dist/lib/governance-table-boundary.mjs +1 -14
  34. package/dist/lib/harness-core.mjs +5 -1
  35. package/dist/lib/harness-paths.mjs +115 -1
  36. package/dist/lib/impact-classifier.mjs +420 -0
  37. package/dist/lib/lesson-maintenance.mjs +1 -2
  38. package/dist/lib/markdown-utils.mjs +50 -1
  39. package/dist/lib/migration-planner.mjs +31 -16
  40. package/dist/lib/migration-support.mjs +5 -4
  41. package/dist/lib/module-registry.mjs +296 -0
  42. package/dist/lib/preset-audit-contracts.mjs +24 -1
  43. package/dist/lib/preset-engine.mjs +68 -29
  44. package/dist/lib/preset-registry.mjs +374 -72
  45. package/dist/lib/preset-runner.mjs +560 -0
  46. package/dist/lib/review-confirm-git-gate.mjs +73 -19
  47. package/dist/lib/status-builder.mjs +23 -8
  48. package/dist/lib/structure-migration.mjs +6 -4
  49. package/dist/lib/subagent-authorization-audit.mjs +8 -2
  50. package/dist/lib/task-archive-eligibility.mjs +65 -0
  51. package/dist/lib/task-audit-metadata.mjs +25 -11
  52. package/dist/lib/task-audit-migration.mjs +21 -14
  53. package/dist/lib/task-discovery-contract.mjs +32 -0
  54. package/dist/lib/task-index.mjs +4 -2
  55. package/dist/lib/task-lesson-candidates.mjs +1 -2
  56. package/dist/lib/task-lesson-sedimentation.mjs +310 -9
  57. package/dist/lib/task-lifecycle/create-task-helpers.mjs +6 -3
  58. package/dist/lib/task-lifecycle/phase-sync.mjs +0 -1
  59. package/dist/lib/task-lifecycle/preset-interop.mjs +16 -0
  60. package/dist/lib/task-lifecycle/review-confirm.mjs +34 -2
  61. package/dist/lib/task-lifecycle/review-gates.mjs +12 -5
  62. package/dist/lib/task-lifecycle/review-submission.mjs +1 -2
  63. package/dist/lib/task-lifecycle/scaffold-provenance.mjs +0 -1
  64. package/dist/lib/task-lifecycle/template-files.mjs +2 -5
  65. package/dist/lib/task-lifecycle.mjs +117 -159
  66. package/dist/lib/task-metadata.mjs +10 -5
  67. package/dist/lib/task-preset-contract-drift.mjs +45 -0
  68. package/dist/lib/task-repository.mjs +192 -0
  69. package/dist/lib/task-review-model.mjs +38 -17
  70. package/dist/lib/task-scanner.mjs +75 -23
  71. package/dist/lib/task-template-materials.mjs +131 -0
  72. package/dist/lib/task-tombstone-commands.mjs +187 -18
  73. package/dist/lib/types/check-profiles.js +1 -0
  74. package/dist/lib/types/impact.js +1 -0
  75. package/dist/lib/types/preset.js +1 -0
  76. package/dist/lib/types/task-lifecycle.js +1 -0
  77. package/dist/lib/types/task-scanner.js +1 -0
  78. package/dist/postinstall.mjs +2 -2
  79. package/dist/run-built-tests.mjs +10 -3
  80. package/docs-release/README.md +2 -1
  81. package/docs-release/architecture/document-contract-kernel/README.md +150 -0
  82. package/docs-release/architecture/document-contract-kernel/products/full-skill-overlay.md +29 -0
  83. package/docs-release/architecture/document-contract-kernel/products/lite-forbidden-surfaces.txt +26 -0
  84. package/docs-release/architecture/document-contract-kernel/products/lite-skill-overlay.md +37 -0
  85. package/docs-release/architecture/overview.md +2 -2
  86. package/docs-release/architecture/overview.zh-CN.md +2 -2
  87. package/docs-release/architecture/system-explainer/01-system-overview.md +11 -7
  88. package/docs-release/architecture/system-explainer/02-module-dependency.md +4 -4
  89. package/docs-release/architecture/system-explainer/03-task-lifecycle.md +17 -12
  90. package/docs-release/architecture/system-explainer/05-data-flow.md +6 -6
  91. package/docs-release/architecture/system-explainer/06-preset-and-migration.md +2 -2
  92. package/docs-release/architecture/system-explainer/README.md +1 -1
  93. package/docs-release/architecture/system-explainer/en-US/01-system-overview.md +12 -8
  94. package/docs-release/architecture/system-explainer/en-US/02-module-dependency.md +5 -5
  95. package/docs-release/architecture/system-explainer/en-US/03-task-lifecycle.md +19 -11
  96. package/docs-release/architecture/system-explainer/en-US/05-data-flow.md +5 -5
  97. package/docs-release/architecture/system-explainer/en-US/06-preset-and-migration.md +2 -2
  98. package/docs-release/architecture/system-explainer/en-US/README.md +1 -1
  99. package/docs-release/guides/agent-installation.en-US.md +4 -6
  100. package/docs-release/guides/agent-installation.md +11 -8
  101. package/docs-release/guides/contributing.md +10 -3
  102. package/docs-release/guides/contributing.zh-CN.md +10 -3
  103. package/docs-release/guides/legacy-migration-agent-prompt.md +1 -1
  104. package/docs-release/guides/legacy-migration-agent-prompt.zh-CN.md +1 -1
  105. package/docs-release/guides/migration-playbook.en-US.md +9 -6
  106. package/docs-release/guides/migration-playbook.md +9 -6
  107. package/docs-release/guides/preset-development.md +68 -2
  108. package/docs-release/guides/task-state-machine.en-US.md +8 -8
  109. package/docs-release/guides/task-state-machine.md +7 -7
  110. package/docs-release/guides/typescript-runtime-migration-closeout.md +17 -13
  111. package/package.json +19 -11
  112. package/postinstall.mjs +37 -0
  113. package/presets/legacy-migration/preset.yaml +5 -5
  114. package/presets/legacy-migration/templates/execution_strategy.append.md +1 -1
  115. package/presets/lesson-sedimentation/preset.yaml +3 -3
  116. package/presets/module/preset.yaml +2 -2
  117. package/presets/module/templates/execution_strategy.append.md +1 -1
  118. package/presets/module/templates/task_plan.append.md +3 -3
  119. package/presets/release-closeout/checks/check-release-package.mjs +29 -0
  120. package/presets/release-closeout/preset.yaml +100 -0
  121. package/presets/release-closeout/scripts/generate-release-package.mjs +572 -0
  122. package/presets/release-closeout/templates/execution_strategy.append.md +7 -0
  123. package/presets/release-closeout/templates/findings.seed.md +5 -0
  124. package/presets/release-closeout/templates/review.seed.md +3 -0
  125. package/presets/release-closeout/templates/task_plan.append.md +24 -0
  126. package/presets/standard-task/preset.yaml +2 -2
  127. package/references/agents-md-pattern.md +23 -17
  128. package/references/lessons-governance.md +2 -2
  129. package/references/module-parallel-standard.md +3 -6
  130. package/references/pull-request-standard.md +2 -2
  131. package/references/ssot-governance.md +2 -2
  132. package/references/taskr-gap-analysis.md +3 -3
  133. package/run-dist.mjs +34 -0
  134. package/skills/preset-creator/SKILL.md +40 -8
  135. package/skills/preset-creator/references/complex-task-skeleton/brief.md +32 -8
  136. package/skills/preset-creator/references/preset-package-skeleton.md +15 -5
  137. package/skills/preset-creator/references/structure-aware-paths.md +112 -0
  138. package/templates/AGENTS.md.template +28 -26
  139. package/templates/architecture/README.md +2 -2
  140. package/templates/architecture/service-catalog.md +2 -2
  141. package/templates/architecture/services/service-template.md +1 -1
  142. package/templates/dashboard/assets/app-src/00-state.js +5 -1
  143. package/templates/dashboard/assets/app-src/10-router.js +7 -0
  144. package/templates/dashboard/assets/app-src/20-overview.js +8 -8
  145. package/templates/dashboard/assets/app-src/30-tasks.js +132 -40
  146. package/templates/dashboard/assets/app-src/32-task-swimlane.js +314 -0
  147. package/templates/dashboard/assets/app-src/35-task-detail.js +35 -5
  148. package/templates/dashboard/assets/app-src/40-modules.js +257 -41
  149. package/templates/dashboard/assets/app-src/45-review.js +127 -1
  150. package/templates/dashboard/assets/app-src/90-bindings.js +185 -2
  151. package/templates/dashboard/assets/app.css +928 -53
  152. package/templates/dashboard/assets/app.css.manifest.json +2 -0
  153. package/templates/dashboard/assets/app.js +1071 -98
  154. package/templates/dashboard/assets/app.manifest.json +1 -0
  155. package/templates/dashboard/assets/css-src/00-foundation.css +12 -6
  156. package/templates/dashboard/assets/css-src/10-panels-flow.css +2 -2
  157. package/templates/dashboard/assets/css-src/30-task-index.css +21 -13
  158. package/templates/dashboard/assets/css-src/31-archive.css +94 -0
  159. package/templates/dashboard/assets/css-src/32-task-swimlane.css +487 -0
  160. package/templates/dashboard/assets/css-src/35-review-workspace.css +78 -0
  161. package/templates/dashboard/assets/css-src/40-detail-modules-migration.css +191 -14
  162. package/templates/dashboard/assets/css-src/50-responsive-overrides.css +23 -0
  163. package/templates/dashboard/assets/i18n.js +166 -2
  164. package/templates/development/README.md +9 -9
  165. package/templates/development/cross-repo-debugging.md +3 -3
  166. package/templates/development/external-context/service-template.md +1 -1
  167. package/templates/development/external-source-packs/README.md +2 -2
  168. package/templates/integrations/README.md +4 -4
  169. package/templates/integrations/api-contract.md +1 -1
  170. package/templates/integrations/event-contract.md +1 -1
  171. package/templates/integrations/third-party/vendor-template.md +1 -1
  172. package/templates/integrations/webhook-contract.md +1 -1
  173. package/templates/ledger/Harness-Ledger.md +1 -1
  174. package/templates/modules/module_brief.md +50 -0
  175. package/templates/modules/module_plan.md +49 -0
  176. package/templates/modules/registry_view.md +9 -0
  177. package/templates/modules/session_prompt_pack.md +55 -0
  178. package/templates/planning/brief.md +32 -8
  179. package/templates/planning/module_brief.md +28 -3
  180. package/templates/planning/module_plan.md +26 -11
  181. package/templates/planning/module_session_prompt.md +11 -2
  182. package/templates/planning/optional/slices/_slice-template/brief.md +28 -0
  183. package/templates/planning/review.md +1 -1
  184. package/templates/planning/visual_map.md +1 -1
  185. package/templates/reference/docs-library-standard.md +7 -7
  186. package/templates/reference/execution-workflow-standard.md +13 -0
  187. package/templates/reference/external-source-intake-standard.md +10 -10
  188. package/templates/reference/pull-request-standard.md +2 -2
  189. package/templates/reference/repo-governance-standard.md +1 -1
  190. package/templates/reference/review-routing-standard.md +4 -0
  191. package/templates/ssot/Module-Registry.md +4 -38
  192. package/templates/walkthrough/walkthrough-template.md +1 -1
  193. package/templates-zh-CN/AGENTS.md.template +27 -25
  194. package/templates-zh-CN/CLAUDE.md.template +1 -1
  195. package/templates-zh-CN/architecture/README.md +2 -2
  196. package/templates-zh-CN/architecture/service-catalog.md +2 -2
  197. package/templates-zh-CN/architecture/services/service-template.md +1 -1
  198. package/templates-zh-CN/development/README.md +9 -9
  199. package/templates-zh-CN/development/cross-repo-debugging.md +3 -3
  200. package/templates-zh-CN/development/external-context/service-template.md +1 -1
  201. package/templates-zh-CN/development/external-source-packs/README.md +2 -2
  202. package/templates-zh-CN/integrations/README.md +4 -4
  203. package/templates-zh-CN/integrations/api-contract.md +1 -1
  204. package/templates-zh-CN/integrations/event-contract.md +1 -1
  205. package/templates-zh-CN/integrations/third-party/vendor-template.md +1 -1
  206. package/templates-zh-CN/integrations/webhook-contract.md +1 -1
  207. package/templates-zh-CN/ledger/Harness-Ledger.md +1 -1
  208. package/templates-zh-CN/lessons/lesson-arch-process-change.md +1 -1
  209. package/templates-zh-CN/lessons/lesson-new-doc.md +3 -3
  210. package/templates-zh-CN/lessons/lesson-ref-change.md +4 -4
  211. package/templates-zh-CN/modules/module_brief.md +47 -0
  212. package/templates-zh-CN/modules/module_plan.md +48 -0
  213. package/templates-zh-CN/modules/registry_view.md +9 -0
  214. package/templates-zh-CN/modules/session_prompt_pack.md +50 -0
  215. package/templates-zh-CN/planning/INDEX.md +1 -0
  216. package/templates-zh-CN/planning/brief.md +26 -7
  217. package/templates-zh-CN/planning/module_brief.md +24 -2
  218. package/templates-zh-CN/planning/module_plan.md +35 -29
  219. package/templates-zh-CN/planning/module_session_prompt.md +15 -11
  220. package/templates-zh-CN/planning/optional/slices/_slice-template/brief.md +28 -11
  221. package/templates-zh-CN/planning/review.md +1 -1
  222. package/templates-zh-CN/reference/adversarial-review-standard.md +1 -1
  223. package/templates-zh-CN/reference/delivery-operating-model-standard.md +3 -3
  224. package/templates-zh-CN/reference/docs-library-standard.md +27 -27
  225. package/templates-zh-CN/reference/execution-workflow-standard.md +12 -2
  226. package/templates-zh-CN/reference/external-source-intake-standard.md +10 -10
  227. package/templates-zh-CN/reference/harness-ledger-standard.md +3 -3
  228. package/templates-zh-CN/reference/pull-request-standard.md +1 -1
  229. package/templates-zh-CN/reference/regression-ssot-governance.md +2 -2
  230. package/templates-zh-CN/reference/repo-governance-standard.md +1 -1
  231. package/templates-zh-CN/reference/review-routing-standard.md +3 -0
  232. package/templates-zh-CN/reference/walkthrough-standard.md +2 -2
  233. package/templates-zh-CN/reference/worktree-standard.md +1 -1
  234. package/templates-zh-CN/regression/Cadence-Ledger.md +2 -2
  235. package/templates-zh-CN/ssot/Delivery-SSoT.md +2 -2
  236. package/templates-zh-CN/ssot/Module-Registry.md +5 -44
  237. package/templates-zh-CN/ssot/Regression-SSoT.md +2 -2
  238. package/templates-zh-CN/walkthrough/walkthrough-template.md +4 -4
@@ -288,33 +288,210 @@
288
288
  font-weight: 500;
289
289
  }
290
290
 
291
- /* Module Grid */
292
- .module-grid {
291
+ /* Module Console */
292
+ .module-console {
293
+ min-width: 0;
294
+ }
295
+
296
+ .module-run-strip {
293
297
  display: grid;
294
- grid-template-columns: repeat(auto-fit, minmax(min(100%, 400px), 1fr));
298
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
299
+ gap: 12px;
300
+ }
301
+
302
+ .module-console-grid {
303
+ display: grid;
304
+ grid-template-columns: minmax(240px, 300px) minmax(0, 1fr);
295
305
  gap: 16px;
306
+ align-items: start;
296
307
  }
297
308
 
298
- .module-card {
299
- padding: 24px;
309
+ .module-list-panel,
310
+ .module-detail-panel,
311
+ .module-unclassified-panel {
312
+ background: var(--paper);
313
+ border: 1px solid var(--line);
314
+ border-radius: 8px;
315
+ box-shadow: var(--shadow);
300
316
  }
301
317
 
302
- .module-more {
303
- display: inline-flex;
304
- margin-top: 14px;
305
- padding: 8px 16px;
318
+ .module-list-panel {
319
+ display: grid;
320
+ gap: 6px;
321
+ padding: 8px;
322
+ position: sticky;
323
+ top: 84px;
324
+ }
325
+
326
+ .module-list-item {
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: space-between;
330
+ gap: 12px;
331
+ padding: 12px;
332
+ border: 1px solid transparent;
333
+ border-radius: 6px;
334
+ color: var(--ink);
335
+ text-decoration: none;
336
+ min-width: 0;
337
+ }
338
+
339
+ .module-list-item:hover,
340
+ .module-list-item.active {
341
+ background: var(--paper-2);
342
+ border-color: var(--accent);
343
+ }
344
+
345
+ .module-list-item strong,
346
+ .module-list-item small {
347
+ display: block;
348
+ overflow: hidden;
349
+ text-overflow: ellipsis;
350
+ white-space: nowrap;
351
+ }
352
+
353
+ .module-list-item small {
354
+ margin-top: 3px;
355
+ color: var(--muted);
356
+ font-size: 11px;
357
+ font-weight: 600;
358
+ }
359
+
360
+ .module-list-counts {
361
+ display: grid;
362
+ justify-items: end;
363
+ gap: 4px;
364
+ flex-shrink: 0;
365
+ }
366
+
367
+ .module-list-counts b {
368
+ font-size: 18px;
369
+ }
370
+
371
+ .module-detail-panel {
372
+ padding: 22px;
373
+ min-width: 0;
374
+ }
375
+
376
+ .module-detail-stack {
377
+ display: grid;
378
+ gap: 18px;
379
+ min-width: 0;
380
+ }
381
+
382
+ .module-detail-header {
383
+ display: flex;
384
+ align-items: flex-start;
385
+ justify-content: space-between;
386
+ gap: 16px;
387
+ border-bottom: 1px solid var(--line);
388
+ padding-bottom: 16px;
389
+ }
390
+
391
+ .module-detail-header h2 {
392
+ margin: 2px 0 4px;
393
+ font-size: 24px;
394
+ line-height: 1.2;
395
+ }
396
+
397
+ .module-chip-row {
398
+ display: flex;
399
+ flex-wrap: wrap;
400
+ gap: 6px;
401
+ margin-top: 8px;
402
+ }
403
+
404
+ .module-chip {
405
+ max-width: 100%;
406
+ padding: 4px 8px;
407
+ border: 1px solid var(--line);
306
408
  border-radius: 999px;
307
409
  background: var(--paper-2);
410
+ color: var(--muted);
411
+ font-size: 11px;
412
+ font-weight: 700;
413
+ overflow-wrap: anywhere;
414
+ }
415
+
416
+ .module-boundary-grid {
417
+ display: grid;
418
+ grid-template-columns: repeat(3, minmax(0, 1fr));
419
+ gap: 10px;
420
+ }
421
+
422
+ .module-boundary-block {
423
+ display: grid;
424
+ gap: 6px;
425
+ padding: 12px;
426
+ background: var(--paper-2);
427
+ border: 1px solid var(--line);
428
+ border-radius: 8px;
429
+ min-width: 0;
430
+ }
431
+
432
+ .module-boundary-block strong {
433
+ font-size: 11px;
434
+ text-transform: uppercase;
435
+ letter-spacing: 0.05em;
436
+ }
437
+
438
+ .module-boundary-block span {
439
+ font-size: 12px;
440
+ color: var(--muted);
441
+ overflow-wrap: anywhere;
442
+ }
443
+
444
+ .module-work-panel,
445
+ .module-risk-panel,
446
+ .module-doc-panel {
447
+ display: grid;
448
+ gap: 12px;
449
+ min-width: 0;
450
+ }
451
+
452
+ .module-risk-panel {
453
+ padding-top: 14px;
454
+ border-top: 1px solid var(--line);
455
+ }
456
+
457
+ .module-risk-panel h3,
458
+ .module-doc-panel h3,
459
+ .module-work-panel h3 {
460
+ margin: 0;
461
+ font-size: 15px;
462
+ }
463
+
464
+ .module-doc-links {
465
+ display: flex;
466
+ flex-wrap: wrap;
467
+ gap: 8px;
468
+ }
469
+
470
+ .module-doc-link {
471
+ max-width: 100%;
472
+ padding: 6px 8px;
308
473
  border: 1px solid var(--line);
474
+ border-radius: 6px;
475
+ color: var(--muted);
309
476
  font-size: 12px;
310
477
  font-weight: 700;
311
- transition: all 0.2s ease;
478
+ overflow-wrap: anywhere;
312
479
  }
313
480
 
314
- .module-more:hover {
315
- background: var(--accent);
316
- color: var(--paper);
317
- border-color: var(--accent);
481
+ .module-doc-link.missing {
482
+ color: var(--danger);
483
+ }
484
+
485
+ .module-doc-preview {
486
+ max-height: 280px;
487
+ overflow: auto;
488
+ border-top: 1px solid var(--line);
489
+ padding-top: 12px;
490
+ }
491
+
492
+ .module-unclassified-panel {
493
+ padding: 18px;
494
+ border-color: color-mix(in srgb, var(--danger) 36%, var(--line));
318
495
  }
319
496
 
320
497
  /* Migration workbench */
@@ -245,6 +245,15 @@
245
245
  gap: 8px;
246
246
  min-width: 0;
247
247
  }
248
+
249
+ .module-task-left small {
250
+ color: var(--muted);
251
+ font-size: 11px;
252
+ font-weight: 600;
253
+ overflow: hidden;
254
+ text-overflow: ellipsis;
255
+ white-space: nowrap;
256
+ }
248
257
  .module-task-dot {
249
258
  width: 8px;
250
259
  height: 8px;
@@ -272,6 +281,20 @@
272
281
  margin-left: 8px;
273
282
  }
274
283
 
284
+ @media (max-width: 900px) {
285
+ .module-console-grid {
286
+ grid-template-columns: 1fr;
287
+ }
288
+
289
+ .module-list-panel {
290
+ position: static;
291
+ }
292
+
293
+ .module-boundary-grid {
294
+ grid-template-columns: 1fr;
295
+ }
296
+ }
297
+
275
298
  /* Inline card pagination controls */
276
299
  .module-pager {
277
300
  display: flex;
@@ -5,6 +5,19 @@ window.HarnessI18n = {
5
5
  "overview": "Overview",
6
6
  "taskIndex": "Task Index",
7
7
  "reviewQueue": "Lifecycle Queue Workbench",
8
+ "archive": "Archive",
9
+ "archiveView": "Version Archive",
10
+ "archiveSubtitle": "Archived tasks are hidden from the normal cycle and grouped here by release or retention bucket.",
11
+ "archivedTasks": "Archived tasks",
12
+ "archiveBuckets": "Archive buckets",
13
+ "archiveUnclassified": "unclassified archive",
14
+ "noArchivedTasks": "No archived tasks in this snapshot.",
15
+ "archivedBy": "Archived by",
16
+ "archivedAt": "Archived at",
17
+ "reviewConfirmedBy": "Review confirmed by",
18
+ "reviewConfirmedAt": "Review confirmed at",
19
+ "reviewConfirmationId": "Review confirmation ID",
20
+ "releasePackage": "Release package",
8
21
  "moduleView": "Modules",
9
22
  "readiness": "Readiness",
10
23
  "snapshotStatus": "Snapshot status",
@@ -80,6 +93,21 @@ window.HarnessI18n = {
80
93
  "moduleBriefMissing": "Module brief missing. Add a module-level visibility brief before treating module migration as complete.",
81
94
  "moduleTasks": "Module Tasks",
82
95
  "noModuleTasks": "No module tasks.",
96
+ "registeredModule": "Registered module",
97
+ "moduleRegistered": "Registered",
98
+ "moduleActive": "Active modules",
99
+ "moduleRisks": "Risks",
100
+ "moduleUnclassified": "Unclassified",
101
+ "moduleOwner": "Owner",
102
+ "moduleBranch": "Branch",
103
+ "moduleCurrentStep": "Current step",
104
+ "moduleScope": "Scope",
105
+ "moduleShared": "Shared",
106
+ "moduleDependsOn": "Depends on",
107
+ "moduleCurrentWork": "Current work",
108
+ "moduleRiskPanel": "Risk and coordination",
109
+ "unclassifiedWarning": "Needs classification",
110
+ "unclassifiedSummary": "{count} tasks are not attached to a registered module.",
83
111
  "migration": "Migration",
84
112
  "migrationSummary": "Migration Attention",
85
113
  "migrationWorkbench": "Migration Workbench",
@@ -106,6 +134,8 @@ window.HarnessI18n = {
106
134
  "group_month": "Month",
107
135
  "group_state": "State",
108
136
  "inferredModule": "Module",
137
+ "baseModule": "Base",
138
+ "baseModuleEyebrow": "Project root",
109
139
  "unclassifiedModule": "legacy-unclassified",
110
140
  "visibilityLayer": "Visibility Layer",
111
141
  "lessons": "Lessons",
@@ -139,6 +169,7 @@ window.HarnessI18n = {
139
169
  "state_snapshot": "snapshot",
140
170
  "state_in_progress": "in progress",
141
171
  "state_planned": "planned",
172
+ "state_not_started": "not started",
142
173
  "state_review": "review",
143
174
  "state_blocked": "blocked",
144
175
  "state_done": "done",
@@ -173,6 +204,29 @@ window.HarnessI18n = {
173
204
  "layout": "View Layout",
174
205
  "layoutList": "List View",
175
206
  "layoutGrid": "Grid View",
207
+ "layoutSwimlane": "Swimlane",
208
+ "swimlaneEyebrow": "Runtime map",
209
+ "swimlaneTitle": "Active Work Swimlane",
210
+ "swimlaneHeatmapLabel": "Heatmap overview",
211
+ "swimlaneModuleColumn": "Module",
212
+ "swimlaneTotalColumn": "Total",
213
+ "swimlaneDrilldownLabel": "Drilldown",
214
+ "swimlaneCollapse": "Collapse",
215
+ "swimlanePageLabel": "Page",
216
+ "swimlanePrevPage": "Prev",
217
+ "swimlaneNextPage": "Next",
218
+ "swimlaneViewStage": "Open stage",
219
+ "swimlaneEmpty": "No active task fits the swimlane filters.",
220
+ "swimlaneNeedsEvidence": "Evidence needs attention",
221
+ "swimlaneReadyToConfirm": "Ready for human confirmation",
222
+ "swimlaneNeedsCloseout": "Closeout still missing",
223
+ "swimlaneStagePlanned": "Planned",
224
+ "swimlaneStageInProgress": "In progress",
225
+ "swimlaneStageEvidence": "Evidence",
226
+ "swimlaneStageReview": "Review",
227
+ "swimlaneStageConfirmed": "Confirmed",
228
+ "swimlaneStageCloseout": "Closeout",
229
+ "swimlaneStageBlocked": "Blocked",
176
230
  "sortByTime": "Time order",
177
231
  "sortNewest": "Newest first",
178
232
  "sortOldest": "Oldest first",
@@ -194,6 +248,8 @@ window.HarnessI18n = {
194
248
  "state_in_review": "in review",
195
249
  "state_review-blocked": "review blocked",
196
250
  "state_closed-review-pending": "closed, review pending",
251
+ "state_confirmed-finalization-pending": "confirmed, closeout pending",
252
+ "state_lesson-finalization-pending": "confirmed, lessons pending",
197
253
  "state_missing": "missing",
198
254
  "state_required": "required",
199
255
  "state_agent-reviewed": "agent reviewed",
@@ -228,7 +284,7 @@ window.HarnessI18n = {
228
284
  "queueConfirmedFinalized": "Confirmed / Finalized",
229
285
  "queueConfirmedFinalizedDesc": "Human-confirmed tasks and finalized records kept for audit and closeout follow-through.",
230
286
  "queueSoftDeletedSuperseded": "Soft-deleted / Superseded",
231
- "queueSoftDeletedSupersededDesc": "Historical tasks with tombstones, replacements, merges, archives, or abandoned state.",
287
+ "queueSoftDeletedSupersededDesc": "Historical tasks with tombstones, replacements, merges, or archives; abandoned and duplicate semantics are shown as reasons.",
232
288
  "reasonFilter": "Reason filter",
233
289
  "allReasons": "All reasons",
234
290
  "reason": "Reason",
@@ -243,6 +299,26 @@ window.HarnessI18n = {
243
299
  "copyRepairPromptSuccess": "Prompt copied",
244
300
  "copyLessonPrompt": "Copy lesson prompt",
245
301
  "createLessonTask": "Create sedimentation task",
302
+ "select": "Select",
303
+ "clearSelection": "Clear selection",
304
+ "selectReviewTask": "Select review task",
305
+ "selectAllReviewTasks": "Select all confirmable reviews",
306
+ "reviewBulkSelected": "{count} selected",
307
+ "reviewBulkConfirm": "Confirm selected",
308
+ "reviewBulkNone": "No confirmable reviews selected.",
309
+ "reviewBulkSubmitting": "Confirming selected reviews...",
310
+ "reviewBulkSuccess": "Confirmed {confirmed} reviews. Reloading snapshot...",
311
+ "reviewBulkPartial": "Confirmed {confirmed}; {failed} failed.",
312
+ "bulkActionFailedWithReason": "{failed} failed: {reason}",
313
+ "bulkActionFailedSummary": "{failed} failed.",
314
+ "selectLessonCandidate": "Select lesson candidate",
315
+ "selectAllLessonCandidates": "Select all actionable lessons",
316
+ "lessonBulkSelected": "{count} selected",
317
+ "lessonBulkCreate": "Create aggregate task",
318
+ "lessonBulkNone": "No lesson candidates selected.",
319
+ "lessonBulkSubmitting": "Creating aggregate lesson task...",
320
+ "lessonBulkSuccess": "Created 1 aggregate task for {candidates} candidates. Reloading snapshot...",
321
+ "lessonBulkPartial": "Created {created}; {failed} failed.",
246
322
  "openFollowUpTask": "Open follow-up task",
247
323
  "lessonSedimentationActions": "Sedimentation actions",
248
324
  "lessonWorkbenchRequired": "Creation is available in the dynamic workbench. The prompt can still be copied from this snapshot.",
@@ -258,6 +334,8 @@ window.HarnessI18n = {
258
334
  "reviewConfirmedQueue": "Confirmed",
259
335
  "noReviewTasks": "No tasks are currently in review.",
260
336
  "reviewAlreadyConfirmed": "Human review is already confirmed.",
337
+ "reviewConfirmedCloseoutReady": "Human review is confirmed and Lesson routing is complete. This task can be closed.",
338
+ "reviewConfirmedLessonPending": "Human review is confirmed, but Lesson sedimentation or promotion is still pending.",
261
339
  "reviewBlocked": "Close P0-P2 open or release-blocking findings before confirming.",
262
340
  "reviewWalkthroughRequired": "Add the task-local walkthrough.md before confirming human review.",
263
341
  "reviewQueueRequired": "This task is not in the canonical Review queue.",
@@ -269,6 +347,10 @@ window.HarnessI18n = {
269
347
  "reviewSubmitting": "Submitting review confirmation...",
270
348
  "reviewCompleteSuccess": "Review confirmed. Reloading snapshot...",
271
349
  "reviewCompleteFailed": "Review confirmation failed",
350
+ "completeTaskCloseout": "Complete Closeout",
351
+ "taskCloseoutSubmitting": "Completing closeout...",
352
+ "taskCloseoutSuccess": "Task closed. Reloading snapshot...",
353
+ "taskCloseoutFailed": "Task closeout failed",
272
354
  "presetCatalog": "Presets",
273
355
  "presetCatalogSubtitle": "Manage project, user, and bundled task method packages. Precedence is project first, then user, then bundled.",
274
356
  "presetSearch": "Search presets",
@@ -341,6 +423,19 @@ window.HarnessI18n = {
341
423
  "overview": "总览",
342
424
  "taskIndex": "任务索引",
343
425
  "reviewQueue": "生命周期队列工作台",
426
+ "archive": "归档",
427
+ "archiveView": "版本归档",
428
+ "archiveSubtitle": "已归档任务会从正常周期隐藏,并在这里按版本或保留桶分组查看。",
429
+ "archivedTasks": "已归档任务",
430
+ "archiveBuckets": "归档分组",
431
+ "archiveUnclassified": "未分类归档",
432
+ "noArchivedTasks": "当前快照没有已归档任务。",
433
+ "archivedBy": "归档人",
434
+ "archivedAt": "归档时间",
435
+ "reviewConfirmedBy": "审查确认人",
436
+ "reviewConfirmedAt": "审查确认时间",
437
+ "reviewConfirmationId": "审查确认 ID",
438
+ "releasePackage": "发布包",
344
439
  "moduleView": "模块",
345
440
  "readiness": "发布状态",
346
441
  "snapshotStatus": "快照状态",
@@ -416,6 +511,21 @@ window.HarnessI18n = {
416
511
  "moduleBriefMissing": "模块 brief 缺失。迁移完成前需要补一个模块级可见性 brief。",
417
512
  "moduleTasks": "模块任务",
418
513
  "noModuleTasks": "没有模块任务。",
514
+ "registeredModule": "已注册模块",
515
+ "moduleRegistered": "已注册",
516
+ "moduleActive": "活跃模块",
517
+ "moduleRisks": "风险",
518
+ "moduleUnclassified": "未分类",
519
+ "moduleOwner": "负责人",
520
+ "moduleBranch": "分支",
521
+ "moduleCurrentStep": "当前步骤",
522
+ "moduleScope": "范围",
523
+ "moduleShared": "共享面",
524
+ "moduleDependsOn": "依赖",
525
+ "moduleCurrentWork": "当前工作",
526
+ "moduleRiskPanel": "风险与协调",
527
+ "unclassifiedWarning": "需要分类",
528
+ "unclassifiedSummary": "{count} 个任务还没有挂到已注册模块。",
419
529
  "migration": "迁移",
420
530
  "migrationSummary": "迁移关注项",
421
531
  "migrationWorkbench": "迁移工作台",
@@ -442,6 +552,8 @@ window.HarnessI18n = {
442
552
  "group_month": "月份",
443
553
  "group_state": "状态",
444
554
  "inferredModule": "模块",
555
+ "baseModule": "Base(未分模块)",
556
+ "baseModuleEyebrow": "根任务",
445
557
  "unclassifiedModule": "未分类历史任务",
446
558
  "visibilityLayer": "可见性层",
447
559
  "lessons": "教训",
@@ -468,6 +580,7 @@ window.HarnessI18n = {
468
580
  "state_snapshot": "快照",
469
581
  "state_in_progress": "进行中",
470
582
  "state_planned": "计划中",
583
+ "state_not_started": "未开始",
471
584
  "state_review": "审查中",
472
585
  "state_blocked": "阻塞",
473
586
  "state_done": "完成",
@@ -509,6 +622,29 @@ window.HarnessI18n = {
509
622
  "layout": "展示布局",
510
623
  "layoutList": "列表布局",
511
624
  "layoutGrid": "网格布局",
625
+ "layoutSwimlane": "泳道图",
626
+ "swimlaneEyebrow": "运行态地图",
627
+ "swimlaneTitle": "活跃任务泳道",
628
+ "swimlaneHeatmapLabel": "热力图鸟瞰",
629
+ "swimlaneModuleColumn": "模块",
630
+ "swimlaneTotalColumn": "合计",
631
+ "swimlaneDrilldownLabel": "下钻看板",
632
+ "swimlaneCollapse": "收起",
633
+ "swimlanePageLabel": "页",
634
+ "swimlanePrevPage": "上一页",
635
+ "swimlaneNextPage": "下一页",
636
+ "swimlaneViewStage": "查看阶段",
637
+ "swimlaneEmpty": "当前筛选下没有可进入泳道图的活跃任务。",
638
+ "swimlaneNeedsEvidence": "证据需要补齐",
639
+ "swimlaneReadyToConfirm": "等待人工确认",
640
+ "swimlaneNeedsCloseout": "仍缺少结项材料",
641
+ "swimlaneStagePlanned": "计划",
642
+ "swimlaneStageInProgress": "执行",
643
+ "swimlaneStageEvidence": "证据",
644
+ "swimlaneStageReview": "审查",
645
+ "swimlaneStageConfirmed": "已确认",
646
+ "swimlaneStageCloseout": "结项",
647
+ "swimlaneStageBlocked": "阻塞",
512
648
  "sortByTime": "时间排序",
513
649
  "sortNewest": "最新优先",
514
650
  "sortOldest": "最早优先",
@@ -530,6 +666,8 @@ window.HarnessI18n = {
530
666
  "state_in_review": "审查中",
531
667
  "state_review-blocked": "审查阻塞",
532
668
  "state_closed-review-pending": "已结项待人审",
669
+ "state_confirmed-finalization-pending": "已确认待结项",
670
+ "state_lesson-finalization-pending": "已确认待沉淀",
533
671
  "state_missing": "缺失",
534
672
  "state_required": "待审查",
535
673
  "state_agent-reviewed": "Agent 自查",
@@ -564,7 +702,7 @@ window.HarnessI18n = {
564
702
  "queueConfirmedFinalized": "Confirmed / Finalized",
565
703
  "queueConfirmedFinalizedDesc": "已经人工确认或最终结项的任务,用于审计和结项追踪。",
566
704
  "queueSoftDeletedSuperseded": "Soft-deleted / Superseded",
567
- "queueSoftDeletedSupersededDesc": "带 tombstone、替代、合并、归档或废弃状态的历史任务。",
705
+ "queueSoftDeletedSupersededDesc": "带 tombstone、替代、合并或归档的历史任务;废弃和重复等语义显示为原因。",
568
706
  "reasonFilter": "原因筛选",
569
707
  "allReasons": "全部原因",
570
708
  "reason": "原因",
@@ -579,6 +717,26 @@ window.HarnessI18n = {
579
717
  "copyRepairPromptSuccess": "已复制提示",
580
718
  "copyLessonPrompt": "复制沉淀提示",
581
719
  "createLessonTask": "创建沉淀任务",
720
+ "select": "选择",
721
+ "clearSelection": "清空选择",
722
+ "selectReviewTask": "选择审查任务",
723
+ "selectAllReviewTasks": "全选可确认审查",
724
+ "reviewBulkSelected": "已选择 {count} 项",
725
+ "reviewBulkConfirm": "确认所选",
726
+ "reviewBulkNone": "还没有选择可确认审查。",
727
+ "reviewBulkSubmitting": "正在批量确认审查...",
728
+ "reviewBulkSuccess": "已确认 {confirmed} 个审查,正在刷新快照...",
729
+ "reviewBulkPartial": "已确认 {confirmed} 个;{failed} 个失败。",
730
+ "bulkActionFailedWithReason": "{failed} 个失败:{reason}",
731
+ "bulkActionFailedSummary": "{failed} 个失败。",
732
+ "selectLessonCandidate": "选择沉淀候选",
733
+ "selectAllLessonCandidates": "全选可沉淀经验",
734
+ "lessonBulkSelected": "已选择 {count} 项",
735
+ "lessonBulkCreate": "创建聚合任务",
736
+ "lessonBulkNone": "还没有选择沉淀候选。",
737
+ "lessonBulkSubmitting": "正在创建聚合沉淀任务...",
738
+ "lessonBulkSuccess": "已为 {candidates} 个候选创建 1 个聚合任务,正在刷新快照...",
739
+ "lessonBulkPartial": "已创建 {created} 个;{failed} 个失败。",
582
740
  "openFollowUpTask": "打开后续任务",
583
741
  "lessonSedimentationActions": "沉淀操作",
584
742
  "lessonWorkbenchRequired": "创建任务需要使用动态 workbench;当前快照仍可复制沉淀提示。",
@@ -594,6 +752,8 @@ window.HarnessI18n = {
594
752
  "reviewConfirmedQueue": "已确认",
595
753
  "noReviewTasks": "当前没有处在审查阶段的任务。",
596
754
  "reviewAlreadyConfirmed": "人工审查已经确认。",
755
+ "reviewConfirmedCloseoutReady": "人工审查已确认,Lesson 路由已完成,可以结项。",
756
+ "reviewConfirmedLessonPending": "人工审查已确认,但还有 Lesson 沉淀或 promotion 未完成。",
597
757
  "reviewBlocked": "先关闭 P0-P2 开放项或阻塞发布的发现,再确认审查。",
598
758
  "reviewWalkthroughRequired": "先补齐任务本地 walkthrough.md,再确认人工审查。",
599
759
  "reviewQueueRequired": "这个任务不在 canonical Review 队列中。",
@@ -605,6 +765,10 @@ window.HarnessI18n = {
605
765
  "reviewSubmitting": "正在提交审查确认...",
606
766
  "reviewCompleteSuccess": "审查已确认,正在刷新快照...",
607
767
  "reviewCompleteFailed": "审查确认失败",
768
+ "completeTaskCloseout": "完成结项",
769
+ "taskCloseoutSubmitting": "正在结项...",
770
+ "taskCloseoutSuccess": "任务已结项,正在刷新快照...",
771
+ "taskCloseoutFailed": "任务结项失败",
608
772
  "presetCatalog": "Preset",
609
773
  "presetCatalogSubtitle": "管理项目级、用户级和内置任务方法包。优先级是项目级、用户级、内置。",
610
774
  "presetSearch": "搜索 preset",
@@ -12,8 +12,8 @@ This folder is the development input pack. It tells agents how to work in this r
12
12
  ## Boundary
13
13
 
14
14
  - Put local setup, codebase map, external service development summaries, mocks, stubs, and cross-repo debugging here.
15
- - Put long-lived system structure in `coding-agent-harness/context/architecture/`.
16
- - Put concrete API/event/webhook contracts in `coding-agent-harness/context/integrations/`.
15
+ - Put long-lived system structure in `{{paths.harnessRoot}}/context/architecture/`.
16
+ - Put concrete API/event/webhook contracts in `{{paths.harnessRoot}}/context/integrations/`.
17
17
 
18
18
  ## Structure Contract
19
19
 
@@ -30,21 +30,21 @@ This folder is the development input pack. It tells agents how to work in this r
30
30
 
31
31
  If this repository depends on multiple microservices, do not write all external knowledge into one large document. For any external service that affects local development or testing, create:
32
32
 
33
- - `coding-agent-harness/context/architecture/services/<service-key>.md`: what the service is and what it owns.
34
- - `coding-agent-harness/context/development/external-context/<service-key>.md`: how this repository mocks, stubs, or debugs it.
35
- - `coding-agent-harness/context/integrations/<contract>.md`: concrete API/event/webhook contracts.
33
+ - `{{paths.harnessRoot}}/context/architecture/services/<service-key>.md`: what the service is and what it owns.
34
+ - `{{paths.harnessRoot}}/context/development/external-context/<service-key>.md`: how this repository mocks, stubs, or debugs it.
35
+ - `{{paths.harnessRoot}}/context/integrations/<contract>.md`: concrete API/event/webhook contracts.
36
36
 
37
37
  `context/development` only answers how to work with the external service during development. Do not maintain full system topology here, and do not put payload schemas here.
38
38
 
39
39
  ## External Source Pack Rule
40
40
 
41
- If an external team provides many documents, screenshots, exported packets, meeting notes, or links, do not place them directly into `context/{architecture,development,integrations}`. Read `coding-agent-harness/governance/standards/external-source-intake-standard.md` first, then decide whether `external-source-packs/<source-key>/` is needed.
41
+ If an external team provides many documents, screenshots, exported packets, meeting notes, or links, do not place them directly into `context/{architecture,development,integrations}`. Read `{{paths.harnessRoot}}/governance/standards/external-source-intake-standard.md` first, then decide whether `external-source-packs/<source-key>/` is needed.
42
42
 
43
43
  `external-source-packs/` owns source indexes, digests, and projection status only. Stable conclusions must be written back to:
44
44
 
45
- - `coding-agent-harness/context/architecture/services/<service-key>.md`
46
- - `coding-agent-harness/context/development/external-context/<service-key>.md`
47
- - `coding-agent-harness/context/integrations/<contract>.md`
45
+ - `{{paths.harnessRoot}}/context/architecture/services/<service-key>.md`
46
+ - `{{paths.harnessRoot}}/context/development/external-context/<service-key>.md`
47
+ - `{{paths.harnessRoot}}/context/integrations/<contract>.md`
48
48
 
49
49
  ## External Context Index
50
50
 
@@ -8,9 +8,9 @@ Confidence: low
8
8
  ## Debug Flow
9
9
 
10
10
  1. Identify the failing interface or flow.
11
- 2. Read `coding-agent-harness/context/architecture/service-catalog.md` for ownership and upstream/downstream services.
12
- 3. Read the matching `coding-agent-harness/context/integrations/` contract.
13
- 4. Use the matching `coding-agent-harness/context/development/external-context/<service-key>.md` notes for mocks and local debugging.
11
+ 2. Read `{{paths.harnessRoot}}/context/architecture/service-catalog.md` for ownership and upstream/downstream services.
12
+ 3. Read the matching `{{paths.harnessRoot}}/context/integrations/` contract.
13
+ 4. Use the matching `{{paths.harnessRoot}}/context/development/external-context/<service-key>.md` notes for mocks and local debugging.
14
14
 
15
15
  ## Known Failure Modes
16
16
 
@@ -9,7 +9,7 @@ Confidence: low
9
9
 
10
10
  | Service Profile | Source Pack | Integration Contracts | Last Verified | Confidence |
11
11
  | --- | --- | --- | --- | --- |
12
- | `coding-agent-harness/context/architecture/services/<service-key>.md` | `coding-agent-harness/context/development/external-source-packs/<source-key>/README.md` or N/A | `coding-agent-harness/context/integrations/<contract>.md` | unknown | low |
12
+ | `{{paths.harnessRoot}}/context/architecture/services/<service-key>.md` | `{{paths.harnessRoot}}/context/development/external-source-packs/<source-key>/README.md` or N/A | `{{paths.harnessRoot}}/context/integrations/<contract>.md` | unknown | low |
13
13
 
14
14
  ## Development Use
15
15
 
@@ -7,9 +7,9 @@ Confidence: low
7
7
 
8
8
  ## Purpose
9
9
 
10
- This directory is only for external source intake, indexing, and digests. Stable facts become Harness execution context only after they are projected into `context/architecture`, `coding-agent-harness/context/development/external-context`, or `context/integrations`.
10
+ This directory is only for external source intake, indexing, and digests. Stable facts become Harness execution context only after they are projected into `context/architecture`, `{{paths.harnessRoot}}/context/development/external-context`, or `context/integrations`.
11
11
 
12
- Read `coding-agent-harness/governance/standards/external-source-intake-standard.md` before adding a source pack.
12
+ Read `{{paths.harnessRoot}}/governance/standards/external-source-intake-standard.md` before adding a source pack.
13
13
 
14
14
  ## Source Packs
15
15
 
@@ -11,8 +11,8 @@ This folder owns concrete interface contracts: APIs, events, webhooks, SDK usage
11
11
 
12
12
  ## Boundary
13
13
 
14
- - Put service topology and ownership in `coding-agent-harness/context/architecture/`.
15
- - Put development mocks and debugging notes in `coding-agent-harness/context/development/`.
14
+ - Put service topology and ownership in `{{paths.harnessRoot}}/context/architecture/`.
15
+ - Put development mocks and debugging notes in `{{paths.harnessRoot}}/context/development/`.
16
16
  - Put endpoint, payload, error, auth, event, webhook, and SDK contracts here.
17
17
 
18
18
  ## Structure Contract
@@ -28,8 +28,8 @@ This folder owns concrete interface contracts: APIs, events, webhooks, SDK usage
28
28
 
29
29
  Every interface contract must be its own file and link back to the related service:
30
30
 
31
- - Service ownership and topology: `coding-agent-harness/context/architecture/service-catalog.md` or `services/<service-key>.md`
32
- - Local mocks, stubs, and debugging: `coding-agent-harness/context/development/external-context/<service-key>.md`
31
+ - Service ownership and topology: `{{paths.harnessRoot}}/context/architecture/service-catalog.md` or `services/<service-key>.md`
32
+ - Local mocks, stubs, and debugging: `{{paths.harnessRoot}}/context/development/external-context/<service-key>.md`
33
33
  - Concrete payloads, auth, errors, and contract tests: this folder
34
34
 
35
35
  Do not mix multiple services into one large "integration notes" document. Multi-service systems should have multiple contract files; the Contract Index below is the navigation layer for humans and agents.