Skip to content

Instantly share code, notes, and snippets.

@Turupawn
Created April 8, 2026 05:29
Show Gist options
  • Select an option

  • Save Turupawn/19486339e7030fdaac960e13c98cf991 to your computer and use it in GitHub Desktop.

Select an option

Save Turupawn/19486339e7030fdaac960e13c98cf991 to your computer and use it in GitHub Desktop.
validate one shot codegen
#!/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