Skip to content

Technical Requirements

Sharp Ninja edited this page Oct 1, 2026 · 1 revision

Technical Requirements (MCP Server)

TR1.

TR1. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR10.

TR10. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR11.

TR11. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR2.

TR2. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR3.

TR3. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR4.

TR4. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR5.

TR5. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR6.

TR6. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR7.

TR7. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR8.

TR8. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR9.

TR9. — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-AUTH-CACHE-001

Workspace auth token cache service — Provide a shared auth service that resolves the active workspace, validates JWT expiration before reuse, deletes expired cache entries, and persists new identity-server tokens in the workspace. Covered by: FR: FR-AUTH-CACHE-001; TEST: TEST-AUTH-CACHE-001 Status: pending Scope: layer-1+ Acceptance Criteria:

  • The shared auth layer exposes read, write, and delete behavior for workspace-scoped identity tokens.
  • JWT exp is checked locally before a cached token is reused.

TR-DEPS-LOCKSTEP-001

Lockstep families move as single units — Package families (Avalonia core, SharpNinja.McpServer.*, xunit v3 stack, Microsoft.Extensions/ASP.NET Core runtime-aligned set) are upgraded as single units within one gated slice; no new prerelease versions introduced except replacing existing prerelease pins with stable releases. Each slice is one revertable commit validated by a Byrd gate (0 failed, 0 skipped). Covered by: FR: FR-DEPS-UPGRADE-001 Status: pending Scope: layer-1+

TR-E1-001

TR-E1-001 — Placeholder requirement backfilled for TODO link TR-E1-001. Status: pending Scope: layer-1+

TR-E1-002

TR-E1-002 — Placeholder requirement backfilled for TODO link TR-E1-002. Status: pending Scope: layer-1+

TR-E1-003

TR-E1-003 — Placeholder requirement backfilled for TODO link TR-E1-003. Status: pending Scope: layer-1+

TR-GEN-YAML-001

YAML Generation Test — TR for YAML document generation test Status: pending Scope: layer-1+

TR-MCP-TRIAGE-004

TR-MCP-TRIAGE-004 — Placeholder requirement backfilled for TODO link TR-MCP-TRIAGE-004. Status: pending Scope: layer-1+

TR-RTUI-001

TR-RTUI-001 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-002

TR-RTUI-002 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-003

TR-RTUI-003 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-004

TR-RTUI-004 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-005

TR-RTUI-005 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-006

TR-RTUI-006 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-101

TR-RTUI-101 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-102

TR-RTUI-102 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-103

TR-RTUI-103 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-104

TR-RTUI-104 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-105

TR-RTUI-105 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-106

TR-RTUI-106 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-107

TR-RTUI-107 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-108

TR-RTUI-108 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-109

TR-RTUI-109 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-110

TR-RTUI-110 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-111

TR-RTUI-111 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-112

TR-RTUI-112 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-113

TR-RTUI-113 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-114

TR-RTUI-114 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-115

TR-RTUI-115 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-116

TR-RTUI-116 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-117

TR-RTUI-117 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-118

TR-RTUI-118 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-119

TR-RTUI-119 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-120

TR-RTUI-120 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-121

TR-RTUI-121 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-122

TR-RTUI-122 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-123

TR-RTUI-123 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-124

TR-RTUI-124 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-125

TR-RTUI-125 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-126

TR-RTUI-126 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-127

TR-RTUI-127 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-RTUI-128

TR-RTUI-128 — Placeholder requirement backfilled by DB-FK-001. Status: pending Scope: layer-1+

TR-TEST-001

TR-TEST-001 — Placeholder requirement backfilled for TODO link TR-TEST-001. Status: pending Scope: layer-1+

TR-TEST-DOUBLE-001

NSubstitute-only test doubles — Test projects must use NSubstitute for mocks/substitutes and must not reference or use any other mocking framework. Status: completed Scope: layer-1+ Acceptance Criteria:

  • No source file imports or uses APIs from disallowed mock frameworks.
  • Test project package references include NSubstitute where substitutes are needed and exclude disallowed mock packages.

TR-TRIAGE-ACTIONS-001

Typed triage grouping actions — The Web triage page must call typed McpServer.Client triage endpoints for moving reports to a new group, moving reports to an existing group, and combining multiple groups. Covered by: FR: FR-TRIAGE-002; TEST: TEST-TRIAGE-002 Status: pending Scope: layer-1+

TR-TRIAGE-CLIENT-001

Typed triage client endpoints — Use SharpNinja.McpServer.Client 1.2.0 typed TriageClient endpoints for dashboard, groups, reports, runs, and triage-created TODO queries. Covered by: FR: FR-TRIAGE-001; TEST: TEST-TRIAGE-001 Status: planned Scope: layer-1+ Acceptance Criteria:

  • Direct SharpNinja.McpServer.Client package references are upgraded to 1.2.0.
  • UI queries call TriageClient.GetDashboardAsync, QueryGroupsAsync, GetGroupAsync, GetReportAsync, QueryRunsAsync, GetRunAsync, and QueryCreatedTodosAsync.

TR-VM-CQRS-LAYER-001

Core command layer dependency boundary — Core command layer must not depend on UI.Core, app, Android, Desktop, or platform service interfaces while completing CQRS/ViewModel refactor slices. Covered by: FR: FR-VM-CQRS-ANDROIDVOICE-001, FR-VM-CQRS-EVENTS-001; TEST: TEST-VM-CQRS-FINISH-001 Status: completed Scope: layer-1+

TR-WEB-HYBRID-001

Blazor Hybrid host architecture — Implement the desktop host using a supported .NET Blazor Hybrid project type and factor shared mcp-web startup/UI registration so both ASP.NET Core web and hybrid hosts use the same application surface. Covered by: FR: FR-WEB-001; TEST: TEST-WEB-001 Status: completed Scope: layer-1+ Acceptance Criteria:

  • Hybrid host startup registers the same UI.Core and McpServer.Client-backed services needed by existing pages. (evidence: src/McpServerManager.Web.Hybrid/MauiProgram.cs)
  • Shared web assets and root components are referenced without copying generated build output. (evidence: src/McpServerManager.Web.Hybrid/wwwroot/index.html; src/McpServerManager.Web.Hybrid/McpServerManager.Web.Hybrid.csproj)

TR-WEB-HYBRID-TOOL-001

Nuke web tool pipeline uses hybrid project path — Update the Nuke web tool deploy target so ExecuteDotnetToolPipeline publishes src/McpServerManager.Web.Hybrid/McpServerManager.Web.Hybrid.csproj for the SharpNinja.McpServer.Web package and mcp-web command. Covered by: FR: FR-WEB-HYBRID-TOOL-001; TEST: TEST-WEB-HYBRID-TOOL-001 Status: completed Scope: layer-1+ Acceptance Criteria:

  • DeployWebUiCore references the hybrid project path. (evidence: build/Build.BuildAndDeployTargets.cs:759-761; dotnet build build/Build.csproj --no-restore; build.ps1 UpdateWebUiTool --what-if --skip-version-bump; git diff --check.)
  • Generic UpdateDotnetTool defaults remain Director-oriented unless overridden. (evidence: build/Build.BuildAndDeployTargets.cs:759-761; dotnet build build/Build.csproj --no-restore; build.ps1 UpdateWebUiTool --what-if --skip-version-bump; git diff --check.)

TR-WEB-NAV-001

Shared app shell navigation and workspace reload state — Implement the persistent back button, Ctrl+W workspace picker, workspace change invalidation, and TODO done filter using shared Blazor shell/view-model behavior so Web and Hybrid hosts remain aligned. Covered by: FR: FR-WEB-NAV-001; TEST: TEST-WEB-NAV-001 Status: pending Scope: layer-1+

Clone this wiki locally