Spaces:
Sleeping
Sleeping
File size: 9,475 Bytes
d72844a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | # Project Execution Checklist
> **How to use:** Mark items `[x]` when complete. Add date + initials next to each completed item.
> Never delete a completed item β this log is permanent.
> If a phase is blocked, add `[!]` and explain why in `docs/error_and_solving_chat.md`.
---
## Phase 1 β Environment Foundation
**Goal:** A fully runnable, sandboxed OpenEnv-compatible environment.
**Success:** `python tests/test_env.py` executes without error and verifies all 3 API methods.
- [ ] Create root project directory (`Meta_com/`)
- [ ] Create subdirectory structure:
- [ ] `skills/` β agent skill definition files
- [ ] `docs/` β idea log and error log
- [ ] `env/` β environment implementation (Python)
- [ ] `agent/` β agent modules
- [ ] `tests/` β automated test suite
- [ ] `tasks/` β task repository folders
- [ ] Set up Python virtual environment (`.venv`)
- [ ] Create `requirements.txt` (initial: `pytest`, `ast`, `gitpython`)
- [ ] Implement OpenEnv-compatible class structure in `env/conflict_env.py`:
- [ ] Class inherits or follows OpenEnv interface
- [ ] Constructor accepts `task_name` parameter to select difficulty
- [ ] Stores internal state dict
- [ ] Implement `reset()` API:
- [ ] Copies task repo to a temp sandbox directory
- [ ] Returns initial state dict
- [ ] State includes: file contents, conflict count, syntax status, test status, done flag
- [ ] Implement `step(action)` API:
- [ ] Accepts action dict with `file` and `resolution` keys
- [ ] Applies resolution to sandbox repo
- [ ] Calls reward engine to compute reward
- [ ] Returns `(next_state, reward, done, info)` tuple
- [ ] Implement `state()` API:
- [ ] Reads current repo sandbox state without modifying it
- [ ] Returns identical schema to `reset()` output
- [ ] Define reward signal structure in `env/reward_engine.py`:
- [ ] Conflict marker count function
- [ ] AST syntax check function
- [ ] Test runner function
- [ ] Semantic duplication detector (stretch goal)
- [ ] Aggregation function combining all components
- [ ] Add deterministic conflict detection:
- [ ] Regex scan for `<<<<<<<`, `=======`, `>>>>>>>`
- [ ] Count blocks (not lines)
- [ ] Return list of conflict blocks with line numbers
---
## Phase 2 β Task Design
**Goal:** Three task repositories covering easy / medium / hard conflict scenarios.
**Success:** Each task can be `reset()` and the resulting state contains valid conflict markers.
- [ ] **Task 1 β Single-File Conflict** (`tasks/easy_conflict/`)
- [ ] Create a simple Python file (e.g. `calculator.py`) with 1β2 conflict blocks
- [ ] Conflict should involve a simple arithmetic function (HEAD: `return a + b`, incoming: `return a + b + 1`)
- [ ] Include a unit test file `test_calculator.py` with 2+ tests
- [ ] Add conflict markers manually to simulate a real `git merge` conflict
- [ ] Validate: `env.reset()` returns `conflict_count >= 1`
- [ ] **Task 2 β Multi-File Dependency Conflict** (`tasks/medium_conflict/`)
- [ ] File A: `utils.py` β function signature changed (e.g. added a parameter)
- [ ] File B: `main.py` β imports and calls `utils.py` with old signature
- [ ] Conflict markers present in `utils.py`
- [ ] `main.py` should break (ImportError or TypeError) until the agent resolves both files
- [ ] Include tests that exercise the cross-file call chain
- [ ] **Task 3 β Semantic Logic Merge** (`tasks/hard_conflict/`)
- [ ] Both HEAD and incoming branch added different logic to the same function body
- [ ] The combined logic must include changes from **both** branches (not just pick one)
- [ ] Naive "take mine" or "take theirs" solutions should fail tests
- [ ] Requires the agent to understand intent and recombine logic safely
- [ ] Include tests that verify the merged behavior
- [ ] Create `tasks/README.md` explaining each task format
- [ ] Add `conflict_markers_validator.py` script that validates task files contain markers
- [ ] Add `task_schema.json` describing expected task directory structure
- [ ] Add validation scripts for each task:
- [ ] `tasks/easy_conflict/validate.py`
- [ ] `tasks/medium_conflict/validate.py`
- [ ] `tasks/hard_conflict/validate.py`
---
## Phase 3 β Agent Skills
**Goal:** Modular, testable skill functions the agent uses to process conflicts.
**Success:** Each skill function passes its unit tests and can be called independently.
- [ ] **Skill 1 β Conflict Marker Detection** (`agent/conflict_detector.py`)
- [ ] `detect_conflicts(file_content: str) β list[ConflictBlock]`
- [ ] Returns list of `ConflictBlock` objects with: `head_lines`, `incoming_lines`, `start_line`, `end_line`
- [ ] Handles edge cases: nested blocks, missing end marker, empty files
- [ ] Unit tests: `tests/test_conflict_detector.py`
- [ ] **Skill 2 β Syntax Validation** (`agent/validator.py`)
- [ ] `validate_syntax(file_content: str) β tuple[bool, str]`
- [ ] Uses `ast.parse()` for Python files
- [ ] Returns `(is_valid, error_message)` tuple
- [ ] Handles SyntaxError, IndentationError gracefully
- [ ] Unit tests: `tests/test_validator.py`
- [ ] **Skill 3 β Multi-File Reasoning** (`agent/dependency_resolver.py`)
- [ ] `find_call_sites(files: dict[str, str], changed_function: str) β list[CallSite]`
- [ ] Scans all files for references to a changed function signature
- [ ] Returns list of file + line number pairs to update
- [ ] Unit tests: `tests/test_dependency_resolver.py`
- [ ] **Skill 4 β Semantic Merge Resolution** (`agent/resolver.py`)
- [ ] `resolve_conflict(block: ConflictBlock, context: str) β str`
- [ ] Combines HEAD and incoming logic minimizing duplication
- [ ] Optional: LLM-assisted resolution for hard tasks
- [ ] Unit tests: `tests/test_resolver.py`
- [ ] **Skill 5 β Test Execution** (`agent/test_runner.py`)
- [ ] `run_tests(task_path: str) β TestResult`
- [ ] Runs `pytest` in subprocess and parses output
- [ ] Returns `TestResult` with `passed`, `failed`, `errors` counts
- [ ] Unit tests: `tests/test_test_runner.py`
---
## Phase 4 β Evaluation & Reward
**Goal:** Complete, calibrated reward engine and scoring pipeline.
**Success:** Total episode reward is deterministic and matches expected values from manual evaluation.
- [ ] **Marker Removal Scoring**
- [ ] +0.15 awarded only when block is *fully* removed (no partial markers)
- [ ] Penalize if markers remain but file is reported as resolved
- [ ] Test: manually place 3 blocks, resolve 2, verify reward = 0.30
- [ ] **Syntax Reward**
- [ ] +0.20 for passing `ast.parse()` after each step
- [ ] β0.10 for failing `ast.parse()` after each step
- [ ] Reward is per-file (if multi-file task, sum across all files)
- [ ] **Unit Test Reward**
- [ ] +0.30 for all tests passing (binary β partial pass = 0)
- [ ] Stretch: +0.10 per test for partial credit
- [ ] **AST Duplication Penalty**
- [ ] β0.20 if semantic analysis detects duplicated function bodies
- [ ] Use AST node comparison, not string comparison
- [ ] Stretch: detect near-duplicates via tree edit distance
- [ ] **Final Reward Aggregation** (`env/reward_engine.py`)
- [ ] `compute_reward(state_before, state_after, action) β float`
- [ ] All reward components summed into scalar
- [ ] Clamped to range `[β1.0, +1.0]`
- [ ] Document reward edge cases in `docs/idea_and_development_chat.md`
---
## Phase 5 β Deployment
**Goal:** Public Hugging Face Space with working demo UI.
**Success:** Anyone can visit the Space URL, select a conflict task, run the agent, and see the resolution + reward score.
- [ ] **Hugging Face Space Setup**
- [ ] Create new Space under HF account
- [ ] Choose `Gradio` SDK
- [ ] Add `README.md` with Space metadata (title, description, tags)
- [ ] Confirm Space shows "Running" status
- [ ] **Demo Interface** (`app.py`)
- [ ] Task selector dropdown (easy / medium / hard)
- [ ] Code display: before (with conflict markers) vs after (resolved)
- [ ] Diff view using `difflib`
- [ ] Reward breakdown table (per component)
- [ ] "Run Agent" button triggers full episode
- [ ] **Test Repository Upload**
- [ ] All 3 task folders zip-packaged and accessible
- [ ] Users can optionally upload their own conflicted repo (stretch)
- [ ] **Result Viewer**
- [ ] Step-by-step episode log shown
- [ ] Each step: action taken, reward received, state after
- [ ] Final episode summary: total reward, success/fail
- [ ] **Deploy Public Demo**
- [ ] Push to Hugging Face Space main branch
- [ ] Verify demo loads in browser
- [ ] Test all 3 tasks from UI
- [ ] Share link in `README.md`
---
## Phase 6 β Documentation
**Goal:** All documentation current, consistent, and useful for any external developer.
**Success:** A new contributor can understand and run the project using docs alone.
- [ ] Update `HISTORY.md` β all changes since v0.3 documented
- [ ] Update all `skills/` files to reflect final implementations
- [ ] Maintain `docs/idea_and_development_chat.md` β log all major design decisions
- [ ] Maintain `docs/error_and_solving_chat.md` β log all bugs and their solutions
- [ ] Write `CONTRIBUTING.md` β guide for contributors
- [ ] Write `AGENTS.md` β describes how to add a new agent type
- [ ] Add docstrings to all Python modules
- [ ] Add type hints to all public functions
- [ ] Generate API reference with `pdoc` or `sphinx` |