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:
parent
13246a89c8
commit
d8bf8fb2e1
27 changed files with 7702 additions and 897158 deletions
|
|
@ -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.
|
||||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue