チェンジログ
何が新しいの?
プラットフォームのすべての改良 それが出荷される
· kamo-shared-library
データベースのアカウントの引用をページとフィルタリング
アカウントビューは、すべてのリードですべての引用を必要とします。 ページをレンダリングするためにそれらを読み込みます 毎月、アカウントが使用中であることが劣化し、表示されている合計は、アカウントが使用しているものだけをカバーする が取得されました。つまり、 SQL で起こるすべての paging, filtering, sorting が発生しました。 引用語句は、参加する非関連付けとソフトリードのみを保持しているため、クエリはネイティブです つまり、リード.uid = commerce quotes.lead id と、リード.account uid のスコープに参加します。 アカウントのリードをインリストに引き込むと、大きなビジネスの本を生き残ることはありません。 すべてのフィルタは、null-guarded述語です。そのため、1つのクエリは、フィルタリングされていないグリッドと任意の パーマテーションあたりの方法ではなくフィルタの組み合わせ。 ソートキーは許可されている: 値がネイティブの ORDER BY に達するので、 クライアントからの任意のフィールド名は、インジェクションポイントになります。 リストのプロジェクションは、 sendAt、acceptAt、バージョン、オプション/行のカウントも増加します。 前回の「ここが出て、土地をやった」の概略が読み込まれています。 フィールドは応答できませんでした.
· kamo-signer-monorepo
顧客のコピーに割り当てられた代理店を表示して下さい
スタッフのプレビューにマッチします。: org のレターヘッド名、この名は担当者に尋ねます.
· kamo-internal
プレビューに割り当てられたエージェントを表示
フッター上の「あなたの連絡先」パネル — 名前、タイトル、電話、電子メール — したがって、顧客は 価格について尋ねる人を知っている。 リードが割り当てられていないとき、完全に欠如.
· SecurityService
1つの鉛の調査からの顧客と共に代理店を、解決して下さい
どちらのブロックも同じリードを脱いでいるので、コントローラーは一度フェッチし、それぞれを導きます からではなく、レンダリングごとに2回サービスを終了します。 両方でまだorg-scoped 場所; パブリックページでは、スコープは、共有リンクの組織から来ています.
· kamo-shared-library
ドキュメントのリードの割り当てられたエージェントの名前
Letterhead は org を識別しますが、価格のニーズに関する質問のある顧客は 関係を所有する者。 今引用は、リードの割り当てられたエージェントを運ぶ — 名前、仕事のタイトル、仕事の電子メールおよび仕事の電話。 仕事の連絡先の詳細だけ:引用は、エージェントのビジネスアイデンティティを運ぶ、決して 会員記録に座ることが起こる個人番号。 ジョブのタイトルは好みます org がリンクされた JobTitle の前に、プリントすることを選択したものです。 未割り当てのリード、または何も記録されていないエージェント、ではなくブロックを収めません 空白のスペースを上回る「あなたの連絡先」。 名前の解像度は、****************と同じパスのリード制御 既に割り当てられた貸出役員のために、従って引用語句は代理店を丁度として示します リードビューの残りの部分は、します.
· kamo-internal
機会を保持するエージェントを再割り当てる
Approverのダイアログはエージェントピッカーを獲得し、同じプールからバックエンドを描画します。 に対して検証します。 グリッドの Agent 列は、HOLDS の機会を表示するようになりました。 アンバー「から再割り当て...」のキャプションで、それがもはやエージェントではない 要求 — リクエストは、レコードと歴史のどちらかの方法で滞在します。 リードヘッダ制御は、ホルダーにも続きます。 リクエストをキーオフにしました。 再割り当てがエージェントに拡張ダイアログを提供した後 もはや所有しておらず、それを隠していなかった人 - そして、バックエンドゲート ホルダーのエンドポイントなので、オファーは403で終了します.
· SecurityService
保有代理店を代理し、影響するすべての人に電子メールを送ります
承認者は別のエージェントにチャンスを渡すことができます。 リクエストは 決して書き換えない — ApplyPrimaryAgent は自身の履歴行として移動を記録します 両方の名前は6ヶ月後にレコードが移動するのではなく、 新しいエージェントが要求したので、読み込みます。 延長所有権、リードヘッダ コントロールと詳細マスクは、現在保持者に従う。 「エージェント」フィルタマッチ 再割り当てのEITHERエンド, それを発見したエージェントからそれを隠すので、 それを保持するエージェントは、間違った答えです。 Nineの通知はライフサイクルをカバーします。 リクエストと拡張リクエストは、 それらを決定できるすべての人 - 両方の決定権、唯一のことができるメンバー以来 denyは、そうでなければ、拒否する要求が存在しないことを学びません。 決定と編集は行く ホルダーに、その違いが異なるときのオリジナルリクエスト、同僚全員に 手数料の分割; 失うので、それが変位する追加のメールを編集する これらのメールが送信されるのは、無声に手数料シェアです。 送信がシーケンスされる方法の2つの事柄: - 解決およびレンダリングは、呼び出し主のトランザクションの内部でEAGERLY起こります エンティティティティは、Eメールが残っている値を保持しています。 approveExtension() クリア 拡張フィールドは直後に続くので、後読みは "no 件名がどれだけの時間を付与されたかというメールの「追加時間」。 - 送信が待ちます************************ 決定を発表 後続の失敗ロールバックは、電子メールを保持するエージェントを残します 決して起こらない承認、およびafterCommitの代わりに後の完了 アウトバウンド HTTP が開始される前にデータベース接続が解除されます。 地図を入力すると、詳細テーブルの値がエスケープされます。メンバー名は org-enteredの無料テキスト、テーブルは生のHTMLとして注入され、レンダーはエスケープします いいえ。 何もメールを送らない編集、PENDING予約 "updated" は送信されません。誰もまだ存在していないと伝えています。 60テスト.
· EmailService
9つの機会通知のプレビューサンプル
管理者メールテンプレートエディタがすべてのプレースホルダーをレンダリングするアームがない 空白なので、これらのnineをカスタマイズする人は空のスケルトンを編集します。 すべての9のための1つの腕:それらは設計によって置かれる変数を共有します、従って単一のサンプル・マップ それぞれを忠実にレンダリングします。 Map.ofEntries は Map.of のキャップを 10 台に収まるので ペアとセットはそれよりも大きいです.
· InitializerService
予約された機会に再割り当て可能なプライマリエージェント
PRIMARY AGENT MEMBER ID は、今の機会を保持している人です。 REQUESTED BY MEMBER ID 永遠に残っている。 目的に埋め戻しなしでnullable — null は "never reassigned", リクエストを既存の行にコピーすると、 列を優先するすべての予約の区別。 2026-08-04の生産に対して適用される;コラムおよび索引は提示を検証しました.
· kamo-shared-library
再割り当て可能なプライマリエージェントと9つの通知テンプレート
Approver は機会を渡すことができ、それと手数料は異なる 代理店。 PRIMARY AGENT MEMBER ID は、現在保持しているユーザーです。 契約が過去の事実であることが判明したので、再び書かれていない 元のエージェントが持ち込まれた唯一のレコードを消去します。 Null は "reassigned" という異なるステートメントの "reassigned" を意味します。 リクエストへ戻ります」 — 既存の行は、バックフィルドではなく、単独で残されます。 validAgentMemberId() は保持者であり、誰が尋ねるのかを決めるようになったことです。 拡張機能とリードヘッダが所有者として扱います。 機会に一度 元のリクエストは、その主張ではなく、履歴の名前です。 Nine の正式なテンプレートは、ライフサイクルをカバーします: リクエストまたは拡張リクエストは すべての承認、拒否、編集、エクステンションルーリング、 expiry と close はそれを保持するエージェントに行きます。 他の人と、手数料の分割ですべての同僚。 生成されたシェルを1つ共有し、レイアウトはそれらの間に漂流することができません。 変数 set なので、 テンプレートは Java の変更をマッチングせずに参照できます。 — 存在しない変数が空の文字列としてのみレンダーされるため、 WARN は、メールの読み込みを "" まで保存します.
· kamo-internal
全体的な手数料、市場のデフォルト、およびプレピックされた単位無し
手数料の収集方法の3つの変更。 事前に選ばれたことはない。 パーセント/マウント/ワンタイム/再発 すべてのコミッションの分岐に unset を始めて下さい、従って各々はタイプを状態にします 誰かがそう言った。 事前に選択された「パーセント」は、考慮されたから無関心です 選択し、販売の15%と15ドルの違いは、全体の支払いです。 開始行が終了するまで、滞在を無効化します。 承認者は今、OVERALLの手数料に同意します - 組織が支払うもの リクエストエージェントと共有するグループへの販売 同僚の分割は刻まれています。 承認および編集ダイアログに表示され、 予約されたリストの列で、市場はそれをプレフィルするデフォルトを運ぶことができます。 市場デフォルトは、APPROVALのみを事前に入力します。 市場からの編集をシードする 誰もが合意した手数料の日にスタンプされた日付について保存してみましょう, そして、 「手数料なし」は保持できません。 埋め込まれた図をクリアすると、 明示的な clearCommission は、フォームが非公開されたものに対して、 保存されているもの - それ以外の場合は、埋め込まれたデフォルトを削除すると、何も送信し、 サーバは、サーバーを適切にバックアップします。 また: 半充填された市場のデフォルトでは、保存をブロックします。 そして成功として報告しました; 手数料のコラムは「一度」発明しません 年数が設定されていません。ツールチップの分割量は、同じお金のフォーマットを使用します。 行列; 市場の追加は、最後に継承されたクォートフィールドをクリアします 編集される市場.
· SecurityService
承認で全体的な手数料に同意し、市場からシード
承認は、組織が要求に販売に支払うものを記録しました エージェントとそのグループ。 承認され、リードの市場のデフォルトが適用されます。 それは市場が提案だけではなく、デフォルトを設定させるものです UI の名誉。 ApplyCommission は 3 つのフィールドを一緒にセットし、フィールドを賢くマージしません 保存されているものを使って。 マージは無害に見え、そうではありません: 編集のみを運ぶ シェアタイプは、保存された15を15から15ドルに反転します。 触れることを意味する誰も気に入らないことを思い出させます。 無効またはハーフコンフィギュレーションの市場デフォルトはログオンされ、無視されます。 スローン。 デフォルトは、法律ではなく、他のパスを通して保存される利便性です。 ナンセンスな数字で、未承認の市場不足に陥らないでください。 approver は依然として手数料を入力でき、1 つなしで承認することは正当です。 clearCommission は、市場のデフォルトを含む、すべてのものを優先します。 埋め込まれた図を削除した承認者は、決定を下し、静かにした 逆にすると逆転する。 クリアパス、マージガード、既定の悪いケースを含む49のテスト.
· InitializerService
予約された機会と市場のデフォルトのための委員会の列
6つの無効な列:予約された機会に合意された全体的な手数料 そして市場のデフォルトは承認でそれを満たします。 NUMERIC(19,4) と一致 スプリットテーブル — お金は厳密に小数または手数料の紛争が続く。 2026-08-04の生産に対して適用される;すべての6つの確認された提示.
· kamo-shared-library
販売の全体的な手数料、およびそれのための市場のデフォルト
予約された機会は、組織が販売から支払うものを記録するようになりました エージェントと共有するグループ - パー同僚のポット 分割は切り出されます。 リード市場は、いつそれをプレフィルするデフォルトを運びます 承認が付与されます。 すべての列はデフォルトで無効です。 誰も承認されていない予約は誰もいません 合意されたコミッションと設定されていない市場はデフォルトがありません。 ゼロを書けば、数字を誰もペイアウトレコードに置きません。 3つの分野は十分に要求しません。 JSON の null と absent フィールド 除菌後と同じことであり、不在はもう2つを意味します ここで物事 — 「市場デフォルトを使用する」 承認、編集で「単独で保存」。 そのため、clearCommission は大きな削除を言います。それなしで、削除する承認者 手数料はサイレンスになり、デフォルトを承認すると、クリアされた状態に戻ります。 LeadIdentity は市場のデフォルトを獲得し、findIdentities はスペルアウトします。 リーフジョイント 暗黙のパス l.market.x として書かれて、Hibernate は内部を出します 参加し、すべてのリードは、投影を完全に落としません。 「無名のリード」として、誰も見ない列を正確に表示しました.
· kamo-internal
クライアントのプレビューの詳細を、リードからレンダリング
引用符のアドレス帳フィールドを「準備済み」空白のままにするので、 customerName は、リンクされたアカウントとリードレイズされた引用符からのみ取得しました。 プレビューは、サーバーがリードから組み立てるブロックを表示します。 会社概要 そこにあるとき — ビジネスへの引用は、連絡先で、ビジネスに対処されます 下に名前を付けた — アドレス、電話、電子メール、リードがない場合、それぞれ省略 運ぶ.
· kamo-signer-monorepo
顧客のコピーに顧客の細部を表示して下さい
会社は1つあるときブロックを向けます。ビジネスへの引用は、 ビジネス、それの下の接触と。 スタッフのプレビューを正確に一致させます.
· SecurityService
スタッフと顧客ビューの両方のアドレスをリードします
両方の場所でオーグスコープ。 パブリックページでは、スコープは共有リンクの所有物から来る 組織なので、トークンは別のテナントに属する鉛を決して表面化できません.
· kamo-shared-library
クライアントの詳細をドキュメントに置き、リードをオフにします
引用符のアドレス帳フィールドをドロップすると、何も言わずに文書を残します クライアント: customerName は、リードレイズされた引用符をリンクしたアカウントからのみ取得しました。 プリントブランクは用意しておりませんので、 アドレスは、名前、会社、住所、電話、電子メール、リードから組み立てられます。 引用が意図的に唯一のソフトを維持しているため、参加ではなく、それは一見です ledId なので、リードモジュールは独自にデプロイ可能であるため、コントローラーはそれを解決します ブロックを渡します。 ハーフフィルドリードは、例外ではなく、通常のケースです。 リードはベンダーから到着します ソースがキャプチャされたもの。 アドレスは 1 行に崩壊し、何をスキップします 「ロンドン」ではなく、街のプリント「ロンドン」だけをリードしている。 リード 投げるのではなく、歩留まりを読むことができない — リードした引用符 削除されたままレンダリングする必要があります.
· kamo-internal
商取引やリードに引用符を移動する
引用は商取引パイプラインに座っています。, 注文とカートの横ではなく クライアントは 彼らは今、リードに住んでいます: クライアントリード直後に引用タブ 市場がそれらを可能にする場所だけを示すデータ。 スタンドアローンの引用ページは、フラグの背後にあるのではなく消えています。 リードはすでに ヘッダー、クライアントのアイデンティティ、通信およびその文書を供給するので、 クロームを複製し、クライアントの履歴を分割した上に2番目のレコードレイアウト 2つで。 引用符を選択すると、リストとエディタがリストアウトされ、リードヘッダ 決して画面を離れません。 コミュニケーションとドキュメントタブは同じ理由で削除されます。 Markets は、引用符の有効化と、引用のデフォルト条件が始まります。 EDIT QUOTE TERMS がなければ、条件フィールドは無効になり、ペイロードから省略されます。 無効な入力が提示されるので、サーバーはそれを余りに除去します、執行しません。 Sub-tab ids が "quotes" を失います。この回帰テストは、一般的なプロパティーを主張します。 最初のタブは独自のインデックスを保持するので、それでもバウンスバグを監視しない 存在しないタブを命名する.
· SecurityService
市場ごとの引用の設定を露出して下さい;条件の付与を強制して下さい
market-config は、引用タブと単語を語るかどうかをリードビューに伝えます。 新しい引用は始まり、市場は両方の分野を往復します。 条件の編集は、EDIT QUOTE TERMS なしで発信者にサーバー側をストライプします。 解散する UI のフィールドはプレゼンテーションです。 手作りのパッチは、org's を書き換えることができません。 法的な言葉遣い.
· kamo-shared-library
引用は市場ごとに構成される鉛に属します
引用は、商取引パイプラインのアーティファクトだった, 注文やカートの横にそれらを置いた クライアント側ではなく、 彼らは今、リードをハングオフ:市場は決定します リードがすべての引用符を運ぶことができるかどうか、およびその中のすべての引用符のデフォルト用語 市場は始まります。 モルトゲッジデスクの問題ロアンは、TRIDの下で刺激するので、オルグあたりの市場 サービスの市場はそれらに住んでいますが、サービスは一般的な引用のために使用しません。 規約は、orgの法的コミットメントを運びます, そのため、単一の市場ワードから出発 引用は独自の助成金である — EDIT QUOTE TERMS. null の用語フィールドは既に "leave" を意味しています。 unchanged" アップデートでは、コントローラが発信者のためにそれを除去できるものです。 お問い合わせ また、引用元の受信者名/アドレス/電話をドロップします。リードは既に保持しています クライアントの詳細、およびスナップショットは、他の場所で編集されたレコードを複製しました そこから漂流する。 このコミットの先にKamoInitializerによって適用されるSchema; 列検証済み.
· SecurityService
準備、承認、監査のリード機会クレーム
/leads/opportunities/reservedおよび Reserve Opportunityの後ろのRESTの表面 リードヘッダで制御します。, インバリアントを所有するサービスと. 権利、このサービスが許可されるので、明示的に強制される 許可なし @EnableMethodSecurity — 行方不明なチェックは、デフォルトで拒否されていない制御です。 VIEW OPPORTUNITIES すべての読み込み CREATE OPPORTUNITIES リクエストを上げて、自分でもっと時間を求める EDIT OPPORTUNITIES の承認、編集、終了、拡張 DELETE OPPORTUNITIES "Deny Opportunity"、UIは確認の背後にある Denyはターミナルですが、破壊的ではありません:予約、その分割とその全体 Deniedタブで履歴が読みやすくなります。 それはむしろ否定のポイントです 削除するよりも。 保つ価値のある細部: - ボタンがしなければならないので、リードヘッドのエンドポイントは、CREATEだけで読みやすくなります どの state をレンダーするのかを知っています。しかし、保持していない VIEW のない発信者 エージェントは狭い投影を取得します。 手数料の分割と正当化 保護する VIEW は、幅広のゲートによって開示されません。 として再建 allow-list なので、後日フィールドは省略で漏れることができません。 - リストは、無割り当てのリードで連絡先と会社をマスクし、メンバーを無割り当て VIEW UNASSIGNED LEADS, マッチングリードコントローラ. 誰が何を主張しているのか 秘密; 見通しは. - 延長は、神なしで予約を保持する代理店であることにゲートされます バイパス: 予約を保持することは、権利ではなく、アイデンティティ事実であり、 エクステンションは、リクエスト者の名前でファイルされます。 - 履歴書ではなく、拡張された再起動を取得する中断された予約なので、 予約不可 ==予約済みから + 承認済み 日は保持し続ける — update() re-derives スタートから終了し、階段のスタートは静かに助成金を消去します。 - 手数料スプリットプールはVIEW LEADSの所有者と助成金の所有者/管理者です、 ピッカーエンドポイントが提供するものと同じです。 権利表から計算する 単独でドロップダウンは、所有者にバックエンドを与え、拒否しました。 - Expiry はスケジュールされたスイープなので、タブは実際の列にパギンすることができますが、すべて DTO は、データベースのクロックに反する日を報告します。 スイープと関係なく。 36テストは、ライフサイクル、日付の算術および分割規則をカバーします.
· InitializerService
調達期間の予約のためのテーブル
ミラー リード機会予約・リード機会キャンペーン ************************ kamo-shared-library で. ddl-auto:update は とにかく実体から作り出す。 explicit DDL は家の慣習です そして、アノテーションから推論するだけでなく、ここで形状の見直しを可能にします。 2026-08-04 の生産に対して適用される — すべての 3 つの表およびすべての索引 存在します。, アプリのユーザーによって所有.
· kamo-shared-library
タイムボックスのリード機会予約のためのエンティティティ
エージェントは、境界ウィンドウのリードを閉じる上で排他的な主張を固定します。 approverの助成金、編集または拒否、同僚は共有を提供できます 手数料。 3つのテーブル:予約、手数料の分割、および 唯一の監査証跡。 負荷軸受けである設計ポイント: - 鉛、組織およびメンバーの参照は外国なしで明白なidのコラムです LEAD HISTORYとLEAD TASKのマッチング トレイルは、リードを生き延ばす必要があります ブロックやカスケードを許さないで削除し、メンバーのチューン。 - dbNow() は、CAST(now() をタイムスタンプとして使用します。 CockroachDB の bare は TIMESTAMPTZ です。 Hibernate 6 が宣言にキャストできないインスタントとして材料化 localDateTime — と ::timestamp のショートハンドは、ネイティブ クエリによって管理されます。 パラメータプレフィックスとして ':' を読み込みます。 コンパイル時に表示します。 - このページのリストでは、JPQL ではなく JpaSpecificationExecutor を利用しています。 (:param は NULL か ...) ガードです。なぜなら、CockroachDB は未型バインドを拒否するからです。 bare のパラメーターは NULL のテストです。 - LeadIdentityは、リードエンサーティではなく、投影です。 リードマップ4 @ManyToOne EAGER にデフォルトで設定されている団体なので、100 の団体による予約をリストする 格子が決して示さないデータのための選択の数百を始動して下さい。 - 歴史のタイムラインの注文(日付作成DSC、ID DESC)。 CockroachDBの現在() トランザクションタイムスタンプなので、1つの編集共有で書かれている行が正確に共有されます。 監査証跡がページのロード間で再シャッフルを解除することなく。 ここにステレオタイプはありません — 所有サービスは豆を宣言するので、他のサービスはありません リポジトリのスキャンの支払い.
· kamo-internal
引用符を人へ送ります。要約はヘッダーの高さを削減します
右側の列からまとめて幅を固定するが、そのまま買った タイトルの下のバンド。 今、タイトルとの間に既に存在するギャップに座っています 簡単な操作で、スペースをまったく負担しません。 そのギャップは有限なので、少ない表示インライン そして残りはワンクリックで滞在します。注文は12を運び、混雑します アクション。 狭い画面で消えるのではなく、すべての幅で表示されます。 引用符はまた、そのアドレスを獲得します。: 誰のために、オプションのアドレスと電話. これらは最初のセクションをリードします。それはあなたが決定する最初のことです。 アカウントは、名前フィールドがリンクされているので、そうしないと落ちるものが表示されます。 ザ・オブ・ザ・ プレビューの "Prepared for" ブロックは 3 つ全てをレンダリングし、型になっているものを反映します。 最後に保存されたものよりも.
· kamo-shared-library
まだアカウントされていない人への引用
アドレスは、リンクされたアカウントからのみ取得されたため、任意の引用は、 見込み客 — それらのほとんどである — 空白の「準備完了」ラインと終了を印刷 文書は、それが誰のためにだったかは言いませんでした。 引用符は、受取人の氏名、住所、電話を自分の権利で運びます。 新着情報 スタッフは、リンクされたアカウントを上回る:彼らは、印刷すべきこと、そして、 既に送信された引用符をサイレントに書き換えてはいけません。 郵便番号 フィールドに分割するのに十分な郵便フォーマットが均一でないため、フリーフォーム 国際的に作業し、筆記として印刷します。 リビジョンはアドレスを運ぶ 転送 — 同じオファー、同じ人。 このコミットの先にKamoInitializerによって加えられるSchema;コラムは提示を検証しました.
· kamo-internal
メンバーのプロファイルを列から開く
行のホバードックに4つのアクションを追加します。 メニュー クリックハンドラではなく、本当のNextLinkです。 「新しいタブで開く」とリポのノーハードナビゲーションガードは、 満足; パネルは運行で閉まります従ってボディ スクロール ロックはではないです ルート変更を出力します。 アクションは、目的地のゲート自体をゲートする方法をゲートします。メンバーの設定 ページは MANAGE MEMBERS を保持しない限り、あなた自身のプロフィールにリダイレクトします。 MANAGE MEMBER SECURITY、CONFIGURE SYSTEM、EDIT MEMBER ACCESS LEVEL、 ALLOW PROMOTING MEMBERS または**************************************** (または神/プラットフォーム) 管理者)。 死者として提供されるよりも、そのアイコンが隠されていない 終わり。 自分の行が常に表示されます.
· kamo-internal
Fail the build when a component calls a key messages/ does not define
next-intl renders the key path verbatim for a missing key, and messages/ is gitignored here — populated at image-build time from kamo-translation-dictionary — so a rename that lands in only one of the two repos ships as visible gibberish with nothing to catch it. That is how the department contact fields came to render **************** on the settings screen, and how the entire HMDA demographics form (39 labels) shipped against a namespace that only contained `lar`. scripts/check-i18n-keys.mjs resolves each translator binding's namespace, then checks every literal key, the static prefix of every template-literal key, and the values passed against the {placeholders} in the message — in both directions, since an unsupplied ICU argument throws MissingValueError and an unused one silently drops data. It understands ICU brace escaping and plural sub-messages, and treats <tag> as a placeholder only for t.rich/t.markup. 1737 files in ~1.4s. Wired into `npm test` and into the Dockerfile ahead of the build, with --require-messages there so a skipped dictionary sync fails loudly instead of turning the guard into a no-op. Typing t() against `typeof en` was tried first and rejected: a JSON import widens values to `string`, so next-intl cannot infer placeholders and rejects correct calls like t('...range', {start, end, total}); it also tripled typecheck time (81s -> 249s) and would have needed ~150 edits to non-buggy code. Call-site fixes for what it found: - dropped a `default:` option passed to t() in the chat components and LanguageButton; next-intl has no such fallback option, so it was dead weight. - commerce lowStock passed {count} for {available}, MultiFileUploader {types} for {list}, and audioVideo master volume {pct} for {percent} — all three threw at format time. - DnsSetupStudio passed a {domain} its subtitle does not use.
· kamo-internal
ナフスとホームランチャーパッドからのピン/アンピン navオプション
サイドバーとトップバーのオプションを移動することができますが、決して navsを完全に取ります。 3番目の配置を追加 — NONE, "unpinned" — 同じ共有メニューを運転する2つの方法: - NavPri/NavTopで移動可能なオプションを右クリック:配置メニューが開きます - 各ホームランチパッドのペインの角制御:読み出しの静かな破片 現在のオプションがホバーに座って展開する場所、同じメニューを開く 無ピン化は決して死んだ端です。 ホームランチャーパッドは、すべてのゲートからレンダリングされます 2 つの navs の union ではなくオプションなので、 ピンされていないオプションは、 ピンを返すペイン。 コマンドパレットが同じで、各変更 選択肢が行き届いたところ、未進のトースト命名を上げます。 ナビゲーションレイアウト 設定ページが一致しない列を生成します。 決議者は、その差異を保ち、すべてのゲートされたオプションを正確に1つの Bucket で保持します。 そして、NONEは今、階段ゾーンの注文を打つので、アンパンはブロブを生き残ります 前に書きます。 レガシーの保存されたレイアウトはNONEのエントリがなく、解決します 直前に正確に; スタンダードにリセットすると、ピン留めされたものを残すことはできません。 カバー resolveNavLayout の新しいテストで、どれも持っていませんでした.
· kamo-internal
空の部署を非表示にし、ステータスフィルタをディレクトリに移動
- もはやレンダーを使わない部署。 出発エンドポイント 空のものを含むすべての部門を返すので、ロスターは 誰も含まなかったセクションを示す。 パーデパートメント "いいえ メンバーの「プレースホルダー」は、今では到達できません。 - All/Online/Offline フィルターは、パネル全体のヘッダーから下に移動します タブストリップは、ディレクトリの領域にそれを置く パネル全体をフィルタリングするのではなくフィルタ(適用されません) チャットまたはモバイルアクセス - 空の状態は、検索/フィルタを調整するだけを提案します。 実際に適用されて;メンバーが調節する何もないのorg.
