@sienklogic/plan-build-run 2.27.1 → 2.27.2

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/CHANGELOG.md CHANGED
@@ -5,6 +5,13 @@ All notable changes to Plan-Build-Run will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.27.2](https://github.com/SienkLogic/plan-build-run/compare/plan-build-run-v2.27.1...plan-build-run-v2.27.2) (2026-02-24)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **37-05:** fix breadcrumb icon, milestone spacing, summary lookup, and config mode dropdown ([fd6d929](https://github.com/SienkLogic/plan-build-run/commit/fd6d92947c708e0aaba4b3d0a18897228e1957ec))
14
+
8
15
  ## [2.27.1](https://github.com/SienkLogic/plan-build-run/compare/plan-build-run-v2.27.0...plan-build-run-v2.27.1) (2026-02-24)
9
16
 
10
17
 
@@ -159,7 +159,9 @@ export async function getPhaseDetail(projectDir, phaseId) {
159
159
  const oldMatch = planFile.match(/^(\d{2}-\d{2})-PLAN\.md$/);
160
160
  const newMatch = planFile.match(/^PLAN-(\d{2})\.md$/);
161
161
  const planId = oldMatch ? oldMatch[1] : newMatch ? `${phaseId.padStart(2, '0')}-${newMatch[1]}` : `${phaseId.padStart(2, '0')}-${String(index + 1).padStart(2, '0')}`;
162
- return { planId, planFile, summaryPath: join(phaseFullPath, `SUMMARY-${planId}.md`) };
162
+ // Summary files use just the sequence number for PLAN-NN.md format (SUMMARY-NN.md)
163
+ const summaryName = newMatch ? `SUMMARY-${newMatch[1]}.md` : `SUMMARY-${planId}.md`;
164
+ return { planId, planFile, summaryPath: join(phaseFullPath, summaryName) };
163
165
  });
164
166
 
165
167
  const summaryResults = await Promise.allSettled(
@@ -257,7 +259,9 @@ export async function getPhaseDocument(projectDir, phaseId, planId, docType) {
257
259
  } else if (docType === 'verification') {
258
260
  fileNames = ['VERIFICATION.md'];
259
261
  } else {
260
- fileNames = [`SUMMARY-${planId}.md`];
262
+ // Try both formats: SUMMARY-NN.md (sequence only) and SUMMARY-{planId}.md (full ID)
263
+ const seqMatch = planId.match(/^\d{2}-(\d{2})$/);
264
+ fileNames = seqMatch ? [`SUMMARY-${seqMatch[1]}.md`, `SUMMARY-${planId}.md`] : [`SUMMARY-${planId}.md`];
261
265
  }
262
266
 
263
267
  for (const fileName of fileNames) {
@@ -2,7 +2,7 @@
2
2
  <nav aria-label="Breadcrumb">
3
3
  <ol class="breadcrumb">
4
4
  <li class="breadcrumb-item">
5
- <a href="/" hx-get="/" hx-target="#main-content" hx-push-url="true">&#8962;</a>
5
+ <a href="/" hx-get="/" hx-target="#main-content" hx-push-url="true"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-2px"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg></a>
6
6
  </li>
7
7
  <% breadcrumbs.forEach(function(item, index) { %>
8
8
  <% if (index < breadcrumbs.length - 1) { %>
@@ -30,7 +30,7 @@
30
30
  <label for="cfg-mode" class="col-sm-3 col-form-label">Mode</label>
31
31
  <div class="col-sm-9">
32
32
  <select id="cfg-mode" name="mode" class="form-select">
33
- <% ['normal', 'strict', 'relaxed'].forEach(opt => { %>
33
+ <% ['normal', 'autonomous', 'strict', 'relaxed'].forEach(opt => { %>
34
34
  <option value="<%= opt %>" <%= config.mode === opt ? 'selected' : '' %>><%= opt %></option>
35
35
  <% }); %>
36
36
  </select>
@@ -42,8 +42,8 @@
42
42
  <div class="card mb-3">
43
43
  <div class="card-header">
44
44
  <strong><%= group.name %></strong>
45
- <small>(Phases <%= String(group.startPhase).padStart(2, '0') %>&ndash;<%= String(group.endPhase).padStart(2, '0') %>)</small>
46
- &mdash;
45
+ <small class="ms-1">(Phases <%= String(group.startPhase).padStart(2, '0') %>&ndash;<%= String(group.endPhase).padStart(2, '0') %>)</small>
46
+ &nbsp;&mdash;&nbsp;
47
47
  <%
48
48
  const groupComplete = group.phases.filter(p => p.status === 'complete').length;
49
49
  const groupTotal = group.phases.length;
@@ -20,9 +20,9 @@
20
20
  <div class="card-header">
21
21
  <strong><%= ms.name %></strong>
22
22
  <% if (ms.startPhase && ms.endPhase) { %>
23
- <small>(Phases <%= String(ms.startPhase).padStart(2, '0') %>&ndash;<%= String(ms.endPhase).padStart(2, '0') %>)</small>
23
+ <small class="ms-1">(Phases <%= String(ms.startPhase).padStart(2, '0') %>&ndash;<%= String(ms.endPhase).padStart(2, '0') %>)</small>
24
24
  <% } %>
25
- &mdash;
25
+ &nbsp;&mdash;&nbsp;
26
26
  <span class="status-badge" data-status="complete">complete</span>
27
27
  </div>
28
28
  <div class="card-body">
@@ -75,9 +75,9 @@
75
75
  <div class="card-header">
76
76
  <strong><%= group.name %></strong>
77
77
  <% if (group.startPhase && group.endPhase < 9999) { %>
78
- <small>(Phases <%= String(group.startPhase).padStart(2, '0') %>&ndash;<%= String(group.endPhase).padStart(2, '0') %>)</small>
78
+ <small class="ms-1">(Phases <%= String(group.startPhase).padStart(2, '0') %>&ndash;<%= String(group.endPhase).padStart(2, '0') %>)</small>
79
79
  <% } %>
80
- &mdash;
80
+ &nbsp;&mdash;&nbsp;
81
81
  <%
82
82
  const gc = group.phases.filter(p => p.status === 'complete').length;
83
83
  const gt = group.phases.length;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sienklogic/plan-build-run",
3
- "version": "2.27.1",
3
+ "version": "2.27.2",
4
4
  "description": "Plan it, Build it, Run it — structured development workflow for Claude Code",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pbr",
3
3
  "displayName": "Plan-Build-Run",
4
- "version": "2.27.1",
4
+ "version": "2.27.2",
5
5
  "description": "Plan-Build-Run — Structured development workflow for GitHub Copilot CLI. Solves context rot through disciplined agent delegation, structured planning, atomic execution, and goal-backward verification.",
6
6
  "author": {
7
7
  "name": "SienkLogic",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pbr",
3
3
  "displayName": "Plan-Build-Run",
4
- "version": "2.27.1",
4
+ "version": "2.27.2",
5
5
  "description": "Plan-Build-Run — Structured development workflow for Cursor. Solves context rot through disciplined subagent delegation, structured planning, atomic execution, and goal-backward verification.",
6
6
  "author": {
7
7
  "name": "SienkLogic",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pbr",
3
- "version": "2.27.1",
3
+ "version": "2.27.2",
4
4
  "description": "Plan-Build-Run — Structured development workflow for Claude Code. Solves context rot through disciplined subagent delegation, structured planning, atomic execution, and goal-backward verification.",
5
5
  "author": {
6
6
  "name": "SienkLogic",