chore(wolf): checkpoint buglog.json (1062 bugs)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AgYRU3zDTqNGV5Jk8aiKLg
This commit is contained in:
Rongsong Shen 2026-08-27 08:27:43 +00:00
parent 13246a89c8
commit d8bf8fb2e1
No known key found for this signature in database
GPG key ID: 5BCDAAE0123E9FE2
27 changed files with 7702 additions and 897158 deletions

View file

@ -1,15 +1,10 @@
---
description: OpenWolf protocol enforcement — active on all files
description: OpenWolf protocol enforcement, active on all files
globs: **/*
---
- Check .wolf/anatomy.md before reading any project file
- Check .wolf/cerebrum.md Do-Not-Repeat list before generating code
- After writing or editing files, update .wolf/anatomy.md and append to .wolf/memory.md
- After receiving a user correction, update .wolf/cerebrum.md immediately (Preferences, Learnings, or Do-Not-Repeat)
- LEARN from every interaction: if you discover a convention, user preference, or project pattern, add it to .wolf/cerebrum.md. Low threshold — when in doubt, log it.
- BEFORE fixing any bug or error: read .wolf/buglog.json for known fixes
- AFTER fixing any bug, error, failed test, failed build, or user-reported problem: ALWAYS log to .wolf/buglog.json with error_message, root_cause, fix, and tags
- If you edit a file more than twice in a session, that likely indicates a bug — log it to .wolf/buglog.json
- When the user asks to check/evaluate UI design: run `openwolf designqc` to capture screenshots, then read them from .wolf/designqc-captures/
- When the user asks to change/pick/migrate UI framework: read .wolf/reframe-frameworks.md, ask decision questions, recommend a framework, then execute with the framework's prompt
- To locate a symbol or file, run `openwolf find <name>` first (ranked shortlist, under 1k tokens). For one file's description and symbol ranges: `openwolf find --file <path>`. Never read .wolf/anatomy.md whole; it is an index.
- Check .wolf/cerebrum.md Do-Not-Repeat list before generating code (grep "## Do-Not-Repeat"); after a user correction, update cerebrum.md immediately.
- Do NOT manually update .wolf/anatomy.md or .wolf/memory.md; the OpenWolf hooks maintain them.
- BEFORE fixing any bug: run `openwolf bug search "<error>"` or grep .wolf/buglog.json. AFTER fixing one: log it there (error_message, root_cause, fix, tags).
- When resuming a session, read .wolf/STATUS.md first; regenerate it with /handoff when a quest finishes.

View file

@ -10,7 +10,7 @@
"hooks": [
{
"type": "command",
"command": "node \"$CLAUDE_PROJECT_DIR/.wolf/hooks/post-read.js\"",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/post-read.js\"",
"timeout": 5
}
]
@ -20,17 +20,17 @@
"hooks": [
{
"type": "command",
"command": "node \"$CLAUDE_PROJECT_DIR/.wolf/hooks/post-write.js\"",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/post-write.js\"",
"timeout": 10
},
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "FILE_PATH=$(python3 -c \"import json,sys; d=json.load(sys.stdin); print(d.get('tool_input',{}).get('file_path') or d.get('tool_input',{}).get('path') or '')\" 2>/dev/null); [[ \"$FILE_PATH\" == *.py ]] && ruff format --quiet \"$FILE_PATH\" 2>/dev/null; true",
"timeout": 10
},
{
"type": "command",
"command": "FILE_PATH=$(python3 -c \"import json,sys; d=json.load(sys.stdin); print(d.get('tool_input',{}).get('file_path') or d.get('tool_input',{}).get('path') or '')\" 2>/dev/null); [[ \"$FILE_PATH\" == *.py ]] && ruff check --quiet \"$FILE_PATH\" 2>/dev/null; true",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/post-bash.js\"",
"timeout": 10
}
]
@ -50,7 +50,7 @@
"hooks": [
{
"type": "command",
"command": "node \"$CLAUDE_PROJECT_DIR/.wolf/hooks/session-start.js\"",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/session-start.js\"",
"timeout": 5
}
]
@ -62,7 +62,7 @@
"hooks": [
{
"type": "command",
"command": "node \"$CLAUDE_PROJECT_DIR/.wolf/hooks/pre-read.js\"",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/pre-read.js\"",
"timeout": 5
}
]
@ -72,7 +72,17 @@
"hooks": [
{
"type": "command",
"command": "node \"$CLAUDE_PROJECT_DIR/.wolf/hooks/pre-write.js\"",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/pre-write.js\"",
"timeout": 5
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/pre-bash.js\"",
"timeout": 5
}
]
@ -84,7 +94,55 @@
"hooks": [
{
"type": "command",
"command": "node \"$CLAUDE_PROJECT_DIR/.wolf/hooks/stop.js\"",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/stop.js\"",
"timeout": 10
}
]
}
],
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/user-prompt-submit.js\"",
"timeout": 5
}
]
}
],
"PostToolBatch": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/post-batch.js\"",
"timeout": 5
}
]
}
],
"PreCompact": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/precompact.js\"",
"timeout": 5
}
]
}
],
"SessionEnd": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "node \"/home/rshen/projects/xce/worktrees/scheduler-framework/.wolf/hooks/session-end.js\"",
"timeout": 10
}
]
@ -94,4 +152,4 @@
"worktree": {
"baseRef": "head"
}
}
}

View file

@ -114,6 +114,26 @@ have historically found real violations are:
reported fact entries are explicitly EXEMPT from the commit-first rule
(pure Raft semantics, retained/retried indefinitely, no commit timeout)
— don't flag those as violations.
9. **Redirect-completeness on role-gated rejections** (new 2026-08-26,
bug-1700) — for every opcode absent from a role's `ha_dispatch_gate()`
allow-list (`ha.c`, e.g. the `CTRL_STANDBY` case's `switch`), does the
generic gate-rejection reply path in `myreq_handler()` (`cluster.c`, right
after the `ha_dispatch_gate()` call) populate `redirect_host`/
`redirect_port` via `fill_redirect_reply()` (`join.c`) when the rejection
reason is `-XCE_ERR_STANDBY`? Every client-side redirect-follower in this
codebase (`xceadmin.discovery.follow_redirects()`, libxce's own failover
path) is already generic/opcode-agnostic and starts working automatically
the instant the server supplies a redirect — a bare rejection status with
no redirect fields silently strands every one of them, and this is a
defect regardless of how well the client is written. This exact gap
shipped independently, under two different opcodes, before either was
caught (`OPCode_upgradeConfig` — found and documented but left unfixed in
`test_e2e_live_ha_push.py`'s module docstring; `OPCode_schedAdmin` —
bug-1700, the one that actually got fixed) — audit method: check the ONE
generic gate-rejection call site first (not opcode-by-opcode), then
confirm every currently-shipped primary-only opcode benefits from
whatever that site does. Also check `api-standards.md`'s "Adding a New
Opcode" step 6 hasn't drifted from what the code actually does.
For `scheduler`, the dimensions are (added 2026-08-24, first used to close
bug-1613/bug-1681 and confirm bug-1611's partial-fix status):