§9 acceptance: grep-zero sweep — every internal x.ai/grok identifier renamed

The PRD's first acceptance gate now holds: grep -RinE '\bx\.ai\b|grok'
crates/ --include='*.rs' → 0 matches (exempt: NOTICE and third-party
license archives, README provenance, and the required 'Based on Grok
Build Open Source' attribution, now sourced from version_attribution.txt).

Wire-visible renames (both sides in this repo, changed in lockstep):
- Auth method id 'grok.com' → 'kimi-code' (AuthMethodKind::KimiCode).
- Every x.ai/* and _x.ai/* ACP ext method and meta key → kigi/* /
  _kigi/* (~200 names; grokShell → kigiShell). Session-file replay keeps
  a read-side alias for the legacy '_x.ai/session/update' method so
  existing updates.jsonl histories load; writes emit only the new name
  (both directions test-pinned).
- Agent types grok-build* → kigi* with a documented legacy-prefix alias
  at resolution time so persisted sessions keep resolving.
- ToolNamespace/BuiltinAgentName GrokBuild* → Kigi* (wire snake_case
  kigi/kigi_concise/kigi_hashline; schema regenerated); grok_build
  implementation dirs renamed to kigi*.
- x-grok-* headers → x-kigi-*, __GROK_* sentinels → __KIGI_*, themes
  grokday/groknight → kigiday/kiginight (old persisted values fall back
  to the default theme), web_fetch allowlist xAI hosts → kimi.com +
  moonshot platforms, changelog CDN → this repo, grok-build changelog
  archives deleted.
- BYOK default endpoint removed: [endpoints] api_base_url is now truly
  optional with NO default — consumers fail fast with the flag name when
  unset (no silent x.ai egress). Mock harnesses inject it explicitly.
- System-prompt identity fixed: 'released by xAI' → 'an unofficial
  community CLI for Kimi' (template + regenerated encrypted form).

Also repaired pre-existing grok-era test debt found by the sweep: the
stale trace_classify default-model pin, the grok-pager UA label test,
pty-harness stale-binary reuse and non-hermetic moonshot routing (a PTY
test could previously reach the real api.moonshot.cn), and the outdated
oauth fixture scope key.

Gates: §9 grep 0; fmt clean; workspace check/clippy 0/0 (-D warnings);
FULL cargo test --workspace: 234 suites, 21,961 passed, 0 failed;
deny advisories ok.
This commit is contained in:
ZacharyZhang-NY committed 2026-07-18 02:48:46 -04:00
1 parent 86e3724310
commit 6f31415ed6
1056 files changed
+8410 -18307

No files matched your search

@@ -2418,13 +2418,13 @@ mod tests {
type Rgb = (u8, u8, u8);
type SyntectSpans = Vec<(Rgb, String)>;
/// Pins GrokNight via the shared test-lock guard; hold it for the whole
/// Pins KigiNight via the shared test-lock guard; hold it for the whole
/// test so a concurrent theme flip can't skew the compared highlighter walks.
fn pin_groknight_syntect() -> std::sync::MutexGuard<'static, ()> {
fn pin_kiginight_syntect() -> std::sync::MutexGuard<'static, ()> {
let guard = crate::theme::cache::pin_theme();
assert!(
!Theme::groknight().diff_uses_line_fg(),
"GrokNight must be banded for Equal-line syntect path in render"
!Theme::kiginight().diff_uses_line_fg(),
"KigiNight must be banded for Equal-line syntect path in render"
);
guard
}
@@ -2454,7 +2454,7 @@ mod tests {
}
/// Hunk-only: fresh highlighter, only the given lines in order (prod path).
/// Caller pins the theme via `pin_groknight_syntect` (lock is not reentrant).
/// Caller pins the theme via `pin_kiginight_syntect` (lock is not reentrant).
fn hunk_only_raw_styles(path: &Path, lines: &[&str]) -> Vec<SyntectSpans> {
let syntect = get_syntect();
let mut hl = syntect
@@ -2467,7 +2467,7 @@ mod tests {
}
/// Full-file then slice: silent HL from line 1, return styles for all lines.
/// Caller pins the theme via `pin_groknight_syntect` (lock is not reentrant).
/// Caller pins the theme via `pin_kiginight_syntect` (lock is not reentrant).
fn full_file_raw_styles(path: &Path, file_text: &str) -> Vec<SyntectSpans> {
let syntect = get_syntect();
let mut hl = syntect
@@ -2505,7 +2505,7 @@ class ProcessQueueItem(BaseModel):
/// Control: self-contained Rust line → keyword RGB ≠ string RGB (raw syntect).
#[test]
fn syntax_highlight_splits_keyword_and_string_fg() {
let _guard = pin_groknight_syntect();
let _guard = pin_kiginight_syntect();
let path = Path::new("probe.rs");
let lines = hunk_only_raw_styles(path, &["let x = \"hello\";"]);
assert_eq!(lines.len(), 1);
@@ -2552,7 +2552,7 @@ class ProcessQueueItem(BaseModel):
/// (and differ from cold hunk-only spill) after a mid-file closing `"""`.
#[test]
fn file_scoped_matches_full_file_on_field_line() {
let _guard = pin_groknight_syntect();
let _guard = pin_kiginight_syntect();
let path = Path::new("queue_item.py");
let (file, hunk, field_ln) = fixture_python_close_hunk();
let close_ln = hunk[0].ln;
@@ -2629,7 +2629,7 @@ class ProcessQueueItem(BaseModel):
/// baked under another theme it must not paint — hunk-only output.
#[test]
fn file_scoped_stale_theme_falls_back_to_hunk_only() {
let _guard = pin_groknight_syntect();
let _guard = pin_kiginight_syntect();
let path = Path::new("queue_item.py");
let (file, hunk, field_ln) = fixture_python_close_hunk();
// Real computed map: paintable by construction (line keys and texts
@@ -2672,7 +2672,7 @@ class ProcessQueueItem(BaseModel):
);
// Stale: the SAME paintable map baked under another theme is skipped.
let stale = ThemeKind::GrokDay;
let stale = ThemeKind::KigiDay;
assert_ne!(stale, crate::theme::cache::current_kind());
block.highlight = EditHighlightPhase::FileScoped {
by_new_line,
@@ -2739,7 +2739,7 @@ class ProcessQueueItem(BaseModel):
/// after a mid-file closing `"""`.
#[test]
fn triple_quote_hunk_only_differs_from_full_file_today() {
let _guard = pin_groknight_syntect();
let _guard = pin_kiginight_syntect();
let path = Path::new("queue_item.py");
let (file, hunk, field_ln) = fixture_python_close_hunk();
let close_ln = hunk[0].ln;