Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,7 @@ Auto-discovery is based on the presence of `AI_CONTEXT.md`. No hardcoded list to
Copy `tools/ai_docs/config.sh.example` to `config.sh` and fill in:
- `GRAPHIFY_BIN` — path to the graphify binary
- `OBSIDIAN_VAULT` — root of your Obsidian vault
- `OBSIDIAN_PROJECT_DIR` — subfolder for this project
- `OBSIDIAN_PROJECT_SLUG` — canonical kebab-case slug for this project (for example, `ai-native-dev-stack`)
- `CLAUDE_MEMORY_KEY` — subfolder name in `~/.claude/projects/`

### 3. `AI_CONTEXT.md`
Expand Down
11 changes: 8 additions & 3 deletions hooks/tests/test_hooks_v4.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,14 @@ def test_two_concurrent_ends_produce_independent_outcomes(self) -> None:
for label, result in (("a", a), ("b", b)):
with self.subTest(session=label):
self.assertEqual(result.returncode, 0, msg=result.stderr)
# The error is a transport error (HTTP 401), not a
# log-truncation / silent-loss artifact.
self.assertIn("HTTP", result.stdout)
payload = json.loads(result.stdout.strip().splitlines()[0])
metadata = payload["metadata"]
# With no Obsidian server in CI this is a transport failure;
# the invariant is independent persistence reporting, not a
# particular HTTP status.
self.assertIn("sessionSaveError", metadata)
self.assertEqual(metadata.get("needsTriage"), True)
self.assertIn(label[-1] * 4, metadata.get("notePath", ""))


if __name__ == "__main__":
Expand Down