|
| 1 | +## Goal |
| 2 | + |
| 3 | +Implement epic `#12` on one delivery branch by covering its direct child issues `#24`, `#25`, `#26`, and `#27` in a single tested runtime slice, while keeping the Uno app presentation-only and keeping the first Orleans host cut on localhost clustering with in-memory Orleans storage/reminders. |
| 4 | + |
| 5 | +## Scope |
| 6 | + |
| 7 | +In scope: |
| 8 | +- issue `#24`: embedded Orleans silo inside the desktop host with the initial core grains |
| 9 | +- issue `#25`: Microsoft Agent Framework integration as the orchestration runtime on top of the embedded host |
| 10 | +- issue `#26`: explicit grain traffic policy and visibility using `ManagedCode.Orleans.Graph` |
| 11 | +- issue `#27`: session persistence, replay, checkpointing, and resume for local-first runtime flows |
| 12 | +- runtime-facing contracts, deterministic orchestration seams, docs, and tests needed to prove the full epic behavior |
| 13 | + |
| 14 | +Out of scope: |
| 15 | +- related but non-child issues such as `#50`, `#69`, and `#77` |
| 16 | +- provider-specific live adapters beyond the existing deterministic or environment-gated paths |
| 17 | +- remote Orleans clustering or external durable storage providers |
| 18 | +- replacing the current Uno shell with a different UI model |
| 19 | + |
| 20 | +## Constraints And Risks |
| 21 | + |
| 22 | +- The app project must stay presentation-only; runtime hosting, orchestration, graph policy, and persistence logic belong in separate DLLs. |
| 23 | +- The first Orleans host cut must use `UseLocalhostClustering`, in-memory grain storage, and in-memory reminders. |
| 24 | +- Durable session replay and resume for `#27` must not force a remote or durable Orleans cluster; if needed, it must persist serialized session/checkpoint data outside Orleans storage. |
| 25 | +- All added behavior must be covered by automated tests and the full repo validation sequence must stay green. |
| 26 | +- Any new dependencies must be the minimum official set needed for the runtime slice and must remain compatible with the pinned SDK and current `LangVersion`. |
| 27 | + |
| 28 | +## Testing Methodology |
| 29 | + |
| 30 | +- Cover host lifecycle, grain registration, traffic policy, orchestration execution, session serialization, checkpoint persistence, replay, and resume through real runtime boundaries. |
| 31 | +- Keep deterministic in-repo orchestration available for CI so the epic remains testable without external provider CLIs or auth. |
| 32 | +- Add regression tests for both happy-path and negative-path flows: |
| 33 | + - invalid runtime requests |
| 34 | + - traffic-policy violations |
| 35 | + - missing or corrupt persisted session state |
| 36 | + - restart/resume behavior |
| 37 | +- Keep `DotPilot.UITests` in the final pass because browser and app composition must remain green even when runtime hosting expands. |
| 38 | +- Require every direct child issue in scope to map to at least one explicit automated test flow. |
| 39 | + |
| 40 | +## Ordered Plan |
| 41 | + |
| 42 | +- [ ] Confirm the exact direct-child issue set for epic `#12` and keep unrelated issues out of the PR scope. |
| 43 | +- [ ] Add or restore the embedded Orleans host slice from the cleanest available implementation path for issue `#24`. |
| 44 | +- [ ] Add the minimum runtime dependencies and contracts for Microsoft Agent Framework orchestration for issue `#25`. |
| 45 | +- [ ] Implement the first orchestration runtime path on top of the deterministic runtime flow and Orleans-backed runtime boundaries. |
| 46 | +- [ ] Add explicit grain traffic policy modeling and enforcement for issue `#26`, including runtime-visible policy information and denial behavior. |
| 47 | +- [ ] Add local-first session persistence, replay, checkpointing, and resume for issue `#27` without changing Orleans clustering/storage topology. |
| 48 | +- [ ] Update runtime docs, feature docs, ADR references, and architecture diagrams so the epic boundaries and flows are explicit. |
| 49 | +- [ ] Add or update automated tests for every covered issue: |
| 50 | + - host lifecycle and grain registration |
| 51 | + - orchestration execution and session serialization |
| 52 | + - traffic-policy allow and deny flows |
| 53 | + - checkpoint persistence, replay, and resume |
| 54 | +- [ ] Run the full repo validation sequence: |
| 55 | + - `dotnet build DotPilot.slnx -warnaserror -m:1 -p:BuildInParallel=false` |
| 56 | + - `dotnet test DotPilot.slnx` |
| 57 | + - `dotnet format DotPilot.slnx --verify-no-changes` |
| 58 | + - `dotnet test DotPilot.Tests/DotPilot.Tests.csproj --settings DotPilot.Tests/coverlet.runsettings --collect:"XPlat Code Coverage"` |
| 59 | +- [ ] Commit the epic branch implementation and open one PR that closes epic `#12` and its covered child issues correctly. |
| 60 | + |
| 61 | +## Full-Test Baseline |
| 62 | + |
| 63 | +- [x] `dotnet build DotPilot.slnx -warnaserror -m:1 -p:BuildInParallel=false` |
| 64 | + - Passed with `0` warnings and `0` errors. |
| 65 | +- [x] `dotnet test DotPilot.slnx` |
| 66 | + - Passed with `52` unit tests and `22` UI tests. |
| 67 | + |
| 68 | +## Tracked Failing Tests |
| 69 | + |
| 70 | +- [x] No baseline failures before epic implementation. |
| 71 | + |
| 72 | +## Done Criteria |
| 73 | + |
| 74 | +- The branch covers direct child issues `#24`, `#25`, `#26`, and `#27` with real implementation, not only planning artifacts. |
| 75 | +- The Uno app remains presentation-only and browser-safe. |
| 76 | +- Orleans stays on localhost clustering and in-memory storage/reminders. |
| 77 | +- Orchestration, traffic policy, and session persistence flows are automated and green. |
| 78 | +- The final PR references the epic and child issues with correct GitHub closing semantics. |
0 commit comments