gina 0.5.1-alpha.1 → 0.5.1-alpha.3

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/CONVENTIONS.md +1 -0
  2. package/ROADMAP.md +16 -16
  3. package/framework/v0.5.1-alpha.3/VERSION +1 -0
  4. package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/controller.js +83 -10
  5. package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/router.js +29 -0
  6. package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/server.isaac.js +40 -0
  7. package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/package.json +1 -1
  8. package/gna.js +4 -4
  9. package/llms.txt +15 -50
  10. package/package.json +3 -3
  11. package/script/check_changie_entries.js +4 -4
  12. package/script/check_roadmap_consistency.js +290 -0
  13. package/framework/v0.5.1-alpha.1/VERSION +0 -1
  14. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/AUTHORS +0 -0
  15. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/LICENSE +0 -0
  16. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/html/nolayout.html +0 -0
  17. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/html/static.html +0 -0
  18. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/img/android-chrome-192x192.png +0 -0
  19. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/img/android-chrome-512x512.png +0 -0
  20. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/img/apple-touch-icon.png +0 -0
  21. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/img/favicon-16x16.png +0 -0
  22. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/img/favicon-32x32.png +0 -0
  23. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/img/favicon.ico +0 -0
  24. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/README.md +0 -0
  25. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  26. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  27. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  28. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  29. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  30. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  31. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  32. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  33. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  34. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  35. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  36. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  37. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  38. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  39. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  40. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  41. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  42. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  43. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  44. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  45. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  46. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/config.js +0 -0
  47. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/ai/index.js +0 -0
  48. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/ai/lib/connector.js +0 -0
  49. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/couchbase/index.js +0 -0
  50. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/couchbase/lib/connector.js +0 -0
  51. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  52. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  53. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/couchbase/lib/n1ql.js +0 -0
  54. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/couchbase/lib/session-store.js +0 -0
  55. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  56. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  57. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/mongodb/index.js +0 -0
  58. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/mongodb/lib/connector.js +0 -0
  59. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  60. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/mongodb/lib/session-store.js +0 -0
  61. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/mysql/index.js +0 -0
  62. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/mysql/lib/connector.js +0 -0
  63. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/postgresql/index.js +0 -0
  64. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/postgresql/lib/connector.js +0 -0
  65. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/redis/index.js +0 -0
  66. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/redis/lib/session-store.js +0 -0
  67. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/scylladb/index.js +0 -0
  68. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/scylladb/lib/connector.js +0 -0
  69. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/scylladb/lib/session-store.js +0 -0
  70. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/sql-parser.js +0 -0
  71. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/sqlite/index.js +0 -0
  72. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/sqlite/lib/connector.js +0 -0
  73. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/connectors/sqlite/lib/session-store.js +0 -0
  74. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/content.encoding +0 -0
  75. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/controller.framework.js +0 -0
  76. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/controller.render-json.js +0 -0
  77. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/controller.render-nunjucks-async.js +0 -0
  78. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/controller.render-nunjucks.js +0 -0
  79. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/controller.render-stream.js +0 -0
  80. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/controller.render-swig-async.js +0 -0
  81. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/controller.render-swig.js +0 -0
  82. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/controller.render-v1.js +0 -0
  83. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/index.js +0 -0
  84. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/controller/inspector-window-emit.js +0 -0
  85. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/busboy-1.6.0/LICENSE +0 -0
  86. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/busboy-1.6.0/README.md +0 -0
  87. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  88. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  89. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  90. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  91. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/busboy-1.6.0/package.json +0 -0
  92. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  93. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  94. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/deps/streamsearch-1.1.0/package.json +0 -0
  95. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/dev/index.js +0 -0
  96. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/dev/lib/class.js +0 -0
  97. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/dev/lib/factory.js +0 -0
  98. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/dev/lib/tools.js +0 -0
  99. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/gna.js +0 -0
  100. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/locales/README.md +0 -0
  101. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/locales/currency.json +0 -0
  102. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/locales/dist/language/en.json +0 -0
  103. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/locales/dist/language/fr.json +0 -0
  104. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/locales/dist/region/en.json +0 -0
  105. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/locales/dist/region/fr.json +0 -0
  106. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/locales/index.js +0 -0
  107. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/mime.types +0 -0
  108. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/model/entity.js +0 -0
  109. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/model/index.js +0 -0
  110. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/model/template/entityFactory.js +0 -0
  111. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/model/template/index.js +0 -0
  112. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/README.md +0 -0
  113. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/index.js +0 -0
  114. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/csrf/README.md +0 -0
  115. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/csrf/package.json +0 -0
  116. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/csrf/src/main.js +0 -0
  117. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/README.md +0 -0
  118. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/coep/README.md +0 -0
  119. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/coep/package.json +0 -0
  120. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  121. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/coop/README.md +0 -0
  122. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/coop/package.json +0 -0
  123. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  124. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/corp/README.md +0 -0
  125. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/corp/package.json +0 -0
  126. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  127. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/csp/README.md +0 -0
  128. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/csp/package.json +0 -0
  129. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  130. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  131. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  132. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  133. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  134. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  135. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  136. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  137. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  138. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  139. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/package.json +0 -0
  140. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  141. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  142. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  143. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/src/main.js +0 -0
  144. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  145. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  146. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  147. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  148. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  149. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  150. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  151. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  152. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  153. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  154. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  155. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  156. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  157. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  158. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  159. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  160. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  161. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  162. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/session/README.md +0 -0
  163. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/session/package.json +0 -0
  164. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/session/src/main.js +0 -0
  165. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/storage/README.md +0 -0
  166. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/storage/build.json +0 -0
  167. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/storage/package.json +0 -0
  168. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/storage/src/main.js +0 -0
  169. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/validator/README.md +0 -0
  170. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/validator/build.json +0 -0
  171. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/validator/package.json +0 -0
  172. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/validator/src/form-validator.js +0 -0
  173. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/plugins/lib/validator/src/main.js +0 -0
  174. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/server.express.js +0 -0
  175. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/server.js +0 -0
  176. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/status.codes +0 -0
  177. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/_gitignore +0 -0
  178. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/config/app.json +0 -0
  179. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  180. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/config/routing.json +0 -0
  181. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/config/settings.json +0 -0
  182. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  183. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/config/templates.json +0 -0
  184. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  185. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  186. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  187. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  188. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/index.js +0 -0
  189. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle/locales/en.json +0 -0
  190. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  191. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  192. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  193. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  194. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  195. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  196. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  197. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_public/readme.md +0 -0
  198. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_public/sw.js +0 -0
  199. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  200. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  201. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  202. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  203. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  204. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/command/gina.bat.tpl +0 -0
  205. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/command/gina.tpl +0 -0
  206. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/conf/env.json +0 -0
  207. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/conf/manifest.json +0 -0
  208. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/conf/package.json +0 -0
  209. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/conf/settings.json +0 -0
  210. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/conf/statics.json +0 -0
  211. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/conf/templates.json +0 -0
  212. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/error/client/json/401.json +0 -0
  213. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/error/client/json/403.json +0 -0
  214. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/error/client/json/404.json +0 -0
  215. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/error/server/html/50x.html +0 -0
  216. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/error/server/json/500.json +0 -0
  217. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/error/server/json/503.json +0 -0
  218. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/core/template/extensions/logger/config.json +0 -0
  219. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/console.js +0 -0
  220. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/context.js +0 -0
  221. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/data/LICENSE +0 -0
  222. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/data/README.md +0 -0
  223. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/data/package.json +0 -0
  224. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/data/src/main.js +0 -0
  225. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/dateFormat.js +0 -0
  226. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/index.js +0 -0
  227. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/json/LICENSE +0 -0
  228. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/json/README.md +0 -0
  229. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/json/package.json +0 -0
  230. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/json/src/main.js +0 -0
  231. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/path.js +0 -0
  232. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/plugins/README.md +0 -0
  233. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/plugins/package.json +0 -0
  234. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/plugins/src/api-error.js +0 -0
  235. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/plugins/src/main.js +0 -0
  236. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/prototypes.js +0 -0
  237. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/task.js +0 -0
  238. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/helpers/text.js +0 -0
  239. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/archiver/README.md +0 -0
  240. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/archiver/build.json +0 -0
  241. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/archiver/package.json +0 -0
  242. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/archiver/src/dep/jszip.min.js +0 -0
  243. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/archiver/src/main.js +0 -0
  244. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/async/package.json +0 -0
  245. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/async/src/main.js +0 -0
  246. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cache/README.md +0 -0
  247. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cache/build.json +0 -0
  248. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cache/package.json +0 -0
  249. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cache/src/main.js +0 -0
  250. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/aliases.json +0 -0
  251. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/add.js +0 -0
  252. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/arguments.json +0 -0
  253. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/build.js +0 -0
  254. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/copy.js +0 -0
  255. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/cp.js +0 -0
  256. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/help.js +0 -0
  257. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/help.txt +0 -0
  258. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  259. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/list.js +0 -0
  260. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/mcp-start.js +0 -0
  261. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/mcp.js +0 -0
  262. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/oas.js +0 -0
  263. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/openapi.js +0 -0
  264. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/remove.js +0 -0
  265. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/rename.js +0 -0
  266. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/restart.js +0 -0
  267. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/rm.js +0 -0
  268. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/start.js +0 -0
  269. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/status.js +0 -0
  270. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/bundle/stop.js +0 -0
  271. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/cache/stats.js +0 -0
  272. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/connector/add.js +0 -0
  273. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/connector/arguments.json +0 -0
  274. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/connector/help.js +0 -0
  275. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/connector/help.txt +0 -0
  276. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/connector/list.js +0 -0
  277. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/connector/migrate.js +0 -0
  278. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/connector/remove.js +0 -0
  279. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/connector/rm.js +0 -0
  280. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/add.js +0 -0
  281. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/get.js +0 -0
  282. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/help.js +0 -0
  283. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/help.txt +0 -0
  284. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/link-dev.js +0 -0
  285. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/list.js +0 -0
  286. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/remove.js +0 -0
  287. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/rm.js +0 -0
  288. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/set.js +0 -0
  289. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/unset.js +0 -0
  290. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/env/use.js +0 -0
  291. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/arguments.json +0 -0
  292. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/build.js +0 -0
  293. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/dot.js +0 -0
  294. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/get.js +0 -0
  295. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/help.js +0 -0
  296. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/help.txt +0 -0
  297. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/init.js +0 -0
  298. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/link-node-modules.js +0 -0
  299. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/link.js +0 -0
  300. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/msg.json +0 -0
  301. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/open.js +0 -0
  302. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/restart.js +0 -0
  303. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/set.js +0 -0
  304. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/start.js +0 -0
  305. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/status.js +0 -0
  306. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/stop.js +0 -0
  307. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/tail.js +0 -0
  308. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/update.js +0 -0
  309. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/framework/version.js +0 -0
  310. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/gina-dev.1.md +0 -0
  311. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/gina-framework.1.md +0 -0
  312. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/gina.1.md +0 -0
  313. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/helper.js +0 -0
  314. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/i18n/add.js +0 -0
  315. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/i18n/arguments.json +0 -0
  316. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/i18n/export.js +0 -0
  317. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/i18n/help.js +0 -0
  318. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/i18n/help.txt +0 -0
  319. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/i18n/import.js +0 -0
  320. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/i18n/scan.js +0 -0
  321. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/index.js +0 -0
  322. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/inspector/help.js +0 -0
  323. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/inspector/help.txt +0 -0
  324. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/inspector/open.js +0 -0
  325. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/minion/arguments.json +0 -0
  326. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/minion/help.js +0 -0
  327. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/minion/help.txt +0 -0
  328. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/minion/kill.js +0 -0
  329. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/minion/list.js +0 -0
  330. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/msg.json +0 -0
  331. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/port/help.js +0 -0
  332. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/port/help.txt +0 -0
  333. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/port/inc/scan.js +0 -0
  334. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/port/list.js +0 -0
  335. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/port/reset.js +0 -0
  336. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/port/set.js +0 -0
  337. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/add.js +0 -0
  338. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/arguments.json +0 -0
  339. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/build.js +0 -0
  340. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/help.js +0 -0
  341. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/help.txt +0 -0
  342. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/import.js +0 -0
  343. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/list.js +0 -0
  344. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/move.js +0 -0
  345. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/remove.js +0 -0
  346. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/rename.js +0 -0
  347. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/restart.js +0 -0
  348. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/rm.js +0 -0
  349. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/start.js +0 -0
  350. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/status.js +0 -0
  351. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/project/stop.js +0 -0
  352. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/protocol/arguments.json +0 -0
  353. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/protocol/help.js +0 -0
  354. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/protocol/help.txt +0 -0
  355. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/protocol/list.js +0 -0
  356. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/protocol/remove.js +0 -0
  357. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/protocol/set.js +0 -0
  358. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/scope/add.js +0 -0
  359. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/scope/help.js +0 -0
  360. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/scope/help.txt +0 -0
  361. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/scope/link-local.js +0 -0
  362. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/scope/link-production.js +0 -0
  363. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/scope/list.js +0 -0
  364. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/scope/remove.js +0 -0
  365. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/scope/rm.js +0 -0
  366. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/scope/use.js +0 -0
  367. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/secrets/arguments.json +0 -0
  368. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/secrets/check.js +0 -0
  369. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/secrets/help.js +0 -0
  370. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/secrets/help.txt +0 -0
  371. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/secrets/scan.js +0 -0
  372. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/service/help.js +0 -0
  373. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/service/help.txt +0 -0
  374. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/service/list.js +0 -0
  375. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/service/start.js +0 -0
  376. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd/view/add.js +0 -0
  377. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd-status-format/package.json +0 -0
  378. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cmd-status-format/src/main.js +0 -0
  379. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/collection/README.md +0 -0
  380. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/collection/build.json +0 -0
  381. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/collection/package.json +0 -0
  382. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/collection/src/main.js +0 -0
  383. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/config.js +0 -0
  384. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/connector-registry/package.json +0 -0
  385. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/connector-registry/src/main.js +0 -0
  386. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cron/README.md +0 -0
  387. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cron/package.json +0 -0
  388. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/cron/src/main.js +0 -0
  389. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/domain/LICENSE +0 -0
  390. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/domain/README.md +0 -0
  391. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/domain/package.json +0 -0
  392. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/domain/src/main.js +0 -0
  393. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/generator/index.js +0 -0
  394. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/i18n/package.json +0 -0
  395. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/i18n/src/main.js +0 -0
  396. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/index.js +0 -0
  397. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/inherits/LICENSE +0 -0
  398. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/inherits/README.md +0 -0
  399. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/inherits/package.json +0 -0
  400. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/inherits/src/main.js +0 -0
  401. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/inspector-redact/package.json +0 -0
  402. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/inspector-redact/src/main.js +0 -0
  403. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/instrument/package.json +0 -0
  404. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/instrument/src/main.js +0 -0
  405. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/job/package.json +0 -0
  406. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/job/src/main.js +0 -0
  407. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/README.md +0 -0
  408. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/package.json +0 -0
  409. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/src/containers/default/index.js +0 -0
  410. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/src/containers/file/index.js +0 -0
  411. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  412. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  413. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/src/containers/mq/index.js +0 -0
  414. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/src/containers/mq/listener.js +0 -0
  415. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/src/containers/mq/speaker.js +0 -0
  416. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/src/helper.js +0 -0
  417. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/logger/src/main.js +0 -0
  418. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/math/index.js +0 -0
  419. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/mcp-dispatch/package.json +0 -0
  420. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/mcp-dispatch/src/main.js +0 -0
  421. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/mcp-http/package.json +0 -0
  422. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/mcp-http/src/main.js +0 -0
  423. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/mcp-server/package.json +0 -0
  424. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/mcp-server/src/main.js +0 -0
  425. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/merge/README.md +0 -0
  426. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/merge/package.json +0 -0
  427. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/merge/src/main.js +0 -0
  428. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/metrics/package.json +0 -0
  429. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/metrics/src/main.js +0 -0
  430. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/model.js +0 -0
  431. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/nunjucks-filters/README.md +0 -0
  432. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/nunjucks-filters/package.json +0 -0
  433. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/nunjucks-filters/src/main.js +0 -0
  434. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/nunjucks-resolver/package.json +0 -0
  435. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/nunjucks-resolver/src/main.js +0 -0
  436. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/proc.js +0 -0
  437. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/routing/README.md +0 -0
  438. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/routing/build.json +0 -0
  439. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/routing/package.json +0 -0
  440. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/routing/src/main.js +0 -0
  441. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/routing/src/radix.js +0 -0
  442. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/routing-introspect/package.json +0 -0
  443. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/routing-introspect/src/main.js +0 -0
  444. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/secrets/package.json +0 -0
  445. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/secrets/src/backends/env.js +0 -0
  446. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/secrets/src/main.js +0 -0
  447. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/session-store.js +0 -0
  448. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/shell.js +0 -0
  449. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/state.js +0 -0
  450. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/swig-filters/README.md +0 -0
  451. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/swig-filters/package.json +0 -0
  452. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/swig-filters/src/main.js +0 -0
  453. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/swig-resolver/package.json +0 -0
  454. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/swig-resolver/src/main.js +0 -0
  455. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/template-loaders/package.json +0 -0
  456. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/template-loaders/src/loaders/http.js +0 -0
  457. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/template-loaders/src/loaders/memory.js +0 -0
  458. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/template-loaders/src/main.js +0 -0
  459. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/url/README.md +0 -0
  460. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/url/index.js +0 -0
  461. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/url/routing.json +0 -0
  462. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/uuid/package.json +0 -0
  463. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/uuid/src/main.js +0 -0
  464. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/validator.js +0 -0
  465. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/watcher/package.json +0 -0
  466. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/watcher/src/main.js +0 -0
  467. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/ws-framing/package.json +0 -0
  468. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/ws-framing/src/main.js +0 -0
  469. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/ws-session/package.json +0 -0
  470. /package/framework/{v0.5.1-alpha.1 → v0.5.1-alpha.3}/lib/ws-session/src/main.js +0 -0
package/CONVENTIONS.md CHANGED
@@ -391,6 +391,7 @@ exports.setUp = function(done) {
391
391
  - Test names use `[ category ] description` format for grouping
392
392
  - Setup guards (`if (initialized) return done()`) prevent re-execution across test suites
393
393
  - New unit tests go in `test/core/` with numeric prefix for ordering
394
+ - **Test counts in docs and changelogs are measured, never estimated.** Don't write an "N unit tests" claim before running the test — estimating from section count consistently undercounts (behaviour sections run 10-15 tests, not ~5). The corrective is mechanical: run `node --test test/core/<file>.test.js 2>&1 | tail -10`, copy the `ℹ tests N` line, and write that exact N. Use `TODO_test_count` placeholders in drafts and fill from the actual output before staging.
394
395
 
395
396
  **Recommendation:**
396
397
  Migrate to `node:test` (built-in, Node 18+) for all new test files — `nodeunit` is unmaintained. Do not convert existing tests; add `node:test` tests alongside. The HTTP/2 client mock harness (#UT1) should use `node:test + node:assert` natively.
package/ROADMAP.md CHANGED
@@ -23,8 +23,8 @@ This roadmap covers planned features, architectural improvements, new connectors
23
23
  | **Q4 2026** | `0.3.8` ✅ | Patch: `npm install -g gina@latest` regression fix — `psl` + `@rhinostone/swig` promoted to top-level deps · install scripts decoupled from framework `lib` registry · helpers preload guarding `lib/logger` ↔ `framework/v*/helpers` circular dep |
24
24
  | **Q2 2026** | `0.3.9` ✅ | Consumer-feedback batch (11 framework patches): per-request middleware dispatch isolation · Couchbase 4.x JsonTranscoder · `length` filter null safety · `process.env` mirroring · 6 nunjucks render-pipeline patches (libRef fallback · namespace prefix drop · bundle filter wraps · top-level userData · `data.data` alias · ginaLoader placeholders) · `getAssets` mid-URL `{{ }}` strip-guard anchor |
25
25
  | **Q2 2026** | `0.3.10` ✅ | FormValidator HTML5 form-reassociation hardening trilogy (`HTMLFormControlsCollection`-based `bindForm` + `unbindForm` symmetry · radio mutual-exclusion + IDL/attribute reconciliation · `defaultChecked` cache for reset) · `X-Forwarded-Prefix` reverse-proxy path-prefix awareness |
26
- | **Q4 2026** | `0.4.0` | AI agents (MCP) · ScyllaDB connector · Advanced tutorial · Website redesign · Docs offline ZIP · Bun investigation · Couchbase v2 removal · Trailer support · CLI Tier 2 (bundle/project status, rename, copy, protocol:remove, minions) |
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.3`) |
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
+ | **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
  | **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 |
29
29
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
30
30
 
@@ -66,18 +66,18 @@ Stub commands confirmed in source — handler files exist but are empty or comme
66
66
  | ✅ | **`protocol:remove`** — Revert a bundle to the project's default protocol/scheme by removing its `settings.json` override (no shared `ports*.json` mutation), with `--dry-run` / `--force`. | `0.4.1-alpha.2` | 2026-05-31 |
67
67
  | ✅ | **`minion:list`** — List the running bundle child-processes ("minions") of a project, or of every project, grouped by project. `--format=json` supported. | `0.4.1-alpha.2` | 2026-05-31 |
68
68
  | ✅ | **`minion:kill`** — Reap a project's running bundle child-processes ("minions") — both pidfile-tracked and `ps`-discovered orphans — with a graceful SIGTERM/SIGKILL escalation and a `--dry-run` preview. | `0.4.1-alpha.2` | 2026-05-31 |
69
- | 📋 | **`gina --status` / `-t`** — Top-level health check: print whether the framework daemon is running, its version, and active bundle count. Requires adding `--status`/`-t` entries to `aliases.json` and implementing `framework/status.js`. | `0.4.0` | Q4 2026 |
69
+ | 📋 | **`gina --status` / `-t`** — Top-level health check: print whether the framework daemon is running, its version, and active bundle count. Requires adding `--status`/`-t` entries to `aliases.json` and implementing `framework/status.js`. | `0.5.x` | Q4 2026 |
70
70
  | ✅ | **`bundle:copy` / `bundle:cp`** — Duplicate a bundle (source files + config) under a new name within the same project, with a word-boundary name rewrite, a fresh full protocol/scheme/env port matrix, and `--dry-run` / `--force`. | `0.4.1-alpha.2` | 2026-05-31 |
71
71
  | ✅ | **`project:status`** — Show the running/stopped state of each bundle in a project with PID and port info. | `0.4.1-alpha.2` | 2026-05-30 |
72
72
 
73
- ### Tier 3 — `0.5.0`
73
+ ### Tier 3 — `0.5.x`
74
74
 
75
75
  | Status | Feature | Version | Target |
76
76
  | --- | --- | --- | --- |
77
- | 📋 | **`project:move`** — Relocate a project's source directory and update all `~/.gina/` registry entries to the new path. Handler is 0 lines. | `0.5.0` | Q1 2027 |
78
- | 📋 | **`framework:update`** — Self-update the installed Gina framework to the latest (or a specified) version without reinstalling via npm. Handler is 0 lines. | `0.5.0` | Q1 2027 |
79
- | 📋 | **`project:backup` / `project:restore`** — Archive a project's source, config, and data to a tarball (`backup`), and restore from it (`restore`). Documented in `project/help.txt` as support-only. No handler files exist. | `0.5.0` | Q1 2027 |
80
- | 📋 | **`framework:man` / `project:man` / `bundle:man`** — Inline CLI manual pages. Mentioned in `framework/help.txt` but no handler files exist for any group. | `0.5.0` | Q1 2027 |
77
+ | 📋 | **`project:move`** — Relocate a project's source directory and update all `~/.gina/` registry entries to the new path. Handler is 0 lines. | `0.5.x` | Q1 2027 |
78
+ | 📋 | **`framework:update`** — Self-update the installed Gina framework to the latest (or a specified) version without reinstalling via npm. Handler is 0 lines. | `0.5.x` | Q1 2027 |
79
+ | 📋 | **`project:backup` / `project:restore`** — Archive a project's source, config, and data to a tarball (`backup`), and restore from it (`restore`). Documented in `project/help.txt` as support-only. No handler files exist. | `0.5.x` | Q1 2027 |
80
+ | 📋 | **`framework:man` / `project:man` / `bundle:man`** — Inline CLI manual pages. Mentioned in `framework/help.txt` but no handler files exist for any group. | `0.5.x` | Q1 2027 |
81
81
 
82
82
  ---
83
83
 
@@ -112,7 +112,7 @@ Stub commands confirmed in source — handler files exist but are empty or comme
112
112
  | ✅ | **Explicit exports for global helpers** — `getContext`, `setContext`, `_`, `requireJSON` etc. available as explicit `require('gina/gna').getContext` imports alongside the existing global injection. Enables IDE navigation and static analysis. | `0.3.3-alpha.3` | 2026-04-09 |
113
113
  | ✅ | **TypeScript declaration files** — `.d.ts` declarations for the public surface: `SuperController`, `EntitySuper`, connector config shapes, `routing.json` schema, `PathObject`, `uuid`, all config file interfaces, `GinaRequest`/`GinaResponse`. No TS migration of internals — just declarations for consumer projects. `package.json` wired with `"types"` and `"typesVersions"`. | `0.3.3-alpha.3` | 2026-04-09 |
114
114
  | ✅ | **Auto-generated `types/gna.d.ts` from JSDoc** (#M9) — `script/generate_gna_types.js` reads the `GLOBAL_EXPORTS` inventory from the gna-exports unit test plus the JSDoc on `framework/v*/core/gna.js` and emits `types/gna.d.ts` with one entry per global export. Two npm scripts: `npm run types:gen` regenerates, `npm run types:check` exits non-zero if drifted. A `gna-types-drift.test.js` unit test re-runs the generator in memory on every test pass — the JSDoc on `core/gna.js` is the single source of truth. Closes the #M8 → #M9 loop and removes the hand-written declaration. | `0.3.7-alpha.2` | 2026-04-18 |
115
- | 📋 | **`gina connector:audit [@project]`** — reads `connectors.json`, maps each declared connector to its npm peer package (`mysql2`, `pg`, `ioredis`, `couchbase`, `openai`, `@anthropic-ai/sdk`, etc.), and runs `npm audit --json` scoped to those packages in the project's `node_modules`. Reports CVEs with severity and fix availability. If `socket` is installed in the project, delegates to it for supply-chain analysis (malware, typosquatting, protestware) instead of `npm audit`. Exit code 1 on any high/critical finding — CI-friendly. Only audits packages actually declared in `connectors.json`, not the full dependency tree. | `0.4.0` | Q4 2026 |
115
+ | 📋 | **`gina connector:audit [@project]`** — reads `connectors.json`, maps each declared connector to its npm peer package (`mysql2`, `pg`, `ioredis`, `couchbase`, `openai`, `@anthropic-ai/sdk`, etc.), and runs `npm audit --json` scoped to those packages in the project's `node_modules`. Reports CVEs with severity and fix availability. If `socket` is installed in the project, delegates to it for supply-chain analysis (malware, typosquatting, protestware) instead of `npm audit`. Exit code 1 on any high/critical finding — CI-friendly. Only audits packages actually declared in `connectors.json`, not the full dependency tree. | `0.5.x` | Q4 2026 |
116
116
 
117
117
  ### Phase 5 — Future
118
118
 
@@ -287,7 +287,7 @@ A cold audit of the Couchbase connector identified two critical security vulnera
287
287
  | ✅ | **Application-level rapid reset rate limiter** (CVE-2023-44487) — per-session stream creation counter | `0.3.13` | 2026-05-14 | The Isaac HTTP/2 session handler counts new streams in a rolling 1s window per session; over `maxStreamsPerSecond` (default 200) it sends a GOAWAY and closes the session. More targeted than `maxSessionRejectedStreams` (which counts refused streams, not created ones). Configurable via `settings.json` `http2Options.maxStreamsPerSecond`; `/_gina/info` exposes a `rapidResetBlocked` counter. |
288
288
  | ✅ | **Trailer support** — `stream.sendTrailers()` + `waitForTrailers: true` | `0.4.0` | 2026-05-22 | Opt-in HTTP/2 response trailers via `self.sendTrailers(fields)`. The render pipeline sets `waitForTrailers` and emits the trailing headers after the body (in the `wantTrailers` event), across all render delegates. Activated only when a controller calls `self.sendTrailers(fields)`; HTTP/1.1 and the no-trailers path are unchanged. For gRPC-style streaming (`grpc-status`) and content-integrity (`Digest`) use cases. |
289
289
  | ✅ | **Alt-Svc header** — advertise HTTP/3 availability | `0.4.2` | 2026-06-02 | Set `Alt-Svc: h3=":443"; ma=86400` response header to advertise HTTP/3 (QUIC) availability via a QUIC-capable reverse proxy (nginx, Caddy, Cloudflare). Gina does not need to implement QUIC — just announce it. Opt-in via `settings.server.json`. Native HTTP/3 is out of scope: Node.js has no stable QUIC API, and the standard deployment topology (Gina → proxy → client) already delivers HTTP/3 at the edge. |
290
- | 📋 | **RFC 9218 Extensible Priorities** — read `Priority: u=N, i` request header | `0.5.0` | Q1 2027 | Use the RFC 9218 priority header to order response writes for multiplexed API clients. Low value for typical HTML page loads; high value for parallel API requests with declared urgency. |
290
+ | 📋 | **RFC 9218 Extensible Priorities** — read `Priority: u=N, i` request header | `0.5.x` | Q1 2027 | Use the RFC 9218 priority header to order response writes for multiplexed API clients. Low value for typical HTML page loads; high value for parallel API requests with declared urgency. |
291
291
  | ✅ | **WebSocket over HTTP/2** (RFC 8441 extended CONNECT) — opt-in via `http2Options.enableConnectProtocol` (default off; https and cleartext h2c HTTP/2 bundles). From `onInitialize`, `app.onWebSocket(path, handler)` registers per-path WebSocket handlers; accepted streams arrive as full sessions backed by a built-in dependency-free RFC 6455 codec (auto-pong, timed close handshake, UTF-8 + close-code validation, payload/fragment DoS caps, backpressure passthrough, graceful shutdown drain). Unknown paths are refused with 404, plain CONNECT keeps its 405, and default-off deployments are byte-identical. | `0.4.7` | 2026-06-11 |
292
292
 
293
293
  ---
@@ -325,7 +325,7 @@ A cold audit of the Couchbase connector identified two critical security vulnera
325
325
  | --- | --- | --- | --- | --- |
326
326
  | ✅ | **`NODE_COMPILE_CACHE` — V8 bytecode startup cache** | `0.2.0` | Q2 2026 | Node.js 22.8+ caches compiled V8 bytecode to disk. Set once at startup — 30–60% faster cold start on subsequent runs with zero code changes to user bundles. No-op on Node < 22.8, so safe to ship unconditionally. |
327
327
  | ✅ | **Route radix trie — compile `routing.json` at startup** | `0.3.0-alpha.1` | 2026-04-01 | `lib/routing/src/radix.js` builds a segment-level trie once at startup. O(m) candidate lookup per request (m = segment count). `Set.has()` check skips non-candidates in the `for…in` loop. Internal change — no user-facing API change. |
328
- | 📋 | **Bun runtime compatibility investigation** | `0.4.0` | Q4 2026 | Prototype Gina under Bun. Two blockers to verify: `require.cache` deletion (dev hot-reload) and `node:http2` completeness. If both pass, Bun gives 3–10x faster startup and meaningful throughput gains. Deliverable: a compatibility report. |
328
+ | 📋 | **Bun runtime compatibility investigation** | `0.5.x` | Q4 2026 | Prototype Gina under Bun. Two blockers to verify: `require.cache` deletion (dev hot-reload) and `node:http2` completeness. If both pass, Bun gives 3–10x faster startup and meaningful throughput gains. Deliverable: a compatibility report. |
329
329
  | ✅ | **V8 pointer compression support** | `0.2.0` | Q2 2026 | Node.js built with `--experimental-enable-pointer-compression` (e.g. [node-caged](https://github.com/platformatic/node-caged) or a custom build) delivers ~50% heap memory reduction across all pointer-heavy structures. Gina is pure JS — compatible out of the box. Adds: startup detection + `GINA_V8_POINTER_COMPRESSED` env var, Dockerfile guide with custom build recipe (full-icu + pointer compression), 4 GB ceiling documentation, N-API-only connector policy. |
330
330
 
331
331
  ---
@@ -370,10 +370,10 @@ Gina's built-in per-bundle inspector. Phases 1–2 ship as an embedded SPA at `/
370
370
 
371
371
  | Status | Feature | Version | Target |
372
372
  | --- | --- | --- | --- |
373
- | ✅ | **`services/src/inspector/` standalone bundle** — ~~Rename `services/src/toolbar/` to `services/src/inspector/`~~ (done). **Authenticated WebSocket transport shipped** (`0.4.3-alpha`): the standalone Inspector connects to a bundle's `/_gina/agent` over a WebSocket (`?transport=ws`) as well as SSE — key-authenticated outside dev mode, with an optional `inspector.agent.allowedOrigins` Origin allowlist; it falls back to SSE automatically if the socket can't open. The embedded SPA at `/_gina/inspector/` remains for quick dev-mode access. **Dev auto-start shipped** (`0.4.3-alpha`): a `gina service:start` command plus a dev-only `gna.js server.on('started')` hook auto-start the standalone Inspector via the daemon-free `gina-container` launcher (gated on dev mode + not-already-running; local-only — no-ops in a fresh install since `services/` ships in neither git nor npm). | `0.5.0` | 2026-06-02 |
373
+ | ✅ | **`services/src/inspector/` standalone bundle** — ~~Rename `services/src/toolbar/` to `services/src/inspector/`~~ (done). **Authenticated WebSocket transport shipped** (`0.4.3-alpha`): the standalone Inspector connects to a bundle's `/_gina/agent` over a WebSocket (`?transport=ws`) as well as SSE — key-authenticated outside dev mode, with an optional `inspector.agent.allowedOrigins` Origin allowlist; it falls back to SSE automatically if the socket can't open. The embedded SPA at `/_gina/inspector/` remains for quick dev-mode access. **Dev auto-start shipped** (`0.4.3-alpha`): a `gina service:start` command plus a dev-only `gna.js server.on('started')` hook auto-start the standalone Inspector via the daemon-free `gina-container` launcher (gated on dev mode + not-already-running; local-only — no-ops in a fresh install since `services/` ships in neither git nor npm). | `0.4.3` | 2026-06-02 |
374
374
  | ✅ | **Agent endpoint — dev-mode SSE (`/_gina/agent`)** — Combined data + log SSE stream. CORS, server.js + server.isaac.js (HTTP/2), Inspector SPA `tryAgent()` with `?target=` param. Named events (`event: data`, `event: log`). Manual connect form on "No source" overlay. | `0.3.0` | 2026-04-05 |
375
- | ✅ | **Agent endpoint — production auth** — **Authenticated `/_gina/agent` + production-safe toggle shipped via the existing SSE transport** (opt-in `inspector.agent.enabled` + key in `settings.json`, constant-time compare, `${secret:KEY}`-capable; key via the `x-gina-inspector-key` header or a `?key=` query param; dev stays open + keyless). Authenticates remote server-log streaming outside dev mode. **WebSocket transport completed** (`0.4.3-alpha`): the standalone Inspector now connects over the #INS8 WebSocket by default (`?transport=sse` forces SSE) with automatic SSE fallback; auth + prod-toggle contract unchanged. | `0.5.0` | 2026-06-02 |
376
- | ✅ | **Toggleable instrumentation** — Runtime toggle for query + flow instrumentation independent of `NODE_ENV_IS_DEV`: a time-boxed, key-authenticated window (`POST /_gina/instrument`) runs capture in production over the authenticated `/_gina/agent` channel, without full dev mode. Opt-in via `inspector.instrumentation`; 3600s hard cap with auto-revert. **v1 shipped 2026-05-26** (JSON/XHR + cross-bundle egress); the server-rendered HTML-page-render egress follow-up also shipped 2026-05-26 (a separate HTML-free emit path wired per render delegate). | `0.5.0` | 2026-05-26 |
375
+ | ✅ | **Agent endpoint — production auth** — **Authenticated `/_gina/agent` + production-safe toggle shipped via the existing SSE transport** (opt-in `inspector.agent.enabled` + key in `settings.json`, constant-time compare, `${secret:KEY}`-capable; key via the `x-gina-inspector-key` header or a `?key=` query param; dev stays open + keyless). Authenticates remote server-log streaming outside dev mode. **WebSocket transport completed** (`0.4.3-alpha`): the standalone Inspector now connects over the #INS8 WebSocket by default (`?transport=sse` forces SSE) with automatic SSE fallback; auth + prod-toggle contract unchanged. | `0.4.0` | 2026-06-02 |
376
+ | ✅ | **Toggleable instrumentation** — Runtime toggle for query + flow instrumentation independent of `NODE_ENV_IS_DEV`: a time-boxed, key-authenticated window (`POST /_gina/instrument`) runs capture in production over the authenticated `/_gina/agent` channel, without full dev mode. Opt-in via `inspector.instrumentation`; 3600s hard cap with auto-revert. **v1 shipped 2026-05-26** (JSON/XHR + cross-bundle egress); the server-rendered HTML-page-render egress follow-up also shipped 2026-05-26 (a separate HTML-free emit path wired per render delegate). | `0.4.0` | 2026-05-26 |
377
377
  | 📋 | **Multi-bundle dashboard** — Discover all running bundles via `ports.json`, connect to each agent. Full-stack request tracing across bundle boundaries. | post-1.0.0 | — |
378
378
  | 📋 | **Browser extension companion** — Chrome/Firefox DevTools panel. Thin UI shell connecting to the standalone Inspector via WebSocket. Optional — not a replacement. | post-1.0.0 | — |
379
379
 
@@ -387,7 +387,7 @@ Gina's built-in per-bundle inspector. Phases 1–2 ship as an embedded SPA at `/
387
387
  | ✅ | **Beginner — Notes API** — Your first REST API: scaffold a project, define 3 routes in `routing.json`, write synchronous controller actions, read `req.post` / `req.params`, return JSON with `renderJSON()`, handle errors with `throwError()`. In-memory store — no database needed. | ~15 min | `0.3.0` | 2026-04-01 |
388
388
  | ✅ | **Tutorial locale detection** — `LocaleSettings` React component detects the reader's locale and timezone via `navigator.language` + `Intl` APIs and pre-fills the `settings.json` scaffold example. Inserted after the scaffold step in both tutorials. Falls back to `en_US`. | — | `0.3.0` | 2026-04-06 |
389
389
  | ✅ | **Intermediate — Link Shortener** — SQLite ORM connector, async controller actions, `render()` + `renderJSON()` in same bundle, HTTP 302 redirect, route `requirements` guard. Includes downloadable project ZIP. | ~30 min | `0.3.0` | 2026-04-01 |
390
- | 📋 | **Advanced** — Full production project: authentication, scoped data isolation, async/await, HTTP/2, structured logging, Docker/K8s deployment. Starts from the intermediate tutorial's finished state. | ~60 min | `0.4.0` | Q4 2026 |
390
+ | 📋 | **Advanced** — Full production project: authentication, scoped data isolation, async/await, HTTP/2, structured logging, Docker/K8s deployment. Starts from the intermediate tutorial's finished state. | ~60 min | `0.5.x` | Q4 2026 |
391
391
 
392
392
  ---
393
393
 
@@ -395,7 +395,7 @@ Gina's built-in per-bundle inspector. Phases 1–2 ship as an embedded SPA at `/
395
395
 
396
396
  | Status | Feature | Version | Target |
397
397
  | --- | --- | --- | --- |
398
- | 📋 | **Official website redesign + docs integration** — Refactor gina.io as a proper project homepage (landing page, feature highlights, showcase) with the documentation fully integrated. Single coherent web presence. Prerequisite: tutorials complete. | `0.4.0` | Q4 2026 |
398
+ | 📋 | **Official website redesign + docs integration** — Refactor gina.io as a proper project homepage (landing page, feature highlights, showcase) with the documentation fully integrated. Single coherent web presence. Prerequisite: tutorials complete. | `0.5.x` | Q4 2026 |
399
399
  | ✅ | **Docs offline ZIP** — One-click download of the complete gina.io documentation as a static HTML ZIP archive. Generated at deploy time by the Docusaurus build pipeline — no server-side logic required. Targeted at users in regions with limited or expensive internet access (offline-first for the African market). | `0.4.0` | 2026-05-22 |
400
400
  | ✅ | **Security & CVE compliance page** — Dedicated docs page listing the HTTP/2 CVEs addressed by Gina and the Node.js version required for each mitigation. Covers CVE-2023-44487 (Rapid Reset), CVE-2024-27316 / CVE-2024-27983 (CONTINUATION flood), CVE-2019-9514 (RST flood), HPACK bomb, and server push abuse. Docs only — no code changes. | `0.3.0-alpha.1` | 2026-04-01 |
401
401
 
@@ -0,0 +1 @@
1
+ 0.5.1-alpha.3
@@ -161,12 +161,27 @@ function SuperController(options) {
161
161
  * Returns `true` when response headers have already been sent.
162
162
  * Checks both HTTP/2 stream and HTTP/1.1 `res.headersSent`.
163
163
  *
164
+ * Also returns `true` when the per-request response refs were already
165
+ * released by a terminal exit (`local.res` is null) — a released response
166
+ * can no longer be written to, so callers' `!headersSent()` guards no-op
167
+ * instead of dereferencing null (#B31).
168
+ *
164
169
  * @inner
165
170
  * @param {object} [res] - Defaults to `local.res`
166
171
  * @returns {boolean}
167
172
  */
168
173
  var headersSent = function(res) {
169
174
  var _res = ( typeof(res) != 'undefined' ) ? res : local.res;
175
+ // #B31 — the per-request response refs may already be released (the
176
+ // terminal-exit triplet: redirect()/renderTEXT()/throwError() and the
177
+ // render delegates set local.res = null once the response is out). A
178
+ // released response cannot be written to anymore, so report it as
179
+ // "sent": callers' existing !headersSent() guards then no-op instead
180
+ // of throwing `Cannot read properties of null (reading 'stream')` —
181
+ // an uncaughtException that proc.js escalates to SIGTERM (bundle kill).
182
+ if ( !_res ) {
183
+ return true;
184
+ }
170
185
  if (
171
186
  typeof(_res.stream) != 'undefined'
172
187
  && typeof(_res.stream.headersSent) != 'undefined'
@@ -3303,11 +3318,11 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
3303
3318
  // proxy_set_header X-Ingress-IP $server_addr
3304
3319
  // proxy_set_header X-Forwarded-For $remote_addr;
3305
3320
  // # EO - Specific headers for Gina
3306
- if ( typeof(local.req.headers['x-client-ip']) != 'undefined' && local.req.headers['x-client-ip'] != options.headers['x-client-ip'] ) {
3321
+ if ( local.req != null && typeof(local.req.headers['x-client-ip']) != 'undefined' && local.req.headers['x-client-ip'] != options.headers['x-client-ip'] ) {
3307
3322
  options.headers['x-client-ip'] = local.req.headers['x-client-ip']
3308
3323
  }
3309
3324
 
3310
- if ( typeof(local.req.headers['x-ingress-ip']) != 'undefined' && local.req.headers['x-ingress-ip'] != options.headers['x-ingress-ip'] ) {
3325
+ if ( local.req != null && typeof(local.req.headers['x-ingress-ip']) != 'undefined' && local.req.headers['x-ingress-ip'] != options.headers['x-ingress-ip'] ) {
3311
3326
  options.headers['x-ingress-ip'] = local.req.headers['x-ingress-ip']
3312
3327
  }
3313
3328
 
@@ -3844,15 +3859,29 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
3844
3859
  } = browser.constants;
3845
3860
 
3846
3861
 
3847
- if ( typeof(local.req.headers['x-requested-with']) != 'undefined' ) {
3862
+ // #B33 — every retry re-entry (setTimeout handleHTTP2ClientRequest) re-executes
3863
+ // these forwards, and a terminal exit (e.g. redirect-then-continue) may have
3864
+ // released local.req in between: each forward is null-guarded with query()'s own
3865
+ // idiom. Skipping a forward on a released request is a no-op, not a behavior
3866
+ // change — options.headers already carries the attempt-1 values (the same options
3867
+ // object travels through every retry).
3868
+ if ( local.req != null && typeof(local.req.headers['x-requested-with']) != 'undefined' ) {
3848
3869
  options.headers['x-requested-with'] = local.req.headers['x-requested-with']
3849
3870
  }
3850
3871
 
3851
- if ( typeof(local.req.headers['access-control-allow-credentials']) != 'undefined' ) {
3872
+ if ( local.req != null && typeof(local.req.headers['access-control-allow-credentials']) != 'undefined' ) {
3852
3873
  options.headers['access-control-allow-credentials'] = local.req.headers['access-control-allow-credentials']
3853
3874
  }
3854
3875
 
3855
- if ( typeof(local.req.headers['content-type']) != 'undefined' && local.req.headers['content-type'] != options.headers['content-type'] ) {
3876
+ // #FORMCT2 never clobber an `application/json` outbound Content-Type with the
3877
+ // INCOMING request's. query() serializes the inter-bundle body as raw JSON
3878
+ // (queryData = JSON.stringify) and labels it application/json; forwarding the
3879
+ // incoming CT here re-labels that JSON body (e.g. as urlencoded when the browser
3880
+ // request was a plain form POST — canonical case: a haltedRequest resume), and the
3881
+ // receiving bundle's urlencoded parse then corrupts `+`/`%XX` inside JSON string
3882
+ // values (same corruption #FORMCT fixed in the browser validator). The forward is
3883
+ // kept for non-JSON outbound bodies (e.g. the MSIE text/plain override).
3884
+ if ( local.req != null && typeof(local.req.headers['content-type']) != 'undefined' && local.req.headers['content-type'] != options.headers['content-type'] && !/application\/json/i.test(options.headers['content-type']) ) {
3856
3885
  options.headers['content-type'] = local.req.headers['content-type']
3857
3886
  }
3858
3887
 
@@ -3862,11 +3891,11 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
3862
3891
  // proxy_set_header X-Ingress-IP $server_addr
3863
3892
  // proxy_set_header X-Forwarded-For $remote_addr;
3864
3893
  // # EO - Specific headers for Gina
3865
- if ( typeof(local.req.headers['x-client-ip']) != 'undefined' && local.req.headers['x-client-ip'] != options.headers['x-client-ip'] ) {
3894
+ if ( local.req != null && typeof(local.req.headers['x-client-ip']) != 'undefined' && local.req.headers['x-client-ip'] != options.headers['x-client-ip'] ) {
3866
3895
  options.headers['x-client-ip'] = local.req.headers['x-client-ip']
3867
3896
  }
3868
3897
 
3869
- if ( typeof(local.req.headers['x-ingress-ip']) != 'undefined' && local.req.headers['x-ingress-ip'] != options.headers['x-ingress-ip'] ) {
3898
+ if ( local.req != null && typeof(local.req.headers['x-ingress-ip']) != 'undefined' && local.req.headers['x-ingress-ip'] != options.headers['x-ingress-ip'] ) {
3870
3899
  options.headers['x-ingress-ip'] = local.req.headers['x-ingress-ip']
3871
3900
  }
3872
3901
 
@@ -4183,7 +4212,10 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4183
4212
 
4184
4213
  try {
4185
4214
  // Intercepting fallback redirect (3xx)
4186
- if (data.status && /^3/.test(data.status) && typeof data.headers !== 'undefined') {
4215
+ // #B33 local.res may be null when the response lands after a terminal
4216
+ // exit released the triplet; skip the intercept and fall through to the
4217
+ // non-2xx handling (whose throwError no-ops on a released response).
4218
+ if (local.res != null && data.status && /^3/.test(data.status) && typeof data.headers !== 'undefined') {
4187
4219
  local.res.writeHead(data.status, data.headers);
4188
4220
  return local.res.end();
4189
4221
  }
@@ -4255,7 +4287,10 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4255
4287
  }
4256
4288
  }
4257
4289
 
4258
- if (data.status && /^3/.test(data.status) && typeof data.headers !== 'undefined') {
4290
+ // #B33 same released-response skip as the callback-mode intercept above;
4291
+ // emitter mode falls through to the query#complete emit so listeners
4292
+ // still learn the outcome.
4293
+ if (local.res != null && data.status && /^3/.test(data.status) && typeof data.headers !== 'undefined') {
4259
4294
  self.removeAllListeners(['query#complete']);
4260
4295
  local.res.writeHead(data.status, data.headers);
4261
4296
  return local.res.end();
@@ -4922,6 +4957,12 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4922
4957
 
4923
4958
  var getSession = function() {
4924
4959
  var session = null;
4960
+ // #B33 — local.req is null after a terminal exit released the triplet; callers
4961
+ // like isHaltedRequest() run from HTTP/2 response handlers that can fire on a
4962
+ // released request (retry/late-response paths). No session on a released request.
4963
+ if ( local.req == null ) {
4964
+ return null;
4965
+ }
4925
4966
  if ( typeof(local.req.session) != 'undefined') {
4926
4967
  session = local.req.session;
4927
4968
  }
@@ -5266,11 +5307,17 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5266
5307
  * - `throwError(code, err)` — 2-arg form: HTTP status + Error|string
5267
5308
  * - `throwError(res, code, msg)` — internal 3-arg form used by the router
5268
5309
  *
5310
+ * Late calls: when throwError fires after a response terminal exit has
5311
+ * already released the per-request refs (`local.res` is null — e.g. an
5312
+ * entity/query callback resuming after a redirect() sent its 301), the
5313
+ * call is logged and ignored instead of crashing the bundle (#B31).
5314
+ *
5269
5315
  * @param {object} [ res ]
5270
5316
  * @param {number} code
5271
5317
  * @param {string} msg
5272
5318
  *
5273
- * @returns {void}
5319
+ * @returns {void|boolean} `false` when the call is ignored (nested
5320
+ * rendering stack, or a late call on a released response)
5274
5321
  * */
5275
5322
  this.throwError = function(res, code, msg) {
5276
5323
 
@@ -5388,6 +5435,32 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5388
5435
  }
5389
5436
 
5390
5437
  var responseHeaders = null;
5438
+ // #B31 — a late throwError (an entity/query callback, timer or catch
5439
+ // handler resuming after the action already responded) can fire AFTER
5440
+ // a terminal exit (redirect()/render*()/a previous throwError) released
5441
+ // local.req/res/next. Every call shape above has normalized `res` to
5442
+ // local.res by this point, so a null `res` means the response is gone:
5443
+ // reading getHeaders off it threw `Cannot read properties of null
5444
+ // (reading 'getHeaders')` — an uncaughtException that proc.js escalates
5445
+ // to SIGTERM, killing the bundle and every in-flight request with it
5446
+ // (same crash class as #B30: fix the throw site, never widen the
5447
+ // uncaughtException net). Log the swallowed error so the late failure
5448
+ // stays observable, then no-op — same return contract as the
5449
+ // renderingStack guard above.
5450
+ if ( !res ) {
5451
+ res = local.res;
5452
+ }
5453
+ if ( !res ) {
5454
+ var _lateError = errorObject || msg || code;
5455
+ var _lateErrorStr = '';
5456
+ try {
5457
+ _lateErrorStr = ( _lateError && typeof(_lateError) == 'object' ) ? JSON.stringify(_lateError) : String(_lateError || '');
5458
+ } catch (_lateJsonErr) {
5459
+ _lateErrorStr = String(_lateError);
5460
+ }
5461
+ console.warn('[ Controller ] throwError() called after the response was released — ignoring late error: '+ _lateErrorStr);
5462
+ return false;
5463
+ }
5391
5464
  if ( typeof(res.getHeaders) == 'undefined' && typeof(res.stream) != 'undefined' ) {
5392
5465
  responseHeaders = res.stream.sentHeader;
5393
5466
  } else {
@@ -129,9 +129,38 @@ function Router(env, scope) {
129
129
  SuperController = require(_(corePath +'/controller/index.js', true));
130
130
 
131
131
  if (_hotReload) _hotReload.core = false; // #M6 — clear flag after eviction
132
+
133
+ pruneDeadModuleChildren();
132
134
  corePath = null;
133
135
  }
134
136
 
137
+ /**
138
+ * Prunes stale `Module` references from every cached module's `children`
139
+ * array after the eviction cycle above. Each cache-miss `require()` pushes
140
+ * the fresh `Module` onto the requiring module's `children` (Node only
141
+ * dedupes on cache hits), so without pruning this long-lived router module
142
+ * accumulates one dead controller `Module` per request, each pinning its
143
+ * whole evaluated exports graph — the dev-mode per-request memory leak.
144
+ *
145
+ * Local copy of the sweep in `core/server.isaac.js` — the engine-agnostic
146
+ * router cannot depend on an engine module, and the `lib` registry is
147
+ * itself evicted per request. Keep both copies in sync.
148
+ *
149
+ * @inner
150
+ * @returns {undefined}
151
+ */
152
+ var pruneDeadModuleChildren = function() {
153
+ var cacheIds = Object.keys(require.cache);
154
+ for (var i = 0, len = cacheIds.length; i < len; i++) {
155
+ var cached = require.cache[cacheIds[i]];
156
+ if (cached && cached.children && cached.children.length > 0) {
157
+ cached.children = cached.children.filter(function onPruneFilter(child) {
158
+ return require.cache[child.id] === child;
159
+ });
160
+ }
161
+ }
162
+ }
163
+
135
164
  this.setServerInstance = function(serverInstance) {
136
165
  serverInstance._http2streamEventInitalized = false;
137
166
  self.serverInstance = serverInstance;
@@ -243,8 +243,48 @@ var refreshCore = function() {
243
243
  delete require.cache[require.resolve(pluginsIndexPath)];
244
244
  var freshPlugins = require( pluginsIndexPath );
245
245
  require.cache[_(corePath + '/gna.js', true)].exports.plugins = freshPlugins;
246
+
247
+ pruneDeadModuleChildren();
246
248
  }
247
249
 
250
+ /**
251
+ * Prunes stale `Module` references from every cached module's `children` array.
252
+ *
253
+ * Each cache-miss `require()` pushes the freshly created `Module` onto the
254
+ * requiring module's `children` array — Node only dedupes on cache hits — so the
255
+ * per-request delete-and-re-require cycles in `refreshCore()` (and the router's
256
+ * `refreshCoreDependencies()`) make long-lived parents accumulate one dead
257
+ * `Module` per eviction: this engine module, `router.js`, and any module with a
258
+ * lazy in-function `require()` of an evicted lib. Every dead `Module` pins its
259
+ * entire evaluated exports graph. Measured on a minimal bundle in dev mode:
260
+ * ~1.8 MB of post-GC live heap retained per request, ending in a heap-limit
261
+ * OOM (SIGABRT) at ~2400 requests.
262
+ *
263
+ * Keeping only children whose resolved id still maps to that same instance in
264
+ * `require.cache` releases the dead graphs. `children` is diagnostic metadata
265
+ * (nothing in Node's resolution reads it), so pruning never unloads a module
266
+ * still referenced elsewhere.
267
+ *
268
+ * A local copy of the same sweep lives in `core/router.js` — the engine-agnostic
269
+ * router cannot depend on an engine module, and the `lib` registry is itself
270
+ * evicted per request. Keep both copies in sync.
271
+ *
272
+ * @memberof module:gina/core/server.isaac
273
+ * @inner
274
+ * @returns {undefined}
275
+ */
276
+ var pruneDeadModuleChildren = function() {
277
+ var cacheIds = Object.keys(require.cache);
278
+ for (var i = 0, len = cacheIds.length; i < len; i++) {
279
+ var cached = require.cache[cacheIds[i]];
280
+ if (cached && cached.children && cached.children.length > 0) {
281
+ cached.children = cached.children.filter(function onPruneFilter(child) {
282
+ return require.cache[child.id] === child;
283
+ });
284
+ }
285
+ }
286
+ };
287
+
248
288
  // Express compatibility
249
289
  const slice = Array.prototype.slice;
250
290
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gina-framework",
3
- "version": "0.5.1-alpha.1",
3
+ "version": "0.5.1-alpha.3",
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.1-alpha.1/core/gna');
18
+ var _gna = require('./framework/v0.5.1-alpha.3/core/gna');
19
19
 
20
20
  // SuperController and EntitySuper — loaded from their source modules
21
- var SuperController = require('./framework/v0.5.1-alpha.1/core/controller');
22
- var EntitySuper = require('./framework/v0.5.1-alpha.1/core/model/entity');
21
+ var SuperController = require('./framework/v0.5.1-alpha.3/core/controller');
22
+ var EntitySuper = require('./framework/v0.5.1-alpha.3/core/model/entity');
23
23
 
24
24
  // uuid — from the lib registry
25
- var uuid = require('./framework/v0.5.1-alpha.1/lib/uuid');
25
+ var uuid = require('./framework/v0.5.1-alpha.3/lib/uuid');
26
26
 
27
27
  module.exports = {
28
28