gina 0.3.7 → 0.3.8
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.
- package/CHANGELOG.md +4 -0
- package/framework/v0.3.8/VERSION +1 -0
- package/gna.js +4 -4
- package/llms.txt +5 -1
- package/package.json +5 -3
- package/script/post_install.js +40 -6
- package/script/pre_install.js +36 -5
- package/framework/v0.3.7/VERSION +0 -1
- /package/framework/{v0.3.7 → v0.3.8}/AUTHORS +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/LICENSE +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/html/static.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/config.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/lib/connector.v2.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/content.encoding +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/controller/controller.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/controller/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/dev/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/gna.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/locales/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/locales/currency.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/locales/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/mime.types +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/model/entity.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/model/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/model/template/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/file/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/file/build.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/file/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/intl/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/intl/build.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/intl/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/intl/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/router.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/server.express.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/server.isaac.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/server.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/status.codes +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/_gitignore +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/conf/env.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/conf/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/console.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/context.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/data/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/data/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/json/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/json/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/path.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/prototypes.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/task.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/helpers/text.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/archiver/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/archiver/build.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/archiver/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/async/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/async/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cache/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cache/build.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cache/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/collection/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/collection/build.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/collection/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/config.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cron/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cron/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/domain/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/domain/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/generator/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/inherits/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/inherits/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/math/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/merge/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/merge/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/model.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/proc.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/routing/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/routing/build.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/routing/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/session-store.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/shell.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/state.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/url/README.md +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/url/index.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/url/routing.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/uuid/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/validator.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/watcher/package.json +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.3.7 → v0.3.8}/package.json +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,10 @@ 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.3.8 - 2026-04-26
|
|
10
|
+
### Fixed
|
|
11
|
+
* Fixed `npm install -g gina` failing with `Cannot find module 'psl'` on fresh and upgrade installs (regression from 0.3.7). The pre/post-install scripts no longer load the framework `lib` registry — `psl` and `@rhinostone/swig` are now declared as top-level npm dependencies so the runtime resolves them via the standard module resolution chain, and a helpers pre-load in the install scripts ensures `lib/logger`'s circular load completes correctly so internal helpers' module-local `console` references bind to the full Logger singleton.
|
|
12
|
+
|
|
9
13
|
## 0.3.7 - 2026-04-26
|
|
10
14
|
### Added
|
|
11
15
|
* Released `0.3.7` — cumulative stable of the `0.3.7-alpha.1` through `0.3.7-alpha.10` cycle. Headline tracks: **Web Security CSRF trilogy** (`gina.plugins.Session()` cookie hardening + `gina.plugins.Csrf()` signed double-submit token middleware + Origin/Referer pre-filter; OWASP ASVS 4.0 V4.2.1 aligned; opt-in plugin shape; per-route `csrfExempt: true` for webhook receivers). **Nunjucks template engine opt-in** (`render.engine = "nunjucks"` per bundle; filter parity #NJ1, setResources/asset injection #NJ2, render cache #NJ3, Early Hints 103 auto-send #NJ4). **MCP server** (`bundle:mcp` static manifest emit + `bundle:mcp-start` stdio and HTTP transports; #AI8 Phases 1/2a/2b). **Connector CLI** (`connector:list/add/rm/migrate`; #CN10). **Eval-safety hardening** (#SCS1 family — collection safe-evaluator + validator-plugin grammar-locked walker replacements; vendored-dep CVE-visibility invariant locked in via OSV scan workflow). Supply-chain trim (`psl` swap for vendored MPL-2.0 PSL data, `optimist` removal). Release-pipeline hardening (`gna.js` stable-version sync at framework-dir rename, StateStore + gina.db sync across renames, asset-plugin build honours `--gzip-bin`/`--brotli-bin` overrides). Plus `Session.name` drop-in identity restoration in alpha.10. See per-alpha sections for per-feature detail and test counts; full suite 3822/3822 at the stable cut.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.3.8
|
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.3.
|
|
18
|
+
var _gna = require('./framework/v0.3.8/core/gna');
|
|
19
19
|
|
|
20
20
|
// SuperController and EntitySuper — loaded from their source modules
|
|
21
|
-
var SuperController = require('./framework/v0.3.
|
|
22
|
-
var EntitySuper = require('./framework/v0.3.
|
|
21
|
+
var SuperController = require('./framework/v0.3.8/core/controller');
|
|
22
|
+
var EntitySuper = require('./framework/v0.3.8/core/model/entity');
|
|
23
23
|
|
|
24
24
|
// uuid — from the lib registry
|
|
25
|
-
var uuid = require('./framework/v0.3.
|
|
25
|
+
var uuid = require('./framework/v0.3.8/lib/uuid');
|
|
26
26
|
|
|
27
27
|
module.exports = {
|
|
28
28
|
|
package/llms.txt
CHANGED
|
@@ -861,8 +861,12 @@ YAML indent trap: the heredoc body and the `EOF` terminator must land at column
|
|
|
861
861
|
|
|
862
862
|
78. **`git filter-repo` operational gotchas — second-run prompts, origin removal, committer-date SHA churn, and the local-only-tag false positive that makes a previously-cleaned repo *look* like it still has leaks.** Four traps in order: (1) **prior-run safety prompt** — if `.git/filter-repo/already_ran` exists from an earlier rewrite, the next run prints "Treat this run as a continuation of filtering in the previous run (Y/N)?" and reads stdin. `--force` does not bypass it. Pipe `echo Y |` for non-interactive runs. (2) **origin removed** — filter-repo deletes the `origin` remote at the end of every run by design ("so you don't accidentally push the rewritten history"). After the rewrite, `git remote add origin https://github.com/<owner>/<repo>.git` before any push. (3) **committer-date SHA churn** — filter-repo updates committer dates to "now" on every commit it walks, even when message and tree are unchanged. Every reachable commit gets a new SHA. Net effect: a no-op rewrite of an already-clean branch still produces a force-push divergence between local and origin. (4) **local-only-tag false positive** — `git log --all` reaches every ref, including local-only safety-net tags created by prior rewrites (`pre-rewrite-*-DATE`, `pre-history-scrub-*-DATE`). Those tags preserve un-substituted commits as personal backups. They are NOT on origin (verify with `git ls-remote origin 'refs/tags/pre-*'`) and therefore not violating the public-surface rule. Before re-running filter-repo on a previously-cleaned repo, check leak counts per branch with `git log <ref> --format='%s%n%b' | grep -iE '<patterns>' | wc -l` for each live branch individually — if all are zero, the live branches are clean and the only "leaks" left are in personal local-only tags that don't need rewriting. Precedent: 2026-04-25 second-pass leak scrub on gina-io/gina — comprehensive `git log --all` audit found 4 commit subjects + 3 commit bodies with descriptive feature mentions, but per-branch checks showed origin develop/master/dev/wip all already at 0 leaks. The remaining matches lived only in `pre-rewrite-*-20260421T233346Z` tags from a 2026-04-21 prior filter-repo. Today's filter-repo did push develop and dev/wip with cosmetically-different SHAs (force-pushed for nothing) before the per-branch verification surfaced that master was already clean. The reflex "saw leaks via `git log --all`, run filter-repo" needs the per-branch refinement step to avoid unnecessary force-push churn on tracking clones.
|
|
863
863
|
|
|
864
|
-
79. **GitHub branch protection — `allow_force_pushes: false` blocks ALL force-pushes including admin (independent of `enforce_admins`); the dedicated subfield REST endpoint for this flag does not exist.** Two non-obvious behaviors: (1) **flag interaction** — `enforce_admins: false` does NOT mean admins can force-push when `allow_force_pushes: false`. The two flags work on different rule categories: `enforce_admins` controls whether review-style protections (required reviews, status checks) apply to admin actors; `allow_force_pushes` is a flat protocol-level block on history rewriting that GitHub's git backend rejects regardless of admin status. So `enforce_admins: false` + `allow_force_pushes: false` means: admins can merge without review, but cannot force-push. To force-push to a protected branch as admin, `allow_force_pushes` must be flipped to `true` (temporarily) before the push, then back to `false` after. (2) **subfield endpoint absence** — GitHub's REST API documents per-subfield endpoints for some protection flags (`POST/DELETE /repos/.../protection/required_signatures`, `enforce_admins`), but `POST /repos/.../protection/allow_force_pushes` and `DELETE /repos/.../protection/allow_force_pushes` both return `404 Not Found`. The subfield API is partial. To toggle `allow_force_pushes`, use either the full `PUT /repos/.../protection` payload (with all required fields including `required_status_checks`, `enforce_admins`, `required_pull_request_reviews`, `restrictions` — null for those without rules), or `DELETE /repos/.../protection` to drop protection entirely then re-`PUT` to recreate. The web UI Settings → Branches → "Allow force pushes" toggle is also a clean path when an admin is at the keyboard. **Best non-destructive workflow** when force-push is needed for a one-off operation: have an admin lift via web UI → push → admin re-enables. The API path is brittle (the full-PUT payload must be reconstructed exactly to avoid losing other rule settings). Precedent: 2026-04-25 leak scrub — attempted `gh api -X POST repos/gina-io/gina/branches/master/protection/allow_force_pushes` to allow a force-push of master, got 404 (subfield endpoint absent), the push correctly failed, no protection state was modified (verified after via `gh api .../protection --jq`). The 404 was harmless — neither flip happened — but the master push didn't go through either. master turned out to already be clean from the prior rewrite, so no push was actually needed.
|
|
864
|
+
79. **GitHub branch protection — `allow_force_pushes: false` blocks ALL force-pushes including admin (independent of `enforce_admins`); the dedicated subfield REST endpoint for this flag does not exist.** Two non-obvious behaviors: (1) **flag interaction** — `enforce_admins: false` does NOT mean admins can force-push when `allow_force_pushes: false`. The two flags work on different rule categories: `enforce_admins` controls whether review-style protections (required reviews, status checks) apply to admin actors; `allow_force_pushes` is a flat protocol-level block on history rewriting that GitHub's git backend rejects regardless of admin status. So `enforce_admins: false` + `allow_force_pushes: false` means: admins can merge without review, but cannot force-push. To force-push to a protected branch as admin, `allow_force_pushes` must be flipped to `true` (temporarily) before the push, then back to `false` after. (2) **subfield endpoint absence** — GitHub's REST API documents per-subfield endpoints for some protection flags (`POST/DELETE /repos/.../protection/required_signatures`, `enforce_admins`), but `POST /repos/.../protection/allow_force_pushes` and `DELETE /repos/.../protection/allow_force_pushes` both return `404 Not Found`. The subfield API is partial. To toggle `allow_force_pushes`, use either the full `PUT /repos/.../protection` payload (with all required fields including `required_status_checks`, `enforce_admins`, `required_pull_request_reviews`, `restrictions` — null for those without rules), or `DELETE /repos/.../protection` to drop protection entirely then re-`PUT` to recreate. The web UI Settings → Branches → "Allow force pushes" toggle is also a clean path when an admin is at the keyboard. **Best non-destructive workflow** when force-push is needed for a one-off operation: have an admin lift via web UI → push → admin re-enables. The API path is brittle (the full-PUT payload must be reconstructed exactly to avoid losing other rule settings). Precedent: 2026-04-25 leak scrub — attempted `gh api -X POST repos/gina-io/gina/branches/master/protection/allow_force_pushes` to allow a force-push of master, got 404 (subfield endpoint absent), the push correctly failed, no protection state was modified (verified after via `gh api .../protection --jq`). The 404 was harmless — neither flip happened — but the master push didn't go through either. master turned out to already be clean from the prior rewrite, so no push was actually needed. **2026-04-26 update (gina@0.3.7 stable cut, master-reset session)** — UI toggle did NOT take effect. Two attempts via Settings → Branches → "Allow force pushes" → Save left the underlying state unchanged (force-push still rejected with `GH006: Protected branch update failed`). Classic protection settings looked normal; rulesets API was empty (no competing rule). API-fallback PUT (full payload, `allow_force_pushes: true`) worked first try; flipped back after the push. Possible causes: stale browser session, Org-level enforcement, UI bug. **Refined pattern**: if the UI doesn't take effect after one attempt (verify immediately with `gh api repos/<owner>/<repo>/branches/<branch>/protection --jq .allow_force_pushes.enabled`), fall back to API-PUT — don't retry the UI. Saves a round-trip on a class of failure that's hard to diagnose at the UI layer.
|
|
865
865
|
|
|
866
866
|
80. **Plan-vs-shipped attribute drift — when a multi-commit feature plan declares an interface attribute name, the shipped implementation may diverge, and downstream commits silently propagate the wrong name unless every fresh session re-grounds against the source.** The trap: a planning document or upstream commit prompt declares an interface attribute (e.g. "the plugin attaches the token to `req._csrfToken`"). The actual implementation, once written, names it differently (`req.csrfToken` — no underscore). Downstream commits that depend on the attribute (controller exposing it to template context, validator AJAX reading it off `req`, tests asserting on the name) all reference the original planned name unless their author re-verifies. The plan looks coherent; the code drifts. **Detection pattern**: every fresh agent session implementing a downstream commit must `grep -n '<attribute>' <upstream-source-file>` before referencing the attribute. If the plan and the source disagree, the source wins — re-read the plan, fix the references, flag the upstream-plan inconsistency in the session report so the planner can correct future-downstream prompts. **The source of truth for an in-flight feature is the shipped code on `develop`, not the upstream plan or prompt.** Plans rot the moment implementation deviates; planning hygiene means re-grounding every multi-commit feature against the latest develop tip before downstream work. Precedent: 2026-04-25 #CSRF2 implementation — the plan-of-record (commit-3 prompt) said `req._csrfToken`; commit-1's plugin attached `req.csrfToken` (verified at `core/plugins/lib/csrf/src/main.js:377,407`). The fresh agent for commit 3 caught it via the grep pattern and used the correct name, preventing silent wrong-attribute propagation into controller.js + 25 new tests + the planned docs guide.
|
|
867
867
|
|
|
868
868
|
81. **CI flake-vs-regression triage — when a CI run fails on a commit, look for a same-message-different-SHA pair before assuming the code is buggy.** Rebases or amends produce two commits with identical messages but different SHAs. If `gh run list --repo <owner>/<repo> --branch <branch> --limit 10 --json databaseId,conclusion,headSha,name,displayTitle` shows the earlier SHA passed Tests and the later SHA failed, run `git diff --stat A..B` between them — empty output proves byte-identical content. Same content + different CI outcome = environmental flake, not regression, and the test should not be touched (per the "Don't change existing tests unless asked" rule). **Reproduce shape matters**: a single-file local run (`node --test test/lib/<file>.test.js`) is necessary but not sufficient — CI invokes all four directories in one process (`node --test test/core/*.test.js test/lib/*.test.js test/bin/*.test.js test/integration/helper.test.js`), and module / parallelism state shape differs between the two. Reproduce with the **exact CI invocation** before falling back to a rerun. **Cheapest discriminator order**: (1) `git diff --stat` between same-message SHAs (proves content-identical, ~1 second); (2) full-suite local invocation with the exact CI command (proves logic-deterministic at scale, ~30s); (3) `gh run rerun <id> --repo <owner>/<repo>` if (1)+(2) survive — green retry confirms environmental flake, red retry escalates to CI-environment investigation (Node version drift, runner timing, fixture pollution across the parallel file dispatch). **Watchlist hygiene**: log single-occurrence flakes to a local post-mortem journal under "CI flake watchlist" — `gh run list` retention defaults to 90 days, so without a local note a recurrence in 6 months looks like a first occurrence. Two occurrences of the same flake on a deterministic in-memory test = pattern, not coincidence. Precedent: 2026-04-26 — `test/lib/collection.test.js > 05 - delete > delete: Hotel without ids WHERE country = France` flaked once on run #24938620953 (`d1ea0a72`, 2026-04-25, Node 24.14.1, Ubuntu); same-content earlier SHA `623e4232` had passed; full-suite local run was 3766/3766 clean; rerun went green. Watchlist entry filed in the local post-mortem journal.
|
|
869
|
+
|
|
870
|
+
82. **Source-inspection tests that assert source order — `src.indexOf('<funcName>(<args>)')` matches the function DEFINITION before the call site, not the call site.** When a test asserts "A must be called before B" via `indexOf` on a function-name-with-args fragment, the match lands on the `function <funcName>(<args>)` definition near the top of the file, not the call site lower in the body. If both names are defined in the same source-order as their call sites, the assertion accidentally passes for the wrong reason; if they're defined in a different order than they're called (helper defined first, used last), it fails for the wrong reason. **Discrimination test**: `grep -c '<pattern>' <file>` — if the count is > 1, the indexOf is ambiguous and the assertion is unreliable. **Fix**: search for a unique call-site fragment that doesn't appear in the function definition — typically the assignment LHS (`requestOrigin = parseRequestOrigin(req)`, `presented = readPresentedToken(req`). Definitions never contain the assignment target. Same trap applies to any pattern where definition and call share the same identifier syntax — method names, event listener attachments, even `console.error('[<feature>]'` template strings. Precedent: 2026-04-26 #CSRF3 implementation — section 14 source-inspection test "Origin pre-filter runs AFTER the csrfExempt short-circuit" failed at first because `indexOf('parseRequestOrigin(req)')` matched the `function parseRequestOrigin(req)` definition (line 152) before the call site (line 531); switched to `indexOf('requestOrigin = parseRequestOrigin(req)')` (assignment-form, unique to the call site). The sibling "BEFORE token verify" test passed only by coincidence — the `parseRequestOrigin` definition was already before the `readPresentedToken` definition in the file.
|
|
871
|
+
|
|
872
|
+
83. **`Origin: "null"` is a real value browsers send — sandboxed iframes (`<iframe sandbox>`), `file://` pages, and some redirected requests carry the literal string `"null"` in the Origin header (and in `Sec-Fetch-Site: cross-site` flows).** Origin-checking code that does `if (origin) { /* allowlist match */ }` treats `"null"` as truthy and tries to match it. Without an explicit guard the result is wrong-for-the-right-outcome at best: the allowlist almost never contains `"null"`, so the request 403s — but for the wrong reason (it should fall through to the Referer fallback or a known-no-origin handler, not be rejected for "origin not in allowlist"). The same trap applies to CORS allowlists, CSRF Origin pre-filters, audit logging, and any code branching on `Origin`. **Fix**: add an explicit `s === 'null'` guard at the start of the Origin parser, treating `"null"` exactly like an absent header — empty result, fall through to the next signal (Referer, Sec-Fetch metadata, etc.). Document the guard with a brief comment so it isn't "cleaned up" by a future contributor who reads it as a no-op string check. Precedent: 2026-04-26 #CSRF3 implementation — `parseOriginString` at `core/plugins/lib/csrf/src/main.js:108` returns `null` (the JS literal) when input is the string `"null"`, so `parseRequestOrigin` falls back to parsing the host out of `Referer`. Two unit tests pin this behaviour: `Origin: "null"` + missing `Referer` → 403 with reason "missing origin/referer"; `Origin: "null"` + valid `Referer` → next() called. Without the guard, the missing-Referer case would have 403'd with reason "origin not allowed", masking the real problem from any operator reading the log.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gina",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
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",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"gina-container": "bin/gina-container",
|
|
57
57
|
"gina-init": "bin/gina-init"
|
|
58
58
|
},
|
|
59
|
-
"main": "./framework/v0.3.
|
|
59
|
+
"main": "./framework/v0.3.8/core/gna",
|
|
60
60
|
"types": "./types/index.d.ts",
|
|
61
61
|
"typesVersions": {
|
|
62
62
|
"*": {
|
|
@@ -78,7 +78,9 @@
|
|
|
78
78
|
"license": "MIT",
|
|
79
79
|
"readmeFilename": "README.md",
|
|
80
80
|
"dependencies": {
|
|
81
|
-
"
|
|
81
|
+
"@rhinostone/swig": "^1.6.0",
|
|
82
|
+
"engine.io": "^6.0.0",
|
|
83
|
+
"psl": "^1.15.0"
|
|
82
84
|
},
|
|
83
85
|
"devDependencies": {
|
|
84
86
|
"csso-cli": "4.0.2",
|
package/script/post_install.js
CHANGED
|
@@ -61,14 +61,44 @@ var getUserHome = function() {
|
|
|
61
61
|
// `colors` dependency removed in 0.3.1 — ANSI codes are now built into the logger.
|
|
62
62
|
// No temporary install needed.
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
// Framework lib registry is intentionally not loaded here. At install time the
|
|
65
|
+
// framework's nested deps (psl, @rhinostone/swig) may not yet be resolvable, and
|
|
66
|
+
// `lib/domain` would crash on `require('psl')`. Node's built-in `console` is
|
|
67
|
+
// sufficient for the install scripts; `console.setLevel` (a `lib.logger`-only
|
|
68
|
+
// method) is gated below.
|
|
66
69
|
|
|
67
70
|
var scriptPath = __dirname;
|
|
68
71
|
var ginaPath = (scriptPath.replace(/\\/g, '/')).replace('/script', '');
|
|
69
|
-
var help = require(ginaPath + '/utils/helper.js');
|
|
70
72
|
var pack = ginaPath + '/package.json';
|
|
71
73
|
pack = (isWin32()) ? pack.replace(/\//g, '\\') : pack;
|
|
74
|
+
|
|
75
|
+
// Pre-load framework helpers BEFORE utils/helper. utils/helper.js's init()
|
|
76
|
+
// calls `require('framework/v*/lib/logger')`, which itself requires
|
|
77
|
+
// `framework/v*/helpers` (lib/logger:64). When utils/helper is the outer
|
|
78
|
+
// caller of lib/logger, lib/logger blocks at its helpers require and the
|
|
79
|
+
// iteration's `_require` reloads path.js / task.js while lib/logger is still
|
|
80
|
+
// mid-load — their module-local `var console = require('../lib/logger')`
|
|
81
|
+
// then binds to a partial module.exports (= {}), so a later `console.debug`
|
|
82
|
+
// in `task.js#run()` throws TypeError. Pre-loading helpers here makes
|
|
83
|
+
// helpers/index.js the outer caller, so lib/logger completes inside
|
|
84
|
+
// context.js's trigger and the subsequent `_require` reloads of path.js/
|
|
85
|
+
// task.js see the full Logger singleton from cache.
|
|
86
|
+
// Filesystem-driven version discovery so this stays correct across version
|
|
87
|
+
// bumps that may temporarily skew package.json `version` and the framework
|
|
88
|
+
// directory name (e.g. during a patch release window).
|
|
89
|
+
try {
|
|
90
|
+
var _frameworkDir = fs.readdirSync(ginaPath + '/framework')
|
|
91
|
+
.filter(function(d) { return /^v/.test(d); })
|
|
92
|
+
.sort()
|
|
93
|
+
.pop();
|
|
94
|
+
if (_frameworkDir) {
|
|
95
|
+
require(ginaPath + '/framework/' + _frameworkDir + '/helpers');
|
|
96
|
+
}
|
|
97
|
+
} catch (_e) {
|
|
98
|
+
// best-effort preload; the actual install steps will surface any real failure
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
var help = require(ginaPath + '/utils/helper.js');
|
|
72
102
|
var helpers = null;
|
|
73
103
|
|
|
74
104
|
|
|
@@ -135,7 +165,10 @@ function PostInstall() {
|
|
|
135
165
|
|
|
136
166
|
if ( /^\-\-log-level\=/.test(args[i]) ) {
|
|
137
167
|
var logLevel = args[i].split(/\=/)[1];
|
|
138
|
-
|
|
168
|
+
// setLevel is a lib.logger method; Node's built-in console doesn't expose it.
|
|
169
|
+
if ( typeof(console.setLevel) === 'function' ) {
|
|
170
|
+
console.setLevel(logLevel, 'gina');
|
|
171
|
+
}
|
|
139
172
|
process.env.LOG_LEVEL=logLevel;
|
|
140
173
|
}
|
|
141
174
|
}
|
|
@@ -168,7 +201,8 @@ function PostInstall() {
|
|
|
168
201
|
]
|
|
169
202
|
};
|
|
170
203
|
console.warn('No `package.json` found for your project, creating one to avoid install exceptions');
|
|
171
|
-
lib
|
|
204
|
+
// Inlined to avoid loading the framework lib registry at install time.
|
|
205
|
+
fs.writeFileSync(projectPackageJsonObj.toString(), JSON.stringify(defaultPackageJsonContent, null, 4));
|
|
172
206
|
}
|
|
173
207
|
}
|
|
174
208
|
|
|
@@ -301,7 +335,7 @@ function PostInstall() {
|
|
|
301
335
|
try {
|
|
302
336
|
await promisify(funct)();
|
|
303
337
|
} catch (e) {
|
|
304
|
-
console.error(e.toString());
|
|
338
|
+
console.error(e && e.stack ? e.stack : e.toString());
|
|
305
339
|
process.exit(1);
|
|
306
340
|
return;
|
|
307
341
|
}
|
package/script/pre_install.js
CHANGED
|
@@ -14,11 +14,39 @@ var util = require('util');
|
|
|
14
14
|
var promisify = util.promisify;
|
|
15
15
|
var { execSync } = require('child_process');
|
|
16
16
|
|
|
17
|
-
//
|
|
18
|
-
// var console = lib.logger;
|
|
19
|
-
var lib = null;
|
|
17
|
+
// Framework lib registry is intentionally not loaded here — see checkIfGinaIsAlreadyInstalled.
|
|
20
18
|
var helpers = null;
|
|
21
19
|
|
|
20
|
+
// Pre-load framework helpers BEFORE utils/helper. utils/helper.js's init()
|
|
21
|
+
// calls `require('framework/v*/lib/logger')`, which itself requires
|
|
22
|
+
// `framework/v*/helpers` (lib/logger:64). When utils/helper is the outer
|
|
23
|
+
// caller of lib/logger, lib/logger blocks at its helpers require and the
|
|
24
|
+
// iteration's `_require` reloads path.js / task.js while lib/logger is still
|
|
25
|
+
// mid-load — their module-local `var console = require('../lib/logger')`
|
|
26
|
+
// then binds to a partial module.exports (= {}). path.js guards
|
|
27
|
+
// `console.debug`/`info` with `typeof`, but `console.warn` (line 220) and
|
|
28
|
+
// `console.error` (lines 575/872/902) are unguarded — disk-error code paths
|
|
29
|
+
// in cp/rm during checkIfGinaIsAlreadyInstalled's archive backup would crash.
|
|
30
|
+
// Pre-loading helpers here makes helpers/index.js the outer caller, so
|
|
31
|
+
// lib/logger completes inside context.js's trigger and the subsequent
|
|
32
|
+
// `_require` reloads see the full Logger singleton from cache.
|
|
33
|
+
// Filesystem-driven version discovery so this stays correct across version
|
|
34
|
+
// bumps that may temporarily skew package.json `version` and the framework
|
|
35
|
+
// directory name.
|
|
36
|
+
try {
|
|
37
|
+
var _scriptPath = __dirname;
|
|
38
|
+
var _ginaPath = (_scriptPath.replace(/\\/g, '/')).replace('/script', '');
|
|
39
|
+
var _frameworkDir = fs.readdirSync(_ginaPath + '/framework')
|
|
40
|
+
.filter(function(d) { return /^v/.test(d); })
|
|
41
|
+
.sort()
|
|
42
|
+
.pop();
|
|
43
|
+
if (_frameworkDir) {
|
|
44
|
+
require(_ginaPath + '/framework/' + _frameworkDir + '/helpers');
|
|
45
|
+
}
|
|
46
|
+
} catch (_e) {
|
|
47
|
+
// best-effort preload; the actual install steps will surface any real failure
|
|
48
|
+
}
|
|
49
|
+
|
|
22
50
|
/**
|
|
23
51
|
* Pre install constructor
|
|
24
52
|
*
|
|
@@ -426,9 +454,12 @@ function PreInstall() {
|
|
|
426
454
|
|
|
427
455
|
var frameworkPath = self.versionPath;
|
|
428
456
|
try {
|
|
457
|
+
// utils/helper sets up the global `_()` path helper. We deliberately do NOT
|
|
458
|
+
// load the framework's full `lib` registry here — at preinstall time the
|
|
459
|
+
// framework's nested npm deps (psl, @rhinostone/swig) may not be resolvable
|
|
460
|
+
// yet, and `lib/domain` would crash on `require('psl')`. Node's built-in
|
|
461
|
+
// `console` is sufficient for the install scripts.
|
|
429
462
|
helpers = require(self.gina+ '/utils/helper');
|
|
430
|
-
lib = require('./lib');
|
|
431
|
-
console = lib.logger;
|
|
432
463
|
} catch (err) {
|
|
433
464
|
return done(err)
|
|
434
465
|
}
|
package/framework/v0.3.7/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.3.7
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css
RENAMED
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js
RENAMED
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/beemaster/index.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br
RENAMED
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz
RENAMED
|
File without changes
|
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/inspector/index.html
RENAMED
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css
RENAMED
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js
RENAMED
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br
RENAMED
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/config/connectors.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/config/settings.server.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{v0.3.7 → v0.3.8}/core/template/boilerplate/bundle/controllers/controller.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|