fix(opencode): make Phase 6 file gate see untracked files
`git diff --name-only` only shows tracked files with unstaged modifications. It does not show untracked files — which is precisely the state of any new test file @test creates, since @test's sandbox denies `git add`. The pre/post snapshots therefore both missed new files entirely and `comm -23 post pre` returned nothing, letting the gate cheerfully conclude nothing changed even when @test had just created tests/foo.rs (or, worse, src/lib.rs). Switch both snapshots to `git status --porcelain | sed 's/^...//' | sort -u`, which captures modified, staged, and untracked files in a single pass. Inline rationale notes the untracked blind spot so the orchestrator does not fall back to git diff.
This commit is contained in:
parent
17ad3ba6ef
commit
f0cc300358
1 changed files with 5 additions and 4 deletions
|
|
@ -229,14 +229,15 @@ For each task from Phase 5, dispatch `@test` with:
|
||||||
`@test` writes failing tests and verifies RED with structured failure codes.
|
`@test` writes failing tests and verifies RED with structured failure codes.
|
||||||
|
|
||||||
**Post-step file gate (MANDATORY):**
|
**Post-step file gate (MANDATORY):**
|
||||||
Before dispatching `@test`, snapshot the current changed files:
|
Before dispatching `@test`, snapshot every modified, staged, *and untracked* file. `git diff --name-only` alone misses untracked files, which is precisely the state of any new test file `@test` creates (it cannot `git add`). Use `git status --porcelain` so the gate sees them:
|
||||||
```bash
|
```bash
|
||||||
git diff --name-only > /tmp/pre_test_baseline.txt
|
git status --porcelain | sed 's/^...//' | sort -u > /tmp/pre_test_baseline.txt
|
||||||
```
|
```
|
||||||
After `@test` completes, validate only NEW changes:
|
After `@test` completes, list NEW changes (in the post-snapshot but not the pre-snapshot):
|
||||||
```bash
|
```bash
|
||||||
git diff --name-only | comm -23 - /tmp/pre_test_baseline.txt > /tmp/test_new_files.txt
|
git status --porcelain | sed 's/^...//' | sort -u | comm -23 - /tmp/pre_test_baseline.txt > /tmp/test_new_files.txt
|
||||||
```
|
```
|
||||||
|
Each line in `/tmp/test_new_files.txt` is a file path that did not exist (or was unmodified) before `@test` ran. The gate validates each one against the patterns below.
|
||||||
All new files must match the project's test patterns:
|
All new files must match the project's test patterns:
|
||||||
- Python: `**/test_*.py`, `**/*_test.py`, `**/conftest.py` (new only), `**/test_data/**`, `**/test_fixtures/**`
|
- Python: `**/test_*.py`, `**/*_test.py`, `**/conftest.py` (new only), `**/test_data/**`, `**/test_fixtures/**`
|
||||||
- Rust: `tests/**/*.rs`, `**/tests/**/*.rs` (workspace-style `<crate>/tests/...`), `**/test_data/**`, `**/test_fixtures/**`
|
- Rust: `tests/**/*.rs`, `**/tests/**/*.rs` (workspace-style `<crate>/tests/...`), `**/test_data/**`, `**/test_fixtures/**`
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue