gina 0.6.6 → 0.6.7

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 (580) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +26 -23
  3. package/ROADMAP.md +2 -0
  4. package/bin/cli +1 -0
  5. package/framework/v0.6.7/VERSION +1 -0
  6. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -0
  7. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  8. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  9. package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +27 -0
  10. package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +93 -8
  11. package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.js +443 -28
  12. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js +647 -0
  13. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  14. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  15. package/framework/{v0.6.6 → v0.6.7}/core/config.js +22 -0
  16. package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/index.js +16 -4
  17. package/framework/{v0.6.6 → v0.6.7}/core/connectors/duckdb/index.js +5 -2
  18. package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/index.js +8 -3
  19. package/framework/{v0.6.6 → v0.6.7}/core/connectors/mysql/index.js +5 -2
  20. package/framework/v0.6.7/core/connectors/param-redact.js +177 -0
  21. package/framework/{v0.6.6 → v0.6.7}/core/connectors/postgresql/index.js +5 -2
  22. package/framework/{v0.6.6 → v0.6.7}/core/connectors/scylladb/index.js +5 -2
  23. package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/index.js +5 -2
  24. package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.js +190 -23
  25. package/framework/{v0.6.6 → v0.6.7}/core/gna.js +186 -0
  26. package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/src/form-validator.js +91 -7
  27. package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/src/main.js +352 -21
  28. package/framework/{v0.6.6 → v0.6.7}/core/server.js +190 -1
  29. package/framework/{v0.6.6 → v0.6.7}/core/template/conf/settings.json +7 -8
  30. package/framework/v0.6.7/lib/cmd/storage/arguments.json +6 -0
  31. package/framework/v0.6.7/lib/cmd/storage/gc.js +418 -0
  32. package/framework/v0.6.7/lib/cmd/storage/help.txt +63 -0
  33. package/framework/v0.6.7/lib/cmd/storage/stats.js +396 -0
  34. package/framework/v0.6.7/lib/cmd/storage/verify.js +413 -0
  35. package/framework/{v0.6.6 → v0.6.7}/lib/index.js +14 -0
  36. package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/main.js +13 -6
  37. package/framework/v0.6.7/lib/storage/package.json +7 -0
  38. package/framework/v0.6.7/lib/storage/src/local-cas.js +1186 -0
  39. package/framework/v0.6.7/lib/storage/src/local.js +599 -0
  40. package/framework/v0.6.7/lib/storage/src/main.js +890 -0
  41. package/framework/v0.6.7/lib/storage/src/meta-store.js +506 -0
  42. package/framework/v0.6.7/lib/storage/src/util.js +336 -0
  43. package/framework/v0.6.7/lib/storage-store.js +110 -0
  44. package/framework/{v0.6.6 → v0.6.7}/package.json +1 -1
  45. package/gna.js +4 -4
  46. package/llms.txt +10 -9
  47. package/package.json +3 -3
  48. package/schema/settings.json +142 -2
  49. package/types/index.d.ts +7 -0
  50. package/framework/v0.6.6/VERSION +0 -1
  51. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -1
  52. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  53. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  54. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -643
  55. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  56. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  57. /package/framework/{v0.6.6 → v0.6.7}/AUTHORS +0 -0
  58. /package/framework/{v0.6.6 → v0.6.7}/LICENSE +0 -0
  59. /package/framework/{v0.6.6 → v0.6.7}/core/asset/html/nolayout.html +0 -0
  60. /package/framework/{v0.6.6 → v0.6.7}/core/asset/html/static.html +0 -0
  61. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/android-chrome-192x192.png +0 -0
  62. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/android-chrome-512x512.png +0 -0
  63. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/apple-touch-icon.png +0 -0
  64. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/favicon-16x16.png +0 -0
  65. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/favicon-32x32.png +0 -0
  66. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/favicon.ico +0 -0
  67. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/README.md +0 -0
  68. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  69. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  70. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  71. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  72. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  73. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  74. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  75. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  76. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  77. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  78. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  79. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  80. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/ai/index.js +0 -0
  81. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/ai/lib/connector.js +0 -0
  82. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/connector.js +0 -0
  83. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  84. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  85. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/n1ql.js +0 -0
  86. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/session-store.js +0 -0
  87. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  88. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  89. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/duckdb/lib/connector.js +0 -0
  90. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/connector.js +0 -0
  91. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/job-store.js +0 -0
  92. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  93. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/session-store.js +0 -0
  94. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mysql/lib/connector.js +0 -0
  95. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/postgresql/lib/connector.js +0 -0
  96. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/index.js +0 -0
  97. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/connector.js +0 -0
  98. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/job-store.js +0 -0
  99. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/render-cache-store.js +0 -0
  100. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/session-store.js +0 -0
  101. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/scylladb/lib/connector.js +0 -0
  102. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/scylladb/lib/session-store.js +0 -0
  103. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sql-parser.js +0 -0
  104. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/lib/connector.js +0 -0
  105. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/lib/job-store.js +0 -0
  106. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/lib/session-store.js +0 -0
  107. /package/framework/{v0.6.6 → v0.6.7}/core/content.encoding +0 -0
  108. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.framework.js +0 -0
  109. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-json.js +0 -0
  110. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-nunjucks-async.js +0 -0
  111. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-nunjucks.js +0 -0
  112. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-stream.js +0 -0
  113. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-swig-async.js +0 -0
  114. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-swig.js +0 -0
  115. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-v1.js +0 -0
  116. /package/framework/{v0.6.6 → v0.6.7}/core/controller/index.js +0 -0
  117. /package/framework/{v0.6.6 → v0.6.7}/core/controller/inspector-window-emit.js +0 -0
  118. /package/framework/{v0.6.6 → v0.6.7}/core/controller/release-banner.js +0 -0
  119. /package/framework/{v0.6.6 → v0.6.7}/core/dev/index.js +0 -0
  120. /package/framework/{v0.6.6 → v0.6.7}/core/dev/lib/class.js +0 -0
  121. /package/framework/{v0.6.6 → v0.6.7}/core/dev/lib/factory.js +0 -0
  122. /package/framework/{v0.6.6 → v0.6.7}/core/dev/lib/tools.js +0 -0
  123. /package/framework/{v0.6.6 → v0.6.7}/core/locales/README.md +0 -0
  124. /package/framework/{v0.6.6 → v0.6.7}/core/locales/currency.json +0 -0
  125. /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/language/en.json +0 -0
  126. /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/language/fr.json +0 -0
  127. /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/region/en.json +0 -0
  128. /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/region/fr.json +0 -0
  129. /package/framework/{v0.6.6 → v0.6.7}/core/locales/index.js +0 -0
  130. /package/framework/{v0.6.6 → v0.6.7}/core/mime.types +0 -0
  131. /package/framework/{v0.6.6 → v0.6.7}/core/model/entity.js +0 -0
  132. /package/framework/{v0.6.6 → v0.6.7}/core/model/index.js +0 -0
  133. /package/framework/{v0.6.6 → v0.6.7}/core/model/template/entityFactory.js +0 -0
  134. /package/framework/{v0.6.6 → v0.6.7}/core/model/template/index.js +0 -0
  135. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/README.md +0 -0
  136. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/index.js +0 -0
  137. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/csrf/README.md +0 -0
  138. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/csrf/package.json +0 -0
  139. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/csrf/src/main.js +0 -0
  140. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/README.md +0 -0
  141. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coep/README.md +0 -0
  142. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coep/package.json +0 -0
  143. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  144. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coop/README.md +0 -0
  145. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coop/package.json +0 -0
  146. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  147. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/corp/README.md +0 -0
  148. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/corp/package.json +0 -0
  149. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  150. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/csp/README.md +0 -0
  151. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/csp/package.json +0 -0
  152. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  153. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  154. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  155. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  156. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  157. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  158. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  159. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  160. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  161. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  162. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/package.json +0 -0
  163. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  164. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  165. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  166. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/src/main.js +0 -0
  167. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  168. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  169. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  170. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  171. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  172. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  173. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  174. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  175. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  176. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  177. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  178. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  179. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  180. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  181. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  182. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  183. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  184. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  185. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/session/README.md +0 -0
  186. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/session/package.json +0 -0
  187. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/session/src/main.js +0 -0
  188. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/README.md +0 -0
  189. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/build.json +0 -0
  190. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/package.json +0 -0
  191. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/src/main.js +0 -0
  192. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/README.md +0 -0
  193. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/build.json +0 -0
  194. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/package.json +0 -0
  195. /package/framework/{v0.6.6 → v0.6.7}/core/router.js +0 -0
  196. /package/framework/{v0.6.6 → v0.6.7}/core/server.express.js +0 -0
  197. /package/framework/{v0.6.6 → v0.6.7}/core/server.isaac.js +0 -0
  198. /package/framework/{v0.6.6 → v0.6.7}/core/status.codes +0 -0
  199. /package/framework/{v0.6.6 → v0.6.7}/core/template/_gitignore +0 -0
  200. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/app.json +0 -0
  201. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  202. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/routing.json +0 -0
  203. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/settings.json +0 -0
  204. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  205. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/templates.json +0 -0
  206. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  207. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  208. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  209. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  210. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/index.js +0 -0
  211. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/locales/en.json +0 -0
  212. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  213. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  214. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  215. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  216. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  217. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  218. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  219. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  220. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/readme.md +0 -0
  221. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/sw.js +0 -0
  222. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  223. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  224. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  225. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  226. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  227. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  228. /package/framework/{v0.6.6 → v0.6.7}/core/template/command/gina.bat.tpl +0 -0
  229. /package/framework/{v0.6.6 → v0.6.7}/core/template/command/gina.tpl +0 -0
  230. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/env.json +0 -0
  231. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/manifest.json +0 -0
  232. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/package.json +0 -0
  233. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/statics.json +0 -0
  234. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/templates.json +0 -0
  235. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/client/json/401.json +0 -0
  236. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/client/json/403.json +0 -0
  237. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/client/json/404.json +0 -0
  238. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/server/html/50x.html +0 -0
  239. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/server/json/500.json +0 -0
  240. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/server/json/503.json +0 -0
  241. /package/framework/{v0.6.6 → v0.6.7}/core/template/extensions/logger/config.json +0 -0
  242. /package/framework/{v0.6.6 → v0.6.7}/helpers/console.js +0 -0
  243. /package/framework/{v0.6.6 → v0.6.7}/helpers/context.js +0 -0
  244. /package/framework/{v0.6.6 → v0.6.7}/helpers/data/LICENSE +0 -0
  245. /package/framework/{v0.6.6 → v0.6.7}/helpers/data/README.md +0 -0
  246. /package/framework/{v0.6.6 → v0.6.7}/helpers/data/package.json +0 -0
  247. /package/framework/{v0.6.6 → v0.6.7}/helpers/data/src/main.js +0 -0
  248. /package/framework/{v0.6.6 → v0.6.7}/helpers/dateFormat.js +0 -0
  249. /package/framework/{v0.6.6 → v0.6.7}/helpers/index.js +0 -0
  250. /package/framework/{v0.6.6 → v0.6.7}/helpers/json/LICENSE +0 -0
  251. /package/framework/{v0.6.6 → v0.6.7}/helpers/json/README.md +0 -0
  252. /package/framework/{v0.6.6 → v0.6.7}/helpers/json/package.json +0 -0
  253. /package/framework/{v0.6.6 → v0.6.7}/helpers/json/src/main.js +0 -0
  254. /package/framework/{v0.6.6 → v0.6.7}/helpers/path.js +0 -0
  255. /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/README.md +0 -0
  256. /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/package.json +0 -0
  257. /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/src/api-error.js +0 -0
  258. /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/src/main.js +0 -0
  259. /package/framework/{v0.6.6 → v0.6.7}/helpers/prototypes.js +0 -0
  260. /package/framework/{v0.6.6 → v0.6.7}/helpers/task.js +0 -0
  261. /package/framework/{v0.6.6 → v0.6.7}/helpers/text.js +0 -0
  262. /package/framework/{v0.6.6 → v0.6.7}/lib/admin/package.json +0 -0
  263. /package/framework/{v0.6.6 → v0.6.7}/lib/admin/src/main.js +0 -0
  264. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/README.md +0 -0
  265. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/build.json +0 -0
  266. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/package.json +0 -0
  267. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/src/dep/jszip.min.js +0 -0
  268. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/src/main.js +0 -0
  269. /package/framework/{v0.6.6 → v0.6.7}/lib/async/package.json +0 -0
  270. /package/framework/{v0.6.6 → v0.6.7}/lib/async/src/main.js +0 -0
  271. /package/framework/{v0.6.6 → v0.6.7}/lib/audit/package.json +0 -0
  272. /package/framework/{v0.6.6 → v0.6.7}/lib/audit/src/main.js +0 -0
  273. /package/framework/{v0.6.6 → v0.6.7}/lib/audit-store.js +0 -0
  274. /package/framework/{v0.6.6 → v0.6.7}/lib/authn/package.json +0 -0
  275. /package/framework/{v0.6.6 → v0.6.7}/lib/authn/src/lockout.js +0 -0
  276. /package/framework/{v0.6.6 → v0.6.7}/lib/authn/src/main.js +0 -0
  277. /package/framework/{v0.6.6 → v0.6.7}/lib/authn/src/totp.js +0 -0
  278. /package/framework/{v0.6.6 → v0.6.7}/lib/authz-gate/package.json +0 -0
  279. /package/framework/{v0.6.6 → v0.6.7}/lib/authz-gate/src/main.js +0 -0
  280. /package/framework/{v0.6.6 → v0.6.7}/lib/cache/README.md +0 -0
  281. /package/framework/{v0.6.6 → v0.6.7}/lib/cache/build.json +0 -0
  282. /package/framework/{v0.6.6 → v0.6.7}/lib/cache/package.json +0 -0
  283. /package/framework/{v0.6.6 → v0.6.7}/lib/cache/src/main.js +0 -0
  284. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/aliases.json +0 -0
  285. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/audit/arguments.json +0 -0
  286. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/audit/help.txt +0 -0
  287. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/audit/verify.js +0 -0
  288. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/add.js +0 -0
  289. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/arguments.json +0 -0
  290. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/build.js +0 -0
  291. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/copy.js +0 -0
  292. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/cp.js +0 -0
  293. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/help.js +0 -0
  294. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/help.txt +0 -0
  295. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  296. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/list.js +0 -0
  297. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/man.js +0 -0
  298. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/mcp-start.js +0 -0
  299. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/mcp.js +0 -0
  300. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/oas.js +0 -0
  301. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/openapi.js +0 -0
  302. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/remove.js +0 -0
  303. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/rename.js +0 -0
  304. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/restart.js +0 -0
  305. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/rm.js +0 -0
  306. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/start.js +0 -0
  307. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/status.js +0 -0
  308. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/stop.js +0 -0
  309. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/types.js +0 -0
  310. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/arguments.json +0 -0
  311. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/clear.js +0 -0
  312. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/help.txt +0 -0
  313. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/stats.js +0 -0
  314. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/add.js +0 -0
  315. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/arguments.json +0 -0
  316. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/help.js +0 -0
  317. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/help.txt +0 -0
  318. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/infer.js +0 -0
  319. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/list.js +0 -0
  320. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/migrate.js +0 -0
  321. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/models.js +0 -0
  322. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/remove.js +0 -0
  323. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/rm.js +0 -0
  324. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/test.js +0 -0
  325. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/arguments.json +0 -0
  326. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/help.js +0 -0
  327. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/help.txt +0 -0
  328. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/man.js +0 -0
  329. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/ps.js +0 -0
  330. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/stop.js +0 -0
  331. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/add.js +0 -0
  332. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/arguments.json +0 -0
  333. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/help.txt +0 -0
  334. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/args.js +0 -0
  335. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/namespace.js +0 -0
  336. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  337. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/reference-scan.js +0 -0
  338. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/scaffold.js +0 -0
  339. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/remove.js +0 -0
  340. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/rename.js +0 -0
  341. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/rm.js +0 -0
  342. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/add.js +0 -0
  343. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/get.js +0 -0
  344. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/help.js +0 -0
  345. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/help.txt +0 -0
  346. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/link-dev.js +0 -0
  347. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/list.js +0 -0
  348. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/remove.js +0 -0
  349. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/rm.js +0 -0
  350. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/set.js +0 -0
  351. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/unset.js +0 -0
  352. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/use.js +0 -0
  353. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/add.js +0 -0
  354. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/arguments.json +0 -0
  355. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/build.js +0 -0
  356. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/dot.js +0 -0
  357. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/get.js +0 -0
  358. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/help.js +0 -0
  359. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/help.txt +0 -0
  360. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/init.js +0 -0
  361. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/link-node-modules.js +0 -0
  362. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/link.js +0 -0
  363. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/list.js +0 -0
  364. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/man.js +0 -0
  365. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/msg.json +0 -0
  366. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/open.js +0 -0
  367. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/remove.js +0 -0
  368. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/reset.js +0 -0
  369. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/restart.js +0 -0
  370. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/set.js +0 -0
  371. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/start.js +0 -0
  372. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/status.js +0 -0
  373. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/stop.js +0 -0
  374. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/tail.js +0 -0
  375. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/update.js +0 -0
  376. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/version.js +0 -0
  377. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/gina-dev.1.md +0 -0
  378. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/gina-framework.1.md +0 -0
  379. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/gina.1.md +0 -0
  380. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/helper.js +0 -0
  381. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/add.js +0 -0
  382. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/arguments.json +0 -0
  383. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/export.js +0 -0
  384. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/help.js +0 -0
  385. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/help.txt +0 -0
  386. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/import.js +0 -0
  387. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/scan.js +0 -0
  388. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/_host.js +0 -0
  389. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/arguments.json +0 -0
  390. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/build.js +0 -0
  391. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/help.js +0 -0
  392. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/help.txt +0 -0
  393. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/list.js +0 -0
  394. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/man.js +0 -0
  395. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/rm.js +0 -0
  396. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/run.js +0 -0
  397. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/index.js +0 -0
  398. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/inspector/help.js +0 -0
  399. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/inspector/help.txt +0 -0
  400. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/inspector/open.js +0 -0
  401. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/man-render.js +0 -0
  402. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/arguments.json +0 -0
  403. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/help.js +0 -0
  404. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/help.txt +0 -0
  405. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/kill.js +0 -0
  406. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/list.js +0 -0
  407. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/msg.json +0 -0
  408. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/help.js +0 -0
  409. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/help.txt +0 -0
  410. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/inc/scan.js +0 -0
  411. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/list.js +0 -0
  412. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/reset.js +0 -0
  413. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/set.js +0 -0
  414. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/add.js +0 -0
  415. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/arguments.json +0 -0
  416. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/backup.js +0 -0
  417. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/build.js +0 -0
  418. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/help.js +0 -0
  419. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/help.txt +0 -0
  420. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/import.js +0 -0
  421. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/list.js +0 -0
  422. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/man.js +0 -0
  423. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/move.js +0 -0
  424. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/remove.js +0 -0
  425. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/rename.js +0 -0
  426. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/restart.js +0 -0
  427. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/restore.js +0 -0
  428. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/rm.js +0 -0
  429. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/start.js +0 -0
  430. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/status.js +0 -0
  431. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/stop.js +0 -0
  432. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/arguments.json +0 -0
  433. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/help.js +0 -0
  434. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/help.txt +0 -0
  435. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/list.js +0 -0
  436. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/remove.js +0 -0
  437. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/set.js +0 -0
  438. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/add.js +0 -0
  439. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/help.js +0 -0
  440. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/help.txt +0 -0
  441. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/link-local.js +0 -0
  442. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/link-production.js +0 -0
  443. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/list.js +0 -0
  444. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/remove.js +0 -0
  445. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/rm.js +0 -0
  446. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/use.js +0 -0
  447. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/arguments.json +0 -0
  448. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/check.js +0 -0
  449. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/help.js +0 -0
  450. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/help.txt +0 -0
  451. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/scan.js +0 -0
  452. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/help.js +0 -0
  453. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/help.txt +0 -0
  454. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/list.js +0 -0
  455. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/man.js +0 -0
  456. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/start.js +0 -0
  457. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/view/add.js +0 -0
  458. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd-status-format/package.json +0 -0
  459. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd-status-format/src/main.js +0 -0
  460. /package/framework/{v0.6.6 → v0.6.7}/lib/collection/README.md +0 -0
  461. /package/framework/{v0.6.6 → v0.6.7}/lib/collection/build.json +0 -0
  462. /package/framework/{v0.6.6 → v0.6.7}/lib/collection/package.json +0 -0
  463. /package/framework/{v0.6.6 → v0.6.7}/lib/collection/src/main.js +0 -0
  464. /package/framework/{v0.6.6 → v0.6.7}/lib/config.js +0 -0
  465. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-config/package.json +0 -0
  466. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-config/src/main.js +0 -0
  467. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-error/package.json +0 -0
  468. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-error/src/main.js +0 -0
  469. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-registry/package.json +0 -0
  470. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-registry/src/main.js +0 -0
  471. /package/framework/{v0.6.6 → v0.6.7}/lib/cron/README.md +0 -0
  472. /package/framework/{v0.6.6 → v0.6.7}/lib/cron/package.json +0 -0
  473. /package/framework/{v0.6.6 → v0.6.7}/lib/cron/src/main.js +0 -0
  474. /package/framework/{v0.6.6 → v0.6.7}/lib/domain/LICENSE +0 -0
  475. /package/framework/{v0.6.6 → v0.6.7}/lib/domain/README.md +0 -0
  476. /package/framework/{v0.6.6 → v0.6.7}/lib/domain/package.json +0 -0
  477. /package/framework/{v0.6.6 → v0.6.7}/lib/domain/src/main.js +0 -0
  478. /package/framework/{v0.6.6 → v0.6.7}/lib/dto/package.json +0 -0
  479. /package/framework/{v0.6.6 → v0.6.7}/lib/dto/src/main.js +0 -0
  480. /package/framework/{v0.6.6 → v0.6.7}/lib/dto-pipe/package.json +0 -0
  481. /package/framework/{v0.6.6 → v0.6.7}/lib/dto-pipe/src/main.js +0 -0
  482. /package/framework/{v0.6.6 → v0.6.7}/lib/dto-types/package.json +0 -0
  483. /package/framework/{v0.6.6 → v0.6.7}/lib/dto-types/src/main.js +0 -0
  484. /package/framework/{v0.6.6 → v0.6.7}/lib/generator/index.js +0 -0
  485. /package/framework/{v0.6.6 → v0.6.7}/lib/i18n/package.json +0 -0
  486. /package/framework/{v0.6.6 → v0.6.7}/lib/i18n/src/main.js +0 -0
  487. /package/framework/{v0.6.6 → v0.6.7}/lib/image-build/package.json +0 -0
  488. /package/framework/{v0.6.6 → v0.6.7}/lib/image-build/src/main.js +0 -0
  489. /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/LICENSE +0 -0
  490. /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/README.md +0 -0
  491. /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/package.json +0 -0
  492. /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/src/main.js +0 -0
  493. /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-events/package.json +0 -0
  494. /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-events/src/main.js +0 -0
  495. /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-redact/package.json +0 -0
  496. /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-redact/src/main.js +0 -0
  497. /package/framework/{v0.6.6 → v0.6.7}/lib/instrument/package.json +0 -0
  498. /package/framework/{v0.6.6 → v0.6.7}/lib/instrument/src/main.js +0 -0
  499. /package/framework/{v0.6.6 → v0.6.7}/lib/job/package.json +0 -0
  500. /package/framework/{v0.6.6 → v0.6.7}/lib/job/src/main.js +0 -0
  501. /package/framework/{v0.6.6 → v0.6.7}/lib/job-store.js +0 -0
  502. /package/framework/{v0.6.6 → v0.6.7}/lib/json-config-header/package.json +0 -0
  503. /package/framework/{v0.6.6 → v0.6.7}/lib/json-config-header/src/main.js +0 -0
  504. /package/framework/{v0.6.6 → v0.6.7}/lib/loading-state/package.json +0 -0
  505. /package/framework/{v0.6.6 → v0.6.7}/lib/loading-state/src/main.js +0 -0
  506. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/README.md +0 -0
  507. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/package.json +0 -0
  508. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/default/index.js +0 -0
  509. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/file/index.js +0 -0
  510. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  511. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  512. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/mq/index.js +0 -0
  513. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/mq/listener.js +0 -0
  514. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/mq/speaker.js +0 -0
  515. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/helper.js +0 -0
  516. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/main.js +0 -0
  517. /package/framework/{v0.6.6 → v0.6.7}/lib/math/index.js +0 -0
  518. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-dispatch/package.json +0 -0
  519. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-dispatch/src/main.js +0 -0
  520. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-http/package.json +0 -0
  521. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-http/src/main.js +0 -0
  522. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-server/package.json +0 -0
  523. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-server/src/main.js +0 -0
  524. /package/framework/{v0.6.6 → v0.6.7}/lib/merge/README.md +0 -0
  525. /package/framework/{v0.6.6 → v0.6.7}/lib/merge/package.json +0 -0
  526. /package/framework/{v0.6.6 → v0.6.7}/lib/merge/src/main.js +0 -0
  527. /package/framework/{v0.6.6 → v0.6.7}/lib/metrics/package.json +0 -0
  528. /package/framework/{v0.6.6 → v0.6.7}/lib/metrics/src/main.js +0 -0
  529. /package/framework/{v0.6.6 → v0.6.7}/lib/model.js +0 -0
  530. /package/framework/{v0.6.6 → v0.6.7}/lib/net-locality/package.json +0 -0
  531. /package/framework/{v0.6.6 → v0.6.7}/lib/net-locality/src/main.js +0 -0
  532. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-filters/README.md +0 -0
  533. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-filters/package.json +0 -0
  534. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-filters/src/main.js +0 -0
  535. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-resolver/package.json +0 -0
  536. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-resolver/src/main.js +0 -0
  537. /package/framework/{v0.6.6 → v0.6.7}/lib/proc.js +0 -0
  538. /package/framework/{v0.6.6 → v0.6.7}/lib/release-watch/package.json +0 -0
  539. /package/framework/{v0.6.6 → v0.6.7}/lib/release-watch/src/main.js +0 -0
  540. /package/framework/{v0.6.6 → v0.6.7}/lib/render-cache/package.json +0 -0
  541. /package/framework/{v0.6.6 → v0.6.7}/lib/render-cache/src/main.js +0 -0
  542. /package/framework/{v0.6.6 → v0.6.7}/lib/render-cache-store.js +0 -0
  543. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/README.md +0 -0
  544. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/build.json +0 -0
  545. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/package.json +0 -0
  546. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/src/main.js +0 -0
  547. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/src/radix.js +0 -0
  548. /package/framework/{v0.6.6 → v0.6.7}/lib/routing-introspect/package.json +0 -0
  549. /package/framework/{v0.6.6 → v0.6.7}/lib/routing-introspect/src/main.js +0 -0
  550. /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/package.json +0 -0
  551. /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/backends/env.js +0 -0
  552. /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/backends/file.js +0 -0
  553. /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/env-file.js +0 -0
  554. /package/framework/{v0.6.6 → v0.6.7}/lib/session-store.js +0 -0
  555. /package/framework/{v0.6.6 → v0.6.7}/lib/shell.js +0 -0
  556. /package/framework/{v0.6.6 → v0.6.7}/lib/sqlite-driver.js +0 -0
  557. /package/framework/{v0.6.6 → v0.6.7}/lib/state.js +0 -0
  558. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-filters/README.md +0 -0
  559. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-filters/package.json +0 -0
  560. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-filters/src/main.js +0 -0
  561. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-resolver/package.json +0 -0
  562. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-resolver/src/main.js +0 -0
  563. /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/package.json +0 -0
  564. /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/src/loaders/http.js +0 -0
  565. /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/src/loaders/memory.js +0 -0
  566. /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/src/main.js +0 -0
  567. /package/framework/{v0.6.6 → v0.6.7}/lib/url/README.md +0 -0
  568. /package/framework/{v0.6.6 → v0.6.7}/lib/url/index.js +0 -0
  569. /package/framework/{v0.6.6 → v0.6.7}/lib/url/routing.json +0 -0
  570. /package/framework/{v0.6.6 → v0.6.7}/lib/uuid/package.json +0 -0
  571. /package/framework/{v0.6.6 → v0.6.7}/lib/uuid/src/main.js +0 -0
  572. /package/framework/{v0.6.6 → v0.6.7}/lib/validator.js +0 -0
  573. /package/framework/{v0.6.6 → v0.6.7}/lib/watcher/package.json +0 -0
  574. /package/framework/{v0.6.6 → v0.6.7}/lib/watcher/src/main.js +0 -0
  575. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-framing/package.json +0 -0
  576. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-framing/src/main.js +0 -0
  577. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-query/package.json +0 -0
  578. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-query/src/main.js +0 -0
  579. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-session/package.json +0 -0
  580. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-session/src/main.js +0 -0
@@ -3302,7 +3302,22 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
3302
3302
  // - previous error detected
3303
3303
  if ( !self.isValid() ) {
3304
3304
  console.debug('stopping on errors ...');
3305
- triggerEvent(gina, this.target, 'asyncCompleted.' + id, self[this['name']]);
3305
+ // #B338 — release ASYNCHRONOUSLY. A synchronous trigger fires the
3306
+ // completion waiter MID-FIELD-LOOP (inside this very field's rule
3307
+ // application), so the pass composed its payload before LATER
3308
+ // fields were adjudicated — a field declared after the query field
3309
+ // vanished from the submit verdict, its rendered error was then
3310
+ // CLEARED by the render pass, and the outcome depended on field
3311
+ // ORDER. A microtask runs once the call stack empties — after the
3312
+ // whole field loop and its terminal block — which is exactly the
3313
+ // shape a real XHR settle already has: one completion timing for
3314
+ // every release path. (`_skipTarget`/`_skipField` are snapshotted:
3315
+ // `this` is not the field object inside the deferred call.)
3316
+ // was: triggerEvent(gina, this.target, 'asyncCompleted.' + id, self[this['name']]);
3317
+ var _skipTarget = this.target, _skipFieldName = this['name'];
3318
+ queueMicrotask(function deferredKnownInvalidRelease() {
3319
+ triggerEvent(gina, _skipTarget, 'asyncCompleted.' + id, self[_skipFieldName]);
3320
+ });
3306
3321
  //return self[this.name];
3307
3322
  return;
3308
3323
  }
@@ -3337,6 +3352,20 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
3337
3352
 
3338
3353
  }
3339
3354
  } else if (testedValue === this.value) {
3355
+ // #B332 — while an XHR for this very (field, value) is still IN FLIGHT the
3356
+ // cache below has no verdict yet, and the immediate release at the end of
3357
+ // this branch woke every armed waiter with a verdict-less field object —
3358
+ // the submit pass then completed on its sync-only rules and sent while the
3359
+ // authoritative answer was still on the wire. Do nothing here: the pending
3360
+ // request's settle (processQueryResult / releaseQueryWaiter — both clear
3361
+ // the marker first) triggers `asyncCompleted.<id>` and wakes every waiter
3362
+ // with the real verdict. Marker is set right before xhr.send() below.
3363
+ if (
3364
+ this.target && this.target.dataset
3365
+ && this.target.dataset.ginaFormValidatorQueryPending === this.value
3366
+ ) {
3367
+ return self[this.name];
3368
+ }
3340
3369
  // not resending to backend, but in case of cached errors, re display same error message
3341
3370
  var hasCachedErrors = false;
3342
3371
  if (
@@ -3357,7 +3386,18 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
3357
3386
  }
3358
3387
  // Do not remove this test
3359
3388
  if ( typeof( gina.events[_evt]) != 'undefined' ) {
3360
- triggerEvent(gina, this.target, _evt, self[this['name']]);
3389
+ // #B338 — same deferral as the known-invalid release above: a
3390
+ // cached-verdict re-check fires synchronously mid-field-loop,
3391
+ // and the waiter it wakes must not compose the pass verdict
3392
+ // before the remaining fields are adjudicated (measured: the
3393
+ // second click on an unchanged registered value delivered a
3394
+ // payload missing every field declared after the query field,
3395
+ // clearing their rendered errors).
3396
+ // was: triggerEvent(gina, this.target, _evt, self[this['name']]);
3397
+ var _cacheTarget = this.target, _cacheFieldName = this['name'];
3398
+ queueMicrotask(function deferredCachedVerdictRelease() {
3399
+ triggerEvent(gina, _cacheTarget, _evt, self[_cacheFieldName]);
3400
+ });
3361
3401
  }
3362
3402
 
3363
3403
  return self[this.name];
@@ -3492,6 +3532,17 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
3492
3532
 
3493
3533
  var processQueryResult = function(result) {
3494
3534
 
3535
+ // #B332 — this request has settled: release the in-flight marker BEFORE any
3536
+ // processing (a throw below routes to releaseQueryWaiter, which also clears).
3537
+ // Value-guarded so a newer request's marker — a keystroke re-fired the query
3538
+ // while this one was on the wire — is never cleared by a stale settle.
3539
+ if (
3540
+ _this.target && _this.target.dataset
3541
+ && _this.target.dataset.ginaFormValidatorQueryPending === String(_this.value)
3542
+ ) {
3543
+ delete _this.target.dataset.ginaFormValidatorQueryPending;
3544
+ }
3545
+
3495
3546
  // #B87: a boolean checkbox routed through a `query` rule carries a real
3496
3547
  // boolean — `.toLowerCase()` only applies to string values
3497
3548
  _this.value = local['data'][_this.name] = (_this.value && typeof(_this.value) == 'string') ? _this.value.toLowerCase() : _this.value;
@@ -3622,6 +3673,17 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
3622
3673
  */
3623
3674
  var releaseQueryWaiter = function(err) {
3624
3675
  console.warn('[ FormValidator ] `query` result handling failed for field `'+ (_this && _this.name) +'`: '+ ( err && err.message || err ));
3676
+ // #B332 — the failed settle still ends this request: clear the in-flight
3677
+ // marker (value-guarded, same as processQueryResult) or the same-value
3678
+ // fast path would treat the field as pending forever.
3679
+ try {
3680
+ if (
3681
+ _this.target && _this.target.dataset
3682
+ && _this.target.dataset.ginaFormValidatorQueryPending === String(_this.value)
3683
+ ) {
3684
+ delete _this.target.dataset.ginaFormValidatorQueryPending;
3685
+ }
3686
+ } catch (ignorePendingClear) {}
3625
3687
  try {
3626
3688
  var _releaseId = _this.target && (_this.target.id || _this.target.getAttribute('id'));
3627
3689
  if (_releaseId) {
@@ -3761,6 +3823,13 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
3761
3823
  }
3762
3824
  }// xhr.onload = function () {
3763
3825
 
3826
+ // #B332 — mark the (field, value) as in flight BEFORE the wire call: the
3827
+ // same-value fast path above must not immediate-release a verdict-less
3828
+ // field while this request is pending. Cleared at both settle chokepoints
3829
+ // (processQueryResult / releaseQueryWaiter), value-guarded.
3830
+ if ( _this.target && _this.target.dataset ) {
3831
+ _this.target.dataset.ginaFormValidatorQueryPending = _this.value;
3832
+ }
3764
3833
  if (data) {
3765
3834
  xhr.send( queryData ); // stringyfied
3766
3835
  } else {
@@ -4097,15 +4166,14 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
4097
4166
  }
4098
4167
 
4099
4168
  try {
4100
- // security checks
4101
- compiledCondition = compiledCondition.replace(/(\(|\)|return)/g, '');
4102
4169
  // #SCS1e (2026-04-24) — replaced the two `eval(...)` calls below with
4103
- // auditable equivalents. After `$var` substitution (lines 910-920) and
4104
- // paren/return strip above, `compiledCondition` is either:
4170
+ // auditable equivalents. After `$var` substitution (lines 910-920),
4171
+ // `compiledCondition` is either:
4105
4172
  // (a) a regex literal `/<body>/<flags>` (when `/^\//` matches), or
4106
4173
  // (b) a binary comparison `<operand><op><operand>` where operand ∈
4107
4174
  // {number, "string", true, false, null, undefined} and op ∈
4108
- // {===, !==, ==, !=, <, >, <=, >=}.
4175
+ // {===, !==, ==, !=, <, >, <=, >=} — paren/`return`-stripped
4176
+ // inside its branch, before the grammar match.
4109
4177
  // Old eval executed arbitrary JS; any value reaching `$var` substitution
4110
4178
  // that contained a quote (e.g. user input `bar"; process.exit();//`)
4111
4179
  // could escape the `"..."` wrapper at line 916 and reach eval as
@@ -4116,6 +4184,18 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
4116
4184
  // } else {
4117
4185
  // isValid = eval(compiledCondition)
4118
4186
  // }
4187
+ // #B345 — the paren/`return` strip used to run HERE, before the branch
4188
+ // decision, so it also mangled every parenthesized regex literal:
4189
+ // groups were destroyed (`^(a|b)$` compiled as `^a|b$`, rebinding the
4190
+ // anchors and turning middle alternatives substring-permissive),
4191
+ // quantified groups were requantified (`(#TAG)?` became `#TA` plus an
4192
+ // optional `G`), and a literal `return` inside a pattern was deleted —
4193
+ // all silently, because the stripped text still compiled as a valid
4194
+ // regex. The strip protects the BINARY-COMPARISON shape only, so it
4195
+ // now lives inside that branch; the regex branch never evaluates the
4196
+ // condition as JS (`new RegExp(body, flags).test(value)` — no eval),
4197
+ // so parentheses there are legitimate syntax and a regex literal is
4198
+ // compiled exactly as authored.
4119
4199
  if ( /^\//.test(compiledCondition) ) {
4120
4200
  var _scsRegexMatch = compiledCondition.match(/^\/(.+)\/([a-z]*)$/);
4121
4201
  if (!_scsRegexMatch) {
@@ -4123,6 +4203,10 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
4123
4203
  }
4124
4204
  isValid = new RegExp(_scsRegexMatch[1], _scsRegexMatch[2]).test(this.value);
4125
4205
  } else {
4206
+ // security checks (#SCS1e) — strip parens/`return` before the
4207
+ // grammar-locked match; authored parens in a comparison stay
4208
+ // tolerated (`("a") === ("a")` strips to `"a" === "a"`).
4209
+ compiledCondition = compiledCondition.replace(/(\(|\)|return)/g, '');
4126
4210
  var _SCS_BINARY_RE = /^\s*(null|undefined|true|false|"[^"]*"|-?\d+(?:\.\d+)?)\s*(===|!==|<=|>=|==|!=|<|>)\s*(null|undefined|true|false|"[^"]*"|-?\d+(?:\.\d+)?)\s*$/;
4127
4211
  var _scsBinMatch = (typeof(compiledCondition) == 'string') ? compiledCondition.match(_SCS_BINARY_RE) : null;
4128
4212
  if (!_scsBinMatch) {
@@ -17399,21 +17483,28 @@ function ValidatorPlugin(rules, data, formId, culture) {
17399
17483
  // filter also excludes in-tree descendants whose `form="..."` points at a different
17400
17484
  // form (parent-form contamination guard).
17401
17485
  var getOwnedElements = function($form, tag) {
17486
+ // #B333 — dedup by NODE IDENTITY, not by id. The old `seen` table was
17487
+ // id-keyed, so an ID-LESS control already collected from `$form.elements`
17488
+ // was pushed a second time by the in-tree sweep (`!$el.id` passed the old
17489
+ // condition unconditionally). For an id-less `<button type=submit>` —
17490
+ // gina auto-assigns its id only later, in the submit-binding loop — the
17491
+ // double entry meant `bindSubmitEl` ran twice and every click executed
17492
+ // TWO full validate()+send() cycles. `arr.indexOf($el)` is an identity
17493
+ // test, so the same node can never enter twice regardless of id state.
17402
17494
  var arr = []
17403
- , seen = {}
17404
17495
  , tagUpper = tag.toUpperCase()
17405
17496
  ;
17406
17497
  for (let i = 0, len = $form.elements.length; i < len; i++) {
17407
17498
  let $el = $form.elements[i];
17408
17499
  if ($el.tagName === tagUpper) {
17409
17500
  arr.push($el);
17410
- if ($el.id) seen[$el.id] = true;
17411
17501
  }
17412
17502
  }
17413
17503
  var inTree = $form.getElementsByTagName(tag);
17414
17504
  for (let i = 0, len = inTree.length; i < len; i++) {
17415
17505
  let $el = inTree[i];
17416
- if ($el.form === $form && (!$el.id || !seen[$el.id])) {
17506
+ // was: if ($el.form === $form && (!$el.id || !seen[$el.id])) {
17507
+ if ($el.form === $form && arr.indexOf($el) === -1) {
17417
17508
  arr.push($el);
17418
17509
  }
17419
17510
  }
@@ -19035,7 +19126,18 @@ function ValidatorPlugin(rules, data, formId, culture) {
19035
19126
  // (which is what the operable-trigger design was bought for).
19036
19127
  // Checked on the CLICKED element, not `$formInstance.submitTrigger`:
19037
19128
  // a form may carry several submit buttons and only one registers.
19038
- if ( /^submit\./i.test(_evt) && isTriggerDisabled($el) ) {
19129
+ //
19130
+ // #B346 carve-out — when the gate's ONLY reason is a `query` verdict
19131
+ // still on the wire (framework gated mark alone, no committed errors,
19132
+ // in-flight marker present), the reveal has NOTHING to reveal and the
19133
+ // refusal ate the click silently. Let that one state through: the
19134
+ // normal submit cycle latches, arms its waiter, and the pending
19135
+ // settle completes it (#B342) — valid ⇒ send, invalid ⇒ render +
19136
+ // release. Every other refusal shape is unchanged.
19137
+ if (
19138
+ /^submit\./i.test(_evt) && isTriggerDisabled($el)
19139
+ && !isAwaitingQueryVerdictOnly($el, $target, instance.$forms[$form.id] || $form)
19140
+ ) {
19039
19141
  cancelEvent(event);
19040
19142
  revealValidationState( instance.$forms[$form.id] || $form );
19041
19143
  return false;
@@ -19290,6 +19392,21 @@ function ValidatorPlugin(rules, data, formId, culture) {
19290
19392
  // start validation
19291
19393
  cancelEvent(event);
19292
19394
 
19395
+ // #B332 belt — one submit cycle at a time per form. `isSubmitting`
19396
+ // latches below (before validate()) and is released on the XHR settle
19397
+ // AND on the rejected-validation branch (#B192), so a truthy read here
19398
+ // means a full cycle is still between click and settle: refuse the
19399
+ // re-entry (a re-click while a query rule's XHR is in flight, or a
19400
+ // residual duplicate listener on an older bundle) instead of racing
19401
+ // two concurrent cycles against the same form state.
19402
+ var _latchFormId = $target.getAttribute('id');
19403
+ if (
19404
+ typeof(instance.$forms[_latchFormId]) != 'undefined'
19405
+ && /^true$/i.test(instance.$forms[_latchFormId].isSubmitting)
19406
+ ) {
19407
+ return;
19408
+ }
19409
+
19293
19410
  // getting fields & values
19294
19411
  var $fields = {}
19295
19412
  , fields = { '_length': 0 }
@@ -19456,7 +19573,20 @@ function ValidatorPlugin(rules, data, formId, culture) {
19456
19573
  evt = $submit['id'];
19457
19574
  }
19458
19575
 
19459
- if ( typeof(gina.events[evt]) == 'undefined' || gina.events[evt] != $submit.id ) {
19576
+ // #B333 — the guard used to test `gina.events[evt]` where `evt` is the
19577
+ // BUTTON id (`click.<uuid>`), a key nothing ever writes: `bindSubmitEl`
19578
+ // registers under the NAMESPACED name (`submit.<id>`). The test was
19579
+ // therefore always true and every extra pass over the same button (the
19580
+ // id-less double-collection fixed in `getOwnedElements`, a re-bind path)
19581
+ // stacked one more live listener -> one more full validate()+send() cycle
19582
+ // per click. Test the key that actually gets registered, against the id
19583
+ // the registry stores. (A trigger REPLACED in the DOM keeps the registry
19584
+ // key but loses the expando marker — the #B294 click-time gate re-binds
19585
+ // that case; this guard only has to stop same-node re-binds.)
19586
+ // was:
19587
+ // if ( typeof(gina.events[evt]) == 'undefined' || gina.events[evt] != $submit.id ) {
19588
+ var _submitEvt = ( /^submit\./i.test(evt) ) ? evt : 'submit.'+ evt;
19589
+ if ( typeof(gina.events[_submitEvt]) == 'undefined' || gina.events[_submitEvt] != $submit.id ) {
19460
19590
  bindSubmitEl(evt, $submit);
19461
19591
  }
19462
19592
 
@@ -19501,7 +19631,15 @@ function ValidatorPlugin(rules, data, formId, culture) {
19501
19631
  // }
19502
19632
  if ($formInstance && e.isTrusted) {
19503
19633
  var $registeredTrigger = document.getElementById($formInstance.submitTrigger) || null;
19504
- if ( isTriggerDisabled($registeredTrigger) ) {
19634
+ // #B346 — same carve-out as the click proxy's gate: when the ONLY
19635
+ // refusal reason is a query verdict still on the wire, refusing
19636
+ // here ate Enter-key and wrapped-label submits silently (nothing
19637
+ // committed to reveal). Let the pass run and wait for the settle;
19638
+ // every other refusal shape is unchanged.
19639
+ if (
19640
+ isTriggerDisabled($registeredTrigger)
19641
+ && !isAwaitingQueryVerdictOnly($registeredTrigger, $target, $formInstance)
19642
+ ) {
19505
19643
  cancelEvent(e);
19506
19644
  revealValidationState($formInstance);
19507
19645
  return false;
@@ -19522,12 +19660,19 @@ function ValidatorPlugin(rules, data, formId, culture) {
19522
19660
  // so the registered trigger is the best and only referent. Placed after the
19523
19661
  // disabled + defaultPrevented guards above, which both return first.
19524
19662
  // NB. the #B308 gesture gate above already cancelled any TRUSTED submit on
19525
- // a marked trigger, so this skip now guards the UNTRUSTED path: a
19526
- // programmatic submit on a marked form runs the fresh validate pass below
19527
- // and must not flash the trigger armed for the length of that pass.
19663
+ // a marked trigger (#B346 excepted: a pending-verdict-only refusal now
19664
+ // proceeds, and the arm below covers it via the same carve-out), so this
19665
+ // skip otherwise guards the UNTRUSTED path: a programmatic submit on a
19666
+ // marked form runs the fresh validate pass below and must not flash the
19667
+ // trigger armed for the length of that pass.
19528
19668
  if ($formInstance) {
19529
19669
  var $loadingTrigger = document.getElementById($formInstance.submitTrigger);
19530
- if ( !isTriggerDisabled($loadingTrigger) ) {
19670
+ // #B346 — a pending-verdict bypass proceeds to a real cycle, so it
19671
+ // gets the loading state too (#B247 parity with the click proxy).
19672
+ if (
19673
+ !isTriggerDisabled($loadingTrigger)
19674
+ || isAwaitingQueryVerdictOnly($loadingTrigger, $target, $formInstance)
19675
+ ) {
19531
19676
  armSubmitLoading($formInstance, $loadingTrigger);
19532
19677
  }
19533
19678
  }
@@ -19637,6 +19782,36 @@ function ValidatorPlugin(rules, data, formId, culture) {
19637
19782
  } else {
19638
19783
  rule = getRuleObjByName(id.replace(/\-/g, '.'))
19639
19784
  }
19785
+ // #B346 — this pass may proceed while an async query verdict is
19786
+ // still on the wire: the pending-aware gate above lets a trusted
19787
+ // gesture through, and a programmatic submit() never consulted
19788
+ // the gate at all. An un-latched async pass STARVES — with the
19789
+ // query field not declared last, its waiter's completion resolves
19790
+ // to the needsGlobalReValidation display-only work and never runs
19791
+ // this callback. Latch exactly as bindSubmitEl does, so the
19792
+ // latched completion dispatches (#B342) — and mirror the #B332
19793
+ // belt for the window this pass now enters: one cycle at a time.
19794
+ // The owned-field scan mirrors isAwaitingQueryVerdictOnly's
19795
+ // (kept inline THERE — its body literals are pinned); trigger
19796
+ // marks and recorded errors are deliberately not consulted here,
19797
+ // because they do not affect LATCH soundness: an invalid pass
19798
+ // completes through the errors branch and releases via the
19799
+ // rejected-validation release, a clean pass through the latched
19800
+ // dispatch and the send release.
19801
+ var _pendingSel = '[data-gina-form-validator-query-pending]';
19802
+ var _formDomId = $target.id || ( typeof($target.getAttribute) == 'function' ? $target.getAttribute('id') : null );
19803
+ var _safeFormDomId = ( _formDomId && typeof(CSS) != 'undefined' && typeof(CSS.escape) == 'function' ) ? CSS.escape(_formDomId) : _formDomId;
19804
+ var _awaitsQueryVerdict = (
19805
+ typeof($target.querySelector) == 'function' && $target.querySelector(_pendingSel)
19806
+ || _safeFormDomId && document.querySelector('[form="'+ _safeFormDomId +'"]'+ _pendingSel)
19807
+ ) ? true : false;
19808
+ if (_awaitsQueryVerdict) {
19809
+ if ( /^true$/i.test(instance.$forms[id].isSubmitting) ) {
19810
+ return false;
19811
+ }
19812
+ instance.$forms[id].isSubmitting = true;
19813
+ instance.$forms[id].isSending = false;
19814
+ }
19640
19815
  instance.$forms[id].isValidating = true;
19641
19816
  validate($target, fields, $fields, rule, function onSubmitValidation(result){
19642
19817
  instance.$forms[id].isValidating = false;
@@ -19647,6 +19822,12 @@ function ValidatorPlugin(rules, data, formId, culture) {
19647
19822
  // } else {
19648
19823
  // handleErrorsDisplay($target, result.error, result.data);
19649
19824
  if ( typeof(gina.events['submit.' + id]) != 'undefined' ) { // if `on('submit', cb)` is binded
19825
+ // #B346 — a consumer's own `on('submit')` handler owns
19826
+ // the rest of the cycle and may never reach send():
19827
+ // the latch cannot ride this dispatch (a stopping
19828
+ // handler would strand it — the #B342 lockout shape).
19829
+ // False -> false when this pass never latched.
19830
+ instance.$forms[id].isSubmitting = false;
19650
19831
  triggerEvent(gina, $target, 'submit.' + id, result);
19651
19832
  } else {
19652
19833
  triggerEvent(gina, $target, 'validate.' + id, result);
@@ -19710,8 +19891,10 @@ function ValidatorPlugin(rules, data, formId, culture) {
19710
19891
  * marks are removed the moment the form validates. The marker is the
19711
19892
  * framework's OWN channel — the trigger carries no ARIA disabled claim,
19712
19893
  * because it stays genuinely operable: a click on a gated trigger is
19713
- * answered by the display-only reveal (#B246), and `isValid()` remains the
19714
- * real send gate.
19894
+ * answered by the display-only reveal (#B246) — or, when the only blocker
19895
+ * is a query verdict still on the wire, proceeds into a submit pass that
19896
+ * waits for the settle (#B346) — and `isValid()` remains the real send
19897
+ * gate.
19715
19898
  *
19716
19899
  * `aria-disabled` is deliberately neither written nor cleared here: an
19717
19900
  * authored mark belongs to the author (the gates enforce it, and nothing
@@ -19845,6 +20028,122 @@ function ValidatorPlugin(rules, data, formId, culture) {
19845
20028
  );
19846
20029
  };
19847
20030
 
20031
+ /**
20032
+ * isAwaitingQueryVerdictOnly
20033
+ *
20034
+ * Tells whether a refused submit trigger is refused ONLY because a `query`
20035
+ * verdict is still pending — the one state the #B246 gate misclassifies.
20036
+ *
20037
+ * #B346 — `updateSubmitTriggerState()` gates on a boolean (`isFormValid`)
20038
+ * over a state that is really tri-valued: valid, invalid with COMMITTED
20039
+ * errors, and VERDICT-PENDING (an async `query` XHR on the wire, so the
20040
+ * form has no verdict yet). The #B246 refuse-and-reveal answer is only
20041
+ * coherent for the middle state — with nothing committed there is nothing
20042
+ * to reveal, and the click died silently (measured: wake path fully
20043
+ * healthy, `isSubmitting` never latched, zero sends inside the round-trip
20044
+ * window; the window scales with query LATENCY, not typing speed). When
20045
+ * this returns true the proxy lets the click run the normal submit cycle:
20046
+ * the pass latches and arms its waiter, the engine's in-flight branch
20047
+ * declines to duplicate the XHR, the pending settle wakes the waiter, and
20048
+ * the latched completion dispatches (#B342) — the exact flow live-check-off
20049
+ * forms already run.
20050
+ *
20051
+ * Deliberately NARROW — every arm fails toward the shipped refusal:
20052
+ * - the framework's own gated mark must be the ONLY refusal reason; an
20053
+ * AUTHORED `aria-disabled="true"` or a (non-IDL) native `disabled`
20054
+ * keeps refusing (#B312 — an author's claim is enforced, not
20055
+ * second-guessed);
20056
+ * - any COMMITTED error keeps refusing — refuse-and-reveal stays coherent
20057
+ * when there is something to reveal. Committed means a SETTLED field's:
20058
+ * the pending field itself may carry a provisional `query` entry staged
20059
+ * by the same-value fast path while its verdict is on the wire, and a
20060
+ * provisional entry is not a verdict (measured — counting it refused
20061
+ * every window this helper exists to recognize);
20062
+ * - an owned field must actually carry the in-flight query marker
20063
+ * (`data-gina-form-validator-query-pending`, set by the engine right
20064
+ * before `xhr.send()` and cleared at both settle chokepoints), looked up
20065
+ * inside the form AND among form-reassociated controls (`form="<id>"`).
20066
+ *
20067
+ * @param {object} $el - the clicked submit trigger (DOMObject)
20068
+ * @param {object} $formDom - the owning form element (DOMObject)
20069
+ * @param {object} [$formRecord] - the validator record (`instance.$forms[id]`)
20070
+ *
20071
+ * @returns {boolean} true when the only thing standing between the click
20072
+ * and a verdict is a query still on the wire
20073
+ *
20074
+ * @example
20075
+ * // gated trigger, clean form, uniqueness query in flight -> the click waits for the verdict
20076
+ * isAwaitingQueryVerdictOnly($button, $form, instance.$forms[$form.id]); // true
20077
+ *
20078
+ * @example
20079
+ * // same window but a sibling field has a committed error -> shipped refuse-and-reveal stands
20080
+ * isAwaitingQueryVerdictOnly($button, $form, instance.$forms[$form.id]); // false
20081
+ *
20082
+ * @inner
20083
+ */
20084
+ var isAwaitingQueryVerdictOnly = function($el, $formDom, $formRecord) {
20085
+ if ( !$el || typeof($el.getAttribute) != 'function' || !$formDom || typeof($formDom.querySelector) != 'function' ) {
20086
+ return false;
20087
+ }
20088
+ // the gated mark must be present, and be the ONLY firing arm
20089
+ if ( $el.getAttribute('data-gina-form-submit-gated') != 'true' ) {
20090
+ return false;
20091
+ }
20092
+ var nativeCounts = !('disabled' in $el);
20093
+ if (
20094
+ nativeCounts
20095
+ && $el.getAttribute('disabled') != null && $el.getAttribute('disabled') != 'false'
20096
+ ||
20097
+ $el.getAttribute('aria-disabled') == 'true'
20098
+ ) {
20099
+ return false;
20100
+ }
20101
+ // a query verdict must actually be pending for an owned field — inside
20102
+ // the form, or a form-reassociated control (`form="<id>"`)
20103
+ var pendingSel = '[data-gina-form-validator-query-pending]';
20104
+ var _id = $formDom.id || ( typeof($formDom.getAttribute) == 'function' ? $formDom.getAttribute('id') : null );
20105
+ var _safeId = ( _id && typeof(CSS) != 'undefined' && typeof(CSS.escape) == 'function' ) ? CSS.escape(_id) : _id;
20106
+ var hasPending = (
20107
+ $formDom.querySelector(pendingSel)
20108
+ || _safeId && document.querySelector('[form="'+ _safeId +'"]'+ pendingSel)
20109
+ ) ? true : false;
20110
+ if (!hasPending) {
20111
+ return false;
20112
+ }
20113
+ // COMMITTED errors keep the shipped refuse-and-reveal — but committed
20114
+ // means a SETTLED field's verdict. Measured (#B346): while a query is
20115
+ // on the wire, the same-value fast path stages a provisional `query`
20116
+ // entry under the PENDING field's own key in `$formRecord.errors`, so
20117
+ // a bare `errors.count() > 0` reads the very state this helper exists
20118
+ // to recognize as "no verdict yet" and refuses every window. Count an
20119
+ // erroring field only when it is NOT itself awaiting the verdict.
20120
+ if ( $formRecord && typeof($formRecord.errors) != 'undefined' && $formRecord.errors ) {
20121
+ for (var _fieldName in $formRecord.errors) {
20122
+ if ( !$formRecord.errors.hasOwnProperty(_fieldName) ) {
20123
+ continue;
20124
+ }
20125
+ var _fieldErrors = $formRecord.errors[_fieldName];
20126
+ var _isErroring = ( _fieldErrors && typeof(_fieldErrors.count) == 'function' )
20127
+ ? _fieldErrors.count() > 0
20128
+ : !!_fieldErrors;
20129
+ if (!_isErroring) {
20130
+ continue;
20131
+ }
20132
+ var _safeName = ( typeof(CSS) != 'undefined' && typeof(CSS.escape) == 'function' ) ? CSS.escape(_fieldName) : _fieldName;
20133
+ var _erroringIsPending = (
20134
+ $formDom.querySelector('[name="'+ _safeName +'"]'+ pendingSel)
20135
+ || _safeId && document.querySelector('[form="'+ _safeId +'"][name="'+ _safeName +'"]'+ pendingSel)
20136
+ ) ? true : false;
20137
+ if (!_erroringIsPending) {
20138
+ // a settled field carries a real verdict — there IS
20139
+ // something to reveal, the shipped refusal stands
20140
+ return false;
20141
+ }
20142
+ }
20143
+ }
20144
+ return true;
20145
+ };
20146
+
19848
20147
  /**
19849
20148
  * focusFirstInvalidField
19850
20149
  *
@@ -20375,6 +20674,14 @@ function ValidatorPlugin(rules, data, formId, culture) {
20375
20674
  , $asyncFieldId = null
20376
20675
  , asyncEvt = null
20377
20676
  , asyncCount = 0
20677
+ // #B332 — fields THIS pass armed an `asyncCompleted.<id>` waiter for.
20678
+ // The arm guard used to consult the global `gina.events` registry, which
20679
+ // cannot tell "this pass already armed it" (legitimate skip — a rules
20680
+ // re-application within one pass) from "a CONCURRENT pass armed it"
20681
+ // (must NOT skip: zeroing `asyncCount` there made this pass complete on
20682
+ // a sync-only verdict and send() fired while the query XHR was in
20683
+ // flight). Pass-local by construction, so only the first case matches.
20684
+ , armedAsyncFields = {}
20378
20685
  ;
20379
20686
 
20380
20687
 
@@ -20525,15 +20832,42 @@ function ValidatorPlugin(rules, data, formId, culture) {
20525
20832
  asyncEvt = 'asyncCompleted.'+ $asyncFieldId;
20526
20833
 
20527
20834
  var triggeredCount = 0, eventTriggered = false;
20528
- if ( typeof(gina.events[asyncEvt]) != 'undefined' ) {
20529
- console.debug('event `'+ asyncEvt +'` already added');
20530
- asyncCount = 0;
20531
- return;
20835
+ // #B332 — the arm guard is PASS-LOCAL now (see `armedAsyncFields`
20836
+ // at the declaration block). The old registry test saw only that
20837
+ // SOME pass had armed the field: when that pass was a concurrent
20838
+ // one (a duplicate submit listener — #B333, a re-click while the
20839
+ // query XHR was in flight, a live-check cycle beside a submit),
20840
+ // this pass zeroed ITS OWN pending-async counter and returned —
20841
+ // so its terminal block completed on the sync-only verdict, the
20842
+ // `validate.<id>` valid branch ran, and `send()` fired ~200ms
20843
+ // BEFORE the query answered (the "email already registered" error
20844
+ // rendered after the POST had already left). A foreign waiter must
20845
+ // not starve this pass of its own wake-up: waiters stack per pass
20846
+ // (each self-detaches on first fire below) and the ENGINE dedups
20847
+ // the wire via `ginaFormValidatorQueryPending` — no duplicate XHR.
20848
+ // was:
20849
+ // if ( typeof(gina.events[asyncEvt]) != 'undefined' ) {
20850
+ // console.debug('event `'+ asyncEvt +'` already added');
20851
+ // asyncCount = 0;
20852
+ // return;
20853
+ // }
20854
+ if ( typeof(armedAsyncFields[$asyncFieldId]) != 'undefined' ) {
20855
+ console.debug('event `'+ asyncEvt +'` already armed by this pass');
20856
+ continue;
20532
20857
  }
20858
+ armedAsyncFields[$asyncFieldId] = true;
20533
20859
  ++asyncCount;
20534
20860
  //console.debug('Adding listner '+asyncEvt);
20535
20861
  addListener(gina, $asyncField, asyncEvt, function onasyncCompleted(event) {
20536
20862
  event.preventDefault();
20863
+ // #B332/#B334 — one settle per waiter. Waiters stack per pass
20864
+ // now, so each must consume exactly one wake-up and leave the
20865
+ // node: the registry-only `removeListener` in the completion
20866
+ // block below carries no fn ref (a DOM no-op — it only deletes
20867
+ // the `gina.events` key), and a stale un-latched waiter used to
20868
+ // re-enter on every later settle of the same field, replaying a
20869
+ // finished pass's completion against a live one.
20870
+ event.currentTarget.removeEventListener(event.type, onasyncCompleted, false);
20537
20871
 
20538
20872
  triggeredCount++;
20539
20873
  --asyncCount;
@@ -20571,7 +20905,23 @@ function ValidatorPlugin(rules, data, formId, culture) {
20571
20905
  removeListener(gina, event.target, _asyncEvt);
20572
20906
 
20573
20907
  cb._data = d['toData']();
20574
- cb._errors = d['getErrors'](field);
20908
+ // #B337 — the completion payload must carry the WHOLE pass's
20909
+ // verdict, not the query field's slice. On a full-form submit
20910
+ // pass `d` holds every field, and scoping to `field` starved
20911
+ // the `validate.<id>` handler of every OTHER invalid field:
20912
+ // their errors were adjudicated (DOM attributes set) but never
20913
+ // rendered on the submit path, and the #A11Y1 first-invalid
20914
+ // focus loop could only ever land on the query field. It also
20915
+ // inverted the query-passes-but-another-field-invalid scene:
20916
+ // the scoped set read empty, the early-return branch was
20917
+ // skipped, and the validated dispatch went out with NO errors
20918
+ // at all. On a single-element live-check pass `d` holds one
20919
+ // field, so the no-arg call is byte-equivalent there — the
20920
+ // touched-field-only DISPLAY below keeps its `field` argument,
20921
+ // which is the live-check contract (§4c). The validated
20922
+ // listener's own fallback was already `d.getErrors()` no-arg.
20923
+ // was: cb._errors = d['getErrors'](field);
20924
+ cb._errors = d['getErrors']();
20575
20925
  // console.debug('query callbakc triggered ', cb._errors, '\nisValidating: ', instance.$forms[formId].isValidating);
20576
20926
  // update instance form errors
20577
20927
  if ( cb._errors && cb._errors.count() > 0) {
@@ -20608,11 +20958,51 @@ function ValidatorPlugin(rules, data, formId, culture) {
20608
20958
  }
20609
20959
 
20610
20960
 
20611
- triggerEvent(gina, $currentForm, 'validated.' + formId, cb);
20961
+ // #B334 — dispatch where THIS pass's listener actually
20962
+ // sits: $formOrElement (the form on a full-form pass —
20963
+ // identical to $currentForm there — but the ELEMENT on
20964
+ // a single-element pass, whose listener could never
20965
+ // hear a form-dispatched event: bubbling goes up, not
20966
+ // down; it still bubbles up THROUGH the form so
20967
+ // consumer `on('validated')` bindings keep hearing it).
20968
+ // was: triggerEvent(gina, $currentForm, 'validated.' + formId, cb);
20969
+ triggerEvent(gina, $formOrElement, 'validated.' + formId, cb);
20612
20970
  return;
20613
20971
  }
20614
20972
  }
20615
20973
 
20974
+ // #B342 — a SUBMIT pass has exactly ONE legitimate completer: this
20975
+ // waiter (post-#B338 the terminal block runs while asyncCount is
20976
+ // still > 0, so it can never dispatch for an async pass). On a
20977
+ // CLEAN pass the errors>0 branch above is skipped, and both
20978
+ // branches below are conditional — last-field matches only when
20979
+ // the query field happens to be declared last in the rule set
20980
+ // (minus `exclude:true` splices), and the live-check branch needs
20981
+ // `isValidating`, which a submit pass does not set. A clean submit
20982
+ // whose query field was NOT last exited this block having
20983
+ // dispatched NOTHING: `cb` starved, `validate.<id>` never fired,
20984
+ // no send ever left, and the #B332 `isSubmitting` latch stranded —
20985
+ // gating every later click until reload (measured live on a
20986
+ // consumer login form: value present, every field clean, click
20987
+ // swallowed). Pre-arc this hole was MASKED by the very bugs
20988
+ // #B332/#B333 removed: the duplicate pass's premature sync-only
20989
+ // completion was the accidental completer. A latched form means
20990
+ // this completion belongs to the submit cycle (live-check passes
20991
+ // hard-return while the latch is held), so dispatch it — display
20992
+ // work belongs to the `validate.<id>` handler's send/reject
20993
+ // branches, same as the errors>0 dispatch above.
20994
+ // #B346 note: waiters ARMED before the latch — live-check
20995
+ // passes mid-window, the reveal's own pass — also wake through
20996
+ // this branch once a pending-window gesture latches; each such
20997
+ // dispatch carries THAT waiter's own pass cb, and the #B334
20998
+ // own-pass listener filtering keeps every completion with its
20999
+ // own pass. NEW live-check passes still hard-return on the
21000
+ // latch.
21001
+ if ( /^true$/i.test(instance.$forms[formId].isSubmitting) ) {
21002
+ triggerEvent(gina, $formOrElement, 'validated.' + formId, cb);
21003
+ return;
21004
+ }
21005
+
20616
21006
  // is this the last or the only field to be validated ?
20617
21007
  var needsGlobalReValidation = false;
20618
21008
  if ( listedFields.length == 1 || listedFields[listedFields.length-1] == field) {
@@ -20647,7 +21037,9 @@ function ValidatorPlugin(rules, data, formId, culture) {
20647
21037
  handleErrorsDisplay($currentForm, cb._errors, cb._data, field);
20648
21038
  updateSubmitTriggerState( $currentForm, isFormValid);
20649
21039
  }
20650
- triggerEvent(gina, $currentForm, 'validated.' + formId, cb);
21040
+ // #B334 — same retarget as the completion branch above.
21041
+ // was: triggerEvent(gina, $currentForm, 'validated.' + formId, cb);
21042
+ triggerEvent(gina, $formOrElement, 'validated.' + formId, cb);
20651
21043
  }
20652
21044
  // just update warning state
20653
21045
  else if (/^true$/i.test(instance.$forms[formId].isValidating) && listedFields.length > 1 && listedFields[listedFields.length-1] != field ) {
@@ -21421,10 +21813,33 @@ function ValidatorPlugin(rules, data, formId, culture) {
21421
21813
  }
21422
21814
 
21423
21815
 
21424
- if (isGFFCtx) {
21425
- addListener(gina, $formOrElement, evt, function(event) {
21816
+ // #B334 — three defects lived in this one registration:
21817
+ // (a) it registered for EVERY pass, but a cb-less pass never dispatches
21818
+ // `validated.<id>` (the terminal block returns the result object
21819
+ // instead) — its listener was pure accumulation;
21820
+ // (b) `event.detail` IS the DISPATCHING pass's callback, and the body ran
21821
+ // it unconditionally — so every stale listener replayed the dispatcher's
21822
+ // callback once (measured: two listeners -> one dispatch -> two
21823
+ // `validate.<id>` dispatches -> two send() calls for one click);
21824
+ // (c) the `removeListener` call in the body carries no fn ref, and
21825
+ // events.js then only deletes the registry key —
21826
+ // `removeEventListener(name, undefined)` detaches nothing, so every
21827
+ // pass's listener stayed on the node for the page's lifetime.
21828
+ // The listener now registers only when a callback exists, consumes ONLY its
21829
+ // own pass's dispatch (detail identity), and detaches itself on consumption
21830
+ // (a mid-dispatch removal also stops a not-yet-run duplicate per DOM spec).
21831
+ // was: if (isGFFCtx) {
21832
+ // addListener(gina, $formOrElement, evt, function(event) {
21833
+ if ( isGFFCtx && typeof(cb) === 'function' ) {
21834
+ addListener(gina, $formOrElement, evt, function onValidatedOwnPass(event) {
21426
21835
  event.preventDefault();
21427
21836
 
21837
+ if ( event.detail !== cb ) {
21838
+ // another pass's completion — not ours to consume
21839
+ return;
21840
+ }
21841
+ event.currentTarget.removeEventListener(event.type, onValidatedOwnPass, false);
21842
+
21428
21843
  if (!hasBeenValidated) {
21429
21844
  hasBeenValidated = true;
21430
21845
  hasParsedAllRules = false;