Created
April 8, 2026 05:29
-
-
Save Turupawn/19486339e7030fdaac960e13c98cf991 to your computer and use it in GitHub Desktop.
validate one shot codegen
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| set -e | |
| MODEL="${1:-claude-opus-4-6}" | |
| DIR="$(cd "$(dirname "$0")" && pwd)" | |
| WORK="$DIR/.validate-run" | |
| echo "=== Validating notes with $MODEL ===" | |
| START=$(date +%s) | |
| # 1. Backup code and memory | |
| rm -rf "$WORK" | |
| mkdir -p "$WORK" | |
| [ -d "$DIR/code" ] && cp -r "$DIR/code" "$WORK/original_code" | |
| PROJECT_MEM=$(echo "$DIR" | sed 's|/|-|g; s|^-||') | |
| GLOBAL_MEM="$HOME/.claude/projects/$PROJECT_MEM" | |
| [ -d "$GLOBAL_MEM" ] && mv "$GLOBAL_MEM" "$WORK/global_mem_backup" | |
| # 2. HIDE notes (move, not copy) so the agent can't read them | |
| mv "$DIR/AI_REBUILD_NOTES.md" "$WORK/original_notes.md" | |
| # 3. Wipe code and local memory | |
| rm -rf "$DIR/.claude" | |
| rm -rf "$DIR/code" | |
| # 4. Generate code (clean agent, no notes, no memory) | |
| echo "=== Generating code (no notes, clean memory) ===" | |
| cd "$DIR" | |
| claude --dangerously-skip-permissions --model "$MODEL" -p "$(cat << 'PROMPT' | |
| Think very carefully and be extremely thorough. | |
| Generate the complete code/ directory for this project. | |
| - Read README.md, DESIGN_DECISIONS.md, AGENTS.md | |
| - Run: sqlite3 dummy_data/data.db ".schema" | |
| - Generate all code inside code/ including the GENERATED_BY file | |
| - The code must be compatible with the existing database | |
| - Build and verify it compiles | |
| PROMPT | |
| )" | |
| # 5. Verify code was generated | |
| if [ ! -d "$DIR/code" ]; then | |
| echo "ERROR: code/ was not generated. Restoring everything." | |
| [ -d "$WORK/original_code" ] && cp -r "$WORK/original_code" "$DIR/code" | |
| mv "$WORK/original_notes.md" "$DIR/AI_REBUILD_NOTES.md" | |
| [ -d "$WORK/global_mem_backup" ] && mv "$WORK/global_mem_backup" "$GLOBAL_MEM" | |
| rm -rf "$WORK" | |
| exit 1 | |
| fi | |
| # 6. Restore notes, then compare | |
| mv "$WORK/original_notes.md" "$DIR/AI_REBUILD_NOTES.md" | |
| GEN_END=$(date +%s) | |
| GEN_TIME=$((GEN_END - START)) | |
| echo "=== Generation took ${GEN_TIME}s. Comparing against notes ===" | |
| # 7. Compare | |
| claude --dangerously-skip-permissions --model "$MODEL" -p "$(cat << 'COMPARE' | |
| Compare two codebases against AI_REBUILD_NOTES.md: | |
| .validate-run/original_code/ = previous working code (built WITH notes) | |
| code/ = new code (built WITHOUT notes) | |
| For each note in AI_REBUILD_NOTES.md: | |
| - STILL_NEEDED: new code fell into the pitfall | |
| - OBSOLETE: new code got it right without the note | |
| Also find NEW pitfalls in code/ not covered by the notes. | |
| Rewrite AI_REBUILD_NOTES.md: keep STILL_NEEDED, add new, remove OBSOLETE. | |
| COMPARE | |
| )" | |
| # 8. Write timing to GENERATED_BY | |
| END=$(date +%s) | |
| TOTAL=$((END - START)) | |
| echo "$MODEL — $(date +%Y-%m-%d) — gen:${GEN_TIME}s total:${TOTAL}s" > "$DIR/code/GENERATED_BY" | |
| # 9. Restore memory, cleanup | |
| [ -d "$WORK/global_mem_backup" ] && mv "$WORK/global_mem_backup" "$GLOBAL_MEM" | |
| rm -rf "$WORK" | |
| echo "=== Done in ${TOTAL}s. Review AI_REBUILD_NOTES.md ===" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment