Skip to content

Commit 1fa20ce

Browse files
feat(wup): add on-change status gate
1 parent 28201f4 commit 1fa20ce

6 files changed

Lines changed: 129 additions & 3 deletions

File tree

.planfile/sprints/current.yaml

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -612,23 +612,68 @@ sprint:
612612
613613
614614
Role: intelligent file watcher (3-layer: detect → quick → full).'
615+
execution:
616+
assigned_to: codex
617+
attempt: 0
618+
finished_at: '2026-05-14T11:15:42.775900Z'
619+
max_attempts: 1
620+
queue: default
621+
started_at: '2026-05-14T11:15:41.961161Z'
622+
state: done
615623
files: []
616-
history: []
624+
history:
625+
- action: update
626+
changes:
627+
- execution
628+
- status
629+
execution_state: running
630+
previous_execution_state: null
631+
previous_status: open
632+
source: planfile.store
633+
status: in_progress
634+
timestamp: '2026-05-14T11:15:42.112255+00:00'
635+
- action: update
636+
changes:
637+
- execution
638+
- outputs
639+
- status
640+
execution_state: done
641+
previous_execution_state: running
642+
previous_status: in_progress
643+
source: planfile.store
644+
status: done
645+
timestamp: '2026-05-14T11:15:42.927604+00:00'
617646
id: STARTER-004
618647
labels:
619648
- bootstrap
620649
- gates
621650
- scan
622651
name: Bootstrap wup on-change gate
652+
outputs:
653+
artifacts:
654+
- wup.yaml
655+
- Taskfile.yml
656+
- docs/llm-tools/wup/README.md
657+
- tests/test_wup_taskfile.py
658+
notes:
659+
- wup.yaml already existed; added a topology-aware quality:wup task that validates
660+
the on-change watcher with wup status, documented the WUP loop, and added
661+
regression coverage for Taskfile wiring and root config.
662+
result:
663+
status: done
664+
tests:
665+
- uv run pytest -q tests/test_wup_taskfile.py
666+
- task quality:wup
667+
- git diff --check
623668
priority: normal
624669
source:
625670
context: {}
626671
timestamp: '2026-05-12T09:35:46.467501Z'
627672
tool: koru-scan
628673
sprint: current
629-
status: open
674+
status: done
630675
sync: {}
631-
updated_at: '2026-05-12T09:35:46.468376Z'
676+
updated_at: '2026-05-14T11:15:42.927572+00:00'
632677
STARTER-005:
633678
acceptance_criteria: []
634679
blocked_by: []

Taskfile.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,27 @@ tasks:
268268
- sh: which regix
269269
msg: "regix not installed. Run: task install:tools"
270270

271+
quality:wup:
272+
desc: Check WUP on-change watcher configuration
273+
cmds:
274+
- |
275+
set -euo pipefail
276+
if python3 -m koru.cli topology --project . --is-enabled gate:wup >/dev/null 2>&1; then
277+
wup status
278+
else
279+
rc=$?
280+
if [ "$rc" -eq 1 ]; then
281+
echo "quality:wup skipped (gate:wup disabled in topology)"
282+
exit 0
283+
fi
284+
wup status
285+
fi
286+
preconditions:
287+
- sh: which wup
288+
msg: "wup not installed. Run: task install:tools"
289+
- sh: test -f wup.yaml
290+
msg: "wup.yaml missing. Run: task template:install:wup"
291+
271292
quality:redup:
272293
desc: 'Run redup duplicate detection (default: current dir)'
273294
cmds:

docs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ planfile ticket show PLF-XXX
8282
# ...
8383

8484
# Validate locally (no LLM API calls)
85+
task quality:wup
8586
task quality:regix:local
8687
task test
8788
task monitor:probe

docs/llm-tools/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ SPECIALIZED (LLM-free):
4545
4646
ON-CHANGE GATES TRIAD (LLM-free, continuous):
4747
wup [intelligent file watcher → priority/full testql probes]
48+
task quality:wup checks watcher config; wup watch runs the loop
4849
+ regix (delta gate, see WALIDACJA above)
4950
+ testql (HTTP probe, see WYKRYWANIE above)
5051
→ koru brief surfaces all three in "On-change gates" section

docs/llm-tools/wup/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# WUP on-change gate
2+
3+
`wup` is the local file watcher in the on-change gate triad. In koru it is
4+
configured by [`../../../wup.yaml`](../../../wup.yaml) and is meant for the
5+
developer loop between saving files and committing changes.
6+
7+
## Commands
8+
9+
| Scenario | Command |
10+
|---|---|
11+
| Check config/status | `task quality:wup` |
12+
| Direct status check | `wup status` |
13+
| Start watcher | `wup watch` |
14+
| Rebuild dependency map | `wup map-deps` |
15+
| Inspect TestQL endpoints | `wup testql-endpoints` |
16+
17+
## Koru bootstrap
18+
19+
The root `wup.yaml` watches:
20+
21+
- `src/**` for core Python changes
22+
- `plugins/koru-autopilot-vscode/src/**` for autopilot plugin changes
23+
24+
The lightweight `task quality:wup` gate validates that `wup` is installed,
25+
`wup.yaml` exists, `gate:wup` is enabled in topology, and `wup status` can read
26+
the configuration. It does not start the long-running watcher.
27+
28+
Use `wup watch` when you want the continuous 3-layer loop:
29+
30+
1. detect file changes
31+
2. run quick related probes
32+
3. run full detail/blame checks only after quick failures

tests/test_wup_taskfile.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"""Regression tests for WUP on-change gate task wiring."""
2+
3+
from __future__ import annotations
4+
5+
from pathlib import Path
6+
7+
8+
ROOT = Path(__file__).resolve().parents[1]
9+
10+
11+
def test_quality_wup_checks_status_and_respects_topology_gate() -> None:
12+
taskfile = (ROOT / "Taskfile.yml").read_text(encoding="utf-8")
13+
14+
assert "quality:wup:" in taskfile
15+
assert "gate:wup" in taskfile
16+
assert "wup status" in taskfile
17+
assert "test -f wup.yaml" in taskfile
18+
19+
20+
def test_wup_yaml_is_bootstrapped_for_koru_project() -> None:
21+
wup_yaml = (ROOT / "wup.yaml").read_text(encoding="utf-8")
22+
23+
assert 'name: "koru"' in wup_yaml
24+
assert "src/**" in wup_yaml
25+
assert "plugins/koru-autopilot-vscode/src/**" in wup_yaml
26+
assert "debounce_s: 2" in wup_yaml

0 commit comments

Comments
 (0)