Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f24e19940 |
@@ -0,0 +1,95 @@
|
|||||||
|
# V1R4C4 SR-02: Watcher State Cleanup Acceptance
|
||||||
|
|
||||||
|
Status: implementation test green
|
||||||
|
|
||||||
|
Priority: P1a
|
||||||
|
|
||||||
|
Risk: low
|
||||||
|
|
||||||
|
Baseline dependency: V1R4C3; should be integrated after SR-01 reliability acceptance or behind SR-01 gate.
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
SR-02 watcher/stuck command cleanup now has a passing test signal:
|
||||||
|
|
||||||
|
```text
|
||||||
|
11 / 11 tests pass
|
||||||
|
```
|
||||||
|
|
||||||
|
The fix validates stuck command detection across both `.json` and `.md` command state formats.
|
||||||
|
|
||||||
|
## Fix Summary
|
||||||
|
|
||||||
|
### 1. Stuck command detection logic
|
||||||
|
|
||||||
|
The controller logic in `autonomous_controller.py` was corrected.
|
||||||
|
|
||||||
|
Previous failure mode:
|
||||||
|
|
||||||
|
- parsed JSON was accessed through `.string('ts')`, which is empty for parsed JSON;
|
||||||
|
- stuck threshold comparison against `stale_start` was incorrect;
|
||||||
|
- stale/stuck state could be missed even when command metadata was old enough.
|
||||||
|
|
||||||
|
Correct behavior:
|
||||||
|
|
||||||
|
```python
|
||||||
|
ts = data.get('ts', 0)
|
||||||
|
```
|
||||||
|
|
||||||
|
The command timestamp is now read from parsed data and compared using the correct time-based stale/stuck threshold.
|
||||||
|
|
||||||
|
### 2. Test fixture mtime alignment
|
||||||
|
|
||||||
|
The test fixture now sets the filesystem modification time of generated `.md` files to match the stored stuck timestamp.
|
||||||
|
|
||||||
|
This is required because stuck detection uses both command metadata and file age semantics.
|
||||||
|
|
||||||
|
Corrective test fixture behavior:
|
||||||
|
|
||||||
|
```python
|
||||||
|
os.utime(path, (ts, ts))
|
||||||
|
```
|
||||||
|
|
||||||
|
This ensures `.md` command files with a timestamp older than the stuck threshold are actually visible to `h_stuck()` as stuck.
|
||||||
|
|
||||||
|
## Coverage
|
||||||
|
|
||||||
|
Validated formats:
|
||||||
|
|
||||||
|
- `.json` command state files;
|
||||||
|
- `.md` command state files.
|
||||||
|
|
||||||
|
Validated behavior:
|
||||||
|
|
||||||
|
- old command timestamps are recognized as stuck;
|
||||||
|
- current/non-stale command timestamps are not falsely marked stuck;
|
||||||
|
- `.md` fixtures behave consistently with stored `ts` metadata;
|
||||||
|
- detection behavior is consistent across file formats.
|
||||||
|
|
||||||
|
## Acceptance Result
|
||||||
|
|
||||||
|
```text
|
||||||
|
all tests: pass
|
||||||
|
count: 11
|
||||||
|
```
|
||||||
|
|
||||||
|
## Integration Guidance
|
||||||
|
|
||||||
|
SR-02 is eligible for V1R4C4 integration after SR-01 confirms GitOps/Gitea reliability guardrails are stable.
|
||||||
|
|
||||||
|
SR-02 must not bypass SR-01 because watcher cleanup changes autonomous controller behavior. It should be integrated behind the same safe-mode assumptions introduced by SR-01.
|
||||||
|
|
||||||
|
## Remaining Checks Before Merge
|
||||||
|
|
||||||
|
1. Confirm the exact implementation commit containing `autonomous_controller.py` and test fixture changes.
|
||||||
|
2. Run SR-01 runtime acceptance first.
|
||||||
|
3. Re-run the SR-02 test suite after rebasing/integrating with V1R4C4 reliability branch.
|
||||||
|
4. Run global runtime acceptance:
|
||||||
|
|
||||||
|
```text
|
||||||
|
getRuntimeStatus -> getBaseline -> createBranch -> createPatch
|
||||||
|
```
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Treat SR-02 as test-green and ready for controlled integration, not as independently deployable before SR-01.
|
||||||
Reference in New Issue
Block a user