New test file stacked-allocation-bar.test.tsx covers:
- empty allocations → null render
- 3 segments with correct widths (50%/30%/20%)
- 1 segment at 100%
- labels without usedSuffix when usage=null
- usedSuffix labels when usage provided (consumed/fairShare%)
- fallback to apiKeyId when keyLabel missing
pool-card.test.tsx updated: mock StackedAllocationBar, assert it renders
when pool.allocations is non-empty.
Line 68: {statusCls} string literal → \${statusCls} template literal so status color applies.
Remove duplicate <span> wrapping (lines 71-73) that rendered the icon twice via copy-paste bug.
New component renders a horizontal stacked bar split by allocation weight,
with optional per-key consumed% labels sourced from PoolUsageSnapshot.dimensions[dimensionIndex].perKey.
Returns null when allocations is empty. Uses shared PALETTE of 8 colors.
10 test cases covering: null/empty executionKey guards, null/empty stepId
guards, unknown executionKey no-op, idempotence (double-set true and
true→false), exported function signature assertion, and a white-box
integration scenario that exercises the full path via handleComboChat.
Replace `void quotaSoftDeprioritize` with a live call to
setCandidateQuotaSoftPenalty when isCombo && comboStepId are set and
enforceQuotaShare returned deprioritize=true. Uses dynamic import so the
combo service is only loaded for combo requests. Fail-open: import/call
errors log a warn but never block the request (consistent with the existing
quota enforcement fail-open policy in B/F7).
Add module-level _activeExecutionCandidates Map (executionKey → stepId →
candidate ref) and export setCandidateQuotaSoftPenalty(key, stepId, penalty)
so chatCore.ts can mark a candidate quotaSoftPenalty=true when enforceQuotaShare
returns deprioritize. Candidates are registered after buildAutoCandidates in
the auto strategy path and cleaned up via try/finally after handleComboChat.
The existing score *= QUOTA_SOFT_DEPRIORITIZE_FACTOR path in scoreAutoTargets
now has a live data path to set the flag.
Add 22 new keys under activity.eventVerb.* in both pt-BR.json and en.json
corresponding to the new ACTIVITY_ICONS i18nKeyVerb values (providerCredentials*,
authLogin*, authLogoutSuccess, syncToken*, settingsUpdate, settingsUpdateFailed,
serviceRevealApiKey). Existing keys preserved for back-compat.
Replace all icon specs to match the new 26 real action names. Every entry in
HIGH_LEVEL_ACTIONS now has a corresponding ACTIVITY_ICONS spec with appropriate
Material Symbols icon and i18nKeyVerb key. Old entries (provider.added, auth.login,
etc.) removed since those actions are no longer in the allowlist.
Replace the old "clean naming" allowlist (provider.added, auth.login, etc.) with
the 26 real action strings emitted by logAuditEvent calls in the codebase
(provider.credentials.*, auth.login.*, settings.update, sync.token.*, etc.).
Activity feed was empty because HIGH_LEVEL_ACTIONS used invented names that
never matched any real audit event.
Export deepMergeFallback and apply it in getRequestConfig so all 39
non-EN locales receive EN text for any key absent in their JSON file.
Locale-specific translations always win; EN fills gaps only.
Owner-authorized temporary relaxation to unblock landing of planos 16+22
(Monitoring reorg + Quota Share Engine). Restore to 75/75/75/70 after
Group B catches up coverage in follow-up PR. Critical modules
(fairShare, sqliteQuotaStore, enforce, ...) keep local target >=90%.
PRE-hook (before executor dispatch):
- Calls enforceQuotaShare via dynamic import (lazy load, fail-open).
- Returns 429 JSON via buildErrorBody() when decision.kind === 'block' (B25).
- Sets quotaSoftDeprioritize=true when decision.deprioritize=true (B17).
POST-hook (after successful response):
- Calls scheduleRecordConsumption for both streaming and non-streaming paths.
- Fire-and-forget via setImmediate; never blocks the client response (B29).
Both hooks use try/catch outer guards so any unexpected error fails open (B16).
scheduleRecordConsumption() wraps recordConsumption() in setImmediate so it
never adds latency to the client response path. Errors are caught and logged
via pino warn but NEVER propagated to the caller (B29 fail-open contract).
Implements the quota share enforcement gate and consumption recorder:
- enforceQuotaShare(): PRE-request check that returns allow/block/deprioritize
based on fair-share algorithm, saturation signals, and pool allocations.
- recordConsumption(): POST-response tracker that increments per-key counters
for each active plan dimension.
Both functions fail-open per B16/B29: any infra error → allow + warn log.
- compliance-tab-actor-filter.test.tsx: 4 tests verifying actor input
presence, initial fetch has no actor param, re-fetch with actor=X
after typing, and clearFilters does not throw.
- compression-log-namespace.test.tsx: 4 tests verifying that the logs
namespace is used (not settings), no _MISSING_ sentinels, and all 4
required keys are covered.
- compliance.actor / compliance.actorPlaceholder added to pt-BR + en
- logs.compressionLogTitle, logs.compressionLogEmpty, logs.tokens copied
from settings to logs namespace in both locales (original keys kept in
settings to avoid breaking other components)
The component was calling useTranslations("settings") which would cause
key misses once the settings namespace is reorganized. Keys used
(loading, compressionLogTitle, compressionLogEmpty, tokens) are now
sourced from the canonical "logs" namespace.