@shrkcrft/inspector 0.1.0-alpha.31 → 0.1.0-alpha.32

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 (134) hide show
  1. package/dist/agent-task-prep.d.ts.map +1 -1
  2. package/dist/agent-task-prep.js +9 -1
  3. package/dist/codemod-assist.d.ts.map +1 -1
  4. package/dist/codemod-assist.js +3 -1
  5. package/dist/comment-syntax.d.ts +15 -0
  6. package/dist/comment-syntax.d.ts.map +1 -0
  7. package/dist/comment-syntax.js +15 -0
  8. package/dist/contribution-load-failures.d.ts +18 -2
  9. package/dist/contribution-load-failures.d.ts.map +1 -1
  10. package/dist/contribution-load-failures.js +20 -3
  11. package/dist/contributions-report.js +2 -2
  12. package/dist/convention-applicability.d.ts +46 -0
  13. package/dist/convention-applicability.d.ts.map +1 -0
  14. package/dist/convention-applicability.js +247 -0
  15. package/dist/convention-filter-level.d.ts +13 -0
  16. package/dist/convention-filter-level.d.ts.map +1 -0
  17. package/dist/convention-filter-level.js +13 -0
  18. package/dist/convention-registry.d.ts +29 -4
  19. package/dist/convention-registry.d.ts.map +1 -1
  20. package/dist/convention-registry.js +58 -23
  21. package/dist/custom-checks.d.ts.map +1 -1
  22. package/dist/custom-checks.js +6 -4
  23. package/dist/decision-records.d.ts +4 -0
  24. package/dist/decision-records.d.ts.map +1 -1
  25. package/dist/decision-records.js +165 -66
  26. package/dist/declared-reference-coverage.d.ts +1 -1
  27. package/dist/declared-reference-coverage.d.ts.map +1 -1
  28. package/dist/declared-reference-coverage.js +6 -1
  29. package/dist/feedback-ingestion.d.ts.map +1 -1
  30. package/dist/feedback-ingestion.js +7 -1
  31. package/dist/file-languages.d.ts +9 -0
  32. package/dist/file-languages.d.ts.map +1 -0
  33. package/dist/file-languages.js +91 -0
  34. package/dist/fix-preview.d.ts.map +1 -1
  35. package/dist/fix-preview.js +78 -17
  36. package/dist/fuzzy-impact.d.ts.map +1 -1
  37. package/dist/fuzzy-impact.js +2 -1
  38. package/dist/git-helpers.d.ts +29 -4
  39. package/dist/git-helpers.d.ts.map +1 -1
  40. package/dist/git-helpers.js +69 -10
  41. package/dist/i-contribution-file-validation.d.ts +8 -0
  42. package/dist/i-contribution-file-validation.d.ts.map +1 -1
  43. package/dist/i-convention-applicability-reason.d.ts +29 -0
  44. package/dist/i-convention-applicability-reason.d.ts.map +1 -0
  45. package/dist/i-convention-applicability-reason.js +1 -0
  46. package/dist/i-convention-applicability.d.ts +9 -0
  47. package/dist/i-convention-applicability.d.ts.map +1 -0
  48. package/dist/i-convention-applicability.js +1 -0
  49. package/dist/i-convention-scope.d.ts +19 -0
  50. package/dist/i-convention-scope.d.ts.map +1 -0
  51. package/dist/i-convention-scope.js +1 -0
  52. package/dist/i-file-language.d.ts +11 -0
  53. package/dist/i-file-language.d.ts.map +1 -0
  54. package/dist/i-file-language.js +1 -0
  55. package/dist/i-not-applicable-convention.d.ts +17 -0
  56. package/dist/i-not-applicable-convention.d.ts.map +1 -0
  57. package/dist/i-not-applicable-convention.js +1 -0
  58. package/dist/i-reference-pack-origin.d.ts +13 -0
  59. package/dist/i-reference-pack-origin.d.ts.map +1 -0
  60. package/dist/i-reference-pack-origin.js +1 -0
  61. package/dist/i-stale-path-hint-input.d.ts +18 -0
  62. package/dist/i-stale-path-hint-input.d.ts.map +1 -0
  63. package/dist/i-stale-path-hint-input.js +1 -0
  64. package/dist/i-unverifiable-remedy-group.d.ts +10 -0
  65. package/dist/i-unverifiable-remedy-group.d.ts.map +1 -0
  66. package/dist/i-unverifiable-remedy-group.js +1 -0
  67. package/dist/index.d.ts +17 -0
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +25 -0
  70. package/dist/knowledge-authoring.d.ts +1 -1
  71. package/dist/knowledge-authoring.d.ts.map +1 -1
  72. package/dist/knowledge-authoring.js +7 -6
  73. package/dist/knowledge-contribution-slots.d.ts +18 -0
  74. package/dist/knowledge-contribution-slots.d.ts.map +1 -0
  75. package/dist/knowledge-contribution-slots.js +25 -0
  76. package/dist/knowledge-entry-rejections.d.ts +17 -0
  77. package/dist/knowledge-entry-rejections.d.ts.map +1 -0
  78. package/dist/knowledge-entry-rejections.js +79 -0
  79. package/dist/knowledge-entry-verdict-record.d.ts +12 -0
  80. package/dist/knowledge-entry-verdict-record.d.ts.map +1 -1
  81. package/dist/knowledge-min-referenced-valve.d.ts +12 -0
  82. package/dist/knowledge-min-referenced-valve.d.ts.map +1 -0
  83. package/dist/knowledge-min-referenced-valve.js +12 -0
  84. package/dist/knowledge-rejected-entry.d.ts +28 -0
  85. package/dist/knowledge-rejected-entry.d.ts.map +1 -0
  86. package/dist/knowledge-rejected-entry.js +1 -0
  87. package/dist/knowledge-rename-command.d.ts +20 -0
  88. package/dist/knowledge-rename-command.d.ts.map +1 -0
  89. package/dist/knowledge-rename-command.js +34 -0
  90. package/dist/knowledge-rename-verb.d.ts +11 -0
  91. package/dist/knowledge-rename-verb.d.ts.map +1 -0
  92. package/dist/knowledge-rename-verb.js +11 -0
  93. package/dist/knowledge-rename.d.ts +1 -1
  94. package/dist/knowledge-rename.d.ts.map +1 -1
  95. package/dist/knowledge-rename.js +6 -5
  96. package/dist/knowledge-stale-gate.d.ts +2 -0
  97. package/dist/knowledge-stale-gate.d.ts.map +1 -1
  98. package/dist/knowledge-stale-gate.js +75 -3
  99. package/dist/knowledge-stale-quality-gate.d.ts.map +1 -1
  100. package/dist/knowledge-stale-quality-gate.js +34 -4
  101. package/dist/knowledge-stale.d.ts +10 -0
  102. package/dist/knowledge-stale.d.ts.map +1 -1
  103. package/dist/knowledge-stale.js +227 -33
  104. package/dist/knowledge-unverifiable-remedy.d.ts +56 -0
  105. package/dist/knowledge-unverifiable-remedy.d.ts.map +1 -0
  106. package/dist/knowledge-unverifiable-remedy.js +0 -0
  107. package/dist/pack-contributions-inventory.d.ts.map +1 -1
  108. package/dist/pack-contributions-inventory.js +4 -2
  109. package/dist/propose-knowledge.js +3 -2
  110. package/dist/reference-pack-origin.d.ts +18 -0
  111. package/dist/reference-pack-origin.d.ts.map +1 -0
  112. package/dist/reference-pack-origin.js +38 -0
  113. package/dist/repository-stats.d.ts.map +1 -1
  114. package/dist/repository-stats.js +3 -77
  115. package/dist/resolve-project-config.d.ts.map +1 -1
  116. package/dist/resolve-project-config.js +10 -1
  117. package/dist/self-config-doctor-v2.d.ts +1 -1
  118. package/dist/self-config-doctor-v2.d.ts.map +1 -1
  119. package/dist/self-config-doctor-v2.js +76 -12
  120. package/dist/self-config-doctor.d.ts.map +1 -1
  121. package/dist/self-config-doctor.js +2 -1
  122. package/dist/sharkcraft-inspector.d.ts.map +1 -1
  123. package/dist/sharkcraft-inspector.js +52 -12
  124. package/dist/stale-path-hint.d.ts +3 -0
  125. package/dist/stale-path-hint.d.ts.map +1 -0
  126. package/dist/stale-path-hint.js +47 -0
  127. package/dist/template-authoring.d.ts +1 -1
  128. package/dist/template-authoring.d.ts.map +1 -1
  129. package/dist/template-authoring.js +2 -1
  130. package/dist/validate-contribution-file.d.ts.map +1 -1
  131. package/dist/validate-contribution-file.js +15 -10
  132. package/dist/why-file.d.ts.map +1 -1
  133. package/dist/why-file.js +5 -4
  134. package/package.json +17 -17
@@ -1 +1 @@
1
- {"version":3,"file":"agent-task-prep.d.ts","sourceRoot":"","sources":["../src/agent-task-prep.ts"],"names":[],"mappings":"AAqBA,OAAO,EAA8C,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAKzG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,sBAAsB,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC/C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,QAAQ,CAAC,mBAAmB,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,SAAS;QAC9B,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;KACxF,EAAE,CAAC;IACJ;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,EAAE,SAAS;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3F,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAcD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,oBAAoB,CAAC,CAkF/B"}
1
+ {"version":3,"file":"agent-task-prep.d.ts","sourceRoot":"","sources":["../src/agent-task-prep.ts"],"names":[],"mappings":"AAsBA,OAAO,EAA8C,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAKzG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,sBAAsB,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC/C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,QAAQ,CAAC,mBAAmB,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,SAAS;QAC9B,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;KACxF,EAAE,CAAC;IACJ;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,EAAE,SAAS;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3F,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAcD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,oBAAoB,CAAC,CAyF/B"}
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import { buildTaskPacket } from "./task-packet.js";
16
16
  import { listConventions } from "./convention-registry.js";
17
+ import { conventionApplicability } from "./convention-applicability.js";
17
18
  import { listTaskRoutingHints, explainTaskRouting } from "./task-routing-hint-registry.js";
18
19
  import { buildUncertaintySummary } from "./uncertainty.js";
19
20
  import { matchTerm, prepareTermQuery } from "./match-terms.js";
@@ -100,7 +101,14 @@ export async function prepareAgentTask(inspection, task) {
100
101
  generationCommands,
101
102
  validationCommands,
102
103
  relevantProfiles: [],
103
- relevantConventions: conventions.slice(0, 5).map((e) => ({ id: e.convention.id, title: e.convention.title })),
104
+ // THE applicability authority (round 15, 15.1): a convention whose
105
+ // `appliesTo` excludes this workspace (an undetected profile / framework)
106
+ // is not handed to the agent — it used to be the first 5 loaded, whatever
107
+ // they applied to. Per-file filters are decided per file, not here.
108
+ relevantConventions: conventions
109
+ .filter((e) => conventionApplicability(e.convention, inspection).applicable)
110
+ .slice(0, 5)
111
+ .map((e) => ({ id: e.convention.id, title: e.convention.title })),
104
112
  routingHints: routing.slice(0, 5).map((m) => ({
105
113
  id: m.hint.id,
106
114
  title: m.hint.title,
@@ -1 +1 @@
1
- {"version":3,"file":"codemod-assist.d.ts","sourceRoot":"","sources":["../src/codemod-assist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AAEpE,oBAAY,eAAe;IACzB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,EAAE,eAAe,CAAC;IACtB,2DAA2D;IAC3D,eAAe,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3D,yEAAyE;IACzE,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,qBAAqB,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,0CAA0C;IAC1C,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC/C,UAAU,EAAE;QACV,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;QAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;QACxB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,uBAAuB,EAAE,MAAM,CAAC;IAChC,SAAS,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAClD,oFAAoF;IACpF,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,+DAA+D;IAC/D,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAmGD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAiGzF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAO9G;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CA2ChF"}
1
+ {"version":3,"file":"codemod-assist.d.ts","sourceRoot":"","sources":["../src/codemod-assist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAI7D,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AAEpE,oBAAY,eAAe;IACzB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,EAAE,eAAe,CAAC;IACtB,2DAA2D;IAC3D,eAAe,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3D,yEAAyE;IACzE,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,qBAAqB,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,0CAA0C;IAC1C,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC/C,UAAU,EAAE;QACV,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;QAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;QACxB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,uBAAuB,EAAE,MAAM,CAAC;IAChC,SAAS,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAClD,oFAAoF;IACpF,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,+DAA+D;IAC/D,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAmGD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAiGzF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAO9G;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CA2ChF"}
@@ -1,3 +1,5 @@
1
+ import { knowledgeRenameCommand } from "./knowledge-rename-command.js";
2
+ import { KnowledgeRenameVerb } from "./knowledge-rename-verb.js";
1
3
  export const CODEMOD_ASSIST_SCHEMA = 'sharkcraft.codemod-assist/v1';
2
4
  export var CodemodRiskBand;
3
5
  (function (CodemodRiskBand) {
@@ -19,7 +21,7 @@ function defaultExternalTool(rule, fallback) {
19
21
  return 'eslint custom rule + autofix (when safe)';
20
22
  }
21
23
  if (tagsLower.has('boundaries') || tagsLower.has('architecture')) {
22
- return 'manual review + targeted rename via shrk knowledge rename-symbol';
24
+ return `manual review + targeted rename via ${knowledgeRenameCommand(KnowledgeRenameVerb.RenameSymbol)}`;
23
25
  }
24
26
  return 'ts-morph (or manual edits when scope is small)';
25
27
  }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * How a language writes a single-line / block comment — the line classifier
3
+ * `shrk stats` counts code / comment / blank lines with. One value per
4
+ * {@link IFileLanguage} (`file-languages.ts`).
5
+ */
6
+ export declare enum CommentSyntax {
7
+ CFamily = "c-family",
8
+ Hash = "hash",
9
+ Html = "html",
10
+ Sql = "sql",
11
+ Lua = "lua",
12
+ Lisp = "lisp",
13
+ None = "none"
14
+ }
15
+ //# sourceMappingURL=comment-syntax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment-syntax.d.ts","sourceRoot":"","sources":["../src/comment-syntax.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oBAAY,aAAa;IACvB,OAAO,aAAa;IACpB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,IAAI,SAAS;CACd"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * How a language writes a single-line / block comment — the line classifier
3
+ * `shrk stats` counts code / comment / blank lines with. One value per
4
+ * {@link IFileLanguage} (`file-languages.ts`).
5
+ */
6
+ export var CommentSyntax;
7
+ (function (CommentSyntax) {
8
+ CommentSyntax["CFamily"] = "c-family";
9
+ CommentSyntax["Hash"] = "hash";
10
+ CommentSyntax["Html"] = "html";
11
+ CommentSyntax["Sql"] = "sql";
12
+ CommentSyntax["Lua"] = "lua";
13
+ CommentSyntax["Lisp"] = "lisp";
14
+ CommentSyntax["None"] = "none";
15
+ })(CommentSyntax || (CommentSyntax = {}));
@@ -98,9 +98,25 @@ export declare function collectContributionRejections(inspection: ISharkcraftIns
98
98
  export declare function collectKindOutcomes(inspection: ISharkcraftInspection, kinds: readonly ContributionKind[]): Promise<IKindOutcomes>;
99
99
  /** The rejections of `kinds` only — {@link collectKindOutcomes} without the load failures. */
100
100
  export declare function collectKindRejections(inspection: ISharkcraftInspection, kinds: readonly ContributionKind[]): Promise<readonly IContributionEntryRejection[]>;
101
+ /** The slot of a whole Markdown document — it has no export and no list position. */
102
+ export declare const MARKDOWN_FILE_SLOT = "Markdown file";
103
+ /**
104
+ * THE slot label of a refused entry (round 15 closing, A5): `default[8]` for a
105
+ * list item, the export name for a single-object export, and
106
+ * {@link MARKDOWN_FILE_SLOT} for a whole Markdown document (index `-1`, no
107
+ * export — a decision record, a Markdown knowledge file), which read
108
+ * `(default)` as if it were a module's default export. Every surface that names
109
+ * where a refused entry sits reads it.
110
+ */
111
+ export declare function rejectedEntrySlot(r: Pick<IRejectedEntry, 'index' | 'exportName'> & {
112
+ readonly file?: string;
113
+ }): string;
101
114
  /**
102
115
  * THE one wording of a rejected entry, used on every surface:
103
- * `'conv.b' (default[8]) — severity: severity must be one of: info, warning, error (got undefined)`.
116
+ * `'conv.b' (default[8]) — severity: severity must be one of: info, warning, error (got undefined)`,
117
+ * `(no id) (Markdown file) — frontmatter: …` for a Markdown document ({@link rejectedEntrySlot}).
104
118
  */
105
- export declare function formatEntryRejection(r: Pick<IRejectedEntry, 'entryId' | 'index' | 'exportName' | 'reasons'>): string;
119
+ export declare function formatEntryRejection(r: Pick<IRejectedEntry, 'entryId' | 'index' | 'exportName' | 'reasons'> & {
120
+ readonly file?: string;
121
+ }): string;
106
122
  //# sourceMappingURL=contribution-load-failures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contribution-load-failures.d.ts","sourceRoot":"","sources":["../src/contribution-load-failures.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAU5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQlE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,MAAM,WAAW,wBAAwB;IACvC,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,QAAQ,CAAC,GAAG,EAAE,oBAAoB,GAAG,UAAU,CAAC;CACjD;AA8BD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAM9G;AAED,sHAAsH;AACtH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/E;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAChG,wBAAwB,EAAE,CAe5B;AAED,8FAA8F;AAC9F,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,qBAAqB,EACjC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,wBAAwB,EAAE,CAgB5B;AAED,6GAA6G;AAC7G,wBAAgB,cAAc,CAC5B,UAAU,EAAE,qBAAqB,EACjC,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,GAAG,GAAE,2BAA2B,CAAC,KAAK,CAAc,GACnD,2BAA2B,EAAE,CAM/B;AA6RD,0GAA0G;AAC1G,eAAO,MAAM,qBAAqB,EAAE,SAAS,gBAAgB,EAAqD,CAAC;AAEnH;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAO,GAC7D,OAAO,CAAC,iBAAiB,CAAC,CAwB5B;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC,CAE9C;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,qBAAqB,EACjC,gBAAgB,GAAE,SAAS,wBAAwB,EAAO,GACzD,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAqB/C;AAED;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAS9F,CAAC;AAIF;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAKnF;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,qBAAqB,EACjC,kBAAkB,GAAE,SAAS,2BAA2B,EAAO,GAC9D,SAAS,2BAA2B,EAAE,CAkBxC;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GACjC,OAAO,CAAC,aAAa,CAAC,CAgBxB;AAED,8FAA8F;AAC9F,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GACjC,OAAO,CAAC,SAAS,2BAA2B,EAAE,CAAC,CAEjD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC,GAAG,MAAM,CAIpH"}
1
+ {"version":3,"file":"contribution-load-failures.d.ts","sourceRoot":"","sources":["../src/contribution-load-failures.ts"],"names":[],"mappings":"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"}
@@ -564,12 +564,29 @@ export async function collectKindOutcomes(inspection, kinds) {
564
564
  export async function collectKindRejections(inspection, kinds) {
565
565
  return (await collectKindOutcomes(inspection, kinds)).rejections;
566
566
  }
567
+ /** The slot of a whole Markdown document — it has no export and no list position. */
568
+ export const MARKDOWN_FILE_SLOT = 'Markdown file';
569
+ /**
570
+ * THE slot label of a refused entry (round 15 closing, A5): `default[8]` for a
571
+ * list item, the export name for a single-object export, and
572
+ * {@link MARKDOWN_FILE_SLOT} for a whole Markdown document (index `-1`, no
573
+ * export — a decision record, a Markdown knowledge file), which read
574
+ * `(default)` as if it were a module's default export. Every surface that names
575
+ * where a refused entry sits reads it.
576
+ */
577
+ export function rejectedEntrySlot(r) {
578
+ if (r.index >= 0)
579
+ return `${r.exportName ?? ''}[${r.index}]`;
580
+ if (r.exportName !== undefined)
581
+ return r.exportName;
582
+ return r.file !== undefined && /\.(?:md|markdown)$/i.test(r.file) ? MARKDOWN_FILE_SLOT : 'default';
583
+ }
567
584
  /**
568
585
  * THE one wording of a rejected entry, used on every surface:
569
- * `'conv.b' (default[8]) — severity: severity must be one of: info, warning, error (got undefined)`.
586
+ * `'conv.b' (default[8]) — severity: severity must be one of: info, warning, error (got undefined)`,
587
+ * `(no id) (Markdown file) — frontmatter: …` for a Markdown document ({@link rejectedEntrySlot}).
570
588
  */
571
589
  export function formatEntryRejection(r) {
572
590
  const who = r.entryId !== undefined ? `'${r.entryId}'` : '(no id)';
573
- const where = r.index >= 0 ? `${r.exportName ?? ''}[${r.index}]` : (r.exportName ?? 'default');
574
- return `${who} (${where}) — ${r.reasons.join('; ')}`;
591
+ return `${who} (${rejectedEntrySlot(r)}) — ${r.reasons.join('; ')}`;
575
592
  }
@@ -206,7 +206,7 @@ export function renderContributionsByFileText(report) {
206
206
  for (const f of report.files) {
207
207
  lines.push(` ${fileMark(f)} ${f.file} ${f.kind}${f.packageName ? ` [${f.packageName}]` : ''} ${fileSummary(f)}`);
208
208
  for (const r of f.rejected)
209
- lines.push(` rejected ${formatEntryRejection(r)}`);
209
+ lines.push(` rejected ${formatEntryRejection({ ...r, file: f.file })}`);
210
210
  for (const g of f.unresolvableReferences) {
211
211
  lines.push(` unresolvable ${g.sourceId} ${g.field} → ${g.kind} ${g.ids.map((id) => `'${id}'`).join(', ')} — ${g.reason === 'undeclarable-kind' ? 'no registry can ever hold this kind' : "this kind's registry is empty here"}`);
212
212
  }
@@ -232,7 +232,7 @@ export function renderContributionsByFileMarkdown(report) {
232
232
  for (const f of detail) {
233
233
  lines.push(`- \`${f.file}\``);
234
234
  for (const r of f.rejected)
235
- lines.push(` - rejected: ${formatEntryRejection(r)}`);
235
+ lines.push(` - rejected: ${formatEntryRejection({ ...r, file: f.file })}`);
236
236
  for (const g of f.unresolvableReferences) {
237
237
  lines.push(` - unresolvable: ${g.sourceId} ${g.field} → ${g.kind} ${g.ids.join(', ')} (${g.reason})`);
238
238
  }
@@ -0,0 +1,46 @@
1
+ import { ConventionAppliesToFilter, type IConvention } from '@shrkcrft/plugin-api';
2
+ import { ConventionFilterLevel } from './convention-filter-level.js';
3
+ import type { IConventionApplicability } from './i-convention-applicability.js';
4
+ import type { IConventionScope } from './i-convention-scope.js';
5
+ import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
6
+ /** Where each filter is decided — keyed by the enum, so a new filter without a level is a compile error. */
7
+ export declare const CONVENTION_FILTER_LEVELS: Readonly<Record<ConventionAppliesToFilter, ConventionFilterLevel>>;
8
+ /** The convention's declared values for `filter` — `[]` for an absent filter (or a non-list, which the loader refuses). */
9
+ export declare function declaredAppliesTo(convention: IConvention, filter: ConventionAppliesToFilter): readonly string[];
10
+ /**
11
+ * A file path as the per-file filters AND a rule's patterns read it:
12
+ * project-relative, `/`-separated, no leading `./`. `checkConventionsAgainstFiles`
13
+ * normalizes its file list through this once, so the scope test and every
14
+ * `filePattern` / `expectMatch` / `forbidMatch` regex see ONE spelling of a file
15
+ * (round 15 review: `--files ./src/a.ts` was covered by `fileGlobs: ['src/**']`
16
+ * here and then failed `filePattern: '^src/'` on the raw `./src/a.ts` — a false hit).
17
+ *
18
+ * The spelling is REALPATH-canonical (round 15 follow-up, F9): the file and the
19
+ * project root are both resolved through their symlinks before one is made
20
+ * relative to the other, so a symlinked absolute path (`/link/src/a.ts` with
21
+ * `/link → the project`, or macOS `/var/…` for a root at `/private/var/…`)
22
+ * behaves exactly like its target — it read `../link/src/a.ts`, which no
23
+ * `fileGlobs` selected, so the convention was silently not applicable. A path
24
+ * whose target lies OUTSIDE the project (an in-project symlink to a sibling
25
+ * checkout) keeps its lexical in-project spelling: that is where it is in scope.
26
+ */
27
+ export declare function conventionFilePath(inspection: ISharkcraftInspection, file: string): string;
28
+ /**
29
+ * Does `convention` apply here — to the workspace, and (given `file`) to that
30
+ * file? Without `file` only the workspace filters decide; the per-file ones
31
+ * are listed as `decided per file`. See the module doc for the table.
32
+ */
33
+ export declare function conventionApplicability(convention: IConvention, inspection: ISharkcraftInspection, file?: string): IConventionApplicability;
34
+ /**
35
+ * Which of `files` `convention` covers — per file through
36
+ * {@link conventionApplicability}, so `conventions check` and the rule-graph
37
+ * bridge (which both call this) cannot disagree.
38
+ *
39
+ * Not applicable when a workspace filter excludes it, or when `files` is
40
+ * non-empty and no file passes the per-file filters (the per-file reasons
41
+ * then count what each filter selected across the list). An EMPTY list keeps
42
+ * a workspace-applicable convention applicable over nothing — the caller's own
43
+ * empty-scope verdict decides that case.
44
+ */
45
+ export declare function conventionScope(convention: IConvention, inspection: ISharkcraftInspection, files: readonly string[]): IConventionScope;
46
+ //# sourceMappingURL=convention-applicability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convention-applicability.d.ts","sourceRoot":"","sources":["../src/convention-applicability.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,yBAAyB,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,4GAA4G;AAC5G,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,CAMtG,CAAC;AAWH,2HAA2H;AAC3H,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,yBAAyB,GAAG,SAAS,MAAM,EAAE,CAG/G;AAwCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAc1F;AAiED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,qBAAqB,EACjC,IAAI,CAAC,EAAE,MAAM,GACZ,wBAAwB,CAQ1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,gBAAgB,CAkDlB"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * THE convention applicability authority (round 15, 15.1).
3
+ *
4
+ * `IConventionAppliesTo` declares five filters; before this only `fileGlobs`
5
+ * was read — by two different matchers that disagreed (`conventions check`
6
+ * compiled `src/**\/*.ts` so it missed `src/a.ts` and ignored `!`; the
7
+ * rule-graph bridge dropped a convention with no `fileGlobs` that check
8
+ * enforced on every file). `profileIds`, `frameworks` and `languages` were
9
+ * validated, resolved by the doctor, and inert.
10
+ *
11
+ * Every surface now asks THIS module: `conventions check`, the rule-graph
12
+ * bridge, MCP `prepare_agent_task`, and the `conventions list / get / explain`
13
+ * display (which shows the answer and never hides an entry).
14
+ *
15
+ * Semantics — the pack-compatibility precedent (`pack-compatibility.ts`):
16
+ * - within a filter, ANY listed value matches;
17
+ * - EVERY declared filter must match;
18
+ * - an absent or empty filter imposes no constraint.
19
+ *
20
+ * | filter | level | matches when |
21
+ * |------------------|-----------|-----------------------------------------------------------|
22
+ * | `profileIds` | workspace | a listed id is in `inspection.workspace.profiles` |
23
+ * | `frameworks` | workspace | a listed id is in `inspection.workspace.frameworks[].id` |
24
+ * | `languages` | file | the file's language (`fileLanguageOf`) is listed |
25
+ * | `fileGlobs` | file | `globListSelects(file, globs)` — `**` spans zero+ segments, `!` subtracts |
26
+ * | `constructKinds` | reserved | always (not evaluated; the loader warns) |
27
+ */
28
+ import { realpathSync } from 'node:fs';
29
+ import * as nodePath from 'node:path';
30
+ import { globListSelects } from '@shrkcrft/boundaries';
31
+ import { ConventionAppliesToFilter } from '@shrkcrft/plugin-api';
32
+ import { ConventionFilterLevel } from "./convention-filter-level.js";
33
+ import { fileLanguageOf } from "./file-languages.js";
34
+ /** Where each filter is decided — keyed by the enum, so a new filter without a level is a compile error. */
35
+ export const CONVENTION_FILTER_LEVELS = Object.freeze({
36
+ [ConventionAppliesToFilter.ProfileIds]: ConventionFilterLevel.Workspace,
37
+ [ConventionAppliesToFilter.Frameworks]: ConventionFilterLevel.Workspace,
38
+ [ConventionAppliesToFilter.Languages]: ConventionFilterLevel.File,
39
+ [ConventionAppliesToFilter.FileGlobs]: ConventionFilterLevel.File,
40
+ [ConventionAppliesToFilter.ConstructKinds]: ConventionFilterLevel.Reserved,
41
+ });
42
+ /** Reasons are listed workspace filters first, then per-file, then reserved. */
43
+ const FILTER_ORDER = [
44
+ ConventionAppliesToFilter.ProfileIds,
45
+ ConventionAppliesToFilter.Frameworks,
46
+ ConventionAppliesToFilter.Languages,
47
+ ConventionAppliesToFilter.FileGlobs,
48
+ ConventionAppliesToFilter.ConstructKinds,
49
+ ];
50
+ /** The convention's declared values for `filter` — `[]` for an absent filter (or a non-list, which the loader refuses). */
51
+ export function declaredAppliesTo(convention, filter) {
52
+ const value = convention.appliesTo?.[filter];
53
+ return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
54
+ }
55
+ /** One realpath per distinct file per inspection — `conventionScope` judges every file once per per-file filter. */
56
+ const SPELLINGS = new WeakMap();
57
+ /**
58
+ * `abs` with every symlink resolved. A path that does not exist (a file a diff
59
+ * deleted, a path a test names) resolves through its nearest existing ancestor,
60
+ * so `/var/…/gone.ts` and `/private/var/…/gone.ts` still agree.
61
+ */
62
+ function canonicalPath(abs) {
63
+ let head = abs;
64
+ const tail = [];
65
+ for (;;) {
66
+ try {
67
+ const real = realpathSync(head);
68
+ return tail.length > 0 ? nodePath.join(real, ...tail.reverse()) : real;
69
+ }
70
+ catch {
71
+ const parent = nodePath.dirname(head);
72
+ if (parent === head)
73
+ return abs;
74
+ tail.push(nodePath.basename(head));
75
+ head = parent;
76
+ }
77
+ }
78
+ }
79
+ /** The lexical spelling: project-relative for an absolute path, `/`-separated, no leading `./`. */
80
+ function lexicalFilePath(projectRoot, file) {
81
+ let f = nodePath.isAbsolute(file) ? nodePath.relative(projectRoot, file) : file;
82
+ f = f.replace(/\\/g, '/');
83
+ while (f.startsWith('./'))
84
+ f = f.slice(2);
85
+ return f;
86
+ }
87
+ /**
88
+ * A file path as the per-file filters AND a rule's patterns read it:
89
+ * project-relative, `/`-separated, no leading `./`. `checkConventionsAgainstFiles`
90
+ * normalizes its file list through this once, so the scope test and every
91
+ * `filePattern` / `expectMatch` / `forbidMatch` regex see ONE spelling of a file
92
+ * (round 15 review: `--files ./src/a.ts` was covered by `fileGlobs: ['src/**']`
93
+ * here and then failed `filePattern: '^src/'` on the raw `./src/a.ts` — a false hit).
94
+ *
95
+ * The spelling is REALPATH-canonical (round 15 follow-up, F9): the file and the
96
+ * project root are both resolved through their symlinks before one is made
97
+ * relative to the other, so a symlinked absolute path (`/link/src/a.ts` with
98
+ * `/link → the project`, or macOS `/var/…` for a root at `/private/var/…`)
99
+ * behaves exactly like its target — it read `../link/src/a.ts`, which no
100
+ * `fileGlobs` selected, so the convention was silently not applicable. A path
101
+ * whose target lies OUTSIDE the project (an in-project symlink to a sibling
102
+ * checkout) keeps its lexical in-project spelling: that is where it is in scope.
103
+ */
104
+ export function conventionFilePath(inspection, file) {
105
+ let cache = SPELLINGS.get(inspection);
106
+ if (!cache) {
107
+ cache = { realRoot: canonicalPath(nodePath.resolve(inspection.projectRoot)), files: new Map() };
108
+ SPELLINGS.set(inspection, cache);
109
+ }
110
+ const known = cache.files.get(file);
111
+ if (known !== undefined)
112
+ return known;
113
+ const real = canonicalPath(nodePath.resolve(inspection.projectRoot, file));
114
+ const rel = nodePath.relative(cache.realRoot, real);
115
+ const inside = rel.length > 0 && rel !== '..' && !rel.startsWith(`..${nodePath.sep}`) && !nodePath.isAbsolute(rel);
116
+ const spelled = inside ? rel.split(nodePath.sep).join('/') : lexicalFilePath(inspection.projectRoot, file);
117
+ cache.files.set(file, spelled);
118
+ return spelled;
119
+ }
120
+ function list(values) {
121
+ return `[${values.join(', ')}]`;
122
+ }
123
+ function reason(filter, declared, observed, matched, detail) {
124
+ return {
125
+ filter,
126
+ level: CONVENTION_FILTER_LEVELS[filter],
127
+ declared,
128
+ observed,
129
+ matched,
130
+ message: `appliesTo.${filter} ${list(declared)}: ${detail}`,
131
+ };
132
+ }
133
+ /** A workspace filter: any declared id among the detected ones. */
134
+ function judgeWorkspace(filter, declared, detected, noun) {
135
+ const hit = declared.filter((d) => detected.includes(d));
136
+ if (hit.length > 0)
137
+ return reason(filter, declared, detected, true, `detected ${hit.join(', ')}`);
138
+ const seen = detected.length > 0 ? `detected: ${detected.join(', ')}` : `no ${noun} detected`;
139
+ return reason(filter, declared, detected, false, `none detected (${seen})`);
140
+ }
141
+ function judge(filter, declared, inspection, file) {
142
+ switch (filter) {
143
+ case ConventionAppliesToFilter.ProfileIds:
144
+ return judgeWorkspace(filter, declared, [...(inspection.workspace?.profiles ?? [])], 'profile');
145
+ case ConventionAppliesToFilter.Frameworks:
146
+ return judgeWorkspace(filter, declared, (inspection.workspace?.frameworks ?? []).map((f) => f.id), 'framework');
147
+ case ConventionAppliesToFilter.ConstructKinds:
148
+ return reason(filter, declared, [], true, 'reserved — not evaluated (the convention applies regardless)');
149
+ case ConventionAppliesToFilter.Languages: {
150
+ if (file === undefined)
151
+ return reason(filter, declared, [], true, 'decided per file');
152
+ const path = conventionFilePath(inspection, file);
153
+ const language = fileLanguageOf(path)?.id;
154
+ if (language === undefined)
155
+ return reason(filter, declared, [], false, `${path} has no known language`);
156
+ return reason(filter, declared, [language], declared.includes(language), `${path} is ${language}`);
157
+ }
158
+ case ConventionAppliesToFilter.FileGlobs: {
159
+ if (file === undefined)
160
+ return reason(filter, declared, [], true, 'decided per file');
161
+ const path = conventionFilePath(inspection, file);
162
+ const selected = globListSelects(path, declared);
163
+ return reason(filter, declared, [path], selected, `${selected ? 'selects' : 'does not select'} ${path}`);
164
+ }
165
+ }
166
+ }
167
+ /**
168
+ * Does `convention` apply here — to the workspace, and (given `file`) to that
169
+ * file? Without `file` only the workspace filters decide; the per-file ones
170
+ * are listed as `decided per file`. See the module doc for the table.
171
+ */
172
+ export function conventionApplicability(convention, inspection, file) {
173
+ const reasons = [];
174
+ for (const filter of FILTER_ORDER) {
175
+ const declared = declaredAppliesTo(convention, filter);
176
+ if (declared.length === 0)
177
+ continue;
178
+ reasons.push(judge(filter, declared, inspection, file));
179
+ }
180
+ return { applicable: reasons.every((r) => r.matched), reasons };
181
+ }
182
+ /**
183
+ * Which of `files` `convention` covers — per file through
184
+ * {@link conventionApplicability}, so `conventions check` and the rule-graph
185
+ * bridge (which both call this) cannot disagree.
186
+ *
187
+ * Not applicable when a workspace filter excludes it, or when `files` is
188
+ * non-empty and no file passes the per-file filters (the per-file reasons
189
+ * then count what each filter selected across the list). An EMPTY list keeps
190
+ * a workspace-applicable convention applicable over nothing — the caller's own
191
+ * empty-scope verdict decides that case.
192
+ */
193
+ export function conventionScope(convention, inspection, files) {
194
+ const conventionId = convention.id;
195
+ const workspace = conventionApplicability(convention, inspection);
196
+ if (!workspace.applicable)
197
+ return { conventionId, applicable: false, files: [], reasons: workspace.reasons };
198
+ const perFile = FILTER_ORDER.filter((f) => CONVENTION_FILTER_LEVELS[f] === ConventionFilterLevel.File && declaredAppliesTo(convention, f).length > 0);
199
+ if (perFile.length === 0 || files.length === 0) {
200
+ return { conventionId, applicable: true, files: [...files], reasons: workspace.reasons };
201
+ }
202
+ const covered = [];
203
+ const admitted = new Map();
204
+ const seen = new Map();
205
+ for (const file of files) {
206
+ const verdict = conventionApplicability(convention, inspection, file);
207
+ if (verdict.applicable)
208
+ covered.push(file);
209
+ for (const r of verdict.reasons) {
210
+ if (r.level !== ConventionFilterLevel.File)
211
+ continue;
212
+ if (r.matched)
213
+ admitted.set(r.filter, (admitted.get(r.filter) ?? 0) + 1);
214
+ if (r.filter === ConventionAppliesToFilter.Languages) {
215
+ const s = seen.get(r.filter) ?? new Set();
216
+ for (const o of r.observed)
217
+ s.add(o);
218
+ seen.set(r.filter, s);
219
+ }
220
+ }
221
+ }
222
+ if (covered.length > 0)
223
+ return { conventionId, applicable: true, files: covered, reasons: workspace.reasons };
224
+ // No file passed: say, per declared per-file filter, what it selected across
225
+ // the list. A filter that admitted NO file excluded the convention (matched:
226
+ // false); one that admitted some did not (matched: true) — unless EVERY
227
+ // per-file filter admitted some file and none passed them all: then the
228
+ // intersection excluded it, and each filter says so. So the excluding reasons
229
+ // are never empty and never name a filter that excluded nothing (round 15
230
+ // review: `fileGlobs` read "selects 1 of 1 file(s)" as an excluding reason).
231
+ const n = files.length;
232
+ const intersectionOnly = perFile.every((filter) => (admitted.get(filter) ?? 0) > 0);
233
+ const together = intersectionOnly ? ' — but no file in scope passes every per-file filter together' : '';
234
+ const aggregated = perFile.map((filter) => {
235
+ const declared = declaredAppliesTo(convention, filter);
236
+ const count = admitted.get(filter) ?? 0;
237
+ const matched = count > 0 && !intersectionOnly;
238
+ if (filter === ConventionAppliesToFilter.Languages) {
239
+ const langs = [...(seen.get(filter) ?? new Set())].sort();
240
+ const detail = `${count} of ${n} file(s) in scope ${count === 1 ? 'is' : 'are'} a listed language (seen: ${langs.length > 0 ? langs.join(', ') : 'none known'})${together}`;
241
+ return reason(filter, declared, langs, matched, detail);
242
+ }
243
+ return reason(filter, declared, [], matched, `selects ${count} of ${n} file(s) in scope${together}`);
244
+ });
245
+ const workspaceReasons = workspace.reasons.filter((r) => r.level !== ConventionFilterLevel.File);
246
+ return { conventionId, applicable: false, files: [], reasons: [...workspaceReasons, ...aggregated] };
247
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Where an `appliesTo` filter is decided (round 15, 15.1) — see
3
+ * `conventionApplicability`.
4
+ */
5
+ export declare enum ConventionFilterLevel {
6
+ /** Decided once per workspace, from what the workspace detectors saw (`profileIds`, `frameworks`). */
7
+ Workspace = "workspace",
8
+ /** Decided per file (`fileGlobs`, `languages`). */
9
+ File = "file",
10
+ /** Loaded and never evaluated — the convention applies regardless (`constructKinds`). */
11
+ Reserved = "reserved"
12
+ }
13
+ //# sourceMappingURL=convention-filter-level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convention-filter-level.d.ts","sourceRoot":"","sources":["../src/convention-filter-level.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,qBAAqB;IAC/B,sGAAsG;IACtG,SAAS,cAAc;IACvB,mDAAmD;IACnD,IAAI,SAAS;IACb,yFAAyF;IACzF,QAAQ,aAAa;CACtB"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Where an `appliesTo` filter is decided (round 15, 15.1) — see
3
+ * `conventionApplicability`.
4
+ */
5
+ export var ConventionFilterLevel;
6
+ (function (ConventionFilterLevel) {
7
+ /** Decided once per workspace, from what the workspace detectors saw (`profileIds`, `frameworks`). */
8
+ ConventionFilterLevel["Workspace"] = "workspace";
9
+ /** Decided per file (`fileGlobs`, `languages`). */
10
+ ConventionFilterLevel["File"] = "file";
11
+ /** Loaded and never evaluated — the convention applies regardless (`constructKinds`). */
12
+ ConventionFilterLevel["Reserved"] = "reserved";
13
+ })(ConventionFilterLevel || (ConventionFilterLevel = {}));
@@ -1,5 +1,6 @@
1
- import { type IConvention } from '@shrkcrft/plugin-api';
1
+ import { ConventionSeverity, type IConvention } from '@shrkcrft/plugin-api';
2
2
  import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
3
+ import type { INotApplicableConvention } from './i-not-applicable-convention.js';
3
4
  import { type IRejectedEntry } from '@shrkcrft/core';
4
5
  export declare const CONVENTION_REGISTRY_SCHEMA = "sharkcraft.convention-registry/v1";
5
6
  export declare enum ConventionSource {
@@ -14,7 +15,7 @@ export interface IConventionEntry {
14
15
  readonly sourceFile: string;
15
16
  }
16
17
  export interface IConventionDoctorIssue {
17
- readonly severity: 'info' | 'warning' | 'error';
18
+ readonly severity: ConventionSeverity;
18
19
  readonly code: string;
19
20
  readonly message: string;
20
21
  readonly conventionId?: string;
@@ -53,7 +54,7 @@ export interface IConventionCheckHit {
53
54
  readonly ruleId: string;
54
55
  readonly file: string;
55
56
  readonly line?: number;
56
- readonly severity: 'info' | 'warning' | 'error';
57
+ readonly severity: ConventionSeverity;
57
58
  readonly message: string;
58
59
  }
59
60
  export interface IConventionCheckReport {
@@ -61,6 +62,30 @@ export interface IConventionCheckReport {
61
62
  readonly filesScanned: number;
62
63
  readonly hits: readonly IConventionCheckHit[];
63
64
  readonly verdict: 'clean' | 'has-violations';
65
+ /**
66
+ * Conventions that do not apply here (round 15, 15.1) — never evaluated, each
67
+ * with the `appliesTo` filters that excluded it. `conventions check` prints
68
+ * every one and accepts it explicitly (`acceptedBy: 'appliesTo'`).
69
+ */
70
+ readonly notApplicable: readonly INotApplicableConvention[];
71
+ /** How many files in scope each APPLICABLE convention covers, by id (round 15). */
72
+ readonly filesInScope: Readonly<Record<string, number>>;
64
73
  }
65
- export declare function checkConventionsAgainstFiles(inspection: ISharkcraftInspection, files: readonly string[]): Promise<IConventionCheckReport>;
74
+ /**
75
+ * Run the loaded conventions against `files`. Which files a convention covers
76
+ * is `conventionScope` — THE applicability authority (round 15), the same one
77
+ * the rule-graph bridge reads — so every `appliesTo` filter scopes, `**`
78
+ * spans zero or more segments, and a `!` glob subtracts (a private matcher
79
+ * here missed `src/a.ts` under `src/**\/*.ts` and ignored `!`). A convention
80
+ * that does not apply is never evaluated and is reported in `notApplicable`.
81
+ *
82
+ * Per covered file, each rule: `filePattern` and `expectMatch` must match the
83
+ * path (a miss is a hit), `forbidMatch` must not (a match is a hit).
84
+ *
85
+ * Every file is read in ONE spelling — `conventionFilePath` (project-relative,
86
+ * `/`-separated, no `./`), the one the scope test reads — so a rule pattern
87
+ * never tests a spelling the glob did not, and a hit names that path (round 15
88
+ * review: `./src/a.ts` was covered by `src/**` and then failed `^src/`).
89
+ */
90
+ export declare function checkConventionsAgainstFiles(inspection: ISharkcraftInspection, inputFiles: readonly string[]): Promise<IConventionCheckReport>;
66
91
  //# sourceMappingURL=convention-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"convention-registry.d.ts","sourceRoot":"","sources":["../src/convention-registry.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,sGAAsG;AACtG,MAAM,WAAW,mBAAmB;IAClC,wGAAwG;IACxG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oGAAoG;IACpG,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAK1E;AAyBD,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC;IACT,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC1C,KAAK,EAAE,mBAAmB,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CACrC,CAAC,CA0HD;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAGtC;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,qBAAqB,EACjC,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGlC;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAG5C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAC9C;AAiBD,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,sBAAsB,CAAC,CAqCjC"}
1
+ {"version":3,"file":"convention-registry.d.ts","sourceRoot":"","sources":["../src/convention-registry.ts"],"names":[],"mappings":"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"}