@harness-engineering/cli 1.22.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +2 -2
- package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +5 -5
- package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +18 -14
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +2 -2
- package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/codex/harness-execution/SKILL.md +1 -1
- package/dist/agents/skills/codex/harness-roadmap/SKILL.md +5 -5
- package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +18 -14
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +2 -2
- package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/cursor/harness-execution/SKILL.md +1 -1
- package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +5 -5
- package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +18 -14
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +2 -2
- package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +5 -5
- package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +18 -14
- package/dist/{agents-md-PM7LO74M.js → agents-md-GLKJSGKT.js} +2 -2
- package/dist/{architecture-OVOCDTI6.js → architecture-EDSBAGR4.js} +3 -3
- package/dist/{assess-project-R2OZIDDS.js → assess-project-CEDY4JU3.js} +1 -1
- package/dist/bin/harness-mcp.js +14 -14
- package/dist/bin/harness.js +16 -16
- package/dist/{check-phase-gate-7JQ6EW5R.js → check-phase-gate-N3DTKFCZ.js} +4 -4
- package/dist/{chunk-SOTTK27D.js → chunk-26AUZBV4.js} +19 -19
- package/dist/{chunk-5FBWWMY2.js → chunk-2LAEDVOC.js} +6 -6
- package/dist/{chunk-TEZI27SA.js → chunk-5SWE24IG.js} +1 -1
- package/dist/{chunk-PUOMFNRO.js → chunk-A4AI3H3R.js} +1 -1
- package/dist/{chunk-W6MPLFXU.js → chunk-AIBAYANF.js} +3 -3
- package/dist/{chunk-ZEIEUCZL.js → chunk-AKVG4MMZ.js} +9 -9
- package/dist/{chunk-J7W4LTRK.js → chunk-ENA4O4WD.js} +2 -2
- package/dist/{chunk-GRJ7A4WT.js → chunk-GJRUIXUK.js} +1 -1
- package/dist/{chunk-5QTWFO24.js → chunk-HT4VPPB4.js} +8 -8
- package/dist/{chunk-B4WHXHF7.js → chunk-LIWGCYON.js} +1 -1
- package/dist/{chunk-FSLFBLYW.js → chunk-QUKH6QCJ.js} +7 -7
- package/dist/{chunk-DJEBBENF.js → chunk-SM22U22L.js} +95 -81
- package/dist/{chunk-DXYOAQQC.js → chunk-TD6MQUV2.js} +1 -1
- package/dist/{chunk-IK5GSLW6.js → chunk-TJ6NLLAY.js} +4 -4
- package/dist/{chunk-ASS5TD2Y.js → chunk-TLDCCPUZ.js} +1 -1
- package/dist/{chunk-U44JNY3Y.js → chunk-XDAIFVGC.js} +1 -1
- package/dist/{ci-workflow-OTTEERPF.js → ci-workflow-LE3QF4FP.js} +2 -2
- package/dist/{dist-IA6XYKNO.js → dist-OEXTQQZC.js} +1 -1
- package/dist/{dist-LCR2IO7U.js → dist-YIKUBJLQ.js} +2 -2
- package/dist/{docs-CHAYSGOP.js → docs-F5G7NAFF.js} +4 -4
- package/dist/{engine-4MY2U5RZ.js → engine-LX5RVGXN.js} +2 -2
- package/dist/{entropy-AKSZG7G5.js → entropy-A5Q2USYX.js} +3 -3
- package/dist/{feedback-QGCSW7SB.js → feedback-2EU25RIW.js} +1 -1
- package/dist/{generate-agent-definitions-KU6X2UQN.js → generate-agent-definitions-HNJHO5YQ.js} +2 -2
- package/dist/{graph-loader-FJN4H7Y4.js → graph-loader-XULF5QF7.js} +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.js +16 -16
- package/dist/{loader-AV5XEMER.js → loader-GWIEW4HM.js} +2 -2
- package/dist/{mcp-LWHVQRG7.js → mcp-ID3LR6JB.js} +14 -14
- package/dist/{performance-ETZVXXGQ.js → performance-YAY2A6A6.js} +4 -4
- package/dist/{review-pipeline-3ZS3GJSP.js → review-pipeline-YD4WI3JM.js} +1 -1
- package/dist/{runtime-KQTJRK3H.js → runtime-UJ4YO4CA.js} +2 -2
- package/dist/{security-LJCLZES6.js → security-IBSUKMVD.js} +1 -1
- package/dist/{validate-4IA5RPEX.js → validate-NHXWKMCR.js} +3 -3
- package/dist/{validate-cross-check-VX2BAHQI.js → validate-cross-check-R3GV2MLM.js} +2 -2
- package/package.json +2 -2
|
@@ -531,7 +531,7 @@ INIT → ASSESS → PLAN → APPROVE_PLAN → EXECUTE → VERIFY → REVIEW →
|
|
|
531
531
|
|
|
532
532
|
4. **Clear scratchpad for this phase.** Call `clearScratchpad({ session: sessionSlug, phase: phaseName, projectPath: projectPath })` to delete ephemeral research files for the completed phase. This frees disk space and prevents stale scratchpad data from leaking into future phases.
|
|
533
533
|
|
|
534
|
-
5. **Sync roadmap.** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true`. This reflects the just-completed phase in the roadmap (e.g., updating the feature from `planned` to `in-progress`). If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core. Skip silently if no roadmap exists. Do not use `force_sync: true` — the human-always-wins rule applies.
|
|
534
|
+
5. **Sync roadmap.** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true`. This reflects the just-completed phase in the roadmap (e.g., updating the feature from `planned` to `in-progress`). If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." Skip silently if no roadmap exists. Do not use `force_sync: true` — the human-always-wins rule applies.
|
|
535
535
|
|
|
536
536
|
6. **Write session summary.** Update the session summary to reflect the completed phase:
|
|
537
537
|
|
|
@@ -671,7 +671,7 @@ INIT → ASSESS → PLAN → APPROVE_PLAN → EXECUTE → VERIFY → REVIEW →
|
|
|
671
671
|
|
|
672
672
|
6. **Check if pruning is needed.** Call `countLearningEntries(projectPath)`. If the count exceeds 30, suggest: "Global learnings.md has {count} entries (threshold: 30). Run `harness learnings prune` to analyze patterns and archive old entries."
|
|
673
673
|
|
|
674
|
-
7. **Update roadmap to done.** If `docs/roadmap.md` exists and the current spec maps to a roadmap feature, call `manage_roadmap` with action `update` to set the feature status to `done`. Derive the feature name from the spec title (H1 heading) or the session's `handoff.json` `summary` field. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `updateFeature()` from core. Skip silently if no roadmap exists or if the feature is not found. Do not use `force_sync: true`.
|
|
674
|
+
7. **Update roadmap to done.** If `docs/roadmap.md` exists and the current spec maps to a roadmap feature, call `manage_roadmap` with action `update` to set the feature status to `done`. Derive the feature name from the spec title (H1 heading) or the session's `handoff.json` `summary` field. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `updateFeature()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." Skip silently if no roadmap exists or if the feature is not found. Do not use `force_sync: true`.
|
|
675
675
|
|
|
676
676
|
8. **Write final session summary.** Update the session summary to reflect completion:
|
|
677
677
|
|
|
@@ -161,7 +161,7 @@ These keywords flow into the `handoff.json` `contextKeywords` field when the spe
|
|
|
161
161
|
- Call `manage_roadmap` with action `add`, `status: "planned"`, `milestone: "Current Work"`, and the spec path. Include a one-line summary from the spec overview.
|
|
162
162
|
- If the feature already exists in the roadmap (duplicate name), skip silently — the feature was likely added manually or by a prior brainstorming session.
|
|
163
163
|
- Log: `"Added '<feature-name>' to roadmap as planned"` (informational, not a prompt).
|
|
164
|
-
- If `manage_roadmap` is unavailable, fall back to direct file manipulation using `parseRoadmap`/`serializeRoadmap` from core to read, modify, and write `docs/roadmap.md`.
|
|
164
|
+
- If `manage_roadmap` is unavailable, fall back to direct file manipulation using `parseRoadmap`/`serializeRoadmap` from core to read, modify, and write `docs/roadmap.md`. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
165
165
|
- If no roadmap exists, skip this step silently.
|
|
166
166
|
|
|
167
167
|
7. **Write handoff and suggest transition.** After the human approves the spec:
|
|
@@ -293,7 +293,7 @@ Skipping this step means subsequent graph queries (impact analysis, dependency h
|
|
|
293
293
|
|
|
294
294
|
This overwrites any previous summary for this session. The index.md is updated automatically.
|
|
295
295
|
|
|
296
|
-
6. **Sync roadmap (mandatory when present).** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true` to update linked feature statuses from the just-completed execution state. Do not use `force_sync: true` — the human-always-wins rule applies. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core. If no roadmap exists, skip silently.
|
|
296
|
+
6. **Sync roadmap (mandatory when present).** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true` to update linked feature statuses from the just-completed execution state. Do not use `force_sync: true` — the human-always-wins rule applies. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." If no roadmap exists, skip silently.
|
|
297
297
|
|
|
298
298
|
7. **Learnings are append-only.** Never edit or delete previous learnings. They are a chronological record.
|
|
299
299
|
|
|
@@ -92,7 +92,7 @@ Unmatched plans: N (flag for review)
|
|
|
92
92
|
- One H2 section per milestone
|
|
93
93
|
- One H3 section per feature with 5 fields: `Status`, `Spec`, `Summary`, `Blockers`, `Plan`
|
|
94
94
|
|
|
95
|
-
2. Write via `manage_roadmap` MCP tool if available. If MCP is unavailable, write directly using the roadmap markdown format:
|
|
95
|
+
2. Write via `manage_roadmap` MCP tool if available. If MCP is unavailable, write directly using the roadmap markdown format and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
96
96
|
|
|
97
97
|
```markdown
|
|
98
98
|
---
|
|
@@ -173,7 +173,7 @@ Wait for confirmation before proceeding.
|
|
|
173
173
|
|
|
174
174
|
#### Phase 3: WRITE -- Add Feature to Roadmap
|
|
175
175
|
|
|
176
|
-
1. Add via `manage_roadmap add` MCP tool if available. If MCP is unavailable, parse the roadmap, add the feature to the specified milestone, and serialize back.
|
|
176
|
+
1. Add via `manage_roadmap add` MCP tool if available. If MCP is unavailable, parse the roadmap, add the feature to the specified milestone, and serialize back. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
177
177
|
2. If the milestone is `[NEW]`: create the milestone section, then add the feature.
|
|
178
178
|
3. Write to `docs/roadmap.md`.
|
|
179
179
|
|
|
@@ -276,7 +276,7 @@ Wait for confirmation before proceeding.
|
|
|
276
276
|
|
|
277
277
|
#### Phase 3: WRITE -- Apply Changes
|
|
278
278
|
|
|
279
|
-
1. Apply via `manage_roadmap sync` MCP tool if available, or via `manage_roadmap update` for each changed feature. If MCP is unavailable, parse the roadmap, update statuses, and serialize back.
|
|
279
|
+
1. Apply via `manage_roadmap sync` MCP tool if available, or via `manage_roadmap update` for each changed feature. If MCP is unavailable, parse the roadmap, update statuses, and serialize back. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
280
280
|
2. Update `last_synced` timestamp in frontmatter.
|
|
281
281
|
3. Write to `docs/roadmap.md`.
|
|
282
282
|
|
|
@@ -378,7 +378,7 @@ Choice?
|
|
|
378
378
|
```
|
|
379
379
|
|
|
380
380
|
2. Wait for confirmation before writing.
|
|
381
|
-
3. Apply all changes via `manage_roadmap update` / `manage_roadmap remove` MCP tool calls, or direct file manipulation if MCP is unavailable.
|
|
381
|
+
3. Apply all changes via `manage_roadmap update` / `manage_roadmap remove` MCP tool calls, or direct file manipulation if MCP is unavailable. If falling back to direct manipulation, warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
382
382
|
4. Update `last_manual_edit` timestamp in frontmatter (since this is a human-driven edit).
|
|
383
383
|
5. Write to `docs/roadmap.md`.
|
|
384
384
|
|
|
@@ -592,4 +592,4 @@ These are hard stops. Violating any gate means the process has broken down.
|
|
|
592
592
|
|
|
593
593
|
- **When no specs or plans are found during `--create`:** Suggest creating a minimal roadmap with just a Backlog milestone containing features described verbally by the human. Alternatively, suggest running `harness:brainstorming` first to generate specs that can then be discovered by `--create`.
|
|
594
594
|
- **When the roadmap file is malformed and cannot be parsed:** Report the specific parse error with line numbers if available. Suggest manual inspection of `docs/roadmap.md` or recreation with `--create` (after backing up the existing file).
|
|
595
|
-
- **When MCP tool is unavailable:** Fall back to direct file manipulation via Read/Write tools using the roadmap markdown format. The core `parseRoadmap`/`serializeRoadmap` functions handle the format. Report the fallback to the human: "MCP tool unavailable, using direct file operations."
|
|
595
|
+
- **When MCP tool is unavailable:** Fall back to direct file manipulation via Read/Write tools using the roadmap markdown format. The core `parseRoadmap`/`serializeRoadmap` functions handle the format. Report the fallback to the human: "MCP tool unavailable, using direct file operations. External sync skipped — run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
@@ -82,21 +82,26 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
82
82
|
|
|
83
83
|
### Phase 4: ASSIGN -- Execute Assignment and Transition
|
|
84
84
|
|
|
85
|
-
1. Call `
|
|
86
|
-
- This updates the feature's `Assignee` field
|
|
87
|
-
- Appends `assigned` record to assignment history (and `unassigned` for previous assignee if reassignment)
|
|
85
|
+
1. Call `manage_roadmap` with action `update` to assign the feature:
|
|
88
86
|
|
|
89
|
-
|
|
87
|
+
```json
|
|
88
|
+
manage_roadmap({
|
|
89
|
+
path: "<project-root>",
|
|
90
|
+
action: "update",
|
|
91
|
+
feature: "<feature-name>",
|
|
92
|
+
assignee: "<currentUser>"
|
|
93
|
+
})
|
|
94
|
+
```
|
|
90
95
|
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
96
|
+
- This updates the feature's `Assignee` field with assignment history tracking
|
|
97
|
+
- Automatically triggers external sync (GitHub Issues) if tracker config exists in `harness.config.json`
|
|
98
|
+
- External sync is fire-and-forget — errors are logged but do not block the assignment
|
|
94
99
|
|
|
95
|
-
|
|
100
|
+
2. Determine the transition target:
|
|
96
101
|
- If the feature has a `spec` field (non-null): transition to `harness:autopilot`
|
|
97
102
|
- If the feature has no `spec`: transition to `harness:brainstorming`
|
|
98
103
|
|
|
99
|
-
|
|
104
|
+
3. Present the transition to the human via `emit_interaction`:
|
|
100
105
|
|
|
101
106
|
```json
|
|
102
107
|
emit_interaction({
|
|
@@ -122,7 +127,7 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
122
127
|
})
|
|
123
128
|
```
|
|
124
129
|
|
|
125
|
-
|
|
130
|
+
4. Run `harness validate`.
|
|
126
131
|
|
|
127
132
|
---
|
|
128
133
|
|
|
@@ -130,10 +135,9 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
130
135
|
|
|
131
136
|
- **`parseRoadmap` / `serializeRoadmap`** -- Parse and write `docs/roadmap.md`. Import from `@harness-engineering/core`.
|
|
132
137
|
- **`scoreRoadmapCandidates`** -- Core scoring algorithm. Import from `@harness-engineering/core`. Takes a `Roadmap` and optional `PilotScoringOptions` (currentUser for affinity).
|
|
133
|
-
- **`
|
|
138
|
+
- **`manage_roadmap update`** -- Used for assignment. Supports `assignee` field which delegates to `assignFeature` internally, handles history tracking, and automatically triggers external sync (GitHub Issues).
|
|
134
139
|
- **`emit_interaction`** -- Used for the skill transition at the end. Transitions to `harness:brainstorming` (no spec) or `harness:autopilot` (spec exists).
|
|
135
140
|
- **`harness validate`** -- Run after assignment is written.
|
|
136
|
-
- **External sync** -- If `harness.config.json` has tracker config, use `fullSync` or direct `assignTicket` to push assignment to external service.
|
|
137
141
|
|
|
138
142
|
## Success Criteria
|
|
139
143
|
|
|
@@ -183,10 +187,10 @@ Human confirms **y**.
|
|
|
183
187
|
**Phase 4: ASSIGN**
|
|
184
188
|
|
|
185
189
|
```
|
|
186
|
-
|
|
190
|
+
manage_roadmap update: Graph Connector assignee -> @cwarner
|
|
187
191
|
History: +1 record (assigned, 2026-04-02)
|
|
188
192
|
Roadmap updated: docs/roadmap.md
|
|
189
|
-
External sync: github:harness-eng/harness#43 assigned
|
|
193
|
+
External sync: github:harness-eng/harness#43 assigned (automatic)
|
|
190
194
|
|
|
191
195
|
Transitioning to harness:autopilot (spec exists)...
|
|
192
196
|
```
|
|
@@ -531,7 +531,7 @@ INIT → ASSESS → PLAN → APPROVE_PLAN → EXECUTE → VERIFY → REVIEW →
|
|
|
531
531
|
|
|
532
532
|
4. **Clear scratchpad for this phase.** Call `clearScratchpad({ session: sessionSlug, phase: phaseName, projectPath: projectPath })` to delete ephemeral research files for the completed phase. This frees disk space and prevents stale scratchpad data from leaking into future phases.
|
|
533
533
|
|
|
534
|
-
5. **Sync roadmap.** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true`. This reflects the just-completed phase in the roadmap (e.g., updating the feature from `planned` to `in-progress`). If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core. Skip silently if no roadmap exists. Do not use `force_sync: true` — the human-always-wins rule applies.
|
|
534
|
+
5. **Sync roadmap.** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true`. This reflects the just-completed phase in the roadmap (e.g., updating the feature from `planned` to `in-progress`). If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." Skip silently if no roadmap exists. Do not use `force_sync: true` — the human-always-wins rule applies.
|
|
535
535
|
|
|
536
536
|
6. **Write session summary.** Update the session summary to reflect the completed phase:
|
|
537
537
|
|
|
@@ -671,7 +671,7 @@ INIT → ASSESS → PLAN → APPROVE_PLAN → EXECUTE → VERIFY → REVIEW →
|
|
|
671
671
|
|
|
672
672
|
6. **Check if pruning is needed.** Call `countLearningEntries(projectPath)`. If the count exceeds 30, suggest: "Global learnings.md has {count} entries (threshold: 30). Run `harness learnings prune` to analyze patterns and archive old entries."
|
|
673
673
|
|
|
674
|
-
7. **Update roadmap to done.** If `docs/roadmap.md` exists and the current spec maps to a roadmap feature, call `manage_roadmap` with action `update` to set the feature status to `done`. Derive the feature name from the spec title (H1 heading) or the session's `handoff.json` `summary` field. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `updateFeature()` from core. Skip silently if no roadmap exists or if the feature is not found. Do not use `force_sync: true`.
|
|
674
|
+
7. **Update roadmap to done.** If `docs/roadmap.md` exists and the current spec maps to a roadmap feature, call `manage_roadmap` with action `update` to set the feature status to `done`. Derive the feature name from the spec title (H1 heading) or the session's `handoff.json` `summary` field. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `updateFeature()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." Skip silently if no roadmap exists or if the feature is not found. Do not use `force_sync: true`.
|
|
675
675
|
|
|
676
676
|
8. **Write final session summary.** Update the session summary to reflect completion:
|
|
677
677
|
|
|
@@ -161,7 +161,7 @@ These keywords flow into the `handoff.json` `contextKeywords` field when the spe
|
|
|
161
161
|
- Call `manage_roadmap` with action `add`, `status: "planned"`, `milestone: "Current Work"`, and the spec path. Include a one-line summary from the spec overview.
|
|
162
162
|
- If the feature already exists in the roadmap (duplicate name), skip silently — the feature was likely added manually or by a prior brainstorming session.
|
|
163
163
|
- Log: `"Added '<feature-name>' to roadmap as planned"` (informational, not a prompt).
|
|
164
|
-
- If `manage_roadmap` is unavailable, fall back to direct file manipulation using `parseRoadmap`/`serializeRoadmap` from core to read, modify, and write `docs/roadmap.md`.
|
|
164
|
+
- If `manage_roadmap` is unavailable, fall back to direct file manipulation using `parseRoadmap`/`serializeRoadmap` from core to read, modify, and write `docs/roadmap.md`. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
165
165
|
- If no roadmap exists, skip this step silently.
|
|
166
166
|
|
|
167
167
|
7. **Write handoff and suggest transition.** After the human approves the spec:
|
|
@@ -293,7 +293,7 @@ Skipping this step means subsequent graph queries (impact analysis, dependency h
|
|
|
293
293
|
|
|
294
294
|
This overwrites any previous summary for this session. The index.md is updated automatically.
|
|
295
295
|
|
|
296
|
-
6. **Sync roadmap (mandatory when present).** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true` to update linked feature statuses from the just-completed execution state. Do not use `force_sync: true` — the human-always-wins rule applies. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core. If no roadmap exists, skip silently.
|
|
296
|
+
6. **Sync roadmap (mandatory when present).** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true` to update linked feature statuses from the just-completed execution state. Do not use `force_sync: true` — the human-always-wins rule applies. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." If no roadmap exists, skip silently.
|
|
297
297
|
|
|
298
298
|
7. **Learnings are append-only.** Never edit or delete previous learnings. They are a chronological record.
|
|
299
299
|
|
|
@@ -92,7 +92,7 @@ Unmatched plans: N (flag for review)
|
|
|
92
92
|
- One H2 section per milestone
|
|
93
93
|
- One H3 section per feature with 5 fields: `Status`, `Spec`, `Summary`, `Blockers`, `Plan`
|
|
94
94
|
|
|
95
|
-
2. Write via `manage_roadmap` MCP tool if available. If MCP is unavailable, write directly using the roadmap markdown format:
|
|
95
|
+
2. Write via `manage_roadmap` MCP tool if available. If MCP is unavailable, write directly using the roadmap markdown format and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
96
96
|
|
|
97
97
|
```markdown
|
|
98
98
|
---
|
|
@@ -173,7 +173,7 @@ Wait for confirmation before proceeding.
|
|
|
173
173
|
|
|
174
174
|
#### Phase 3: WRITE -- Add Feature to Roadmap
|
|
175
175
|
|
|
176
|
-
1. Add via `manage_roadmap add` MCP tool if available. If MCP is unavailable, parse the roadmap, add the feature to the specified milestone, and serialize back.
|
|
176
|
+
1. Add via `manage_roadmap add` MCP tool if available. If MCP is unavailable, parse the roadmap, add the feature to the specified milestone, and serialize back. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
177
177
|
2. If the milestone is `[NEW]`: create the milestone section, then add the feature.
|
|
178
178
|
3. Write to `docs/roadmap.md`.
|
|
179
179
|
|
|
@@ -276,7 +276,7 @@ Wait for confirmation before proceeding.
|
|
|
276
276
|
|
|
277
277
|
#### Phase 3: WRITE -- Apply Changes
|
|
278
278
|
|
|
279
|
-
1. Apply via `manage_roadmap sync` MCP tool if available, or via `manage_roadmap update` for each changed feature. If MCP is unavailable, parse the roadmap, update statuses, and serialize back.
|
|
279
|
+
1. Apply via `manage_roadmap sync` MCP tool if available, or via `manage_roadmap update` for each changed feature. If MCP is unavailable, parse the roadmap, update statuses, and serialize back. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
280
280
|
2. Update `last_synced` timestamp in frontmatter.
|
|
281
281
|
3. Write to `docs/roadmap.md`.
|
|
282
282
|
|
|
@@ -378,7 +378,7 @@ Choice?
|
|
|
378
378
|
```
|
|
379
379
|
|
|
380
380
|
2. Wait for confirmation before writing.
|
|
381
|
-
3. Apply all changes via `manage_roadmap update` / `manage_roadmap remove` MCP tool calls, or direct file manipulation if MCP is unavailable.
|
|
381
|
+
3. Apply all changes via `manage_roadmap update` / `manage_roadmap remove` MCP tool calls, or direct file manipulation if MCP is unavailable. If falling back to direct manipulation, warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
382
382
|
4. Update `last_manual_edit` timestamp in frontmatter (since this is a human-driven edit).
|
|
383
383
|
5. Write to `docs/roadmap.md`.
|
|
384
384
|
|
|
@@ -592,4 +592,4 @@ These are hard stops. Violating any gate means the process has broken down.
|
|
|
592
592
|
|
|
593
593
|
- **When no specs or plans are found during `--create`:** Suggest creating a minimal roadmap with just a Backlog milestone containing features described verbally by the human. Alternatively, suggest running `harness:brainstorming` first to generate specs that can then be discovered by `--create`.
|
|
594
594
|
- **When the roadmap file is malformed and cannot be parsed:** Report the specific parse error with line numbers if available. Suggest manual inspection of `docs/roadmap.md` or recreation with `--create` (after backing up the existing file).
|
|
595
|
-
- **When MCP tool is unavailable:** Fall back to direct file manipulation via Read/Write tools using the roadmap markdown format. The core `parseRoadmap`/`serializeRoadmap` functions handle the format. Report the fallback to the human: "MCP tool unavailable, using direct file operations."
|
|
595
|
+
- **When MCP tool is unavailable:** Fall back to direct file manipulation via Read/Write tools using the roadmap markdown format. The core `parseRoadmap`/`serializeRoadmap` functions handle the format. Report the fallback to the human: "MCP tool unavailable, using direct file operations. External sync skipped — run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
@@ -82,21 +82,26 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
82
82
|
|
|
83
83
|
### Phase 4: ASSIGN -- Execute Assignment and Transition
|
|
84
84
|
|
|
85
|
-
1. Call `
|
|
86
|
-
- This updates the feature's `Assignee` field
|
|
87
|
-
- Appends `assigned` record to assignment history (and `unassigned` for previous assignee if reassignment)
|
|
85
|
+
1. Call `manage_roadmap` with action `update` to assign the feature:
|
|
88
86
|
|
|
89
|
-
|
|
87
|
+
```json
|
|
88
|
+
manage_roadmap({
|
|
89
|
+
path: "<project-root>",
|
|
90
|
+
action: "update",
|
|
91
|
+
feature: "<feature-name>",
|
|
92
|
+
assignee: "<currentUser>"
|
|
93
|
+
})
|
|
94
|
+
```
|
|
90
95
|
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
96
|
+
- This updates the feature's `Assignee` field with assignment history tracking
|
|
97
|
+
- Automatically triggers external sync (GitHub Issues) if tracker config exists in `harness.config.json`
|
|
98
|
+
- External sync is fire-and-forget — errors are logged but do not block the assignment
|
|
94
99
|
|
|
95
|
-
|
|
100
|
+
2. Determine the transition target:
|
|
96
101
|
- If the feature has a `spec` field (non-null): transition to `harness:autopilot`
|
|
97
102
|
- If the feature has no `spec`: transition to `harness:brainstorming`
|
|
98
103
|
|
|
99
|
-
|
|
104
|
+
3. Present the transition to the human via `emit_interaction`:
|
|
100
105
|
|
|
101
106
|
```json
|
|
102
107
|
emit_interaction({
|
|
@@ -122,7 +127,7 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
122
127
|
})
|
|
123
128
|
```
|
|
124
129
|
|
|
125
|
-
|
|
130
|
+
4. Run `harness validate`.
|
|
126
131
|
|
|
127
132
|
---
|
|
128
133
|
|
|
@@ -130,10 +135,9 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
130
135
|
|
|
131
136
|
- **`parseRoadmap` / `serializeRoadmap`** -- Parse and write `docs/roadmap.md`. Import from `@harness-engineering/core`.
|
|
132
137
|
- **`scoreRoadmapCandidates`** -- Core scoring algorithm. Import from `@harness-engineering/core`. Takes a `Roadmap` and optional `PilotScoringOptions` (currentUser for affinity).
|
|
133
|
-
- **`
|
|
138
|
+
- **`manage_roadmap update`** -- Used for assignment. Supports `assignee` field which delegates to `assignFeature` internally, handles history tracking, and automatically triggers external sync (GitHub Issues).
|
|
134
139
|
- **`emit_interaction`** -- Used for the skill transition at the end. Transitions to `harness:brainstorming` (no spec) or `harness:autopilot` (spec exists).
|
|
135
140
|
- **`harness validate`** -- Run after assignment is written.
|
|
136
|
-
- **External sync** -- If `harness.config.json` has tracker config, use `fullSync` or direct `assignTicket` to push assignment to external service.
|
|
137
141
|
|
|
138
142
|
## Success Criteria
|
|
139
143
|
|
|
@@ -183,10 +187,10 @@ Human confirms **y**.
|
|
|
183
187
|
**Phase 4: ASSIGN**
|
|
184
188
|
|
|
185
189
|
```
|
|
186
|
-
|
|
190
|
+
manage_roadmap update: Graph Connector assignee -> @cwarner
|
|
187
191
|
History: +1 record (assigned, 2026-04-02)
|
|
188
192
|
Roadmap updated: docs/roadmap.md
|
|
189
|
-
External sync: github:harness-eng/harness#43 assigned
|
|
193
|
+
External sync: github:harness-eng/harness#43 assigned (automatic)
|
|
190
194
|
|
|
191
195
|
Transitioning to harness:autopilot (spec exists)...
|
|
192
196
|
```
|
|
@@ -531,7 +531,7 @@ INIT → ASSESS → PLAN → APPROVE_PLAN → EXECUTE → VERIFY → REVIEW →
|
|
|
531
531
|
|
|
532
532
|
4. **Clear scratchpad for this phase.** Call `clearScratchpad({ session: sessionSlug, phase: phaseName, projectPath: projectPath })` to delete ephemeral research files for the completed phase. This frees disk space and prevents stale scratchpad data from leaking into future phases.
|
|
533
533
|
|
|
534
|
-
5. **Sync roadmap.** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true`. This reflects the just-completed phase in the roadmap (e.g., updating the feature from `planned` to `in-progress`). If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core. Skip silently if no roadmap exists. Do not use `force_sync: true` — the human-always-wins rule applies.
|
|
534
|
+
5. **Sync roadmap.** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true`. This reflects the just-completed phase in the roadmap (e.g., updating the feature from `planned` to `in-progress`). If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." Skip silently if no roadmap exists. Do not use `force_sync: true` — the human-always-wins rule applies.
|
|
535
535
|
|
|
536
536
|
6. **Write session summary.** Update the session summary to reflect the completed phase:
|
|
537
537
|
|
|
@@ -671,7 +671,7 @@ INIT → ASSESS → PLAN → APPROVE_PLAN → EXECUTE → VERIFY → REVIEW →
|
|
|
671
671
|
|
|
672
672
|
6. **Check if pruning is needed.** Call `countLearningEntries(projectPath)`. If the count exceeds 30, suggest: "Global learnings.md has {count} entries (threshold: 30). Run `harness learnings prune` to analyze patterns and archive old entries."
|
|
673
673
|
|
|
674
|
-
7. **Update roadmap to done.** If `docs/roadmap.md` exists and the current spec maps to a roadmap feature, call `manage_roadmap` with action `update` to set the feature status to `done`. Derive the feature name from the spec title (H1 heading) or the session's `handoff.json` `summary` field. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `updateFeature()` from core. Skip silently if no roadmap exists or if the feature is not found. Do not use `force_sync: true`.
|
|
674
|
+
7. **Update roadmap to done.** If `docs/roadmap.md` exists and the current spec maps to a roadmap feature, call `manage_roadmap` with action `update` to set the feature status to `done`. Derive the feature name from the spec title (H1 heading) or the session's `handoff.json` `summary` field. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `updateFeature()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." Skip silently if no roadmap exists or if the feature is not found. Do not use `force_sync: true`.
|
|
675
675
|
|
|
676
676
|
8. **Write final session summary.** Update the session summary to reflect completion:
|
|
677
677
|
|
|
@@ -161,7 +161,7 @@ These keywords flow into the `handoff.json` `contextKeywords` field when the spe
|
|
|
161
161
|
- Call `manage_roadmap` with action `add`, `status: "planned"`, `milestone: "Current Work"`, and the spec path. Include a one-line summary from the spec overview.
|
|
162
162
|
- If the feature already exists in the roadmap (duplicate name), skip silently — the feature was likely added manually or by a prior brainstorming session.
|
|
163
163
|
- Log: `"Added '<feature-name>' to roadmap as planned"` (informational, not a prompt).
|
|
164
|
-
- If `manage_roadmap` is unavailable, fall back to direct file manipulation using `parseRoadmap`/`serializeRoadmap` from core to read, modify, and write `docs/roadmap.md`.
|
|
164
|
+
- If `manage_roadmap` is unavailable, fall back to direct file manipulation using `parseRoadmap`/`serializeRoadmap` from core to read, modify, and write `docs/roadmap.md`. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
165
165
|
- If no roadmap exists, skip this step silently.
|
|
166
166
|
|
|
167
167
|
7. **Write handoff and suggest transition.** After the human approves the spec:
|
|
@@ -293,7 +293,7 @@ Skipping this step means subsequent graph queries (impact analysis, dependency h
|
|
|
293
293
|
|
|
294
294
|
This overwrites any previous summary for this session. The index.md is updated automatically.
|
|
295
295
|
|
|
296
|
-
6. **Sync roadmap (mandatory when present).** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true` to update linked feature statuses from the just-completed execution state. Do not use `force_sync: true` — the human-always-wins rule applies. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core. If no roadmap exists, skip silently.
|
|
296
|
+
6. **Sync roadmap (mandatory when present).** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true` to update linked feature statuses from the just-completed execution state. Do not use `force_sync: true` — the human-always-wins rule applies. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." If no roadmap exists, skip silently.
|
|
297
297
|
|
|
298
298
|
7. **Learnings are append-only.** Never edit or delete previous learnings. They are a chronological record.
|
|
299
299
|
|
|
@@ -92,7 +92,7 @@ Unmatched plans: N (flag for review)
|
|
|
92
92
|
- One H2 section per milestone
|
|
93
93
|
- One H3 section per feature with 5 fields: `Status`, `Spec`, `Summary`, `Blockers`, `Plan`
|
|
94
94
|
|
|
95
|
-
2. Write via `manage_roadmap` MCP tool if available. If MCP is unavailable, write directly using the roadmap markdown format:
|
|
95
|
+
2. Write via `manage_roadmap` MCP tool if available. If MCP is unavailable, write directly using the roadmap markdown format and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
96
96
|
|
|
97
97
|
```markdown
|
|
98
98
|
---
|
|
@@ -173,7 +173,7 @@ Wait for confirmation before proceeding.
|
|
|
173
173
|
|
|
174
174
|
#### Phase 3: WRITE -- Add Feature to Roadmap
|
|
175
175
|
|
|
176
|
-
1. Add via `manage_roadmap add` MCP tool if available. If MCP is unavailable, parse the roadmap, add the feature to the specified milestone, and serialize back.
|
|
176
|
+
1. Add via `manage_roadmap add` MCP tool if available. If MCP is unavailable, parse the roadmap, add the feature to the specified milestone, and serialize back. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
177
177
|
2. If the milestone is `[NEW]`: create the milestone section, then add the feature.
|
|
178
178
|
3. Write to `docs/roadmap.md`.
|
|
179
179
|
|
|
@@ -276,7 +276,7 @@ Wait for confirmation before proceeding.
|
|
|
276
276
|
|
|
277
277
|
#### Phase 3: WRITE -- Apply Changes
|
|
278
278
|
|
|
279
|
-
1. Apply via `manage_roadmap sync` MCP tool if available, or via `manage_roadmap update` for each changed feature. If MCP is unavailable, parse the roadmap, update statuses, and serialize back.
|
|
279
|
+
1. Apply via `manage_roadmap sync` MCP tool if available, or via `manage_roadmap update` for each changed feature. If MCP is unavailable, parse the roadmap, update statuses, and serialize back. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
280
280
|
2. Update `last_synced` timestamp in frontmatter.
|
|
281
281
|
3. Write to `docs/roadmap.md`.
|
|
282
282
|
|
|
@@ -378,7 +378,7 @@ Choice?
|
|
|
378
378
|
```
|
|
379
379
|
|
|
380
380
|
2. Wait for confirmation before writing.
|
|
381
|
-
3. Apply all changes via `manage_roadmap update` / `manage_roadmap remove` MCP tool calls, or direct file manipulation if MCP is unavailable.
|
|
381
|
+
3. Apply all changes via `manage_roadmap update` / `manage_roadmap remove` MCP tool calls, or direct file manipulation if MCP is unavailable. If falling back to direct manipulation, warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
382
382
|
4. Update `last_manual_edit` timestamp in frontmatter (since this is a human-driven edit).
|
|
383
383
|
5. Write to `docs/roadmap.md`.
|
|
384
384
|
|
|
@@ -592,4 +592,4 @@ These are hard stops. Violating any gate means the process has broken down.
|
|
|
592
592
|
|
|
593
593
|
- **When no specs or plans are found during `--create`:** Suggest creating a minimal roadmap with just a Backlog milestone containing features described verbally by the human. Alternatively, suggest running `harness:brainstorming` first to generate specs that can then be discovered by `--create`.
|
|
594
594
|
- **When the roadmap file is malformed and cannot be parsed:** Report the specific parse error with line numbers if available. Suggest manual inspection of `docs/roadmap.md` or recreation with `--create` (after backing up the existing file).
|
|
595
|
-
- **When MCP tool is unavailable:** Fall back to direct file manipulation via Read/Write tools using the roadmap markdown format. The core `parseRoadmap`/`serializeRoadmap` functions handle the format. Report the fallback to the human: "MCP tool unavailable, using direct file operations."
|
|
595
|
+
- **When MCP tool is unavailable:** Fall back to direct file manipulation via Read/Write tools using the roadmap markdown format. The core `parseRoadmap`/`serializeRoadmap` functions handle the format. Report the fallback to the human: "MCP tool unavailable, using direct file operations. External sync skipped — run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
@@ -82,21 +82,26 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
82
82
|
|
|
83
83
|
### Phase 4: ASSIGN -- Execute Assignment and Transition
|
|
84
84
|
|
|
85
|
-
1. Call `
|
|
86
|
-
- This updates the feature's `Assignee` field
|
|
87
|
-
- Appends `assigned` record to assignment history (and `unassigned` for previous assignee if reassignment)
|
|
85
|
+
1. Call `manage_roadmap` with action `update` to assign the feature:
|
|
88
86
|
|
|
89
|
-
|
|
87
|
+
```json
|
|
88
|
+
manage_roadmap({
|
|
89
|
+
path: "<project-root>",
|
|
90
|
+
action: "update",
|
|
91
|
+
feature: "<feature-name>",
|
|
92
|
+
assignee: "<currentUser>"
|
|
93
|
+
})
|
|
94
|
+
```
|
|
90
95
|
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
96
|
+
- This updates the feature's `Assignee` field with assignment history tracking
|
|
97
|
+
- Automatically triggers external sync (GitHub Issues) if tracker config exists in `harness.config.json`
|
|
98
|
+
- External sync is fire-and-forget — errors are logged but do not block the assignment
|
|
94
99
|
|
|
95
|
-
|
|
100
|
+
2. Determine the transition target:
|
|
96
101
|
- If the feature has a `spec` field (non-null): transition to `harness:autopilot`
|
|
97
102
|
- If the feature has no `spec`: transition to `harness:brainstorming`
|
|
98
103
|
|
|
99
|
-
|
|
104
|
+
3. Present the transition to the human via `emit_interaction`:
|
|
100
105
|
|
|
101
106
|
```json
|
|
102
107
|
emit_interaction({
|
|
@@ -122,7 +127,7 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
122
127
|
})
|
|
123
128
|
```
|
|
124
129
|
|
|
125
|
-
|
|
130
|
+
4. Run `harness validate`.
|
|
126
131
|
|
|
127
132
|
---
|
|
128
133
|
|
|
@@ -130,10 +135,9 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
130
135
|
|
|
131
136
|
- **`parseRoadmap` / `serializeRoadmap`** -- Parse and write `docs/roadmap.md`. Import from `@harness-engineering/core`.
|
|
132
137
|
- **`scoreRoadmapCandidates`** -- Core scoring algorithm. Import from `@harness-engineering/core`. Takes a `Roadmap` and optional `PilotScoringOptions` (currentUser for affinity).
|
|
133
|
-
- **`
|
|
138
|
+
- **`manage_roadmap update`** -- Used for assignment. Supports `assignee` field which delegates to `assignFeature` internally, handles history tracking, and automatically triggers external sync (GitHub Issues).
|
|
134
139
|
- **`emit_interaction`** -- Used for the skill transition at the end. Transitions to `harness:brainstorming` (no spec) or `harness:autopilot` (spec exists).
|
|
135
140
|
- **`harness validate`** -- Run after assignment is written.
|
|
136
|
-
- **External sync** -- If `harness.config.json` has tracker config, use `fullSync` or direct `assignTicket` to push assignment to external service.
|
|
137
141
|
|
|
138
142
|
## Success Criteria
|
|
139
143
|
|
|
@@ -183,10 +187,10 @@ Human confirms **y**.
|
|
|
183
187
|
**Phase 4: ASSIGN**
|
|
184
188
|
|
|
185
189
|
```
|
|
186
|
-
|
|
190
|
+
manage_roadmap update: Graph Connector assignee -> @cwarner
|
|
187
191
|
History: +1 record (assigned, 2026-04-02)
|
|
188
192
|
Roadmap updated: docs/roadmap.md
|
|
189
|
-
External sync: github:harness-eng/harness#43 assigned
|
|
193
|
+
External sync: github:harness-eng/harness#43 assigned (automatic)
|
|
190
194
|
|
|
191
195
|
Transitioning to harness:autopilot (spec exists)...
|
|
192
196
|
```
|
|
@@ -531,7 +531,7 @@ INIT → ASSESS → PLAN → APPROVE_PLAN → EXECUTE → VERIFY → REVIEW →
|
|
|
531
531
|
|
|
532
532
|
4. **Clear scratchpad for this phase.** Call `clearScratchpad({ session: sessionSlug, phase: phaseName, projectPath: projectPath })` to delete ephemeral research files for the completed phase. This frees disk space and prevents stale scratchpad data from leaking into future phases.
|
|
533
533
|
|
|
534
|
-
5. **Sync roadmap.** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true`. This reflects the just-completed phase in the roadmap (e.g., updating the feature from `planned` to `in-progress`). If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core. Skip silently if no roadmap exists. Do not use `force_sync: true` — the human-always-wins rule applies.
|
|
534
|
+
5. **Sync roadmap.** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true`. This reflects the just-completed phase in the roadmap (e.g., updating the feature from `planned` to `in-progress`). If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." Skip silently if no roadmap exists. Do not use `force_sync: true` — the human-always-wins rule applies.
|
|
535
535
|
|
|
536
536
|
6. **Write session summary.** Update the session summary to reflect the completed phase:
|
|
537
537
|
|
|
@@ -671,7 +671,7 @@ INIT → ASSESS → PLAN → APPROVE_PLAN → EXECUTE → VERIFY → REVIEW →
|
|
|
671
671
|
|
|
672
672
|
6. **Check if pruning is needed.** Call `countLearningEntries(projectPath)`. If the count exceeds 30, suggest: "Global learnings.md has {count} entries (threshold: 30). Run `harness learnings prune` to analyze patterns and archive old entries."
|
|
673
673
|
|
|
674
|
-
7. **Update roadmap to done.** If `docs/roadmap.md` exists and the current spec maps to a roadmap feature, call `manage_roadmap` with action `update` to set the feature status to `done`. Derive the feature name from the spec title (H1 heading) or the session's `handoff.json` `summary` field. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `updateFeature()` from core. Skip silently if no roadmap exists or if the feature is not found. Do not use `force_sync: true`.
|
|
674
|
+
7. **Update roadmap to done.** If `docs/roadmap.md` exists and the current spec maps to a roadmap feature, call `manage_roadmap` with action `update` to set the feature status to `done`. Derive the feature name from the spec title (H1 heading) or the session's `handoff.json` `summary` field. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `updateFeature()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." Skip silently if no roadmap exists or if the feature is not found. Do not use `force_sync: true`.
|
|
675
675
|
|
|
676
676
|
8. **Write final session summary.** Update the session summary to reflect completion:
|
|
677
677
|
|
|
@@ -161,7 +161,7 @@ These keywords flow into the `handoff.json` `contextKeywords` field when the spe
|
|
|
161
161
|
- Call `manage_roadmap` with action `add`, `status: "planned"`, `milestone: "Current Work"`, and the spec path. Include a one-line summary from the spec overview.
|
|
162
162
|
- If the feature already exists in the roadmap (duplicate name), skip silently — the feature was likely added manually or by a prior brainstorming session.
|
|
163
163
|
- Log: `"Added '<feature-name>' to roadmap as planned"` (informational, not a prompt).
|
|
164
|
-
- If `manage_roadmap` is unavailable, fall back to direct file manipulation using `parseRoadmap`/`serializeRoadmap` from core to read, modify, and write `docs/roadmap.md`.
|
|
164
|
+
- If `manage_roadmap` is unavailable, fall back to direct file manipulation using `parseRoadmap`/`serializeRoadmap` from core to read, modify, and write `docs/roadmap.md`. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
165
165
|
- If no roadmap exists, skip this step silently.
|
|
166
166
|
|
|
167
167
|
7. **Write handoff and suggest transition.** After the human approves the spec:
|
|
@@ -293,7 +293,7 @@ Skipping this step means subsequent graph queries (impact analysis, dependency h
|
|
|
293
293
|
|
|
294
294
|
This overwrites any previous summary for this session. The index.md is updated automatically.
|
|
295
295
|
|
|
296
|
-
6. **Sync roadmap (mandatory when present).** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true` to update linked feature statuses from the just-completed execution state. Do not use `force_sync: true` — the human-always-wins rule applies. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core. If no roadmap exists, skip silently.
|
|
296
|
+
6. **Sync roadmap (mandatory when present).** If `docs/roadmap.md` exists, call `manage_roadmap` with action `sync` and `apply: true` to update linked feature statuses from the just-completed execution state. Do not use `force_sync: true` — the human-always-wins rule applies. If `manage_roadmap` is unavailable, fall back to direct file manipulation using `syncRoadmap()` from core and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub." If no roadmap exists, skip silently.
|
|
297
297
|
|
|
298
298
|
7. **Learnings are append-only.** Never edit or delete previous learnings. They are a chronological record.
|
|
299
299
|
|
|
@@ -92,7 +92,7 @@ Unmatched plans: N (flag for review)
|
|
|
92
92
|
- One H2 section per milestone
|
|
93
93
|
- One H3 section per feature with 5 fields: `Status`, `Spec`, `Summary`, `Blockers`, `Plan`
|
|
94
94
|
|
|
95
|
-
2. Write via `manage_roadmap` MCP tool if available. If MCP is unavailable, write directly using the roadmap markdown format:
|
|
95
|
+
2. Write via `manage_roadmap` MCP tool if available. If MCP is unavailable, write directly using the roadmap markdown format and warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
96
96
|
|
|
97
97
|
```markdown
|
|
98
98
|
---
|
|
@@ -173,7 +173,7 @@ Wait for confirmation before proceeding.
|
|
|
173
173
|
|
|
174
174
|
#### Phase 3: WRITE -- Add Feature to Roadmap
|
|
175
175
|
|
|
176
|
-
1. Add via `manage_roadmap add` MCP tool if available. If MCP is unavailable, parse the roadmap, add the feature to the specified milestone, and serialize back.
|
|
176
|
+
1. Add via `manage_roadmap add` MCP tool if available. If MCP is unavailable, parse the roadmap, add the feature to the specified milestone, and serialize back. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
177
177
|
2. If the milestone is `[NEW]`: create the milestone section, then add the feature.
|
|
178
178
|
3. Write to `docs/roadmap.md`.
|
|
179
179
|
|
|
@@ -276,7 +276,7 @@ Wait for confirmation before proceeding.
|
|
|
276
276
|
|
|
277
277
|
#### Phase 3: WRITE -- Apply Changes
|
|
278
278
|
|
|
279
|
-
1. Apply via `manage_roadmap sync` MCP tool if available, or via `manage_roadmap update` for each changed feature. If MCP is unavailable, parse the roadmap, update statuses, and serialize back.
|
|
279
|
+
1. Apply via `manage_roadmap sync` MCP tool if available, or via `manage_roadmap update` for each changed feature. If MCP is unavailable, parse the roadmap, update statuses, and serialize back. Warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
280
280
|
2. Update `last_synced` timestamp in frontmatter.
|
|
281
281
|
3. Write to `docs/roadmap.md`.
|
|
282
282
|
|
|
@@ -378,7 +378,7 @@ Choice?
|
|
|
378
378
|
```
|
|
379
379
|
|
|
380
380
|
2. Wait for confirmation before writing.
|
|
381
|
-
3. Apply all changes via `manage_roadmap update` / `manage_roadmap remove` MCP tool calls, or direct file manipulation if MCP is unavailable.
|
|
381
|
+
3. Apply all changes via `manage_roadmap update` / `manage_roadmap remove` MCP tool calls, or direct file manipulation if MCP is unavailable. If falling back to direct manipulation, warn: "External sync skipped (MCP unavailable). Run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|
|
382
382
|
4. Update `last_manual_edit` timestamp in frontmatter (since this is a human-driven edit).
|
|
383
383
|
5. Write to `docs/roadmap.md`.
|
|
384
384
|
|
|
@@ -592,4 +592,4 @@ These are hard stops. Violating any gate means the process has broken down.
|
|
|
592
592
|
|
|
593
593
|
- **When no specs or plans are found during `--create`:** Suggest creating a minimal roadmap with just a Backlog milestone containing features described verbally by the human. Alternatively, suggest running `harness:brainstorming` first to generate specs that can then be discovered by `--create`.
|
|
594
594
|
- **When the roadmap file is malformed and cannot be parsed:** Report the specific parse error with line numbers if available. Suggest manual inspection of `docs/roadmap.md` or recreation with `--create` (after backing up the existing file).
|
|
595
|
-
- **When MCP tool is unavailable:** Fall back to direct file manipulation via Read/Write tools using the roadmap markdown format. The core `parseRoadmap`/`serializeRoadmap` functions handle the format. Report the fallback to the human: "MCP tool unavailable, using direct file operations."
|
|
595
|
+
- **When MCP tool is unavailable:** Fall back to direct file manipulation via Read/Write tools using the roadmap markdown format. The core `parseRoadmap`/`serializeRoadmap` functions handle the format. Report the fallback to the human: "MCP tool unavailable, using direct file operations. External sync skipped — run `manage_roadmap sync` when MCP is restored to push changes to GitHub."
|