20260830 - v1.0.0

Date: 2026-08-30
Summary
Introducing v1.0.0: The GenericSuite Superproject is Live! π
This release marks a foundational milestone for the ecosystem: a Flutter mobile app development package, code generation skills, security tools and policies skills, and a documentation mobile app are introduced. Also GenericSuite now ships as a unified Superproject, bringing all 16 packages together as git submodules under one monorepo, with shared automation and AI-agent context guiding every package alike. It's the biggest structural release in GenericSuite's history, and it's paired with a sweeping hardening and expansion pass across the board.
Key Professional Benefits:
-
New Packages:
genericsuite-mobile,genericsuite-mobile-exampleapp(for mobile app development with Flutter),genericsuite-basecamp-app(documentation mobile app),genericsuite-skills(application generation skills),genericsuite-security(security tools and policies), andgenericsuite-fe-scripts(frontend common scripts), all debut this cycle, plus a new OpenTofu (Terraform) deployment path. -
One Ecosystem, One Home: The new Superproject orchestrates all GenericSuite packages β frontend, backend, mobile, scripts, docs, and now security β from a single root, with
AGENTS.md/GEMINI.md/CLAUDE.mdcontext files threaded through every package for AI coding assistants. -
Security, Everywhere: Python 3.14 and Node.js 26 across the board, MIT licensing ecosystem-wide, dozens of CVE fixes (axios, LangChain/aiohttp, Vite, Forge), FastAPI/Flask rate limiting, and a brand-new GenericSuite Security Suite β five Claude Skills born directly from responding to the Shai-Hulud npm supply-chain worm.
-
1-1 and 1-N Relationships, Everywhere: The new
select_tablefield type lands in both the React and Flutter CRUD editors, joining the FlutterchildComponentssupport for 1-N relationships. -
Cloud-Agnostic Storage and Secrets: GCP Cloud Storage and Azure Blob Storage join AWS S3, plus GCP Secret Manager and Azure Key Vault as secret backends β genericsuite-be starts speaking to all three major clouds.
-
AWS deployments with OpenTofu: The new OpenTofu (Terraform) deployment path alongside CloudFormation for AWS deployments.
Check out the full changelog for every detail across all 16 packages!
IMPORTANT: check the 20260830 - v1.0.0 - Migration Guide to migrate from the previous version to the new one.
GenericSuite Superproject
Package, Pull Request and Tag
- Pull Request: https://github.com/tomkat-cr/genericsuite/pull/2
- Tag: https://github.com/tomkat-cr/genericsuite/releases/tag/1.0.0
Pull Request Overview
Introducing the GenericSuite superproject structure
This pull request establishes the GenericSuite Superproject as a monorepo orchestration layer, bringing all 16 GenericSuite packages together as git submodules under a single repository. It adds automation scripts to sync and manage packages, project-wide documentation, and AI Coding Assistant context files, laying the foundation for coordinated, whole-ecosystem releases like this one.
Highlights
- Monorepo orchestration layer: all GenericSuite packages (
genericsuite-fe,genericsuite-be,genericsuite-be-ai,genericsuite-fe-ai,genericsuite-basecamp, and more) are now managed as git submodules underpackages/, withmake update-packagesto sync them. - AI Coding Assistant context:
AGENTS.md,GEMINI.md, andCLAUDE.mdgive Claude Code, Gemini CLI, Cursor, Antigravity, and other assistants consistent guidance across the whole ecosystem. - New
release-notesAI skill: automates gathering changelogs, PRs, and tags across every package to produce this very release changelog and its social media summaries.
CHANGELOG.md
[1.0.0] - 2026-08-30
Added
- Add: Introducing the GenericSuite superproject structure with git submodules, automation scripts, and project documentation, to make it easier to manage, change, and deploy the project as a whole [GS-319].
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- Add the
release-notesskill to the.ai./skillsdirectory, to generate release notes and social media summaries for the project [GS-191].
GenericSuite Frontend Core
Package, Pull Request and Tag
- Package: https://www.npmjs.com/package/genericsuite/v/1.3.0
- Pull Request # 1: https://github.com/tomkat-cr/genericsuite-fe/pull/11
- Pull Request # 2: https://github.com/tomkat-cr/genericsuite-fe/pull/12
- Tag: https://github.com/tomkat-cr/genericsuite-fe/releases/tag/1.3.0
Pull Request Overview
AI agent docs, SAST testing, update dependencies, scripts directory moved to GS FE Scripts, MIT license, security fixes
This release adds AI-agent onboarding docs (AGENTS.md/GEMINI.md/CLAUDE.md), introduces SAST testing, and relocates the scripts/ directory into the new standalone frontend scripts library. It adds a select_table field type for 1-1 relationship rendering in the Generic CRUD Editor, switches the license to MIT, and ships a broad security-dependency upgrade pass (axios, yup, react-router-dom, @babel/core) plus Rollup/webpack build fixes that were shipping stray test-declaration files and missing peer-dependency externals.
Highlights
- New
select_tablefield type: listing/read-only views show related-record descriptions with client-side caching; create/edit renders a populated dropdown [GS-259]. scripts/directory moved out to the newgenericsuite-fe-scriptslibrary [GS-107].- License changed to MIT [FA-244]; SAST testing added [GS-315].
- Security: axios, yup, react-router-dom, @babel/core upgraded to fix multiple High/Critical Snyk/CVE vulnerabilities [GS-219].
- Build fixes: Rollup externals for
bson/js-md5, excluded test files from.d.tsemission (~24 stray files removed fromdist), cleaned up dead webpack polyfills and unused dependencies [GS-338].
CHANGELOG.md
[1.3.0] - 2026-08-30
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- Add SAST testing [GS-315].
- Add frontend scripts library [GS-107].
select_tablefield type in the Generic CRUD Editor: listing and read-only form show the related record description ({field}_descriptionfrom the backend, with client-side cached fallback); create/edit renders a dropdown populated from the related table. New JSON attributes:related_table,related_key,description_fields,description_separator,related_filter[GS-259].
Changed
- License changed to MIT [FA-244].
- Rename AWS_S3_BUCKET_NAME to AWS_S3_BUCKET_NAME_FE in the .env and .env.example files [GS-328].
webpack.config.jsandconfig-overrides.js: commented out the Node.js core moduleresolve.fallbackpolyfills (os,url,crypto,stream,vm,tty,constants) since nothing in the codebase needs them and Vite already runs fine without them; addednpm install --save-dev ...notes above each so they can be re-enabled if a consumer's own dependency graph needs them [GS-338].- Update .npmignore to include additional files and directories for Claude Code, AI Agents, and OpenTofu [GS-327].
- Update version to 1.3.0 in package.json, package-lock.json, and version.txt to reflect the latest release [GS-327].
Fixed
- getFieldElementsYupValidations() didn't work with action=CREATION, e.g. it has issues on the user creation (OpenAI API key and model are requested as mandatory when they have null values). Therefore, the Yup validations are disabled for now [GS-251].
bsonpackage version fixed to 7.2.0 to fix the "Uncaught TypeError: globalThis?.process?.getBuiltinModule is not a function" error after upgrading vite to version 8 [GS-268].tsconfig.jsonwas missing anexcludefor*.test.tsx, so every test file got its own.d.tsstub emitted intodist/esmanddist/cjsduring the Rollup build. Sincedistis fully included in the published npm package, this shipped ~24 useless declaration files with every release [GS-338].rollup.config.mjs: addedbsonandjs-md5to theexternalarray. Both are real peer dependencies used insrc/lib/services/id.utilities.jsxandmd5.utilities.jsx, but were missing fromexternal, so Rollup was bundling them directly intodistinstead of treating them as consumer-supplied peer dependencies like every other one [GS-338].- Removed a bogus
"with"entry from the webpackresolve.fallbackconfig βwithis not a Node.js core module, so the fallback never did anything [GS-338]. - "config-overrides.js" updated to fix errors running the app with RUN_BUNDLER="react-scripts" [GS-338] and refactored to use fileURLToPath for path resolution and clean up unused debug logs [GS-327].
- "process" dependency installation on "webpack.config.js" file documentation to to fix errors running the app [GS-338].
- "generic.editor.rfc.common.jsx" and "generic.editor.rfc.service.jsx" fixed to show eventual configuration errors on child listings, and updated to show the editor name in the error messages [GS-327].
- "vite.config.mjs" updated to fix the "(!) Your Vite config uses features that are unsupported by
configLoader: 'native', which is planned to become the default in a future major version of Vite:__dirname(vite.config.mjs:54:42). Useimport.meta.dirnameinstead" after upgrading vite to version 8 [GS-268].
Security
- Upgrade dependencies to latest version: crypto-browserify@^3.12.1, downshift@^9.4.0, react-icons@^5.7.0, react-markdown@^10.1.0, react-syntax-highlighter@^16.1.1 [GS-219] [GS-214].
- Upgrade axios@^1.19.0 to fix the security vulnerabilities [GS-219]:
- Server-side Request Forgery (SSRF) [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-17111062] in axios@1.15.1
- Prototype Pollution [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-17111079] in axios@1.15.1
- Insertion of Sensitive Information Into Sent Data [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-17172681] in axios@1.15.1
- Improperly Controlled Modification of Dynamically-Determined Object Attributes [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-16299921] in axios@1.15.1
- Prototype Pollution [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-17111060] in axios@1.15.1
- Prototype Pollution [Critical Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-16417750] in axios@1.15.1
- Improper Removal of Sensitive Information Before Storage or Transfer [High Severity][https://security.snyk.io/vuln/SNYK-JS-FOLLOWREDIRECTS-16032162] in follow-redirects@1.15.11
- Upgrade yup@^1.7.1 to fix the security vulnerabilities [GS-219]:
- Arbitrary Code Injection [High Severity][https://security.snyk.io/vuln/SNYK-JS-LODASH-15869625] in lodash@4.17.23 introduced by yup@0.32.11 > lodash@4.17.23
- Arbitrary Code Injection [High Severity][https://security.snyk.io/vuln/SNYK-JS-LODASHES-15869627] in lodash-es@4.17.23 introduced by yup@0.32.11 > lodash-es@4.17.23
- Upgrade react-router-dom@^7.18.2 to fix the security vulnerability [GS-219]:
- React Router: RSC Mode CSRF Bypass Allows Action Execution Before 400 Response. This is a follow up to CVE-2026-22030 to address related CSRF flows in unstable RSC code paths.
- "react" and "react-dom" have now peer dependencies with "^18.2.0" that does not affect this codebase because it only uses BrowserRouter/Routes/Route/Link/Navigate, no RSC APIs. By the way React/ReactDOM will be upgraded to 19 on next release to fix the mentioned react-router-dom security vulnerability [GS-219].
- Bump Node.js version in .nvmrc to 26 [GS-339].
- "users_user_history.json", "users_config.json" and "users_api_keys.json" configuration files now use the "mandatoryFilters" parameter in the backend configuration to ensure the user history, config and API keys are forced to the current user [GS-327].
- "users_user_history_admin.json", "users_config_admin.json" and "users_api_keys_admin.json" configuration files don't use the "mandatoryFilters" parameter to let the superuser to see all the user history, config and API keys when editing users [GS-327].
- Upgrade @babel/core to ^7.29.7 to fix the @babel/core: Arbitrary File Read via sourceMappingURL Comment (CVE-2026-49356) [GS-219].
Removed
- The
scripts/directory were moved to the frontend scripts library [GS-107]. - Unused
peerDependencies:react-icons,web-vitals,fs,json-loader,with,constants-browserify,crypto-browserify,os-browserify,stream-browserify,tty-browserify,url,vm-browserify. None are imported anywhere insrc/, and the Node.js core module shims were only ever used by the (optional) webpack/react-app-rewireddev-server configs [GS-338]. - Unused
devDependencies:@babel/cli(nothing invokes thebabelCLI binary),@babel/preset-stage-0(not referenced by any Babel config),@rollup/plugin-typescript(superseded byrollup-plugin-typescript2, which is what's actually used),@testing-library/user-event(no test uses it),file-loaderandurl-loader(SVGs use webpack 5's nativeasset/resourceinstead),path(allrequire('path')calls resolve to Node.js's builtin, not this package) [GS-338]. id="copyButton"attribute from thecomponent [GS-327].
GenericSuite Frontend AI
Package, Pull Request and Tag
- Package: https://www.npmjs.com/package/genericsuite-ai/v/1.3.0
- Pull Request # 1: https://github.com/tomkat-cr/genericsuite-fe-ai/pull/11
- Pull Request # 2: https://github.com/tomkat-cr/genericsuite-fe-ai/pull/12
- Tag: https://github.com/tomkat-cr/genericsuite-fe-ai/releases/tag/1.3.0
Pull Request Overview
AI agent docs, scripts moved to GS FE Scripts, MIT license, and security updates
Mirrors the core FE release: AI-agent docs, MIT relicensing, and the scripts-directory move to genericsuite-fe-scripts. Adds ChatBot UI polish (icon-based copy button, better code-block rendering) and fixes a Formik dependency-resolution error affecting ExampleApp/FastApiTemplate consumers, alongside the same large security-dependency sweep as FE Core plus jest/rollup-plugin-typescript upgrades.
Highlights
- Fixed "Could not resolve dependency: formik@2.4.5" breaking ExampleApp/FastApiTemplate consumers [GS-254].
- ChatBot conversation code blocks: icon-based copy button and rendering fixes [GS-214].
scripts/moved togenericsuite-fe-scripts; License changed to MIT [GS-107] [FA-244].- Security: axios, yup, react-router-dom, jest, rollup-plugin-typescript2/typescript, @babel/core upgrades fixing numerous High/Critical vulnerabilities including RCE-class and DoS issues [GS-219].
- Build/dependency cleanup: removed unused peer/dev dependencies (css-loader, postcss-loader, gh-pages, etc.) [GS-338].
CHANGELOG.md
[1.3.0] - 2026-08-30
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- Add SAST testing [GS-315].
- Add frontend scripts library [GS-107].
Changed
- License changed to MIT [FA-244].
- Rename AWS_S3_BUCKET_NAME to AWS_S3_BUCKET_NAME_FE in the .env file [GS-328].
- ChatBot conversation code blocks enhancements: replace copy text button by an icon, and enhance design [GS-214].
- Add "tailwind-build" script to deploy_ and run_ Makefile commands [GS-214].
webpack.config.jsandconfig-overrides.js: commented out the Node.js core moduleresolve.fallbackpolyfills (os,url,crypto,stream,assert,vm,tty,constants,zlib,https,http,util) since nothing in the codebase needs them and Vite already runs fine without them; addednpm install --save-dev ...notes above each so they can be re-enabled if a consumer's own dependency graph needs them [GS-338].- Update version to 1.3.0 in package.json, package-lock.json, and version.txt to reflect the latest release [GS-327].
Fixed
- "Could not resolve dependency: formik@2.4.5" error in
ExampleApp,FastApiTemplateand all apps that usesgenericsuite-fe-aias a dependency [GS-254]. - "installHook.js:1 TypeError: JY.default.includes is not a function" error when certain ChatBot conversations are clicked and the page becomes empty [GS-214].
tsconfig.jsonwas missing anexcludefor*.test.tsx, so every test file got its own.d.tsstub emitted intodist/esmanddist/cjsduring the Rollup build. These 14 stray files were already committed to the repo and shipping indist/with every npm publish [GS-338].- Removed a bogus
"with"entry from theconfig-overrides.jsresolve.fallbackconfig βwithis not a Node.js core module, so the fallback never did anything [GS-338]. - The
webpack.config.jsfallback referencedrequire.resolve("assert")for a package that was never declared anywhere inpackage.json; documented it in the install note instead of leaving a silently-broken reference [GS-338]. rollup.config.mjs: removedformikfrom theexternalarray β it isn't a declared peer dependency and isn't imported anywhere insrc/(leftover from copyinggenericsuite-fe's Rollup config) [GS-338].- "config-overrides.js" updated to fix errors running the app with RUN_BUNDLER="react-scripts" [GS-338], and refactor it to use fileURLToPath for path resolution and clean up unused debug logs [GS-327].
- "process" dependency installation on "webpack.config.js" file documentation to to fix errors running the app [GS-338].
Security
- json5, postcss, and prismjs security vulnerabilities fixed by upgrading their dependent packages [GS-214].
- Upgrade dependencies to latest version: crypto-browserify@^3.12.1, downshift@^9.4.0, react-icons@^5.7.0, react-markdown@^10.1.0, react-syntax-highlighter@^16.1.1 [GS-219] [GS-214].
- Upgrade axios@^1.19.0 to fix the security vulnerabilities [GS-219]:
- Server-side Request Forgery (SSRF) [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-17111062] in axios@1.15.1
- Prototype Pollution [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-17111079] in axios@1.15.1
- Insertion of Sensitive Information Into Sent Data [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-17172681] in axios@1.15.1
- Improperly Controlled Modification of Dynamically-Determined Object Attributes [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-16299921] in axios@1.15.1
- Prototype Pollution [High Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-17111060] in axios@1.15.1
- Prototype Pollution [Critical Severity][https://security.snyk.io/vuln/SNYK-JS-AXIOS-16417750] in axios@1.15.1
- Improper Removal of Sensitive Information Before Storage or Transfer [High Severity][https://security.snyk.io/vuln/SNYK-JS-FOLLOWREDIRECTS-16032162] in follow-redirects@1.15.11
- Allocation of Resources Without Limits or Throttling in Axios
- form-data: CRLF injection in form-data via unescaped multipart field names and filenames
- Axios: Incomplete Fix for CVE-2025-62718 β NO_PROXY Protection Bypassed via RFC 1122 Loopback Subnet (127.0.0.0/8) in Axios 1.15.0
- Axios: Header Injection via Prototype Pollution
- Axios: unbounded recursion in toFormData causes DoS via deeply nested request data
- follow-redirects leaks Custom Authentication Headers to Cross-Domain Redirect Targets
- Upgrade yup@^1.7.1 to fix the security vulnerabilities [GS-219]:
- Arbitrary Code Injection [High Severity][https://security.snyk.io/vuln/SNYK-JS-LODASH-15869625] in lodash@4.17.23 introduced by yup@0.32.11 > lodash@4.17.23
- Arbitrary Code Injection [High Severity][https://security.snyk.io/vuln/SNYK-JS-LODASHES-15869627] in lodash-es@4.17.23 introduced by yup@0.32.11 > lodash-es@4.17.23
- lodash vulnerable to Prototype Pollution via array path bypass in
_.unsetand_.omit - Upgrade react-router-dom@^7.18.2 to fix the security vulnerability [GS-219]:
- React Router: RSC Mode CSRF Bypass Allows Action Execution Before 400 Response. This is a follow up to CVE-2026-22030 to address related CSRF flows in unstable RSC code paths.
- React Router's vendored turbo-stream v2 allows arbitrary constructor invocation via TYPE_ERROR deserialization leading to Unauth RCE
- React Router vulnerable to XSS in unstable RSC redirect handling via javascript: redirect targets
- React Router vulnerable to DoS via unbounded path expansion in __manifest endpoin
- React Router vulnerable to Denial of Service via reflected user input in single-fetch #105
- Upgrade jest to "^30.4.2", jest-environment-jsdom to "^30.4.1", and "babel-jest" to "^30.4.1" to fix the security vulnerabilities [GS-219].
- @babel/plugin-transform-modules-systemjs generates arbitrary code when compiling malicious input
- ws: Memory exhaustion DoS from tiny fragments and data chunks
- brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups
- js-yaml: YAML merge-key chains can force quadratic CPU consumption
- @babel/core: Arbitrary File Read via sourceMappingURL Comment
- Upgrade rollup-plugin-typescript2 to "^0.37.0" and typescript to "^5.3.3" to fix the security vulnerabilities [GS-219].
- Picomatch: Method Injection in POSIX Character Classes causes incorrect Glob Matching
- Other security vulnerabilities fixed by upgrading their dependent packages [GS-219]:
- SVGO removeScripts plugin leaves some executable scripts intact
- serialize-javascript [removed] Serialize JavaScript is Vulnerable to RCE via RegExp.flags and Date.prototype.toISOString() CVE-2020-7660
- serialize-javascript [removed] Serialize JavaScript has CPU Exhaustion Denial of Service via crafted array-like objects
- PostCSS: Arbitrary file read and information disclosure via attacker-controlled sourceMappingURL in CSS comments
- fast-uri [removed] fast-uri vulnerable to path traversal via percent-encoded dot segments
- fast-uri [removed] fast-uri vulnerable to host confusion via percent-encoded authority delimiters
- fast-uri [removed] fast-uri vulnerable to host confusion via failed IDN canonicalization
- path-to-regexp [removed] path-to-regexp vulnerable to Regular Expression Denial of Service via multiple route parameters CVE-2024-45296
- ip-address [removed] ip-address: Address4 decodes leading-zero octets as decimal while resolvers decode them as octal, allowing SSRF and trust-boundary bypass
- express-rate-limit [removed] express-rate-limit: IPv4-mapped IPv6 addresses bypass per-client rate limiting on servers with dual-stack network
- qs [removed] qs has a remotely triggerable DoS: qs.stringify crashes with TypeError on null/undefined entries in comma-format arrays when encodeValuesOnly is set
- body-parser [removed] body-parser vulnerable to denial of service when invalid limit value silently disables size enforcement
- elliptic [removed] Elliptic Uses a Cryptographic Primitive with a Risky Implementation
- "react" and "react-dom" have now peer dependencies with "^18.2.0" that does not affect this codebase because it only uses BrowserRouter/Routes/Route/Link/Navigate, no RSC APIs. By the way React/ReactDOM will be upgraded to 19 on next release to fix the mentioned react-router-dom security vulnerability [GS-219].
- Bump Node.js version in .nvmrc to 26 [GS-339].
- Upgrade @babel/core to ^7.29.7 to fix the @babel/core: Arbitrary File Read via sourceMappingURL Comment (CVE-2026-49356) [GS-219].
Removed
- The
scripts/directory were moved to the frontend scripts library [GS-107]. - Unused
peerDependencies:react-icons,web-vitals,fs,json-loader,with,constants-browserify,crypto-browserify,os-browserify,stream-browserify,tty-browserify,url,vm-browserify,browserify-zlib,https-browserify,net,stream-http,util,buffer,downshift,history,rxjs,react-markdown,yup. None are imported anywhere insrc/; the CRUD-editor-oriented ones (buffer,downshift,history,rxjs,react-markdown,yup) are already required transitively through thegenericsuitepeer dependency for anyone who needs them, and the Node.js core module shims were only ever used by the (optional) webpack/react-app-rewireddev-server configs [GS-338]. - Unused
devDependencies:@babel/cli,@babel/preset-stage-0,@rollup/plugin-typescript,file-loader,path,url-loader(same reasoning asgenericsuite-fe), andwhatwg-fetch(no test needs it here).@testing-library/user-eventwas kept β unlikegenericsuite-fe, it's genuinely used inChatCodeBlock.test.tsx[GS-338]. - Unnecessary dependencies (css-loader, postcss-loader, style-loader, and , gh-pages). The user can import them if webpack or github pages are going to be used in their app [GS-338].
- 'id="copyButton"' attribute from the
component [GS-327].
GenericSuite Frontend Scripts
Package, Pull Request and Tag
- Package: https://www.npmjs.com/package/genericsuite-fe-scripts/v/1.0.0
- Pull Request # 1: https://github.com/tomkat-cr/genericsuite-fe-scripts/pull/2
- Pull Request # 2: https://github.com/tomkat-cr/genericsuite-fe-scripts/pull/3
- Tag: https://github.com/tomkat-cr/genericsuite-fe-scripts/releases/tag/1.0.0
Pull Request Overview
Create the GS FE scripts library, frontend deployment expanded to be used on landing pages, SAST testing, OpenTofu for FE deployment
The debut release of the GenericSuite Frontend Scripts library β split out of genericsuite-fe's scripts/ directory into its own standalone, reusable package. It expands S3 frontend deployment to support landing pages (not just the main app), and adds a full OpenTofu-based deployment pipeline (private S3 + CloudFront with Origin Access Control, SPA error routing, TLS 1.2, and S3 remote state) parallel to the existing bash-script deployment.
Highlights
- New standalone frontend scripts library, extracted from
genericsuite-fe[GS-107]. - New OpenTofu
frontend-hostingmodule: private S3 + CloudFront (OAC, TLSv1.2_2021, SPA routing) with a fullaws_tf_deploy_to_s3.shpipeline [GS-334]. - FE S3 deployment expanded to support landing pages, not just the main app [GS-328].
CHANGELOG.md
[1.0.0] - 2026-08-30
Added
- Create the frontend scripts library [GS-107].
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- OpenTofu (Terraform-compatible) IaC frontend deployment in
scripts/aws_tf:frontend-hostingmodule (private S3 + CloudFront with Origin Access Control, redirect-to-https, TLSv1.2_2021, SPA error routing) andaws_tf_deploy_to_s3.shfull pipeline (tofu apply + build + S3 sync + CloudFront invalidation), with S3 remote state β parallel to the existingaws_deploy_to_s3.sh, which remains unchanged [GS-334].
Changed
- Change FE S3 deployment to be used on Landing Pages [GS-328].
- Rename AWS_S3_BUCKET_NAME to AWS_S3_BUCKET_NAME_FE in the .env file and scripts [GS-328].
- Enhance
aws_deploy_to_s3.sh: Set default values for RUN_BUNDLER, UPDATE_BUILD, and BUILD_DIR if not specified via CLI. Improve bucket name handling and CloudFront distribution checks. Update package.json homepage during deployment and restore after completion only if RUN_BUNDLER != none. Use BUILD_DIR to set the build directory, so mobile deployment -that's not react-vite- can be done. - Update .npmignore to include additional files and directories for Claude Code, AI Agents, and OpenTofu [GS-327].
Security
- Bump Node.js version in .nvmrc to 26 [GS-339].
GenericSuite Backend Core
Package, Pull Request and Tag
- Package: https://pypi.org/project/genericsuite/0.4.0/
- Pull Request # 1: https://github.com/tomkat-cr/genericsuite-be/pull/16
- Pull Request # 2: https://github.com/tomkat-cr/genericsuite-be/pull/16
- Tag: https://github.com/tomkat-cr/genericsuite-be/releases/tag/0.4.0
Pull Request Overview
OPENSPEC, enhance AI agent documentation, improve security measures, MIT license and unit test
This release adds full GCP Cloud Storage and Azure Blob Storage abstraction-layer implementations (matching the existing AWS S3 support), plus GCP Secret Manager and Azure Key Vault secrets backends β extending the cloud-agnostic design to two more providers. It also adds FastAPI/Flask rate limiting, general unit test coverage, a select_table 1-1 relationship resolver across all DB engines, MIT relicensing, and a security-dependency pass (pyjwt, cryptography, urllib3) plus a path-traversal fix in app_context.py.
Highlights
- GCP Cloud Storage and Azure Blob Storage support fully implemented (upload/remove/presigned-URL/retrieval) [GS-318] [GS-317].
- GCP Secret Manager and Azure Key Vault
get_secrets()backends added [GS-318] [GS-317]. select_tablefield type: engine-agnostic 1-1 relationship resolver (DynamoDB BatchGetItem / MongoDB$lookupfast paths) [GS-259].- Rate limiting (
slowapi) integrated into FastAPI and Flask endpoints [GS-332]. - Security: pyjwt, cryptography, urllib3 upgraded; path traversal vulnerability fixed in
app_context.py; migrated to Python 3.14 [GS-219] [GS-337].
CHANGELOG.md
[0.4.0] - 2026-08-30
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- SAST testing [GS-315].
- General unit tests [GS-21].
- AWS_SSL_CERTIFICATE_ARN_BE envvar to the
.env.examplefile [GS-328]. - GCP Cloud Storage (GCS) object storage support: full implementation of
upload_file_to_storage,remove_from_storage,get_gcs_presigned_url,storage_retieval, andprepare_asset_urlingenericsuite/util/gcp.py[GS-318]. - Azure Blob Storage object storage support: full implementation of
upload_file_to_storage,remove_from_storage,get_blob_presigned_url(SAS tokens),storage_retieval, andprepare_asset_urlingenericsuite/util/azure.py[GS-317]. - GCP Secret Manager support: real
get_secrets()implementation ingenericsuite/util/gcp_secrets.pyusinggoogle-cloud-secret-managerSDK; requiresGCP_PROJECT_IDenv var [GS-318]. - Azure Key Vault support: real
get_secrets()implementation ingenericsuite/util/azure_secrets.pyusingazure-keyvault-secrets+azure-identitySDKs; requiresAZURE_KEYVAULT_URLenv var [GS-317]. - Optional dependency groups
gcpandazureinpyproject.tomlfor lazy SDK installation [GS-317] [GS-318]. - New env vars documented in
.env.example:GCP_PROJECT_ID,GCS_CHATBOT_ATTACHMENTS_BUCKET_*,AZURE_STORAGE_ACCOUNT_NAME,AZURE_STORAGE_ACCOUNT_KEY,AZURE_CHATBOT_ATTACHMENTS_CONTAINER_*,AZURE_KEYVAULT_URL,CLOUD_STORAGE_PRESIGNED_EXPIRY,CLOUD_STORAGE_PRESIGNED_ACTIVE[GS-317] [GS-318]. - Unit tests for GCS storage (
tests/test_gcp_storage.py), Azure Blob storage (tests/test_azure_storage.py), GCP Secret Manager (tests/test_util_gcp_secrets.py), and Azure Key Vault (tests/test_util_azure_secrets.py) [GS-317] [GS-318]. - Introduce
DEBUG_CORSenvironment variable in FastAPIcreate_app.pyto log CORS origins during development. This enhances debugging capabilities for CORS configuration [GS-329]. slowapifor FastAPI rate limiting package [GS-332].- Integrate rate limiting in FastAPI and Flask endpoints [GS-332].
select_tablefield type: 1-1 relationship resolution in listings and reads. New JSON field attributesrelated_table,local_field,related_key,description_fields,description_separator,related_filter; rows now include{field}_description. Engine-agnostic$inresolver for all DB engines, with DynamoDB BatchGetItem and MongoDB$lookupfast paths [GS-259].
Fixed
- API Key MCP headers and API Key authentication issues: modify get_access_token to include all headers, update mcp_authenticate_api_key to only require user_id based on MCP_MANDATORY_USER_ID, improve user_id assignment logic when only API Key is provided. Adjust verify_app_context to raise a more descriptive error for missing user credentials [GS-243].
Changed
- License changed to MIT [FA-244].
- Update FastAPI abstraction layer CORS configuration in
create_app.pyto handle multiple origins by splitting theCORS_ORIGINstring if it contains commas [GS-329]. - Update CORS configuration in
framework_abstraction.pyto setAccess-Control-Allow-Originto '*' for handling multiple origins, as FastAPI manages origin splitting internally [GS-329]. - Remove request authentication for flexibility [GS-329].
- And add rate limit in
logs.pyfor the/logsendpoint [GS-332]. - Enhance comments about how to specify the C0301 and E501 line-too-long lint conditions on
config.py - Replace Github Gemini code review with SonarQube and Claude code review [GS-336].
- Modify Makefile to allow optional arguments for twine upload during production publish, e.g. "--verbosity" [GS-327].
- Update version to 0.4.0 in package.json, pyproject.toml, and setup.py [GS-327].
Security
- Upgrade "pyjwt" to "^2.13.0" to fix security vulnerabilities [GS-219]:
- Improper Verification of Cryptographic Signature [High Severity], SNYK-PYTHON-PYJWT-15518059
- PyJWKClient: missing scheme allowlist enables CVE-2024-21643-class SSRF + token forgery via file://, ftp://, data: schemes
- PyJWKClient unbounded JWKS endpoint requests via attacker-controlled kid values (DoS)
- Upgrade cryptography to "^50.0.0" to fix security vulnerabilities [GS-219].
- python-cryptography: Duplicate self-signed intermediates can cause exponential path-building
- cryptography: PKCS#7 EnvelopedData decryption exposes a Bleichenbacher oracle through distinguishable errors and timing
- python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees
- Avoid characters that are not allowed in filenames built from user_id or ObjectId in
app_context.py[GS-219]. - Upgrade "urllib3" to "^2.7.0" to fix security vulnerabilities [GS-219].
- Fix "Unsanitized input from an HTTP header flows into json.dump, where it is used as a path. This may result in a Path Traversal vulnerability and allow an attacker to write arbitrary files." in app_context.py [GS-219].
- Migrate to Python 3.14 [GS-337].
- Bump Node.js version in .nvmrc to 26 [GS-339].
GenericSuite Backend AI
Package, Pull Request and Tag
- Package: https://pypi.org/project/genericsuite-ai/0.4.0/
- Pull Request # 1: https://github.com/tomkat-cr/genericsuite-be-ai/pull/14
- Pull Request # 2: https://github.com/tomkat-cr/genericsuite-be-ai/pull/15
- Tag: https://github.com/tomkat-cr/genericsuite-be-ai/releases/tag/0.4.0
Pull Request Overview
Enhance AI agent documentation and address security vulnerabilities
A security- and hygiene-focused release: AI-agent onboarding docs, SAST testing, MIT relicensing, and code review tooling switched from GitHub Gemini to SonarQube + Claude. The bulk of the change is a security-dependency upgrade pass across the LangChain stack (langchain, langchain-openai, langchain-core, langchain-community) fixing directory traversal, SSRF, ReDoS, and deserialization vulnerabilities, plus pytest/twine/fastapi/aiohttp/cryptography/pyjwt updates and a migration to Python 3.14.
Highlights
- LangChain stack upgraded (langchain, langchain-openai, langchain-core, langchain-community) fixing High-severity directory traversal, SSRF, ReDoS, and unsafe-deserialization issues [GS-219].
- cryptography and pyjwt upgraded to fix path-building and SSRF/token-forgery vulnerabilities [GS-219].
- License changed to MIT; code review tooling moved to SonarQube + Claude [FA-244] [GS-336].
- Migrated to Python 3.14; Node.js bumped to v26 in
.nvmrc[GS-337] [GS-339].
CHANGELOG.md
[0.4.0] - 2026-08-30
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- SAST testing [GS-315].
- AWS_SSL_CERTIFICATE_ARN_BE envvar to the
.env.examplefile [GS-328].
Changed:
- Remove all references to fynapp on
ai_conversations_conversion.py - Enhance comments about how to specify the C0301 and E501 line-too-long lint conditions on
config.py - License changed to MIT [FA-244].
- Replace Github Gemini code review with SonarQube and Claude code review [GS-336].
- Modify Makefile to allow optional arguments for twine upload during production publish, e.g. "--verbosity" [GS-327].
- Update version to 0.4.0 in package.json, pyproject.toml, and setup.py [GS-327].
Security
- Upgrade langchain to "^1.3.14", langchain-openai to "^1.4.1", langchain-core to "^1.5.2", langchain-community to "^0.4.2", to fix security vulnerabilities [GS-219].
- Directory Traversal (new) [High Severity], SNYK-PYTHON-LANGCHAINCORE-15809257
- Allocation of Resources Without Limits or Throttling [High Severity], SNYK-PYTHON-AIOHTTP-14871876, SNYK-PYTHON-AIOHTTP-14871877, SNYK-PYTHON-AIOHTTP-15873732, SNYK-PYTHON-BROTLICFFI-14172734
- Infinite loop [High Severity], SNYK-PYTHON-AIOHTTP-14871979
- Server-side Request Forgery (SSRF) (new) [High Severity], SNYK-PYTHON-AIOHTTP-15873738
- Regular Expression Denial of Service (ReDoS) [High Severity], SNYK-PYTHON-LANGCHAINCLASSIC-14914754
- Deserialization of Untrusted Data [High Severity], SNYK-PYTHON-LANGGRAPH-15433492, SNYK-PYTHON-LANGGRAPHCHECKPOINT-15353408, SNYK-PYTHON-LANGGRAPHCHECKPOINT-15433491
- h2: Duplicate Host header could facilitate request smuggling
- Upgrade pytest to "^9.1.1", pytest-cov to "^7.1.0", twine to "^7.0.0", fastapi to "^0.140.13", pytest-mock to "^3.15.1", to fix security vulnerabilities [GS-219].
- Upgrade ddgs to "^9.14.4" to fix security vulnerabilities [GS-219].
- Pin "urllib3" to "^2.7.0" to fix "urllib3: Decompression-bomb safeguards bypassed in parts of the streaming API" security vulnerability [GS-219].
- Pin starlette to "^1.3.1" to fix "Starlette has missing Host header validation that poisons request.url.path, bypassing path-based security checks" security vulnerability (only for development dependencies) [GS-219].
- Pin aiohttp to "^3.14.3" to fix "Allocation of Resources Without Limits or Throttling [High Severity][https://security.snyk.io/vuln/SNYK-PYTHON-AIOHTTP-14871876]" security vulnerability. This must be removed once aiohttp is greater than "^3.14.3" by its dependers [GS-219].
- Upgrade cryptography to "^50.0.0" to fix security vulnerabilities [GS-219].
- python-cryptography: Duplicate self-signed intermediates can cause exponential path-building
- cryptography: PKCS#7 EnvelopedData decryption exposes a Bleichenbacher oracle through distinguishable errors and timing
- python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees
- Upgrade pyjwt to "^2.13.0" to fix security vulnerabilities [GS-219].
- PyJWKClient: missing scheme allowlist enables CVE-2024-21643-class SSRF + token forgery via file://, ftp://, data: schemes
- PyJWKClient unbounded JWKS endpoint requests via attacker-controlled kid values (DoS)
- Migrate to Python 3.14 [GS-337].
- Bump Node.js version in .nvmrc to 26 [GS-339].
GenericSuite Backend Scripts
Package, Pull Request and Tag
- Package: https://www.npmjs.com/package/genericsuite-be-scripts/v/1.4.0
- Pull Request # 1: https://github.com/tomkat-cr/genericsuite-be-scripts/pull/16
- Pull Request # 2: https://github.com/tomkat-cr/genericsuite-be-scripts/pull/17
- Tag: https://github.com/tomkat-cr/genericsuite-be-scripts/releases/tag/1.4.0
Pull Request Overview
AI agent docs + OpenTofu modules + multiple CORS Origins to FastAPI + SAST testing + Python 3.14
Adds a full parallel OpenTofu (Terraform-compatible) IaC deployment path alongside the existing CloudFormation scripts β covering S3, DynamoDB, KMS, Secrets Manager, ECR, ACM/Route53, EC2+ALB, and Lambda+API Gateway β plus a matching DynamoDB tfvars generator. Also adds multi-origin CORS support for FastAPI's big-Lambda template, MCP server env-var handling fixes, AI-agent docs, SAST testing, and a Python 3.14 migration.
Highlights
- New OpenTofu IaC deployment stacks (
scripts/aws_tf) parallel to existing CloudFormation, covering S3/DynamoDB/KMS/Secrets Manager/ECR/ACM/Route53/EC2+ALB/Lambda+API Gateway [GS-334]. - DynamoDB tfvars generator reading the same GenericSuite JSON config as the CloudFormation generator [GS-334].
- Multiple CORS Origins support added to FastAPI's
aws_big_lambda/template-sam.yml[GS-329]. - Fixed multiple envvars (CLOUD_PROVIDER, APP_NAME, AWS_REGION, etc.) not being passed to the MCP server in
run_mcp_server.sh[GS-243]. - Migrated to Python 3.14; License changed to MIT [GS-337] [FA-244].
CHANGELOG.md
[1.4.0] - 2026-08-30
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- SAST testing [GS-315].
- AWS_SSL_CERTIFICATE_ARN_BE to the
big_lambdas_manager.shscript [GS-328] - Multiple CORS Origins support to FastAPI in the
aws_big_lambda/template-sam.ymlfile [GS-329]. - OpenTofu (Terraform-compatible) IaC deployments in
scripts/aws_tf: generic wrapper (run-tf-deployment.sh), S3 remote state with native locking (bootstrap-tf-state.sh), and modules/stacks for S3 buckets, DynamoDB tables, KMS, Secrets Manager, ECR, ACM/Route53 app domains, EC2+ALB, and Lambda+API Gateway β parallel to the existing CloudFormation scripts, which remain unchanged [GS-334]. - DynamoDB tfvars generator (
scripts/aws_tf/generate_dynamodb_tfvars.py) reading the same GenericSuite JSON config as the CloudFormation generator [GS-334]. - ADDITIONAL_MCP_RUN_ARGS envvar can be passed to the MCP server "run_mcp_server.sh" script, so additional arguments can be passed to the MCP server without having to modify the script [GS-243].
Changed
- License changed to MIT [FA-244].
- Enhance error handling and messaging in the
set_fe_cloudfront_domain.shscript [GS-328] - Initialize APP_ENVS variable in
update_additional_envvars.shfor app-specific environment variables example [GS-329]. - Update
run_mcp_server.shto improve environment variable handling (removing double-quotes), adapt to MCP inspector 2.0, create a .env.mcp.json file to have both stdio and streamable-http servers in the MCP inspector instance, implement a function to manage environment variables, ensuring they are set correctly in the .env file., and improve error handling and streamline variable checks throughout the script [GS-243]. - Update .npmignore to include additional files and directories for Chalice, Claude Code, and OpenTofu [GS-327].
- Increment package version to 1.4.0 in package.json and package-lock.json [GS-327].
Fixed
- Fix envvars not being passed to the MCP server in "run_mcp_server.sh": CLOUD_PROVIDER, APP_NAME, AWS_REGION, STORAGE_URL_SEED, APP_SUPERADMIN_EMAIL, GIT_SUBMODULE_LOCAL_PATH, GET_SECRETS_ENABLED, GET_SECRETS_CRITICAL, and GET_SECRETS_ENVVARS [GS-243].
- Fix
pnpm installcalling the release command, treating the script namedpublishas an npm lifecycle hook while preparing a git-hosted dependency, instead of just cloning the repo. This happens when installing GS BE Scripts as a git-hosted dependency. Therefore, it won't bepublish,prepublish,prepublishOnly,prepack,prepare,postpack, orpostpublishreserved names in the NPM script names, so they were renamed tonpm-publishandnpm-pre-publish[GS-339].
Security
- Migrate to Python 3.14 [GS-337].
- Clean up output in "run_mcp_server.sh" by removing unnecessary echo statements [GS-243].
- Supress MCP server npm notice in "run_mcp_server.sh" by setting the MCP_DISABLE_NOTICE environment variable to true [GS-243].
- Bump Node.js version in .nvmrc to 26 [GS-339].
- Remove "office-addin-dev-certs" from package.json dependencies to let user choose to install it if needed, and fix security vulnerabilities [GS-219].
- Forge has signature forgery in Ed25519 due to missing S > L check (CVE-2026-25793, CVE-2022-35961)
- Forge has signature forgery in RSA-PKCS due to ASN.1 extra field (This issue is similar to CVE-2022-24771)
- Forge has a basicConstraints bypass in its certificate chain verification (RFC 5280 violation) (same vulnerability class as: CVE-2014-0092, CVE-2015-1793, CVE-2020-0601)
- uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided
GenericSuite BaseCamp
Package, Pull Request and Tag
- Pull Request # 1: https://github.com/tomkat-cr/genericsuite-basecamp/pull/19
- Pull Request # 2: https://github.com/tomkat-cr/genericsuite-basecamp/pull/22
- Tag: https://github.com/tomkat-cr/genericsuite-basecamp/releases/tag/1.6.0
Pull Request Overview
Rename docs to mkdocs_root + et al.
This pull request is a broad documentation and tooling update spanning the whole GenericSuite ecosystem: the docs site was reorganized (docs/ β mkdocs_root/, specs/ β docs/), new documentation was added for Mobile Development, AI Skills, GS FE Scripts, and an OpenTofu deployment guide, the project license moved to MIT, SAST testing and dependency-vulnerability fixes were applied across ExampleApp and FastApiTemplate, and the main repository pointer was switched from GS Basecamp to the new GS Superproject.
Highlights
- Documentation site reorganization:
docs/renamed tomkdocs_root/, new Mobile Development, AI Skills, GS FE Scripts, and OpenTofu deployment guide pages added, and the site's main repo now points to the GS Superproject. - Security and compliance: SAST testing wired in, dependency upgrades (cryptography, crypto-browserify,
@babel/coreCVE-2026-49356 fix, Python 3.14 migration), license changed to MIT, andmandatoryFiltersenforcement for user history/config/API-key tables. - Developer tooling:
new-project-from-template.shandrename-app.shscaffolding scripts,make create-supad, Makefile refactors to usegenericsuite-fe-scripts, and three new AI skills (add-doc,sample-code-update,translate-docs). - CRUD Editor and configuration:
select_tablefield type andSelectElementIteminline select options documented for the Generic CRUD Editor.
CHANGELOG.md
[1.6.0] - 2026-08-30
Added
- New architecture image for documentation index page [GS-327].
- Add AI Skills documentation page [GS-254].
- Add Security Skills documentation page [GS-339].
- GS FE Scripts documentation page [GS-107].
- Mobile Development documentation section: GenericSuite Flutter installation, JSON-driven CRUD, childComponents (1-N relationships), and the Apple-clean theming tokens [GS-261].
- OpenTofu deployment guide (
mkdocs_root/en/Deployment-Guide/opentofu.md) covering the genericsuite-fe-scripts and genericsuite-be-scripts IaC stacks, with a nav entry inmkdocs.yml[GS-334]. - GS Superproject, Security Suite and GS FE Scripts to the repositories.md page [GS-319].
- SAST testing [GS-315]
select_tablefield type documentation to Add 1-1 relationships support to the CRUD Editor listing/data pages [GS-259].- Spanish nav_translations for Mobile Development docs section [GS-261].
- Introduce
SelectElementItemmodel for inline select options in CRUD editor configuration. Updateselect_elementsfield to support both predefined IDs and inline {title, value} objects [GS-254] - AWS_SSL_CERTIFICATE_ARN_FE and AWS_SSL_CERTIFICATE_ARN_BE envvars [GS-328].
- Multiple CORS Origins support to FastAPI in the
aws_big_lambda/template-sam.ymlfile [GS-329]. make create-supadto exampleapp/fastapitemplate server [GS-306].- Scripts to copy and init a new project from "fastapitemplate" and "exampleapp":
scripts/new-project-from-template.shandscripts/rename-app.sh[GS-306]. - New AI skill definitions (
.ai/skills/): add-doc, sample-code-update, translate-docs - "zipp" dependency to main requirements.txt to address a vulnerability as recommended by Snyk [GS-219].
Changed
- Rename
docs/tomkdocs_root/[GS-208]. - Rename
specs/todocs/[GS-208]. .venv/added to .gitignore and .dockerignore files.run_translate_uncommitted.shcreates and deletes.venvvirtual environment [GS-316].- License changed to MIT [FA-244].
- Enhance SSL certificate ARN documentation in the backend core for better clarity on the AWS_SSL_CERTIFICATE_ARN_FE and AWS_SSL_CERTIFICATE_ARN_BE envvars usage across backend and frontend scripts [GS-328].
- Initialize APP_ENVS variable in
update_additional_envvars.shfor app-specific environment variables example [GS-329]. - Update FastApiTemplate Makefile with new utility targets, "tomkat-cr" replaced with "github-username" in ".env.example" [GS-306]
- Separate directory structure from CLAUDE.md to make it smalller [GS-303].
- Update FastAPI template setup with instructions to run the
new-project-from-template.shusingcurl[GS-306]. - Add FastApiTemplate reference to the configuration guide main document [GS-254]
- FastApiTemplate: Refactor UI components renaming "_components" > "components", "_images" > "images", and "_constants" > "constants" [GS-306].
- Update exampleap/fastapitemplate server and mcp-server development scripts for dynamic environment management, so stage can be set running
STAGE=dev make dev(package.json now uses the STAGE variable on "dev": "make run_${STAGE:-qa}") [GS-306]. - FastApiTemplate: Make ".env.example" files to use default values for less user changes on project startup [GS-306].
- Enhance AGENTS.md, GEMINI.md, and CLAUDE.md files to provide better context and instructions to AI Coding Assistants [GS-303].
- Include .claude, .agents, .codex, .cursor, and .gemini directories to share skills/commande from the .ai directory [GS-254]
- Rename '.claude' to '.ai'
- Fix directory graphs ending directory lines
- Modify
food_moment_in_userfunction documentation for clarity on user references. Clean up food moments operations documentation [GS-254]. - ExampleApp: broad exception handling in FDA food endpoint [GS-254].
mkdocs.ymlβ one nav line ('AI Skills'), verifiedbuild-safeagainst the i18n folder convention [GS-254].- ExampleApp: Update dependencies in
package.jsonandpnpm-lock.yamlfor dotenv and turbo. [GS-254] - ExampleApp: Update
aiohappyeyeballsandaiohttpversions in uv.lock files for API apps. - ExampleApp and FastApiTemplate: Refactor Makefile to use
genericsuite-fe-scriptsfor build and deployment commands in UI app [GS-107]. - Update index.md for improved clarity and content on Generic Suite features (one-liner followed by a brief description for quick reference, logos centered, new architecture image) [GS-327].
- Update Makefile with branch usage instructions using the BRANCH envvar to prepare code from develop branch.
- Frontend-Development/GenericSuite-Core: removed
@babel/cli,@babel/preset-stage-0,@testing-library/user-event,file-loader,path, andurl-loaderfrom the "Install additional development dependencies" step β these are no longer required bygenericsuite-fe's own build/test pipeline [GS-338]. - Frontend-Development/GenericSuite-Core: remove: unnecessary dependencies (
css-loader,postcss-loader,style-loader,express,gh-pages) from the same documentation. The user can import them if webpack or github pages are going to be used in their app [GS-338]. - ASDT documentation so LangGraph and Smolagents are planned, not supported yet.
- All CHANGELOG format unification.
- Main repo to be the GS Superproject
repo_url: https://github.com/tomkat-cr/genericsuiteinstead of the GS Basecamp [GS-319]. - Main english post page to redirect to
https://www.carlosjramirez.com/en/genericsuite. - Move the 2nd anniversary release banner to the releases section.
- Replace Github Gemini code review with SonarQube and Claude code review [GS-336].
- Enhance translation script to support 'changed' mode for translating updated Markdown files. Added argument parsing for mode selection and implemented logic to identify changed files in mkdocs_root/en. Default mode is 'changed' and it can be set to 'uncommitted' for uncommitted files. This improves flexibility in translation processes [GS-252].
Fixed
mkdocs_transfer_site.shremoves thedocs_for_ftpandsitedirectories, and uses.venvinstead ofvenvto avoid multiple python environments [GS-301].new-project-from-template.shbranch and template user input because it wasn't asked due to early default values assignment [GS-306]- NEW_NAME validation only if it's set (scripts/new-project-from-template.sh) [GS-306]
- BASECAMP_BRANCH documentation about default value to "main" (scripts/new-project-from-template.sh) [GS-306]
scripts/rename-app.shβ new filename-rename pass for fastapitemplate* files (fixes the openapi.json/yaml leftover; tested in a throwaway dir, 5/5 checks, reproduced by thepackages/genericsuite-skills/skills/python-fastapi-code-builderAI skill reviewer) [GS-254].- "Could not resolve dependency: formik@2.4.5" error in ExampleApp [GS-254].
- Transfer scripts to use "mkdocs_root" instead of "docs" [GS-208].
- "config-overrides.js" updated to fix errors running the app with RUN_BUNDLER="react-scripts" [GS-338].
- FastApiTemplate AWS_S3_BUCKET_NAME* values in
.env.example. - Transfer scripts to use "mkdocs_root" instead of "docs" [GS-208].
Security
- Upgrade dependencies in exampleapp and fastapitemplate package-lock and uv.lock files for multiple applications. Notable changes include upgrading cryptography, crypto-browserify, downshift, react-icons, react-markdown, react-syntax-highlighter, react-router-dom, and yup [GS-219].
- Migrate to Python 3.14 [GS-337].
- Add rate limiter documentation to GS BE Core .env.example file [GS-332].
- Bump Node.js version in .nvmrc to 26 [GS-339].
- exampleapp and fastapitemplate: "users_user_history.json", "users_config.json" and "users_api_keys.json" configuration files now use the "mandatoryFilters" parameter in the backend configuration to ensure the user history, config and API keys are forced to the current user [GS-327].
- exampleapp and fastapitemplate: "users_user_history_admin.json", "users_config_admin.json" and "users_api_keys_admin.json" configuration files don't use the "mandatoryFilters" parameter to let the superuser to see all the user history, config and API keys when editing users [GS-327].
- exampleapp and fastapitemplate: Upgrade @babel/core to ^7.29.7 to fix the @babel/core: Arbitrary File Read via sourceMappingURL Comment (CVE-2026-49356) [GS-219].
Removed
- AGENTS.md symlink [GS-303]
activeContext.mdmoved to GS Superproject directory [GS-319]- ".ai/settings.json" MacOS-specific hooks (moved to ~/.claude/settings.json).
- Because Webpack is not used in exampleapp and fastapitemplate, remove the following dependencies: css-loader, postcss-loader, style-loader, react-icons, web-vitals, fs, json-loader, with, constants-browserify, crypto-browserify, os-browserify, stream-browserify, tty-browserify, url, vm-browserify, @babel/cli, @babel/preset-stage-0, @rollup/plugin-typescript, @testing-library/user-event, file-loader, url-loader, path, gh-pages, express, express-rate-limit
GenericSuite BaseCamp App
Package, Pull Request and Tag
- Pull Request: https://github.com/tomkat-cr/genericsuite-basecamp-app/pull/2
- Tag: https://github.com/tomkat-cr/genericsuite-basecamp-app/releases/tag/1.0.0+4
Pull Request Overview
Initial development
This release ("GS Doc", the Flutter documentation-viewer mobile app) adds AI agent context files, SAST testing, and a set of Makefile targets to open iOS/Android emulators, while completing the migration off the old genericsuite-basecamp git submodule in favor of pulling docs via GS_BASECAMP_PATH.
Highlights
- New
GS_BASECAMP_PATHenvironment variable and updatedrun_docs_converter.shto clone or reuse a local GenericSuite Basecamp checkout - New
make open-ios-simulator/open-android-emulatortargets for local development - The
genericsuite-basecampgit submodule dependency removed in favor of theGS_BASECAMP_PATH-driven flow - License changed to MIT [FA-244]; fixed images not showing after the language-prefix path change [GS-252]
CHANGELOG.md
[1.0.0+4] - 2026-08-30
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- Add SAST testing [GS-315].
GS_BASECAMP_PATHenvironment variable to specify the path to the GenericSuite Basecamp repository.README.mdcontent with pre-requisites, installation and usage instructions [GS-303].make open-ios-simulatorto open the Apple iOS simulator.open-android-emulatorand theopen-android-emulator.shscript.
Changed
- Rename
assets/docs/toassets/mkdocs_root/[GS-208]. run_docs_converter.shwill clone the GenericSuite Basecamp repo in the./genericsuite-basecampdirectory ifGS_BASECAMP_PATHis empty, otherwise it will use the path specified inGS_BASECAMP_PATH.- License changed to MIT [FA-244].
Fixed
- Images are not showing after adding the language prefix to the path [GS-252].
Removed
- Git submodule genericsuite-basecamp
GenericSuite Gitops
Package, Pull Request and Tag
- Pull Request: https://github.com/tomkat-cr/genericsuite-gitops/pull/6
- Tag: https://github.com/tomkat-cr/genericsuite-gitops/releases/tag/0.5.0
Pull Request Overview
Enhance AI agent documentation and improve directory structure
A focused maintenance release: AI agent context files, SAST testing, a directory-structure rename (docs/ β help/, specs/ β docs/), and the MIT license migration.
Highlights
- AGENTS.md, GEMINI.md, and CLAUDE.md AI agent context files added [GS-303]
- SAST testing added [GS-315]
- Directory structure unified:
docs/renamed tohelp/,specs/renamed todocs/[GS-303] - License changed to MIT [FA-244]
CHANGELOG.md
[0.5.0] - 2026-08-30
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- Add SAST testing [GS-315].
Changed
- Rename
docs/directory tohelp/[GS-303]. - Rename
specs/directory todocs/[GS-303]. - License changed to MIT on README.md files [FA-244].
GenericSuite App Maker (GSAM)
Package, Pull Request and Tag
- Pull Request: https://github.com/tomkat-cr/genericsuite-app-maker/pull/15
- Tag: https://github.com/tomkat-cr/genericsuite-app-maker/releases/tag/0.6.0
Pull Request Overview
AI Agent docs + SAST testing + vulnerability fixes + README typos and wording
This release adds AI agent documentation and SAST testing to GSAM, cleans up README wording, and updates requirements.txt dependencies to their latest versions to close out known vulnerabilities.
Highlights
- AGENTS.md, GEMINI.md, and CLAUDE.md AI agent context files added, plus SAST testing [GS-303] [GS-315]
- "upgrade" and "update" Makefile targets added for dependency maintenance [GS-219]
requirements.txtdependencies upgraded to their latest versions to fix known vulnerabilities [GS-219]- Regenerated lockfile drops several unused transitive packages (cohere, mistralai, gotrue, supafunc, huggingface-hub, pypdf, and multiple llama-index-*-openai integrations) [GS-219]
CHANGELOG.md
[0.6.0] - 2026-08-30
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- Add SAST testing [GS-315].
- "upgrade" and "update" targets to Makefile [GS-219].
Changed
- README typos and wording [GS-128].
Security
- Update requirements.txt to use the latest version of the dependencies [GS-219].
- Migrate to Python 3.14 [GS-337]
- "gsam_ottomator_agent/base_python_docker/Dockerfile" uses Python 3.14 [GS-337]
Removed
- Regenerated lockfile drops packages that weren't there before at all: cohere, mistralai, gotrue, supafunc, huggingface-hub, pypdf, beautifulsoup4/soupsieve, llama-index-readers-file, llama-cloud, and several other llama-index-*-openai integration packages [GS-219].
GenericSuite ASDT
Package, Pull Request and Tag
- Pull Request: https://github.com/tomkat-cr/genericsuite-asdt-be/pull/6
- Tag: https://github.com/tomkat-cr/genericsuite-asdt-be/releases/tag/0.3.0
Pull Request Overview
AI Agents docs + SAST testing + vulnerabilities fixes + MIT license + clean up
This release adds AI agent documentation, SAST testing, and dependency-upgrade Makefile targets to the Agentic Software Development Team package, migrates to Python 3.14, and documents that the LangGraph and Smolagents backends remain planned (not yet supported) alongside the primary CrewAI implementation.
Highlights
- New
make upgrade,make crewai_upgrade, andmake camelai_upgradecommands to keep dependencies current and fix vulnerabilities [GS-219] - Documentation now clarifies LangGraph and Smolagents are planned, not yet supported [GS-327]
- Security: migrated to Python 3.14 [GS-337]
- License changed to MIT [FA-244]
CHANGELOG.md
[0.3.0] - 2026-08-30
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- Add SAST testing [GS-315].
make upgrade,make crewai_upgrade, andmake camelai_upgradecommands to upgrade dependencies to the latest version and fix vulnerabilities [GS-219].
Changed
- License changed to MIT [FA-244].
- Change documentation so LangGraph and Smolagents are planned, not supported yet [GS-327].
- Enhance Makefile and scripts for Python version management and upgrade commands [GS-219].
- Update dependencies in all Python projects pyproject.toml and poetry.lock for improved compatibility and security fixes [GS-219].
Security
- Migrate to Python 3.14 [GS-337].
Removed
- Remove outdated and empty requirements.txt file [GS-219].
GenericSuite Mobile
Package, Pull Request and Tag
- Pull Request: https://github.com/tomkat-cr/genericsuite-mobile/pull/2
- Tag: https://github.com/tomkat-cr/genericsuite-mobile/releases/tag/0.5.0
Pull Request Overview
GenericSuite Mobile for Flutter initial development
This release lands 1-N childComponents relationship support in the Flutter CRUD Editor (tappable child sections, full-screen edit, array/table subtypes matching the genericsuite-fe behavior), an Apple-clean theme token system built on shadcn_ui, and a large batch of defensive bug fixes across the CRUD editor, forms, auth/session handling, and navigation β plus SAST testing and the select_table field type carried over from 0.4.2.
Highlights
childComponents(1-N) support in the Flutter CRUD Editor, matching genericsuite-fe [GS-261].- New Apple-clean
shadcn_ui-based theme system with adefaultThemeParamsmerge contract [GS-261]. - Wide bug-fix pass: JWT decoding, dispose()/mounted leaks, missing null-checks, missing timeouts, sync API calls [GS-327].
select_tablefield type with related-record description resolution, carried in from 0.4.2 [GS-259].
CHANGELOG.md
[0.5.0] - 2026-08-30
Added
childComponents(1-N relationships) support in the Flutter CRUD Editor: child components declared in the frontend JSON config render as tappable sections in the edit form, open full-screen with the parent row asparentData, and supportchild_listingeditors witharrayandtablesubtypes (including the<array_name>/<array_name>_oldwrite payloads), matching the genericsuite-fe CRUD Editor behavior [GS-261].- Apple-clean theme tokens in
theme_config_defaults.dart(accentColor,borderRadius12px,fontFamily/textThemetypography tokens with Inter via google_fonts, near-blacktextColor, iOS system semantic colors) plus adefaultThemeParamsmerge contract so apps override only the keys they need [GS-261]. shadcn_ui(flutter-shadcn-ui port) now owns the widget-tree root viaShadApp.custom;CreateGsAppbuilds the MaterialApp theme from the GenericSuite tokens; Save/Cancel form buttons use ShadButton [GS-261].buildGsShadTheme()buildsShadThemeDatafrom GenericSuite theme tokens; newshadColorSchemeNametheme param selects the shadcn base scheme (greendefault; anyShadColorScheme.fromNamevalue), withaccentColoroverridingprimary/ringand GS surface/text/error tokens applied viacopyWith[GS-261].- "lint" and "test" commands to Makefile.
- Test coverage for the project [GS-327].
Changed
- Default accent color changed from blue to green; app bar and drawer default to white surfaces with near-black text; genericsuite_flutter version bumped to 0.5.0 [GS-261].
- README.md detailed configuration instructions moved to the GS Basecamp documentation [GS-261].
Fixed
- http_service.dart [GS-327]:
- getJwtPayload uses ascii.decode(...) instead of utf8.decode(...) to decode the JWT payload. Any claim with non-ASCII characters throws FormatException, breaking login-gate checks, loadConfig(), and current_user_service.dart.
- No .timeout(...) on any http.get/post/put/delete/patch call (unlike ip_address_service.dart, which correctly uses one), so a hung connection stalls the caller indefinitely.
- The 200/201 success path (json.decode(response.body) also has no try/catch, unlike the error branch. Debug flags (debugJwtToken, debugConfigValues) would print full JWTs/API keys if ever flipped on (currently const false, compiled out); query-string builder encodes values but not keys.
- Add type annotations to bToA(str).
- create_gs_app.dart: payload["exp"] * 1000 has no null-check; a token whose payload lacks exp (or a malformed token where getJwtPayload returns {}) throws synchronously in build(), crashing app startup instead of falling back to LoginPage. Verified by direct read [GS-327].
- crud_editor.dart [GS-327]:
- _saveItem: when isCreation && editorConfig['createReenter'] is true after a successful save, the method returns without calling setState(); _isLoading was flipped to true via setState but is reset with a bare assignment, so the loading spinner can stick indefinitely.
- No mounted checks after await before setState/_setStateAndShowMessages calls (e.g. in _buildListItem's onTap, initState's _loadConfig().then); navigating away mid-request can throw "setState() called after dispose()".
- json.decode(localApiResp['resultset']) in _loadSelectedItem has no try/catch unlike the equivalent in _loadItems, and int.parse(...['rows_affected']) is unguarded.
- _getSelectFieldsOptions β sequential await in a loop instead of Future.wait, serializing network calls unnecessarily.
- crud_editor_commons.dart [GS-327]:
- (buildChildRowToSave): indexes editorConfig['parentData'][keyPair['parentElementName']] with no null check.
- parentData can be empty/missing (e.g. _setEndpointFilter silently no-ops), so saving/deleting on a child_listing editor can throw NoSuchMethodError.
- form_field_service.dart [GS-327]:
- select and select_component cases set DropdownButtonFormField.initialValue without checking the value exists among items, unlike the select_table case which correctly guards with containsKey(...) ? value : null.
- Stale/edited data crashes the form on open. Number/integer fields call double.parse/int.parse directly in onChanged on every keystroke; clearing the field or typing ./- throws uncaught FormatException while typing.
- TextEditingController(text: ...) is instantiated inline in build() for most field types and never disposed; every rebuild leaks the old controller and resets cursor/focus for all fields on screen.
- app_drawer.dart [GS-327]:
- Icon(item['callable']['icon']) throws if item['element'] isn't a key in callables; no fallback/guard.
- _loadConfig().then(...) has no error handling; exceptions become unhandled async errors instead of showing the drawer's error UI.
- error_reporter_widget.dart: ScaffoldMessenger.of(context).showSnackBar(...) is called synchronously inside build() β a known Flutter anti-pattern that should be deferred via addPostFrameCallback, as homepage.dart does elsewhere.
- login.dart [GS-327]:
- _usernameController/_passwordController are created but the widget has no dispose() override, leaking both TextEditingControllers.
- apiResponse['resultset']['token'] is accessed with no null-check on resultset. "password" field lacks autocorrect: false / enableSuggestions: false.
- current_user_service.dart: if (data['error'] == 'Not Found') can never be true since http_service.dart always sets error to a bool; this branch is dead code [GS-327].
- logout_service.dart: storage.delete(...) calls for jwt/api_key/user_data aren't awaited before navigating away; app kill right after logout can leave stale credentials in secure storage [GS-327].
- routing_services.dart: Added item['callable']['type'] = 'async' (default) | 'sync' to allow sync/async function calls and handle code change made to logout_service.dart [GS-327].
- locator_service.dart: registerLazySingleton has no isRegistered guard; re-invoking setup (hot restart, remount, tests) throws on duplicate registration [GS-327].
- timestamp_utilities.dart: 12-hour formatting doesn't special-case midnight; hour 0 renders as "0:MM AM" instead of "12:MM AM" [GS-327].
- homepage.dart: loadHomeData(true) called directly as the FutureBuilder's future: inside build() re-triggers the API call on every rebuild before data is loaded [GS-327].
- deviceid_service.dart: implicit ordering dependency on setupStorageLocator() having run first [GS-327].
- back_button.dart: Navigator.of(context, rootNavigator: true).pop(context) passing context as the pop result looks unintentional [GS-327].
- CRUD Editor save froze the spinner and aborted the write (
_zOrderIndex != nullinoverlay.dart):_runApiCallreplaced the form withCircularProgressIndicator, disposing dropdown/popup OverlayPortals while they were still hiding. The form/list now stays mounted under a loading overlay, and AppBar "Save" goes throughDataFormBody.submit()so child rows persist the values on screen [GS-261]. suggestion_dropdown: typed text is now stored in the in-memory row (selectedItem) on change and Save, matching genericsuite-fe. Picking a suggestion still copies related API fields and also writes the form field name [GS-261].suggestion_dropdown: suggestion rows are read the same way CRUD listings decoderesultset(already-decoded list, JSON string, or nested{resultset: [...]}), so the overlay can show options when the API returns rows [GS-261].suggestion_dropdown: picking a suggestion no longer copies related-table keys (_id,name, β¦) onto the saved row. Only the form field andautocomplete_fieldsare written, matching genericsuite-fe [GS-261].- Password field shows SHA-256 hash instead of plain text. The initial password must be blank [GS-261].
Removed
flutter_project_templatedirectory. Use genericsuite-mobile-exampleapp instead [GS-261].
[0.4.2] - 2026-04-20
Added
- AGENTS.md, GEMINI.md, and CLAUDE.md files to provide context and instructions to AI Coding Assistants [GS-303].
- Add SAST testing [GS-315].
select_tablefield type in the Flutter CRUD editor: listing and read-only form show the related record description (backend{field}_descriptionwith client-side cached fallback); create/edit renders a dropdown populated from the related table [GS-259].
Changed
- Minor fixes on README.md files
- License changed to MIT [FA-244].
- Update .gitignore to include AI agent directories [GS-303].
Fixed
- Improve error handling in create_gs_app.dart and ip_address_service.dart for better stability and fix Flutter web deployment to bootstrap [GS-252].
GenericSuite Mobile ExampleApp
Package, Pull Request and Tag
- Pull Request: https://github.com/tomkat-cr/genericsuite-mobile-exampleapp/pull/2
- Tag: https://github.com/tomkat-cr/genericsuite-mobile-exampleapp/releases/tag/1.0.0+1
Pull Request Overview
Initial development. Moved from genericsuite-mobile
This is a new submodule split out of genericsuite-mobile's former flutter_project_template directory into its own standalone example-app repository, giving the Flutter package a dedicated, independently versioned reference implementation.
Highlights
- Repo split out of
genericsuite-mobile'sflutter_project_template[GS-261]. - Establishes a standalone, independently versioned Flutter example app.
CHANGELOG.md
[1.0.0+1] - 2026-08-30
Added
- Moved from
genericsuite-mobiletogenericsuite-mobile-exampleapp.
GenericSuite AI Agent Skills
Package, Pull Request and Tag
- Pull Request # 1: https://github.com/tomkat-cr/genericsuite-skills/pull/1
- Pull Request # 2: https://github.com/tomkat-cr/genericsuite-skills/pull/3
- Tag: https://github.com/tomkat-cr/genericsuite-skills/releases/tag/1.0.0
Pull Request Overview
Add gs-app-builder-suite Claude Skills plugin [GS-254]
Introduces the gs-app-builder-suite plugin group β an orchestrator skill (gs-app-builder) plus specialized builder skills for app scaffolding, config, JSX, menus, endpoints, FastAPI, AI code/tools, and MCP servers β along with an eval suite and a reference-sync mechanism to keep skill docs aligned with the GenericSuite ecosystem docs.
Highlights
- New
gs-app-builder-suiteplugin group with an orchestrator plus 9 specialized builder skills [GS-254]. evals/evals.jsonsuite with runtime-validity assertions [GS-254].- Reference-sync mechanism (
make sync-references) to keep skills aligned with GS docs [GS-254]. release-notesskill moved out to the GS Superproject [GS-191].
CHANGELOG.md
[1.0.0] - 2026-08-30
Added
- Project ideation and initial development (2026-04-12) [GS-254].
- App-builder skill suite (
gs-app-builder-suiteplugin group) [GS-254]:gs-app-builderorchestrator (greenfield/brownfield mode detection, app-brief interview, checkpointed flow),app-starter,config-builder(updated),jsx-code-builder(updated),menu-builder,endpoints-builder,python-fastapi-code-builder,python-ai-code-builder,python-ai-tools-code-builder,jsx-ai-code-builder,mcp-builder. evals/evals.jsonsuites (all suite skills except config-builder) with runtime-validity assertions, exercised inplayground/[GS-254].- Reference-sync mechanism:
skills/update-gs-docsmap + script,make sync-references[GS-254]. - Add SAST testing [GS-315].
Changed
- Marketplace plugin group
code-generation-skillsrenamed togs-app-builder-suite; metadata version 1.1.0 [GS-254]. - README rewritten around the app-builder suite, installation and publishing [GS-254].
Removed
release-notesskill removed from marketplace, and delete SKILL.md file (moved to GS Superproject directory) [GS-191].
Security
- Migrate to Python 3.14 [GS-337].
- Bump Node.js version in .nvmrc to 26 [GS-339].
GenericSuite Security
Package, Pull Request and Tag
- Pull Request # 1: https://github.com/tomkat-cr/genericsuite-security/pull/4
- Pull Request # 2: https://github.com/tomkat-cr/genericsuite-security/pull/4
- Tag: https://github.com/tomkat-cr/genericsuite-security/releases/tag/1.0.0
Pull Request Overview
Project ideation and initial development
New submodule created in direct response to the 2026-08-04 Keyv/Cacheable npm supply-chain attack. Ships five Claude skills for supply-chain and production-readiness auditing: IOC scanning, an org-wide repo corpus builder, a Docker/container image scanner, a GitHub Actions/package-pinning scanner, and a cross-project weakness/readiness analyzer β plus a registered marketplace plugin.
Highlights
supply-chain-ioc-scanβ detect whether a disclosed compromised npm/PyPI package affects this machine or repo tree [GS-339].repo-corpusβrepo-docker-scannerβrepo-packages-scannerβ three-phase org-wide repository scanner (corpus manifest, mutable image references, unpinned Actions/dependencies).project-weakness-analysisβ production-readiness and security-risk scoring across many projects, with a--profile genericsuitemode for this ecosystem's own non-negotiables.- Hardened, hostile-input-safe cloning (hooks/LFS/credential prompts disabled, symlink-escape guarded).
CHANGELOG.md
[1.0.0] - 2026-08-30
Added
- Project ideation and initial development as a response to the Keyv and Cacheable NPM supply chain attack (2026-08-04): https://socket.dev/supply-chain-attacks/keyv-and-cacheable-compromise [GS-339].
- New skill
supply-chain-ioc-scan: use when a compromised npm/PyPI package or supply-chain worm is disclosed and you must determine whether this machine or repo tree is affected. Developed on 2026-08-04 due to the Shai-Hulud keyv and cacheable compromise. - New skill
repo-corpus: repo-corpusskill (phase 1 of the org-wide repository scanner design): enumerates an org or user viagh, clones with hardened flags, and emits acorpus.jsonmanifest. Shipsscripts/_walk.py(shared walking with prune counting and unreadable-path tracking) and a self-test that proves the clone hardening holds.build_corpus.py --branch NAMEpins the corpus to one branch across every repository, checking it out as the working tree scanners walk. Repositories without that branch are recorded asskippedwith a reason and summarised inwarnings[], never dropped and never counted as failures. Manifest entries gainchecked_out(the branch on disk) alongsidedefault_branch(the repository's own default).- New skill
repo-docker-scanner: repo-docker-scanner --resolve: resolves an unpinned tag to its real digest via an anonymous registry bearer token (stdliburllibonly, no docker/skopeo dependency), producing a copy-pasteableimage:tag@sha256:β¦suggestion per finding. Registry-agnostic β parses each registry's ownWWW-Authenticatechallenge rather than hardcoding Docker Hub's realm, verified live against both Docker Hub and ghcr.io.repo-docker-scannerreport.md now states, right after the summary, the exact command that produced it and the full list of repositories/branches/HEAD commits actually analyzed (also in findings.json asscan_commandandrepos_analyzed).- Design spec and phase 1 implementation plan under
docs/superpowers/. repo-docker-scannerskill (phase 2): detects mutable container image references across a corpus and prioritises them by execution context. Dockerfiles are parsed rather than grepped; YAML is read structurally by a stdlib-only indentation reader. Emitsreport.md,findings.jsonand SARIF 2.1.0, with a checked-in baseline for accepted risk andprobe.pyfor adversarial verification.- New skill
repo-packages-scanner: repo-packages-scannerskill (phase 3, completing the org-wide repository scanner design): detects unpinned GitHub Actions (uses:not pinned to a 40-hex commit SHA, includingdocker://and reusable-workflow calls), floating npm/PyPI/Poetry/PEP-621 ranges, missing lockfiles,npm install/yarn installused in CI instead ofnpm ci,curl | bashand other unpinned remote code execution, and Go/Rust/Ruby pinning gaps. Shipsreport.md,findings.json, and SARIF 2.1.0, all three built with the scan command, the exact repos/branches/commits analyzed, and a P0/P1/P2 legend generated frompolicy/packages.json'spriority_rules.--resolveoptionally enriches unpinned Actions with owner/archived status viagh api.- New skill
project-weakness-analysis: decides whether projects are ready and safe to run in production, scoring production-readiness and auditing security weaknesses across many projects at once. - Five input modes β a root directory (
--root), an explicit list (--projects), an existing corpus (--corpus), a GitHub org or user (--org/--user), and an optional read-only project registry table (--db, Supabase PostgREST or psql). - Two independent verdict axes, never averaged: a readiness tier (
production-ready/needs-work/not-ready/unknown) and a security risk level (criticalβ¦none).unknownblocks β an unscanned project is not a safe one. - A deterministic pre-pass grounds two sonnet agents per project; a haiku agent writes the cross-project rollup.
- A re-audit loop: a second run verifies every prior finding as
resolved/partial/open, and no prior finding is ever dropped. - Output under
./insights:WEAKNESS-REPORT.md,insights.json, a flatinsights-table.json/insights-table.csvprojection,security-audit.json,projects/<slug>.json, andfindings.sarif. - Optional
--profile genericsuitechecks the ecosystem's non-negotiables (scrypt-only hashing, the standard result shape, parameterized SQL,is_safe_url()/is_safe_local_path()guards). .claude-plugin/marketplace.jsonregisters the new skills:supply-chain-security,repo-corpus,repo-docker-scanner,repo-packages-scanner, andproject-weakness-analysis; the plugin description now covers production-readiness analysis alongside supply-chain security.
Changed
repo-corpusand the two planned scanners consume a corpus rather than enumerating repositories themselves, so single-repo lint mode and org-wide audit share one code path.
Fixed
repo-docker-scanner's "Priority tiers explained" section described the wrong scanner's rules; replaced with a legend generated frompolicy/images.json's ownpriority_rules, so the text shown can never again describe rules that are not the ones actually applied.repo-docker-scannerwas not tiering infrastructure-as-code templates as P0 unless their path happened to match an existing glob. CloudFormation is now detected by content (AWSTemplateFormatVersion, or aType: AWS::β¦resource block) and tiered P0 regardless of where it lives in the tree.repo-docker-scannerwas lowercasing part of template-composed references (classunresolved) when reporting them. Unresolved references are now reported and inventoried verbatim.repo-docker-scannerDockerfile discovery and its**/Dockerfile*priority rule now match by prefix and case-insensitively, so a missed Dockerfile can no longer silently drop a whole file's worth ofFROMlines from the report.run_corpus.shcrashed on macOS's bash 3.2 (empty-array expansion underset -u) and then reported the crash asPARTIAL CORPUS. It now uses positional parameters, and refuses to report any corpus outcome without a manifest to back it.- The self-test built fixture repositories with
git init -b, which requires git 2.28; macOS ships older. Fixture commands are now checked, and a preflight reports an unusable environment as a setup failure. - Clone failures recorded git's trailing boilerplate rather than the line naming the cause.
.claude-plugin/marketplace.jsonregistered./skills/supply-chain-security, a path that does not exist; corrected to./skills/supply-chain-ioc-scan. A self-test assertion now fails if any registered skill path is missing from disk.
Security
build_corpus.pywarns when the repository list may be truncated (count hits--limit, or lands on an exact multiple of gh's 100-per-page size). A capped list is the one incompleteness a manifest cannot express as a failure.- The self-test is hermetic with respect to the developer's git configuration; a global
core.hooksPathwould otherwise have made the central hook-hardening assertion pass for the wrong reason. - Cloned repositories are treated as hostile input: hooks, LFS smudge/process filters and interactive credential prompts are disabled at clone time; clones are staged and promoted only on success; repository names are validated before use as path components; and file walking never follows a symlink out of its root.
- Migrate to Python 3.14 [GS-337].
- Bump Node.js version in .nvmrc to 26 [GS-339].