Repository navigation
Conversation
|
SafeDep policy: failed Policy: SafeDep default policy revision 1. The plan of this tenant has no policy management.
Fixed rule of the check: SafeDep Report SummaryPackage Details
This report is generated by SafeDep GitHub App |
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
| GitGuardian id | GitGuardian status | Secret | Commit | Filename | |
|---|---|---|---|---|---|
| 35876281 | Triggered | Generic Encryption Key | 565ebb9 | .github/workflows/ci.yml | View secret |
| 35876281 | Triggered | Generic Encryption Key | 565ebb9 | .github/workflows/ci.yml | View secret |
| 35876281 | Triggered | Generic Encryption Key | 565ebb9 | .github/workflows/release.yml | View secret |
🛠 Guidelines to remediate hardcoded secrets
- Understand the implications of revoking this secret by investigating where it is used in your code.
- Replace and store your secrets safely. Learn here the best practices.
- Revoke and rotate these secrets.
- If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.
To avoid such incidents in the future consider
- following these best practices for managing and storing secrets including API keys and other credentials
- install secret detection on pre-commit to catch secret before it leaves your machine and ease remediation.
🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.
BREAKING CHANGE: Remove ENCRYPT_ALGORITHM, --encrypt_algorithm and YAML encrypt_algorithm. Field writes use fixed AES-256-GCM; only the default ECB legacy reader remains. Custom legacy algorithms require conversion on the prior version before upgrading.





Summary
Shared migration helpers now live in
database/app-migrations/helpers(configuration conversion and OAuth unwrapping). Release migrations depend on these helpers directly;src/upgraderetains CLI orchestration only.Require encrypted credential storage and finish the legacy configuration cutover in the database before the application starts.
20261109-canonical-config. It converts old GitHub/membership/image/TTS/SMTP settings, decrypts credentials at original paths and encrypts at new paths, removes retired option rows, and fails transactionally on conflicting credentials, invalid shapes or unreadable ciphertext.single_file_size_mb/singleFileSizeMb) resolve to declaredsingleFileSizeMB, and the form restores declared keys before display/edit. Unknown and retired fields remain rejected; DB and wire names are unchanged.CONFIG_NOT_FOUND; old/unknown declared PATCH fields returnCONFIG_VALIDATION_FAILED. Partial updates, blank secret retention and freeform record keys remain supported.ENCRYPT_ALGORITHM, CLI--encrypt_algorithmand YAMLencrypt_algorithm. Removed env/YAML options fail explicitly and read-only check reportsREMOVED_ENCRYPTION_OPTION. Field writes use fixed AES-256-GCM (96-bit random nonce, 128-bit tag, field AAD); historical default AES-256-ECB remains read-only.tmp/dev-encryption.key(mode0600), reuse it across restarts/workers and prefer explicit keys. Bad local/explicit keys fail without replacement. Release builds remain strict even underNODE_ENV=development, and standalone diagnostics still require the effective key in environment configuration.20261109-required-secret-storageafter configuration migration, reusing transactional credential conversion with a new ID so historical opt-in ledger rows cannot skip the v18 backfill. Removemigrate:secretsand its activation flag.Deployment contract
Stop every old application replica and background writer, rotate a short JWT if needed, then run
node migrate.mjs(source:pnpm -C apps/core migrate). This single release runner handles configuration, credentials and AI metrics. Run read-only check, then start the new runtime. This configuration JSON contract change requires a maintenance cutover; it is not safe to let old-format writers overlap. A short existing JWT must be rewrapped before starting this runtime. App and migration services share persisted secrets.Remove retired algorithm settings before this cutover, including old default values. Instances using a custom historical field algorithm must first convert affected credentials to V2 on the prior version with the original algorithm/key and verify them; preserve those settings for isolated old-snapshot recovery.
SDK configuration model removals belong to the matching major release and must not be published as an SDK 5.x patch. Other API removals, full SDK 6 cleanup and physical column deletion remain later work. No version bump, npm publication, production migration or deployment was performed.
Companion documentation: mx-space/docs#52
Validation
Admin settings acceptance: real owner login against migrated legacy data in isolated PostgreSQL/Redis; all 18 generated configuration sections round-trip through the actual Admin client. GitHub, membership, SMTP and AI edits persist after browser reload; five credential values remain encrypted and unchanged. Comment-upload limits save and reload as 7/70 after the casing fix.
Three new RED→GREEN regressions; 73 focused Admin tests, 40 focused Core tests, both production builds/typechecks, scoped lint/format and API guards pass. This covers settings display/submission/persistence with fixture credentials, not external email/payment/model-provider connectivity.
Real before/after screenshots and save/reload recording are available at https://ryugi.innei.dev/a/48IrQ95Vj1VecQTZtWKtf ; visual acceptance was confirmed by the user in the verification page and conversation.
Final Core regression after development-key support: 434 files passed, 3 skipped; 3594 tests passed, 11 intentionally skipped. Command:
TZ=UTC pnpm -C apps/core test run --maxWorkers=3 --exclude '**/admin-agent.e2e-spec.ts'(exit 0).Development-key startup regression first failed for the missing key, then passed. All 22 startup boundary tests pass, including concurrent first boots, restart decryption, mode
0600, explicit-key precedence, invalid-key preservation, non-development modes and the built release refusing fallback. A real PostgreSQL source-development migration without a configured field key preserves V2 credentials and is idempotent on restart.Seven new algorithm-removal RED→GREEN regressions; 25 focused tests pass. Runtime refuses removed env/CLI/YAML options, check remains read-only, and default ECB conversion is independently decryptable as AES-256-GCM. Core build, Core/E2E typechecks, API guards, scoped lint/format and entrypoint shell syntax pass.
The unfiltered run still fails the pre-existing Agent fixture: missing
AiAgentConversationRepositoryduring setup, followed by cleanup failure (7 tests blocked). Its initial archive fixture failure was corrected by aligning both inherited PG connection aliases, verified in isolation and in the final regression. No claim that the unfiltered command is green.New regressions first failed for omitted credential backfill, stale historical migration ledgers, the removed command and the obsolete preparation-marker requirement. Focused migration/config/JWT/check coverage and built release-entry archive restore pass.
Prior independent configuration review: two data-preservation findings fixed through 5 real-PG RED→GREEN regressions (all raw known sections validated before defaults; canonical/mixed third-party siblings preserved).
Real private PostgreSQL release runner automatically migrates legacy data, preserves credential values/AAD, removes retired rows and records completion. Conflict, damaged ciphertext and malformed credential shape roll back without a completion marker.
Current-only service regressions: startup/missing-marker refusal, retired GET/PATCH refusal, strict unknown-field rejection, partial updates and freeform OAuth keys.
Historical ZIP/v1 archive restored into private PostgreSQL, migrated through built
migrate.mjsand verified through built read-only check; original credentials retained.Core and Admin production builds; Core/Admin/SDK/E2E typechecks; API envelope/validation guards; migration lint over all 50 SQL files.
SDK 207 tests. Both Compose templates validate required shared secrets.
Database migrations checklist