gina 0.5.2-alpha.1 → 0.5.2

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 (470) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +3 -5
  3. package/ROADMAP.md +1 -0
  4. package/framework/v0.5.2/VERSION +1 -0
  5. package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +1 -1
  6. package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/controller.js +104 -5
  7. package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/controller.render-json.js +10 -1
  8. package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/controller.render-stream.js +9 -0
  9. package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/controller.render-swig.js +1 -1
  10. package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/inspector/help.txt +1 -1
  11. package/framework/{v0.5.2-alpha.1 → v0.5.2}/package.json +1 -1
  12. package/gna.js +4 -4
  13. package/llms.txt +5 -3
  14. package/package.json +3 -3
  15. package/schema/app.json +1 -1
  16. package/framework/v0.5.2-alpha.1/VERSION +0 -1
  17. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/AUTHORS +0 -0
  18. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/LICENSE +0 -0
  19. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/html/nolayout.html +0 -0
  20. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/html/static.html +0 -0
  21. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/img/android-chrome-192x192.png +0 -0
  22. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/img/android-chrome-512x512.png +0 -0
  23. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/img/apple-touch-icon.png +0 -0
  24. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/img/favicon-16x16.png +0 -0
  25. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/img/favicon-32x32.png +0 -0
  26. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/img/favicon.ico +0 -0
  27. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/README.md +0 -0
  28. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  29. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  30. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  31. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  32. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  33. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  34. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  35. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  36. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  37. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  38. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  39. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  40. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  41. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  42. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  43. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  44. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  45. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  46. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  47. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  48. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/config.js +0 -0
  49. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/ai/index.js +0 -0
  50. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/ai/lib/connector.js +0 -0
  51. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/couchbase/index.js +0 -0
  52. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/couchbase/lib/connector.js +0 -0
  53. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  54. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  55. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/couchbase/lib/n1ql.js +0 -0
  56. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/couchbase/lib/session-store.js +0 -0
  57. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  58. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  59. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/mongodb/index.js +0 -0
  60. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/mongodb/lib/connector.js +0 -0
  61. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  62. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/mongodb/lib/session-store.js +0 -0
  63. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/mysql/index.js +0 -0
  64. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/mysql/lib/connector.js +0 -0
  65. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/postgresql/index.js +0 -0
  66. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/postgresql/lib/connector.js +0 -0
  67. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/redis/index.js +0 -0
  68. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/redis/lib/session-store.js +0 -0
  69. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/scylladb/index.js +0 -0
  70. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/scylladb/lib/connector.js +0 -0
  71. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/scylladb/lib/session-store.js +0 -0
  72. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/sql-parser.js +0 -0
  73. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/sqlite/index.js +0 -0
  74. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/sqlite/lib/connector.js +0 -0
  75. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/connectors/sqlite/lib/session-store.js +0 -0
  76. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/content.encoding +0 -0
  77. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/controller.framework.js +0 -0
  78. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/controller.render-nunjucks-async.js +0 -0
  79. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/controller.render-nunjucks.js +0 -0
  80. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/controller.render-swig-async.js +0 -0
  81. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/controller.render-v1.js +0 -0
  82. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/index.js +0 -0
  83. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/controller/inspector-window-emit.js +0 -0
  84. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/busboy-1.6.0/LICENSE +0 -0
  85. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/busboy-1.6.0/README.md +0 -0
  86. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  87. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  88. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  89. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  90. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/busboy-1.6.0/package.json +0 -0
  91. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  92. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  93. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/deps/streamsearch-1.1.0/package.json +0 -0
  94. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/dev/index.js +0 -0
  95. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/dev/lib/class.js +0 -0
  96. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/dev/lib/factory.js +0 -0
  97. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/dev/lib/tools.js +0 -0
  98. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/gna.js +0 -0
  99. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/locales/README.md +0 -0
  100. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/locales/currency.json +0 -0
  101. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/locales/dist/language/en.json +0 -0
  102. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/locales/dist/language/fr.json +0 -0
  103. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/locales/dist/region/en.json +0 -0
  104. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/locales/dist/region/fr.json +0 -0
  105. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/locales/index.js +0 -0
  106. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/mime.types +0 -0
  107. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/model/entity.js +0 -0
  108. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/model/index.js +0 -0
  109. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/model/template/entityFactory.js +0 -0
  110. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/model/template/index.js +0 -0
  111. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/README.md +0 -0
  112. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/index.js +0 -0
  113. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/csrf/README.md +0 -0
  114. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/csrf/package.json +0 -0
  115. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/csrf/src/main.js +0 -0
  116. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/README.md +0 -0
  117. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/coep/README.md +0 -0
  118. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/coep/package.json +0 -0
  119. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  120. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/coop/README.md +0 -0
  121. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/coop/package.json +0 -0
  122. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  123. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/corp/README.md +0 -0
  124. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/corp/package.json +0 -0
  125. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  126. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/csp/README.md +0 -0
  127. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/csp/package.json +0 -0
  128. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  129. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  130. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  131. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  132. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  133. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  134. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  135. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  136. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  137. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  138. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/package.json +0 -0
  139. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  140. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  141. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  142. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/src/main.js +0 -0
  143. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  144. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  145. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  146. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  147. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  148. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  149. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  150. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  151. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  152. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  153. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  154. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  155. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  156. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  157. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  158. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  159. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  160. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  161. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/session/README.md +0 -0
  162. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/session/package.json +0 -0
  163. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/session/src/main.js +0 -0
  164. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/storage/README.md +0 -0
  165. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/storage/build.json +0 -0
  166. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/storage/package.json +0 -0
  167. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/storage/src/main.js +0 -0
  168. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/validator/README.md +0 -0
  169. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/validator/build.json +0 -0
  170. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/validator/package.json +0 -0
  171. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/validator/src/form-validator.js +0 -0
  172. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/plugins/lib/validator/src/main.js +0 -0
  173. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/router.js +0 -0
  174. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/server.express.js +0 -0
  175. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/server.isaac.js +0 -0
  176. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/server.js +0 -0
  177. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/status.codes +0 -0
  178. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/_gitignore +0 -0
  179. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/config/app.json +0 -0
  180. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  181. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/config/routing.json +0 -0
  182. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/config/settings.json +0 -0
  183. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  184. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/config/templates.json +0 -0
  185. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  186. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  187. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  188. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  189. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/index.js +0 -0
  190. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle/locales/en.json +0 -0
  191. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  192. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  193. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  194. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  195. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  196. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  197. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  198. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_public/readme.md +0 -0
  199. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_public/sw.js +0 -0
  200. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  201. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  202. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  203. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  204. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  205. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/command/gina.bat.tpl +0 -0
  206. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/command/gina.tpl +0 -0
  207. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/conf/env.json +0 -0
  208. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/conf/manifest.json +0 -0
  209. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/conf/package.json +0 -0
  210. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/conf/settings.json +0 -0
  211. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/conf/statics.json +0 -0
  212. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/conf/templates.json +0 -0
  213. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/error/client/json/401.json +0 -0
  214. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/error/client/json/403.json +0 -0
  215. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/error/client/json/404.json +0 -0
  216. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/error/server/html/50x.html +0 -0
  217. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/error/server/json/500.json +0 -0
  218. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/error/server/json/503.json +0 -0
  219. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/core/template/extensions/logger/config.json +0 -0
  220. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/console.js +0 -0
  221. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/context.js +0 -0
  222. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/data/LICENSE +0 -0
  223. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/data/README.md +0 -0
  224. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/data/package.json +0 -0
  225. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/data/src/main.js +0 -0
  226. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/dateFormat.js +0 -0
  227. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/index.js +0 -0
  228. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/json/LICENSE +0 -0
  229. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/json/README.md +0 -0
  230. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/json/package.json +0 -0
  231. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/json/src/main.js +0 -0
  232. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/path.js +0 -0
  233. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/plugins/README.md +0 -0
  234. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/plugins/package.json +0 -0
  235. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/plugins/src/api-error.js +0 -0
  236. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/plugins/src/main.js +0 -0
  237. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/prototypes.js +0 -0
  238. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/task.js +0 -0
  239. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/helpers/text.js +0 -0
  240. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/archiver/README.md +0 -0
  241. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/archiver/build.json +0 -0
  242. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/archiver/package.json +0 -0
  243. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/archiver/src/dep/jszip.min.js +0 -0
  244. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/archiver/src/main.js +0 -0
  245. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/async/package.json +0 -0
  246. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/async/src/main.js +0 -0
  247. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cache/README.md +0 -0
  248. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cache/build.json +0 -0
  249. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cache/package.json +0 -0
  250. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cache/src/main.js +0 -0
  251. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/aliases.json +0 -0
  252. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/add.js +0 -0
  253. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/arguments.json +0 -0
  254. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/build.js +0 -0
  255. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/copy.js +0 -0
  256. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/cp.js +0 -0
  257. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/help.js +0 -0
  258. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/help.txt +0 -0
  259. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  260. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/list.js +0 -0
  261. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/mcp-start.js +0 -0
  262. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/mcp.js +0 -0
  263. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/oas.js +0 -0
  264. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/openapi.js +0 -0
  265. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/remove.js +0 -0
  266. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/rename.js +0 -0
  267. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/restart.js +0 -0
  268. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/rm.js +0 -0
  269. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/start.js +0 -0
  270. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/status.js +0 -0
  271. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/bundle/stop.js +0 -0
  272. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/cache/stats.js +0 -0
  273. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/connector/add.js +0 -0
  274. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/connector/arguments.json +0 -0
  275. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/connector/help.js +0 -0
  276. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/connector/help.txt +0 -0
  277. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/connector/list.js +0 -0
  278. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/connector/migrate.js +0 -0
  279. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/connector/remove.js +0 -0
  280. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/connector/rm.js +0 -0
  281. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/add.js +0 -0
  282. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/get.js +0 -0
  283. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/help.js +0 -0
  284. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/help.txt +0 -0
  285. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/link-dev.js +0 -0
  286. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/list.js +0 -0
  287. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/remove.js +0 -0
  288. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/rm.js +0 -0
  289. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/set.js +0 -0
  290. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/unset.js +0 -0
  291. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/env/use.js +0 -0
  292. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/arguments.json +0 -0
  293. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/build.js +0 -0
  294. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/dot.js +0 -0
  295. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/get.js +0 -0
  296. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/help.js +0 -0
  297. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/help.txt +0 -0
  298. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/init.js +0 -0
  299. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/link-node-modules.js +0 -0
  300. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/link.js +0 -0
  301. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/msg.json +0 -0
  302. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/open.js +0 -0
  303. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/restart.js +0 -0
  304. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/set.js +0 -0
  305. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/start.js +0 -0
  306. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/status.js +0 -0
  307. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/stop.js +0 -0
  308. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/tail.js +0 -0
  309. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/update.js +0 -0
  310. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/framework/version.js +0 -0
  311. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/gina-dev.1.md +0 -0
  312. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/gina-framework.1.md +0 -0
  313. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/gina.1.md +0 -0
  314. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/helper.js +0 -0
  315. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/i18n/add.js +0 -0
  316. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/i18n/arguments.json +0 -0
  317. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/i18n/export.js +0 -0
  318. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/i18n/help.js +0 -0
  319. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/i18n/help.txt +0 -0
  320. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/i18n/import.js +0 -0
  321. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/i18n/scan.js +0 -0
  322. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/index.js +0 -0
  323. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/inspector/help.js +0 -0
  324. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/inspector/open.js +0 -0
  325. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/minion/arguments.json +0 -0
  326. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/minion/help.js +0 -0
  327. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/minion/help.txt +0 -0
  328. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/minion/kill.js +0 -0
  329. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/minion/list.js +0 -0
  330. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/msg.json +0 -0
  331. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/port/help.js +0 -0
  332. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/port/help.txt +0 -0
  333. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/port/inc/scan.js +0 -0
  334. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/port/list.js +0 -0
  335. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/port/reset.js +0 -0
  336. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/port/set.js +0 -0
  337. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/add.js +0 -0
  338. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/arguments.json +0 -0
  339. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/build.js +0 -0
  340. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/help.js +0 -0
  341. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/help.txt +0 -0
  342. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/import.js +0 -0
  343. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/list.js +0 -0
  344. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/move.js +0 -0
  345. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/remove.js +0 -0
  346. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/rename.js +0 -0
  347. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/restart.js +0 -0
  348. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/rm.js +0 -0
  349. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/start.js +0 -0
  350. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/status.js +0 -0
  351. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/project/stop.js +0 -0
  352. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/protocol/arguments.json +0 -0
  353. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/protocol/help.js +0 -0
  354. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/protocol/help.txt +0 -0
  355. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/protocol/list.js +0 -0
  356. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/protocol/remove.js +0 -0
  357. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/protocol/set.js +0 -0
  358. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/scope/add.js +0 -0
  359. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/scope/help.js +0 -0
  360. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/scope/help.txt +0 -0
  361. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/scope/link-local.js +0 -0
  362. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/scope/link-production.js +0 -0
  363. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/scope/list.js +0 -0
  364. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/scope/remove.js +0 -0
  365. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/scope/rm.js +0 -0
  366. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/scope/use.js +0 -0
  367. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/secrets/arguments.json +0 -0
  368. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/secrets/check.js +0 -0
  369. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/secrets/help.js +0 -0
  370. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/secrets/help.txt +0 -0
  371. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/secrets/scan.js +0 -0
  372. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/service/help.js +0 -0
  373. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/service/help.txt +0 -0
  374. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/service/list.js +0 -0
  375. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/service/start.js +0 -0
  376. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd/view/add.js +0 -0
  377. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd-status-format/package.json +0 -0
  378. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cmd-status-format/src/main.js +0 -0
  379. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/collection/README.md +0 -0
  380. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/collection/build.json +0 -0
  381. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/collection/package.json +0 -0
  382. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/collection/src/main.js +0 -0
  383. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/config.js +0 -0
  384. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/connector-registry/package.json +0 -0
  385. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/connector-registry/src/main.js +0 -0
  386. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cron/README.md +0 -0
  387. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cron/package.json +0 -0
  388. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/cron/src/main.js +0 -0
  389. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/domain/LICENSE +0 -0
  390. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/domain/README.md +0 -0
  391. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/domain/package.json +0 -0
  392. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/domain/src/main.js +0 -0
  393. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/generator/index.js +0 -0
  394. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/i18n/package.json +0 -0
  395. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/i18n/src/main.js +0 -0
  396. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/index.js +0 -0
  397. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/inherits/LICENSE +0 -0
  398. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/inherits/README.md +0 -0
  399. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/inherits/package.json +0 -0
  400. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/inherits/src/main.js +0 -0
  401. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/inspector-redact/package.json +0 -0
  402. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/inspector-redact/src/main.js +0 -0
  403. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/instrument/package.json +0 -0
  404. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/instrument/src/main.js +0 -0
  405. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/job/package.json +0 -0
  406. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/job/src/main.js +0 -0
  407. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/README.md +0 -0
  408. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/package.json +0 -0
  409. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/src/containers/default/index.js +0 -0
  410. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/src/containers/file/index.js +0 -0
  411. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  412. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  413. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/src/containers/mq/index.js +0 -0
  414. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/src/containers/mq/listener.js +0 -0
  415. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/src/containers/mq/speaker.js +0 -0
  416. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/src/helper.js +0 -0
  417. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/logger/src/main.js +0 -0
  418. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/math/index.js +0 -0
  419. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/mcp-dispatch/package.json +0 -0
  420. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/mcp-dispatch/src/main.js +0 -0
  421. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/mcp-http/package.json +0 -0
  422. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/mcp-http/src/main.js +0 -0
  423. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/mcp-server/package.json +0 -0
  424. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/mcp-server/src/main.js +0 -0
  425. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/merge/README.md +0 -0
  426. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/merge/package.json +0 -0
  427. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/merge/src/main.js +0 -0
  428. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/metrics/package.json +0 -0
  429. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/metrics/src/main.js +0 -0
  430. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/model.js +0 -0
  431. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/nunjucks-filters/README.md +0 -0
  432. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/nunjucks-filters/package.json +0 -0
  433. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/nunjucks-filters/src/main.js +0 -0
  434. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/nunjucks-resolver/package.json +0 -0
  435. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/nunjucks-resolver/src/main.js +0 -0
  436. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/proc.js +0 -0
  437. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/routing/README.md +0 -0
  438. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/routing/build.json +0 -0
  439. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/routing/package.json +0 -0
  440. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/routing/src/main.js +0 -0
  441. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/routing/src/radix.js +0 -0
  442. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/routing-introspect/package.json +0 -0
  443. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/routing-introspect/src/main.js +0 -0
  444. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/secrets/package.json +0 -0
  445. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/secrets/src/backends/env.js +0 -0
  446. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/secrets/src/main.js +0 -0
  447. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/session-store.js +0 -0
  448. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/shell.js +0 -0
  449. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/state.js +0 -0
  450. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/swig-filters/README.md +0 -0
  451. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/swig-filters/package.json +0 -0
  452. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/swig-filters/src/main.js +0 -0
  453. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/swig-resolver/package.json +0 -0
  454. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/swig-resolver/src/main.js +0 -0
  455. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/template-loaders/package.json +0 -0
  456. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/template-loaders/src/loaders/http.js +0 -0
  457. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/template-loaders/src/loaders/memory.js +0 -0
  458. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/template-loaders/src/main.js +0 -0
  459. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/url/README.md +0 -0
  460. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/url/index.js +0 -0
  461. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/url/routing.json +0 -0
  462. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/uuid/package.json +0 -0
  463. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/uuid/src/main.js +0 -0
  464. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/validator.js +0 -0
  465. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/watcher/package.json +0 -0
  466. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/watcher/src/main.js +0 -0
  467. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/ws-framing/package.json +0 -0
  468. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/ws-framing/src/main.js +0 -0
  469. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/ws-session/package.json +0 -0
  470. /package/framework/{v0.5.2-alpha.1 → v0.5.2}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,14 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
6
6
  and is generated by [Changie](https://github.com/miniscruff/changie).
7
7
 
8
8
 
9
+ ## 0.5.2 - 2026-06-13
10
+ ### Fixed
11
+ * Fixed an inter-bundle self.query() over HTTP/2 reporting an upstream 502 as success once its retries were exhausted: the 502 response body was handed to the query callback as if it were valid data (and a JSON-shaped body was even relabelled with status 200), so a caller could silently consume a Bad Gateway error page as a real response. Exhausted 502s now surface a typed error to the caller (status 502, code BAD_GATEWAY), matching how timeout, stream-error, and premature-close exhaustion are already reported; non-critical queries still swallow it. (#B34)
12
+ * Fixed five synchronous controller helpers (isPopinContext, setRequestMethod, setRequestMethodParams, getRequestMethodParams, getFormsRules) crashing the bundle when called after the response was already released. A controller action that keeps running after self.redirect() (which releases the per-request response and lets the middleware chain continue) and then calls one of these helpers dereferenced the released request and threw, escalating to an uncaughtException and a SIGTERM bundle shutdown. Each now returns a safe default (false / null / {}) on a released request, matching the released-response guards already on the query and throwError paths. (#B35)
13
+ * Fixed renderJSON() crashing the bundle when called after the response was already released. A controller action that keeps running after self.redirect() (which releases the per-request response and lets the middleware chain continue) and then calls self.renderJSON() dereferenced the released response and threw synchronously, escalating to an uncaughtException and a SIGTERM bundle shutdown. renderJSON() now no-ops on a released response, matching the released-response guards already on the query, throwError and the other controller helpers. (#B36)
14
+ * Fixed self.redirect() crashing the bundle when called after the response was already released. redirect() is synchronous and reads the request/response throughout, so a controller that hits a terminal exit (a prior redirect, or a render-error path) and then calls self.redirect() again dereferenced the released request and threw synchronously, escalating to an uncaughtException and a SIGTERM bundle shutdown. redirect() now no-ops on a released response, matching the guards already on the query, throwError, renderJSON and the other controller helpers. (#B37)
15
+ * Fixed six more controller methods crashing the bundle when called on a response that a terminal exit had already released. downloadFromLocal, store(target).onComplete(cb), renderStream, push, pauseRequest and resumeRequest each synchronously dereference the per-request request/response, so a controller that hits a terminal exit (for example a redirect that then lets the middleware chain continue) and later calls one of them dereferenced the released refs and threw synchronously, escalating to an uncaughtException and a SIGTERM bundle shutdown. Each now no-ops (or notifies through its existing callback/event channel) on a released response, matching the guards already on redirect, throwError, renderJSON and the other controller helpers; live requests are byte-for-byte unaffected. (#B38)
16
+
9
17
  ## 0.5.1 - 2026-06-12
10
18
  ### Added
11
19
  * Stable publishes now run a ROADMAP.md consistency gate (script/check_roadmap_consistency.js, wired into the release prepare step alongside the README freshness gate). The publish aborts when an open roadmap row still references the exact version being released (the row would become stale the moment the tag lands) or when a done row is labelled with a version newer than the one shipping; a missing "released" timeline mark is surfaced as a warning only. Alpha publishes skip the gate.
package/README.md CHANGED
@@ -39,12 +39,10 @@ gina bundle:start api @myproject
39
39
  open https://localhost:3100
40
40
  ```
41
41
 
42
- ## What's in 0.5.1
42
+ ## What's in 0.5.2
43
43
 
44
- - **Released-response crash family fixed (bundle-killing).** A late `throwError()` after the response was already sent — e.g. an entity or query callback resuming after a `redirect()` had already issued its 301 dereferenced the released response, escalating to an `uncaughtException` and a SIGTERM bundle shutdown that dropped every in-flight request. Late calls now log the swallowed error and no-op. The same guard family covers the HTTP/2 inter-bundle query paths: retry re-entries, late upstream responses, and both 3xx redirect intercepts no longer crash when the originating request has already terminated.
45
- - **Dev-mode hot-reload memory leak fixed.** The per-request hot-reload eviction cycles retained ~1.8 MB of live heap per request through dead `module.children` references, killing heavily-loaded dev bundles with a heap-limit OOM. Both cycles now prune stale module references after eviction; production mode was never affected.
46
- - **Inter-bundle proxy Content-Type fix.** `query()` over HTTP/2 no longer re-labels the raw-JSON body it serializes itself with the incoming request's Content-Type — a urlencoded browser POST proxied between bundles no longer corrupts `+`/`%XX` sequences inside JSON string values.
47
- - **ROADMAP consistency release gate.** Stable publishes now abort when a roadmap row is stale relative to the version being released, alongside the existing README freshness gate.
44
+ - **Released-response crash family completed across the synchronous controller surface (bundle-killing).** Building on the `throwError()` and HTTP/2 query-path guards in 0.5.1, thirteen more synchronous controller APIs `renderJSON()`, `redirect()`, `store()`, `push()`, `renderStream()`, `pauseRequest()` / `resumeRequest()`, `downloadFromLocal()`, and the request-method / popin / form-rule helpers no longer crash the bundle when a controller action keeps running after a terminal exit (typically a `redirect()` that lets the middleware chain continue) and then dereferences the already-released request or response. Each now no-ops or notifies through its existing callback/event channel instead of escalating to an `uncaughtException` and a SIGTERM shutdown; live requests are byte-for-byte unaffected.
45
+ - **Exhausted HTTP/2 502 retries now surface a typed error instead of success.** An inter-bundle `self.query()` over HTTP/2 that exhausted its retries against an upstream returning 502 used to hand the Bad Gateway response body to the caller as if it were valid data (a JSON-shaped body was even relabelled `status: 200`). Exhausted 502s now surface `status: 502`, `code: BAD_GATEWAY` to the caller, matching how timeout, stream-error, and premature-close exhaustion are already reported; non-critical queries still swallow it.
48
46
 
49
47
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
50
48
 
package/ROADMAP.md CHANGED
@@ -26,6 +26,7 @@ This roadmap covers planned features, architectural improvements, new connectors
26
26
  | **Q2 2026** | `0.4.0` ✅ | Couchbase v2 removal (BREAKING — SDK v2 connector + session store dropped) · HTTP/2 response trailers · async-job primitive · CSP per-response nonce · `secrets:scan` / `secrets:check` CLI · SQL column-level index coverage — of the items originally targeted here: AI agents (MCP) shipped `0.3.7`, ScyllaDB `0.3.11`, CLI Tier 2 `0.4.1`, the docs offline ZIP is live on the docs site, and the Advanced tutorial · website redesign · Bun investigation moved to `0.5.x` |
27
27
  | **Q2 2026** | `0.5.0` ✅ | ESM entry points (dual CJS/ESM `exports` map) · Mixed template engines per bundle (extension-keyed `.njk` / `.swig` dispatch) · Nunjucks Inspector parity — the other items originally targeted here shipped earlier: structured logging (`0.4.5`), Alt-Svc (`0.4.2`), WebSocket over HTTP/2 (`0.4.7`), Inspector production auth (`0.4.0`) |
28
28
  | **Q2 2026** | `0.5.1` ✅ | Patch: released-response crash family — late `throwError()` and the HTTP/2 inter-bundle query retry / late-response / redirect-intercept paths no longer kill the bundle · dev-mode hot-reload `module.children` heap leak fixed (OOM under sustained load) · inter-bundle proxy JSON bodies keep their `application/json` label · ROADMAP consistency release gate |
29
+ | **Q2 2026** | `0.5.2` ✅ | Patch: released-response crash family completed across the remaining synchronous controller surface — `renderJSON()` / `redirect()` / `store()` / `push()` / `renderStream()` / request-method + form-rule helpers no longer kill the bundle when called on an already-released response · exhausted HTTP/2 502 retries surface a typed `BAD_GATEWAY` error instead of being consumed as success |
29
30
  | **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · CLI Tier 3 (project:move, framework:update, backup/restore, man pages) · Beemaster admin + visual translation editor |
30
31
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
31
32
 
@@ -0,0 +1 @@
1
+ 0.5.2
@@ -2690,7 +2690,7 @@
2690
2690
  break;
2691
2691
 
2692
2692
  case 'io':
2693
- // "query → coreapi" → "→ coreapi"
2693
+ // "query → api" → "→ api"
2694
2694
  name = label.replace(/^query\s*/, '');
2695
2695
  break;
2696
2696
 
@@ -285,7 +285,7 @@ function SuperController(options) {
285
285
  // Activated when the Inspector is open locally (_inspectorActive) OR when
286
286
  // the request came from a cross-bundle self.query() call with the Inspector
287
287
  // header (x-gina-inspector). This ensures QI captures queries on target
288
- // bundles (e.g. coreapi) without always-on overhead.
288
+ // bundles (e.g. an upstream API bundle) without always-on overhead.
289
289
  // #INS10 — also enter capture during a prod instrumentation window. Window-only in prod:
290
290
  // the x-gina-inspector header path still requires _isDev, so a spoofed header cannot
291
291
  // trigger capture in production (only an explicitly-opened window does).
@@ -1341,6 +1341,13 @@ function SuperController(options) {
1341
1341
  * @returns {boolean}
1342
1342
  */
1343
1343
  this.isPopinContext = function() {
1344
+ // #B35 — released-response guard (see getSession, #B31/#B33): a terminal exit
1345
+ // (e.g. redirect-then-continue) nulls local.req; reading local.req.headers here
1346
+ // would crash the bundle (uncaughtException → SIGTERM). A released request is
1347
+ // not a popin context.
1348
+ if ( local.req == null ) {
1349
+ return false;
1350
+ }
1344
1351
  return (
1345
1352
  typeof(local.req.headers['x-gina-popin-id']) != 'undefined'
1346
1353
  || typeof(local.req.headers['x-gina-popin-name']) != 'undefined'
@@ -1820,6 +1827,11 @@ function SuperController(options) {
1820
1827
  */
1821
1828
  var localRequestMethod = null, localRequestMethodParams = null;
1822
1829
  this.setRequestMethod = function(requestMethod, conf) {
1830
+ // #B35 — released-response guard (see getSession): skip on a released request;
1831
+ // reading the request method / routing here would crash the bundle.
1832
+ if ( local.req == null ) {
1833
+ return null;
1834
+ }
1823
1835
  // http/2 case
1824
1836
  if ( /http\/2/i.test(conf.server.protocolShort) ) {
1825
1837
  local.req.headers[':method'] = local.req.method.toUpperCase()
@@ -1848,6 +1860,10 @@ function SuperController(options) {
1848
1860
  * @returns {void}
1849
1861
  */
1850
1862
  this.setRequestMethodParams = function(params) {
1863
+ // #B35 — released-response guard: skip the local.req write on a released request.
1864
+ if ( local.req == null ) {
1865
+ return;
1866
+ }
1851
1867
  localRequestMethodParams = local.req[local.req.method.toLowerCase()] = localRequestMethodParams = params
1852
1868
  }
1853
1869
 
@@ -1858,6 +1874,10 @@ function SuperController(options) {
1858
1874
  * @returns {object}
1859
1875
  */
1860
1876
  this.getRequestMethodParams = function() {
1877
+ // #B35 — released-response guard: return the cached value without dereferencing local.req.
1878
+ if ( local.req == null ) {
1879
+ return localRequestMethodParams;
1880
+ }
1861
1881
  return (localRequestMethodParams) ? localRequestMethodParams : local.req[local.req.method.toLowerCase()]
1862
1882
  }
1863
1883
 
@@ -1976,6 +1996,14 @@ function SuperController(options) {
1976
1996
  * @callback [ next ]
1977
1997
  * */
1978
1998
  this.redirect = function(req, res, next) {
1999
+ // #B37 — released-response guard (see getSession / #B31/#B35/#B36): redirect is
2000
+ // synchronous and reads local.req/local.res throughout; a terminal exit (a prior
2001
+ // redirect, or a render-error path) nulls the triplet, and a second redirect on
2002
+ // the released instance would crash the bundle (uncaughtException → SIGTERM).
2003
+ // Nothing to redirect once the response was already sent/released.
2004
+ if ( local.req == null ) {
2005
+ return;
2006
+ }
1979
2007
  var conf = self.getConfig();
1980
2008
  var bundle = conf.bundle;
1981
2009
  var env = conf.env;
@@ -2626,7 +2654,7 @@ function SuperController(options) {
2626
2654
  // Override for local scope when switching env
2627
2655
  if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
2628
2656
  var ctx = getContext();
2629
- var envHostname = ctx.gina.config.envConf['coreapi'][ctx.env].hostname;
2657
+ var envHostname = ctx.gina.config.envConf['api'][ctx.env].hostname;
2630
2658
  var re = new RegExp('^'+ envHostname);
2631
2659
  if (!re.test(file.url) ) {
2632
2660
  var urlHostname = file.url.match(/^[a-z]+:\/\/[^/:]+(?::\d+)?/)[0];
@@ -2661,6 +2689,15 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
2661
2689
  **/
2662
2690
  this.downloadFromLocal = function(filename) {
2663
2691
 
2692
+ // #B38 — released-response guard (see #B31): a terminal exit (redirect()/
2693
+ // renderTEXT()/throwError()/a render-error path) nulled the per-request refs.
2694
+ // downloadFromLocal is terminal — it streams a file as the response — so a
2695
+ // released instance means the response is already out; a no-op return is correct
2696
+ // (a live request is unaffected: the guard is skipped while the refs exist).
2697
+ if ( local.res == null ) {
2698
+ return;
2699
+ }
2700
+
2664
2701
  var file = filename.split(/\//g).pop();
2665
2702
  var ext = file.split(/\./g).pop()
2666
2703
  , contentType = null
@@ -2708,6 +2745,18 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
2708
2745
  var cb = arguments[1];
2709
2746
  }
2710
2747
 
2748
+ // #B38 — released-response guard (see #B31): the documented
2749
+ // `store(target).onComplete(cb)` form calls start() SYNCHRONOUSLY from the
2750
+ // returned wrapper, OUTSIDE the async store() body, so on a released request
2751
+ // (the per-request refs nulled by a terminal exit) this is a SIGTERM bundle
2752
+ // kill — not the non-fatal async class. Notify through the same cb / 'uploaded'
2753
+ // channel the empty-upload path uses, then bail.
2754
+ if ( local.req == null ) {
2755
+ var _releasedErr = new Error('Controller::store — response already released');
2756
+ if (cb) { cb(_releasedErr); } else { self.emit('uploaded', _releasedErr); }
2757
+ return;
2758
+ }
2759
+
2711
2760
  if ( typeof(files) == 'undefined' || typeof(files) == 'function' ) {
2712
2761
  files = local.req.files
2713
2762
  }
@@ -4162,7 +4211,7 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4162
4211
  if (req.aborted || req.destroyed) {
4163
4212
  data = { status: 500, error: new Error('Request aborted by client or server') };
4164
4213
  } else {
4165
- // Might be a 204 No Content, but usually CoreAPI should return {}
4214
+ // Might be a 204 No Content, but usually the upstream bundle should return {}
4166
4215
  console.warn('[HTTP2] Empty response received');
4167
4216
  data = { status: 200, empty: true };
4168
4217
  }
@@ -4184,6 +4233,28 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4184
4233
  handleHTTP2ClientRequest(browser, options, callback, _502Next, isCritical);
4185
4234
  }, 2000);
4186
4235
  return;
4236
+ } else if (httpStatus === 502) {
4237
+ // #B34 — all retries exhausted on a 502: surface it as an error instead of
4238
+ // falling through to the success path (which silently delivered the 502 body
4239
+ // to the caller as `callback(false, data)` / `query#complete(false, data)`,
4240
+ // and for a JSON-shaped body even logged "switching to 200" and forced
4241
+ // data.status = 200). Mirrors the timeout / stream-error / premature-close
4242
+ // exhaustion branches; status 502 is the truthful upstream status (the
4243
+ // GinaHttp2Error JSDoc already lists code BAD_GATEWAY / status 502).
4244
+ var _badGatewayErr = new GinaHttp2Error('[HTTP2] 502 Bad Gateway from '+ options[':authority'] + options[':path'] +' (exhausted '+ HTTP2_MAX_RETRIES +' retries)', {
4245
+ code : 'BAD_GATEWAY',
4246
+ retryable : false,
4247
+ status : 502,
4248
+ retryCount : retryCount
4249
+ });
4250
+ // H3: if non-critical, swallow and return
4251
+ if (_swallowIfNonCritical(_badGatewayErr)) return;
4252
+ if (typeof callback !== 'undefined') {
4253
+ callback(_badGatewayErr);
4254
+ } else {
4255
+ self.emit('query#complete', { status: 502, error: _badGatewayErr });
4256
+ }
4257
+ return;
4187
4258
  }
4188
4259
 
4189
4260
  // 3. Exception filter for ALPN or protocol mismatches
@@ -4236,7 +4307,7 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4236
4307
  }
4237
4308
  // #QI — extract upstream query log from the response and
4238
4309
  // merge into the current request's log. This surfaces
4239
- // coreapi queries in the dashboard Inspector automatically.
4310
+ // upstream-bundle queries in the calling bundle's Inspector automatically.
4240
4311
  // #INS10 — extract + strip the upstream query sidecar during a prod window too.
4241
4312
  if (((process.gina && process.gina._inspectorWindowUntil > Date.now()) || _isDev) && data && data.__ginaQueries && local._queryLog) {
4242
4313
  for (var _qi = 0; _qi < data.__ginaQueries.length; _qi++) {
@@ -4842,6 +4913,11 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4842
4913
  *
4843
4914
  * */
4844
4915
  this.getFormsRules = function () {
4916
+ // #B35 — released-response guard: no form rules to resolve on a released request
4917
+ // (reading the request's gina headers would crash the bundle).
4918
+ if ( local.req == null ) {
4919
+ return {};
4920
+ }
4845
4921
  var bundle = local.options.conf.bundle; // by default
4846
4922
  var form = null;
4847
4923
  var rule = null;
@@ -4893,6 +4969,14 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4893
4969
  */
4894
4970
  this.push = function(payload, option, callback) {
4895
4971
 
4972
+ // #B38 — released-response guard (see #B31): push is a fire-and-forget broadcast
4973
+ // over the SSE/engine.io clients; on a released request (per-request refs nulled by
4974
+ // a terminal exit) a no-op return is correct — the response this request would have
4975
+ // pushed to is already gone. Live requests are unaffected (guard skipped).
4976
+ if ( local.req == null ) {
4977
+ return;
4978
+ }
4979
+
4896
4980
  var req = local.req, res = local.res;
4897
4981
  var method = req.method.toLowerCase();
4898
4982
  // if no session defined, will push to all active clients
@@ -5018,6 +5102,13 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5018
5102
  */
5019
5103
  this.pauseRequest = function(data, requestStorage) {
5020
5104
 
5105
+ // #B38 — released-response guard (see #B31): pauseRequest snapshots the current
5106
+ // request before a login redirect; on a released request (per-request refs nulled
5107
+ // by a terminal exit) there is nothing to snapshot — a no-op return is correct.
5108
+ // Live requests are unaffected (guard skipped while the refs exist).
5109
+ if ( local.req == null ) {
5110
+ return;
5111
+ }
5021
5112
 
5022
5113
  // saving halted request
5023
5114
  var req = local.req
@@ -5081,6 +5172,14 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5081
5172
  if (local.haltedRequestUrlResumed)
5082
5173
  return;
5083
5174
 
5175
+ // #B38 — released-response guard (see #B31): resumeRequest replays a halted
5176
+ // request against the live request/response; on a released request (per-request
5177
+ // refs nulled by a terminal exit) there is nothing to replay onto — a no-op return
5178
+ // is correct. Live requests are unaffected (guard skipped while the refs exist).
5179
+ if ( local.req == null ) {
5180
+ return;
5181
+ }
5182
+
5084
5183
  var haltedRequest = null
5085
5184
  , req = local.req
5086
5185
  , res = local.res
@@ -5568,7 +5667,7 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5568
5667
 
5569
5668
  if ( errorObject && errorObject != 'null' && /object/i.test(typeof(errorObject)) ) {
5570
5669
  // replaced: (errorObject.stack||errorObject.message) — both may be undefined for plain
5571
- // object errors forwarded from query() (e.g. coreapi non-2xx). Fall back to serializing
5670
+ // object errors forwarded from query() (e.g. an upstream non-2xx). Fall back to serializing
5572
5671
  // errorObject.error so the log always contains the failure reason. (#Q1)
5573
5672
  // When no stack is present on the error object, capture the throwError callsite so the
5574
5673
  // log always shows which controller method caused the error. (#Q1)
@@ -154,6 +154,15 @@ module.exports = function renderJSON(jsonObj, deps) {
154
154
  return;
155
155
  }
156
156
 
157
+ // #B36 — released-response guard: a terminal exit (e.g. redirect-then-continue,
158
+ // which nulls local.req/res/next then lets the middleware chain continue) leaves
159
+ // local.res null; the synchronous `local.res.stream` read below would then crash
160
+ // the bundle (uncaughtException → SIGTERM, the #B31/#B33/#B35 class). There is
161
+ // nothing to render to a response that was already sent/released.
162
+ if ( local.res == null ) {
163
+ return;
164
+ }
165
+
157
166
  // Using server cache to cache compiledTemplates
158
167
  cache.from(self.serverInstance._cached);
159
168
  cachePath = self.serverInstance._cachePath;
@@ -412,7 +421,7 @@ module.exports = function renderJSON(jsonObj, deps) {
412
421
  return response.end(data);
413
422
  }
414
423
  // normal case
415
- // E.g.: Caching result for document-get-all@coreapi
424
+ // E.g.: Caching result for document-get-all@api
416
425
  if (
417
426
  !self.isCacheless()
418
427
  && typeof(request.routing.cache) != 'undefined'
@@ -42,6 +42,15 @@ module.exports = function renderStream(asyncIterable, contentType, deps) {
42
42
  if (local.options.renderingStack.length > 1) return false;
43
43
  if (self.isProcessingError) return;
44
44
 
45
+ // #B38 — released-response guard (see #B31 / #B36): a terminal exit (redirect() /
46
+ // renderTEXT() / throwError()) nulled the per-request refs before this stream began.
47
+ // renderStream's wrapper and this delegate are BOTH synchronous, so the read below
48
+ // would throw synchronously → uncaughtException → SIGTERM. The read happens BEFORE the
49
+ // headersSent() guard further down, so check here — mirrors render-json.js's #B36
50
+ // placement (after isProcessingError, before the first local.res deref). Behaviour-
51
+ // neutral on live requests (guard skipped while the refs exist).
52
+ if (local.res == null) return;
53
+
45
54
  var response = local.res;
46
55
  var stream = (typeof(response.stream) !== 'undefined') ? response.stream : null;
47
56
  // #H10 — opt-in HTTP/2 response trailers (registered via self.sendTrailers()).
@@ -657,7 +657,7 @@ module.exports = async function render(userData, displayInspector, errOptions, d
657
657
  var errorObject = {
658
658
  status : data.page.data.status,
659
659
  // replaced: statusCodes[data.page.data.status] first — always truthy for known
660
- // codes, so actual coreapi error reason was always buried. Prioritize the actual
660
+ // codes, so the actual upstream error reason was always buried. Prioritize the actual
661
661
  // error/message from the upstream response; fall back to generic status label. (#Q1)
662
662
  // Normalized to string before use — upstream objects would otherwise render as
663
663
  // "[object Object]". (#Q2)
@@ -35,7 +35,7 @@
35
35
 
36
36
  gina inspector:open Open for default bundle on port 3100
37
37
  gina inspector:open demo @myproject Open for bundle "demo" (uses settings.inspector.url if set)
38
- gina inspector:open coreapi @myotherproject Bundle on a project other than @gina
38
+ gina inspector:open backend @myotherproject Bundle on a project other than @gina
39
39
  gina inspector:open https://local.example.com/api/
40
40
  URL target — Inspector SPA opens with that origin
41
41
  gina inspector:open --port=3200 Open for a specific port (embedded)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gina-framework",
3
- "version": "0.5.2-alpha.1",
3
+ "version": "0.5.2-alpha.2",
4
4
  "dependencies": {
5
5
  "@rhinostone/swig": "^2.7.2",
6
6
  "intl-messageformat": "^11.2.4",
package/gna.js CHANGED
@@ -15,14 +15,14 @@
15
15
  'use strict';
16
16
 
17
17
  // Framework core — the main gna module (lifecycle hooks, lib, etc.)
18
- var _gna = require('./framework/v0.5.2-alpha.1/core/gna');
18
+ var _gna = require('./framework/v0.5.2/core/gna');
19
19
 
20
20
  // SuperController and EntitySuper — loaded from their source modules
21
- var SuperController = require('./framework/v0.5.2-alpha.1/core/controller');
22
- var EntitySuper = require('./framework/v0.5.2-alpha.1/core/model/entity');
21
+ var SuperController = require('./framework/v0.5.2/core/controller');
22
+ var EntitySuper = require('./framework/v0.5.2/core/model/entity');
23
23
 
24
24
  // uuid — from the lib registry
25
- var uuid = require('./framework/v0.5.2-alpha.1/lib/uuid');
25
+ var uuid = require('./framework/v0.5.2/lib/uuid');
26
26
 
27
27
  module.exports = {
28
28
 
package/llms.txt CHANGED
@@ -410,7 +410,9 @@ Counters are live — no restart required. `activeSessions` is bounded by ≥ 0.
410
410
  | `HTTP2_PREFLIGHT_STALE_MS` | 3000 | Session age threshold before pre-flight PING |
411
411
  | `HTTP2_PREFLIGHT_DEADLINE_MS` | 1500 | Pre-flight PING timeout |
412
412
 
413
- `GinaHttp2Error` codes: `TIMEOUT`, `PREMATURE_CLOSE`, `STREAM_ERROR`, `ECONNRESET`, `ECONNREFUSED`, `PREFLIGHT_TIMEOUT`, `PREFLIGHT_FAILED`. `ECONNREFUSED` is never retried. `retryCount` tracks attempts; `retriedOnce` is derived from `retryCount > 0`.
413
+ `GinaHttp2Error` codes: `TIMEOUT`, `PREMATURE_CLOSE`, `STREAM_ERROR`, `ECONNRESET`, `ECONNREFUSED`, `BAD_GATEWAY`, `PREFLIGHT_TIMEOUT`, `PREFLIGHT_FAILED`. `ECONNREFUSED` is never retried. `retryCount` tracks attempts; `retriedOnce` is derived from `retryCount > 0`.
414
+
415
+ **Exhausted retryable errors must SURFACE, never fall through to the success path (#B34, 2026-06-13).** Every retryable failure (timeout / stream-error / premature-close / preflight) builds a typed `GinaHttp2Error` on exhaustion and reports it via `callback(err)` / `emit('query#complete', {status, error})`. The 502 path was the lone exception: its retry guard (`httpStatus === 502 && retryCount < HTTP2_MAX_RETRIES`) was the ONLY consumer of the captured upstream transport status (`httpStatus`), so once retries were spent the guard simply declined and control fell through to normal response handling — `callback(false, data)` — delivering the 502 body to the caller as SUCCESS (a JSON-shaped 502 body even hit the legitimate "undefined body-status → 200" fallback and was relabelled `status: 200`; an HTML 502 page was passed through as the "data"). The bug is the gap between the TRANSPORT status (`httpStatus`, from the `:status` HEADERS frame) and the BODY status (`data.status`, from the JSON payload) — they were never reconciled. Fix: an `else if (httpStatus === 502)` branch surfaces a `BAD_GATEWAY` / `status: 502` `GinaHttp2Error` (truthful upstream status; `_swallowIfNonCritical` still applies). Measured by driving the real `query()` against an always-502 h2c server (both JSON-body and HTML-body variants → success pre-fix, error post-fix). Tests: `controller.test.js §24`.
414
416
 
415
417
  **GOAWAY logging** — when a cached HTTP/2 session receives a GOAWAY frame, the handler logs `console.warn('[http2] GOAWAY received — errorCode: X, lastStreamID: Y, session: Z')`. `errorCode` distinguishes clean server restarts (0 = NO_ERROR) from protocol errors (e.g. 1 = PROTOCOL_ERROR, 11 = ENHANCE_YOUR_CALM). `lastStreamID` indicates which streams were processed before the GOAWAY.
416
418
 
@@ -842,7 +844,7 @@ Dev-mode query instrumentation captures every database query tied to the current
842
844
  - **`req.routing.param.<key>` ≠ URL value — use `req.params.<key>`** — `req.routing.param` holds the raw routing config object from `routing.json`. For URL parameter bindings like `"id": ":id"`, the value stored there is the literal placeholder string `":id"`, not the actual URL segment. The actual captured value is in `req.params.id` (always available) and `req.get.id` / `req.delete.id` etc. (method-specific). Static values declared in `param` (e.g. `"code": 302`) ARE correctly available on `req.routing.param.code`. Rule of thumb: use `req.routing.param` only for static metadata, never for captured URL params.
843
845
  - **Routing loop cross-route contamination** — `fitsWithRequirements()` mutates `request.params` and `request[method]` during each route comparison. Leftover values from non-matching routes cause `parseRouting` lines 396–407 to inject phantom URL segments, compounding work exponentially. Fix: `req.params = Object.assign({}, _origParams)` + `delete req[method]` before each `compareUrls()`. Never `delete req.params` — `fitsWithRequirements` gates on `typeof(request.params) != 'undefined'`. Never use `JSON.clone` on request state in the routing loop — `Object.assign` is sufficient and safe.
844
846
  - **`server.isaac.js:812` initializes `req.params`** — `request.params = {}` and `request.params[0] = url` are set before `handle()` runs. Any code that deletes `req.params` breaks `fitsWithRequirements` which checks `typeof(request.params) != 'undefined'` before setting param values.
845
- - **internal-bundle `setting-get-one-design` was a latent crash** — `coreapi` routing has `"url": "/settings/get/design/:designId"` with no `requirements` block. Before the `fitsWithRequirements` fix, every GET to that URL threw a 500 TypeError. The fix makes it work correctly. Worth testing that route after the next ff-only merge.
847
+ - **internal-bundle `setting-get-one-design` was a latent crash** — an internal bundle's routing had `"url": "/settings/get/design/:designId"` with no `requirements` block. Before the `fitsWithRequirements` fix, every GET to that URL threw a 500 TypeError. The fix makes it work correctly. Worth testing that route after the next ff-only merge.
846
848
 
847
849
  129. **`env.json > response.header` config defaults are asymmetric across engines and can collide with framework `setHeader` calls — always trace the full emit chain before claiming a config default reaches the wire.** `core/server.js` (Express engine) reads `conf.server.response.header` into `resHeaders` at L1391 and loops `response.setHeader(h, headerValue)` over each key at L1481-1534 — so any entry in the env.json `response.header` block IS applied on Express. But `core/server.isaac.js` does NOT read `server.response.header` anywhere (grep `serverResponseHeaders` / `server\.response\.header` against `server.isaac.js` returns zero matches) — Isaac builds its headers from the framework's own primitives (`_setPoweredByHeader()` for X-Powered-By, fixed setHeader calls for cache/CORS at the `/_gina/*` handlers), so any env.json `response.header` default is silently ignored on Isaac bundles. Layered on top: framework code that emits its own canonical value via a later `setHeader` call in the Express request lifecycle OVERWRITES whatever env.json set earlier. The combination means an env.json `response.header` config default can look load-bearing in the template while being functionally dead at runtime — applied-then-overwritten on Express, ignored on Isaac. Operator rule: before claiming a `response.header` config key reaches the wire, (a) grep both engines for reads of `server.response.header` (the Isaac silence is the dead-giveaway), and (b) grep for framework `setHeader('<that-key>', ...)` calls that would overwrite. Precedent: 2026-05-17 — the `X-Powered-By: "Gina I/O - v${version}"` env.json default at `core/template/conf/env.json:91` was structurally dead (overwritten by `server.js:2425` on Express, never read on Isaac); dropped in favour of the canonical `Gina/<version>` shape emitted by `server.js:2425` + `_setPoweredByHeader()` and suppressed by `gina.plugins.HidePoweredBy()` middleware + `settings.json > server.hidePoweredBy: true` gate respectively. The handoff that prompted the cleanup had framed the env.json default as a "third emit path that neither plugin nor gate reaches" — wrong in both directions (Express middleware DID remove the overwritten value cleanly; Isaac never read the env.json key at all). Established 2026-05-17.
848
850
 
@@ -919,4 +921,4 @@ Dev-mode query instrumentation captures every database query tied to the current
919
921
 
920
922
  177. **Couchbase connector — install-derived SDK resolution (v2 removed), `connectors.json` semantics, `getCluster()`, dev-mode index reporting** (replaces individual entries #29, #40, #41, #57, #136, #153) — connectors are keyed in `schema/connectors.json` by LOGICAL name (`primary`, `sessionStore`, `cache`, …) with the driver selected by the `connector` enum field (`couchbase`/`mysql`/`postgresql`/`sqlite`/`redis`/`ai`/…) — never introduce a separate `driver` field; the optional `version` field carries a semver range used by `connector:add --driver-version=…` for the npm-install hint. The Couchbase SDK major is derived from the project's INSTALLED `couchbase` npm version — the leading major of `dependencies.couchbase` selects `connector.v<major>.js`, which stamps `conn.sdk = { version: N }` — never from a config key, so migrating SDK majors is a driver bump (`npm install couchbase@^4`), not a config edit. SDK v2 is REMOVED as of 0.4.0: the resolver now throws a clear "SDK v2 is no longer supported — upgrade couchbase@^3/^4" error when the installed major is ≤ 2 or the connector file is missing (previously a silent fallback that crashed later with an opaque MODULE_NOT_FOUND); the v3-vs-v4 split remains for param shaping. Generalises: when a connector's behavior-version derives from an installed dependency rather than config, fail fast once the installed major drops below the supported floor. Couchbase entities expose a public `getCluster()` (on both the model-entity and N1QL-entity prototypes) returning the underlying SDK `Cluster` handle for features the ORM doesn't wrap — chiefly multi-document ACID transactions (`cluster.transactions().run(...)`, needs SDK 3.2+/4.x) — without touching private `_*` internals; it throws a coded `GINA_COUCHBASE_CLUSTER_UNRESOLVED` error when neither connection shape resolves. Dev-mode index reporting: the SDK v4 C++ binding never populates `meta.profile` despite `profile: 'timings'` being sent (confirmed on v4.6.0), so an async `EXPLAIN <statement>` fallback with a per-process per-statement cache supplies the plan instead (the first request for a new statement may show N/A; subsequent requests hit the cache), and `USE KEYS` plans surface as "KV lookup" via `ExpressionScan`/`KeyScan` operator detection. Two historical traps locked by tests: `conn._cluster.query()` must receive the full `queryOptions` object, not the raw params array (the raw form silently dropped `profile`/`scanConsistency`/`adhoc` from every query), and of the connector's two `register()` dispatch paths, Option B (`!_isRegisteredFromProto`) is the ALWAYS-active one — instrumentation or logging added to Option A never executes.
921
923
 
922
- 178. **HTTP/2 query paths must tolerate a released response — retry re-entries and late upstream responses run after terminal exits (#B33, 2026-06-12, commit `9c2d802a`).** Terminal exits release the per-request refs, and `redirect()` releases them and THEN calls next(), so an inter-bundle HTTP/2 query can outlive its own request in three measured ways, each previously an uncaughtException → SIGTERM bundle kill: (1) every retry re-entry (the 502/timeout/stream-error/preflight setTimeout paths) re-executes the header-forward prep block, which read the released request's headers — null deref from a timer callback outside all try/catch; (2) a late upstream response's success path calls isHaltedRequest → getSession, which read the released request's session from the stream end handler; (3) a parsed upstream payload claiming a 3xx status routed into the redirect intercepts, which wrote headers to the released response (the emitter-mode intercept uncaught; the callback-mode one contained only via a fragile catch chain). All sites null-guarded: forwards and intercepts no-op on a released request (the same options object travels through retries, so options.headers already carries the attempt-1 values — nothing is lost), getSession reports no session, and the emitter-mode intercept falls through to the query#complete emit so listeners still learn the outcome. Live-request behaviour is byte-identical. Runtime-verified by driving the REAL query() through a standalone controller harness against local h2c servers (six probe modes, crash reproduced pre-fix and clean post-fix per site). Sibling unguarded request-header reads exist in OTHER lifecycle functions (redirect, popin-context detection, render-path authority composition, bundle-status forwards) they run on the live request lifecycle, are unmeasured for this failure shape, and are deliberately out of scope; the guard pin in the controller test is block-scoped to the fixed functions for exactly that reason.
924
+ 178. **HTTP/2 query paths must tolerate a released response — retry re-entries and late upstream responses run after terminal exits (#B33, 2026-06-12, commit `9c2d802a`).** Terminal exits release the per-request refs, and `redirect()` releases them and THEN calls next(), so an inter-bundle HTTP/2 query can outlive its own request in three measured ways, each previously an uncaughtException → SIGTERM bundle kill: (1) every retry re-entry (the 502/timeout/stream-error/preflight setTimeout paths) re-executes the header-forward prep block, which read the released request's headers — null deref from a timer callback outside all try/catch; (2) a late upstream response's success path calls isHaltedRequest → getSession, which read the released request's session from the stream end handler; (3) a parsed upstream payload claiming a 3xx status routed into the redirect intercepts, which wrote headers to the released response (the emitter-mode intercept uncaught; the callback-mode one contained only via a fragile catch chain). All sites null-guarded: forwards and intercepts no-op on a released request (the same options object travels through retries, so options.headers already carries the attempt-1 values — nothing is lost), getSession reports no session, and the emitter-mode intercept falls through to the query#complete emit so listeners still learn the outcome. Live-request behaviour is byte-identical. Runtime-verified by driving the REAL query() through a standalone controller harness against local h2c servers (six probe modes, crash reproduced pre-fix and clean post-fix per site). Sibling unguarded request-header reads exist in OTHER lifecycle functions; the §23 guard pin is block-scoped to the fixed functions for exactly that reason. **Follow-up #B35 (2026-06-13, `714d816f`+next):** the 5 directly-callable SYNCHRONOUS siblings were MEASURED (standalone harness: createTestInstance → renderTEXT() releases the triplet → call → confirmed `uncaughtException`-class crash) and guarded with top-of-function early-returns — `isPopinContext` → false, `setRequestMethod` → null, `setRequestMethodParams` → (void), `getRequestMethodParams` → the cached value, `getFormsRules` → {} (tests `controller.test.js §25`). **#B36 (`c5eaeeb7`+next):** `renderJSON()` is the same shape — its delegate reads `local.res.stream` synchronously before any `headersSent` guard, measured (standalone harness driving the real `render-json.js` delegate: CONTROL live rendered, RELEASE after `renderTEXT()` threw `reading 'stream'`) to crash a released response → SIGTERM; guarded with a top-of-function `if (local.res == null) return` (tests `render-json.test.js §03`). The render-swig / render-nunjucks delegates share the same read but are the NON-FATAL async class (measured 2026-06-13, NOT guarded): their `render()` is `async` and `this.render` returns the delegate promise un-awaited, so a released-instance read rejects → `unhandledRejection` → `gna.js:726` logs it (no SIGTERM). This is the canonical severity-axis example — a SYNCHRONOUS released read (render-json `#B36`, the `#B35` helpers) is a SIGTERM bundle-kill worth guarding; the same read in an ASYNC delegate is a logged unhandledRejection not worth editing the hot render path for. `redirect` GUARDED too (**#B37**, `a03e6f84`+next): measured synchronous, so a released second-call (redirect-then-redirect, or render-error-then-redirect) crashed `reading 'originalMethod'` → SIGTERM; top-of-function `if (local.req == null) return` (tests `controller.test.js §26`). **#B38 (2026-06-13) — the #B37 "SIGTERM class CLOSED" claim was premature: an exhaustive sweep of EVERY synchronous controller surface found SIX more lethal sync residuals, each measured (CONTROL no-throw / RELEASE positive crash, then no-throw post-guard) and guarded top-of-function with the same `if (local.req|res == null) return <default>` shape:** `downloadFromLocal` (`reading 'setHeader'`), the inner `start` of `store` (`reading 'files'` — reached SYNCHRONOUSLY through the documented `store(target).onComplete(cb)` wrapper, which calls `start` OUTSIDE the async `store` body; the #B35 probe had only tried `store('t')`, which returns the wrapper WITHOUT calling `start`, so `store` was wrongly filed as async-deferred here), `renderStream` (`reading 'stream'` — its controller wrapper AND the delegate are both synchronous, and the read precedes the delegate's headersSent guard, mirroring the #B36 render-json placement), `push` (`reading 'method'`), `pauseRequest` (`reading 'url'`), `resumeRequest` (`reading 'session'`/`'method'`) — tests `controller.test.js §27` + `render-stream.test.js §11`. Genuinely document-skipped (measured NON-FATAL, mirroring the render-swig/nunjucks #B36 decision): `downloadFromURL` (its reads sit inside an `async function`, so any throw is a rejected promise → `unhandledRejection`), and the render-path inner fns `setResources` / `getNodeRes` (sync, but invoked ONLY from the async render delegates, so a throw rejects the delegate promise — and the captured-req fix-shape was declined because the captured req is itself null in the released-response case). **Rule: lethality follows the NEAREST async boundary, not the function's own sync/async keyword — a sync read with no async function between it and the dispatcher is a SIGTERM bundle-kill (guard it); the same read reached only through an async function degrades to a logged unhandledRejection (skip it). Probe-asymmetry corollary: "no throw" is NOT proof of safety — feed inputs that actually REACH the deref (`resumeRequest({})` dodged its `req.session` read via an `&&` short-circuit + an early `throwError` return and looked safe until re-measured with a deref-reaching input).**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gina",
3
- "version": "0.5.2-alpha.1",
3
+ "version": "0.5.2",
4
4
  "description": "Node.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency",
5
5
  "keywords": [
6
6
  "nodejs",
@@ -72,12 +72,12 @@
72
72
  "gina-container": "bin/gina-container",
73
73
  "gina-init": "bin/gina-init"
74
74
  },
75
- "main": "./framework/v0.5.2-alpha.1/core/gna",
75
+ "main": "./framework/v0.5.2/core/gna",
76
76
  "exports": {
77
77
  ".": {
78
78
  "types": "./types/index.d.ts",
79
79
  "import": "./index.mjs",
80
- "require": "./framework/v0.5.2-alpha.1/core/gna.js"
80
+ "require": "./framework/v0.5.2/core/gna.js"
81
81
  },
82
82
  "./gna": {
83
83
  "types": "./types/gna.d.ts",
package/schema/app.json CHANGED
@@ -97,7 +97,7 @@
97
97
  },
98
98
  "hostname": {
99
99
  "type": "string",
100
- "description": "Upstream host. Use \"bundle@project\" notation to reference another Gina bundle (e.g. \"coreapi@myproject\")."
100
+ "description": "Upstream host. Use \"bundle@project\" notation to reference another Gina bundle (e.g. \"api@myproject\")."
101
101
  },
102
102
  "port": {
103
103
  "type": ["string", "number"],
@@ -1 +0,0 @@
1
- 0.5.2-alpha.1
File without changes
File without changes