Skip to content

Commit 3163bcc

Browse files
bhowiebkrBryan Howard
andauthored
Add comprehensive bug tracking system with GitHub Issues integration (#36)
* Implement comprehensive undo/redo system with command pattern ## Summary Complete implementation of undo/redo functionality for PyFlowGraph using the Command pattern. This addresses all node deletion issues including the "black node" bug and adds full support for undoing/redoing operations. ## Features Added - **Command Pattern Architecture**: Full command system with base classes and command history - **Node Operations**: Create, delete, move, and property change commands with complete state preservation - **Connection Operations**: Create, delete, and reroute node commands with pin relationship tracking - **RerouteNode Support**: Proper handling of RerouteNode objects in all operations - **Keyboard Shortcuts**: Ctrl+Z (undo), Ctrl+Y/Ctrl+Shift+Z (redo) - **Color & Size Restoration**: Full preservation of node visual properties during undo/redo - **UUID Synchronization**: Fixed issues with markdown-loaded nodes having mismatched object references ## Bug Fixes - **Black Node Bug**: Fixed CompositeCommand rollback issue that caused successful deletions to be undone - **RerouteNode Deletion**: Added proper pin structure handling for RerouteNode vs regular Node objects - **Pin Destruction**: Fixed NoneType errors when destroying pins during node deletion - **Connection Restoration**: Enhanced connection recreation with support for both node types - **Type Preservation**: RerouteNodes now restore as RerouteNodes, not regular Nodes ## Architecture - `src/commands/`: Command pattern implementation with base classes and specific command types - `src/commands/command_base.py`: Abstract base class and composite command support - `src/commands/command_history.py`: Undo/redo stack management with memory limits - `src/commands/node_commands.py`: All node-related operations (create, delete, move, properties) - `src/commands/connection_commands.py`: All connection-related operations including reroute nodes ## Testing - Added comprehensive test suite covering all command operations - GUI-based tests for real-world deletion scenarios - Specific tests for RerouteNode undo/redo functionality - Markdown file loading deletion tests ## Integration - Integrated into NodeEditorWindow with keyboard shortcuts - Connected to NodeGraph for all graph operations - Maintains backward compatibility with existing code - Memory-efficient with configurable command history limits 🤖 Generated with [Claude Code](https://claude.ai/code) * Fix RerouteNode creation undo issue The main issue was that when a RerouteNode was deleted and restored via undo, DeleteNodeCommand.undo() created a new RerouteNode object with the same UUID. However, CreateRerouteNodeCommand.undo() was trying to remove the original RerouteNode object reference, which no longer existed in the graph. Changes: - Modified CreateRerouteNodeCommand.undo() to find current RerouteNode by UUID - Added fallback to search for any RerouteNode if UUID lookup fails - Properly remove connections to/from current RerouteNode before removal - Ensure RerouteNode is removed from both scene and nodes list - Added comprehensive test suite for RerouteNode creation/deletion/undo/redo Test Results: - RerouteNode creation undo now properly removes the node - Redo operations work correctly with RerouteNodes - Final state after undo creation: 2 nodes, 1 direct connection (as expected) Fixes user reported issue: "reroute will still exist but the last undo will successfully reconnect the graph to the original state" * Fix RerouteNode creation redo issue The issue was that CreateRerouteNodeCommand.execute() tried to remove the original connection object stored in self.original_connection, but during redo operations, this object reference was stale - the connection had been recreated as a new object during the undo operation. Changes: - Modified execute() to find and remove current connection by pin matching - Instead of relying on stored connection object, find connection dynamically - Added safety checks for scene and connections list membership - This allows both initial execution and redo to work correctly The fix resolves: - QGraphicsScene::removeItem: item's scene is different error - list.remove(x): x not in list error during redo operations Test Results: - RerouteNode creation redo now works correctly - RerouteNode deletion redo continues to work - All undo/redo operations function properly Fixes the user's redo issue with RerouteNodes. * Add centralized debug configuration system - Add debug_config.py with category-based debug controls - DEBUG_LAYOUT, DEBUG_UNDO_REDO, DEBUG_FILE_LOADING, DEBUG_PINS - DEBUG_MASTER_SWITCH for production use - should_debug() helper function for conditional debug output - Enables targeted debugging of node sizing and layout issues 🤖 Generated with [Claude Code](https://claude.ai/code) * Add comprehensive node minimum size calculation and validation - Add calculate_absolute_minimum_size() method for accurate size requirements - Calculate based on title width, pin labels, GUI content, and margins - Enhanced fit_size_to_content() with debug output and validation - Improved _update_layout() with complete visual refresh chain - Added prepareGeometryChange() and enhanced pin connection updates - Comprehensive debug logging for layout operations - Ensures nodes always meet minimum size requirements for proper display Fixes critical issue where nodes could be smaller than their content, causing GUI elements to be crushed and pins to be mispositioned. 🤖 Generated with [Claude Code](https://claude.ai/code) * Enhance pin positioning and visual state management - Enhanced update_label_pos() with debug output for positioning verification - Add update_visual_state() method for complete pin refresh - Improved visual update chain for label positioning and connections - Debug logging for pin position calculations and updates - Ensures pins are properly positioned and visually updated during layout changes Part of the comprehensive fix for pin positioning issues during node creation, deletion, and undo/redo operations. 🤖 Generated with [Claude Code](https://claude.ai/code) * Fix critical node sizing validation during file loading - Add load-time size validation to prevent undersized nodes from files - Calculate minimum size requirements and auto-correct loaded dimensions - Add critical deferred validation after GUI construction completes - Fix timing issue where GUI widgets affect minimum size calculations - Add final_load_update() validation pass for accurate sizing - Debug logging for size corrections and validation steps Resolves the "nagging bug" where nodes loaded from files were smaller than their content requirements, causing GUI elements to be crushed and pins to be positioned incorrectly until manual resize. The key insight: minimum size calculations change as GUI widgets are constructed, requiring a second validation pass after Qt event loop processes all pending widget creation and sizing events. 🤖 Generated with [Claude Code](https://claude.ai/code) * Enhance undo/redo operations with proper size validation - Enhanced DeleteNodeCommand.undo() with size validation during restoration - Add comprehensive debug output for undo/redo operations - Ensure restored nodes meet minimum size requirements - Improved node restoration process with proper layout updates - Fix pin positioning issues during undo/redo operations - Added proper visual refresh chain for restored nodes Completes the fix for pin positioning issues during node creation, deletion, and undo/redo operations by ensuring restored nodes are properly sized and laid out. 🤖 Generated with [Claude Code](https://claude.ai/code) * Add comprehensive plan documentation for node sizing fixes - Document the complete investigation and fix plan for node sizing issues - Detailed task breakdown for fixing pin positioning and minimum size bugs - Implementation strategy for size validation and layout improvements - Focus on debug-first approach for GUI-dependent issues - Reference documentation for the comprehensive node sizing system fixes 🤖 Generated with [Claude Code](https://claude.ai/code) * Fix GUI content loss during delete/undo operations - Use proper setter methods instead of direct property assignment in undo - Changed to use set_code() and set_gui_code() during node restoration - Ensures rebuild_gui() is called to create widgets before apply_gui_state() - Enhanced debug output for GUI state capture and restoration process - Added comprehensive GUI widget validation during restoration Resolves the "GUI empty after undo" bug where restored nodes had correct size and pins but missing GUI content. The issue was that GUI widgets weren't being recreated because rebuild_gui() wasn't called, causing apply_gui_state() to fail silently. The key insight: Direct property assignment bypasses the rebuild process, while setter methods properly trigger GUI reconstruction. 🤖 Generated with [Claude Code](https://claude.ai/code) * Reorganize documentation structure and streamline CLAUDE.md - Restructure docs/ with logical organization: - architecture/ for technical design docs - specifications/ for feature specs - development/ for testing guides and implementation notes - Break down monolithic TODO.md into focused documents: - roadmap.md for feature priorities - competitive-analysis.md for missing features analysis - development/implementation-notes.md for technical priorities - Update testing documentation to match current 18+ test suite - Streamline CLAUDE.md from 190 to 62 lines (67% reduction) - Fix documentation errors: module counts, test infrastructure, architecture - Add comprehensive navigation guide (docs/README.md) * Add bug tracking system for systematic issue management Create docs/bugs/ directory with structured bug reporting system including main tracking index and detailed report for reroute node execution data loss issues. 🤖 Generated with [Claude Code](https://claude.ai/code) * Enhance bug tracking with GitHub Issues integration and automation - Add comprehensive GitHub sync process documentation - Implement Python automation script for bidirectional sync - Create GitHub Actions workflow for automated synchronization - Add label setup scripts for proper issue categorization - Update existing bug with GitHub issue #35 reference - Enable rich GitHub issue formatting with direct file links Features: - Manual and automated sync between docs/bugs/ and GitHub Issues - Smart labeling based on priority and component metadata - Direct clickable links from GitHub issues to documentation files - Validation tools for sync status monitoring 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Bryan Howard <bhowiebkr@gmail.com>
1 parent ae5673f commit 3163bcc

47 files changed

Lines changed: 11072 additions & 312 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/bug-sync.yml

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
name: Bug Sync Automation
2+
3+
on:
4+
push:
5+
paths:
6+
- 'docs/bugs/**'
7+
branches:
8+
- main
9+
- feature/*
10+
issues:
11+
types: [opened, edited, closed, labeled]
12+
13+
jobs:
14+
sync-bugs:
15+
if: contains(github.event.issue.labels.*.name, 'bug') || github.event_name == 'push'
16+
runs-on: ubuntu-latest
17+
18+
permissions:
19+
issues: write
20+
contents: write
21+
pull-requests: write
22+
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v4
26+
with:
27+
token: ${{ secrets.GITHUB_TOKEN }}
28+
29+
- name: Setup Python
30+
uses: actions/setup-python@v4
31+
with:
32+
python-version: '3.9'
33+
34+
- name: Install GitHub CLI
35+
run: |
36+
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
37+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
38+
sudo apt update
39+
sudo apt install gh
40+
41+
- name: Configure GitHub CLI
42+
run: |
43+
echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token
44+
45+
- name: Sync new local bugs to GitHub
46+
if: github.event_name == 'push'
47+
run: |
48+
# Check for new bug files in the push
49+
git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep "^docs/bugs/BUG-.*\.md$" || exit 0
50+
51+
# Run sync automation
52+
python scripts/bug-sync-automation.py --sync-to-github
53+
54+
# Commit any updates to bug files
55+
git config --local user.email "action@github.com"
56+
git config --local user.name "GitHub Action"
57+
58+
if git diff --quiet; then
59+
echo "No changes to commit"
60+
else
61+
git add docs/bugs/
62+
git commit -m "Auto-sync: Update bug files with GitHub issue references
63+
64+
🤖 Generated with GitHub Actions"
65+
git push
66+
fi
67+
68+
- name: Update local bug file when GitHub issue changes
69+
if: github.event_name == 'issues'
70+
run: |
71+
# Extract bug ID from issue title
72+
ISSUE_TITLE="${{ github.event.issue.title }}"
73+
BUG_ID=$(echo "$ISSUE_TITLE" | grep -o "BUG-[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\+" || echo "")
74+
75+
if [ -z "$BUG_ID" ]; then
76+
echo "No bug ID found in issue title: $ISSUE_TITLE"
77+
exit 0
78+
fi
79+
80+
# Find corresponding local bug file
81+
BUG_FILE=$(find docs/bugs/ -name "$BUG_ID-*.md" | head -1)
82+
83+
if [ -z "$BUG_FILE" ]; then
84+
echo "No local bug file found for $BUG_ID"
85+
exit 0
86+
fi
87+
88+
echo "Updating $BUG_FILE based on GitHub issue #${{ github.event.issue.number }}"
89+
90+
# Update Last Sync date in the bug file
91+
TODAY=$(date '+%Y-%m-%d')
92+
sed -i "s/\*\*Last Sync\*\*:.*/\*\*Last Sync\*\*: $TODAY/" "$BUG_FILE"
93+
94+
# If issue was closed, add comment about GitHub status
95+
if [ "${{ github.event.action }}" = "closed" ]; then
96+
echo "" >> "$BUG_FILE"
97+
echo "**GitHub Update ($TODAY)**: Issue #${{ github.event.issue.number }} was closed on GitHub" >> "$BUG_FILE"
98+
fi
99+
100+
# Commit changes
101+
git config --local user.email "action@github.com"
102+
git config --local user.name "GitHub Action"
103+
104+
if git diff --quiet; then
105+
echo "No changes to commit"
106+
else
107+
git add "$BUG_FILE"
108+
git commit -m "Auto-sync: Update $BUG_ID from GitHub issue #${{ github.event.issue.number }}
109+
110+
🤖 Generated with GitHub Actions"
111+
git push
112+
fi
113+
114+
- name: Validate bug sync status
115+
run: |
116+
python scripts/bug-sync-automation.py --validate

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,7 @@ python_runtime
117117

118118
# pre releases
119119
pre-release
120-
temp
120+
temp
121+
122+
# BEMAD files
123+
.bmad-core/

CLAUDE.md

Lines changed: 37 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -1,189 +1,61 @@
11
# CLAUDE.md
22

3-
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4-
53
## Project Overview
64

7-
PyFlowGraph is a universal node-based visual scripting editor built with Python and PySide6. It allows users to create, connect, and execute Python code as nodes in a data-driven graph. The project follows a "Code as Nodes" philosophy where pins are automatically generated by parsing Python function signatures.
8-
9-
## Common Commands
10-
11-
### Running the Application
12-
13-
- **Windows**: `run.bat` or `.\run.bat`
14-
- **Linux/macOS**: `./run.sh`
15-
- Both scripts automatically activate the virtual environment and run `src/main.py`
16-
17-
### Environment Setup
18-
19-
1. Create virtual environment: `python3 -m venv venv`
20-
2. Activate environment:
21-
- Windows: `venv\Scripts\activate`
22-
- Linux/macOS: `source venv/bin/activate`
23-
3. Install dependencies: `pip install PySide6`
24-
25-
### Virtual Environment Management
26-
27-
- The application creates project-specific virtual environments in the `venvs/` directory
28-
- Each graph can have its own isolated environment with custom pip dependencies
29-
- Use "Run > Manage Environment" in the application to configure environments
30-
31-
## Architecture Overview
5+
PyFlowGraph: Universal node-based visual scripting editor built with Python and PySide6. "Code as Nodes" philosophy with automatic pin generation from Python function signatures.
326

33-
### Core Application Structure
7+
## Commands
348

35-
All source code is organized in the `src/` directory:
9+
**Running**: `run.bat` (Windows) or `./run.sh` (Linux/macOS)
10+
**Testing**: `run_test_gui.bat` - Professional GUI test runner
11+
**Dependencies**: `pip install PySide6`
3612

37-
- **src/main.py**: Entry point, loads Font Awesome fonts and QSS stylesheet
38-
- **src/node_editor_window.py**: Main QMainWindow with menus, toolbars, and dock widgets
39-
- **src/node_editor_view.py**: QGraphicsView handling mouse/keyboard interactions (pan, zoom, copy/paste)
40-
- **src/node_graph.py**: QGraphicsScene managing nodes, connections, and clipboard operations
41-
- **src/graph_executor.py**: Execution engine that runs node graphs using subprocess isolation
13+
## Architecture
4214

43-
### Node System
15+
**Core**: `src/` contains 25+ Python modules
16+
- `main.py` - Entry point with Font Awesome fonts/QSS
17+
- `node_editor_window.py` - Main QMainWindow
18+
- `node_editor_view.py` - QGraphicsView (pan/zoom/copy/paste)
19+
- `node_graph.py` - QGraphicsScene (nodes/connections/clipboard)
20+
- `graph_executor.py` - Execution engine with subprocess isolation
21+
- `commands/` - Command pattern for undo/redo system
4422

45-
- **src/node.py**: Main Node class with automatic pin generation from Python function parsing
46-
- **src/pin.py**: Input/output connection points with type-based coloring
47-
- **src/connection.py**: Bezier curve connections between pins
48-
- **src/reroute_node.py**: Simple organizational nodes for connection routing
49-
50-
### Code Editing
51-
52-
- **src/code_editor_dialog.py**: Modal dialog containing the code editor
53-
- **src/python_code_editor.py**: Core editor widget with line numbers and smart indentation
54-
- **src/python_syntax_highlighter.py**: Python syntax highlighting implementation
55-
56-
### Event System
57-
58-
- **src/event_system.py**: Event-driven execution system for interactive applications with live mode support
59-
60-
### Utilities
61-
62-
- **src/color_utils.py**: Color manipulation utilities
63-
- **src/environment_manager.py**: Virtual environment management dialog
64-
- **src/settings_dialog.py**: Application settings configuration
65-
- **src/node_properties_dialog.py**: Node property editing interface
66-
- **src/ui_utils.py**: Common UI utility functions and helpers
67-
- **src/view_state_manager.py**: View state management for zoom and pan operations
68-
- **src/execution_controller.py**: Central execution control and coordination
69-
- **src/file_operations.py**: File loading, saving, and import/export operations
70-
- **src/flow_format.py**: Markdown flow format parsing and serialization
71-
- **src/test_runner_gui.py**: Professional GUI-based test runner for development
23+
**Node System**: `node.py`, `pin.py`, `connection.py`, `reroute_node.py`
24+
**Code Editing**: `code_editor_dialog.py`, `python_code_editor.py`, `python_syntax_highlighter.py`
25+
**Event System**: `event_system.py` - Live mode execution support
7226

7327
## Key Concepts
7428

75-
### Node Function Parsing
76-
77-
- Nodes automatically generate input pins from function parameters with type hints
78-
- Output pins are created from return type annotations
79-
- Supports single outputs (`-> str`) and multiple outputs (`-> Tuple[str, int]`)
80-
- Type hints determine pin colors: `int`, `str`, `float`, `bool`, `Tuple`
81-
82-
### Data Flow Execution
83-
84-
- Graph execution is data-driven, not control-flow based
85-
- Nodes execute when all input dependencies are satisfied
86-
- Each node runs in an isolated subprocess for security
87-
- Pin values are serialized/deserialized as JSON between nodes
88-
- Supports both **Batch Mode** (traditional sequential execution) and **Live Mode** (event-driven interactive execution)
89-
90-
### Graph Persistence
91-
92-
- Graphs save to clean JSON format in the `examples/` directory
93-
- Node positions, connections, and code are preserved
94-
- Virtual environment requirements are stored with each graph
29+
**Node Function Parsing**: Automatic pin generation from Python function signatures with type hints
30+
**Data Flow Execution**: Data-driven (not control-flow), subprocess isolation, JSON serialization
31+
**Graph Persistence**: Clean JSON format, saved to `examples/` directory
9532

9633
## File Organization
9734

98-
### Project Structure
99-
100-
The project follows a clean, organized structure:
101-
10235
```
10336
PyFlowGraph/
104-
├── src/ # All Python source code
105-
│ ├── resources/ # Font Awesome fonts embedded in src
106-
│ └── test_runner_gui.py # Professional GUI test runner
107-
├── tests/ # All test files
108-
├── docs/ # Static documentation
109-
├── test_reports/ # Generated test outputs and summaries
110-
├── examples/ # Sample graph files (10 examples)
111-
├── images/ # Screenshots and documentation images
112-
├── pre-release/ # Pre-built releases and binaries
113-
├── venv/ # Main application virtual environment
114-
├── venvs/ # Project-specific virtual environments
115-
├── .github/workflows/ # CI/CD pipeline
116-
├── run.bat, run.sh # Application launcher scripts
117-
├── run_test_gui.bat # Professional test runner GUI launcher
118-
├── dark_theme.qss # Application stylesheet
119-
├── requirements.txt # Python dependencies
120-
├── LICENSE.txt # Project license
121-
├── README.md # Project readme
122-
└── CLAUDE.md # This file
37+
├── src/ # 25+ Python modules + commands/
38+
├── tests/ # 18+ test files with GUI test runner
39+
├── docs/ # Organized documentation
40+
│ ├── architecture/ # Technical architecture docs
41+
│ ├── specifications/ # Feature specs (flow_spec.md, ui-ux, etc.)
42+
│ └── development/ # Testing guides, implementation notes
43+
├── examples/ # Sample .md graph files
44+
├── venv/ + venvs/ # Virtual environments
45+
└── run.bat, run_test_gui.bat # Launchers
12346
```
12447

125-
### Core Directories
126-
127-
- **`src/`**: All 24 Python modules organized in one location
128-
- **`tests/`**: 7 test files with comprehensive GUI and execution testing
129-
- **`docs/`**: Hand-written documentation (flow_spec.md, test guides)
130-
- **`test_reports/`**: Auto-generated test outputs and summaries
131-
- **`examples/`**: 10 sample .md graph files demonstrating features
132-
- **`images/`**: Screenshots and documentation images for project visualization
133-
- **`pre-release/`**: Pre-built application binaries and releases
134-
- **`venv/`**: Main application virtual environment
135-
- **`venvs/`**: Isolated Python environments for individual graph execution
136-
13748
## Testing
13849

139-
### Test Organization
140-
141-
The test suite is organized around PyFlowGraph's core functional components:
142-
143-
- **tests/test_node_system.py**: Core Node functionality (creation, properties, code management, serialization)
144-
- **tests/test_pin_system.py**: Pin creation, type detection, positioning, and connection compatibility
145-
- **tests/test_connection_system.py**: Connection/bezier curve creation, serialization, and reroute nodes
146-
- **tests/test_graph_management.py**: Graph operations (node/connection management, clipboard, clearing)
147-
- **tests/test_execution_engine.py**: Code execution, flow control, subprocess isolation, error handling
148-
- **tests/test_file_formats.py**: Markdown and JSON format parsing, conversion, and file operations
149-
- **tests/test_integration.py**: End-to-end workflows and real-world usage scenarios
150-
151-
### Running Tests
152-
153-
- **Test GUI**: `run_test_gui.bat` - Professional PySide6 test runner with visual interface
154-
- **Manual**: `python tests/test_name.py` - Individual test files
155-
- **Direct GUI**: `python src/test_runner_gui.py` - Run test GUI directly
156-
157-
### Test Runner Features
158-
159-
The new test runner GUI provides:
160-
- Automatic test discovery from the `tests/` directory
161-
- Visual test selection with checkboxes
162-
- Real-time status indicators (green/red circles for pass/fail)
163-
- Detailed test output viewing with syntax highlighting
164-
- Background execution with progress tracking
165-
- 5-second timeout per test for fast feedback
166-
- Professional dark theme matching the main application
167-
168-
### Test Design Principles
169-
170-
- **Focused Coverage**: Each test module covers a single core component
171-
- **Fast Execution**: All tests complete within 5 seconds total runtime
172-
- **Deterministic**: Tests are reliable and not flaky
173-
- **Comprehensive**: 100% coverage of fundamental functionality
174-
- **Integration Testing**: Real-world usage scenarios and error conditions
50+
**Current Suite**: 18+ test files covering node system, pins, connections, execution, file formats
51+
**GUI Runner**: `run_test_gui.bat` - Professional PySide6 interface with real-time status
52+
**Coverage**: Core components, command system, integration scenarios
17553

17654
## Development Notes
17755

178-
- This is an experimental AI-generated codebase for learning purposes
179-
- The application uses PySide6 for the Qt-based GUI
180-
- Font Awesome integration provides professional iconography
181-
- All nodes execute in isolated environments for security
182-
- Dependencies are managed via `requirements.txt` (PySide6, Nuitka for compilation)
183-
- Don't add claude attribution to git commits. Don't ever add that it was generated with claude at the end of comments. This is bloat! Stop that!
184-
- Don't use emoji's in code! it always fucks things up.
185-
186-
## Documentation and markdown files
187-
188-
- no emoji in code. no em dashes.
189-
- no marketing BS. Only clean, professional, technical
56+
- Experimental AI-generated codebase for learning
57+
- PySide6 Qt-based GUI with Font Awesome icons
58+
- Isolated subprocess execution for security
59+
- No Claude attribution in commits or code comments
60+
- No emojis in code - causes issues
61+
- Clean, professional, technical documentation only

0 commit comments

Comments
 (0)