diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index 175c8e15f..3ea2a388e 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -62,7 +62,7 @@ exit 2 **What helps:** - Reduce tool-definition pressure with `ENABLE_TOOL_SEARCH=auto:5` if your setup supports it. -- Lower the supported effort level (for example, `/effort low`) for routine work on adaptive-reasoning models; `MAX_THINKING_TOKENS` only caps fixed-budget thinking. +- Lower the supported effort level (for example, `/effort low`) for routine work on adaptive-reasoning models. `MAX_THINKING_TOKENS=0` disables thinking; nonzero values cap fixed-budget thinking only when adaptive thinking is disabled. - Route subagent work to a cheaper model such as `CLAUDE_CODE_SUBAGENT_MODEL=haiku` if your setup exposes that knob. - Disable unused MCP servers per project. - Compact manually at natural breakpoints instead of waiting for auto-compaction. diff --git a/docs/hook-bug-workarounds.md b/docs/hook-bug-workarounds.md index 7746dfa6c..cf3ce0396 100644 --- a/docs/hook-bug-workarounds.md +++ b/docs/hook-bug-workarounds.md @@ -61,7 +61,7 @@ What helps: What helps: - Reduce tool-definition pressure with `ENABLE_TOOL_SEARCH=auto:5` if your setup supports it. -- Lower the supported effort level (for example, `/effort low`) for routine work on adaptive-reasoning models; `MAX_THINKING_TOKENS` only caps fixed-budget thinking. +- Lower the supported effort level (for example, `/effort low`) for routine work on adaptive-reasoning models. `MAX_THINKING_TOKENS=0` disables thinking; nonzero values cap fixed-budget thinking only when adaptive thinking is disabled. - Route subagent work to a cheaper model such as `CLAUDE_CODE_SUBAGENT_MODEL=haiku` if your setup exposes that knob. - Disable unused MCP servers per project. - Compact manually at natural breakpoints instead of waiting for auto-compaction. diff --git a/skills/continuous-learning-v2/scripts/test_parse_instinct.py b/skills/continuous-learning-v2/scripts/test_parse_instinct.py index 76733362b..745614c3b 100644 --- a/skills/continuous-learning-v2/scripts/test_parse_instinct.py +++ b/skills/continuous-learning-v2/scripts/test_parse_instinct.py @@ -281,6 +281,7 @@ def test_parse_confidence_preserves_valid_range(confidence): assert parse_instinct_file(content)[0]["confidence"] == confidence +@pytest.mark.unit @pytest.mark.parametrize("value", [ "line one\nline two", "tab\tvalue", "carriage\rreturn", 'when writing "quoted" text', r"C:\Users\name", "caf\u00e9", @@ -294,11 +295,13 @@ def test_quoted_instinct_strings_roundtrip(value: str) -> None: assert instincts[0]["trigger"] == value +@pytest.mark.unit def test_parse_quoted_instinct_decodes_newline_escape() -> None: content = '---\nid: newline\ntrigger: "line one\\nline two"\n---\nBody' assert parse_instinct_file(content)[0]["trigger"] == "line one\nline two" +@pytest.mark.unit @pytest.mark.parametrize("value", ["line\u0085value", "line\u0090value"]) def test_unicode_controls_are_escaped_for_yaml(value: str) -> None: quoted = _mod._yaml_quote(value) @@ -306,6 +309,7 @@ def test_unicode_controls_are_escaped_for_yaml(value: str) -> None: assert json.loads(quoted) == value +@pytest.mark.unit def test_parse_quoted_instinct_preserves_legacy_escape() -> None: content = '---\nid: legacy\ntrigger: "C:\\projects"\n---\nBody' assert parse_instinct_file(content)[0]["trigger"] == r"C:\projects" diff --git a/tests/lib/resolve-ecc-root.test.js b/tests/lib/resolve-ecc-root.test.js index f2b1e1482..3b7a8bad3 100644 --- a/tests/lib/resolve-ecc-root.test.js +++ b/tests/lib/resolve-ecc-root.test.js @@ -548,7 +548,7 @@ module.exports = { resolveEccRoot() { assert.strictEqual(process.env.HOME, ${JSO }); // On WSL, 'C:\\Users\\test\\.claude' is converted to '/mnt/c/Users/test/.claude'. // No install exists at the converted path, so resolveEccRoot falls back to it. - assert.strictEqual(result, '/mnt/c/Users/test/.claude'); + assert.strictEqual(result, path.resolve('/mnt/c/Users/test/.claude')); } finally { fs.rmSync(homeDir, { recursive: true, force: true }); }