chore(wolf): guard buglog.json integrity, add dedupe rule and auto-checkpoint
Recovered .wolf/buglog.json (828 entries lost when this worktree's copy
silently reset to bug-001 sometime after commit ce96fd6d, 3 days
uncommitted with zero overlap detection) by merging the committed
history back in and renumbering the 43 real entries logged since.
To stop this recurring:
- OPENWOLF.md: require searching for an existing same-file/root_cause
entry before appending a new bug id (fixes the bug-1418 x4 duplication
pattern found in the recovered history); never restart the id counter.
- stop.js: validate buglog.json every turn (JSON validity, {version,bugs}
wrapper, duplicate ids, count/max-id not regressing vs. the last
commit) and auto-commit it standalone when it grew cleanly, so git
history is always a recoverable backup instead of a 3-day-stale one.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
d170623bd0
commit
ba4e5fd227
2 changed files with 94 additions and 1 deletions
|
|
@ -66,7 +66,7 @@ OpenWolf's value comes from learning across sessions. You MUST update `.wolf/cer
|
|||
|
||||
**Before fixing:** Read `.wolf/buglog.json` first — the fix may already be known.
|
||||
|
||||
**After fixing:** ALWAYS append to `.wolf/buglog.json` with this structure:
|
||||
**Before appending a new entry:** search existing bugs for the same `file` + overlapping `root_cause`/`error_message`. If a match exists, update THAT entry (`occurrences += 1`, `last_seen = now`, append context to `fix` if the resolution differs) instead of creating a new `bug-NNN`. Never create a second entry under an id that already exists — assign the next unused number after the current max `bug-NNN` in the file (never restart from `bug-001`; a restarted counter collides with existing history and is unrecoverable without a git-history merge). If you fixed something genuinely new, append with this structure:
|
||||
```json
|
||||
{
|
||||
"id": "bug-NNN",
|
||||
|
|
@ -81,9 +81,12 @@ OpenWolf's value comes from learning across sessions. You MUST update `.wolf/cer
|
|||
"last_seen": "ISO date"
|
||||
}
|
||||
```
|
||||
Always preserve the top-level `{"version": 1, "bugs": [...]}` wrapper — never write a bare array.
|
||||
|
||||
**The threshold is LOW.** When in doubt, log it. A false positive in the bug log costs nothing. A missed bug means repeating the same mistake later.
|
||||
|
||||
**Integrity is automated, not optional:** a Stop hook (`.wolf/hooks/stop.js`) validates `.wolf/buglog.json` (JSON validity, wrapper format, duplicate IDs, ID count/max going backwards vs. the last commit) after every turn and, if it's valid and grew, commits it standalone (`chore(wolf): checkpoint buglog.json (N bugs)`) so git history is always a recoverable backup. If it shrank or fails validation, the hook refuses to commit and prints why — treat that warning as a stop-and-investigate signal, not noise to scroll past.
|
||||
|
||||
## Token Discipline
|
||||
|
||||
- Never re-read a file already read this session unless it was modified since.
|
||||
|
|
@ -133,3 +136,4 @@ Before ending or when asked to wrap up:
|
|||
|
||||
1. Write a session summary to `.wolf/memory.md`.
|
||||
2. Review the session: did you learn anything? Did the user correct you? Did you fix a bug? If yes, update `.wolf/cerebrum.md` and/or `.wolf/buglog.json`.
|
||||
3. Do NOT manually `git add`/commit `.wolf/buglog.json` yourself as part of a feature/task commit — the Stop hook checkpoints it standalone once it validates cleanly (see Bug Logging above). Mixing it into a feature commit just duplicates that history under an unrelated message.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue