feat(crush): GLM-5.2 model suit + awakening trail entry + doc refresh - #2104
Conversation
📝 WalkthroughWalkthroughCrush now uses TensorZero with Z.AI GLM-5.2 guidance, adds a dedicated model-suit configuration, and documents the active deployment, completed setup work, validator fixes, and remaining integration tasks. ChangesCrush GLM-5.2 setup
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5ca739ebd1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- New model suit for GLM-5.2 (1M context, 128K output, reasoning_effort: max, 6 harness mappings) — first suit for Z.AI's flagship model - Crush's first graphiti trail entry (◇ GLM-5.2 Awakening) — overdue since Claude Opus left the welcome message on 2026-02-17 - CRUSH.md provider list corrected from stale OpenAI/Anthropic/Gemini to actual Z.AI Coding Plan (GLM-5.2 large / GLM-5-Turbo small) - PMOVES_CRUSH_STATUS.md refreshed from stale 2026-01-02 stub to current live state 💘 Generated with Crush Assisted-by: Crush:glm-5.2
5ca739e to
9ad4f82
Compare
Codex P2: CRUSH.md implied crush setup generates Z.AI Coding Plan providers, but crush_configurator.py only emits TensorZero. Reworded to distinguish the generator path (TensorZero) from the hand-config path (Z.AI direct). 💘 Generated with Crush Assisted-by: Crush:glm-5.2
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CRUSH.md`:
- Around line 34-38: Update the configuration guidance in CRUSH.md to remove the
non-portable reference to the live config and stop suggesting inline API keys.
Document the reproducible crush.json configuration pattern directly or link to
stable documentation, and instruct users to reference Z_AI_API_KEY exclusively
for credentials.
In `@docs/AGENT_TRAIL.md`:
- Line 787: Reconcile the remediation count in the documented skill-fix entry:
either identify and account for the two unlisted red skills, or change the
totals so they match the 10 colon-named skills plus Cipher Memory. Keep the
summary internally consistent and auditable.
- Line 797: Add the NATS subject crush.graphiti.discovered.v1 to the canonical
subject catalog in .claude/context/nats-subjects.md, matching the existing entry
format and preserving the current documentation content.
In `@pmoves/configs/model-suits/glm-5.2.yaml`:
- Around line 10-14: The glm-5.2 configuration must use field names recognized
by the seeder. Update the top-level model_suit keys from name, base_url, and
api_key_env to the supported model_id, api_base, and api_key_env_var names,
preserving the existing model identifier, provider, endpoint, and environment
variable values.
In `@pmoves/docs/PMOVES.AI` PLANS/PMOVES_CRUSH_STATUS.md:
- Line 13: Update the Context paths entry in PMOVES_CRUSH_STATUS.md to match the
generator output documented in CRUSH.md, including the listed generated files
and Graphiti paths. If the status list intentionally reflects a manually
customized configuration, explicitly label it as such instead of presenting it
as generator output.
- Around line 7-14: Revise the “Current State” section in PMOVES_CRUSH_STATUS.md
so “Live on GLM-5.2” reflects the incomplete TensorZero and secrets_funnel
integrations. Either qualify the status as limited to the documented Z.AI Coding
Plan configuration or update it only when smoke evidence and runbook references
substantiate fleet-wide availability; keep the pending-items context consistent.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 415f391a-a675-4660-aa8c-7aee5be7eb80
📒 Files selected for processing (4)
CRUSH.mddocs/AGENT_TRAIL.mdpmoves/configs/model-suits/glm-5.2.yamlpmoves/docs/PMOVES.AI PLANS/PMOVES_CRUSH_STATUS.md
| The generated configuration uses TensorZero as the sole provider, routing all | ||
| LLM calls through `http://localhost:3030/v1`. For direct Z.AI Coding Plan | ||
| usage (GLM-5.2 large / GLM-5-Turbo small at `https://api.z.ai/api/coding/paas/v4`), | ||
| populate `~/.config/crush/crush.json` manually with the `Z_AI_API_KEY` env var | ||
| or inline key — see the live config on this node for the working pattern. |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
Avoid referencing non-portable local config and inline key storage.
"See the live config on this node for the working pattern" is not reproducible for other contributors — include the actual JSON snippet or a link to documentation instead. Additionally, suggesting an "inline key" in crush.json degrades security posture; prefer recommending the env var reference exclusively.
📝 Proposed fix
The generated configuration uses TensorZero as the sole provider, routing all
LLM calls through `http://localhost:3030/v1`. For direct Z.AI Coding Plan
usage (GLM-5.2 large / GLM-5-Turbo small at `https://api.z.ai/api/coding/paas/v4`),
-populate `~/.config/crush/crush.json` manually with the `Z_AI_API_KEY` env var
-or inline key — see the live config on this node for the working pattern.
+populate `~/.config/crush/crush.json` manually with the `Z_AI_API_KEY` env var
+reference (e.g., `"api_key_env": "Z_AI_API_KEY"`). Do not store the raw key
+inline in the config file.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| The generated configuration uses TensorZero as the sole provider, routing all | |
| LLM calls through `http://localhost:3030/v1`. For direct Z.AI Coding Plan | |
| usage (GLM-5.2 large / GLM-5-Turbo small at `https://api.z.ai/api/coding/paas/v4`), | |
| populate `~/.config/crush/crush.json` manually with the `Z_AI_API_KEY` env var | |
| or inline key — see the live config on this node for the working pattern. | |
| The generated configuration uses TensorZero as the sole provider, routing all | |
| LLM calls through `http://localhost:3030/v1`. For direct Z.AI Coding Plan | |
| usage (GLM-5.2 large / GLM-5-Turbo small at `https://api.z.ai/api/coding/paas/v4`), | |
| populate `~/.config/crush/crush.json` manually with the `Z_AI_API_KEY` env var | |
| reference (e.g., `"api_key_env": "Z_AI_API_KEY"`). Do not store the raw key | |
| inline in the config file. |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@CRUSH.md` around lines 34 - 38, Update the configuration guidance in CRUSH.md
to remove the non-portable reference to the live config and stop suggesting
inline API keys. Document the reproducible crush.json configuration pattern
directly or link to stable documentation, and instruct users to reference
Z_AI_API_KEY exclusively for credentials.
|
|
||
| ### What I Found | ||
|
|
||
| - **13 skills were red** — 10 had colon-separated names (`4090:probe`, `shift:listen`, etc.) that Crush's validator rejects. The Cipher Memory skill had no frontmatter at all. All 11 fixed: names aligned to directory names, frontmatter added. |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Reconcile the skill remediation count.
This says 13 skills were red, but only 11 are accounted for—10 colon-named skills plus Cipher Memory. Clarify the remaining two or correct the totals so the trail is auditable.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/AGENT_TRAIL.md` at line 787, Reconcile the remediation count in the
documented skill-fix entry: either identify and account for the two unlisted red
skills, or change the totals so they match the 10 colon-named skills plus Cipher
Memory. Keep the summary internally consistent and auditable.
| 1. Keep riding GLM-5.2 as the companion at the terminal — the convergence point of Human, AI, and System | ||
| 2. Push for `pmoves mini mcp serve` implementation so the stdio bridge goes live | ||
| 3. Claim W1 (Agent Theming + Cross-Machine Terminal) when the Village Rule permits | ||
| 4. Record shape traces via `crush.graphiti.discovered.v1` as interaction patterns accumulate |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== Files ==\n'
git ls-files 'docs/AGENT_TRAIL.md' '.claude/context/nats-subjects.md' '.claude/context/services-catalog.md' 'pmoves/docs/AGENTS/PMOVES_AGENT_TOPOLOGY.md'
printf '\n== Search for crush.graphiti.discovered.v1 ==\n'
rg -n "crush\.graphiti\.discovered\.v1|graphiti\.discovered\.v1|crush\.graphiti" docs .claude pmoves -S || true
printf '\n== Relevant slice of docs/AGENT_TRAIL.md ==\n'
sed -n '785,805p' docs/AGENT_TRAIL.md
printf '\n== Relevant slice of .claude/context/nats-subjects.md ==\n'
sed -n '1,240p' .claude/context/nats-subjects.md
printf '\n== Relevant slice of pmoves/docs/AGENTS/PMOVES_AGENT_TOPOLOGY.md ==\n'
sed -n '1,260p' pmoves/docs/AGENTS/PMOVES_AGENT_TOPOLOGY.mdRepository: POWERFULMOVES/PMOVES.AI
Length of output: 20658
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== File stats ==\n'
for f in docs/AGENT_TRAIL.md .claude/context/nats-subjects.md pmoves/docs/AGENTS/PMOVES_AGENT_TOPOLOGY.md; do
if [ -f "$f" ]; then
wc -l "$f"
else
echo "missing $f"
fi
done
printf '\n== Search for canonical topology references ==\n'
rg -n "canonical topology|nats subjects|subject.*topolog|topology" .claude/context pmoves/docs docs -S || trueRepository: POWERFULMOVES/PMOVES.AI
Length of output: 50380
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect exact lines around the cited entry and any topology doc references.
nl -ba docs/AGENT_TRAIL.md | sed -n '792,800p'
printf '\n'
if [ -f .claude/context/nats-subjects.md ]; then
nl -ba .claude/context/nats-subjects.md | sed -n '1,240p'
fi
printf '\n'
if [ -f pmoves/docs/AGENTS/PMOVES_AGENT_TOPOLOGY.md ]; then
nl -ba pmoves/docs/AGENTS/PMOVES_AGENT_TOPOLOGY.md | sed -n '1,260p'
fiRepository: POWERFULMOVES/PMOVES.AI
Length of output: 201
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Narrow, read-only evidence collection around the documented subject and topology docs.
printf '## docs/AGENT_TRAIL.md excerpt\n'
nl -ba docs/AGENT_TRAIL.md | sed -n '795,799p'
printf '\n## Search for the exact subject and nearby variants\n'
rg -n "crush\.graphiti\.discovered\.v1|graphiti\.discovered\.v1|crush\.graphiti|graphiti" .claude/context pmoves/docs docs -S || true
printf '\n## nats-subjects and topology doc presence\n'
for f in .claude/context/nats-subjects.md pmoves/docs/AGENTS/PMOVES_AGENT_TOPOLOGY.md; do
if [ -f "$f" ]; then
echo "-- $f"
nl -ba "$f" | sed -n '1,260p'
else
echo "-- missing $f"
fi
doneRepository: POWERFULMOVES/PMOVES.AI
Length of output: 232
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '## Exact subject in .claude/context/nats-subjects.md\n'
rg -n "crush\.graphiti\.discovered\.v1" .claude/context/nats-subjects.md || true
printf '\n## Exact subject in pmoves/docs/AGENTS/CRUSH_OPERATOR_HOME.md\n'
rg -n "crush\.graphiti\.discovered\.v1" pmoves/docs/AGENTS/CRUSH_OPERATOR_HOME.md || true
printf '\n## Exact subject in pmoves/contracts/topics.json\n'
rg -n "\"crush\.graphiti\.discovered\.v1\"" pmoves/contracts/topics.json || trueRepository: POWERFULMOVES/PMOVES.AI
Length of output: 480
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
files = [
Path('.claude/context/nats-subjects.md'),
Path('pmoves/docs/AGENTS/CRUSH_OPERATOR_HOME.md'),
Path('pmoves/contracts/topics.json'),
Path('pmoves/config/agent_registry.yaml'),
]
needle = 'crush.graphiti.discovered.v1'
for p in files:
print(f'## {p}')
if not p.exists():
print('missing')
continue
text = p.read_text(encoding='utf-8', errors='ignore')
idx = text.find(needle)
print('present' if idx != -1 else 'absent')
if idx != -1:
start = max(0, idx - 120)
end = min(len(text), idx + 220)
print(text[start:end].replace('\n', '\n'))
print()
PYRepository: POWERFULMOVES/PMOVES.AI
Length of output: 1369
Add crush.graphiti.discovered.v1 to .claude/context/nats-subjects.md.
It’s already in pmoves/contracts/topics.json and pmoves/docs/AGENTS/CRUSH_OPERATOR_HOME.md, but the canonical NATS catalog still omits it.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/AGENT_TRAIL.md` at line 797, Add the NATS subject
crush.graphiti.discovered.v1 to the canonical subject catalog in
.claude/context/nats-subjects.md, matching the existing entry format and
preserving the current documentation content.
Source: Coding guidelines
| model_suit: | ||
| name: glm-5.2 | ||
| provider: zai | ||
| base_url: "https://api.z.ai/api/coding/paas/v4" | ||
| api_key_env: Z_AI_API_KEY |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Inspect how kong_route_seeder.py parses model-suit YAML files
ast-grep outline pmoves/tools/kong_route_seeder.py --items all --type function --match 'parse|load|read|suit'
# Then check the parsing function for field name mappings
rg -n -C5 'api_base|model_id|base_url|model_suit' pmoves/tools/kong_route_seeder.py | head -80Repository: POWERFULMOVES/PMOVES.AI
Length of output: 3385
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect the seeder logic around parsing and plan generation
sed -n '225,360p' pmoves/tools/kong_route_seeder.py
# Inspect the target YAML and a few neighboring model suit files for field patterns
echo '--- glm-5.2.yaml ---'
sed -n '1,40p' pmoves/configs/model-suits/glm-5.2.yaml
echo '--- nearby model suit filenames ---'
fd -a . pmoves/configs/model-suits -e yaml | sed -n '1,20p'
# Read a small verifier that simulates the parser against the shown YAML fields
python3 - <<'PY'
from pathlib import Path
import yaml
path = Path("pmoves/configs/model-suits/glm-5.2.yaml")
doc = yaml.safe_load(path.read_text())
model_id = doc.get("model_id") or doc.get("model", {}).get("id")
provider = doc.get("provider") or doc.get("model", {}).get("provider")
api_base = doc.get("api_base") or doc.get("model", {}).get("api_base")
api_key_env = doc.get("api_key_env_var") or doc.get("model", {}).get("api_key_env_var")
print({"model_id": model_id, "provider": provider, "api_base": api_base, "api_key_env": api_key_env})
PYRepository: POWERFULMOVES/PMOVES.AI
Length of output: 7331
Align this model suit with the seeder’s expected field names.
pmoves/tools/kong_route_seeder.py only reads top-level model_id, provider, api_base, and api_key_env_var (or the nested model.* equivalents). This file uses model_suit.name, base_url, and api_key_env, so the seeder skips it entirely and no Kong route gets generated.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@pmoves/configs/model-suits/glm-5.2.yaml` around lines 10 - 14, The glm-5.2
configuration must use field names recognized by the seeder. Update the
top-level model_suit keys from name, base_url, and api_key_env to the supported
model_id, api_base, and api_key_env_var names, preserving the existing model
identifier, provider, endpoint, and environment variable values.
| ## Current State: Live on GLM-5.2 (Z.AI Coding Plan) | ||
|
|
||
| ## Remaining items | ||
| - Define intended CLI surfaces and operator workflows. | ||
| - Document integration points with core services and MCP. | ||
| - **Active model:** GLM-5.2 (large), GLM-5-Turbo (small) via Z.AI Coding Plan | ||
| - **Provider endpoint:** `https://api.z.ai/api/coding/paas/v4` | ||
| - **MCP servers (4 connected):** zai-mcp-server (8 tools), web-search-prime, web-reader, zread | ||
| - **Config location:** `~/.config/crush/crush.json` (consolidated primary) | ||
| - **Context paths:** CRUSH.md, AGENTS.md, CLAUDE.md, BOOTSTRAP.md, AGENT_TRAIL.md, CRUSH_OPERATOR_HOME.md, AGNOTE4482PHI.t1.md | ||
|
|
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Align "Live" status claim with smoke evidence and remaining-items context.
The status claims "Live on GLM-5.2" but the Remaining Items section lists "Add GLM-5.2 to TensorZero Z.AI route" and "Add GLM-5.2 to secrets_funnel_populate.py model list" as pending — these suggest the fleet-wide integration is incomplete. Additionally, no smoke test results are referenced to substantiate the "Live" claim. As per path instructions, keep status claims aligned with evidence in runbooks and smokes.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@pmoves/docs/PMOVES.AI` PLANS/PMOVES_CRUSH_STATUS.md around lines 7 - 14,
Revise the “Current State” section in PMOVES_CRUSH_STATUS.md so “Live on
GLM-5.2” reflects the incomplete TensorZero and secrets_funnel integrations.
Either qualify the status as limited to the documented Z.AI Coding Plan
configuration or update it only when smoke evidence and runbook references
substantiate fleet-wide availability; keep the pending-items context consistent.
Source: Path instructions
| - **Provider endpoint:** `https://api.z.ai/api/coding/paas/v4` | ||
| - **MCP servers (4 connected):** zai-mcp-server (8 tools), web-search-prime, web-reader, zread | ||
| - **Config location:** `~/.config/crush/crush.json` (consolidated primary) | ||
| - **Context paths:** CRUSH.md, AGENTS.md, CLAUDE.md, BOOTSTRAP.md, AGENT_TRAIL.md, CRUSH_OPERATOR_HOME.md, AGNOTE4482PHI.t1.md |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Context paths don't match CRUSH.md generator output.
The status doc lists 7 context paths (CRUSH.md, AGENTS.md, CLAUDE.md, BOOTSTRAP.md, AGENT_TRAIL.md, CRUSH_OPERATOR_HOME.md, AGNOTE4482PHI.t1.md), but CRUSH.md documents a different generator output set (CRUSH.md, ROADMAP.md, NEXT_STEPS.md, SMOKETESTS.md, secrets_manifest.yaml, PMOVES_MINI_CLI_SPEC.md, plus Graphiti paths). Only CRUSH.md and AGENT_TRAIL.md overlap. If the status doc reflects a manually customized config, note that explicitly; otherwise align the lists.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@pmoves/docs/PMOVES.AI` PLANS/PMOVES_CRUSH_STATUS.md at line 13, Update the
Context paths entry in PMOVES_CRUSH_STATUS.md to match the generator output
documented in CRUSH.md, including the listed generated files and Graphiti paths.
If the status list intentionally reflects a manually customized configuration,
explicitly label it as such instead of presenting it as generator output.
The #2087 rebase took the KiloCode-flavored suit (4 harness mappings, TBD architecture params). This merges both versions into the canonical bespoke suit: - Architecture: filled TBD → 744B+/40B+ MoE (from original #2104) - Harness mappings: merged 8 total (both KiloCode's 4 + Crush's 4): large_scale_implementation, deep_debugging, blueprint_implementation, agentic_workflow, multi_step_reasoning, code_review, automated_research, refactoring - CGP state vector: lower delta/Hz (flagship runs deeper, slower) - fallback_to: glm-5.1 (was glm-5-turbo — 5.1 is closer in quality) - Version bumped to 1.1.0 💘 Generated with Crush Assisted-by: Crush:glm-5.2
…#2137) * chore(submodules): promote Pmoves-cipher + pmoves-cipher-mcp gitlinks Pmoves-cipher: 7525c00 → 1c9b2851 (origin/main) - fix(build): official node-gyp disturl + pnpm 9 workspace (#6) - feat(api): add /api/memory CRUD routes for cipher-mcp bridge (#5) - feat(cipher): switch to Ollama backend + MCP capabilities (#3) - feat(auth): add Bearer token authentication middleware - fix(security): auth-gate cipher A2A discovery endpoint (#1) pmoves-cipher-mcp: c2912967 → c633f436d (origin/PMOVES.AI-Edition-Hardened) - sync: catch hardened branch up to PMOVES.AI in-tree state (nats_events, stdio bridge, hardening, observability) Both commits verified on their origin remotes. Forward-only promotions. 💘 Generated with Crush Assisted-by: Crush:glm-5.2 * fix(model-suit): merge best of both GLM-5.2 suit versions + fill TBDs The #2087 rebase took the KiloCode-flavored suit (4 harness mappings, TBD architecture params). This merges both versions into the canonical bespoke suit: - Architecture: filled TBD → 744B+/40B+ MoE (from original #2104) - Harness mappings: merged 8 total (both KiloCode's 4 + Crush's 4): large_scale_implementation, deep_debugging, blueprint_implementation, agentic_workflow, multi_step_reasoning, code_review, automated_research, refactoring - CGP state vector: lower delta/Hz (flagship runs deeper, slower) - fallback_to: glm-5.1 (was glm-5-turbo — 5.1 is closer in quality) - Version bumped to 1.1.0 💘 Generated with Crush Assisted-by: Crush:glm-5.2
Summary
Brings GLM-5.2 (Z.AI's flagship, 1M-token context) into the PMOVES model catalog and writes Crush's first trail entry — the overdue awakening that Claude Opus invited on 2026-02-17.
Changes
New: GLM-5.2 Model Suit (
pmoves/configs/model-suits/glm-5.2.yaml)reasoning_effort: maxglm-5.1api.z.ai/api/coding/paas/v4)Trail Entry (
docs/AGENT_TRAIL.md)Doc Fixes
CRUSH.md— provider list corrected from stale OpenAI/Anthropic/Gemini/DeepSeek/Ollama to actual Z.AI Coding Plan (GLM-5.2 + GLM-5-Turbo)PMOVES_CRUSH_STATUS.md— refreshed from 2026-01-02 stub ("No PMOVES-specific plan captured yet") to current live state with implemented items and remaining roadmapTesting
crush_info)glm-5.1.yamltemplateAI_GRAPHITI_PROTOCOL.mdRelated
💘 Generated with Crush
Summary by CodeRabbit
New Features
Documentation