Skip to content

Add Observation Workspace - #91

Merged
henter36 merged 3 commits into
mainfrom
feature/observation-workspace
Jul 24, 2026
Merged

Add Observation Workspace#91
henter36 merged 3 commits into
mainfrom
feature/observation-workspace

Conversation

@henter36

@henter36 henter36 commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Summary

  • Adds the Observation Workspace master-detail page for notes with RTL compact cards, server-side filters, responsive desktop/tablet/mobile layout, action bar, tabs, and operational timeline.
  • Adds backend workspace query endpoints under /api/v1/notes that aggregate existing note detail, assignments, corrective actions, attachments, timeline, and server-authoritative allowedActions.
  • Adds reference gap analysis and visual screenshots for desktop, tablet, and mobile.

Architecture

  • Reuses Baseera OperationalNote, NoteAssignment, NoteStatusHistory, CorrectiveAction, Attachment, scope isolation, note-type access, rowVersion concurrency, and AuditLog separation.
  • Does not copy or migrate Prisma, Next.js API routes, auth/session logic, env config, seed data, or reference migrations.
  • No DB migration in this phase; resources/decisions/links are explicit empty operational sections until normalized Baseera entities are added.

Reference Usage

  • Rebuilt the reference site-observations and site-profile UX patterns: compact cards, filter placement, selected-card treatment, management/action bar, tabs, timeline density, and RTL spacing.
  • Adapted styling to Baseera CSS tokens and existing Vite/React architecture.

Screenshots

  • docs/screenshots/observation-workspace-desktop.png
  • docs/screenshots/observation-workspace-tablet.png
  • docs/screenshots/observation-workspace-mobile.png

Verification

  • dotnet build src/backend/Baseera.slnx: passed, existing warnings only.
  • dotnet test src/backend/Baseera.slnx: unit tests passed 676; integration suite skipped 147 by current project configuration.
  • npm run lint: passed, existing Fast Refresh warnings in unrelated files.
  • npm run typecheck: passed.
  • npm run test: passed 46 files, 221 tests.
  • npm run build: passed with non-secret placeholder Entra env values; Vite emitted existing large chunk warning.
  • git diff --check: passed.

Notes / Remaining Work

  • Explicit dotnet restore was attempted but hung without output; dotnet build/test both completed restore implicitly and passed.
  • Multi-role assignment engine, normalized resource requests, decision records, note links, and expanded Resolved/Verified/Closed states remain future database/model work.

Relates #64 #65 #66 #67 #68 #69 #70 #71 #72 #73 #74 #75 #76 #77 #78 #79 #80 #81 #82 #83 #84 #85

Summary by Sourcery

Introduce a unified Observation Workspace master-detail experience for notes, backed by new workspace aggregation APIs and query services, and wire it into the main navigation as the primary notes view.

New Features:

  • Add Observation Workspace master-detail page with filters, tabs, timeline, and responsive layout for managing operational notes from a single screen.
  • Expose workspace-specific list and detail note endpoints that aggregate note details, assignments, corrective actions, attachments, and operational timeline into dedicated DTOs.
  • Add server-driven allowedActions metadata to power in-page workflow controls in the workspace action bar.

Enhancements:

  • Style and layout updates to globally support the new workspace, including compact RTL cards and responsive master-detail behavior across desktop, tablet, and mobile.
  • Register the NoteWorkspaceQueryService in the application DI container and integrate it into the existing notes endpoint group.
  • Add unit tests for the Observation Workspace page to verify master-detail behavior and correct propagation of server-side filters.

Documentation:

  • Document the observation reference gap analysis and mapping from the legacy reference UI to the new Baseera Observation Workspace.

Summary by CodeRabbit

  • New Features

    • Added a dedicated observation workspace for browsing and managing notes.
    • Added searchable, filterable, paginated note listings with overdue and action-required filters.
    • Added detailed note views with summaries, assignments, corrective actions, resources, decisions, links, attachments, timelines, and progress indicators.
    • Added workflow action controls based on available permissions.
    • Added responsive layouts for desktop, tablet, and mobile screens.
  • Documentation

    • Added documentation describing the workspace design, capabilities, permissions, risks, and implementation roadmap.
  • Tests

    • Added coverage for workspace rendering, note details, workflow actions, and filtering.

@sourcery-ai

sourcery-ai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Reviewer's Guide

Implements an Observation Workspace master-detail UI for notes and corresponding backend aggregate endpoints, reusing existing note domain/query services while adding workspace-specific DTOs, timeline composition, allowed-actions logic, and responsive RTL styling.

Sequence diagram for loading and acting on a note in the Observation workspace

sequenceDiagram
  actor Operator
  participant ObservationWorkspacePage
  participant ApiClient as api_notes_workspaceDetail
  participant ApiEndpoints as NotesEndpoints
  participant WorkspaceService as NoteWorkspaceQueryService
  participant NoteQueries as NoteQueryService

  Operator->>ObservationWorkspacePage: selectNote(id)
  ObservationWorkspacePage->>ApiClient: workspaceDetail(id)
  ApiClient->>ApiEndpoints: GET /api/v1/notes/{id}/workspace
  ApiEndpoints->>WorkspaceService: GetAsync(id, ct)
  WorkspaceService->>NoteQueries: GetDetailAsync(id, ct)
  WorkspaceService->>NoteQueries: GetAssignmentsAsync(id, ct)
  WorkspaceService->>NoteQueries: GetHistoryAsync(id, ct)
  WorkspaceService-->>ApiEndpoints: NoteWorkspaceDetailDto
  ApiEndpoints-->>ApiClient: NoteWorkspaceDetail
  ApiClient-->>ObservationWorkspacePage: NoteWorkspaceDetail
  ObservationWorkspacePage->>ObservationWorkspacePage: render ActionBar(allowedActions)

  Operator->>ObservationWorkspacePage: click inline action
  ObservationWorkspacePage->>ApiClient: submit(id, reason, rowVersion)
  ObservationWorkspacePage->>ApiClient: startWork(id, reason, rowVersion)
  ObservationWorkspacePage->>ApiClient: submitForVerification(id, reason, rowVersion)
  ObservationWorkspacePage->>ApiClient: returnForRework(id, reason, rowVersion)
  ObservationWorkspacePage->>ApiClient: reopen(id, reason, rowVersion)
  ObservationWorkspacePage->>ApiClient: cancel(id, reason, rowVersion)
  ApiClient->>ApiEndpoints: POST /api/v1/notes/{id}/command
  ObservationWorkspacePage->>ApiClient: workspace(filters)
  ObservationWorkspacePage->>ApiClient: workspaceDetail(id)
Loading

File-Level Changes

Change Details Files
Introduce Observation Workspace master-detail page and route wiring, replacing the previous notes list entry point.
  • Add ObservationWorkspacePage with React Query-based list/detail fetching, server-side filters, action bar wired to existing workflow endpoints, and tabbed sections for summary/actions/assignments/verification/attachments/timeline.
  • Wire navigation so the main Notes nav item and /notes route point to the ObservationWorkspacePage, with an additional explicit /notes/workspace route.
  • Implement responsive master-detail behavior (desktop split, mobile back-to-list flow) and compact observation cards driven by existing note enum helpers and tones.
src/frontend/src/pages/notes/ObservationWorkspacePage.tsx
src/frontend/src/App.tsx
src/frontend/src/pages/notes/ObservationWorkspacePage.test.tsx
Add backend workspace query service and DTOs to aggregate note detail, assignments, corrective actions, attachments, summary, allowed actions, and operational timeline.
  • Define NoteWorkspace DTOs for list, detail, summary, timeline, resources, decisions, and links, aligning closely with the new frontend workspace types.
  • Implement NoteWorkspaceQueryService that wraps existing note and corrective action query services, composes a workspace-specific timeline from status history and corrective actions, computes summary metrics/progress/blocker, and derives allowedActions based on NoteStateMachine and current user permissions.
  • Register INoteWorkspaceQueryService in DI so it can be injected into API endpoints.
src/backend/Baseera.Application/Notes/NoteWorkspaceDtos.cs
src/backend/Baseera.Application/Notes/NoteWorkspaceQueryService.cs
src/backend/Baseera.Application/DependencyInjection/ApplicationServiceCollectionExtensions.cs
Expose workspace-specific note endpoints and client API types for list and detail consumption from the frontend.
  • Add /api/v1/notes/workspace and /api/v1/notes/{id}/workspace endpoints that delegate to INoteWorkspaceQueryService, with NotesView authorization.
  • Extend frontend api client with NoteWorkspace* types and notes.workspace / notes.workspaceDetail methods matching the backend DTOs.
  • Keep existing note list/detail endpoints intact for other pages while making workspace the main UI for notes.
src/backend/Baseera.Api/Endpoints/ApiEndpoints.cs
src/frontend/src/api/client.ts
Implement RTL Observation Workspace styling and layout in global CSS, including cards, filters, grids, tabs, timelines, and responsive behavior.
  • Add .observation-workspace, workspace-* containers, compact observation card styles, meta rows, skeleton loaders, and pagination tweaks.
  • Define sticky detail header, action bar, tab strip, tab panel, summary grid, row cards, and timeline item styles using existing CSS tokens (surface/line/brand/danger/ok/muted).
  • Add responsive breakpoints for desktop/tablet/mobile: grid column ratios, collapsing list, mobile-only back button, filter/input full-width behavior, and override field-hint sizing.
src/frontend/src/index.css
Document the Observation Workspace gap analysis and reference alignment for future model and workflow work.
  • Add observation-reference-gap-analysis.md documenting reference components, Baseera coverage, gaps, design decisions, required data model/APIs/permissions, risks, phased plan, and expected file changes.
  • Clarify which operational sections are placeholders pending normalized entities (resources, decisions, links, multi-role assignments, richer verification/closure states).
docs/observation-reference-gap-analysis.md

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@qodo-code-review

Copy link
Copy Markdown

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@henter36, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 39 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c922fb9e-8d79-47e3-ab79-bcb6c24bb509

📥 Commits

Reviewing files that changed from the base of the PR and between 4fd5f8e and 56b73af.

📒 Files selected for processing (6)
  • docs/observation-reference-gap-analysis.md
  • src/backend/Baseera.Application/Notes/NoteWorkspaceQueryService.cs
  • src/frontend/src/api/client.ts
  • src/frontend/src/index.css
  • src/frontend/src/pages/notes/ObservationWorkspacePage.test.tsx
  • src/frontend/src/pages/notes/ObservationWorkspacePage.tsx
📝 Walkthrough

Walkthrough

Adds a notes workspace with backend list/detail endpoints, aggregated workspace DTOs, server-derived actions and timeline data, a responsive frontend master-detail page, workflow action handling, workspace styling, and interaction tests.

Changes

Observation workspace

Layer / File(s) Summary
Workspace scope and contracts
docs/observation-reference-gap-analysis.md, src/backend/Baseera.Application/Notes/NoteWorkspaceDtos.cs
Documents the workspace design, data model, API, permissions, risks, and phased plan, while defining the aggregated list, detail, summary, timeline, resource, decision, and link DTOs.
Workspace query flow
src/backend/Baseera.Application/Notes/NoteWorkspaceQueryService.cs, src/backend/Baseera.Application/DependencyInjection/ApplicationServiceCollectionExtensions.cs, src/backend/Baseera.Api/Endpoints/ApiEndpoints.cs
Loads note-related workspace data, builds timelines, calculates progress and blockers, derives allowed actions, registers the service, and exposes workspace list/detail routes.
Workspace frontend flow
src/frontend/src/api/client.ts, src/frontend/src/App.tsx, src/frontend/src/pages/notes/ObservationWorkspacePage.tsx, src/frontend/src/index.css
Adds typed workspace API access, routes Notes to the two-pane page, renders filters, detail tabs, workflow actions, and responsive workspace layouts.
Workspace interaction tests
src/frontend/src/pages/notes/ObservationWorkspacePage.test.tsx
Tests note selection and detail rendering, server-provided action buttons, and filter values sent to the workspace API.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant ObservationWorkspacePage
  participant NotesApi
  participant NoteWorkspaceQueryService
  participant Database
  Operator->>ObservationWorkspacePage: open notes workspace and apply filters
  ObservationWorkspacePage->>NotesApi: request workspace list
  NotesApi->>NoteWorkspaceQueryService: ListAsync
  NoteWorkspaceQueryService->>Database: query notes
  Database-->>NoteWorkspaceQueryService: return paged notes
  NoteWorkspaceQueryService-->>NotesApi: return workspace list
  NotesApi-->>ObservationWorkspacePage: render note cards
  Operator->>ObservationWorkspacePage: select a note
  ObservationWorkspacePage->>NotesApi: request workspace detail
  NotesApi->>NoteWorkspaceQueryService: GetAsync
  NoteWorkspaceQueryService->>Database: load related data and history
  Database-->>NoteWorkspaceQueryService: return workspace details
  NoteWorkspaceQueryService-->>NotesApi: return detail and allowed actions
  NotesApi-->>ObservationWorkspacePage: render detail tabs and actions
Loading

Possibly related PRs

  • henter36/Baseera#3 — Introduced the Notes implementation areas extended by the workspace routes and frontend routing.
  • henter36/Baseera#7 — Modified related Notes API routes in the same endpoint surface.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding the Observation Workspace for notes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/observation-workspace

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 3 issues, and left some high level feedback:

  • In NoteWorkspaceSummaryDto construction, WaitingVerification and WaitingClosureApproval are both set to note.Status == NoteStatus.PendingVerification, which makes the two flags indistinguishable; consider separating their conditions or dropping one until a distinct state exists.
  • The frontend action bar renders buttons for REQUEST_RESOURCE (and other non-inline actions) based on allowedActions, but the mutation handler throws for these, resulting in a generic error; either omit such actions from allowedActions until backed by endpoints or route them to dedicated forms/pages to avoid confusing operators.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In `NoteWorkspaceSummaryDto` construction, `WaitingVerification` and `WaitingClosureApproval` are both set to `note.Status == NoteStatus.PendingVerification`, which makes the two flags indistinguishable; consider separating their conditions or dropping one until a distinct state exists.
- The frontend action bar renders buttons for `REQUEST_RESOURCE` (and other non-inline actions) based on `allowedActions`, but the mutation handler throws for these, resulting in a generic error; either omit such actions from `allowedActions` until backed by endpoints or route them to dedicated forms/pages to avoid confusing operators.

## Individual Comments

### Comment 1
<location path="src/backend/Baseera.Application/Notes/NoteWorkspaceQueryService.cs" line_range="67" />
<code_context>
+                openActions,
+                attachmentRows.Count,
+                note.Status == NoteStatus.InProgress && openActions > 0,
+                note.Status == NoteStatus.PendingVerification,
+                note.Status == NoteStatus.PendingVerification,
+                false,
</code_context>
<issue_to_address>
**issue (bug_risk):** Summary flags `WaitingVerification` and `WaitingClosureApproval` are currently identical, which likely misrepresents state.

In `NoteWorkspaceSummaryDto`, both `waitingVerification` and `waitingClosureApproval` are set from `note.Status == NoteStatus.PendingVerification`, making them indistinguishable. This can break or confuse any UI that relies on these flags to represent different states. Please either derive `waitingClosureApproval` from a distinct condition (e.g., additional closure-approval requirement or a separate status) or remove/merge the flag until you have a clearly enforced distinction in the domain model.
</issue_to_address>

### Comment 2
<location path="src/frontend/src/api/client.ts" line_range="252" />
<code_context>
+  descriptionAr?: string | null
+  actorDisplayName?: string | null
+  occurredAtUtc: string
+  tone: string
+}
+
</code_context>
<issue_to_address>
**suggestion:** Use a literal union type for `tone` to align with the constrained server values and catch typos at compile time.

On the backend, `tone` only uses specific values (`"danger"`, `"ok"`, `"info"`, `"muted"`, etc.), but the TS client currently types it as `string`, losing type safety and autocomplete. Consider defining:

```ts
export type NoteWorkspaceTimelineEntry = {
  // ...
  tone: 'danger' | 'ok' | 'info' | 'muted' | 'warn'
}
```

and keeping this union aligned with the server and CSS. Similarly, `allowedActions: string[]` in `NoteWorkspaceDetail` could be a union of known action codes to avoid client/server mismatches.

Suggested implementation:

```typescript
export type NoteWorkspaceTimelineEntry = {
  id: string
  type: string
  titleAr: string
  descriptionAr?: string | null
  actorDisplayName?: string | null
  occurredAtUtc: string
  tone: 'danger' | 'ok' | 'info' | 'muted' | 'warn'
}

export type NoteWorkspaceSummary = {

```

1. Update `NoteWorkspaceDetail` (or the relevant type that exposes `allowedActions: string[]`) to use a string literal union instead of plain `string[]`, e.g.:

```ts
type NoteWorkspaceAllowedAction = 'close' | 'escalate' | 'reopen' | 'assign' // etc., aligned with backend
export type NoteWorkspaceDetail = {
  // ...
  allowedActions: NoteWorkspaceAllowedAction[]
}
```

2. Ensure the union values stay in sync with the backend enum/constant list and any CSS or UI conventions (e.g. if backend adds a new action, update this union accordingly).
</issue_to_address>

### Comment 3
<location path="docs/observation-reference-gap-analysis.md" line_range="187-188" />
<code_context>
+- Collapsed list: `56px`.
+- Card: `min-height: 96px`, `max-height: 132px`, padding `12px`, gap `8px`.
+- Filter bar: `44px` controls, wrapping on tablet.
+- Detail header: sticky top inside workspace, `120-170px` depending badges.
+- Mobile: list first; selecting a note hides list and shows detail full width with a back button.
+
</code_context>
<issue_to_address>
**nitpick (typo):** Add "on" for correct phrasing in "depending badges".

The phrase "`120-170px` depending badges" is missing a preposition; please change it to "`120-170px` depending on badges".

```suggestion
- Filter bar: `44px` controls, wrapping on tablet.
- Detail header: sticky top inside workspace, `120-170px` depending on badges.
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread src/backend/Baseera.Application/Notes/NoteWorkspaceQueryService.cs
Comment thread src/frontend/src/api/client.ts Outdated
Comment thread docs/observation-reference-gap-analysis.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/backend/Baseera.Application/Notes/NoteWorkspaceQueryService.cs`:
- Around line 41-52: Update NoteWorkspaceQueryService’s corrective-action
retrieval before BuildTimelineAsync so the timeline receives all corrective
actions, not the Actions tab’s capped first page. Remove the fixed Page/PageSize
limitation or use the repository’s unbounded/full-list query mechanism, then
pass the complete collection to BuildTimelineAsync while preserving the existing
sorting and cancellation behavior.

In `@src/frontend/src/pages/notes/ObservationWorkspacePage.tsx`:
- Around line 216-223: Add a stable remount key to the WorkspaceDetail element
based on the selected note identifier, so changing selectedId resets
WorkspaceDetail and ActionBar local state before rendering the newly selected
note. Keep the existing props and navigation behavior unchanged.
- Around line 75-81: Update the debounce effect in ObservationWorkspacePage so
it does not reset page on the initial mount, preserving deep-linked pagination
from the URL. Track initial render with the component’s existing lifecycle
state, then apply setPage(1) and setDebouncedSearch only when searchInput
changes after mount; keep the 300ms debounce and cleanup behavior intact.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 5c07e29c-3072-42d6-8e39-06c3d177b8d3

📥 Commits

Reviewing files that changed from the base of the PR and between f94436a and 4fd5f8e.

⛔ Files ignored due to path filters (3)
  • docs/screenshots/observation-workspace-desktop.png is excluded by !**/*.png
  • docs/screenshots/observation-workspace-mobile.png is excluded by !**/*.png
  • docs/screenshots/observation-workspace-tablet.png is excluded by !**/*.png
📒 Files selected for processing (10)
  • docs/observation-reference-gap-analysis.md
  • src/backend/Baseera.Api/Endpoints/ApiEndpoints.cs
  • src/backend/Baseera.Application/DependencyInjection/ApplicationServiceCollectionExtensions.cs
  • src/backend/Baseera.Application/Notes/NoteWorkspaceDtos.cs
  • src/backend/Baseera.Application/Notes/NoteWorkspaceQueryService.cs
  • src/frontend/src/App.tsx
  • src/frontend/src/api/client.ts
  • src/frontend/src/index.css
  • src/frontend/src/pages/notes/ObservationWorkspacePage.test.tsx
  • src/frontend/src/pages/notes/ObservationWorkspacePage.tsx

Comment thread src/backend/Baseera.Application/Notes/NoteWorkspaceQueryService.cs Outdated
Comment thread src/frontend/src/pages/notes/ObservationWorkspacePage.tsx
Comment thread src/frontend/src/pages/notes/ObservationWorkspacePage.tsx
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant