v1.11.1 — installer 'A' option and bot evaluation notes

- install.js: split into 'I' (prompts + loop) and new 'A' (everything
  including bot + metrics); update prompt to (I, A, U, C, Q).
- CHANGELOG: document complexity check (1.11.1) and expand 1.11.0
  notes for the LLM-as-judge evaluation system.
- version.json: 1.10.0 -> 1.11.1.
This commit is contained in:
2026-05-11 13:14:35 -07:00
parent c2579a7b6a
commit 8e0b1a2ab2
3 changed files with 47 additions and 18 deletions
+19 -1
View File
@@ -2,6 +2,16 @@
All notable changes to Plan2Code will be documented in this file.
## v1.11.1
### 🔧 Changed
- **Task complexity check in Document workflow** — Enhanced task writing guidance with lightweight cognitive complexity heuristics (inspired by PR #26)
- "Time-boxed" criterion now includes explicit split triggers: 5+ logic branches, 2+ integration points, or shared interface mutation
- New "Complexity check" prompt: before finalizing each task, LLM considers logic branches, distinct behaviors, integration points, shared interface impact, and error/edge cases
- Tasks complex on 3+ signals must be split; adjacent trivial tasks forming a cohesive unit should be combined
- Process step 7 updated to reinforce the complexity check during phase file authoring
## v1.11.0
### ✨ Added
@@ -13,7 +23,15 @@ All notable changes to Plan2Code will be documented in this file.
- State file (`.plan2code-bot-state.json`) saved after each step; automatically deleted on full success, preserved on failure for later resume
- Resume auto-detects state files in current directory (enhancement mode) or immediate subdirectories (new-project mode)
- Artifact validation after each step (aborts on missing expected outputs)
- Auto-responder handles `AskUserQuestion` prompts autonomously (approvals, testing gates, name questions)
- **LLM-as-judge evaluation system** — Always-on quality assessment that transforms bot from "yes-man" to authentic QA agent
- **Intelligent decision making**: Uses LLM to answer `AskUserQuestion` prompts based on current observations (tools used, files created, errors) instead of hardcoded keyword matching
- **Post-step evaluation**: Comprehensive quality assessment after each step using step-specific criteria (score 0-100, strengths, weaknesses, suggestions, critical issues)
- **Observation tracking**: Full execution history captured (tools, files, messages, errors, questions with LLM reasoning)
- **Quality gate**: Blocks finalization if average score < 60, ensuring minimum quality standards
- **Evaluation artifacts**: Creates `BOT-EVALUATION.md` (quality assessments) and `BOT-NOTES.md` (execution observations) for metrics analysis
- **Color-coded output**: Green (≥85), yellow (70-84), red (<70) score display in console
- **Honest scoring**: Evaluation criteria emphasize realistic assessment (most work scores 70-85, not inflated)
- **Metrics-ready data**: Structured `EvaluationResult` and `ExecutionObservation` in state file for `plan2code-metrics` analysis
- Bot-friendly skill installation (copies plan2code skills with `disable-model-invocation` stripped)
- Implement step loops up to 10 passes until all phases are complete
- Installer integration: `C > B` menu option to install bot CLI only
+27 -16
View File
@@ -1387,32 +1387,43 @@ function runInteractive() {
console.log(padEndVisible(`${COLORS.CYAN}${COLORS.RESET} ${COLORS.BRIGHT}INSTALL PLAN2CODE${COLORS.RESET}`, 58) + `${COLORS.CYAN}${COLORS.RESET}`);
console.log(`${COLORS.CYAN}╠═════════════════════════════════════════════════════════╣${COLORS.RESET}`);
console.log(padEndVisible(`${COLORS.CYAN}${COLORS.RESET} ${COLORS.BRIGHT}I.${COLORS.RESET} ${COLORS.GREEN}INSTALL${COLORS.RESET} Install Plan2Code for all platforms`, 58) + `${COLORS.CYAN}${COLORS.RESET}`);
console.log(padEndVisible(`${COLORS.CYAN}${COLORS.RESET} ${COLORS.BRIGHT}A.${COLORS.RESET} ${COLORS.MAGENTA}ALL${COLORS.RESET} Install Plan2Code + dev tools`, 58) + `${COLORS.CYAN}${COLORS.RESET}`);
console.log(padEndVisible(`${COLORS.CYAN}${COLORS.RESET} ${COLORS.BRIGHT}U.${COLORS.RESET} ${COLORS.RED}UNINSTALL${COLORS.RESET} Remove Plan2Code files`, 58) + `${COLORS.CYAN}${COLORS.RESET}`);
console.log(padEndVisible(`${COLORS.CYAN}${COLORS.RESET} ${COLORS.BRIGHT}C.${COLORS.RESET} ${COLORS.BLUE}CUSTOM${COLORS.RESET} Advanced options`, 58) + `${COLORS.CYAN}${COLORS.RESET}`);
console.log(padEndVisible(`${COLORS.CYAN}${COLORS.RESET} ${COLORS.BRIGHT}Q.${COLORS.RESET} ${COLORS.DIM}QUIT${COLORS.RESET} Exit`, 58) + `${COLORS.CYAN}${COLORS.RESET}`);
console.log(`${COLORS.CYAN}╚═════════════════════════════════════════════════════════╝${COLORS.RESET}`);
console.log('');
// Task 2.2: Input prompt
// Input prompt
console.log('');
const answer = await question(`${COLORS.CYAN}${SYMBOLS.SELECT} SELECT OPTION${COLORS.RESET} (I, U, C, Q) [I]: `);
const answer = await question(`${COLORS.CYAN}${SYMBOLS.SELECT} SELECT OPTION${COLORS.RESET} (I, A, U, C, Q) [I]: `);
const input = answer.trim().toUpperCase() || 'I';
// Task 2.3: I path — Install All
// I path — Install prompts + loop
if (input === 'I') {
rl.close();
const loopResult = installPlan2CodeLoop();
console.log('');
const metricsResult = installPlan2CodeMetrics();
console.log('');
const botResult = installPlan2CodeBot();
console.log('');
const installResult = install();
const exitCode = loopResult !== 0 ? loopResult : metricsResult !== 0 ? metricsResult : botResult !== 0 ? botResult : installResult;
const exitCode = loopResult !== 0 ? loopResult : installResult;
process.exit(exitCode);
}
// Task 2.4: U path — Uninstall All
// A path — Install Everything (prompts + loop + bot + metrics)
if (input === 'A') {
rl.close();
const loopResult = installPlan2CodeLoop();
console.log('');
const botResult = installPlan2CodeBot();
console.log('');
const metricsResult = installPlan2CodeMetrics();
console.log('');
const installResult = install();
const exitCode = loopResult !== 0 ? loopResult : installResult !== 0 ? installResult : botResult !== 0 ? botResult : metricsResult;
process.exit(exitCode);
}
// U path — Uninstall All
if (input === 'U') {
console.log('');
console.log(`${COLORS.RED} o o${COLORS.RESET}`);
@@ -1442,7 +1453,7 @@ function runInteractive() {
}
}
// Task 2.5: C path — CUSTOM sub-menu
// C path — CUSTOM sub-menu
if (input === 'C') {
console.log('');
console.log(`${COLORS.CYAN}╔════════════════════════════════════════════════════════════════╗${COLORS.RESET}`);
@@ -1458,13 +1469,13 @@ function runInteractive() {
const customAnswer = await question(`${COLORS.CYAN}${SYMBOLS.SELECT} SELECT OPTION${COLORS.RESET} (L, O, M, B, Q) [Q]: `);
const customInput = customAnswer.trim().toUpperCase() || 'Q';
// Task 2.6: C > L — show local install instructions
// C > L — show local install instructions
if (customInput === 'L') {
rl.close();
process.exit(displayLocalInstructions());
}
// Task 2.7: C > O — install loop CLI only
// C > O — install loop CLI only
if (customInput === 'O') {
rl.close();
const result = installPlan2CodeLoop();
@@ -1485,19 +1496,19 @@ function runInteractive() {
process.exit(result);
}
// Task 2.8: C > Q — back to main menu
// C > Q — back to main menu
return main();
}
// Task 2.8: Q — exit
// Q — exit
if (input === 'Q') {
console.log(`\n${COLORS.YELLOW}${SYMBOLS.WARNING} CANCELLED${COLORS.RESET}\n`);
rl.close();
process.exit(0);
}
// Task 2.8: Invalid input — loop back
console.log(`\n${COLORS.RED}${SYMBOLS.ERROR} Invalid option. Please choose I, U, C, or Q.${COLORS.RESET}\n`);
// Invalid input — loop back
console.log(`\n${COLORS.RED}${SYMBOLS.ERROR} Invalid option. Please choose I, A, U, C, or Q.${COLORS.RESET}\n`);
return main();
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "Plan2Code",
"version": "1.10.0",
"version": "1.11.1",
"description": "A structured 4-step workflow methodology for AI-assisted software development",
"keywords": [
"ai",