Files
SlipItIn/openwiki/.run.json
Tim Krampitz de852aada7
Some checks failed
Build / build (pull_request) Has been cancelled
Update OpenWiki documentation and claims
Reference AGENTS.md in CLAUDE.md and record verification claims for
the architecture overview and operations runbook.

Signed-off-by: Tim Krampitz <Tim.Krampitz@live.com>
2026-09-07 17:53:25 +02:00

311 lines
20 KiB
JSON

{
"schemaVersion": 1,
"runId": "de56dc0b-8ceb-45d0-9c4f-113907ab922b",
"mode": "update",
"phase": "generating",
"startedAt": "2026-09-07T15:04:46.288Z",
"language": "en",
"languageChanged": false,
"requiredRewritePages": [],
"initialPages": [
"/openwiki/architecture/overview.md",
"/openwiki/domain/game-mechanics.md",
"/openwiki/operations/runbook.md",
"/openwiki/quickstart.md",
"/openwiki/source-map.md",
"/openwiki/workflows/slip-and-challenge.md"
],
"sourceFingerprint": "sha256:a935b1e20566bc059db689b6f75ad2c2db50d64a9e5559dfb7ad6b9e4cb6ae40",
"targetGitHead": "118660a207d4b2ec7cb3285db11ccde81ce13300",
"actor": {
"producerActor": "openwiki/0.5.0",
"metadataModel": "xiaomi/mimo-v2.5"
},
"previousLastUpdate": {
"updatedAt": "2026-08-08T18:09:49.042Z",
"command": "update",
"gitHead": "37616a93166c2ac0a46eedab276164f811043f4e",
"model": "gemini-3.6-flash",
"status": "complete",
"language": "en"
},
"baseGitHead": "37616a93166c2ac0a46eedab276164f811043f4e",
"wikiGoal": "A code wiki for this local repository. Prioritize a concise quickstart, architecture overview, source map, key workflows, domain concepts, operations/runbook notes, testing guidance, and integration points. Inspect git history to understand reasoning behind code changes and the progression of the repository. Keep pages grounded in the repository structure and recent code changes. Prefer practical navigation for engineers over generic summaries.",
"beforeContentSnapshot": "2816cb59e100a0ec521ecb1654aa824838df3f71c939ba722c180d3c6e6816aa",
"preparedWiki": {
"generatedProvenance": [
{
"page": "/openwiki/architecture/overview.md",
"bodyHash": "d4fe279bc8701182ae7f9c4e9ee9a639d2575470536d7125e4f3af5dae4732e4"
},
{
"page": "/openwiki/domain/game-mechanics.md",
"bodyHash": "714719e965a255b23a8507dfc96f4f0e8d189e00f6071eedc2e026e685d0885a"
},
{
"page": "/openwiki/operations/runbook.md",
"bodyHash": "13259c850ae33d991dd5f4ee5ea517ef7478a26c87b2b6f0a329120a58a25e88"
},
{
"page": "/openwiki/quickstart.md",
"bodyHash": "f868fb2b49669edd9d9ed13e97fec306890de80ae3bf45ae882b58dc0b7fec55"
},
{
"page": "/openwiki/source-map.md",
"bodyHash": "8e12954091edb0f7b92dea83e7f791903460f025a1f120f5f0f1a9af06bc2ab3"
},
{
"page": "/openwiki/workflows/slip-and-challenge.md",
"bodyHash": "b6ec60e2780bbecbf62a22b971decd6e9a0fb5aad1bb237197046e49a88b43a9"
}
]
},
"plan": {
"pages": [
{
"id": "31976868-43dd-44ce-87ce-70d460077c8a",
"path": "/openwiki/architecture/overview.md",
"title": "System Architecture & Security Overview",
"purpose": "Detailed technical architecture covering .NET Aspire orchestration, ASP.NET Core SignalR hub, .NET MAUI MVVM client layer, WeakReferenceMessenger event routing, dual-layer local storage, concurrency safety via IDbContextFactory, and data privacy isolation model.",
"seedPaths": [
"SlipItIn.AppHost/AppHost.cs",
"SlipItIn.Server/Data/SlipItInDbContext.cs",
"SlipItIn.Server/Hubs/GameHub.cs",
"SlipItIn.Server/Program.cs",
"SlipItIn.Server/Services/GameService.cs",
"SlipItIn.ServiceDefaults/Extensions.cs",
"SlipItIn/MauiProgram.cs",
"SlipItIn/Services/GameStateService.cs",
"SlipItIn/Services/Interfaces/IGameStateService.cs",
"SlipItIn/Services/Interfaces/ISignalRService.cs",
"SlipItIn/Services/LocalStorageService.cs",
"SlipItIn/Services/SignalRService.cs"
],
"relatedPages": [
"/openwiki/domain/game-mechanics.md",
"/openwiki/operations/runbook.md",
"/openwiki/quickstart.md",
"/openwiki/source-map.md",
"/openwiki/workflows/slip-and-challenge.md"
],
"instructions": [
"Ensure all Mermaid diagrams follow mermaid-diagrams skill rules: no semicolons or pipes in labels, no unescaped angle brackets, short labels, captions below each diagram.",
"Keep the Concurrency Safety: IDbContextFactory section — it explains the thread-safe pattern used in GameHub, AuthController, and GameService.",
"Keep the Data Privacy Isolation Model section — it explains GameStateDto (public, no card text) vs PlayerHandDto (private, unicast).",
"Keep the Guidance section with extension points and invariants.",
"Keep the frontmatter type: Architecture and openwiki metadata.",
"Keep the mermaid graph TD diagram for MAUI Client Architecture — it accurately shows Views, ViewModels, Messaging Layer, and Service Layer.",
"Keep the mermaid sequence diagram for Real-Time Auth Flow — it accurately shows the auth and SignalR connection flow.",
"Language: English.",
"Verify the .NET Aspire Orchestration Model section matches AppHost.cs: AddPostgres('pgsql').AddDatabase('postgresdb'), AddProject<Projects.SlipItIn_Server>('server'), AddProject<Projects.SlipItIn>('slipitin').",
"Verify the ASP.NET Core Backend Architecture section matches Program.cs: AddNpgsqlDataSource, AddDbContextFactory, JWT authentication with OnMessageReceived for SignalR query parameter, AddSignalR, CORS AllowAll, MapHub<GameHub>('/hubs/game'), db.Database.Migrate() and DbSeeder.SeedAsync().",
"Verify the JWT Authentication & SignalR Security section matches Program.cs: JWT key >= 32 chars, issuer/audience defaults, OnTokenValidated checking user existence and active status.",
"Verify the MAUI Client Architecture section matches MauiProgram.cs: Singletons (IAppConfigurationService, ILocalStorageService, IAuthSessionService, IApiService, ISignalRService, IGameStateService, LobbyViewModel, GameBoardViewModel), Transients (LoginViewModel, RegisterViewModel)."
],
"status": "complete",
"completedBy": "openwiki/0.5.0"
},
{
"id": "c114a18b-05fe-4a65-a9aa-80e960ec56f3",
"path": "/openwiki/domain/game-mechanics.md",
"title": "Game Domain & State Models",
"purpose": "Detailed domain model covering all entities (User, Game, Player, Phrase, GameRound, PlayerCard, SlipChallenge), state machines (GameStatus, RoundStatus, ChallengeStatus), client offline action queue model (QueuedGameAction), DTOs and data privacy.",
"seedPaths": [
"SlipItIn.Server/Data/SlipItInDbContext.cs",
"SlipItIn.Shared/DTOs/AuthDtos.cs",
"SlipItIn.Shared/DTOs/GameStateDto.cs",
"SlipItIn.Shared/Models/Game.cs",
"SlipItIn.Shared/Models/GameRound.cs",
"SlipItIn.Shared/Models/Phrase.cs",
"SlipItIn.Shared/Models/Player.cs",
"SlipItIn.Shared/Models/PlayerCard.cs",
"SlipItIn.Shared/Models/SlipChallenge.cs",
"SlipItIn.Shared/Models/User.cs",
"SlipItIn/Models/QueuedGameAction.cs"
],
"relatedPages": [
"/openwiki/architecture/overview.md",
"/openwiki/operations/runbook.md",
"/openwiki/quickstart.md",
"/openwiki/source-map.md",
"/openwiki/workflows/slip-and-challenge.md"
],
"instructions": [
"Ensure all Mermaid diagrams follow mermaid-diagrams skill rules: no semicolons or pipes in labels, no unescaped angle brackets, short labels, captions below each diagram.",
"Keep the ERD (mermaid erDiagram) as it accurately reflects the database schema defined in SlipItInDbContext.cs with correct entity relationships.",
"Keep the GameStatus state diagram — it accurately shows Lobby -> InProgress -> Completed/Cancelled transitions.",
"Keep the Guidance section with invariants: PlayerCard.IsUsed transitions from false to true, QueuedGameAction.ArgumentsJson must match GameHub method parameters.",
"Keep the RoundStatus state diagram — it accurately shows Waiting -> Active -> Resolving -> Active/Completed transitions.",
"Keep the frontmatter type: Domain Model and openwiki metadata.",
"Language: English.",
"Verify QueuedGameAction model description matches SlipItIn/Models/QueuedGameAction.cs.",
"Verify all entity properties match the current code in SlipItIn.Shared/Models/. Key entities: User (Id, Username, Email, PasswordHash, IsActive), Game (Id, LobbyCode, HostId, Status, MaxPlayers=8, RoundDurationSeconds=45), Player (Id, UserId, GameId, Score, SuccessfulSlips, FailedSlips, IsReady, ConnectionId), Phrase (Id, Text, CreatorId, IsActive), GameRound (Id, GameId, RoundNumber, Status), PlayerCard (Id, PlayerId, PhraseId, GameRoundId, IsUsed), SlipChallenge (Id, GameRoundId, ChallengingPlayerId, TargetPlayerId, TargetCardId, Status).",
"Verify the DTO table is accurate: GameStateDto (public, broadcast to group), PlayerHandDto (private, unicast to player), SlipChallengeDto (notification), AuthResponseDto (JWT token)."
],
"status": "skipped"
},
{
"id": "fb04710f-8787-4249-a62e-5075a4284017",
"path": "/openwiki/operations/runbook.md",
"title": "Operations, Environment Setup & Testing Guidance",
"purpose": "Operational guide for local development setup, .NET Aspire startup, EF Core PostgreSQL migrations, JWT configuration, and testing verification scenarios. Enhanced with actual test project documentation.",
"seedPaths": [
".github/workflows/build.yml",
"SlipItIn.AppHost/AppHost.cs",
"SlipItIn.Server.Tests/AuthControllerTests.cs",
"SlipItIn.Server.Tests/DbSeederTests.cs",
"SlipItIn.Server.Tests/GameHubTests.cs",
"SlipItIn.Server.Tests/GameServiceTests.cs",
"SlipItIn.Server.Tests/TestDbHelper.cs",
"SlipItIn.Server/Program.cs",
"SlipItIn.Server/appsettings.Development.json",
"SlipItIn.Server/appsettings.json",
"SlipItIn/MauiProgram.cs"
],
"relatedPages": [
"/openwiki/architecture/overview.md",
"/openwiki/domain/game-mechanics.md",
"/openwiki/quickstart.md",
"/openwiki/source-map.md",
"/openwiki/workflows/slip-and-challenge.md"
],
"instructions": [
"Add or enhance the Testing section to document the actual test project structure: SlipItIn.Server.Tests uses xUnit, Moq, EF Core InMemory database. Key test files: TestDbHelper.cs (creates isolated InMemory DbContexts, seeds users and games), GameServiceTests.cs (tests business logic), GameHubTests.cs (tests SignalR hub with mocked dependencies), AuthControllerTests.cs (tests registration/login), DbSeederTests.cs (tests database seeding).",
"Ensure all Mermaid diagrams (if any) follow mermaid-diagrams skill rules.",
"Keep the 6 testing verification scenarios (JWT Authentication, Player Access, MVVM Messaging, Offline Queueing, Dual-Layer Storage, Concurrency) — they are accurate and useful.",
"Keep the Configuration & Secrets Management section — it accurately describes Jwt:Key (>= 32 chars), Jwt:Issuer, Jwt:Audience, Jwt:ExpirationMinutes (1440 default), ConnectionStrings:postgresdb.",
"Keep the Entity Framework Core Migrations section — it accurately describes dotnet ef migrations add and dotnet ef database update commands.",
"Keep the Guidance section with invariants: always run migrations using SlipItIn.Server as both project and startup-project.",
"Keep the Local Development Environment Setup section — it accurately describes .NET 10 SDK, Docker/Podman, workload install, and Aspire startup command.",
"Keep the frontmatter type: Runbook and openwiki metadata.",
"Language: English.",
"Verify the build command matches .github/workflows/build.yml: dotnet build SlipItIn.slnx (Release for server stack, Debug for MAUI), dotnet test SlipItIn.Server.Tests."
],
"status": "complete",
"completedBy": "openwiki/0.5.0"
},
{
"id": "9b660423-d759-41a0-8025-89aaf509ffc3",
"path": "/openwiki/source-map.md",
"title": "Source Code Map & Navigation Directory",
"purpose": "Practical navigation guide mapping every source file across projects to system domains, responsibilities, and project structure. Used by engineers and agents to quickly locate code.",
"seedPaths": [
".github/workflows/build.yml",
".github/workflows/openwiki-update.yml",
"SlipItIn.AppHost/AppHost.cs",
"SlipItIn.Server/Controllers/",
"SlipItIn.Server/Data/",
"SlipItIn.Server/Hubs/",
"SlipItIn.Server/Migrations/",
"SlipItIn.Server/Program.cs",
"SlipItIn.Server/Services/",
"SlipItIn.Shared/DTOs/",
"SlipItIn.Shared/Models/",
"SlipItIn.slnx",
"SlipItIn/MauiProgram.cs",
"SlipItIn/Services/",
"SlipItIn/Services/Interfaces/",
"SlipItIn/ViewModels/",
"SlipItIn/Views/"
],
"relatedPages": [
"/openwiki/architecture/overview.md",
"/openwiki/domain/game-mechanics.md",
"/openwiki/operations/runbook.md",
"/openwiki/quickstart.md",
"/openwiki/workflows/slip-and-challenge.md"
],
"instructions": [
"Ensure all file descriptions are accurate and up-to-date. Verify that all file paths and class names match the current codebase.",
"Keep the Automation & CI/CD section referencing .github/workflows/ — it is accurate.",
"Keep the Solution Projects section (SlipItIn.slnx) accurate — it lists 6 projects.",
"Keep the directory and source file map for each project (AppHost, ServiceDefaults, Server, Shared, Client).",
"Keep the existing structure and formatting — do not change the document organization.",
"Keep the frontmatter type: Reference and openwiki metadata.",
"Language: English.",
"Remove the Agents/ directory section entirely — this directory no longer exists in the repository. Also remove all references to Agents/Architecture.md and Agents/ProjectPlan.md throughout the document.",
"Verify the MAUI Client section references all current files: MauiProgram.cs, Services/ (SignalRService, GameStateService, LocalStorageService, AuthSessionService, ApiService, AppConfigurationService), ViewModels/ (BaseViewModel, LoginViewModel, RegisterViewModel, LobbyViewModel, GameBoardViewModel), Views/ (LoginPage, RegisterPage, LobbyPage, GameBoardPage, ChallengeNotificationOverlay), Messages/ (LobbyCreatedMessage, GameStateChangedMessage, GameStartedMessage, PlayerHandChangedMessage, ChallengeReceivedMessage, ErrorOccurredMessage, ConnectionStateChangedMessage, SyncStateChangedMessage), Models/ (QueuedGameAction), Infrastructure/ (ServiceHelper)."
],
"status": "pending"
},
{
"id": "51247bfa-2aa0-47d2-9390-81376ea27202",
"path": "/openwiki/workflows/slip-and-challenge.md",
"title": "Slip & Challenge Workflows",
"purpose": "Real-time game loops covering authentication, lobby creation, card dealing, phrase slipping, slip challenging, challenge resolution, offline action queuing, and SignalR hub event reference.",
"seedPaths": [
"SlipItIn.Server/Hubs/GameHub.cs",
"SlipItIn.Server/Services/GameService.cs",
"SlipItIn/Services/GameStateService.cs",
"SlipItIn/Services/Interfaces/IGameStateService.cs",
"SlipItIn/Services/Interfaces/ISignalRService.cs",
"SlipItIn/Services/SignalRService.cs",
"SlipItIn/ViewModels/GameBoardViewModel.cs",
"SlipItIn/ViewModels/LobbyViewModel.cs"
],
"relatedPages": [
"/openwiki/architecture/overview.md",
"/openwiki/domain/game-mechanics.md",
"/openwiki/operations/runbook.md",
"/openwiki/quickstart.md",
"/openwiki/source-map.md"
],
"instructions": [
"Ensure all Mermaid diagrams follow mermaid-diagrams skill rules: no semicolons or pipes in labels, no unescaped angle brackets, short labels, captions below each diagram.",
"Keep the Game Setup & Lobby Workflow text-based flow diagram — it accurately shows the authentication and lobby creation sequence.",
"Keep the Guidance section with invariants: FlushQueuedActionsAsync executes sequentially by CreatedAtUtc, ResolveChallenge throws UnauthorizedAccessException for non-target players.",
"Keep the Phrase Slipping & Offline Queueing Workflow section — it accurately shows the online/offline branching logic.",
"Keep the Slip Challenge & Resolution Workflow section — it accurately shows challenge creation, notification, and resolution with penalty logic.",
"Keep the frontmatter type: Workflow and openwiki metadata.",
"Keep the mermaid sequence diagram for Offline Action Queueing & Reconnection Resync — it accurately shows the offline queue, automatic reconnection, state request, and queued action replay.",
"Keep the mermaid sequence diagram for Slip Challenge & Resolution — it accurately shows the challenger/slipper interaction with GameHub and GameService.",
"Language: English.",
"Verify the SignalR Hub Event Reference table is complete and accurate: LobbyCreated (Caller), PlayerJoined (Group), GameStateUpdated (Group), GameStarted (Group), PlayerHandUpdated (Unicast), SlipSubmitted (Group), SlipChallenged (Group), ChallengeReceived (Unicast), ChallengeResolved (Group), Error (Caller).",
"Verify the workflow descriptions match the current code: StartGame requires host validation, DealCards creates 5 random phrases per player, SubmitSlip sets IsUsed=true, ResolveChallenge reassigns card on false accusation."
],
"status": "pending"
},
{
"id": "6cb9e502-0484-4eba-a226-c4ac85c14543",
"path": "/openwiki/quickstart.md",
"title": "SlipItIn Code Wiki Quickstart",
"purpose": "Entry point for the wiki. Provides system overview, architecture snapshot, core game loop, task routing table, key architectural rules, and backlog. Must route readers through the full wiki hierarchy. Full regeneration required: remove stale Agents/ references, add testing row, refresh navigation links.",
"seedPaths": [
"README.md",
"SlipItIn.AppHost/AppHost.cs",
"SlipItIn.Server/Program.cs",
"SlipItIn.slnx",
"SlipItIn/MauiProgram.cs",
"openwiki/architecture/overview.md",
"openwiki/domain/game-mechanics.md",
"openwiki/operations/runbook.md",
"openwiki/source-map.md",
"openwiki/workflows/slip-and-challenge.md"
],
"relatedPages": [
"/openwiki/architecture/overview.md",
"/openwiki/domain/game-mechanics.md",
"/openwiki/operations/runbook.md",
"/openwiki/source-map.md",
"/openwiki/workflows/slip-and-challenge.md"
],
"instructions": [
"Ensure all navigation links point to correct wiki pages (no broken links).",
"Full regeneration from scratch based on the current repository state.",
"Include a Backlog section (without Agents/ references) — mention the round timer engine as a pending feature.",
"Include a Key Architectural Rules section with the 5 rules: IDbContextFactory thread safety, data privacy isolation, server-side validation, decoupled client messaging, dual-layer local storage.",
"Include a core game loop section (authentication, lobby creation/joining, card dealing, slip submission, challenge resolution).",
"Include a system overview with project structure tree (6 projects in SlipItIn.slnx).",
"Include a task routing table covering: MAUI Client ViewModels & Pages, Client SignalR & Messaging, Offline Action Queue & Resync, Local Storage & Auth Session, Backend Game Engine & Hub, Domain Models & DTOs, Aspire & Infrastructure Setup, Server Testing & Test Helpers.",
"Keep the system architecture mermaid diagram (graph TD) and ensure it accurately reflects the current architecture.",
"Language: English. Document is the wiki entry point.",
"Preserve the frontmatter with type: Overview and openwiki metadata.",
"Use the mermaid-diagrams skill for any diagrams: ground in source, give each diagram a caption, use safe syntax."
],
"status": "pending"
}
],
"deletePages": []
}
}