Closed
Conversation
perf(landing): lazy-load below-fold sections + optimize scroll handlers
Memory: add shared OpenAI embeddings rate limiter
… and command:new (M4) Add three new hook capture points to the experiential-capture handler: 1. PreCompact (CRITICAL priority): - Always captures, bypasses rate limiting - Saves buffer snapshot with recent captures and evaluations - Records assistant text count and tool meta count 2. SessionEnd (command:stop): - Captures session summary with full buffer state - Includes recent captures and evaluation history - Records session lifecycle timestamps 3. Session Transition (command:new): - Captures session transition moment - Includes accumulated buffer state from ending session - Records both recent captures and evaluations Also extends MeridiaExperienceRecord with 'kind' field (tool_result | precompact | session_end | session_transition) and adds new MeridiaTraceEvent variants for the new capture types. Refactored handler to use shared helpers: resolveSessionContext(), resolveBufferPath(), loadBuffer().
…reflect MCP tools (M3) - experience_capture: manually record significant experiences to JSONL+SQLite - experience_search: FTS5 search with filters (session, tool, date range, score) - experience_reflect: pattern analysis + reflection prompts on experiential records - Registered in openclaw-tools.ts as Meridia experiential continuity tools
…fail Codex/gateway connect error fastfail
feat(meridia): experience-capture, experience-search, experience-reflect MCP tools (M3)
…ions (M5) - Add src/meridia/reconstitute.ts — core reconstitution engine - Queries Meridia SQLite for recent significant experiences (last 48h) - Formats compact briefing with key experiences, tool patterns, sessions - Configurable token budget (default 2000), lookback hours, min score - Gracefully handles missing SQLite or empty databases - Add meridia-reconstitution bundled hook - Hooks into agent:bootstrap to inject MERIDIA-CONTEXT.md - Reads config from hooks.internal.entries.meridia-reconstitution - Supports maxTokens, lookbackHours, minScore config options - Non-fatal: sessions start normally if reconstitution fails - Add src/meridia/reconstitute.test.ts — unit tests (6 passing) Every new session now starts with experiential continuity awareness.
feat(meridia): expand experiential capture hooks — PreCompact, SessionEnd, command:new (M4)
Slack: add rich messaging payloads
feat(meridia): session reconstitution — morning briefing for new sessions (M5)
Introduces MeridiaDbBackend interface that abstracts away the underlying database implementation. The SQLite-specific code is now isolated in backends/sqlite.ts while consumers can program against the interface. New files: - src/meridia/backend.ts — MeridiaDbBackend interface definition with all DB-agnostic types (RecordQueryResult, SessionSummary, etc.) - src/meridia/backends/sqlite.ts — SQLite implementation (SqliteBackend) - src/meridia/backends/index.ts — Factory: createBackend(), closeBackend() - src/meridia/backends/sqlite.test.ts — 25 tests for the backend interface Changes: - src/meridia/db.ts — Now a backward-compat shim, re-exports types from backend.ts. All functions still work but are marked @deprecated. - src/meridia/query.ts — Types now re-exported from backend.ts for backward compat. Functions still work with DatabaseSync handles. Key design decisions: - Interface is DB-agnostic: no DatabaseSync or SQLite types leak through - getMeta()/setMeta() added for key-value metadata (migration tracking etc.) - SqliteBackend exposes rawDb getter for backward-compat shims only - Factory caches singleton by path, like the existing openMeridiaDb() - All 96 existing tests pass unchanged Future backends (PostgreSQL, MySQL) can implement MeridiaDbBackend with ~1 day of work per backend.
feat(meridia): pluggable DB backend interface (M2.5)
Codex/slack reasoning trace logging
Upstream sync 02 04 26
feat: dashboard fixes
…7) (#202) Implements a comprehensive, configurable scoring system for determining which experiences should become long-term memories. ## New Module: scoring/ - **types.ts**: Full type definitions for factors, breakdowns, configs - **factors.ts**: Five factor scorers (novelty, impact, relational, temporal, userIntent) - **scorer.ts**: Composite scorer with tool/pattern overrides, threshold profiles - **defaults.ts**: Default weights, profiles (standard/aggressive/conservative), overrides - **index.ts**: Barrel exports ## Factor Scoring Model - **Novelty (0.25)**: Detects repetitive vs. new tool usage patterns - **Impact (0.30)**: Classifies tool types (high/medium/low impact), error detection, meta keywords - **Relational (0.15)**: Entity detection via tags, keywords, file paths, URLs - **Temporal (0.10)**: Time-of-day awareness, burst detection, pacing analysis - **User Intent (0.20)**: Explicit marks, manual captures, intent keywords ## Override System - Tool-specific rules: fixedScore, minScore, maxScore, weightMultiplier - Pattern-based rules: error boost, large result detection, tag matching - User intent override: highest priority ## Integration - Updated evaluate.ts with evaluateRelevance() bridge function - Updated config.ts with scoring config resolution (backwards compatible) - Re-exports for convenience: shouldCaptureMultiFactor, isHighValueMultiFactor, etc. - breakdownToTrace() for compact trace event embedding ## Tests - 48 tests across factors.test.ts and scorer.test.ts - All passing
* refactor(tools): create shared tool execution module * refactor(pi): use shared tool execution in pi-tool-definition-adapter * refactor(sdk): use shared tool execution in tool-bridge * test(tools): add tests for shared tool execution module * docs: add unified tool execution coverage gap analysis * fix(auto-reply): use unified tool execution for inline skill commands * docs(tools): document wrapper reliance on runtime adapters * test(auto-reply): add inline skill command error handling tests * docs: update gap analysis with completed fixes * fix: missing stuff
- Consolidate /agents/dashboard and /agent-status into a single route with grid/list layout toggle - Reduce summary cards from 7-8 to 4 primary + conditional stalled/errored alert chips - Declutter agent cards: combined session counts, cron badge in header, no redundant health metric - Fix detail panel on mobile: use Sheet overlay on sub-lg screens instead of hidden panel - Lighten activity timeline: borderless rows for completed items, full Card only for live tasks - Add inline metadata stats (duration, tokens, cost) on timeline rows - Batch consecutive search/code activities into collapsible groups - Remove hardcoded mock data fallback in AgentActivityTab; show empty state instead - Add keyboard navigation (ArrowUp/Down, Escape) and aria-live for screen readers - Group developer actions (Copy ID, Copy JSON) into overflow dropdown menu - Promote session section above generic actions in detail panel - Extract shared format utilities (formatTokenCount, formatRelativeTime, etc.) into lib/format.ts - Improve Lit dashboard: CSS grid metrics, channel badges, right-aligned tokens, hover highlights Co-authored-by: Claude <noreply@anthropic.com>
Evaluates the original Meridia V2 architecture proposal against the actual codebase state and existing architecture docs (ARCH.md, COMPONENT-MAP.md, 7 component deep-dives). Produces a refined plan that builds on the designed 14-component system rather than reinventing it. Key refinements over the original proposal: - Two-pass evaluation (cheap gate, expensive phenomenology only on captured events) instead of full LLM extraction on every tool result - Compaction-based graph sync with session-end mini-compaction instead of per-event Graphiti writes - Vector search adapter interface (Graphiti vector first, pgvector optional) instead of hard PostgreSQL dependency - Includes missing components (normalizer, gates, sanitization) the original proposal omitted - Migrates to ExperienceKit type from COMPONENT-MAP rather than extending MeridiaExperienceRecord - 5-phase implementation plan with dependency ordering https://claude.ai/code/session_01Ko4xrCYytJBNW5VAxzfemE
…l, and reconstitution
Implements the Meridia V2 plan across all 14 components from COMPONENT-MAP.md:
**New modules (26 files):**
- event/normalizer: Component 1 — typed MeridiaEvent envelopes from hook payloads
- gates/budget: Component 2 — rate limits and capture budgets (extracted from hook)
- phenomenology/{taxonomy,prompt,heuristic,extractor}: Component 4 — two-pass
phenomenological extraction with controlled vocabularies (17 emotions, 5 engagement
qualities, 12 texture metaphors, 5 sensory channels from experiential-engine docs)
- artifacts/collector: Component 5 — file/link/media reference extraction
- kit/{builder,resolver}: Component 6 + Phase 5 — ExperienceKit assembly and
meridia://<id> URI resolution
- sanitize/redact: Component 12 — secret redaction and payload truncation
- retrieve/{intent,ranker,hybrid,vector-adapter}: Component 10 — hybrid retrieval
with blended ranking (significance, recency, diversity, source score)
- reconstitution/{engine,pack-builder}: Component 11 — structured ReconstitutionPack
replacing bullet-list format with narrative, anchors, uncertainties, approach guidance
- fanout/dispatcher: Component 9 — fire-and-forget async dispatch with error isolation
**Updated existing files:**
- types.ts: Added Phenomenology, CaptureDecision, ArtifactRef, ExperienceKit,
ReconstitutionPack types; added phenomenology field to legacy record
- hooks/experiential-capture: Uses normalizer, gates, phenomenology extractor,
artifact collector, kit builder, and sanitizer
- hooks/meridia-reconstitution: Uses enhanced reconstitution engine with legacy fallback
- db/backends/sqlite.ts: Schema v2 migration (phenomenology columns), updated FTS
searchable text, v1→v2 migration is idempotent
- meridia-search-adapter: Implements readFile() for meridia:// URI resolution,
includes phenomenology in search snippets
- tools: Fixed pre-existing async/await issues across all three experience tools
- tests: Fixed async/await in sqlite and reflect tool tests, updated schema assertions
https://claude.ai/code/session_01Ko4xrCYytJBNW5VAxzfemE
* feat: added work-queue workflow workers and a worker manager, integrate w/cron * fix: address 12 logic flaws in workflow engine, adapter, phases, and cron types - engine: capture phase before clobbering in catch handler (#1) - engine: remove dead `state.plan ?? plan` fallback (#2) - engine: mark workflow failed when all execution nodes fail (#6) - adapter: fix retry count off-by-one (attemptNumber vs retryCount) (#3) - adapter: clean up abort listener in sleep on timeout (#10) - discover: fix batch/entries index mismatch when spawns fail (#4) - execute: add cycle detection to topological sort (#5) - review: add autoApproved flag to distinguish fallback approvals (#7) - plan: add comment clarifying sessionKey reuse across repair attempts (#8) - decompose: remove unused model/maxPhases/maxTasksPerPhase/maxSubtasksPerTask opts (#9) - types: add autoApproved to ReviewIteration (#7) - cron/state: use discriminated union for CronEvent (CronJobEvent | CronHealthEvent) (#12) - tests: add WorkflowWorkerAdapter test suite (8 tests) (#11) https://claude.ai/code/session_01L8kquwpmUh5zmU9S4MHgPu --------- Co-authored-by: Claude <noreply@anthropic.com>
…aSearchAdapter Fixes P1 and P2 issues from code review: - search() now properly awaits backend.searchRecords() (was calling .map on a Promise) - status() now async with await on backend.getStats() (was reading undefined properties)
Resolved conflicts by accepting origin/main versions which include: - Type-safe discriminated unions for CronEvent (job vs health events) - Better workflow execution semantics (attemptNumber vs retryCount) - Improved error handling and phase tracking in workflow engine - Bug fixes for discovery question-to-result alignment - Cycle detection in topological sort - Auto-approval tracking in review iterations All conflicts resolved in favor of main's improvements. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…ntial backoff - RetryableError: composable error boundary with visual retry feedback - useRetry: React hook with exponential backoff, jitter, countdown timer - withRetry: standalone retry utility for non-React contexts - Comprehensive test suite with 10 test cases - Card and inline variants, auto-retry option, cancel/reset controls Closes P4 Error Handling UX: retry patterns for failed operations
- GlobalSearchDialog: full-featured search overlay powered by useGlobalSearch hook - Category filter chips for narrowing results by type (agents, sessions, goals, etc.) - Recent searches persisted to localStorage - Keyboard shortcut Cmd+Shift+F / Ctrl+Shift+F to open - Search button added to sidebar with keyboard hint - Score-based ranking with grouped category results - Comprehensive test suite for keyboard shortcut hook Wires up the existing useGlobalSearch hook into a production-ready UI. Addresses P4 Search & Filtering from BACKLOG.md.
* [autodev] Command Palette: Add nested sub-command menus and category filtering
Task 1 - Nested/sub-command menus:
- Replaced single page state with a page stack (PageEntry[]) for arbitrary nesting depth
- Added per-agent sub-menus: Agents > {AgentName} > View Details/Chat/Sessions/Edit Config
- Multi-level breadcrumb navigation with clickable intermediate crumbs
- Back navigation via Backspace (empty search) or clicking breadcrumb entries
- Agent sub-pages show agent info (role, status, current task)
Task 2 - Category filtering in search:
- Added filter chips bar that appears when searching on root page
- Categories: All, Quick Actions, Navigation, Agents, Appearance, Settings
- Active filter highlighted with primary color, dismissible via X button
- When filtering, shows all items in that category (not just top 3/5)
- Appearance and Settings items surface in search results when filtering
* [autodev] Mark command palette nested menus and category filtering as complete
* [autodev] Add progress indicators for long-running operations New components: - useAsyncOperation hook: State machine (idle → running → success/error) with progress tracking, auto-reset, and callbacks - OperationProgress component: Visual indicator with three variants (inline, banner, compact) showing progress bar, step info, error/retry Features: - Step-by-step progress reporting (current/total/message/percent) - Indeterminate progress bar for operations without step count - Auto-reset to idle after configurable timeout - Error state with retry button - Success state with dismiss option - Three display variants: inline (card), banner (full-width), compact (single-line) Test coverage: 10 tests (all passing) covering state transitions, progress tracking, auto-reset, callbacks, error handling Barrel exports added to composed/index.ts and hooks/index.ts * [autodev] Mark progress indicators task as complete
…cron types (openclaw#217) - engine: capture phase before clobbering in catch handler (#1) - engine: remove dead `state.plan ?? plan` fallback (#2) - engine: mark workflow failed when all execution nodes fail (#6) - adapter: fix retry count off-by-one (attemptNumber vs retryCount) (#3) - adapter: clean up abort listener in sleep on timeout (#10) - discover: fix batch/entries index mismatch when spawns fail (#4) - execute: add cycle detection to topological sort (#5) - review: add autoApproved flag to distinguish fallback approvals (#7) - plan: add comment clarifying sessionKey reuse across repair attempts (#8) - decompose: remove unused model/maxPhases/maxTasksPerPhase/maxSubtasksPerTask opts (#9) - types: add autoApproved to ReviewIteration (#7) - cron/state: use discriminated union for CronEvent (CronJobEvent | CronHealthEvent) (#12) - tests: add WorkflowWorkerAdapter test suite (8 tests) (#11) https://claude.ai/code/session_01L8kquwpmUh5zmU9S4MHgPu Co-authored-by: Claude <noreply@anthropic.com>
* feat: event system for meridia * fix: archive buffered moments after session summary to prevent inflation Buffered moments were never transitioned after being consumed by session-capture, causing them to be re-counted on every subsequent /new command. Now transitions them to 'archived' after saving the summary. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add configurable subsystem debug log suppression * docs: add changelog entry and test script for suppressSubsystemDebugLogs * docs: add implementation summary * feat(meridia): multi-factor memory relevance scoring system Implement a comprehensive scoring system that evaluates whether experiences should become long-term memories based on five weighted factors: - **Novelty**: Is this new information or repetition? - **Impact**: Does this change understanding, behavior, or system state? - **Relational**: Does this connect to known entities/people/projects? - **Temporal**: Is this time-sensitive or evergreen? - **User Intent**: Was this explicitly marked as important? Features: - Configurable weights for each factor (normalized to sum to 1.0) - Named threshold profiles: balanced, aggressive, conservative, minimal - Override rules for specific tools (glob-pattern matching) - evaluateMemoryRelevance() as primary entry point - shouldCapture(), shouldPersistToGraph(), shouldUseLlmEval() helpers - Backward-compatible evaluateHeuristic() now delegates to scoring system - New evaluateHeuristicDetailed() returns full scoring breakdown - 37 comprehensive tests covering all factors and edge cases Files: - extensions/meridia/src/meridia/scoring/types.ts - extensions/meridia/src/meridia/scoring/config.ts - extensions/meridia/src/meridia/scoring/factors.ts - extensions/meridia/src/meridia/scoring/index.ts - extensions/meridia/src/meridia/scoring/scoring.test.ts - extensions/meridia/src/meridia/evaluate.ts (updated) * SDK runner: close message processing parity gaps with Pi embedded agent - Gap 1 (HIGH): Add streaming block replies during the event loop via blockReplyBreak/blockReplyChunking params. Supports "message_end" (flush at message boundaries) and "text_end" (per-chunk) modes, matching Pi embedded's streaming delivery. Final onBlockReply is skipped when streaming was active to avoid duplicate delivery. - Gap 2 (MEDIUM): Add onReasoningStream callback support. Extract thinking/reasoning text from SDK events classified as "system" and emit via the new callback, enabling reasoning display in UIs. - Gap 3 (MEDIUM): Reset chunks/assistantSoFar at message boundaries so onPartialReply reflects only the current message, not accumulated text from all prior turns. - Gap 5 (LOW-MED): Add enforceFinalTag support. When enabled, only content inside <final>...</final> tags is returned, preventing intermediate narration leakage from non-Claude models. Adds shared extractFinalTagContent() utility. - Gap 6 (LOW-MED): Map all payload fields (mediaUrl, mediaUrls, replyToId, replyToTag, replyToCurrent, audioAsVoice) in adaptSdkResultToPiResult to prevent silent field loss. Wire all new params through the full chain: executor.ts → AgentRuntimeRunParams → sdk-agent-runtime → sdk-runner-adapter → sdk-runner https://claude.ai/code/session_013FRzxnpzCwncubghL7GGCF * additional merge conflict resolution --------- Co-authored-by: Claude <noreply@anthropic.com>
* feat: meridian memory clasiffication * fix: minor safety check around config missing
…ross 13 files) (#207) Cover all new V2 modules: event normalizer, gates/budget, sanitize/redact, phenomenology (taxonomy, prompt, heuristic), artifacts collector, kit builder and resolver, retrieve (intent, ranker, vector-adapter), reconstitution pack-builder, and fanout dispatcher. Export renderKit from resolver for testability. https://claude.ai/code/session_01Ko4xrCYytJBNW5VAxzfemE Co-authored-by: Claude <noreply@anthropic.com>
* feat: phase 0 to 3 for meridia enhancements/refactoring * feat(meridia): phase 2 refactoring — sanitize, migrations, fanout, adapter tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: clean up stray brace and unused imports from merge resolution Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(meridia): use readPositiveNumber for compaction/capture thresholds readNumber accepts 0/negative values, but scheduleIntervalHours, minExperiencesForCompaction, maxPerHour, minIntervalMs etc. must be positive. Previously, the old local helpers enforced > 0; this was lost when readNumber was extracted to event.ts. Switch to readPositiveNumber which falls back to defaults for non-positive values. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add configurable subsystem debug log suppression * docs: add changelog entry and test script for suppressSubsystemDebugLogs * docs: add implementation summary * feat(meridia): multi-factor memory relevance scoring system Implement a comprehensive scoring system that evaluates whether experiences should become long-term memories based on five weighted factors: - **Novelty**: Is this new information or repetition? - **Impact**: Does this change understanding, behavior, or system state? - **Relational**: Does this connect to known entities/people/projects? - **Temporal**: Is this time-sensitive or evergreen? - **User Intent**: Was this explicitly marked as important? Features: - Configurable weights for each factor (normalized to sum to 1.0) - Named threshold profiles: balanced, aggressive, conservative, minimal - Override rules for specific tools (glob-pattern matching) - evaluateMemoryRelevance() as primary entry point - shouldCapture(), shouldPersistToGraph(), shouldUseLlmEval() helpers - Backward-compatible evaluateHeuristic() now delegates to scoring system - New evaluateHeuristicDetailed() returns full scoring breakdown - 37 comprehensive tests covering all factors and edge cases Files: - extensions/meridia/src/meridia/scoring/types.ts - extensions/meridia/src/meridia/scoring/config.ts - extensions/meridia/src/meridia/scoring/factors.ts - extensions/meridia/src/meridia/scoring/index.ts - extensions/meridia/src/meridia/scoring/scoring.test.ts - extensions/meridia/src/meridia/evaluate.ts (updated) * SDK runner: close message processing parity gaps with Pi embedded agent - Gap 1 (HIGH): Add streaming block replies during the event loop via blockReplyBreak/blockReplyChunking params. Supports "message_end" (flush at message boundaries) and "text_end" (per-chunk) modes, matching Pi embedded's streaming delivery. Final onBlockReply is skipped when streaming was active to avoid duplicate delivery. - Gap 2 (MEDIUM): Add onReasoningStream callback support. Extract thinking/reasoning text from SDK events classified as "system" and emit via the new callback, enabling reasoning display in UIs. - Gap 3 (MEDIUM): Reset chunks/assistantSoFar at message boundaries so onPartialReply reflects only the current message, not accumulated text from all prior turns. - Gap 5 (LOW-MED): Add enforceFinalTag support. When enabled, only content inside <final>...</final> tags is returned, preventing intermediate narration leakage from non-Claude models. Adds shared extractFinalTagContent() utility. - Gap 6 (LOW-MED): Map all payload fields (mediaUrl, mediaUrls, replyToId, replyToTag, replyToCurrent, audioAsVoice) in adaptSdkResultToPiResult to prevent silent field loss. Wire all new params through the full chain: executor.ts → AgentRuntimeRunParams → sdk-agent-runtime → sdk-runner-adapter → sdk-runner https://claude.ai/code/session_013FRzxnpzCwncubghL7GGCF * additional merge conflict resolution * Merge origin/main into claude/review-message-processing-djLHt Resolve merge conflicts in meridia scoring module by taking origin/main's refactored multi-factor scoring system (scorer.ts, defaults.ts, updated types/factors/index). Remove HEAD-only scoring/config.ts and scoring.test.ts that used the old API (origin/main has proper tests in factors.test.ts and scorer.test.ts). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(meridia): add missing awaits in CLI + fix sanitizeForPersistence JSON corruption --------- Co-authored-by: Claude <noreply@anthropic.com>
Audit the current apps/web/ codebase against the original 15-item UX improvement report. Removes 2 items already implemented (ErrorState component, home panel hierarchy), identifies 5 bugs (fake AI response in production, missing error boundary, null safety gap, demo delays, loading state inconsistency), and adds 3 new improvement items (ErrorState adoption, skeleton loading gaps, consistent back nav). https://claude.ai/code/session_01NsfuXFnsTT5iq9ENWEb95u
dgarson
added a commit
that referenced
this pull request
Feb 22, 2026
…s, focus-visible AgentPulseMonitor (view #17): - Mission control real-time view for all active agents - Agent cards with sparkline activity graph + status dot + pulse animation - Activity feed with role=log, aria-live=polite for screen readers - Right-side detail panel: stats grid, bar chart, relationship map, model badge - Live mode: simulated event stream every 3.2s, pause/resume toggle - Status filter chips (active/busy/idle/sleeping/error) - Full keyboard nav: all interactive elements are <button> with focus-visible rings - Added to navItems + SKELETON_MAP + lazy import in App.tsx A11y fixes (WCAG 2.1 AA): - AgentBuilderWizard: added htmlFor+id to Agent Name + Role & Responsibilities fields - CronScheduleBuilder: added htmlFor+id to Job Name; sr-only label + aria-label on custom cron input - SessionExplorer: converted <span onClick> to <button type=button> with proper aria-label + focus-visible ring
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.