You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**Goal:** Extend gsd-orchestrator from a single-repo issue-to-PR automator into a multi-repo, triage-aware, test-generating autonomous engineering platform.
**Goal:** Close the gap between "tests exist" and "CI actually runs them," fill xUnit coverage across 6 untested states, version the checkpoint schema, and complete portfolio polish.
55
+
56
+
**Phases:** 17-19 (in progress)
42
57
43
58
**Target features:**
44
-
- Robustness foundation (structured logging, unit tests, circuit breaker)
Copy file name to clipboardExpand all lines: .planning/PROJECT.md
+8-7Lines changed: 8 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,15 +1,16 @@
1
1
# Enterprise GitHub Portfolio + gsd-orchestrator
2
2
3
-
## Current Milestone: v3.0 — gsd-orchestrator Feature Expansion
3
+
## Current Milestone: v4.0 — Quality Hardening
4
4
5
-
**Goal:**Extend gsd-orchestrator from a single-repo issue-to-PR automator into a multi-repo, triage-aware, test-generating autonomous engineering platform.
5
+
**Goal:**Close the gap between "tests exist" and "CI actually runs them," fill xUnit coverage holes across 6 untested state classes, version the checkpoint schema for forward compatibility, and complete remaining portfolio polish.
6
6
7
7
**Target features:**
8
-
- Robustness foundation (Serilog, xUnit, circuit breaker)
-[ ]**CIQUAL-01**: CI workflow runs `dotnet test` on every push/PR — not just build
116
+
-[ ]**CIQUAL-02**: Coverlet coverage collected in CI — TRX report + XML coverage artifact uploaded
117
+
-[ ]**CIQUAL-03**: Coverage badge in README showing current line coverage %
118
+
119
+
### Test Coverage (TESTCOV)
120
+
121
+
-[ ]**TESTCOV-01**: `AnalyzingState` has dedicated xUnit test class (≥ 3 [Fact] tests covering Happy Path, Claude failure, and cancellation)
122
+
-[ ]**TESTCOV-02**: `BranchingState` has dedicated xUnit test class (≥ 3 [Fact] tests)
123
+
-[ ]**TESTCOV-03**: `CommittingState` has dedicated xUnit test class (≥ 3 [Fact] tests)
124
+
-[ ]**TESTCOV-04**: `DocumentingState` has dedicated xUnit test class (≥ 3 [Fact] tests)
125
+
-[ ]**TESTCOV-05**: `EditingState` has dedicated xUnit test class (≥ 3 [Fact] tests)
126
+
-[ ]**TESTCOV-06**: `PrCreatingState` has dedicated xUnit test class (≥ 3 [Fact] tests)
127
+
128
+
### Checkpoint Hardening (CHKPT)
129
+
130
+
-[ ]**CHKPT-01**: `GsdWorkflowContext` (WorkflowModels.cs) includes `SchemaVersion` string property, serialized to checkpoint JSON
131
+
-[ ]**CHKPT-02**: `FileCheckpointStore.LoadAsync` checks `SchemaVersion` on load — logs warning and returns null (starts fresh) on version mismatch
132
+
133
+
### Portfolio Polish (POLISH)
134
+
135
+
-[ ]**POLISH-01**: GitHub topics applied to all CAS flagship repos (gsd-orchestrator, Promptimprover, autogen) — verified via `gh repo view --json repositoryTopics`
136
+
-[ ]**POLISH-02**: OgeonX-Ai personal profile README exists in `OgeonX-Ai/.github` repo at `profile/README.md`, linking to Coding-Autopilot-System org and highlighting gsd-orchestrator, Promptimprover, autogen as system
137
+
111
138
## v1 Deferred (still out of scope for v2)
112
139
113
-
- Test suites for gsd-orchestrator, Promptimprover, autogen
Copy file name to clipboardExpand all lines: .planning/ROADMAP.md
+87Lines changed: 87 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -438,3 +438,90 @@ Plans:
438
438
| MULTI-01–04 | 16 |
439
439
440
440
**13 v3 requirements across 5 phases**
441
+
442
+
---
443
+
444
+
# Milestone 4.0 — Quality Hardening
445
+
446
+
**Goal:** CI pipeline enforces test execution and coverage reporting; all state classes have dedicated unit tests; checkpoint format is schema-versioned; flagship repos have correct discovery metadata.
-[ ] 18-03-PLAN.md — Add SchemaVersion to GsdWorkflowContext in WorkflowModels.cs; add version check to FileCheckpointStore.LoadAsync; write 2 unit tests verifying mismatch handling (CHKPT-01, CHKPT-02)
486
+
487
+
**Success Criteria:**
488
+
-`dotnet test` runs 53+ tests (35 existing + 18 new state tests + 2 checkpoint tests) all green
489
+
- Each new *StateTests.cs has at minimum: HappyPath, ClaudeFailure, Cancellation [Fact] methods
490
+
-`FileCheckpointStore` logs a warning and returns null when checkpoint SchemaVersion != current
491
+
492
+
**Depends on:** Phase 17 (CI must collect coverage before new tests are meaningful as metrics)
**Goal:** All CAS flagship repos have correct GitHub topics; OgeonX-Ai personal profile README is live.
500
+
501
+
**Requirements:** POLISH-01, POLISH-02
502
+
503
+
**Plans:** 2 plans
504
+
505
+
Plans:
506
+
-[ ] 19-01-PLAN.md — Apply GitHub topics to gsd-orchestrator, Promptimprover, autogen via `gh repo edit --add-topic`; verify via `gh repo view --json repositoryTopics` (POLISH-01)
507
+
-[ ] 19-02-PLAN.md — Create/update OgeonX-Ai personal profile README at OgeonX-Ai/.github/profile/README.md — links to Coding-Autopilot-System org, highlights gsd-orchestrator/Promptimprover/autogen as a system (POLISH-02)
508
+
509
+
**Success Criteria:**
510
+
-`gh repo view Coding-Autopilot-System/gsd-orchestrator --json repositoryTopics` returns at least 5 topics including `autonomous-agent`, `dotnet`, `state-machine`
511
+
- github.com/OgeonX-Ai shows a profile README
512
+
- Profile README includes a "Part of Coding-Autopilot-System" section linking to the org
513
+
514
+
**Depends on:** Phase 16 (Milestone 3.0 complete — stable feature set to describe in profile)
Copy file name to clipboardExpand all lines: .planning/STATE.md
+24-17Lines changed: 24 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,30 +1,37 @@
1
1
---
2
2
gsd_state_version: 1.0
3
-
milestone: v3.0.0
4
-
milestone_name: milestone
5
-
current_plan: 1
6
-
status: milestone_complete
7
-
last_updated: 2026-06-05T15:56:20.287Z
3
+
milestone: v4.0.0
4
+
milestone_name: Quality Hardening
5
+
current_plan: 0
6
+
status: planning
7
+
last_updated: 2026-06-14T00:00:00Z
8
8
progress:
9
-
total_phases: 16
10
-
completed_phases: 15
11
-
total_plans: 45
12
-
completed_plans: 45
13
-
percent: 94
14
-
stopped_at: Milestone complete (Phase 16 was final phase)
9
+
total_phases: 3
10
+
completed_phases: 0
11
+
total_plans: 0
12
+
completed_plans: 0
13
+
percent: 0
14
+
stopped_at: Not started — defining roadmap
15
15
---
16
16
17
-
# Project State — gsd-orchestrator Feature Expansion (Milestone 3.0)
17
+
# Project State — Quality Hardening (Milestone 4.0)
18
18
19
-
Last activity: 2026-06-10 - Completed quick task 260610-ppo: Fix PR #6 README workflow state diagram responsibilities to match actual code including Triaging and TestGenerating and render success sample cleanly
19
+
Last activity: 2026-06-14 — Milestone v4.0 started
20
+
21
+
## Current Position
22
+
23
+
Phase: Not started (defining roadmap)
24
+
Plan: —
25
+
Status: Defining requirements
26
+
Last activity: 2026-06-14 — Milestone v4.0 started
The test project already had `coverlet.collector` v10.0.1 as a `PackageReference`, so no `.csproj` changes were needed.
19
+
20
+
### 17-02: Add coverage badge to README
21
+
22
+
Inserted a `` badge on the line immediately after the existing CI badge in `README.md`. Uses a static shields.io badge reflecting the current 35-test suite. No external coverage service (Codecov/Coveralls) integration required.
# Phase 18 — State Test Coverage + Checkpoint Hardening
2
+
3
+
## Summary
4
+
5
+
Phase 18 adds xUnit test coverage for 6 previously-untested workflow states and hardens the
6
+
checkpoint store with schema version validation.
7
+
8
+
## What Was Done
9
+
10
+
### Plan 18-01: Wave 1 — AnalyzingStateTests, BranchingStateTests, EditingStateTests
11
+
12
+
Created `src/GsdOrchestrator.Tests/States/` directory with 3 new test classes:
13
+
14
+
| File | Tests |
15
+
|---|---|
16
+
|`States/AnalyzingStateTests.cs`| 5 tests |
17
+
|`States/BranchingStateTests.cs`| 5 tests |
18
+
|`States/EditingStateTests.cs`| 5 tests |
19
+
20
+
Each class follows the NSubstitute pattern from `TriagingStateTests.cs`:
21
+
-`McpToolDispatcher` built with a pass-through Polly registry
22
+
-`NullLogger<T>` for all logging dependencies
23
+
-`IMcpClient` mocked via `Substitute.For<IMcpClient>()`
24
+
-`IChatClient` mocked for states that use LLM
25
+
26
+
Key test patterns per state:
27
+
28
+
**AnalyzingState** — LLM returns valid `AnalysisPlan` JSON → transitions to `Branching`; all-bad-JSON → throws `InvalidOperationException`; `search_code` failure is swallowed (best-effort); cancellation via LLM mock.
29
+
30
+
**BranchingState** — new branch created → `WasResumed=false`; existing branch detected → `WasResumed=true`, `create_branch` not called; MCP failure on `get_branch` propagates; cancellation via MCP mock.
31
+
32
+
**EditingState** — LLM calls `write_file` → `create_or_update_file` called, `EditContext` populated, transitions to `TestGenerating`; LLM never calls `write_file` → no commit, still transitions; cancellation via MCP mock.
33
+
34
+
### Plan 18-02: Wave 2 — CommittingStateTests, DocumentingStateTests, PrCreatingStateTests
35
+
36
+
Created 3 more test classes in the same directory:
37
+
38
+
| File | Tests |
39
+
|---|---|
40
+
|`States/CommittingStateTests.cs`| 6 tests |
41
+
|`States/DocumentingStateTests.cs`| 6 tests |
42
+
|`States/PrCreatingStateTests.cs`| 6 tests |
43
+
44
+
Key test patterns per state:
45
+
46
+
**CommittingState** — `get_branch` SHA captured in `CommitContext`; commit URL formatted correctly; `get_branch` called with correct branch name; MCP failure propagates; cancellation via MCP mock.
47
+
48
+
**DocumentingState** — `DocumentingState` requires `IConfiguration` (mocked for `GSD_AUTO_MERGE`); both `docs/github-mcp-tools.md` and `CHANGELOG.md` are committed; `merge_pull_request` called only when auto-merge enabled; existing CHANGELOG reads existing SHA.
49
+
50
+
**PrCreatingState** — no existing PR → `create_pull_request` called, PR number/URL stored; existing PR found → `create_pull_request` NOT called, existing PR number used; MCP failure propagates; cancellation via MCP mock.
51
+
52
+
### Plan 18-03: Checkpoint Schema Versioning
53
+
54
+
**`WorkflowModels.cs`** — Added `SchemaVersion` string property to `GsdWorkflowContext` with default `"1.0"`. This serializes automatically to/from checkpoint JSON.
55
+
56
+
**`FileCheckpointStore.cs`** — Added `ValidateSchemaVersion` private method called after deserialization in `LoadAsync`. On mismatch, logs warning and returns `null` (triggering fresh start). Added `CurrentSchemaVersion = "1.0"` constant.
57
+
58
+
**`States/CheckpointStoreTests.cs`** — 4 tests:
59
+
-`LoadAsync_CompatibleSchemaVersion_ReturnsContext` — writes raw JSON with `schemaVersion: "1.0"`, verifies load succeeds
60
+
-`LoadAsync_IncompatibleSchemaVersion_ReturnsNull` — writes raw JSON with `schemaVersion: "2.0"`, verifies null returned
61
+
-`SaveAsync_ThenLoadAsync_RoundTripsContext` — save + load round trip
0 commit comments