[ { "repo": "https://github.com/AA-Factory/aafactory-prototype", "pr_number": 17, "pr_url": "https://github.com/AA-Factory/aafactory-prototype/pull/17", "base": "e7f558c7360abac335af2df22f4ed376992b30ab", "head": "a1978cb75950a879df8805e4a5f373eb6678f6f9", "title": "Mock test single avatar interaction with elevenlabs and zonos", "body": "I'm addressing the issue: https://github.com/Reekomer/aafactory/issues/7\r\nIn this PR im adressing only the first point, which is to mock the chat interaction.\r\n\r\nSo I've created a test for single avatar interaction using pytest-mock.\r\nIt is running two tests, one for elevenLabs and one for zonos.\r\nMore over i make sure to clear chat history before every test.\r\nI added \"print\" statements for better debugging too.\r\nLocally the test is passing.\r\n\r\nNote: I meant to create a PR within the [branch of the original issue. ](https://github.com/Reekomer/aafactory/tree/7-the-chat-history-doesnt-reset-when-loading-new-avatar) but messed up somewhere. Let me know if this is ok, or i should delete this and create a new PR.", "nwo": "AA-Factory/aafactory-prototype", "language": "Python", "repo_size_kb": 2162, "lines_added": 45, "lines_removed": 0, "files_changed": 1 }, { "repo": "https://github.com/AY2526S2-CS2103T-W14-3/tp", "pr_number": 152, "pr_url": "https://github.com/AY2526S2-CS2103T-W14-3/tp/pull/152", "base": "a27b3e40d94f92f229b9301a8a9d5207d9a5b0bb", "head": "e0a9ce03c8c1cc839eaf409e2677b9abf2017b1f", "title": " Implement Global Date Notes", "body": "This PR implements the global date note feature, allowing users to attach descriptive notes to specific dates in their travel itinerary. These notes are displayed in the Planner view alongside scheduled locations.\r\n\r\ncloses #151 \r\n\r\n---\r\n\r\n## Description\r\n\r\nThis PR fully develops the `note` command and integrates it with the UI and storage layers. Unlike locations, notes are global to the date and provide a general description or reminder for that day's plan.\r\n\r\n**Key Changes:**\r\n- **Global Storage:** Notes are now stored in a centralized `Map` within the `AddressBook`, making them independent of individual location records.\r\n- **Reactive UI:** The `PlannerListPanel` now dynamically observes a `plannerNote` property in the `Model`. When a user runs the `plan` command, the UI automatically updates to show the relevant note.\r\n- **Smart Note Merging:** If multiple notes apply to the same date (e.g., a specific date note and a recurring \"Every Friday\" note), they are intelligently merged and displayed together.\r\n- **Persistence:** Global notes are serialized into `addressbook.json` and persist across application restarts.\r\n- **Undo/Redo Support:** The `note` command is now fully undoable, integrated into the application's state-snapshot mechanism.\r\n\r\n---\r\n\r\n## Type of Change\r\n\r\n- [x] New feature (non-breaking change that adds functionality)\r\n- [x] Backend implementation (fulfilling deferred functionality)\r\n- [ ] Bug fix\r\n- [x] Documentation update (Implementation details in Developer Guide)\r\n\r\n---\r\n\r\n## Test Coverage\r\n- ✅ **Unit Tests:** Updated `NoteCommandTest` to verify backend execution and `AddressBookTest` for map serialization.\r\n- ✅ **Mocking:** Updated `ModelStub` in `AddCommandTest` to support new interface methods.\r\n- ✅ **Integration Tests:** Verified that `NoteCommand` correctly modifies the model and triggers UI-bound properties.\r\n\r\n### Manual Testing Verification\r\n- `note n/buy souvenir d/2026-03-24` → Success message shown.\r\n- `plan 2026-03-24` → Planner sidebar displays \"buy souvenir\".\r\n- `undo` → Note disappears from the active planner view.\r\n- Restart App → `plan 2026-03-24` still shows the saved note.\r\n- `note n/Weekly check d/every Tuesday` → Note displays every Tuesday in the planner.\r\n\r\n\r\n---\r\n\r\n## Checklist for Reviewers\r\n\r\n- [x] Code follows the project's coding style (Checkstyle passed)\r\n- [x] Comments and documentation are clear and accurate\r\n- [x] All tests pass locally\r\n- [x] New feature is fully integrated with Undo/Redo\r\n- [x] Storage uses `toDataString()` to ensure robust cross-session loading\r\n- [x] UI placeholder \"TEST\" removed and replaced with live data bindings\r\n- [x] Multiple notes for the same `LocalDate` handle string joining correctly\r\n\r\n---\r\n\r\n## Future Enhancements\r\n\r\nPossible improvements for future iterations:\r\n- Implementation of `DeleteNoteCommand` (currently deferred)\r\n- Support for rich text or bullet points in notes\r\n- Adding an \"Edit Note\" button directly in the Planner UI\r\n- Visual indicators/icons in the list view for dates that have notes attached", "nwo": "AY2526S2-CS2103T-W14-3/tp", "language": "Java", "repo_size_kb": 17938, "lines_added": 409, "lines_removed": 28, "files_changed": 19 }, { "repo": "https://github.com/AgentParadise/agent-paradise-standards-system", "pr_number": 61, "pr_url": "https://github.com/AgentParadise/agent-paradise-standards-system/pull/61", "base": "d541a92be2f2e1ceed397d4e0afaf933df8972fd", "head": "fbdecd6bd0b3148b84d91b6c4eff3c6d7ce54198", "title": "feat: EXP-V1-0004 documentation and context engineering standard", "body": "## Summary\n\n- **EXP-V1-0004 (parent)**: Configurable context engineering for a project's technical documentation directory. Enforces structured docs with frontmatter-driven indexing — every `.md` file has YAML front matter, every directory has a `README.md` with auto-generated `## Index` tables. CLAUDE.md and AGENTS.md context files per directory for AI agents. Root-level context files referencing documentation location. All configurable via `.apss/config.toml` with zero-config defaults.\n- **EXP-V1-0004.ADR01 (substandard)**: Enforces Architecture Decision Records — `ADR-XXX-.md` naming (3-5 digit numbers), required front matter (`name`, `description`, `status`), Fowler lifecycle (`proposed`/`accepted`/`deprecated`/`superseded`), keyword-based required ADRs, required `## Context/Decision/Consequences` headers, CLAUDE.md/AGENTS.md with backlinking guidance, dead ADR reference detection, and superseded/deprecated reference warnings.\n- **CLI integration**: `aps run docs validate` and `aps run docs index` commands that run both parent and substandard, merging diagnostics. Central standard registry eliminates magic strings.\n\n### Error codes\n\n| Parent (DOC) | Substandard (ADR01) |\n|---|---|\n| MISSING_README | ADR01-001 Missing ADR directory |\n| MISSING_CLAUDE_MD | ADR01-002 Invalid naming |\n| MISSING_AGENTS_MD | ADR01-003 Missing front matter |\n| MISSING_INDEX | ADR01-004 Required keyword not satisfied |\n| STALE_INDEX | ADR01-005 Reserved |\n| MISSING_ROOT_CLAUDE_MD | ADR01-006 Invalid naming regex |\n| MISSING_ROOT_AGENTS_MD | ADR01-007 Missing context file |\n| MISSING_DOCS_REFERENCE | ADR01-008 Context file lacks guidance |\n| | ADR01-009 Dead ADR reference |\n| | ADR01-010 Missing required header |\n| | ADR01-011 Missing/invalid status |\n| | ADR01-012 Superseded/deprecated reference |\n\n### Key design decisions\n\n- **ADR_STEM_PATTERN** as single source of truth for all ADR regex patterns (`ADR-\\d{3,5}-[a-zA-Z0-9-]+`)\n- ADR status follows Fowler lifecycle — ADRs are never revised, only superseded\n- Parent spec focuses on general docs structure; ADR details live in substandard\n\n### Test coverage\n\n- 5 config unit tests (stem pattern, filename pattern, keyword pattern, metacharacter escaping)\n- 12 parent integration tests (config, frontmatter, index, readme)\n- 14 ADR unit tests (error codes, reference extraction, header matching, status validation, digit range)\n- 28 ADR integration tests across 7 fixture scenarios\n\n## Test plan\n\n- [x] `cargo check --workspace` compiles\n- [x] `cargo test -p documentation` — all pass\n- [x] `cargo test -p documentation-adr` — all pass (14 unit + 28 integration)\n- [x] `cargo clippy -p documentation -p documentation-adr -p aps-cli -- -D warnings` — clean\n- [x] `cargo test -p aps-cli test_all_v1_standards_pass_validation` — self-validation passes", "nwo": "AgentParadise/agent-paradise-standards-system", "language": "Rust", "repo_size_kb": 916, "lines_added": 4550, "lines_removed": 25, "files_changed": 56 }, { "repo": "https://github.com/Alan-Jowett/sonde", "pr_number": 148, "pr_url": "https://github.com/Alan-Jowett/sonde/pull/148", "base": "eb6fa2805d4dcc8de0494ce06f82ea3d8a5132f1", "head": "c58a06a5a4eb45ccfffb8c0ba75306d559482b39", "title": "fix: six firmware bugs found in line-by-line audit", "body": "## Summary\r\n\r\nFixes 6 bugs found during a comprehensive line-by-line audit of both the sonde-node and sonde-modem firmware.\r\n\r\n---\r\n\r\n### Bug 1: Factory reset doesn't clear stored WiFi channel\r\n**File:** `key_store.rs`\r\n\r\nAfter factory reset + re-pairing with a different gateway on a different channel, the node used the **stale channel** from the previous pairing and couldn't communicate. Now clears channel to default (channel 1) on factory reset.\r\n\r\n### Bug 2: Modem bridge doesn't reset frame decoder on USB reconnect\r\n**File:** `bridge.rs`\r\n\r\nWhen USB reconnects, `MODEM_READY` was sent but the `FrameDecoder` was **not** reset. Stale partial frame bytes from before the disconnect corrupted the first frames from the gateway. Now calls `decoder.reset()` on reconnect, matching the existing `handle_reset()` behavior.\r\n\r\n### Bug 3: Zero sleep interval causes tight wake-sleep loop\r\n**File:** `sleep.rs`, `wake_cycle.rs`\r\n\r\n`UpdateSchedule { interval_s: 0 }` from the gateway or `set_next_wake(0)` from BPF caused `enter_deep_sleep(0)` ΓåÆ immediate wake ΓåÆ infinite loop that drains the battery in hours. Now clamps `effective_sleep_s()` to a minimum of 1 second.\r\n\r\n### Bug 4: Dead `resolve_map_references` code\r\n**File:** `program_store.rs`\r\n\r\nThe function and 3 tests were left over from the rbpf era. LDDW `src=1` map reference relocation is now handled by the `sonde_bpf` interpreter at runtime. Removed ~70 lines of dead code and 3 dead tests.\r\n\r\n### Bug 5: Zero-size maps cause HashMap key collision in BPF dispatch\r\n**File:** `map_storage.rs`\r\n\r\nTwo maps with `max_entries=0` produce identical `data_ptr()` values (Rust's dangling pointer for empty `Vec`). This caused the dispatch context's `map_ptr_index` HashMap to silently overwrite one entry, making `map_lookup_elem`/`map_update_elem` access the wrong map. Now rejects `max_entries == 0` and `value_size == 0` in `validate_map_defs()`.\r\n\r\n### Bug 6: Inconsistent zero-length check in I2C write-read helper\r\n**File:** `bpf_dispatch.rs`\r\n\r\n`helper_i2c_read` and `helper_i2c_write` reject `len == 0`, but `helper_i2c_write_read` allowed zero-length for both `write_len` and `read_len`. A BPF program could bypass the zero-length check by using the combined helper. Now consistently rejects zero-length transfers.\r\n\r\n---\r\n\r\n## Testing\r\n\r\n- 144 tests pass across sonde-node and sonde-modem (0 failures)\r\n- 4 new tests added (2 for min-sleep clamp, 2 for zero-size map rejection)\r\n- 3 dead tests removed (for the deleted `resolve_map_references`)\r\n- Clippy clean with `-D warnings`\n\nFixes #127", "nwo": "Alan-Jowett/sonde", "language": "Rust", "repo_size_kb": 20464, "lines_added": 167, "lines_removed": 124, "files_changed": 6 }, { "repo": "https://github.com/AntManThePro/TwistedsCommandCenter", "pr_number": 13, "pr_url": "https://github.com/AntManThePro/TwistedsCommandCenter/pull/13", "base": "2b0966dec5579a66899f15bccabb6f93c1f3f47b", "head": "78f6157eaec39a413d216616a44734ac53df3d6e", "title": "Fix incomplete CRUD, stale form state, and missing delete-activity test from PR #8", "body": "PR #8 implemented `useInventory` with full CRUD including `updateItem`, but the hook's Update path was never wired to the UI, the Add modal leaked form state across open/close cycles, and the delete activity side-effect had no test coverage.\n\n## Changes\n\n- **Complete the Update path (`updateItem`)**\n - `AddItemModal` gains optional `editItem` / `onUpdate` props; toggles title and submit label between *Add New Item* / *Edit Item* modes\n - `InventoryTable` adds a per-row **Edit** button (cyan, beside Delete)\n - `InventoryPage` manages `editingItem` state and a unified `openModal(item?)` helper\n - `App.tsx` now destructures and passes `updateItem` down to `InventoryPage`\n\n- **Form reset on modal close** \n A `modalKey` counter in `InventoryPage` increments on every `openModal()` call, forcing React to remount `AddItemModal` fresh — no residual state from a cancelled session. Edit mode pre-fills via a `useState` function initializer.\n\n ```tsx\n // InventoryPage.tsx\n const openModal = (item?: InventoryItem) => {\n setEditingItem(item)\n setModalKey(prev => prev + 1) // force remount → clean form\n setIsModalOpen(true)\n }\n\n \n ```\n\n- **Missing test: delete creates activity** \n Added `'adds activity when deleting an item'` to `useInventory.test.ts`; asserts `activities` grows by 1 with `action: 'removed'` and the correct `itemName`.", "nwo": "AntManThePro/TwistedsCommandCenter", "language": "TypeScript", "repo_size_kb": 517, "lines_added": 68, "lines_removed": 13, "files_changed": 5 }, { "repo": "https://github.com/Asjas/course-platform", "pr_number": 946, "pr_url": "https://github.com/Asjas/course-platform/pull/946", "base": "2fcdc8b36f1759f9a19ad71d3d5d9e5f5f642a28", "head": "ef3adc91ad629487ca4b48db902c729c622fd95e", "title": "feat(transcript): Phase 1 — transcript domain, VTT parser, validation, and learner UI", "body": "- [x] Fix `courses.$courseId.tsx` — add `Outlet` guard so `LessonPage` mounts on child routes\n- [x] Fix `courses.$courseId.lessons.$lessonId.tsx` — restore manual `LessonInModule` interface with `transcription: unknown`\n- [x] Fix fullscreen layout — cap video container at `max-h-[45vh] overflow-hidden`\n- [x] Improve E2E coverage — updated fixtures and added new tests covering untested branches\n- [x] Replace `data-testid=\"transcript-cue-time\"` with `aria-label=\"Time: \"`\n- [x] Fix `TranscriptPanel` landmark — use `
`\n- [x] Remove all `data-testid` from `TranscriptPanel` — replace with semantic ARIA selectors\n- [x] Fix TypeScript errors — `UserReview`, `TicketComment` interfaces in lesson/course routes\n- [x] Fix remaining TypeScript errors (`chat.tsx`, `support/$supportTicket/index.tsx`)\n- [x] Optimize `stripVttTags()` — module-scoped `DOMParser` instance\n- [x] Gate `getUserReviewForCourse` query with `enabled: !!courseId && childMatches.length <= 1` — avoids extra request on every lesson navigation\n\n\n\n\n\n
\n\nOriginal prompt\n\nyes let's implement phase 1 and add tests (vitest and e2e) to verify behaviour.\n\n\n[Chronological Review: The conversation began with the user requesting to create a skill based on a multi-step workflow for adding course modules and lessons, focusing on transcript functionality. The user then discussed various features related to video transcripts, including uploading VTT files, displaying them in different formats, and managing transcript validity for lessons. The conversation evolved to include technical decisions about client-side generation, manual vs. auto-generated tracks, and user interface interactions for transcripts. The user emphasized the need for manual control over transcript syncing and the importance of maintaining version history. The latest exchanges focused on the functionality of transcript search and its integration with video playback.]\n\n[Intent Mapping: The user explicitly requested to create a skill for adding course modules and lessons, focusing on transcript management. They also sought to implement features for uploading VTT files, displaying transcripts in different formats, and ensuring transcript validity for lessons with video content. The user expressed a desire for manual control over transcript syncing and highlighted the importance of user interface features like clickable cues and search functionality.]\n\n[Technical Inventory: Technologies discussed include VTT file formats, client-side state management, and user interface design for transcript display. The conversation also touched on the use of YouTube APIs for fetching captions and managing video content.]\n\n[Code Archaeology: The conversation did not delve into specific code files or functions but discussed the overall architecture for managing transcripts and video lessons. The user mentioned creating an implementation blueprint to document the features and decisions made.]\n\n[Progress Assessment: The user has outlined several features related to transcript management, including upload functionality, display options, and search capabilities. They have also established rules for transcript validity and syncing processes. However, the implementation details and documentation are still pending.]\n\n[Context Validation: All critical information for continuation is captured, including user requirements for transcript management, user interface features, and technical decisions regarding manual vs. auto-generated tracks.]\n\n[Recent Commands Analysis: The last agent command involved summarizing the conversation history. The tool results included a comprehensive overview of the user's requests, decisions made, and the current state of the project. The agent was actively working on documenting the implementation blueprint for transcript functionality when the token budget was exceeded. These operations connect to the user's overall goal of enhancing course module management with robust transcript features.]\n\n\n\n\n1. Conversation Overview:\n- Primary Objectives: The user requested to create a skill for adding course modules and lessons with a focus on transcript management, stating, \"I would like us to focus on the ability to add a transcript to each lesson.\"\n- Session Context: The conversation flowed from discussing the functionality of adding course modules to specific features for managing transcripts, including uploading VTT files and ensuring transcript validity.\n- User Intent Evolution: The user's needs evolved from general transcript management to specific implementation details, including user interface interactions and syncing processes.\n\n2. Technical Foundation:\n- VTT Files: Used for video transcripts, allowing for timestamped captions.\n- Client-Side State Management: Proposed for fast generation of transcript views.\n- YouTube API: Discussed for fetching captions from private videos.\n\n3. Codebase Status:\n- No specific files were modified, but the user indicated the need for an implementation blueprint to document features and decisions.\n- Key Code Segments: Not applicable as no specific code was discussed.\n\n4. Problem Resolution:\n- Issues Encountered: Managing transcript validity and syncing processes.\n- Solutions Implemented: Proposed manual control over transcript syncing and maintaining version history.\n- Debugging Context: No ongoing troubleshooting was mentioned, but the user emphasized the need for clear rules and controls.\n\n5. Progress Tracking:\n- Completed Tasks: User requirements for transcript management have been outlined.\n- Partially Complete Work: Implementation details and documentation are still pending.\n- Validated Outcomes: No features have been confirmed working yet.\n\n6. Active Work State:\n- Current Focus: The user was discussing the functionality of transcript search and its integration with video playback.\n- Recent Context: The user requested, \"When you are ready with an implementation blueprint you can write it to an .md file in the `/docs` directory.\"\n- Working Code: No sp...\n\n
\n\n\n\n\n\nCreated from [VS Code](https://code.visualstudio.com/docs/copilot/copilot-coding-agent).", "nwo": "Asjas/course-platform", "language": "TypeScript", "repo_size_kb": 19859, "lines_added": 2368, "lines_removed": 44, "files_changed": 10 }, { "repo": "https://github.com/CLJunge/REFW.Umbra", "pr_number": 88, "pr_url": "https://github.com/CLJunge/REFW.Umbra/pull/88", "base": "94e5bca2ce5588c41b8ff352c7e1d002825400d0", "head": "600fa7cbebe28b1deadca0788144d86950a66e1c", "title": "New feature and API/UI enhancement", "body": "- [x] Remove unused popup methods from `IConfigTransferDrawerRenderer`\n- [x] Cache `File.Exists` result in `ConfigTransferDrawer`, only re-checking when the path changes\n - Added `_cachedExistsPath` / `_cachedFileExists` fields\n - Converted `EvaluateActionState` from static to instance method\n - Added `GetFileExists` helper with XML doc explaining the intentional path-based invalidation\n - Added two new tests: caching behavior and cache invalidation on path change\n- [x] Sanitize `ConfigTransferOptions.SectionLabel` before composing the ImGui tree-node label in `ConfigSection.DrawTransferFeature`\n - Added `PluginPanelTreeNodeLabels.WarnIfInvalid(...)` call to emit a one-time developer warning when the label contains `##`\n - Added `PluginPanelTreeNodeLabels.Sanitize(...)` to strip any `##` suffix before appending the stable `##{_sectionId}.Transfer` ID", "nwo": "CLJunge/REFW.Umbra", "language": "C#", "repo_size_kb": 2244, "lines_added": 3668, "lines_removed": 247, "files_changed": 44 }, { "repo": "https://github.com/CommunityToolkit/Maui", "pr_number": 3181, "pr_url": "https://github.com/CommunityToolkit/Maui/pull/3181", "base": "c7cb65bc98e429401e4f792f6b7aa21f94e81933", "head": "1e8d2e2f880cfe1d9bcbdfbc6078cb6b72fd35ce", "title": "Add stream media source", "body": "\r\n\r\n ### Description of Change ###\r\n\r\nAdds StreamMediaSource support to MediaElement so media can be played directly from a .NET Stream.\r\n\r\nThis is intended for scenarios where media should remain in memory or within the app sandbox, rather than being written out to a file or fetched from an external URL. It enables workflows such as capturing or generating media in-memory and previewing it before persisting it.\r\n\r\nThe change adds a new MediaSource subtype and wires it through the existing MediaElement pipeline on supported platforms:\r\n- Windows: uses WinMediaSource.CreateFromStream with IRandomAccessStream conversion\r\n- Android: uses a custom ExoPlayer IDataSource implementation backed by Stream\r\n- iOS/macOS: uses AVAssetResourceLoader to serve stream data to AVPlayer\r\n- Tizen: explicitly reports stream playback as unsupported\r\n\r\nThe API follows the existing MediaSource patterns, including a MediaSource.FromStream(Stream) factory method and direct use of StreamMediaSource.\r\n\r\n \r\n\r\n ### Linked Issues ###\r\n \r\n\r\n- Related discussion: https://github.com/CommunityToolkit/Maui/discussions/2968\r\n\r\n ### PR Checklist ###\r\n \r\n - [x] Has a linked Issue, and the Issue has been `approved`(bug) or `Championed` (feature/proposal)\r\n **Note:** Has a linked discussion, not issue, however was discussed and approved by @TheCodeTraveler, @ne0rrmatrix and @VladislavAntonyuk on the standup today (see: https://www.youtube.com/watch?v=gF1YSJyxAB8)\r\n - [x] Has tests (if omitted, state reason in description)\r\n - [x] Has samples (if omitted, state reason in description)\r\n - [x] Rebased on top of `main` at time of PR\r\n - [x] Changes adhere to [coding standard](https://github.com/CommunityToolkit/Maui/blob/main/CONTRIBUTING.md#contributing-code---best-practices)\r\n - [x] Documentation created or updated: https://github.com/MicrosoftDocs/CommunityToolkit/pull/642\r\n\r\n\r\n ### Additional information ###\r\n\r\n \r\n \r\n\r\n- This work is currently linked to discussion 2968 rather than a formal issue.\r\n- The feature proposal originated from secure-app scenarios where media must remain in-memory and within the app sandbox.\r\n- Sample app updates are included to demonstrate stream-backed playback.\r\n- Tizen is not supported at this stage and reports that limitation explicitly.\r\n- Tested platforms: Windows, Android, iOS/macOS as applicable to the implementation.\r\n\r\n\r\n## What Was Added\r\n\r\n### Core Class\r\n- **`StreamMediaSource.shared.cs`**: New `MediaSource` subclass that wraps a .NET `Stream`\r\n - Includes `Stream` bindable property\r\n - Implicit operators for convenient Stream conversion\r\n - Factory method `MediaSource.FromStream(Stream)`\r\n - Follows the same pattern as `FileMediaSource`, `UriMediaSource`, and `ResourceMediaSource`\r\n\r\n### Platform-Specific Implementations\r\n\r\n#### Windows (`MediaManager.windows.cs`)\r\n- **Implementation**: Uses `WinMediaSource.CreateFromStream()` with `IRandomAccessStream`\r\n- **Status**: ✅ Fully Supported\r\n- **Method**: Leverages `WindowsRuntimeStreamExtensions.AsRandomAccessStream()` to convert .NET streams to Windows Runtime streams\r\n- **Helper**: `StreamExtensions.windows.cs` - Provides `GetMimeType()` extension method\r\n\r\n#### Android (`MediaManager.android.cs`)\r\n- **Implementation**: Custom `StreamDataSource` implementing ExoPlayer's `IDataSource` interface\r\n- **Status**: ✅ Fully Supported\r\n- **Method**: Created custom data source that reads from .NET Stream and integrates with ExoPlayer's `ProgressiveMediaSource`\r\n- **Helper**: `StreamDataSource.android.cs` - Contains `StreamDataSource` and `StreamDataSourceFactory` classes\r\n- **Features**:\r\n - Supports seeking if stream is seekable\r\n - Handles range requests\r\n - Proper resource cleanup and disposal\r\n\r\n#### iOS/macOS (`MediaManager.macios.cs`)\r\n- **Implementation**: Uses `AVAssetResourceLoaderDelegate` to provide custom data source\r\n- **Status**: ✅ Fully Supported\r\n- **Method**: Creates custom URL scheme (`stream://media`) and uses `AVAssetResourceLoader` to intercept loading requests\r\n- **Helper**: `StreamAssetResourceLoader.macios.cs` - Custom delegate that feeds stream data to `AVPlayer`\r\n- **Features**:\r\n - Works with both audio and video\r\n - Supports seeking if stream is seekable\r\n - Integrates seamlessly with existing `AVPlayer` architecture\r\n\r\n#### Tizen (`MediaManager.tizen.cs`)\r\n- **Status**: ❌ Not Supported\r\n- **Reason**: Platform limitation - throws `NotSupportedException` with helpful message\r\n\r\n## Usage Examples\r\n\r\n```csharp\r\n// Using factory method\r\nMediaSource source = MediaSource.FromStream(myStream);\r\n\r\n// Using implicit conversion\r\nMediaSource source = myStream;\r\n\r\n// Direct instantiation\r\nvar streamSource = new StreamMediaSource { Stream = myStream };\r\n\r\n// Assigning to MediaElement\r\nmediaElement.Source = MediaSource.FromStream(myStream);\r\n```\r\n\r\n## Files Modified\r\n\r\n### New Files\r\n1. `MediaSource/StreamMediaSource.shared.cs` - Core class\r\n2. `Platforms/Android/StreamDataSource.android.cs` - Android implementation\r\n3. `Views/StreamAssetResourceLoader.macios.cs` - iOS/macOS implementation\r\n4. `Views/StreamExtensions.windows.cs` - Windows helper extensions\r\n\r\n### Modified Files\r\n1. `MediaSource/MediaSource.shared.cs` - Added `FromStream()` factory method\r\n2. `Views/MediaManager.android.cs` - Added stream support via custom DataSource\r\n3. `Views/MediaManager.windows.cs` - Added stream support via `CreateFromStream()`\r\n4. `Views/MediaManager.macios.cs` - Added stream support via `AVAssetResourceLoader`\r\n5. `Views/MediaManager.tizen.cs` - Added NotSupportedException for streams\r\n6. `Converters/MediaSourceConverter.shared.cs` - Added `StreamMediaSource` case\r\n\r\n## Technical Details\r\n\r\n### Android Implementation\r\nThe Android implementation uses ExoPlayer's extensibility model:\r\n- `StreamDataSource` implements `IDataSource` interface\r\n- Reads data from .NET Stream on demand\r\n- `StreamDataSourceFactory` creates instances for ExoPlayer\r\n- Integrates with `ProgressiveMediaSource.Factory`\r\n\r\n### iOS/macOS Implementation\r\nThe iOS/macOS implementation uses Apple's official extension mechanism:\r\n- Creates `AVUrlAsset` with custom URL scheme\r\n- `AVAssetResourceLoaderDelegate` intercepts resource loading requests\r\n- Provides stream data through `AVAssetResourceLoadingDataRequest`\r\n- Supports both content information and data requests\r\n\r\n### Windows Implementation\r\nThe Windows implementation uses built-in .NET stream conversion:\r\n- Converts .NET Stream to `IRandomAccessStream` using `AsRandomAccessStream()`\r\n- Uses `WinMediaSource.CreateFromStream()` API\r\n- Provides default MIME type (can be enhanced for better type detection)\r\n\r\n## Considerations\r\n\r\n### Stream Lifecycle\r\n- Streams are **not** automatically disposed by the MediaElement\r\n- Callers are responsible for managing stream lifetime\r\n- Consider keeping streams open for the duration of playback\r\n- Seeking requires seekable streams\r\n\r\n### MIME Type Detection\r\n- Windows: Returns generic `\"application/octet-stream\"` by default\r\n- iOS/macOS: Defaults to `\"video/mp4\"` assumption\r\n- Future enhancement: Could detect MIME type from stream content (magic bytes)\r\n\r\n### Performance\r\n- Streams should support efficient random access for best performance\r\n- Non-seekable streams may have limited functionality\r\n- Consider buffering strategies for network streams\r\n\r\n## Future Enhancements\r\n\r\n1. **MIME Type Detection**: Implement magic byte detection to automatically determine content type\r\n2. **Tizen Support**: Investigate if Tizen platform can support stream-based playback\r\n3. **Stream Properties**: Add optional properties to `StreamMediaSource` for MIME type hint\r\n4. **Buffering Options**: Add configurable buffering strategies for different stream types\r\n5. **Progress Reporting**: Add stream read progress callbacks for monitoring\r\n", "nwo": "CommunityToolkit/Maui", "language": "C#", "repo_size_kb": 18087, "lines_added": 1499, "lines_removed": 71, "files_changed": 26 }, { "repo": "https://github.com/ComposioHQ/agent-orchestrator", "pr_number": 1277, "pr_url": "https://github.com/ComposioHQ/agent-orchestrator/pull/1277", "base": "ba77929c9345a0dc897d53115504d0ae32745ce5", "head": "76652c7ccefa3a371be74e8648c5204adc7f09a5", "title": "fix(cli): avoid missing repo scripts on global installs (#1252)", "body": "Fixes #1252\r\n\r\n\"image\"\r\n", "nwo": "ComposioHQ/agent-orchestrator", "language": "TypeScript", "repo_size_kb": 31338, "lines_added": 613, "lines_removed": 73, "files_changed": 11 }, { "repo": "https://github.com/DisciplinedSoftware/Codebase-Conversion", "pr_number": 1, "pr_url": "https://github.com/DisciplinedSoftware/Codebase-Conversion/pull/1", "base": "ed10728c91f7858a0bd95a97c754f4bd6c0487ec", "head": "4b46d68c215dd2448a62f751e81218a0da789165", "title": "Fortran-to-Rust conversion pipeline with devcontainer", "body": "- [x] Fix parser: typed function declarations (DOUBLE PRECISION FUNCTION DDOT)\n- [x] Fix test harness: generates Fortran drivers for functions + subroutines\n- [x] Fix conversion: correct Rust types in hybrid strategy stubs\n- [x] Fix banner: Panel-based, correctly readable\n- [x] HTML report: generated and auto-opened after conversion\n- [x] Fix LLM client: switch to GitHub Models API (models.inference.ai.azure.com), no token exchange\n- [x] Fix Fortran compilation in test harness + benchmarker: interactive CLI now always fetches lsame/xerbla support files\n- [x] Fix accuracy reporting: LLM now instructed to use u8 for CHARACTER*1 args\n- [x] Fix accuracy compile failure: accuracy example wraps call in `unsafe {}` so LLM-generated `pub unsafe fn` no longer causes E0133 → `cargo test` passes clean\n- [x] Fix random seeding: both Fortran driver and Rust example now use `random.Random(test_index)` iterating over `arg_names` in same order → identical numerical inputs → meaningful comparison\n- [x] Fix bench example warnings: added `#![allow(unused_mut, unused_variables, dead_code)]` to bench files → `cargo test` finishes with no warnings\n- [x] Fix E0425 \"cannot find function in scope\": 4 complementary fixes for LLM code structure issues\n - LLM prompt explicitly requires top-level `pub fn {name}` with no `mod` wrapping (in both translate and repair prompts)\n - `_ensure_top_level_pub_fn` post-processor in `llm_first.py` adds `pub` to any bare `fn {name}` at top level\n - `scaffold_crate` adds `pub use {mod}::*;` for flat re-exports so crate root has all functions accessible\n - Accuracy example templates switched to `use {crate_name}::*;` (crate-root import) instead of `use {crate_name}::{fn}::*`\n\n\n\n\n\n\n\n\n\n
\n\nOriginal prompt\n\n> I want to convert Fortran codebases to Rust using an automated conversion pipeline that leverages LLM. The pipeline has to ensure numerical accuracy between the Fortran and Rust code and achieve comparable or better performance. The first codebase is BLAS, where the first milestone is full or near-full automation of the dgemm function. The second is to go to 10 functions, and the last one is the full library.\n> \n> This repository should allow someone to clone it, run a Rust conversion of the specified Fortran database code, and, optionally, for the specified subset only, receive a post-conversion report on accuracy and performance, along with the converted code.\n> \n> I want to explore 3 ideas.\n> 1. An LLM-first, rule-fallback.\n> The core idea is to let an LLM do the heavy lifting; invoke a rule‑based transpiler only when the LLM fails to compile.\n> The steps are:\n> a. Pre‑process – split Fortran into ≤ 200‑line functions, strip comments, build a call‑graph.\n> b. LLM translate – feed each function to LLM or another with a prompt that supplies external vars & intrinsics.\n> c. Compile & repair – run rustc; feed errors back to the LLM for up to 2 repair rounds.\n> d. Unit‑test round‑trip – auto‑generate Fortran‑style unit tests, run both versions, compare outputs.\n> e. Package – glue functions into a Cargo crate, run cargo test.\n> Tools/Prompts:\n> - Tree‑sitter‑fortran or fparser for parsing\n> - LLM API (Start open‑source, but allow paid, like my GitHub Copilot)\n> - rustc/cargo\n> - Simple Python harness for test generation\n> \n> 2. An Agentic multi‑turn dialogue.\n> The core idea is to use a Questioner‑Solver agent pair (as in LLMigrate & Fortran2CPP) to catch semantic mistakes that pure one‑shot LLMs miss.\n> The steps are:\n> a. Chunk & embed – same preprocessing as idea 1.\n> b. Solver – LLM proposes Rust translation.\n> c. Questioner – second LLM (or same model with a different prompt) asks clarifying questions about Fortran intrinsics, implicit typing, and module interfaces; the Solver revises.\n> d. Compile‑test loop – as in idea 1.\n> e. Idiomization pass – run a Rust‑clippy‑like script to replace unsafe blocks with safe idioms where possible.\n> f. Final audit – spot‑check < 15 % of lines.\n> Tools/prompts:\n> - Two‑prompt LLM pipeline (can be done with a single model via role‑play)\n> - Same parsing & build tools as Plan 1\n> - Clippy / miri for safety checks\n> \n> 3. Hybrid rule‑based + LLM polishing\n> The core idea is to start with a deterministic Fortran‑to‑Rust transpiler (e.g., f2c‑style or a custom regex‑based tool) to get a compilable skeleton, then let an LLM refine idioms and ownership.\n> The steps are:\n> a. Rule‑based skeleton – run a quick Fortran‑to‑C transpiler (e.g., f2c) followed by a C‑to‑Rust tool (c2rust) to produce unsafe Rust.\n> b. LLM polish – feed each unsafe function to an LLM with a prompt to replace raw pointers with Rust references, lifetimes, and proper error handling.\n> c. Compile & test – same as idea 1.\n> d. Benchmark sanity‑check – run a lightweight performance kernel (e.g., matrix‑multiply) to ensure no major regression.\n> e. Document – generate Rustdoc comments from original Fortran comments.\n> Tools/prompts:\n> - f2c (or f2c‑like)\n> - c2rust (or a simple C→Rust regex mapper)\n> - LLM for polishing\n> - cargo bench/criterion for quick perf check\n> \n> Since this is a demo, add a script or an executable that launches the entire process, including fetching the BLAS library and prompting the user to choose what to convert: a single function, a sample of functions, or the entire library, and which idea to use for the conversion. During the conversion, there should be processing feedback, and, depending on the idea used, questions, similar to how GitHub Copilot CLI tool works. \n\n\n
\n\n\n\n\n---\n\n🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. [Learn more about Advanced Security.](https://gh.io/cca-advanced-security)", "nwo": "DisciplinedSoftware/Codebase-Conversion", "language": "Python", "repo_size_kb": 217, "lines_added": 4565, "lines_removed": 1, "files_changed": 23 }, { "repo": "https://github.com/EdV4H/usketch", "pr_number": 534, "pr_url": "https://github.com/EdV4H/usketch/pull/534", "base": "ff729b7dce02efaf7d1054780536289f86e8a5e7", "head": "719aa8340584e714552d132a9ec6971582673a8b", "title": "feat: 図形回転の基盤(ユーティリティ・レンダリング・ヒットテスト・空間インデックス)", "body": "## Summary\n\n- 回転ユーティリティ関数を `@edv4h/usketch-shared` に追加(`rotatePoint`, `unrotatePoint`, `getRotatedAABB`, `normalizeAngle`, `snapAngle`, `deltaToLocal`, `withRotation`)\n- `ShapeWrapper` に CSS `transform: rotate()` を適用し、回転シェイプが DOM 上で回転表示されるように\n- 各シェイププラグイン(basic, image, text, wireframe, sticky)の `hitTest` を `withRotation()` でラップし、回転シェイプのクリック判定を正しく処理\n- `board-store` の `shapeToBounds` で回転シェイプの拡張 AABB を計算し、空間インデックスが回転を考慮\n\n## Test plan\n\n- [x] `rotation.test.ts` — 22テスト全パス\n- [x] `pnpm typecheck` — 全122タスク成功\n- [x] `pnpm test` — 全テスト成功\n- [ ] 手動テスト: 回転シェイプの表示・クリック・ビューポートスクロール\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)", "nwo": "EdV4H/usketch", "language": "TypeScript", "repo_size_kb": 17645, "lines_added": 492, "lines_removed": 64, "files_changed": 14 }, { "repo": "https://github.com/EtienneLescot/n8n-as-code", "pr_number": 295, "pr_url": "https://github.com/EtienneLescot/n8n-as-code/pull/295", "base": "37ddb43db1a29de4d31fd06e3feb9c7e5966d5af", "head": "c85d30b5427310cdd0365ff1c77d2b7c6b9d88c9", "title": "feat(cli): persist workflowDir in config and enforce full path for push", "body": "## Summary\n\nAddresses a recurring path confusion issue where AI agents would create workflow files in the wrong directory or pass a bare filename to `n8nac push`.\n\n### Changes\n\n**`config-service.ts`**\n- Add `workflowDir` to `ILocalConfig` — computed as `//` and persisted to `n8nac-config.json` automatically on every `instance add` / `instance select` / `init`.\n- Agents can now read this field directly instead of reconstructing the path from the three component fields manually.\n\n**`sync-manager.ts` — `resolvePushTarget`**\n- Remove the basename-only shortcut: a bare filename (no `/`) was previously silently prefixed with the sync scope dir. Now it is resolved from `cwd` like any other relative path, so passing just `my-workflow.workflow.ts` fails immediately.\n- Improved error message when path is outside scope: shows the active scope directory, the expected corrected path, and the exact corrected `n8nac push` command to run. Includes a tip pointing to `workflowDir` in `n8nac-config.json`.\n\n**`ai-context-generator.ts` — AGENTS.md**\n- Push step now mandates the full relative path form (`workflowDir/.workflow.ts`).\n- Remove the contradictory _\"do not pass a path\"_ bullet.\n- `workflowDir` from the active instance in `n8nac-config.json` is the single source of truth for where to create and push workflow files — stable across `instance select` calls and `--instance` overrides.", "nwo": "EtienneLescot/n8n-as-code", "language": "TypeScript", "repo_size_kb": 85796, "lines_added": 207, "lines_removed": 42, "files_changed": 9 }, { "repo": "https://github.com/FreeRTOS/FreeRTOS-Kernel", "pr_number": 1379, "pr_url": "https://github.com/FreeRTOS/FreeRTOS-Kernel/pull/1379", "base": "f1043c49d59944353291654c175852bd17b34f99", "head": "c926adcf6e0be826e3313fc503a92b53a78f8ef8", "title": "Fix SMP scheduler evicting task when preemption is disabled", "body": "## Summary\r\n\r\nFixes #1376 — SMP scheduler evicting a task that has preemption disabled via `vTaskPreemptionDisable()`.\r\n\r\nIn the SMP time-slicing path of `xTaskIncrementTick()`, `xYieldPendings[xCoreID]` was set to `pdTRUE` unconditionally without checking `xPreemptionDisable`. The later yield-processing block correctly skipped acting on it for preemption-disabled cores, but the **stale flag remained**. When a subsequent ISR (e.g. `xTaskGenericNotifyFromISR()`) called `prvYieldForTask()` — which correctly did not yield — it then checked `xYieldPendings[portGET_CORE_ID()]` and found the stale `pdTRUE`, erroneously setting `*pxHigherPriorityTaskWoken = pdTRUE`. This triggered `portYIELD_FROM_ISR()` → `vTaskSwitchContext()` → `prvSelectHighestPriorityTask()`, which evicted the preemption-disabled task.\r\n\r\n## Changes (three-layer fix)\r\n\r\n- **Root cause** (`xTaskIncrementTick`): Guard the time-slicing `xYieldPendings[]` assignment with a `configUSE_TASK_PREEMPTION_DISABLE` check so the flag is never set for cores running preemption-disabled tasks.\r\n\r\n- **Defense in depth** (4 functions): In `xTaskResumeFromISR`, `xTaskRemoveFromEventList`, `xTaskGenericNotifyFromISR`, and `vTaskGenericNotifyGiveFromISR` — save `xYieldPendings[portGET_CORE_ID()]` before calling `prvYieldForTask()` and only report a yield if the flag transitioned from `pdFALSE` to `pdTRUE`. This eliminates false positives from any stale flags.\r\n\r\n- **Safety net** (`vTaskSwitchContext` SMP path): Add a `xPreemptionDisable` check analogous to the existing `uxSchedulerSuspended` check. If a context switch is somehow triggered for a core whose task has preemption disabled, the switch is deferred (`xYieldPendings = pdTRUE`) and will execute when `vTaskPreemptionEnable()` calls `prvYieldCore()`.\r\n\r\n## Configuration\r\n\r\nOnly affects SMP builds with:\r\n```\r\nconfigNUMBER_OF_CORES > 1\r\nconfigUSE_TASK_PREEMPTION_DISABLE == 1\r\nconfigUSE_PREEMPTION == 1\r\nconfigUSE_TIME_SLICING == 1\r\n```\r\n\r\nSingle-core builds are completely unaffected (all changes are inside `#if ( configNUMBER_OF_CORES > 1 )` or equivalent guards).\r\n\r\n## Test plan\r\n\r\n- [ ] Verify existing FreeRTOS SMP unit tests pass\r\n- [ ] Test on dual-core SMP hardware (e.g. ESP32-S3) with preemption-disabled task + concurrent ISR notifications + same-priority time-slicing tasks (the scenario from #1376)\r\n- [ ] Verify that preemption re-enablement (`vTaskPreemptionEnable`) still triggers deferred yields correctly\r\n- [ ] Verify single-core builds are unaffected\r\n", "nwo": "FreeRTOS/FreeRTOS-Kernel", "language": "C", "repo_size_kb": 126705, "lines_added": 16, "lines_removed": 1, "files_changed": 1 }, { "repo": "https://github.com/Gibbs-Morris/mississippi", "pr_number": 471, "pr_url": "https://github.com/Gibbs-Morris/mississippi/pull/471", "base": "1e026c703d10ddd7abc724ff86ec75bea0aa23e6", "head": "fdc4ff8d1579a24e830cd636317d62d959eb0d40", "title": "Add saga reminder recovery runtime and operator surfaces +semver: breaking", "body": "## Business Value\r\n\r\n\r\n\r\nSaga recovery now has an explicit contract and runtime surface instead of hidden conventions. The work on this branch makes replay intent visible in code, gives the runtime stable execution metadata, persists authoritative recovery checkpoints, enforces resource-level access on operator surfaces, and adds generated client manual-resume support so consumers do not need handwritten plumbing.\r\n\r\n\r\n\r\n**Key benefits:**\r\n\r\n\r\n\r\n1. Saga authors must declare forward recovery intent explicitly.\r\n\r\n2. Compensatable steps now fail build-time validation when compensation recovery policy is omitted or contradictory.\r\n\r\n3. Runtime orchestration receives execution-context metadata that later reminder/manual-resume work can build on safely.\r\n\r\n4. Saga orchestration now emits explicit execution-start markers and correlates follow-on saga progress events with durable attempt metadata.\r\n\r\n5. Saga-level recovery intent is now emitted into runtime DI, persisted on saga-start events, participates in workflow identity hashing, and seeds a framework-owned checkpoint sidecar that can be rebuilt deterministically from saga infrastructure events.\r\n\r\n6. Runtime recovery code can now load the latest persisted checkpoint through a dedicated accessor instead of re-deriving snapshot-key details at every future reminder/resume call site.\r\n\r\n7. Blocked reminder/manual resume attempts now have a first-class infrastructure event that rebuilds operator-visible blocked state directly into the checkpoint model.\r\n\r\n8. Runtime recovery now has a pure planning seam that compares workflow hashes, interprets checkpoint cursors, and decides whether to execute a step, block, complete, compensate, or no-op before reminder plumbing lands.\r\n\r\n9. Runtime recovery now has an async coordinator seam that loads saga state plus the authoritative checkpoint and delegates decision-making to the planner without pushing reminder logic into the generic aggregate grain.\r\n\r\n10. Runtime recovery can now execute those actionable decisions through an explicit internal resume command path that reuses in-flight attempt identity, emits replay markers for reminder/manual resumes, and keeps initial orchestration behavior unchanged.\r\n\r\n11. Saga reminder lifecycle is now reconciled against persisted recovery state on activation, after state transitions, and after handled reminder ticks, with runtime kill switches and bounded automatic-attempt ceilings.\r\n\r\n12. Generated saga HTTP surfaces now expose a metadata-only runtime-status route plus a typed manual-resume route backed by a public recovery service contract, while existing raw-state reads stay available separately.\r\n\r\n13. Reminder review hardening now avoids unnecessary reminder-registry access for inapplicable recovery shapes, converts workflow mismatches into durable blocked reminder outcomes instead of letting stale reminder ticks churn forever, and avoids double reminder reconciliation when a handled reminder tick already executed a command.\r\n\r\n14. Generated MCP saga tooling now adds a metadata-only runtime-status tool plus a destructive manual-resume tool that both reuse the public recovery service seam and return typed JSON instead of prose-only operator responses.\r\n\r\n15. Generated saga client features now support manual resume commands with typed `SagaResumeResponse` handling and generated reducer/effect registration so UI flows can trigger operator resumes without handwritten plumbing.\r\n\r\n16. Saga runtime-status and manual-resume surfaces now fail closed using stored/current caller-context fingerprints, with a default resource-level authorizer and a typed `Unauthorized` manual-resume outcome.\r\n\r\n17. Spring sample money-transfer status projections and operator UI now surface recovery metadata end to end, including blocked-state visibility and a typed manual Resume Transfer action.\r\n\r\n18. Projection client and gateway generators now correctly emit nullable enum DTOs and mapper conversions so recovery metadata like pending direction and last resume source compile cleanly in generated projection surfaces.\r\n\r\n19. Generated saga-status reducers now cover execution-started, blocked-resume, and compensation-progress recovery events so projection read models stay aligned with the framework recovery model.\r\n20. Docusaurus saga and Spring sample docs now reflect the recovery-aware step contracts, runtime-status/manual-resume surfaces, and a public upgrade guide for pre-0.0.1 saga code.\r\n\r\n\r\n\r\n## Common Use Cases\r\n\r\n\r\n\r\n| Domain | Use Case | Example |\r\n\r\n|--------|----------|---------|\r\n\r\n| Payments | Mark non-idempotent steps as manual-only | A money-transfer debit step can block automatic replay until operators confirm recovery behavior. |\r\n\r\n| Workflow orchestration | Carry execution metadata into step code | A step can inspect `SagaStepExecutionContext` for direction, source, and operation identity. |\r\n\r\n| Tooling and CI | Fail fast on unsafe saga declarations | A compensatable step without `CompensationRecoveryPolicy` now produces a targeted generator error. |\r\n\r\n| Client UX | Trigger operator-driven resume without handwritten HTTP wiring | Generated saga client features now dispatch typed manual-resume actions/effects and store the latest `SagaResumeResponse`. |\r\n\r\n| Multi-tenant operations | Restrict status/resume to the current caller scope | Stored access fingerprints can deny raw-state reads, runtime-status reads, and manual resume when the caller fingerprint does not match. |\r\n\r\n| Sample operations | Show blocked/manual resume end to end | Spring money-transfer operations now display recovery mode, pending step, blocked reason, last resume metadata, and a Resume Transfer action when manual intervention is required. |\r\n\r\n| Projection generation | Preserve nullable recovery enums in generated DTOs | Projection generators now emit DTO enums and mapper casts for nullable fields such as `PendingDirection` and `LastResumeSource`. |\r\n| Documentation and migrations | Explain the new contracts with before/after guidance | The docs set now includes a public upgrade guide plus updated Spring tutorials for recovery-aware saga code. |\r\n\r\n\r\n\r\n## How It Works\r\n\r\n\r\n\r\n### Overview\r\n\r\n\r\n\r\nThis branch lays the contract, planner, runtime, and generated-surface foundation for saga recovery:\r\n\r\n\r\n\r\n```text\r\n\r\nSaga step attribute -> generator validation -> SagaStepInfo metadata -> runtime execution context\r\n\r\n -> recovery checkpoint + planner/coordinator\r\n\r\n -> HTTP / MCP / client manual-resume surfaces\r\n\r\n```\r\n\r\n\r\n\r\n### Key Design Decisions\r\n\r\n\r\n\r\n- **Runtime-owned recovery contracts**: recovery enums/attributes/context live in `DomainModeling.Abstractions`, not generator-only packages.\r\n\r\n- **Compiler/analyzer-first enforcement**: forward policy is a required `SagaStepAttribute` constructor argument, and compensation rules are validated during saga registration generation.\r\n\r\n- **Metadata-first runtime plumbing**: `SagaStepInfo` and step hashing now carry recovery policy data, and `SagaOrchestrationEffect` passes `SagaStepExecutionContext` into step execution.\r\n\r\n- **Checkpoint access seam**: the runtime now has a focused `SagaRecoveryCheckpointAccessor` that uses the saga brook cursor plus the checkpoint reducer hash to load the latest checkpoint snapshot deterministically.\r\n\r\n- **Blocked-state event model**: `SagaResumeBlocked` and its checkpoint reducer let the runtime persist manual-intervention state as a durable framework event instead of inferring blocked status indirectly.\r\n\r\n- **Pure recovery planning seam**: `SagaRecoveryPlanner` and the shared `SagaStepHash` helper now turn saga state plus checkpoint metadata into deterministic recovery decisions without touching reminder infrastructure yet.\r\n\r\n- **Async recovery coordinator seam**: `SagaRecoveryCoordinator` now loads the current saga state from the aggregate grain, loads the latest checkpoint snapshot, and delegates the resulting decision to the planner so later reminder/manual entrypoints can stay thin.\r\n\r\n- **Explicit resume command path**: `ResumeSagaCommand`, `ResumeSagaCommandHandler`, and `SagaRecoveryCoordinator.ResumeAsync(...)` now execute actionable recovery plans through the normal aggregate command pipeline instead of introducing a parallel runtime-only path.\r\n\r\n- **Replay-only started-event trigger**: `SagaOrchestrationEffect` now executes non-initial `SagaStepExecutionStarted` markers so reminder/manual resumes replay work with durable attempt identity while initial orchestration keeps its existing inline execution semantics.\r\n\r\n- **Thin reminder callback seam**: `GenericAggregateGrain` now implements `IRemindable` and delegates reminder ticks to an optional runtime reminder handler, so saga reminder work stays runtime-owned without forcing non-saga aggregates into saga-specific logic.\r\n\r\n- **State-driven reminder reconciliation**: saga orchestration now registers a reminder reconciler that uses persisted checkpoint metadata, runtime options, and Orleans reminder registration APIs to arm, update, or clear the framework recovery reminder whenever saga recovery state changes.\r\n\r\n- **Runtime reminder options**: a new `SagaRecoveryOptions` contract now exposes runtime kill switches plus bounded reminder timing/attempt settings, and saga reminder reconciliation clamps overdue or disabled reminders safely.\r\n\r\n- **Public recovery service seam**: `ISagaRecoveryService` and `SagaRecoveryService` now provide raw-state reads, metadata-only runtime status, and typed manual resume responses as a stable public/public-facing seam for generated HTTP surfaces.\r\n\r\n- **Resource-level saga access**: new access-context and authorizer seams persist caller fingerprints at saga start and enforce fail-closed reads/manual resume, while still permitting legacy unscoped sagas by default.\r\n\r\n- **Separate operator runtime status**: generated saga controllers now keep raw `GET status` reads intact while also adding `GET runtime-status` and `POST resume` routes that use the recovery service and typed public contracts.\r\n\r\n- **MCP parity over the same seam**: generated saga MCP tools now keep raw state separate while adding `*_runtime_status` and `*_resume` tools that flow through the same recovery service contracts used by HTTP, with read-only vs destructive behavior declared explicitly in MCP metadata.\r\n\r\n- **Command-side client scope only**: generated client work adds manual-resume command plumbing and typed response handling without inventing a brand-new runtime-status client query model.\r\n\r\n- **Projection-aligned recovery status**: `[GenerateSagaStatusReducers]` now emits reducers for execution-started, blocked-resume, and compensated-step recovery events so projection read models can mirror the framework recovery metadata without handwritten drift.\r\n\r\n- **Nullable enum projection compatibility**: client and gateway projection generators now unwrap nullable enums when emitting DTO enums and mapping code, which keeps recovery metadata fields like `PendingDirection` and `LastResumeSource` working in generated projection surfaces.\r\n\r\n- **Spring operator sample**: the Spring money-transfer sample now surfaces recovery mode/disposition, pending work, blocked state, last resume metadata, and a typed manual-resume action directly in the operations UI.\r\n\r\n\r\n\r\n### Code Example\r\n\r\n\r\n\r\n```csharp\r\n\r\n[SagaRecovery]\r\n\r\n[SagaStep(\r\n\r\n 0,\r\n\r\n SagaStepRecoveryPolicy.ManualOnly,\r\n\r\n CompensationRecoveryPolicy = SagaStepRecoveryPolicy.ManualOnly)]\r\n\r\ninternal sealed class WithdrawFromSourceStep\r\n\r\n : ISagaStep,\r\n\r\n ICompensatable\r\n\r\n{\r\n\r\n public Task ExecuteAsync(\r\n\r\n MoneyTransferSagaState state,\r\n\r\n SagaStepExecutionContext context,\r\n\r\n CancellationToken cancellationToken)\r\n\r\n {\r\n\r\n // Later increments use context for replay-safe recovery decisions.\r\n\r\n return Task.FromResult(StepResult.Succeeded());\r\n\r\n }\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n## Observability\r\n\r\n\r\n\r\nThis increment adds reminder-callback debug logs on `GenericAggregateGrain` for reminder receipt, ignored reminder names, and processed reminder ticks. Metrics, health checks, and reconciliation telemetry remain deferred to later reminder-lifecycle increments.\r\n\r\n\r\n\r\n## Files Changed\r\n\r\n\r\n\r\n### New Files\r\n\r\n\r\n\r\n| File | Purpose |\r\n\r\n|------|---------|\r\n\r\n| `src/DomainModeling.Abstractions/SagaExecutionDirection.cs` | Defines forward vs compensation execution direction. |\r\n\r\n| `src/DomainModeling.Abstractions/ISagaRecoveryInfoProvider.cs` | Exposes saga-level recovery metadata to runtime consumers without reflection. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaRecoveryAttribute.cs` | Adds saga-level recovery intent metadata and explicitly prevents inherited recovery configuration on derived saga state types. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaRecoveryMode.cs` | Defines automatic vs manual-only saga recovery mode. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaRecoveryInfo.cs` | Stores normalized saga-level recovery mode/profile metadata for runtime hashing and planning. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaRecoveryInfoProvider.cs` | Implements the typed DI provider for saga recovery metadata. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaRecoveryInfoRegistrations.cs` | Adds DI registration helpers for saga-level recovery metadata. |\r\n\r\n| `src/DomainModeling.Abstractions/ISagaAccessContextProvider.cs` | Captures immutable caller-context fingerprints that can be stored with saga recovery metadata. |\r\n\r\n| `src/DomainModeling.Abstractions/ISagaAccessAuthorizer.cs` | Defines resource-level authorization for saga state reads, runtime-status reads, and manual resume. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaResumeBlocked.cs` | Adds the durable infrastructure event that records blocked reminder/manual resume attempts with explicit blocked-state metadata and optional caller fingerprint capture. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaResumeSource.cs` | Defines initial/reminder/manual execution sources. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaStepExecutionStarted.cs` | Adds the durable infrastructure event that marks each forward or compensation attempt before execution begins, carries explicit-resume caller fingerprints, and locks its event storage identity to schema version 1. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaStepExecutionContext.cs` | Carries per-attempt execution metadata into saga steps, including a stable operation identity and per-attempt identifier. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaStepRecoveryPolicy.cs` | Defines automatic vs manual-only step replay policy. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpoint.cs` | Defines the framework-owned persisted recovery checkpoint sidecar rebuilt from saga infrastructure events and locks its snapshot storage identity to schema version 1. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointReducerState.cs` | Centralizes checkpoint helper transitions for clearing in-flight vs terminal pending work. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointStartedReducer.cs` | Seeds checkpoint state from `SagaStartedEvent`, including persisted saga access fingerprints. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointExecutionStartedReducer.cs` | Tracks in-flight attempt identity, reminder/manual resume metadata, and explicit manual-resume caller fingerprints. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointResumeBlockedReducer.cs` | Rebuilds blocked/manual-intervention checkpoint state from `SagaResumeBlocked` events, including explicit-resume caller fingerprints. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointStepCompletedReducer.cs` | Advances forward pending work after step completion. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointStepFailedReducer.cs` | Preserves failed forward-step context for deterministic resume planning and normalizes legacy default attempt metadata during replay. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointCompensatingReducer.cs` | Switches the checkpoint into compensation mode when rollback begins. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointStepCompensatedReducer.cs` | Advances compensation pending work after a compensation step completes. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointCompletedReducer.cs` | Clears pending recovery state when a saga completes successfully. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointCompensatedReducer.cs` | Clears pending recovery state when compensation completes. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointFailedReducer.cs` | Clears pending recovery state when a saga fails terminally. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCheckpointAccessor.cs` | Loads the latest persisted recovery checkpoint snapshot for a saga using the brook cursor position and checkpoint reducer hash. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryPlan.cs` | Carries the runtime-selected next recovery action, including execute/block/complete/compensate/no-op decisions. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryPlanDisposition.cs` | Defines the internal recovery-plan decision kinds used by the runtime planner. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryPlanner.cs` | Selects the next recovery action from saga state, checkpoint metadata, step policies, and workflow-hash validation, including conservative guards for invalid checkpoint metadata. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCoordinator.cs` | Loads current saga state plus the authoritative checkpoint and delegates resume planning so future reminder/manual entrypoints can stay thin. |\r\n\r\n| `src/DomainModeling.Runtime/DefaultSagaAccessContextProvider.cs` | Provides the default no-fingerprint access-context provider for hosts that do not yet customize saga access. |\r\n\r\n| `src/DomainModeling.Runtime/DefaultSagaAccessAuthorizer.cs` | Provides the default fingerprint-matching authorizer that permits legacy unscoped sagas and enforces stored/current fingerprint equality otherwise. |\r\n\r\n| `src/DomainModeling.Runtime/IAggregateReminderHandler.cs` | Defines the thin runtime seam that lets aggregate grains delegate Orleans reminder ticks to feature-specific reminder handlers. |\r\n\r\n| `src/DomainModeling.Runtime/ResumeSagaCommand.cs` | Defines the internal recovery command payload used to execute a planned resume action through the aggregate pipeline, including the explicit-resume caller fingerprint. |\r\n\r\n| `src/DomainModeling.Runtime/ResumeSagaCommandHandler.cs` | Converts actionable recovery plans into durable framework events such as `SagaStepExecutionStarted`, `SagaResumeBlocked`, `SagaCompleted`, and `SagaCompensated`, while propagating explicit-resume caller fingerprints. |\r\n\r\n| `src/DomainModeling.Runtime/SagaReminderHandler.cs` | Reuses the authoritative checkpoint plus planner/coordinator seam to turn Orleans saga reminder ticks into the same internal resume command flow used by manual/runtime resumes and converts workflow mismatches into durable blocked reminder outcomes. |\r\n\r\n| `src/DomainModeling.Runtime/SagaReminderNames.cs` | Centralizes the framework-owned Orleans reminder name used for saga recovery ticks. |\r\n\r\n| `src/DomainModeling.Runtime/SagaStepOperationKey.cs` | Centralizes stable per-step operation-key generation for replayed forward and compensation work. |\r\n\r\n| `src/DomainModeling.Runtime/SagaStepHash.cs` | Centralizes deterministic workflow-hash computation so start and resume paths use the same recovery identity logic. |\r\n\r\n| `src/DomainModeling.Abstractions/ISagaRecoveryService.cs` | Defines the auth-aware public recovery-service contract used by generated surfaces for raw state, runtime status, and manual resume operations. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaRuntimeStatus.cs` | Defines the metadata-only public runtime-status contract and operator-facing resume disposition enum. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaResumeResponse.cs` | Defines the typed public manual-resume response contract and request disposition enum, including `Unauthorized`. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryService.cs` | Implements the public recovery-service seam by translating saga state plus checkpoints into typed runtime-status and manual-resume responses, including fail-closed reads and typed unauthorized resume responses. |\r\n| `docs/Docusaurus/docs/domain-modeling/migration/_category_.yml` | Adds a dedicated Domain Modeling migration section to the docs sidebar. |\r\n| `docs/Docusaurus/docs/domain-modeling/migration/upgrade-saga-code-from-before-0-0-1-to-0-0-1.md` | Publishes the public migration guide for upgrading older saga implementations to the new recovery-aware contracts. |\r\n\r\n\r\n\r\n### Modified Files\r\n\r\n\r\n\r\n| File | Change |\r\n\r\n|------|--------|\r\n\r\n| `samples/Spring/Spring.Domain/Aggregates/AuthProof/Steps/AuthProofSagaNoOpStep.cs` | Migrates the sample step to the new attribute and method signature. |\r\n\r\n| `samples/Spring/Spring.Domain/Aggregates/MoneyTransferSaga/Steps/DepositToDestinationStep.cs` | Declares explicit forward recovery policy and accepts execution context. |\r\n\r\n| `samples/Spring/Spring.Domain/Aggregates/MoneyTransferSaga/Steps/WithdrawFromSourceStep.cs` | Declares explicit forward/compensation recovery policy and accepts execution context. |\r\n\r\n| `src/DomainModeling.Abstractions/ISagaStep.cs` | Adds `SagaStepExecutionContext` to step and compensation contracts. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaStartedEvent.cs` | Persists the saga recovery mode/profile and the saga access fingerprint on the start event while pinning the event storage baseline explicitly to version 1. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaStepAttribute.cs` | Requires forward recovery policy, adds compensation recovery policy metadata, and clarifies when the compensation setting applies. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaStepCompleted.cs` | Adds attempt correlation metadata to successful forward-step events and pins the event storage baseline explicitly to version 1. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaStepCompensated.cs` | Adds attempt correlation metadata to compensation-success events and pins the event storage baseline explicitly to version 1. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaStepFailed.cs` | Adds attempt correlation metadata to failed forward-step events, pins the event storage baseline explicitly to version 1, and supports legacy replay normalization downstream. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaStepInfo.cs` | Extends runtime step metadata with recovery policies and rejects invalid compensation metadata combinations at construction time. |\r\n\r\n| `Directory.Packages.props` | Adds the Orleans reminders package to central package management so the runtime can implement POCO reminder callbacks without ad-hoc package versions. |\r\n\r\n| `src/DomainModeling.Runtime/DomainModeling.Runtime.csproj` | References `Microsoft.Orleans.Reminders` for the new `IRemindable` callback seam. |\r\n\r\n| `src/DomainModeling.Runtime/AggregateGrainLoggerExtensions.cs` | Adds high-performance reminder receipt/ignored/processed debug logs for aggregate grains. |\r\n\r\n| `src/DomainModeling.Runtime/GenericAggregateGrain.cs` | Implements `IRemindable` and delegates reminder callbacks to an optional aggregate reminder handler while keeping the callback path thin and avoiding duplicate post-tick reminder reconciliation when the handler already executed a command. |\r\n\r\n| `src/DomainModeling.Runtime/SagaOrchestrationEffect.cs` | Creates and passes execution context into forward and compensation step execution, emits `SagaStepExecutionStarted`, correlates progress events with attempt metadata, and replays non-initial execution-start markers for reminder/manual resume paths. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRecoveryCoordinator.cs` | Adds `ResumeAsync(...)`, exposes focused planning and command-materialization helpers, and now carries explicit-resume caller fingerprints into generated resume commands. |\r\n\r\n| `src/DomainModeling.Runtime/StartSagaCommandHandler.cs` | Persists the saga recovery mode/profile and caller fingerprint on `SagaStartedEvent` and uses the shared workflow-hash helper so start and resume planning compare the same deterministic hash inputs. |\r\n\r\n| `src/DomainModeling.Runtime/SagaRegistrations.cs` | Registers the new saga execution-started and blocked-resume infrastructure events, the resume command handler, the saga reminder handler, the saga recovery checkpoint reducer graph/snapshot support, the checkpoint accessor/coordinator/planner services, the public recovery service, and default saga access-context/authorization implementations. |\r\n\r\n| `src/DomainModeling.Abstractions/SagaRecoveryOptions.cs` | Adds runtime reminder configuration knobs for enable/disable, forced manual-only mode, fallback due time, reminder period, and automatic-attempt ceilings. |\r\n\r\n| `src/DomainModeling.Runtime/GrainReminderManager.cs` | Adapts Orleans `IReminderRegistry` operations into a testable POCO-grain reminder management seam. |\r\n\r\n| `src/DomainModeling.Runtime/SagaReminderReconciler.cs` | Reconciles Orleans reminder registration from authoritative saga recovery state so missing reminders are healed and stale reminders are removed, while short-circuiting registry lookups when reminder recovery is clearly inapplicable. |\r\n\r\n| `src/Inlet.Gateway.Generators/SagaControllerGenerator.cs` | Keeps raw saga-state reads intact while generating new `runtime-status` and `resume` HTTP routes backed by the public recovery service, and now fails raw-state reads closed when the recovery service returns no readable state. |\r\n\r\n| `src/Inlet.Gateway.Generators/McpSagaToolsGenerator.cs` | Keeps raw saga-state MCP reads intact while generating new `*_runtime_status` and `*_resume` tools backed by the public recovery service and explicit MCP destructive/read-only metadata. |\r\n\r\n| `src/Inlet.Runtime.Generators/AnalyzerReleases.Shipped.md` | Keeps the shipped analyzer diagnostics ledger in Roslyn's expected release-tracking format. |\r\n\r\n| `src/Inlet.Runtime.Generators/AnalyzerReleases.Unshipped.md` | Records the new saga diagnostics in Roslyn's expected release-tracking format. |\r\n\r\n| `src/Inlet.Runtime.Generators/SagaSiloRegistrationGenerator.cs` | Emits both `SagaStepInfo` and saga-level `AddSagaRecoveryInfo(...)` registrations, reports invalid compensation-policy declarations, uses an explicit filtered lookup for named enum arguments, emits Roslyn-escaped string literals, and preserves explicit unknown enum casts in generated code. |\r\n\r\n| `src/Inlet.Client.Generators/SagaClientActionsGenerator.cs` | Generates manual-resume client actions alongside existing saga-start actions. |\r\n\r\n| `src/Inlet.Client.Generators/SagaClientActionEffectsGenerator.cs` | Adds typed manual-resume HTTP effects that post to `/resume` and parse `SagaResumeResponse`. |\r\n\r\n| `src/Inlet.Client.Generators/SagaClientStateGenerator.cs` | Extends generated saga client state with the latest typed manual-resume response. |\r\n\r\n| `src/Inlet.Client.Generators/SagaClientReducersGenerator.cs` | Adds manual-resume lifecycle reducers and stores the latest resume response on success. |\r\n\r\n| `src/Inlet.Client.Generators/SagaClientRegistrationGenerator.cs` | Registers the generated manual-resume reducers and action effect with each saga feature. |\r\n\r\n| `src/Inlet.Runtime.Generators/SagaStatusReducersGenerator.cs` | Extends generated saga-status reducers to project execution-started, blocked-resume, and compensation-progress recovery metadata into projection read models. |\r\n\r\n| `src/Inlet.Client.Generators/ProjectionClientDtoGenerator.cs` | Fixes nullable enum DTO generation so recovery metadata projection properties emit the required enum DTO types. |\r\n\r\n| `src/Inlet.Gateway.Generators/ProjectionEndpointsGenerator.cs` | Fixes nullable enum DTO and mapper generation so generated projection endpoints can map nullable recovery enums correctly. |\r\n\r\n| `samples/Spring/Spring.Domain/Projections/MoneyTransferStatus/MoneyTransferStatusProjection.cs` | Adds operator-facing recovery metadata fields mirrored from the framework recovery model. |\r\n\r\n| `samples/Spring/Spring.Client/Components/Organisms/AccountOperationsSection.razor.cs` | Adds helper logic for rendering and strongly typed gating of operator recovery status in the Spring sample UI. |\r\n\r\n| `samples/Spring/Spring.Client/Components/Organisms/AccountOperationsSection/AccountOperationsSection.razor` | Displays recovery metadata, blocked state, and a manual Resume Transfer action in the Spring sample operations panel. |\r\n\r\n| `samples/Spring/Spring.Client/Pages/OperationsPage.razor` | Wires the resume callback into both Spring account-operation panels. |\r\n\r\n| `samples/Spring/Spring.Client/Pages/OperationsPage.razor.cs` | Dispatches typed manual-resume actions from the Spring sample operator flow. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Aggregates/MoneyTransferSaga/Steps/DepositToDestinationStepTests.cs` | Updates sample step tests to use `SagaStepExecutionContext` and the latest recovery contracts. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Aggregates/MoneyTransferSaga/Steps/WithdrawFromSourceStepTests.cs` | Updates sample execute/compensate tests to use execution context and the latest recovery contracts. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaStartedStatusReducerTests.cs` | Expands generated status reducer coverage to assert recovery metadata seeded at saga start. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaStepCompletedStatusReducerTests.cs` | Verifies forward progress clears blocked state and advances pending work. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaStepFailedStatusReducerTests.cs` | Verifies failed steps retain pending recovery metadata. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaCompensatingStatusReducerTests.cs` | Verifies compensation transitions reset blocked state and pending direction. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaCompensatedStatusReducerTests.cs` | Verifies terminal compensation clears pending recovery metadata and resets disposition. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaCompletedStatusReducerTests.cs` | Verifies successful completion clears pending recovery metadata and sets a terminal disposition. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaFailedStatusReducerTests.cs` | Verifies terminal failure clears pending recovery metadata and sets a terminal disposition. |\r\n| `docs/Docusaurus/docs/concepts/sagas-and-orchestration.md` | Updates the core saga concept page to explain recovery-aware step contracts, runtime status, and manual resume surfaces. |\r\n| `docs/Docusaurus/docs/domain-modeling/index.md` | Links the new migration guidance from the Domain Modeling landing page. |\r\n| `docs/Docusaurus/docs/samples/spring-sample/index.md` | Updates the Spring sample overview to call out recovery-aware saga and projection behavior. |\r\n| `docs/Docusaurus/docs/samples/spring-sample/concepts/key-concepts.md` | Refreshes Spring concept mappings to the new step signatures, recovery policies, and runtime-status vocabulary. |\r\n| `docs/Docusaurus/docs/samples/spring-sample/tutorials/building-a-saga.md` | Rewrites the saga tutorial to the current recovery-aware step attributes, execution context, and generated surfaces. |\r\n| `docs/Docusaurus/docs/samples/spring-sample/tutorials/building-projections.md` | Rewrites the projection tutorial to the richer money-transfer status projection and generated recovery metadata. |\r\n\r\n\r\n\r\n### New and Updated Tests\r\n\r\n\r\n\r\n| File | Coverage |\r\n\r\n|------|----------|\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/DefaultStepInfoProvider.cs` | Updates the default step metadata fixture to the new constructor shape. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/DefaultSagaAccessAuthorizerTests.cs` | Verifies the default fingerprint-matching authorizer allows legacy unscoped sagas, allows matching callers, and denies mismatched callers. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/GenericAggregateGrainTests.cs` | Verifies the aggregate grain's new `IRemindable` callback seam ignores missing handlers, delegates recognized ticks, and tolerates declined reminder names. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaInfrastructureReducerTests.cs` | Updates reducer fixtures for enriched step-event metadata while keeping raw saga-state reducers unchanged. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaAbstractionsTests.cs` | Covers recovery attribute values, `SagaStepExecutionContext`, `SagaStepExecutionStarted`, `SagaResumeBlocked`, `SagaStepInfo` invariant enforcement, and saga recovery info registration helpers. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaCompensationFailStep.cs` | Updates compensation helper signature for the new contract. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaCompensationNoCodeStep.cs` | Updates compensation helper signature for the new contract. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaCompensationSkippedStep.cs` | Updates compensation helper signature for the new contract. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaCompensationSuccessStep.cs` | Captures compensation execution context on the step instance so orchestration assertions avoid static shared state. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaFailStep.cs` | Updates step helper signature for the new contract. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaNonCompensatableStep.cs` | Updates step helper signature for the new contract. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaOrchestrationEffectTests.cs` | Verifies runtime execution and compensation contexts, execution-start markers, replayed non-initial `SagaStepExecutionStarted` handling, and attempt metadata propagation using DI-managed step instances instead of static test state. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/ResumeSagaCommandHandlerTests.cs` | Fully covers the internal resume command handler, including blocked/execute/complete/compensate outputs, generated operation identity, validation failures, and unexpected-disposition handling. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaRecoveryCheckpointAccessorTests.cs` | Verifies the checkpoint accessor registration, invalid-input guards, no-event short-circuiting, and latest-snapshot loading behavior. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaRecoveryCoordinatorTests.cs` | Verifies the async recovery coordinator returns conservative no-action/terminal plans when state or checkpoints are missing, short-circuits workflow-mismatch/manual-only reminder cases, executes blocked/step/complete/compensate plans, and propagates command failures. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaRecoveryCheckpointReducerTests.cs` | Rebuilds the checkpoint from saga infrastructure event sequences and verifies registration, forward progress, access-fingerprint persistence/refresh, legacy failed-step metadata normalization, blocked resume reconstruction, compensation progress, and terminal-state clearing. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaRecoveryPlannerTests.cs` | Verifies terminal/no-op, workflow-mismatch, invalid-checkpoint guards, execute, blocked, complete, and compensate planner decisions from saga state plus checkpoint metadata. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaReminderHandlerTests.cs` | Fully covers the saga reminder handler, including unknown reminder names, missing/terminal/checkpoint-missing no-ops, workflow mismatches that emit blocked reminder commands, and actionable reminder execution. |\r\n\r\n| `tests/DomainModeling.Abstractions.L0Tests/SagaRecoveryOptionsTests.cs` | Fully covers the new runtime reminder options contract defaults and configured values. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/GrainReminderManagerTests.cs` | Fully covers the Orleans reminder registry adapter used by saga reminder reconciliation. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaReminderReconcilerTests.cs` | Fully covers reminder registration, overdue scheduling, stale reminder cleanup, terminal/manual-only clearing, and bounded automatic-attempt behavior. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaRecoveryServiceTests.cs` | Fully covers the new public recovery service, including fail-closed raw-state reads, runtime-status dispositions, typed manual resume responses, unauthorized resume handling, caller-fingerprint propagation, and command-failure mapping. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaSuccessStep.cs` | Captures forward execution context on the step instance for deterministic orchestration assertions. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/StartSagaCommandHandlerTests.cs` | Verifies workflow hashing now includes both step-level and saga-level recovery metadata, distinguishes null from literal `\"NONE\"` recovery profiles, and that `SagaStartedEvent` persists the recovery mode/profile plus the initial caller fingerprint. |\r\n\r\n| `tests/DomainModeling.Runtime.L0Tests/SagaRegistrationsTests.cs` | Verifies `AddSagaOrchestration` now also registers the saga reminder reconciler, runtime recovery options, existing recovery services, and the new public recovery service alongside the blocked-resume infrastructure event type. |\r\n\r\n| `tests/Inlet.Gateway.Generators.L0Tests/SagaControllerGeneratorTests.cs` | Verifies generated saga controllers inject the public recovery service and emit the new `runtime-status` and `resume` HTTP routes. |\r\n\r\n| `tests/Inlet.Gateway.Generators.L0Tests/McpSagaToolsGeneratorTests.cs` | Verifies generated saga MCP tools inject the public recovery service and emit the new `*_runtime_status` and `*_resume` tools with the expected MCP behavior flags. |\r\n\r\n| `tests/Inlet.Runtime.Generators.L0Tests/SagaSiloRegistrationGeneratorTests.cs` | Covers saga recovery registration output, diagnostics for missing/unexpected compensation recovery policy, and preservation of explicit unknown enum casts in generated code. |\r\n\r\n| `tests/Inlet.Client.Generators.L0Tests/SagaClientGeneratorsTests.cs` | Verifies generated manual-resume actions, effects, state, reducers, and feature registration for saga client surfaces. |\r\n\r\n| `tests/Inlet.Runtime.Generators.L0Tests/SagaStatusReducersGeneratorTests.cs` | Verifies generated saga-status reducers emit recovery-metadata reducers when projections define the matching fields. |\r\n\r\n| `tests/Inlet.Client.Generators.L0Tests/ProjectionClientDtoGeneratorTests.cs` | Verifies nullable top-level enum projection properties emit the required DTO enums. |\r\n\r\n| `tests/Inlet.Gateway.Generators.L0Tests/ProjectionEndpointsGeneratorTests.cs` | Verifies nullable top-level enum projection properties emit DTO enums and nullable enum mapper casts. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaStepExecutionStartedStatusReducerTests.cs` | Verifies reminder-driven execution-start events project pending work, last-resume metadata, and automatic-attempt counts. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaResumeBlockedStatusReducerTests.cs` | Verifies blocked resume events project operator-visible blocked state and manual-intervention disposition. |\r\n\r\n| `samples/Spring/Spring.Domain.L0Tests/Projections/MoneyTransferStatus/SagaStepCompensatedStatusReducerTests.cs` | Verifies compensation-progress events move the pending compensation cursor and clear blocked state. |\r\n\r\n\r\n\r\n## Quality Gates\r\n\r\n\r\n\r\n- [x] Build passes with zero warnings.\r\n\r\n- [x] All existing tests pass.\r\n\r\n- [x] New tests added for new functionality.\r\n\r\n- [x] Focused client generator validation passed via `pwsh ./eng/src/agent-scripts/test-project-quality.ps1 -TestProject Inlet.Client.Generators.L0Tests -SkipMutation` (`95` tests passed, `0` failed, coverage `64.78%`).\r\n\r\n- [x] Focused runtime validation passed via `pwsh ./eng/src/agent-scripts/test-project-quality.ps1 -TestProject DomainModeling.Runtime.L0Tests -SkipMutation` (`455` tests passed, `0` failed, coverage `61.63%`).\r\n\r\n- [x] Focused gateway generator validation passed via `pwsh ./eng/src/agent-scripts/test-project-quality.ps1 -TestProject Inlet.Gateway.Generators.L0Tests -SkipMutation` (`180` tests passed, `0` failed, coverage `85.97%`).\r\n\r\n- [x] Focused runtime generator validation passed via `dotnet test tests/Inlet.Runtime.Generators.L0Tests/Inlet.Runtime.Generators.L0Tests.csproj -c Release --no-restore` (`61` tests passed, `0` failed).\r\n\r\n- [x] Spring domain recovery validation passed via `dotnet test samples/Spring/Spring.Domain.L0Tests/Spring.Domain.L0Tests.csproj -c Release --no-restore` (`162` tests passed, `0` failed).\r\n\r\n- [x] Spring sample builds passed via `dotnet build samples/Spring/Spring.Client/Spring.Client.csproj -c Release --no-restore`, `dotnet build samples/Spring/Spring.Gateway/Spring.Gateway.csproj -c Release --no-restore`, and `dotnet build samples/Spring/Spring.Runtime/Spring.Runtime.csproj -c Release --no-restore`.\r\n\r\n- [x] Docusaurus docs build passed via `npm run build` from `docs/Docusaurus` after restoring local dependencies with `npm ci`.\r\n- [x] Documentation updated and validated with the public migration/tutorial refresh.\r\n\r\n\r\n\r\n## Migration Notes\r\n\r\n\r\n\r\nThis is a breaking contract change for saga step authors.\r\n\r\nThe branch now also ships a public migration guide at `docs/Docusaurus/docs/domain-modeling/migration/upgrade-saga-code-from-before-0-0-1-to-0-0-1.md` that documents preparation, source updates, validation, and rollback cautions for older saga code.\r\n\r\n\r\n\r\n```csharp\r\n\r\n// Before\r\n\r\n[SagaStep(0)]\r\n\r\ninternal sealed class WithdrawFromSourceStep : ISagaStep, ICompensatable\r\n\r\n{\r\n\r\n public Task ExecuteAsync(MoneyTransferSagaState state, CancellationToken cancellationToken) => ...;\r\n\r\n public Task CompensateAsync(MoneyTransferSagaState state, CancellationToken cancellationToken) => ...;\r\n\r\n}\r\n\r\n\r\n\r\n// After\r\n\r\n[SagaStep(\r\n\r\n 0,\r\n\r\n SagaStepRecoveryPolicy.ManualOnly,\r\n\r\n CompensationRecoveryPolicy = SagaStepRecoveryPolicy.ManualOnly)]\r\n\r\ninternal sealed class WithdrawFromSourceStep : ISagaStep, ICompensatable\r\n\r\n{\r\n\r\n public Task ExecuteAsync(\r\n\r\n MoneyTransferSagaState state,\r\n\r\n SagaStepExecutionContext context,\r\n\r\n CancellationToken cancellationToken) => ...;\r\n\r\n\r\n\r\n public Task CompensateAsync(\r\n\r\n MoneyTransferSagaState state,\r\n\r\n SagaStepExecutionContext context,\r\n\r\n CancellationToken cancellationToken) => ...;\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n## Related Issues\r\n\r\n\r\n\r\n- Related to the saga reminder resume feature work.\r\n\r\n\r\n\r\n\r\n\r\n## Latest Update ÔÇö commit `57325372`\r\n\r\nThis push completes the remaining runtime and Spring host wiring for saga reminder recovery.\r\n\r\n### What changed in this update\r\n\r\n- Made `AddSagaRecoveryServices()` gateway-safe by ensuring the Brooks and snapshot grain-factory dependencies are registered for the recovery-service path.\r\n- Made `AddEventSourcingByService()` idempotent so the gateway recovery registration can compose it safely.\r\n- Added Spring gateway saga-access propagation, startup validation, and health reporting via:\r\n - `SpringSagaAccessContextProvider`\r\n - `SpringSagaAccessRequestContextFilter`\r\n - `SpringSagaAccessOptionsValidator`\r\n - `SpringSagaAuthorizationHealthCheck`\r\n - `SpringSagaGatewayRegistrations`\r\n- Added Spring runtime reminder validation and readiness reporting via:\r\n - `SpringSagaReminderOptionsValidator`\r\n - `SpringSagaReminderHealthCheck`\r\n - runtime `/health` reminder payloads\r\n - AppHost wiring for Azure Table reminder dependencies and `ForceManualOnly` override propagation\r\n- Added/updated regression coverage across runtime, Brooks registration, Spring L2 health, and auth-proof runtime-status/manual-resume authorization.\r\n\r\n### Validation added in this update\r\n\r\n- `dotnet test samples/Spring/Spring.L2Tests/Spring.L2Tests.csproj -c Release --filter \"FullyQualifiedName~MississippiSamples.Spring.L2Tests.HealthIntegrationTests|FullyQualifiedName~MississippiSamples.Spring.L2Tests.AuthProofAuthorizationIntegrationTests|FullyQualifiedName~MississippiSamples.Spring.L2Tests.BankAccountIntegrationTests\"` ÔåÆ `19 passed`\r\n- `pwsh ./clean-up-targeted.ps1 -BaseRef HEAD` ÔåÆ passed\r\n- `dotnet build ./mississippi.slnx --configuration Release --no-restore --no-incremental --warnaserror` ÔåÆ passed\r\n- `dotnet build ./samples.slnx --configuration Release --no-restore --no-incremental --warnaserror` ÔåÆ passed\r\n- `pwsh ./go.ps1 -IncludeMutation` ÔåÆ passed\r\n\r\n### File groups touched in this update\r\n\r\n- `samples/Spring/Spring.AppHost/Program.cs`, `samples/Spring/Spring.Runtime/*`, `samples/Spring/Spring.Gateway/*` ÔÇö host wiring, readiness, access propagation, and reminder controls\r\n- `src/DomainModeling.Runtime/*`, `src/DomainModeling.Abstractions/*` ÔÇö recovery planning, checkpoint/state services, reminder reconciliation, and access contracts\r\n- `src/Inlet.*Generators/*`, `src/Inlet.*/*`, `src/Sdk.*/*` ÔÇö generated runtime-status/manual-resume surface propagation and lockfile updates\r\n- `tests/DomainModeling.Runtime.L0Tests/*`, `tests/Brooks.Runtime.L0Tests/*`, `samples/Spring/Spring.L2Tests/*`, `samples/Spring/Spring.Domain.L0Tests/*` ÔÇö regression and integration coverage for recovery flows\r\n\r\n\r\n## Latest Update — commit `a4a20dcb`\r\n\r\nThis follow-up commit clears the SonarCloud quality-gate findings introduced by the saga reminder recovery work:\r\n\r\n- extracts shared constants for repeated generated literals in the saga client, gateway, and runtime generators\r\n- reduces cognitive complexity in `SagaRecoveryPlanner.Plan(...)` with small helper extractions while preserving behavior\r\n- reduces cognitive complexity in `SagaSiloRegistrationGenerator.TryGetStepInfo(...)` with helper extraction for policy/state resolution\r\n- keeps the Spring reminder recovery slice functionally unchanged while making the PR friendlier to static analysis\r\n\r\nValidation completed on this commit:\r\n\r\n- `dotnet build .\\\\mississippi.slnx --configuration Release --no-restore --no-incremental --warnaserror`\r\n- `dotnet build .\\\\samples.slnx --configuration Release --no-restore --no-incremental --warnaserror`\r\n- `pwsh ./clean-up-targeted.ps1 -BaseRef HEAD`\r\n- `pwsh ./go.ps1 -IncludeMutation`\r\n", "nwo": "Gibbs-Morris/mississippi", "language": "C#", "repo_size_kb": 12547, "lines_added": 13892, "lines_removed": 784, "files_changed": 177 }, { "repo": "https://github.com/Hermione-Granger-1176/artifacts", "pr_number": 24, "pr_url": "https://github.com/Hermione-Granger-1176/artifacts/pull/24", "base": "18e6f1f143c9d2b5374eb958d2bca7b059c7617d", "head": "5d880a71d4b9f4c3d7ac8b16e925dcaeb42d984b", "title": "Harden security across workflows, scripts, HTML, and JS", "body": "## Summary\n\n- Pass CI tokens and inputs through `env:` blocks instead of direct `${{ }}` shell interpolation in `ci-setup` action\n- Add path containment checks for CSS import inlining (`prepare_site.py`) and thumbnail manifest writes (`generate_thumbnails.py`)\n- Add `Content-Security-Policy` and `Referrer-Policy` meta tags to all HTML pages and the scaffold template\n- Replace root gallery inline `