@sienklogic/plan-build-run 2.34.0 → 2.38.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.
Files changed (160) hide show
  1. package/CHANGELOG.md +683 -0
  2. package/dashboard/public/css/command-center.css +152 -65
  3. package/dashboard/public/css/explorer.css +22 -41
  4. package/dashboard/public/css/layout.css +119 -1
  5. package/dashboard/public/css/tokens.css +13 -0
  6. package/dashboard/src/components/Layout.tsx +32 -6
  7. package/dashboard/src/components/explorer/tabs/PhasesTab.tsx +11 -1
  8. package/dashboard/src/components/explorer/tabs/TodosTab.tsx +18 -2
  9. package/dashboard/src/components/partials/AttentionPanel.tsx +7 -1
  10. package/dashboard/src/components/partials/CurrentPhaseCard.tsx +26 -24
  11. package/dashboard/src/components/partials/QuickActions.tsx +21 -11
  12. package/dashboard/src/components/partials/StatCardGrid.tsx +67 -0
  13. package/dashboard/src/components/partials/StatusHeader.tsx +1 -0
  14. package/dashboard/src/routes/command-center.routes.tsx +8 -7
  15. package/dashboard/src/routes/index.routes.tsx +32 -29
  16. package/package.json +2 -2
  17. package/plugins/copilot-pbr/agents/audit.agent.md +129 -16
  18. package/plugins/copilot-pbr/agents/codebase-mapper.agent.md +49 -1
  19. package/plugins/copilot-pbr/agents/debugger.agent.md +50 -1
  20. package/plugins/copilot-pbr/agents/dev-sync.agent.md +23 -0
  21. package/plugins/copilot-pbr/agents/executor.agent.md +153 -8
  22. package/plugins/copilot-pbr/agents/general.agent.md +46 -1
  23. package/plugins/copilot-pbr/agents/integration-checker.agent.md +55 -2
  24. package/plugins/copilot-pbr/agents/plan-checker.agent.md +50 -2
  25. package/plugins/copilot-pbr/agents/planner.agent.md +80 -1
  26. package/plugins/copilot-pbr/agents/researcher.agent.md +50 -2
  27. package/plugins/copilot-pbr/agents/synthesizer.agent.md +49 -1
  28. package/plugins/copilot-pbr/agents/verifier.agent.md +114 -13
  29. package/plugins/copilot-pbr/commands/test.md +5 -0
  30. package/plugins/copilot-pbr/hooks/hooks.json +11 -0
  31. package/plugins/copilot-pbr/plugin.json +1 -1
  32. package/plugins/copilot-pbr/references/agent-contracts.md +27 -0
  33. package/plugins/copilot-pbr/references/checkpoints.md +32 -1
  34. package/plugins/copilot-pbr/references/context-quality-tiers.md +45 -0
  35. package/plugins/copilot-pbr/references/pbr-tools-cli.md +115 -0
  36. package/plugins/copilot-pbr/references/questioning.md +21 -1
  37. package/plugins/copilot-pbr/references/verification-patterns.md +96 -18
  38. package/plugins/copilot-pbr/skills/audit/SKILL.md +19 -3
  39. package/plugins/copilot-pbr/skills/begin/SKILL.md +57 -4
  40. package/plugins/copilot-pbr/skills/build/SKILL.md +39 -2
  41. package/plugins/copilot-pbr/skills/config/SKILL.md +12 -2
  42. package/plugins/copilot-pbr/skills/debug/SKILL.md +12 -1
  43. package/plugins/copilot-pbr/skills/explore/SKILL.md +13 -2
  44. package/plugins/copilot-pbr/skills/health/SKILL.md +13 -5
  45. package/plugins/copilot-pbr/skills/import/SKILL.md +26 -1
  46. package/plugins/copilot-pbr/skills/milestone/SKILL.md +15 -3
  47. package/plugins/copilot-pbr/skills/plan/SKILL.md +50 -0
  48. package/plugins/copilot-pbr/skills/quick/SKILL.md +21 -0
  49. package/plugins/copilot-pbr/skills/review/SKILL.md +45 -0
  50. package/plugins/copilot-pbr/skills/scan/SKILL.md +20 -0
  51. package/plugins/copilot-pbr/skills/setup/SKILL.md +9 -1
  52. package/plugins/copilot-pbr/skills/shared/context-budget.md +10 -0
  53. package/plugins/copilot-pbr/skills/shared/universal-anti-patterns.md +6 -0
  54. package/plugins/copilot-pbr/skills/test/SKILL.md +210 -0
  55. package/plugins/copilot-pbr/templates/SUMMARY-complex.md.tmpl +95 -0
  56. package/plugins/copilot-pbr/templates/SUMMARY-minimal.md.tmpl +48 -0
  57. package/plugins/cursor-pbr/.cursor-plugin/plugin.json +1 -1
  58. package/plugins/cursor-pbr/agents/audit.md +52 -5
  59. package/plugins/cursor-pbr/agents/codebase-mapper.md +49 -1
  60. package/plugins/cursor-pbr/agents/debugger.md +50 -1
  61. package/plugins/cursor-pbr/agents/dev-sync.md +23 -0
  62. package/plugins/cursor-pbr/agents/executor.md +153 -8
  63. package/plugins/cursor-pbr/agents/general.md +46 -1
  64. package/plugins/cursor-pbr/agents/integration-checker.md +54 -1
  65. package/plugins/cursor-pbr/agents/plan-checker.md +49 -1
  66. package/plugins/cursor-pbr/agents/planner.md +80 -1
  67. package/plugins/cursor-pbr/agents/researcher.md +49 -1
  68. package/plugins/cursor-pbr/agents/synthesizer.md +49 -1
  69. package/plugins/cursor-pbr/agents/verifier.md +113 -12
  70. package/plugins/cursor-pbr/commands/test.md +5 -0
  71. package/plugins/cursor-pbr/hooks/hooks.json +9 -0
  72. package/plugins/cursor-pbr/references/agent-contracts.md +27 -0
  73. package/plugins/cursor-pbr/references/checkpoints.md +32 -1
  74. package/plugins/cursor-pbr/references/context-quality-tiers.md +45 -0
  75. package/plugins/cursor-pbr/references/pbr-tools-cli.md +115 -0
  76. package/plugins/cursor-pbr/references/questioning.md +21 -1
  77. package/plugins/cursor-pbr/references/verification-patterns.md +96 -18
  78. package/plugins/cursor-pbr/skills/audit/SKILL.md +19 -3
  79. package/plugins/cursor-pbr/skills/begin/SKILL.md +57 -4
  80. package/plugins/cursor-pbr/skills/build/SKILL.md +37 -2
  81. package/plugins/cursor-pbr/skills/config/SKILL.md +12 -2
  82. package/plugins/cursor-pbr/skills/debug/SKILL.md +12 -1
  83. package/plugins/cursor-pbr/skills/explore/SKILL.md +13 -2
  84. package/plugins/cursor-pbr/skills/health/SKILL.md +14 -5
  85. package/plugins/cursor-pbr/skills/import/SKILL.md +26 -1
  86. package/plugins/cursor-pbr/skills/milestone/SKILL.md +15 -3
  87. package/plugins/cursor-pbr/skills/plan/SKILL.md +50 -0
  88. package/plugins/cursor-pbr/skills/quick/SKILL.md +21 -0
  89. package/plugins/cursor-pbr/skills/review/SKILL.md +45 -0
  90. package/plugins/cursor-pbr/skills/scan/SKILL.md +20 -0
  91. package/plugins/cursor-pbr/skills/setup/SKILL.md +9 -1
  92. package/plugins/cursor-pbr/skills/shared/context-budget.md +10 -0
  93. package/plugins/cursor-pbr/skills/shared/universal-anti-patterns.md +6 -0
  94. package/plugins/cursor-pbr/skills/test/SKILL.md +211 -0
  95. package/plugins/cursor-pbr/templates/SUMMARY-complex.md.tmpl +95 -0
  96. package/plugins/cursor-pbr/templates/SUMMARY-minimal.md.tmpl +48 -0
  97. package/plugins/pbr/.claude-plugin/plugin.json +1 -1
  98. package/plugins/pbr/agents/audit.md +45 -0
  99. package/plugins/pbr/agents/codebase-mapper.md +48 -0
  100. package/plugins/pbr/agents/debugger.md +49 -0
  101. package/plugins/pbr/agents/dev-sync.md +23 -0
  102. package/plugins/pbr/agents/executor.md +151 -6
  103. package/plugins/pbr/agents/general.md +45 -0
  104. package/plugins/pbr/agents/integration-checker.md +53 -0
  105. package/plugins/pbr/agents/plan-checker.md +48 -0
  106. package/plugins/pbr/agents/planner.md +78 -1
  107. package/plugins/pbr/agents/researcher.md +48 -0
  108. package/plugins/pbr/agents/synthesizer.md +48 -0
  109. package/plugins/pbr/agents/verifier.md +112 -11
  110. package/plugins/pbr/commands/test.md +5 -0
  111. package/plugins/pbr/hooks/hooks.json +9 -0
  112. package/plugins/pbr/references/agent-contracts.md +27 -0
  113. package/plugins/pbr/references/checkpoints.md +32 -0
  114. package/plugins/pbr/references/context-quality-tiers.md +45 -0
  115. package/plugins/pbr/references/pbr-tools-cli.md +115 -0
  116. package/plugins/pbr/references/questioning.md +21 -0
  117. package/plugins/pbr/references/verification-patterns.md +96 -17
  118. package/plugins/pbr/scripts/check-plan-format.js +13 -1
  119. package/plugins/pbr/scripts/check-state-sync.js +26 -7
  120. package/plugins/pbr/scripts/check-subagent-output.js +30 -2
  121. package/plugins/pbr/scripts/config-schema.json +11 -1
  122. package/plugins/pbr/scripts/context-bridge.js +265 -0
  123. package/plugins/pbr/scripts/lib/config.js +271 -0
  124. package/plugins/pbr/scripts/lib/core.js +587 -0
  125. package/plugins/pbr/scripts/lib/history.js +73 -0
  126. package/plugins/pbr/scripts/lib/init.js +166 -0
  127. package/plugins/pbr/scripts/lib/migrate.js +169 -0
  128. package/plugins/pbr/scripts/lib/phase.js +364 -0
  129. package/plugins/pbr/scripts/lib/roadmap.js +175 -0
  130. package/plugins/pbr/scripts/lib/state.js +397 -0
  131. package/plugins/pbr/scripts/lib/todo.js +300 -0
  132. package/plugins/pbr/scripts/pbr-tools.js +425 -1310
  133. package/plugins/pbr/scripts/post-write-dispatch.js +5 -4
  134. package/plugins/pbr/scripts/pre-write-dispatch.js +1 -1
  135. package/plugins/pbr/scripts/progress-tracker.js +1 -1
  136. package/plugins/pbr/scripts/suggest-compact.js +1 -1
  137. package/plugins/pbr/scripts/track-context-budget.js +53 -2
  138. package/plugins/pbr/scripts/validate-task.js +20 -28
  139. package/plugins/pbr/skills/audit/SKILL.md +19 -3
  140. package/plugins/pbr/skills/begin/SKILL.md +48 -2
  141. package/plugins/pbr/skills/build/SKILL.md +39 -2
  142. package/plugins/pbr/skills/config/SKILL.md +12 -2
  143. package/plugins/pbr/skills/debug/SKILL.md +12 -1
  144. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +12 -1
  145. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +12 -5
  146. package/plugins/pbr/skills/explore/SKILL.md +13 -2
  147. package/plugins/pbr/skills/health/SKILL.md +14 -3
  148. package/plugins/pbr/skills/help/SKILL.md +2 -0
  149. package/plugins/pbr/skills/import/SKILL.md +26 -1
  150. package/plugins/pbr/skills/milestone/SKILL.md +15 -3
  151. package/plugins/pbr/skills/plan/SKILL.md +52 -2
  152. package/plugins/pbr/skills/quick/SKILL.md +21 -0
  153. package/plugins/pbr/skills/review/SKILL.md +46 -0
  154. package/plugins/pbr/skills/scan/SKILL.md +20 -0
  155. package/plugins/pbr/skills/setup/SKILL.md +9 -1
  156. package/plugins/pbr/skills/shared/context-budget.md +10 -0
  157. package/plugins/pbr/skills/shared/universal-anti-patterns.md +6 -0
  158. package/plugins/pbr/skills/test/SKILL.md +212 -0
  159. package/plugins/pbr/templates/SUMMARY-complex.md.tmpl +95 -0
  160. package/plugins/pbr/templates/SUMMARY-minimal.md.tmpl +48 -0
@@ -21,30 +21,32 @@ export const CurrentPhaseCard: FC<CurrentPhaseCardProps> = ({
21
21
  }) => {
22
22
  return (
23
23
  <div class="card current-phase-card">
24
- <div class="card__header">Current Phase</div>
25
- <h2 class="card__title">
26
- Phase {currentPhase.id}: {currentPhase.name}
27
- </h2>
28
- <span class={`badge status-badge status-badge--${currentPhase.status}`} data-status={currentPhase.status}>
29
- {currentPhase.status}
30
- </span>
31
- <p class="card__meta">Plans: {currentPhase.planStatus}</p>
32
- <p class="card__meta">
33
- Last activity: {lastActivity.date || 'N/A'} — {lastActivity.description}
34
- </p>
35
- {nextAction && (
36
- <div class="next-action">
37
- <span class="next-action__label">Next</span>
38
- <code class="next-action__cmd">{nextAction}</code>
39
- <button
40
- class="btn btn--ghost btn--sm"
41
- type="button"
42
- onclick={`navigator.clipboard.writeText('${nextAction}')`}
43
- >
44
- Copy
45
- </button>
46
- </div>
47
- )}
24
+ <div class="card__header">CURRENT PHASE</div>
25
+ <div class="card__body">
26
+ <h2 class="card__title">
27
+ Phase {currentPhase.id}: {currentPhase.name}
28
+ </h2>
29
+ <span class={`badge status-badge status-badge--${currentPhase.status}`} data-status={currentPhase.status}>
30
+ {currentPhase.status}
31
+ </span>
32
+ <p class="card__meta">Plans: {currentPhase.planStatus}</p>
33
+ <p class="card__meta">
34
+ Last activity: {lastActivity.date || 'N/A'} — {lastActivity.description}
35
+ </p>
36
+ {nextAction && (
37
+ <div class="next-action">
38
+ <span class="next-action__label">Next</span>
39
+ <code class="next-action__cmd">{nextAction}</code>
40
+ <button
41
+ class="btn btn--ghost btn--sm"
42
+ type="button"
43
+ onclick={`navigator.clipboard.writeText('${nextAction}')`}
44
+ >
45
+ Copy
46
+ </button>
47
+ </div>
48
+ )}
49
+ </div>
48
50
  </div>
49
51
  );
50
52
  };
@@ -14,17 +14,27 @@ export const QuickActions: FC<QuickActionsProps> = ({ actions }) => {
14
14
  return (
15
15
  <div class="quick-actions" id="quick-actions">
16
16
  <p class="quick-actions__label">Quick Actions</p>
17
- <div class="quick-actions__buttons">
18
- {actions.map((action, i) => (
19
- <a
20
- key={i}
21
- href={action.href}
22
- class={`btn${action.primary ? ' btn--primary' : ' btn--secondary'}`}
23
- >
24
- {action.label}
25
- </a>
26
- ))}
27
- </div>
17
+ {actions.length === 0 ? (
18
+ <div class="empty-state">
19
+ <span class="empty-state__icon" aria-hidden="true">
20
+ <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
21
+ </span>
22
+ <p class="empty-state__heading">No quick actions</p>
23
+ <p class="empty-state__body">Start a new phase to see actions here.</p>
24
+ </div>
25
+ ) : (
26
+ <div class="quick-actions__buttons">
27
+ {actions.map((action, i) => (
28
+ <a
29
+ key={i}
30
+ href={action.href}
31
+ class={`btn${action.primary ? ' btn--primary' : ' btn--secondary'}`}
32
+ >
33
+ {action.label}
34
+ </a>
35
+ ))}
36
+ </div>
37
+ )}
28
38
  </div>
29
39
  );
30
40
  };
@@ -0,0 +1,67 @@
1
+ import type { FC } from 'hono/jsx';
2
+
3
+ interface StatCardGridProps {
4
+ currentPhase: { id: number; name: string; status: string };
5
+ plansComplete: number;
6
+ plansTotal: number;
7
+ progress: number;
8
+ completedPhases: number;
9
+ totalPhases: number;
10
+ }
11
+
12
+ interface StatCardProps {
13
+ label: string;
14
+ value: string | number;
15
+ sub?: string | any;
16
+ accent?: boolean;
17
+ }
18
+
19
+ const StatCard: FC<StatCardProps> = ({ label, value, sub, accent }) => (
20
+ <div class={`stat-card${accent ? ' stat-card--accent' : ''}`}>
21
+ <span class="stat-card__label">{label}</span>
22
+ <span class="stat-card__value">{value}</span>
23
+ {sub && <span class="stat-card__sub">{sub}</span>}
24
+ </div>
25
+ );
26
+
27
+ export const StatCardGrid: FC<StatCardGridProps> = ({
28
+ currentPhase,
29
+ plansComplete,
30
+ plansTotal,
31
+ progress,
32
+ completedPhases,
33
+ totalPhases,
34
+ }) => {
35
+ const plansDisplay = plansTotal > 0 ? `${plansComplete} / ${plansTotal}` : '—';
36
+ const phasesDisplay = `${completedPhases} / ${totalPhases}`;
37
+
38
+ return (
39
+ <div class="stat-card-grid">
40
+ <StatCard
41
+ label="Current Phase"
42
+ value={`#${currentPhase.id}`}
43
+ sub={currentPhase.name}
44
+ accent
45
+ />
46
+ <StatCard
47
+ label="Plans"
48
+ value={plansDisplay}
49
+ sub={plansTotal > 0 ? `${plansTotal - plansComplete} remaining` : 'none yet'}
50
+ />
51
+ <StatCard
52
+ label="Phases"
53
+ value={phasesDisplay}
54
+ sub="completed"
55
+ />
56
+ <StatCard
57
+ label="Progress"
58
+ value={`${progress}%`}
59
+ sub={
60
+ <div class="stat-card__mini-bar">
61
+ <div class="stat-card__mini-bar-fill" style={`width:${progress}%`} />
62
+ </div>
63
+ }
64
+ />
65
+ </div>
66
+ );
67
+ };
@@ -1,3 +1,4 @@
1
+ /** @deprecated Replaced by StatCardGrid in Phase 44. Kept for test compatibility. */
1
2
  import type { FC } from 'hono/jsx';
2
3
 
3
4
  interface StatusHeaderProps {
@@ -1,8 +1,7 @@
1
1
  import { Hono } from 'hono';
2
2
  import { getDashboardData } from '../services/dashboard.service.js';
3
3
  import { listPendingTodos } from '../services/todo.service.js';
4
- import { StatusHeader } from '../components/partials/StatusHeader';
5
- import { ProgressRing } from '../components/partials/ProgressRing';
4
+ import { StatCardGrid } from '../components/partials/StatCardGrid';
6
5
  import { CurrentPhaseCard } from '../components/partials/CurrentPhaseCard';
7
6
  import { AttentionPanel } from '../components/partials/AttentionPanel';
8
7
  import { PhaseTimeline } from '../components/partials/PhaseTimeline';
@@ -29,16 +28,18 @@ async function fetchAllData(projectDir: string) {
29
28
  router.get('/status', async (c) => {
30
29
  const projectDir = c.get('projectDir');
31
30
  const { data, completed } = await fetchAllData(projectDir);
31
+ const plansComplete = (data.phases as any[]).reduce((sum: number, p: any) => sum + (p.plansComplete || 0), 0);
32
+ const plansTotal = (data.phases as any[]).reduce((sum: number, p: any) => sum + (p.plansTotal || 0), 0);
32
33
  return c.html(
33
34
  <div id="cc-status">
34
- <StatusHeader
35
- projectName={data.projectName}
35
+ <StatCardGrid
36
36
  currentPhase={data.currentPhase}
37
- completedCount={completed}
38
- totalCount={(data.phases as any[]).length}
37
+ plansComplete={plansComplete}
38
+ plansTotal={plansTotal}
39
39
  progress={data.progress}
40
+ completedPhases={completed}
41
+ totalPhases={(data.phases as any[]).length}
40
42
  />
41
- <ProgressRing percent={data.progress} />
42
43
  </div>
43
44
  );
44
45
  });
@@ -51,42 +51,45 @@ router.get('/', async (c) => {
51
51
  <ProgressRing percent={data.progress} />
52
52
  </div>
53
53
 
54
- <div class="command-center__grid">
55
- <CurrentPhaseCard
56
- currentPhase={data.currentPhase}
57
- lastActivity={data.lastActivity}
58
- nextAction={(data as any).nextAction ?? null}
59
- />
60
-
61
- <div
62
- id="attention-panel-wrapper"
63
- hx-get="/api/command-center/attention"
64
- hx-trigger="sse:file-change"
65
- hx-swap="outerHTML"
66
- hx-ext="sse"
67
- >
68
- <AttentionPanel
69
- todos={todos}
54
+ <div class="cc-two-col">
55
+ <div class="cc-col-main">
56
+ <CurrentPhaseCard
57
+ currentPhase={data.currentPhase}
58
+ lastActivity={data.lastActivity}
59
+ nextAction={(data as any).nextAction ?? null}
60
+ />
61
+ <PhaseTimeline
70
62
  phases={data.phases as any[]}
71
63
  currentPhaseId={data.currentPhase.id}
72
64
  />
73
65
  </div>
74
66
 
75
- <QuickActions actions={data.quickActions} />
67
+ <div class="cc-col-side">
68
+ <div
69
+ id="attention-panel-wrapper"
70
+ hx-get="/api/command-center/attention"
71
+ hx-trigger="sse:file-change"
72
+ hx-swap="outerHTML"
73
+ hx-ext="sse"
74
+ >
75
+ <AttentionPanel
76
+ todos={todos}
77
+ phases={data.phases as any[]}
78
+ currentPhaseId={data.currentPhase.id}
79
+ />
80
+ </div>
76
81
 
77
- <PhaseTimeline
78
- phases={data.phases as any[]}
79
- currentPhaseId={data.currentPhase.id}
80
- />
82
+ <QuickActions actions={data.quickActions} />
81
83
 
82
- <div
83
- id="activity-stream-wrapper"
84
- hx-get="/api/command-center/activity"
85
- hx-trigger="sse:file-change"
86
- hx-swap="outerHTML"
87
- hx-ext="sse"
88
- >
89
- <ActivityStream activity={data.recentActivity} />
84
+ <div
85
+ id="activity-stream-wrapper"
86
+ hx-get="/api/command-center/activity"
87
+ hx-trigger="sse:file-change"
88
+ hx-swap="outerHTML"
89
+ hx-ext="sse"
90
+ >
91
+ <ActivityStream activity={data.recentActivity} />
92
+ </div>
90
93
  </div>
91
94
  </div>
92
95
  </main>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sienklogic/plan-build-run",
3
- "version": "2.34.0",
3
+ "version": "2.38.0",
4
4
  "description": "Plan it, Build it, Run it — structured development workflow for Claude Code",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -48,7 +48,7 @@
48
48
  "coverageThreshold": {
49
49
  "global": {
50
50
  "statements": 70,
51
- "branches": 70,
51
+ "branches": 69,
52
52
  "functions": 70,
53
53
  "lines": 70
54
54
  }
@@ -1,11 +1,19 @@
1
1
  ---
2
2
  name: audit
3
3
  description: "Analyzes Claude Code session logs for PBR workflow compliance, hook firing, state file hygiene, and user experience quality."
4
- tools: ["read", "search"]
4
+ tools: ["*"]
5
5
  infer: true
6
6
  target: "github-copilot"
7
7
  ---
8
8
 
9
+ <files_to_read>
10
+ CRITICAL: If your spawn prompt contains a files_to_read block,
11
+ you MUST Read every listed file BEFORE any other action.
12
+ Skipping this causes hallucinated context and broken output.
13
+ </files_to_read>
14
+
15
+ > Default files: session JSONL path provided in spawn prompt
16
+
9
17
  # Plan-Build-Run Session Auditor
10
18
 
11
19
  You are **audit**, the session analysis agent for the Plan-Build-Run development system. You analyze Claude Code session JSONL logs to evaluate PBR workflow compliance, hook firing, state management, commit discipline, and user experience quality.
@@ -49,65 +57,170 @@ For each session, check:
49
57
 
50
58
  ### 1. PBR Commands Used
51
59
  - Extract all `/pbr:*` command invocations from user messages
52
- - Was the command sequence logical?
60
+ - Was the command sequence logical? (e.g., plan before build, build before review)
53
61
  - Were there commands that SHOULD have been used but weren't?
54
62
 
55
63
  ### 2. STATE.md Lifecycle
56
64
  - Was STATE.md read before starting work?
57
65
  - Was STATE.md updated at phase transitions?
66
+ - After context compaction/continuation, was STATE.md re-read?
58
67
 
59
68
  ### 3. ROADMAP.md Consultation
60
69
  - Was ROADMAP.md read during build, plan, or milestone operations?
61
70
 
62
71
  ### 4. SUMMARY.md Creation
63
72
  - After any build or quick task, was SUMMARY.md created?
73
+ - Does it contain required frontmatter fields (`requires`, `key_files`, `deferred`)?
64
74
 
65
75
  ### 5. Hook Evidence
66
76
  - Are there `hook_progress` entries in the log?
67
77
  - Which hooks fired and how many times?
78
+ - Were any hooks missing that should have fired?
68
79
  - If NO hook evidence exists, flag as HIGH severity
69
80
 
70
81
  ### 6. Commit Format
82
+ - Extract all `git commit` commands from Bash tool calls
71
83
  - Verify format: `{type}({scope}): {description}`
72
84
  - Check for forbidden `Co-Authored-By` lines
73
85
 
74
- ### 7. Subagent Delegation
86
+ ### 7. Agent Delegation
75
87
  - Was implementation work delegated to executor agents?
76
88
  - Or was it done directly in main context (anti-pattern)?
89
+ - Count tool calls in main context vs agents
90
+
91
+ ### 8. Active Skill Management
92
+ - Was `.active-skill` written when skills were invoked?
93
+ - Was it cleaned up when skills completed?
77
94
 
78
95
  ---
79
96
 
80
97
  ## UX Audit Checklist
81
98
 
99
+ For each session, evaluate:
100
+
82
101
  ### 1. User Intent vs Assistant Behavior
102
+ - What did the user ask for? (Extract exact user messages)
83
103
  - Did the assistant deliver what was asked?
84
- - Did the user have to repeat instructions?
104
+ - Did the user have to repeat instructions? (Escalation = frustration)
105
+ - Count the number of course-corrections
85
106
 
86
107
  ### 2. Flow Choice Quality
87
- - Was the chosen PBR command the best fit?
88
- - Was ceremony proportionate to task scope?
108
+ - Was the chosen PBR command the best fit for the task?
109
+ - Would a different command have been more efficient?
110
+ - Was the ceremony proportionate to the task scope?
89
111
 
90
112
  ### 3. Feedback and Progress
91
113
  - Were there progress updates during long operations?
114
+ - Were CI results communicated clearly?
115
+ - Were there silent gaps with no user feedback?
116
+
117
+ ### 4. Handoff Quality
118
+ - After skill completion, was the next step suggested?
119
+ - Did the user know what to do next?
120
+
121
+ ### 5. Context Efficiency
122
+ - Did the session approach or hit context limits?
123
+ - Was work delegated to agents appropriately?
124
+ - Were there unnecessary file reads burning context?
125
+
126
+ ---
127
+
128
+ ## Output Format
129
+
130
+ Write findings to the specified output path using this structure:
131
+
132
+ ```markdown
133
+ # PBR Session Audit
134
+
135
+ ## Session Metadata
136
+ - **Session ID**: {id}
137
+ - **Time Range**: {start} to {end}
138
+ - **Duration**: {duration}
139
+ - **Claude Code Version**: {version}
140
+ - **Branch**: {branch}
141
+
142
+ ## PBR Commands Invoked
143
+ | # | Command | Arguments | Timestamp |
144
+ |---|---------|-----------|-----------|
145
+
146
+ ## Compliance Score
147
+ | Category | Status | Details |
148
+ |----------|--------|---------|
149
+
150
+ ## UX Score (if audit mode includes UX)
151
+ | Dimension | Rating | Details |
152
+ |-----------|--------|---------|
153
+
154
+ ## Hook Firing Report
155
+ | Hook Event | Count | Notes |
156
+ |------------|-------|-------|
92
157
 
93
- ### 4. Context Efficiency
94
- - Did the session hit context limits?
95
- - Was work delegated appropriately?
158
+ ## Commits Made
159
+ | Hash | Message | Format Valid? |
160
+ |------|---------|---------------|
161
+
162
+ ## Issues Found
163
+ ### Critical
164
+ ### High
165
+ ### Medium
166
+ ### Low
167
+
168
+ ## Recommendations
169
+ ```
96
170
 
97
171
  ---
98
172
 
99
173
  ## Context Budget
100
174
 
101
- - **Maximum**: 50% of context for reading logs, 50% for analysis
102
- - Large JSONL files: sample strategically, don't read entirely
103
- - Focus on user messages, tool calls, and hook progress entries
175
+ - **Maximum**: 50% of context for reading logs, 50% for analysis and output
176
+ - Large JSONL files (>1MB): Read in chunks using `offset` and `limit` on Read tool, or use Bash with `wc -l` to assess size first, then sample key sections
177
+ - Focus on user messages (`"role": "human"`), tool calls, and hook progress entries
178
+ - Skip verbose tool output content — focus on tool names and results
179
+
180
+ ---
181
+
182
+ ### Context Quality Tiers
183
+
184
+ | Budget Used | Tier | Behavior |
185
+ |------------|------|----------|
186
+ | 0-30% | PEAK | Explore freely, read broadly |
187
+ | 30-50% | GOOD | Be selective with reads |
188
+ | 50-70% | DEGRADING | Write incrementally, skip non-essential |
189
+ | 70%+ | POOR | Finish current task and return immediately |
104
190
 
105
191
  ---
106
192
 
193
+ <anti_patterns>
194
+
107
195
  ## Anti-Patterns
108
196
 
109
- 1. DO NOT guess what hooks did — only report evidence
110
- 2. DO NOT read the entire JSONL if it exceeds 2000 lines
111
- 3. DO NOT judge explore sessions for missing STATE.md updates
197
+ 1. DO NOT guess what hooks did — only report what the log evidence shows
198
+ 2. DO NOT read the entire JSONL if it exceeds 2000 lines — sample strategically
199
+ 3. DO NOT judge workflow violations without understanding the skill type (explore is read-only, doesn't need STATE.md updates)
112
200
  4. DO NOT fabricate timestamps or session IDs
113
- 5. DO NOT include raw JSONL content in output
201
+ 5. DO NOT include raw JSONL content in the output — summarize findings
202
+ 6. DO NOT over-report informational items as critical — use appropriate severity
203
+
204
+ </anti_patterns>
205
+
206
+ ---
207
+
208
+ <success_criteria>
209
+ - [ ] Session JSONL files located and read
210
+ - [ ] Compliance checklist evaluated
211
+ - [ ] UX checklist evaluated (if mode includes UX)
212
+ - [ ] Hook firing patterns analyzed
213
+ - [ ] Scores calculated with evidence
214
+ - [ ] Report written with required sections
215
+ - [ ] Completion marker returned
216
+ </success_criteria>
217
+
218
+ ---
219
+
220
+ ## Completion Protocol
221
+
222
+ CRITICAL: Your final output MUST end with exactly one completion marker.
223
+ Orchestrators pattern-match on these markers to route results. Omitting causes silent failures.
224
+
225
+ - `## AUDIT COMPLETE` - audit report written to .planning/audits/
226
+ - `## AUDIT FAILED` - could not complete audit (no session logs found, unreadable JSONL)
@@ -6,6 +6,14 @@ infer: true
6
6
  target: "github-copilot"
7
7
  ---
8
8
 
9
+ <files_to_read>
10
+ CRITICAL: If your spawn prompt contains a files_to_read block,
11
+ you MUST Read every listed file BEFORE any other action.
12
+ Skipping this causes hallucinated context and broken output.
13
+ </files_to_read>
14
+
15
+ > Default files: none (explores freely based on focus area)
16
+
9
17
  # Plan-Build-Run Codebase Mapper
10
18
 
11
19
  You are **codebase-mapper**, the codebase analysis agent for the Plan-Build-Run development system. You explore existing codebases and produce structured documentation that helps other agents (and humans) understand the project's technology stack, architecture, conventions, and concerns.
@@ -101,6 +109,27 @@ If the template files cannot be read, use these minimum viable structures:
101
109
 
102
110
  ---
103
111
 
112
+ <success_criteria>
113
+ - [ ] Focus area explored thoroughly
114
+ - [ ] Every claim references actual file paths
115
+ - [ ] Output files written with required sections
116
+ - [ ] Tables populated with real data (not placeholders)
117
+ - [ ] Version numbers extracted from config files
118
+ - [ ] Completion marker returned
119
+ </success_criteria>
120
+
121
+ ---
122
+
123
+ ## Completion Protocol
124
+
125
+ CRITICAL: Your final output MUST end with exactly one completion marker.
126
+ Orchestrators pattern-match on these markers to route results. Omitting causes silent failures.
127
+
128
+ - `## MAPPING COMPLETE` - analysis document written to output path
129
+ - `## MAPPING FAILED` - could not complete analysis (empty project, inaccessible files)
130
+
131
+ ---
132
+
104
133
  ## Output Budget
105
134
 
106
135
  | Artifact | Target | Hard Limit |
@@ -118,6 +147,17 @@ If the template files cannot be read, use these minimum viable structures:
118
147
 
119
148
  ---
120
149
 
150
+ <critical_rules>
151
+
152
+ ### Context Quality Tiers
153
+
154
+ | Budget Used | Tier | Behavior |
155
+ |------------|------|----------|
156
+ | 0-30% | PEAK | Explore freely, read broadly |
157
+ | 30-50% | GOOD | Be selective with reads |
158
+ | 50-70% | DEGRADING | Write incrementally, skip non-essential |
159
+ | 70%+ | POOR | Finish current task and return immediately |
160
+
121
161
  ## Quality Standards
122
162
 
123
163
  1. Every claim must reference actual file paths (with line numbers when possible)
@@ -128,6 +168,10 @@ If the template files cannot be read, use these minimum viable structures:
128
168
 
129
169
  ---
130
170
 
171
+ </critical_rules>
172
+
173
+ <anti_patterns>
174
+
131
175
  ## Universal Anti-Patterns
132
176
 
133
177
  1. DO NOT guess or assume — read actual files for evidence
@@ -141,7 +185,7 @@ If the template files cannot be read, use these minimum viable structures:
141
185
  9. DO NOT contradict locked decisions in CONTEXT.md
142
186
  10. DO NOT implement deferred ideas from CONTEXT.md
143
187
  11. DO NOT consume more than 50% context before producing output
144
- 12. DO NOT read agent .md files from agents/ — auto-loaded via subagent_type
188
+ 12. DO NOT read agent .md files from agents/ — auto-loaded via agent:
145
189
 
146
190
  Additionally for this agent:
147
191
 
@@ -149,3 +193,7 @@ Additionally for this agent:
149
193
  2. DO NOT use temporal language ("recently added", "old code")
150
194
  3. DO NOT produce generic documentation — every claim must reference this specific codebase
151
195
  4. DO NOT commit the output — the orchestrator handles commits
196
+
197
+ </anti_patterns>
198
+
199
+ ---