@mmnto/totem 1.118.1 → 1.119.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 (111) hide show
  1. package/dist/artifacts/admission.d.ts +12 -12
  2. package/dist/artifacts/verdict.d.ts +16 -16
  3. package/dist/compile-manifest.d.ts +89 -0
  4. package/dist/compile-manifest.d.ts.map +1 -1
  5. package/dist/compile-manifest.js +180 -31
  6. package/dist/compile-manifest.js.map +1 -1
  7. package/dist/compile-manifest.test.js +169 -1
  8. package/dist/compile-manifest.test.js.map +1 -1
  9. package/dist/compiler-schema.d.ts +1067 -0
  10. package/dist/compiler-schema.d.ts.map +1 -1
  11. package/dist/compiler-schema.js +204 -1
  12. package/dist/compiler-schema.js.map +1 -1
  13. package/dist/compiler-schema.test.js +92 -0
  14. package/dist/compiler-schema.test.js.map +1 -1
  15. package/dist/compiler.d.ts +2 -6
  16. package/dist/compiler.d.ts.map +1 -1
  17. package/dist/compiler.js +6 -17
  18. package/dist/compiler.js.map +1 -1
  19. package/dist/freeze.d.ts +3 -3
  20. package/dist/index.d.ts +12 -3
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +6 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/ledger.d.ts +12 -12
  25. package/dist/regex-safety/apply-rules-bounded.d.ts +11 -0
  26. package/dist/regex-safety/apply-rules-bounded.d.ts.map +1 -1
  27. package/dist/regex-safety/apply-rules-bounded.js +59 -5
  28. package/dist/regex-safety/apply-rules-bounded.js.map +1 -1
  29. package/dist/regex-validation.d.ts +7 -0
  30. package/dist/regex-validation.d.ts.map +1 -0
  31. package/dist/regex-validation.js +32 -0
  32. package/dist/regex-validation.js.map +1 -0
  33. package/dist/rule-engine.d.ts +11 -1
  34. package/dist/rule-engine.d.ts.map +1 -1
  35. package/dist/rule-engine.js +125 -18
  36. package/dist/rule-engine.js.map +1 -1
  37. package/dist/spine/authored-rule.d.ts +669 -245
  38. package/dist/spine/authored-rule.d.ts.map +1 -1
  39. package/dist/spine/authored-rule.js +113 -27
  40. package/dist/spine/authored-rule.js.map +1 -1
  41. package/dist/spine/authored-rule.test.js +170 -4
  42. package/dist/spine/authored-rule.test.js.map +1 -1
  43. package/dist/spine/authoring-ledger.d.ts +69 -10
  44. package/dist/spine/authoring-ledger.d.ts.map +1 -1
  45. package/dist/spine/authoring-ledger.js +46 -25
  46. package/dist/spine/authoring-ledger.js.map +1 -1
  47. package/dist/spine/authoring-ledger.test.js +20 -7
  48. package/dist/spine/authoring-ledger.test.js.map +1 -1
  49. package/dist/spine/candidate-rule.d.ts +18 -1
  50. package/dist/spine/candidate-rule.d.ts.map +1 -1
  51. package/dist/spine/candidate-rule.js.map +1 -1
  52. package/dist/spine/cert-corpus-seed.d.ts +8 -8
  53. package/dist/spine/compile.d.ts +4 -1
  54. package/dist/spine/compile.d.ts.map +1 -1
  55. package/dist/spine/compile.js +50 -3
  56. package/dist/spine/compile.js.map +1 -1
  57. package/dist/spine/compile.test.js +189 -23
  58. package/dist/spine/compile.test.js.map +1 -1
  59. package/dist/spine/frozen-split.d.ts +18 -18
  60. package/dist/spine/ledgers.d.ts +24 -24
  61. package/dist/spine/lf-normalize.d.ts +9 -0
  62. package/dist/spine/lf-normalize.d.ts.map +1 -0
  63. package/dist/spine/lf-normalize.js +38 -0
  64. package/dist/spine/lf-normalize.js.map +1 -0
  65. package/dist/spine/preimage-differential.d.ts +3 -1
  66. package/dist/spine/preimage-differential.d.ts.map +1 -1
  67. package/dist/spine/preimage-differential.js +9 -6
  68. package/dist/spine/preimage-differential.js.map +1 -1
  69. package/dist/spine/preimage-differential.test.js +59 -0
  70. package/dist/spine/preimage-differential.test.js.map +1 -1
  71. package/dist/spine/record-exemplars.fixture.d.ts +5 -0
  72. package/dist/spine/record-exemplars.fixture.d.ts.map +1 -0
  73. package/dist/spine/record-exemplars.fixture.js +61 -0
  74. package/dist/spine/record-exemplars.fixture.js.map +1 -0
  75. package/dist/spine/record-lower.d.ts +90 -0
  76. package/dist/spine/record-lower.d.ts.map +1 -0
  77. package/dist/spine/record-lower.js +418 -0
  78. package/dist/spine/record-lower.js.map +1 -0
  79. package/dist/spine/record-lower.test.d.ts +2 -0
  80. package/dist/spine/record-lower.test.d.ts.map +1 -0
  81. package/dist/spine/record-lower.test.js +562 -0
  82. package/dist/spine/record-lower.test.js.map +1 -0
  83. package/dist/spine/record-runtime.d.ts +215 -0
  84. package/dist/spine/record-runtime.d.ts.map +1 -0
  85. package/dist/spine/record-runtime.js +330 -0
  86. package/dist/spine/record-runtime.js.map +1 -0
  87. package/dist/spine/record-runtime.test.d.ts +2 -0
  88. package/dist/spine/record-runtime.test.d.ts.map +1 -0
  89. package/dist/spine/record-runtime.test.js +814 -0
  90. package/dist/spine/record-runtime.test.js.map +1 -0
  91. package/dist/spine/rule-record.d.ts +864 -0
  92. package/dist/spine/rule-record.d.ts.map +1 -0
  93. package/dist/spine/rule-record.js +781 -0
  94. package/dist/spine/rule-record.js.map +1 -0
  95. package/dist/spine/rule-record.test.d.ts +2 -0
  96. package/dist/spine/rule-record.test.d.ts.map +1 -0
  97. package/dist/spine/rule-record.test.js +1262 -0
  98. package/dist/spine/rule-record.test.js.map +1 -0
  99. package/dist/spine/windtunnel-firing.d.ts.map +1 -1
  100. package/dist/spine/windtunnel-firing.js +28 -1
  101. package/dist/spine/windtunnel-firing.js.map +1 -1
  102. package/dist/spine/windtunnel-lock.d.ts +10 -10
  103. package/dist/stage4-verifier.d.ts.map +1 -1
  104. package/dist/stage4-verifier.js +61 -17
  105. package/dist/stage4-verifier.js.map +1 -1
  106. package/dist/sys/glob.d.ts +30 -0
  107. package/dist/sys/glob.d.ts.map +1 -1
  108. package/dist/sys/glob.js +62 -1
  109. package/dist/sys/glob.js.map +1 -1
  110. package/dist/types.d.ts +1 -1
  111. package/package.json +1 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAStE,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAOvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAarD,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAkBrF,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,gCAAgC,EAChC,8BAA8B,EAC9B,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEzF,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAIvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAe9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EACL,SAAS,IAAI,sBAAsB,EACnC,eAAe,IAAI,yBAAyB,GAC7C,MAAM,gCAAgC,CAAC;AAExC,0EAA0E;AAC1E,4EAA4E;AAC5E,sEAAsE;AACtE,gEAAgE;AAChE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAUpG,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAQ/F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAI9E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5E,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,OAAO,EACP,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIlD,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,+BAA+B;AAC/B,OAAO,EACL,cAAc,EACd,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAsB9B,OAAO,EACL,wBAAwB,EACxB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EAErB,6BAA6B,EAC7B,8BAA8B,EAC9B,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EAEpB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,EACX,yBAAyB,EACzB,gBAAgB,EAEhB,oBAAoB,EACpB,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,qBAAqB,EAErB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EAGtB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,iDAAiD;AACjD,OAAO,EACL,4BAA4B,GAK7B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAGL,cAAc,GAEf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAuB,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEpG,eAAe;AACf,OAAO,EACL,eAAe,EACf,gBAAgB,EAGhB,aAAa,EACb,YAAY,EACZ,YAAY,EAIZ,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElG,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAIrD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIrE,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,4DAA4D;AAC5D,6EAA6E;AAC7E,uDAAuD;AACvD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,WAAW;AACX,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAI1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,YAAY;AACZ,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,WAAW,EACX,WAAW,EACX,QAAQ,EACR,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI5D,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAEhC,yBAAyB;AACzB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAI7D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAUvD,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAOlF,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,8BAA8B,EAC9B,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAoBlE,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAIjG,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,gCAAgC,EAChC,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAIxF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,yDAAyD;AACzD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAU/E,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAahC,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,4BAA4B,EAC5B,kCAAkC,EAClC,8BAA8B,EAC9B,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAWzB,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEhE,oGAAoG;AACpG,OAAO,EACL,iCAAiC,EACjC,YAAY,EACZ,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAiBjE,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,8BAA8B,EAC9B,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,0CAA0C,EAC1C,+BAA+B,EAC/B,oBAAoB,EACpB,mCAAmC,EACnC,kCAAkC,EAClC,2BAA2B,EAC3B,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,gCAAgC,EAChC,qBAAqB,EACrB,2BAA2B,EAC3B,iBAAiB,EACjB,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAY/B,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAK1C,OAAO,EACL,2CAA2C,EAC3C,6BAA6B,EAC7B,cAAc,EACd,6BAA6B,EAC7B,eAAe,EACf,OAAO,EACP,6BAA6B,EAC7B,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAchC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,+BAA+B,EAC/B,0BAA0B,EAC1B,6BAA6B,EAC7B,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,+BAA+B,EAC/B,8BAA8B,EAC9B,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAmB9B,OAAO,EACL,iBAAiB,EACjB,iCAAiC,EACjC,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,2BAA2B,EAC3B,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,4BAA4B,EAC5B,+BAA+B,EAC/B,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAWhC,OAAO,EACL,+BAA+B,EAC/B,qBAAqB,EACrB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAC7B,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAQ7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,2EAA2E;AAC3E,+EAA+E;AAC/E,yEAAyE;AACzE,sEAAsE;AACtE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AASrC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAa7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,sBAAsB,CAAC;AAkC9B,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,EACtB,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAC3B,2BAA2B,EAC3B,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE9D,uEAAuE;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAS7F,OAAO,EACL,gBAAgB,EAChB,OAAO,EACP,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAU/B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAanG,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,6BAA6B,EAC7B,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,WAAW,EACX,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,iHAAiH;AACjH,OAAO,EACL,iCAAiC,EACjC,0BAA0B,EAC1B,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,kCAAkC,CAAC;AAM1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUvD,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,yBAAyB,EACzB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AActC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMvE,OAAO,EACL,8BAA8B,EAC9B,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAa1F,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQ5F,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAmBtE,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE9F,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EACL,qBAAqB,EACrB,gCAAgC,GACjC,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAmBnC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,oCAAoC,EACpC,8BAA8B,EAC9B,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAWjF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAO/D,OAAO,EACL,oCAAoC,EACpC,uBAAuB,GACxB,MAAM,uCAAuC,CAAC;AAQ/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAW/E,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,cAAc,GACf,MAAM,wBAAwB,CAAC;AAmBhC,OAAO,EACL,mBAAmB,EACnB,iCAAiC,EACjC,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,SAAS,EACT,6BAA6B,EAC7B,2BAA2B,EAC3B,YAAY,GACb,MAAM,sBAAsB,CAAC"}
package/dist/ledger.d.ts CHANGED
@@ -164,13 +164,13 @@ export declare const LedgerEventSchema: z.ZodEffects<z.ZodObject<{
164
164
  qbd_correlation_id: z.ZodOptional<z.ZodString>;
165
165
  }, "strip", z.ZodTypeAny, {
166
166
  type: "suppress" | "corpus_query" | "derive_action" | "override" | "exemption" | "mcp_call" | "tool_call_first_significant" | "hook_fire" | "session_start" | "compile_run" | "claim_discipline_finding" | "compile_cache_decision";
167
+ source: "lint" | "shield" | "bot";
167
168
  timestamp: string;
168
169
  justification: string;
169
- source: "lint" | "shield" | "bot";
170
+ ruleId?: string | undefined;
170
171
  immutable?: boolean | undefined;
171
- file?: string | undefined;
172
172
  line?: number | undefined;
173
- ruleId?: string | undefined;
173
+ file?: string | undefined;
174
174
  agent_source?: string | undefined;
175
175
  session_id?: string | undefined;
176
176
  correlation_id?: string | undefined;
@@ -180,13 +180,13 @@ export declare const LedgerEventSchema: z.ZodEffects<z.ZodObject<{
180
180
  qbd_correlation_id?: string | undefined;
181
181
  }, {
182
182
  type: "suppress" | "corpus_query" | "derive_action" | "override" | "exemption" | "mcp_call" | "tool_call_first_significant" | "hook_fire" | "session_start" | "compile_run" | "claim_discipline_finding" | "compile_cache_decision";
183
- timestamp: string;
184
183
  source: "lint" | "shield" | "bot";
184
+ timestamp: string;
185
+ ruleId?: string | undefined;
185
186
  immutable?: boolean | undefined;
186
- file?: string | undefined;
187
187
  line?: number | undefined;
188
+ file?: string | undefined;
188
189
  justification?: string | undefined;
189
- ruleId?: string | undefined;
190
190
  agent_source?: string | undefined;
191
191
  session_id?: string | undefined;
192
192
  correlation_id?: string | undefined;
@@ -196,13 +196,13 @@ export declare const LedgerEventSchema: z.ZodEffects<z.ZodObject<{
196
196
  qbd_correlation_id?: string | undefined;
197
197
  }>, {
198
198
  type: "suppress" | "corpus_query" | "derive_action" | "override" | "exemption" | "mcp_call" | "tool_call_first_significant" | "hook_fire" | "session_start" | "compile_run" | "claim_discipline_finding" | "compile_cache_decision";
199
+ source: "lint" | "shield" | "bot";
199
200
  timestamp: string;
200
201
  justification: string;
201
- source: "lint" | "shield" | "bot";
202
+ ruleId?: string | undefined;
202
203
  immutable?: boolean | undefined;
203
- file?: string | undefined;
204
204
  line?: number | undefined;
205
- ruleId?: string | undefined;
205
+ file?: string | undefined;
206
206
  agent_source?: string | undefined;
207
207
  session_id?: string | undefined;
208
208
  correlation_id?: string | undefined;
@@ -212,13 +212,13 @@ export declare const LedgerEventSchema: z.ZodEffects<z.ZodObject<{
212
212
  qbd_correlation_id?: string | undefined;
213
213
  }, {
214
214
  type: "suppress" | "corpus_query" | "derive_action" | "override" | "exemption" | "mcp_call" | "tool_call_first_significant" | "hook_fire" | "session_start" | "compile_run" | "claim_discipline_finding" | "compile_cache_decision";
215
- timestamp: string;
216
215
  source: "lint" | "shield" | "bot";
216
+ timestamp: string;
217
+ ruleId?: string | undefined;
217
218
  immutable?: boolean | undefined;
218
- file?: string | undefined;
219
219
  line?: number | undefined;
220
+ file?: string | undefined;
220
221
  justification?: string | undefined;
221
- ruleId?: string | undefined;
222
222
  agent_source?: string | undefined;
223
223
  session_id?: string | undefined;
224
224
  correlation_id?: string | undefined;
@@ -26,6 +26,17 @@ export interface BoundedApplyOptions {
26
26
  evaluator: RegexEvaluator;
27
27
  timeoutMode: TimeoutMode;
28
28
  repoRoot: string;
29
+ /**
30
+ * Prop 310 § Design 8 — whole-file reader for a `requires: {scope: file}`
31
+ * check. Same shape as the ast path's shipped `readStrategy` 7th parameter, so
32
+ * `totem lint --staged` threads the SAME `git show :<file>` reader into both
33
+ * dispatchers and the requirement is evaluated against the bytes being
34
+ * committed. Omitted ⇒ the worktree file is read.
35
+ *
36
+ * Reached only after a record-path rule with a file-scoped requirement has
37
+ * matched its target, so it adds no IO to the legacy corpus.
38
+ */
39
+ readStrategy?: (filePath: string) => Promise<string | null>;
29
40
  }
30
41
  export interface BoundedApplyResult {
31
42
  violations: Violation[];
@@ -1 +1 @@
1
- {"version":3,"file":"apply-rules-bounded.d.ts","sourceRoot":"","sources":["../../src/regex-safety/apply-rules-bounded.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACV,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,eAAe,EAAE,kBAAkB,EAAE,CAAC;CACvC;AAED,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAgI7B"}
1
+ {"version":3,"file":"apply-rules-bounded.d.ts","sourceRoot":"","sources":["../../src/regex-safety/apply-rules-bounded.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACV,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAU3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,eAAe,EAAE,kBAAkB,EAAE,CAAC;CACvC;AAED,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAoL7B"}
@@ -16,7 +16,9 @@ import * as fs from 'node:fs';
16
16
  import * as path from 'node:path';
17
17
  import { TotemParseError } from '../errors.js';
18
18
  import { extractJustification, getRustTestSpans, isProductionRustRule, isSuppressed, } from '../rule-engine.js';
19
- import { fileMatchesGlobs } from '../sys/glob.js';
19
+ // Prop 310 slice 2 — the record-grammar runtime semantics, shared with
20
+ // `rule-engine.ts` so both regex dispatchers scope and gate identically.
21
+ import { assertNoTornRecordRules, assertRequiresPatternsSafe, isInsideRoot, requiresSuppressesMatch, ruleAppliesToFile, } from '../spine/record-runtime.js';
20
22
  import { redactPath } from './telemetry.js';
21
23
  export async function applyRulesToAdditionsBounded(ctx, rules, additions, options, onRuleEvent) {
22
24
  const violations = [];
@@ -24,6 +26,10 @@ export async function applyRulesToAdditionsBounded(ctx, rules, additions, option
24
26
  if (additions.length === 0 || rules.length === 0) {
25
27
  return { violations, timeoutOutcomes };
26
28
  }
29
+ // Prop 310 § Design 12 — torn-manifest guard, and § Design 8's safe-regex2 gate
30
+ // on every `requires.pattern` before any of them is executed.
31
+ assertNoTornRecordRules(rules);
32
+ assertRequiresPatternsSafe(rules);
27
33
  const regexRules = rules.filter((r) => r.engine === 'regex' || !r.engine);
28
34
  const rustTestSpansCache = new Map();
29
35
  const getRustSpans = async (file) => {
@@ -42,16 +48,52 @@ export async function applyRulesToAdditionsBounded(ctx, rules, additions, option
42
48
  return [];
43
49
  }
44
50
  };
51
+ // Prop 310 § Design 8 — whole-file text for a `requires: {scope: file}` check,
52
+ // memoized per invocation. Prefers the caller's `readStrategy` (staged mode's
53
+ // `git show :<file>`) so the requirement is judged against the same bytes as
54
+ // the rest of the lint; a read failure yields `null`, which the evaluator
55
+ // treats as "context absent" and therefore FIRES — the safe direction.
56
+ const fileTextCache = new Map();
57
+ const getFileText = async (file) => {
58
+ if (fileTextCache.has(file))
59
+ return fileTextCache.get(file) ?? null;
60
+ let text = null;
61
+ if (options.readStrategy) {
62
+ // DELIBERATELY unwrapped: the caller's reader owns its own failure
63
+ // contract. Staged mode's reader throws `STAGED_READ_FAILED` precisely so
64
+ // an unreadable index entry surfaces instead of silently degrading, and a
65
+ // catch here would convert that loud failure into a quiet one. A reader
66
+ // that means "absent" returns `null`, which is handled below.
67
+ text = await options.readStrategy(file);
68
+ }
69
+ else if (isInsideRoot(options.repoRoot, file)) {
70
+ try {
71
+ text = await fs.promises.readFile(path.resolve(options.repoRoot, file), 'utf-8');
72
+ // totem-context: read failure yields no required-context evidence → the requirement is UNMET → the rule still FIRES; fails toward flagging, never toward suppression.
73
+ }
74
+ catch {
75
+ text = null;
76
+ }
77
+ }
78
+ // Out-of-root paths fall through as unreadable ⇒ requirement unmet ⇒ the rule
79
+ // FIRES. Diff-supplied paths are attacker-shaped; see `isInsideRoot`.
80
+ fileTextCache.set(file, text);
81
+ return text;
82
+ };
45
83
  for (const rule of regexRules) {
46
84
  // Partition additions by file so the evaluator can batch one rule per
47
85
  // file at a time. File granularity matches the fileGlobs scoping and
48
86
  // keeps timeout isolation per rule-file pair.
49
87
  const byFile = new Map();
50
88
  for (const addition of additions) {
51
- if (rule.fileGlobs && rule.fileGlobs.length > 0) {
52
- if (!fileMatchesGlobs(addition.file, rule.fileGlobs))
53
- continue;
54
- }
89
+ // Prop 310 § Design 7 — the two-array scope rule for record-path rules,
90
+ // the shipped `fileMatchesGlobs` predicate for every legacy rule. This
91
+ // dispatcher is the one `totem lint` uses for regex rules, so without the
92
+ // shared predicate a record rule's `excludeGlobs` would be ignored here
93
+ // and its `*.ts` silently promoted tree-wide — the scope WIDENING the
94
+ // grammar exists to prevent (falsification round, 2026-08-21).
95
+ if (!ruleAppliesToFile(rule, addition.file))
96
+ continue;
55
97
  const bucket = byFile.get(addition.file) ?? [];
56
98
  bucket.push(addition);
57
99
  byFile.set(addition.file, bucket);
@@ -90,6 +132,18 @@ export async function applyRulesToAdditionsBounded(ctx, rules, additions, option
90
132
  const addition = fileAdditions[matchedIndex];
91
133
  if (!addition)
92
134
  continue;
135
+ // Prop 310 § Design 8 — pass two, ahead of every other per-match check:
136
+ // the requirement is part of the MATCH PREDICATE, so a locus whose
137
+ // required context is present is not a match at all and emits neither a
138
+ // violation nor a `suppress` event. The file text is resolved here rather
139
+ // than lazily because this dispatcher is async and `requiresSuppressesMatch`
140
+ // is a pure sync predicate; `line` scope never triggers the read.
141
+ if (rule.requires !== undefined) {
142
+ const fileText = rule.requires.scope === 'file' ? await getFileText(file) : null;
143
+ if (requiresSuppressesMatch(rule, { line: addition.line, file: () => fileText })) {
144
+ continue;
145
+ }
146
+ }
93
147
  // Exempt matches inside inline Rust test modules for production-only Rust rules
94
148
  if (isProductionRustRule(rule)) {
95
149
  const spans = await getRustSpans(file);
@@ -1 +1 @@
1
- {"version":3,"file":"apply-rules-bounded.js","sourceRoot":"","sources":["../../src/regex-safety/apply-rules-bounded.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply-rules-bounded.js","sourceRoot":"","sources":["../../src/regex-safety/apply-rules-bounded.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { RegexValidation } from './compiler-schema.js';
2
+ /**
3
+ * Validate that a pattern string is a syntactically valid RegExp
4
+ * and is not vulnerable to ReDoS (catastrophic backtracking).
5
+ */
6
+ export declare function validateRegex(pattern: string): RegexValidation;
7
+ //# sourceMappingURL=regex-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-validation.d.ts","sourceRoot":"","sources":["../src/regex-validation.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAa9D"}
@@ -0,0 +1,32 @@
1
+ // ─── The safe-regex2 gate, as an import-graph LEAF ───────────────────────────
2
+ //
3
+ // `validateRegex` was defined in `compiler.ts` and is still re-exported from
4
+ // there, so every shipped consumer's import is unchanged. It lives here because
5
+ // `compiler.ts` imports `rule-engine.ts`, and the rule engine now needs this
6
+ // gate at dispatcher altitude (Prop 310 § Design 8's runtime `requires.pattern`
7
+ // check) — importing it back out of `compiler.ts` would close a cycle
8
+ // (`rule-engine` → `spine/record-runtime` → `compiler` → `rule-engine`).
9
+ //
10
+ // This module imports only `safe-regex2` and a type, so it can be pulled from
11
+ // anywhere. Moving the function rather than duplicating the check is the point:
12
+ // the compile gate and the runtime gate MUST be the same predicate, or a pattern
13
+ // the compiler refuses becomes one the runtime happily executes.
14
+ import safeRegex from 'safe-regex2';
15
+ /**
16
+ * Validate that a pattern string is a syntactically valid RegExp
17
+ * and is not vulnerable to ReDoS (catastrophic backtracking).
18
+ */
19
+ export function validateRegex(pattern) {
20
+ try {
21
+ new RegExp(pattern);
22
+ // totem-context: not a swallow — the failure is REPORTED as this function's return value (`{valid:false}`), which every caller checks and fails loud on. Converting the throw into a checked result is the whole contract; re-throwing would make the gate uncallable as a predicate. Byte-identical to the pre-existing `compiler.ts` implementation this moved from.
23
+ }
24
+ catch {
25
+ return { valid: false, reason: 'invalid syntax' };
26
+ }
27
+ if (!safeRegex(pattern)) {
28
+ return { valid: false, reason: 'ReDoS vulnerability detected' };
29
+ }
30
+ return { valid: true };
31
+ }
32
+ //# sourceMappingURL=regex-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-validation.js","sourceRoot":"","sources":["../src/regex-validation.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,6EAA6E;AAC7E,gFAAgF;AAChF,6EAA6E;AAC7E,gFAAgF;AAChF,sEAAsE;AACtE,yEAAyE;AACzE,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,iFAAiF;AACjF,iEAAiE;AAEjE,OAAO,SAAS,MAAM,aAAa,CAAC;AAIpC;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;QACpB,uWAAuW;IACzW,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
@@ -72,9 +72,19 @@ export declare function parseFailSoftAttestation(justification: string): FailSof
72
72
  * on trigger / suppress / failure events.
73
73
  * @param workingDirectory - Optional working directory for resolving files on disk
74
74
  * when parsing spans.
75
+ * @param readFileText - Optional SYNC reader for whole-file content, consulted
76
+ * only by a Prop 310 `requires: {scope: file}` check. Returns `null` when the
77
+ * file cannot be resolved; when omitted, the disk is read directly.
78
+ *
79
+ * SYNC, unlike the ast path's async `readStrategy`, because this function is
80
+ * synchronous and four shipped callers depend on that. The async staged reader
81
+ * is threaded instead through `applyRulesToAdditionsBounded`, which is the
82
+ * dispatcher `totem lint` actually uses for regex rules and is already async —
83
+ * so the staged guarantee lands where staged mode exists (falsification round,
84
+ * 2026-08-21).
75
85
  * @returns All regex-based violations found.
76
86
  */
77
- export declare function applyRulesToAdditions(ctx: RuleEngineContext, rules: CompiledRule[], additions: DiffAddition[], onRuleEvent?: RuleEventCallback, workingDirectory?: string): Violation[];
87
+ export declare function applyRulesToAdditions(ctx: RuleEngineContext, rules: CompiledRule[], additions: DiffAddition[], onRuleEvent?: RuleEventCallback, workingDirectory?: string, readFileText?: (filePath: string) => string | null): Violation[];
78
88
  /**
79
89
  * Apply AST-engine compiled rules against pre-extracted diff additions.
80
90
  * Handles both Tree-sitter S-expression ('ast') and ast-grep ('ast-grep') engines.
@@ -1 +1 @@
1
- {"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../src/rule-engine.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACV,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC;AAEzC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAkBhE;AAgCD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAiN1F;AAWD,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE;QAAE,sBAAsB,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5C;AA0CD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAeT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM,CAaR;AAiBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAK1F;AAwGD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,YAAY,EAAE,EACzB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,GACxB,SAAS,EAAE,CAwGb;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,YAAY,EAAE,EACzB,gBAAgB,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC9B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC1D,OAAO,CAAC,SAAS,EAAE,CAAC,CA2TtB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,SAAS,EAAE,CAUb"}
1
+ {"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../src/rule-engine.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACV,MAAM,sBAAsB,CAAC;AAe9B,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC;AAEzC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAkBhE;AAgCD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAiN1F;AAWD,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE;QAAE,sBAAsB,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5C;AA0CD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAeT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM,CAaR;AAiBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAK1F;AAwGD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,YAAY,EAAE,EACzB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GACjD,SAAS,EAAE,CAqKb;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,YAAY,EAAE,EACzB,gBAAgB,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC9B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC1D,OAAO,CAAC,SAAS,EAAE,CAAC,CAsWtB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,SAAS,EAAE,CAUb"}
@@ -5,6 +5,10 @@ import { matchAstGrepPatternsBatch } from './ast-grep-query.js';
5
5
  import { matchAstQueriesBatch } from './ast-query.js';
6
6
  import { extractAddedLines } from './diff-parser.js';
7
7
  import { TotemParseError } from './errors.js';
8
+ // Prop 310 slice 2 — the record-grammar runtime semantics (§ Design 7 two-array
9
+ // scope, § Design 8 `requires` two-pass). Every entry point is gated on
10
+ // `isRecordPathRule`, so the legacy corpus's matching is untouched.
11
+ import { assertNoAstGrepLineScope, assertNoTornRecordRules, assertRequiresPatternsSafe, isInsideRoot, requiresSuppressesMatch, ruleAppliesToFile, } from './spine/record-runtime.js';
8
12
  import { detectStaleManifest, staleManifestError } from './stale-manifest.js';
9
13
  import { fileMatchesGlobs, matchesGlob } from './sys/glob.js';
10
14
  export { fileMatchesGlobs, matchesGlob };
@@ -469,11 +473,27 @@ function resolveAstMatchSuppression(ctx, match, addition) {
469
473
  * on trigger / suppress / failure events.
470
474
  * @param workingDirectory - Optional working directory for resolving files on disk
471
475
  * when parsing spans.
476
+ * @param readFileText - Optional SYNC reader for whole-file content, consulted
477
+ * only by a Prop 310 `requires: {scope: file}` check. Returns `null` when the
478
+ * file cannot be resolved; when omitted, the disk is read directly.
479
+ *
480
+ * SYNC, unlike the ast path's async `readStrategy`, because this function is
481
+ * synchronous and four shipped callers depend on that. The async staged reader
482
+ * is threaded instead through `applyRulesToAdditionsBounded`, which is the
483
+ * dispatcher `totem lint` actually uses for regex rules and is already async —
484
+ * so the staged guarantee lands where staged mode exists (falsification round,
485
+ * 2026-08-21).
472
486
  * @returns All regex-based violations found.
473
487
  */
474
- export function applyRulesToAdditions(ctx, rules, additions, onRuleEvent, workingDirectory) {
488
+ export function applyRulesToAdditions(ctx, rules, additions, onRuleEvent, workingDirectory, readFileText) {
475
489
  if (additions.length === 0 || rules.length === 0)
476
490
  return [];
491
+ // Prop 310 § Design 12 — a rule that is neither classifiable as a record nor
492
+ // as legacy is a torn manifest; fail loud rather than drop its constructs.
493
+ // § Design 8 — and no `requires.pattern` is executed before it clears the same
494
+ // safe-regex2 gate the compile path applies.
495
+ assertNoTornRecordRules(rules);
496
+ assertRequiresPatternsSafe(rules);
477
497
  const violations = [];
478
498
  // Only process regex-engine rules — AST rules have pattern: '' which would match everything
479
499
  const regexRules = rules.filter((r) => r.engine === 'regex' || !r.engine);
@@ -494,6 +514,44 @@ export function applyRulesToAdditions(ctx, rules, additions, onRuleEvent, workin
494
514
  return [];
495
515
  }
496
516
  };
517
+ // Prop 310 § Design 8 — whole-file text for a `requires: {scope: file}` check.
518
+ // Memoized per invocation, and reached ONLY when a record-path rule with a
519
+ // file-scoped requirement has already matched its target: no legacy rule
520
+ // carries `requires`, so this adds zero IO to the shipped path.
521
+ //
522
+ // `readFileText` (when supplied) is what makes the check see the SAME bytes the
523
+ // rest of the lint is judging. Reading the worktree while the caller is judging
524
+ // the index is FAIL-OPEN in the direction that matters: a required context
525
+ // deleted in the staged edit but still present on disk would satisfy the
526
+ // requirement and silence a real staged violation.
527
+ const fileTextCache = new Map();
528
+ const getFileTextSync = (file, workDir) => {
529
+ const cached = fileTextCache.get(file);
530
+ if (cached !== undefined || fileTextCache.has(file))
531
+ return cached ?? null;
532
+ let text = null;
533
+ if (readFileText) {
534
+ // DELIBERATELY unwrapped: the caller's reader owns its own failure
535
+ // contract (a staged reader throws so an unreadable index entry surfaces
536
+ // rather than degrading quietly). A reader that means "absent" returns
537
+ // `null`, which is handled below.
538
+ text = readFileText(file);
539
+ }
540
+ else if (isInsideRoot(workDir, file)) {
541
+ try {
542
+ text = fs.readFileSync(path.resolve(workDir, file), 'utf-8');
543
+ // totem-context: read failure yields no required-context evidence → the requirement is UNMET → the rule still FIRES; like the span exemption above, this fails toward flagging, never toward suppression.
544
+ }
545
+ catch {
546
+ text = null;
547
+ }
548
+ }
549
+ // An out-of-root path falls through with `text === null` — treated as
550
+ // unreadable, so the requirement is unmet and the rule FIRES. Same direction
551
+ // as a read failure; see `isInsideRoot`.
552
+ fileTextCache.set(file, text);
553
+ return text;
554
+ };
497
555
  for (const rule of regexRules) {
498
556
  let re;
499
557
  try {
@@ -511,10 +569,25 @@ export function applyRulesToAdditions(ctx, rules, additions, onRuleEvent, workin
511
569
  throw new TotemParseError(`Rule ${rule.lessonHash} has an invalid regex pattern and cannot be evaluated.`, `Re-run 'totem lesson compile' to regenerate the rule, or archive it via 'totem doctor --pr' if the source lesson cannot produce a valid pattern. Pattern: ${JSON.stringify(rule.pattern)}`, err);
512
570
  }
513
571
  for (const addition of additions) {
514
- // Skip if rule has fileGlobs and this file doesn't match
515
- if (rule.fileGlobs && rule.fileGlobs.length > 0) {
516
- if (!fileMatchesGlobs(addition.file, rule.fileGlobs))
517
- continue;
572
+ // Scope: Prop 310 § Design 7's two-array rule for record-path rules
573
+ // (`positiveMatch && !excludeMatch` under the normative dialect), the
574
+ // shipped `fileMatchesGlobs` predicate — including its unscoped-rule
575
+ // include-everything behaviour — for every legacy rule.
576
+ if (!ruleAppliesToFile(rule, addition.file))
577
+ continue;
578
+ // Prop 310 § Design 8 — pass two. The requirement is part of the MATCH
579
+ // PREDICATE (the rule fires iff the target matched AND the required
580
+ // context is absent), so it is evaluated BEFORE suppression and before any
581
+ // telemetry: a locus whose required context is PRESENT is not a match at
582
+ // all, and must emit neither a violation nor a `suppress` event. Guarded on
583
+ // `rule.requires` so no legacy rule pays the second `re.test`.
584
+ if (rule.requires !== undefined &&
585
+ re.test(addition.line) &&
586
+ requiresSuppressesMatch(rule, {
587
+ line: addition.line,
588
+ file: () => getFileTextSync(addition.file, workingDirectory || process.cwd()),
589
+ })) {
590
+ continue;
518
591
  }
519
592
  // Skip if suppressed via inline directive
520
593
  if (isSuppressed(ctx, addition.line, addition.precedingLine)) {
@@ -588,6 +661,12 @@ export function applyRulesToAdditions(ctx, rules, additions, onRuleEvent, workin
588
661
  * @returns All AST-based violations found.
589
662
  */
590
663
  export async function applyAstRulesToAdditions(ctx, rules, additions, workingDirectory, onRuleEvent, onWarn, readStrategy) {
664
+ // Prop 310 § Design 12 / § Design 8 — torn-manifest guard, the safe-regex2
665
+ // gate, and the ast-grep span-vs-line backstop, all at the same altitude as the
666
+ // tree-sitter `requires` backstop below.
667
+ assertNoTornRecordRules(rules);
668
+ assertRequiresPatternsSafe(rules);
669
+ assertNoAstGrepLineScope(rules);
591
670
  const treeSitterRules = rules.filter((r) => r.engine === 'ast' && r.astQuery);
592
671
  // Widen to include compound rules (mmnto/totem#1408). A rule is runnable
593
672
  // when EITHER `astGrepPattern` (string) or `astGrepYamlRule` (NapiConfig
@@ -595,6 +674,23 @@ export async function applyAstRulesToAdditions(ctx, rules, additions, workingDir
595
674
  // CompiledRuleSchema guarantees these do not coexist, so the per-rule
596
675
  // dispatch below can safely use an if/else on presence alone.
597
676
  const astGrepRules = rules.filter((r) => r.engine === 'ast-grep' && (r.astGrepPattern || r.astGrepYamlRule));
677
+ // Prop 310 § Design 8 / § Design 12 — `requires` has no evaluator on the
678
+ // tree-sitter branch, and leaving it unevaluated would be exactly the
679
+ // accept-then-silently-drop class § Design 12 bans. UNREACHABLE from the record
680
+ // path by construction (the V1 authoring enum is `ast-grep | regex`; `ast` is
681
+ // dropped per § Design 6/R16) and unreachable from the legacy corpus (no
682
+ // compiled rule carries `requires` — pinned by the byte-identity guard), so
683
+ // this is a fail-loud backstop against a hand-edited manifest, never a path a
684
+ // well-formed pipeline can take.
685
+ // Searched over ALL rules, not over `treeSitterRules` — that list is already
686
+ // filtered on `astQuery` being present, so a hand-edited `{engine: 'ast',
687
+ // requires, no astQuery}` rule would slip past the throw and have its
688
+ // `requires` silently unevaluated, which is precisely the hole this backstop
689
+ // exists to close (falsification round, 2026-08-21).
690
+ const treeSitterWithRequires = rules.find((r) => r.engine === 'ast' && r.requires !== undefined);
691
+ if (treeSitterWithRequires) {
692
+ throw new TotemParseError(`Rule ${treeSitterWithRequires.lessonHash} (${treeSitterWithRequires.lessonHeading}) carries a \`requires\` block on the tree-sitter ('ast') engine, which has no two-pass evaluator.`, "Prop 310 § Design 6 drops 'ast' from the V1 authoring surface, so no rule record can produce this combination — the manifest was hand-edited or written by a bypassed producer. Re-compile the rule, or move it to the 'regex' or 'ast-grep' engine where `requires` is evaluated.");
693
+ }
598
694
  if ((treeSitterRules.length === 0 && astGrepRules.length === 0) || additions.length === 0) {
599
695
  return [];
600
696
  }
@@ -627,7 +723,13 @@ export async function applyAstRulesToAdditions(ctx, rules, additions, workingDir
627
723
  // mechanism for adding language support.
628
724
  const ext = path.extname(file);
629
725
  if (!extensionToLanguage(ext)) {
630
- const ruleExpectingThisFile = allAstRules.find((r) => r.fileGlobs && r.fileGlobs.length > 0 && fileMatchesGlobs(file, r.fileGlobs));
726
+ // The `fileGlobs.length > 0` prefix is load-bearing and NOT folded into
727
+ // `ruleAppliesToFile`: an UNSCOPED rule must not trigger this fail-loud
728
+ // guard (no rule cares about the file ⇒ a silent skip is correct), while
729
+ // `ruleAppliesToFile` answers "does this rule apply", for which an unscoped
730
+ // rule applies everywhere. Record-path rules always carry ≥1 glob (min-1 at
731
+ // parse), so the prefix never excludes one.
732
+ const ruleExpectingThisFile = allAstRules.find((r) => r.fileGlobs && r.fileGlobs.length > 0 && ruleAppliesToFile(r, file));
631
733
  if (ruleExpectingThisFile) {
632
734
  // mmnto-ai/totem#1811 (ADR-101): before re-throwing the raw
633
735
  // Tree-sitter language-miss error, check whether the user is
@@ -665,12 +767,7 @@ export async function applyAstRulesToAdditions(ctx, rules, additions, workingDir
665
767
  continue;
666
768
  // ── Tree-sitter S-expression rules ────────────────
667
769
  if (treeSitterRules.length > 0) {
668
- const applicableTreeSitter = treeSitterRules.filter((rule) => {
669
- if (rule.fileGlobs && rule.fileGlobs.length > 0) {
670
- return fileMatchesGlobs(file, rule.fileGlobs);
671
- }
672
- return true;
673
- });
770
+ const applicableTreeSitter = treeSitterRules.filter((rule) => ruleAppliesToFile(rule, file));
674
771
  if (applicableTreeSitter.length > 0) {
675
772
  // Path containment check — prevent traversal outside the project.
676
773
  // Uses path.relative() instead of startsWith() to avoid sibling-directory bypass
@@ -753,12 +850,7 @@ export async function applyAstRulesToAdditions(ctx, rules, additions, workingDir
753
850
  }
754
851
  // ── ast-grep structural pattern rules ─────────────
755
852
  if (astGrepRules.length > 0) {
756
- const applicableAstGrep = astGrepRules.filter((rule) => {
757
- if (rule.fileGlobs && rule.fileGlobs.length > 0) {
758
- return fileMatchesGlobs(file, rule.fileGlobs);
759
- }
760
- return true;
761
- });
853
+ const applicableAstGrep = astGrepRules.filter((rule) => ruleAppliesToFile(rule, file));
762
854
  if (applicableAstGrep.length > 0) {
763
855
  // Read file content once for all ast-grep rules on this file
764
856
  let content = null;
@@ -785,6 +877,9 @@ export async function applyAstRulesToAdditions(ctx, rules, additions, workingDir
785
877
  // Fall through — content stays null for standard file read failures
786
878
  }
787
879
  if (content) {
880
+ // Bound once so the § Design 8 `file`-scope resolver below closes over a
881
+ // narrowed `string` rather than the outer `string | null` binding.
882
+ const fileText = content;
788
883
  // Batch: parse file once, run all patterns.
789
884
  // Each rule carries either astGrepPattern (string) or astGrepYamlRule
790
885
  // (NapiConfig object); the batch helper polymorphically dispatches on
@@ -815,6 +910,18 @@ export async function applyAstRulesToAdditions(ctx, rules, additions, workingDir
815
910
  const rule = applicableAstGrep[i];
816
911
  const matches = batchResults[i] ?? [];
817
912
  for (const match of matches) {
913
+ // Prop 310 § Design 8 — pass two, ahead of every other per-match
914
+ // check for the same reason as the regex path: a locus whose
915
+ // required context is PRESENT is not a match, so it emits neither a
916
+ // violation nor a `suppress` event. The requirement is a REGEX
917
+ // evaluated textually even here — § Design 8 makes it independent of
918
+ // the target engine ("a context check, not a second matcher").
919
+ if (requiresSuppressesMatch(rule, {
920
+ line: match.lineText,
921
+ file: () => fileText,
922
+ })) {
923
+ continue;
924
+ }
818
925
  // Exempt matches inside inline Rust test modules (#2397).
819
926
  if (isProductionRustRule(rule) &&
820
927
  astGrepRustSpans.some((s) => match.lineNumber >= s.startLine && match.lineNumber <= s.endLine)) {