AttributeConverter による CountryType のレガシー・オーディナル・ストリングを扱います
DB 行は、元の整数 (例: UNITED STATES の "186") として保存された国でした。 の代わりに、IllegalArgumentException を findAll() に引き起こします。 CountryTypeConverter は、valueOf が失敗したときに元の検索に戻り、 お名前で書きま...
バックグラウンドでtsxを実行することにより、ジョブを即座に翻訳をキャンセル
Forgejo がワークフローを解除すると、bash は任意の前景子を待ちます 信号処理の前に仕上げる — なので、実行中の tsx locale ジョブ ランナーのスロットを保持し、数分のキャンセルをブロックします。 Fix: tsxを&で実行し、$CHILD PIDを待ちます。 bash exitswait()を...
ASTERISK CDR DSN をローカル config.json に移動し、CI/CD シークレットではなく
CDRの資格情報は、各FreePBXサーバーにローカルで、ビジネスにはありません CI/CDパイプライン 演算子は、ASTERISK CDR DSN を直接追加します。 config.json を API KEY と PHONE SERVER ID と一緒に指定します。 config.go フィールド すべてのランタイ...
GetDomainById および check-dns エンドポイントで高まるアクセスを許可
GetDomainBy でトップレベルの org オーナーとシステムメンバーが 403 を獲得しました ログイン そしてそれらのエンドポイントはisUserMemberOfをチェックしたので、検証-dns 直接オーグ。 hasElevatedCrossOrgAccessヘルパーを追加し、メンバーチェックと一緒に適用しま...
Show existing org domain instead of entry form when no custom domain
Fall back to the org's platform subdomain as the display domain so DnsProgressView renders rather than DomainEntryForm when no custom external domain exists. Al...
Surface imaging fallback when provider has no call history
KamoPBXProvider.getCallHistory now returns null instead of throwing **************** so the 501 response no longer bypasses the imaging fallback. The provider c...
Correct account list member/teamMember fallback labels and trigger redeploy
Restore NavPri panel labels and LeadHistory column headers
NavPri: salvage-keys grabbed href URLs as label values and swapped label/description pairs for Accounts, KB, and Notes nav panels. LeadHistoryPanel: MUI bgcolo...
Show platform domain context when no custom domain is set
Surface the active *.kamocrm.com hostname in the domain entry form so users can see their current platform domain instead of a blank entry screen. Also fixes ve...
Checkpoint translations per chunk and per locale on main
Persist locale JSON after each API chunk so cancellation loses at most one batch. CI translates one locale per process and commits/pushes after each so finished...
Checkpoint translations per chunk and per locale on main
Persist locale JSON after each API chunk so cancellation loses at most one batch. CI translates one locale per process and commits/pushes after each so finished...
Disable Docker BuildKit cache so every pipeline run does a full rebuild
Sets no-cache on both image build steps so npm ci and npm run build always run, even when the source tree is unchanged.
Bust Docker BuildKit cache per commit so npm run build runs every push
Identical checkout trees (e.g. empty commits) reused cached layers and skipped a real Next build. Pass GIT_COMMIT from the workflow and label the image revision...
プライマリメールボックスが割り当てられ、変更、または削除されたときに、メンバーを同期します
メールボックスがKAMO MAIL orgのメンバーに割り当てられた場合、members.email 決して更新されず、EmailCredentialService が IMAP を解決できなかった 会員の資格情報.
重複ルートドメインを防止し、プライマリドメイン表示を修正
ONE DOMAIN PER ORG チェックを誤って .kamocrm.com web-alias ドメインは、複数のルートドメイン(および10)を蓄積するorgを許可します 異なるエイリアスと再試すことで各エイリアスを。 今、すべてのカウント 接尾辞に関係なくトップレベルのドメイン(親はNULL)。 ネットワーク...
会員セキュリティとメンバーのPUTコールをシリアライズし、CockroachDBの競合を回避
同じ `members` 行に 2 つの同時書き込みがシリアライズ可能 分離の対立 — 会員セキュリティは、メンバー間で行を読みます endpoint はそれに書きました(countUpdated を経由して)、1 つのトランザクションを中絶します エラー40001で。 シーケンシャルコールは重複を排除します.
Org作成レイテンシーを削減し、翻訳カスケードの失敗を修正
- 組織管理者:TeamMembersForAllOrgs(完全なorg)を確実に交換する TeamMemberForOrg(単一オーガニゼーション)を確実なテーブルスキャン 〜400ms×N DB 往復 /network/create 送信 がスタック - 組織管理者:メールを移動しますTemplateSeedCli...
ワイドな commit log translations.title から TEXT まで、DB 列にマッチ
列は、アノテーションとDBのVARCHAR(512)で、 長い翻訳タイトルに失敗する翻訳インサート。 DB カラムは 今、ストリング(直接適用)。このアノテーションの変更は、組織を維持します 一貫した.
バックエンド応答封筒からのUnwrapカタログと計算
getSubscriptionCatalog は { カタログ {...} を返しましたが、直接キャストされました サブスクリプションカタログとして、カタログを残します。undefinedとプラン 選択ステップ空白。 計算のための同じ問題サブスクリプション 価格 その { 計算: {...} } ラップパーは未処理でし...
@JsonProperty を is*-prefixed boolean DTO フィールドに追加
Lombok は isXxx() を生成します。 isXxx() は boolean フィールドの isXxx() を生成します。 ジャクソンは「is」のリーディングをイジェッタから取り除き、それらをシリアライズします 'xxx' ではなく 'isXxx' なので、'accountManager' になった JSON ...
Fuser の代わりに s を使用して、ストール ポートフォワード (k0m1) をキルします
ランナーのホストにfuserとlsofがインストールされていない。 ss -tlnp を使う PID 保持ポート 18080 を抽出し、直接それを殺すために grep。 その他 pkillをSIGKILL(-KILL)に切り替えるので、階段プロセスに依存しない 優雅な信号を調達する.
スタンドポートをクリーンアップするので、キャンセルされた翻訳ジョブは、次の実行をブロックしない
バッシュは背景のプロセスに信号を転送しないので、kubectl ポートフォワードアウトライブ解除ワークフローの実行と保有ポート 18080, その後のtranslate and rebuildジョブをブロックします。 修正: 結合する前に 18080 で既存のポートフォワードをキル (pkill + fuser/ls...
ページ全体ですべての壊れたプレースホルダーの値を復元する
Salvage-keys スクリプトは CSS classNames、インラインスタイル、JS をつかみました 114メッセージの元の英語テキストの代わりにテンプレートリテラル メモ、kb、コマース、アカウント、レポート、リード、設定、 ダッシュボードページ.
リードページを復元 英雄のタイトルとgit履歴からのサブタイトル
ヒーロータイトルは「ヒーロータイトル」(プレースホルダ)、ヒーローサブタイトルは「フレックスギャップ2」でした (salvage-keys は誤って隣接する CSS クラス名をつかむ)。 コミット10f4e4bから回復された正しい値.
ウィジェットをポーリングすることでフィニッシュボタンを有効にします。getState() と auto=onload への切り替え
ステートチェンジイベントリスナーは、フィニッシュボタンが確実に有効になっていない 確認後。 2つの根本原因: 1。 ドレインロジックはウィジェットを読み込みます。 ウィジェットに存在しない状態 — ウィジェットは .state プロパティではなく getState() を公開しているため、ドレインは常に 確認後にリス...
Orgリストにサブスクリプションターゲットアカウントを含める
listForOrg では、サブスクリプションがターゲットとなるアカウントも返します。 リクエスト org — 直接所有するアカウントだけではありません。 マルチオーガニゼーション ペイメントアカウントは、カモCRMのトップレベルのorgに住んでいます サブスクリプション対象サブオーガナイザー。このカモクラブのオーガナ...
StatusWindow ラベルの名前空間を追加し、すべての設定のプレースホルダを修正
- Add****************(50キー)設定 navサイドバーは、キーパスの代わりに実際のテキストを表示します - BranchTypesLabel ICUフォーマットを修正:\${branchLabel} → {branch} - Fix tr()フォールバックガード:next-intlは、代わりにキー...
他のツールウィンドウのサイズ+カラースキームに一致
- defaultSize と minSize は現在 320x650, 再利用可能な: false (Softphone、チャット、電卓、SMS、AIチャットと一致します) - ダークスレートグラデーションから標準ライトグラデーション(#fafbfc -> #f5f7fa)にSoftphonePanelで使用 - H...
Forward Range header so audio playback can scrub
Without this the VOIPService recording-streaming endpoint always returns the full file (Range header is dropped by buildForwardHeaders), which works for play-fr...
Rewrite /etc/odbc.ini to point at $MARIADB_HOST on every boot
The escomputers/freepbx:17 image bakes /etc/odbc.ini with Server=db (the docker-compose link target). On this Kubernetes deployment MariaDB lives at \$MARIADB_H...
Resolve member→extension before VM/CDR provider lookup
CallController was passing memberId where FreePBX (and other PBX-style providers) expect an extension number — voicemail listing returned empty because no PBX e...
自動座席は床、より広いorgの無効として、床として、放します
BillingSetupService は、作成者の最初のオープンライセンススロットを有効にします。 サブ・オーガナイゼーション(およびプロモート・トゥ・ビルリング・オーナーと同じ)を見るとき — そうでなければ、新鮮なサブオーガニの所有者は、あるにもかかわらず、無料のベースラインを参照してください シードプランのライ...
トップレベルのorgメンバーはプラットフォームオーナープラン、バイパス課金ゲートを受け取ります
KamoCRM (トップレベル) orgのメンバーは、課金システムではなく、 OWNER UNLIMITEDプランの機能行列アウトライト(無料) 所有者の計画が欠落している場合の防御的なフォールバック)、プラスは、活動的なライセンス と has-Kamo-CRM-access true なので、すべての UI ゲート ...
トップレベルのorgバイパス+サブなしでorgsのための無料のベースラインフォールバック
Org-level リファレンスチェック ******************** orgをターゲットとするサブスクリプションを歩きます。 新しい target org モデルを使うと、その ターゲットを絞るアカウントサブスクリプションは、すべての非コアアプリが拒否されたのを見たわけではありません。 2つの修正: -...
歴史パネルから冗長フィールド履歴のタイトルを削除
タブラベルはすでに文脈を伝えています。タイトルとサブタイトルは画面スペースを浪費していました。 リロードボタンはツールバーにインラインに移動しました.
レイアウトの支柱を取除き、メールボディの弾力を引き起こします
外の動き。 div の `layout` の prop は内部 AnimatePresence と戦った 高さ: 'auto' アニメーション、FLIP フィードバック ループをメールに作成 目に見えない高さ(画像、表).
ドキュメントマネージャーページでドキュメント作成ボタンを常に表示
GetMemberId() > ボタンを非表示にしていた 0 ガードを削除 useUserInfo 読み込みウィンドウ。 このページは既にauthの背後にあるので、 クライアント・サイド・メンバーシップ・チェックが必要です.
事故による組織の輸入の復元
handleCreateDocument リクエストで、Organization.id はまだ必要です ボディ; isDocsEditor 条件のみを削除する必要があります.