diff --git a/.claude/commands/own/init.md b/.claude/commands/own/init.md index a3a5168..8c9de58 100644 --- a/.claude/commands/own/init.md +++ b/.claude/commands/own/init.md @@ -615,7 +615,7 @@ Update `.claude/ownyourcode-manifest.json` with profile settings: ```json { - "version": "2.5.0", + "version": "2.6.0", "installed_at": "...", "profile": { "type": "junior", @@ -639,7 +639,7 @@ Update `.claude/ownyourcode-manifest.json` with profile settings: ```json { - "version": "2.5.0", + "version": "2.6.0", "installed_at": "...", "profile": { "type": "custom", @@ -1221,7 +1221,7 @@ window.PROJECT = { audience: "[enum: myself | employers | clients | real-users]", mission: "[the PROBLEM statement, in the user's words]", generated:"[today YYYY-MM-DD]", - version: "2.5.0", + version: "2.6.0", }, dod: [ { text: "[one concrete, measurable done-criterion]", done: false }, @@ -1254,7 +1254,7 @@ window.PROJECT = { | `meta.audience` | Phase 3 selection → enum: "Yourself"→`myself`, "Employers"→`employers`, "A client"→`clients`, "Real users"→`real-users` | | `meta.mission` | Phase 2 problem statement (the *why*, in their words) | | `meta.generated` | Today, `YYYY-MM-DD` | -| `meta.version` | Literal `2.5.0` | +| `meta.version` | Literal `2.6.0` | | `dod[]` | Phase 4 Definition-of-Done items, each `done:false` | | `stack[]` | Phase 5 stack + Phase 5.1 MCP-verified versions, as 5-tuples | | `phases[]` | Phase 5.5 collaborative roadmap — each `status:"roadmap-only"` with `items:[…]`, NO `spec`/`design`/`tasks` (those come from `/own:feature`) | diff --git a/.claude/commands/own/theme.md b/.claude/commands/own/theme.md index 5fa1eb4..99b1a3e 100644 --- a/.claude/commands/own/theme.md +++ b/.claude/commands/own/theme.md @@ -139,7 +139,8 @@ both ` diff --git a/scripts/base-install.ps1 b/scripts/base-install.ps1 index 0a030b1..1d29960 100644 --- a/scripts/base-install.ps1 +++ b/scripts/base-install.ps1 @@ -1,6 +1,6 @@ # OwnYourCode Base Installation Script (Windows) # AI-Mentored Development for All Developers -# Version 2.5.0 - Dashboard SDD +# Version 2.6.0 - Dashboard Elevated # # Usage: irm https://raw.githubusercontent.com/DanielPodolsky/ownyourcode/main/scripts/base-install.ps1 | iex @@ -19,10 +19,10 @@ function Write-Err { param($msg) Write-Host "[ERROR] $msg" -ForegroundColor Red; # Header Write-Host "" -Write-Host "╔═══════════════════════════════════════════════════════╗" -ForegroundColor Green -Write-Host "║ OwnYourCode Installation v2.5.0 ║" -ForegroundColor Green -Write-Host "║ AI-Mentored Development with Profile Support ║" -ForegroundColor Green -Write-Host "╚═══════════════════════════════════════════════════════╝" -ForegroundColor Green +Write-Host "+=======================================================+" -ForegroundColor Green +Write-Host "| OwnYourCode Installation v2.6.0 |" -ForegroundColor Green +Write-Host "| AI-Mentored Development with Profile Support |" -ForegroundColor Green +Write-Host "+=======================================================+" -ForegroundColor Green Write-Host "" # ============================================================================ @@ -156,9 +156,9 @@ if (-not (Test-Path $registryPath)) { # ============================================================================ Write-Host "" -Write-Host "╔═══════════════════════════════════════════════════════╗" -ForegroundColor Green -Write-Host "║ Installation Complete! ║" -ForegroundColor Green -Write-Host "╚═══════════════════════════════════════════════════════╝" -ForegroundColor Green +Write-Host "+=======================================================+" -ForegroundColor Green +Write-Host "| Installation Complete! |" -ForegroundColor Green +Write-Host "+=======================================================+" -ForegroundColor Green Write-Host "" Write-OK "OwnYourCode installed to ~/ownyourcode/" diff --git a/scripts/base-install.sh b/scripts/base-install.sh index 242b6f9..e99666d 100755 --- a/scripts/base-install.sh +++ b/scripts/base-install.sh @@ -2,7 +2,7 @@ # OwnYourCode Base Installation Script # AI-Mentored Development for All Developers -# Version 2.5.0 - Dashboard SDD +# Version 2.6.0 - Dashboard Elevated # # Usage: curl -sSL https://raw.githubusercontent.com/DanielPodolsky/ownyourcode/main/scripts/base-install.sh | bash @@ -28,7 +28,7 @@ error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; } # Header echo "" echo -e "${GREEN}╔═══════════════════════════════════════════════════════╗${NC}" -echo -e "${GREEN}║ OwnYourCode Installation v2.5.0 ║${NC}" +echo -e "${GREEN}║ OwnYourCode Installation v2.6.0 ║${NC}" echo -e "${GREEN}║ AI-Mentored Development with Profile Support ║${NC}" echo -e "${GREEN}╚═══════════════════════════════════════════════════════╝${NC}" echo "" diff --git a/scripts/project-install.ps1 b/scripts/project-install.ps1 index 40b0c7f..c7bd4b3 100644 --- a/scripts/project-install.ps1 +++ b/scripts/project-install.ps1 @@ -1,6 +1,6 @@ # OwnYourCode Project Installation Script (Windows) # AI-Mentored Development for All Developers -# Version 2.5.0 - Dashboard SDD +# Version 2.6.0 - Dashboard Elevated $ErrorActionPreference = "Stop" @@ -17,10 +17,10 @@ function Write-Err { param($msg) Write-Host "[ERROR] $msg" -ForegroundColor Red; # Header Write-Host "" -Write-Host "╔═══════════════════════════════════════════════════════════╗" -ForegroundColor Green -Write-Host "║ OwnYourCode Installation v2.5.0 ║" -ForegroundColor Green -Write-Host "║ AI-Mentored Development with Profile Support ║" -ForegroundColor Green -Write-Host "╚═══════════════════════════════════════════════════════════╝" -ForegroundColor Green +Write-Host "+===========================================================+" -ForegroundColor Green +Write-Host "| OwnYourCode Installation v2.6.0 |" -ForegroundColor Green +Write-Host "| AI-Mentored Development with Profile Support |" -ForegroundColor Green +Write-Host "+===========================================================+" -ForegroundColor Green Write-Host "" # Check base exists @@ -54,7 +54,7 @@ if (Test-Path $ownyourcodeDir) { Write-Info "Creating directories..." $directories = @( - # Note: v2.5 drops product/ — mission/stack/roadmap now live in the dashboard. + # Note: v2.5 drops product/ - mission/stack/roadmap now live in the dashboard. "ownyourcode/specs/active", "ownyourcode/specs/completed", "ownyourcode/career/stories", @@ -129,7 +129,7 @@ if (Test-Path $CLAUDE_MD) { if (($replace -eq "y" -or $replace -eq "Y") -and (Test-Path $TEMPLATE)) { # Remove existing section and append fresh - $cleaned = $content -replace "# ═.*OWNYOURCODE[\s\S]*?# ═.*END OWNYOURCODE[^\n]*", "" + $cleaned = $content -replace "# \u2550.*OWNYOURCODE[\s\S]*?# \u2550.*END OWNYOURCODE[^\n]*", "" $templateContent = Get-Content $TEMPLATE -Raw Set-Content -Path $CLAUDE_MD -Value ($cleaned.Trim() + "`n`n" + $templateContent) Write-OK "OwnYourCode section replaced" @@ -284,7 +284,7 @@ if (Test-Path $srcGuides) { } # ============================================================================ -# STEP 7.5: Seed the dashboard (v2.5 — Dashboard SDD) +# STEP 7.5: Seed the dashboard (v2.5 - Dashboard SDD) # ============================================================================ # v2.5 replaces the per-page product/*.html and specs/**/*.html files with a # single dashboard: a stable view shell (dashboard.html) + a data file @@ -328,9 +328,9 @@ if (Test-Path $dashTemplate) { Copy-Item $promptSrc -Destination (Join-Path $PROJECT_DIR "ownyourcode/.theme/theme-prompt.md") -Force } - Write-OK "Dashboard seeded — open ownyourcode/dashboard/dashboard.html, then run /own:init" + Write-OK "Dashboard seeded - open ownyourcode/dashboard/dashboard.html, then run /own:init" } else { - Write-Warn "Dashboard templates not found in source repo — skipping dashboard seed." + Write-Warn "Dashboard templates not found in source repo - skipping dashboard seed." Write-Warn "Update your OwnYourCode base install to get the v2.5 dashboard." } @@ -367,7 +367,7 @@ $timestamp = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") $manifestContent = @" { - "version": "2.5.0", + "version": "2.6.0", "installed_at": "$timestamp", "claude_md_location": "$CLAUDE_MD_REL", "backup_path": $backupJson, @@ -441,12 +441,12 @@ Write-OK "Manifest created at .claude/ownyourcode-manifest.json" # ============================================================================ Write-Host "" -Write-Host "╔═══════════════════════════════════════════════════════════╗" -ForegroundColor Green -Write-Host "║ Installation Complete! v2.5.0 ║" -ForegroundColor Green -Write-Host "╚═══════════════════════════════════════════════════════════╝" -ForegroundColor Green +Write-Host "+===========================================================+" -ForegroundColor Green +Write-Host "| Installation Complete! v2.6.0 |" -ForegroundColor Green +Write-Host "+===========================================================+" -ForegroundColor Green Write-Host "" -Write-OK "OwnYourCode v2.5.0 installed successfully!" +Write-OK "OwnYourCode v2.6.0 installed successfully!" Write-Host "" Write-Info "What was created:" diff --git a/scripts/project-install.sh b/scripts/project-install.sh index 9c274fe..c361ac3 100755 --- a/scripts/project-install.sh +++ b/scripts/project-install.sh @@ -2,7 +2,7 @@ # OwnYourCode Project Installation Script # AI-Mentored Development for All Developers -# Version 2.5.0 - Dashboard SDD +# Version 2.6.0 - Dashboard Elevated set -e @@ -29,7 +29,7 @@ error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; } # Header echo "" echo -e "${GREEN}╔═══════════════════════════════════════════════════════════╗${NC}" -echo -e "${GREEN}║ OwnYourCode Installation v2.5.0 ║${NC}" +echo -e "${GREEN}║ OwnYourCode Installation v2.6.0 ║${NC}" echo -e "${GREEN}║ AI-Mentored Development with Profile Support ║${NC}" echo -e "${GREEN}╚═══════════════════════════════════════════════════════════╝${NC}" echo "" @@ -325,7 +325,7 @@ fi cat > "$MANIFEST" << EOF { - "version": "2.5.0", + "version": "2.6.0", "installed_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)", "claude_md_location": "$CLAUDE_MD_REL", "backup_path": $BACKUP_JSON, @@ -399,11 +399,11 @@ success "Manifest created at .claude/ownyourcode-manifest.json" echo "" echo -e "${GREEN}╔═══════════════════════════════════════════════════════════╗${NC}" -echo -e "${GREEN}║ Installation Complete! v2.5.0 ║${NC}" +echo -e "${GREEN}║ Installation Complete! v2.6.0 ║${NC}" echo -e "${GREEN}╚═══════════════════════════════════════════════════════════╝${NC}" echo "" -success "OwnYourCode v2.5.0 installed successfully!" +success "OwnYourCode v2.6.0 installed successfully!" echo "" info "What was created:" diff --git a/scripts/project-uninstall.ps1 b/scripts/project-uninstall.ps1 index 89ab1d5..6e3389b 100644 --- a/scripts/project-uninstall.ps1 +++ b/scripts/project-uninstall.ps1 @@ -52,9 +52,9 @@ function Write-Err { param($msg) Write-Host "[ERROR] $msg" -ForegroundColor Red; # Header Write-Host "" -Write-Host "╔═══════════════════════════════════════════════════════════╗" -ForegroundColor Red -Write-Host "║ OwnYourCode Uninstallation ║" -ForegroundColor Red -Write-Host "╚═══════════════════════════════════════════════════════════╝" -ForegroundColor Red +Write-Host "+===========================================================+" -ForegroundColor Red +Write-Host "| OwnYourCode Uninstallation |" -ForegroundColor Red +Write-Host "+===========================================================+" -ForegroundColor Red Write-Host "" # ============================================================================ @@ -112,7 +112,7 @@ if (Test-Path $CLAUDE_MD) { } elseif ((Get-Content $CLAUDE_MD -Raw) -match "OWNYOURCODE:") { # Legacy fallback - remove OwnYourCode section using regex $content = Get-Content $CLAUDE_MD -Raw - $cleaned = $content -replace "# ═.*OWNYOURCODE[\s\S]*?# ═.*END OWNYOURCODE[^\n]*\n?", "" + $cleaned = $content -replace "# \u2550.*OWNYOURCODE[\s\S]*?# \u2550.*END OWNYOURCODE[^\n]*\n?", "" $cleaned = $cleaned.Trim() if ([string]::IsNullOrWhiteSpace($cleaned)) { @@ -225,9 +225,9 @@ if (Test-Path $ownyourcodeDir) { # ============================================================================ Write-Host "" -Write-Host "╔═══════════════════════════════════════════════════════════╗" -ForegroundColor Green -Write-Host "║ Uninstallation Complete! ║" -ForegroundColor Green -Write-Host "╚═══════════════════════════════════════════════════════════╝" -ForegroundColor Green +Write-Host "+===========================================================+" -ForegroundColor Green +Write-Host "| Uninstallation Complete! |" -ForegroundColor Green +Write-Host "+===========================================================+" -ForegroundColor Green Write-Host "" Write-OK "OwnYourCode has been removed from this project." diff --git a/tests/commands.test.sh b/tests/commands.test.sh index a499fc6..1a5414c 100644 --- a/tests/commands.test.sh +++ b/tests/commands.test.sh @@ -62,8 +62,32 @@ present_in 'Terminal-Futurism' "$TPL/dashboard.html.template" "template names Te present_in '#22c55e' "$TPL/dashboard.html.template" "template uses the green accent" present_in 'JetBrains\+Mono' "$TPL/dashboard.html.template" "template loads JetBrains Mono" present_in 'phase-numeral' "$TPL/dashboard.html.template" "template has the ghost-numeral motif" +present_in 'class="tmx"' "$TPL/dashboard.html.template" "template has the v2.6 tmux status bar" +present_in 'id="pal"' "$TPL/dashboard.html.template" "template has the v2.6 command palette" present_in 'Terminal-Futurism' "$TPL/theme-prompt.md.template" "default theme brief describes Terminal-Futurism" +echo "— Windows PowerShell 5.1 compatibility (pure-ASCII .ps1) —" +# PS 5.1 reads BOM-less script FILES as ANSI, so non-ASCII content (banner +# art) decodes to mojibake containing curly quotes that PS treats as string +# delimiters -> cascade parse errors (found live on Windows, 2026-06-11). +# Convention (same as Chocolatey/Scoop installers): .ps1 files are pure +# ASCII, which behaves identically on PS 5.1/7, -File, and irm|iex — no BOM +# ambiguity on any path. Unicode in match patterns goes via \uXXXX escapes. +for f in "$ROOT"/scripts/*.ps1; do + nonascii="$(LC_ALL=C tr -d '\11\12\15\40-\176' < "$f" | wc -c | tr -d ' ')" + if [ "$nonascii" = "0" ]; then + ok "$(basename "$f") is pure ASCII (PS 5.1 safe on every invocation path)" + else + bad "$(basename "$f") has $nonascii non-ASCII bytes — PS 5.1 will misparse it when run as a file" + fi +done + +echo "— every shipped command is documented in CLAUDE.md.template —" +for f in "$CMD"/*.md; do + cmd_name="$(basename "$f" .md)" + present_in "/own:$cmd_name" "$ROOT/core/CLAUDE.md.template" "CLAUDE.md.template lists /own:$cmd_name" +done + echo "" echo "commands: ${PASS}/$((PASS+FAIL)) passed" [ "$FAIL" -eq 0 ] diff --git a/tests/dashboard-render.test.js b/tests/dashboard-render.test.js index 982122e..ccd717c 100644 --- a/tests/dashboard-render.test.js +++ b/tests/dashboard-render.test.js @@ -13,6 +13,10 @@ window.PROJECT) then eval the template's inline