Update the push-blocker procedure with what actually worked: a
user-supplied classic PAT enables raw git push over the smart-HTTP
protocol to github.com, but api.github.com is intercepted by the
session's outbound proxy for this org ("GitHub access is not enabled
for this session"), so PR creation via API/MCP tools stays blocked
even with a valid token.
Document the recurring 403 from the GitHub integration in remote
sessions (git push, fork/create/create_branch/push_files all denied)
and the procedure to follow: confirm with 1-2 retries, never lose
work, generate a format-patch and hand it to the user via SendUserFile,
report the blocker plainly instead of claiming success.
Add a Claude/Anthropic-driven graph construction engine as a drop-in
alternative to the Zep-based one. Each text chunk is sent to Claude
with a tool-use schema derived from the generated ontology, extracting
only entities/relationships explicitly grounded in the text and
merging them into a local JSON graph store. Same service interface and
graph data shape as the Zep engine, so the existing D3 visualization
works unmodified.
- backend/app/services/claude_graph_builder.py: Claude extraction agent
- backend/app/models/graph_store.py: local JSON graph persistence
- backend/app/api/graph.py: engine selection (claude/zep) on build/data/delete routes
- frontend: Claude/Zep engine toggle on the Graph Build step, defaults to Claude
- config, requirements, locales, README/.env.example updated accordingly
- Add sans-serif font for English left-pane (status, workflow sections)
- Shorten English workflow step descriptions
- Reduce English report title font-size from 36px to 28px
- Use sans-serif font for English titles, descriptions and navbar
- Shorten English hero text to avoid overflow
- Fix :global() scoped CSS issue that was setting root font-size to 3.5rem
- Use separate unscoped style block for html[lang] selectors
Background threads (graph building, simulation prep, report generation,
profile generation) now inherit the requesting user's locale preference.
Previously these fell back to 'zh' because Flask request context was
unavailable in spawned threads.
Ensure poster_type stays PascalCase English and stance stays English enum
values regardless of language setting. Only natural language fields follow
the user's language preference.
The language instruction was causing LLM to change entity/relation naming
conventions. Now explicitly enforce PascalCase/UPPER_SNAKE_CASE for technical
identifiers while only applying language preference to description fields.