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 AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ repository, including Codex, Claude Code, and other terminal coding agents.

## Current Project Phase

Latest release tag: v0.9.19.
Latest release tag: v0.9.20.

Active milestone: none. All currently scoped GitHub issues were closed when
this file was last aligned (2026-05-27). Do not autonomously pick up new
Expand Down
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.9.20] - 2026-05-27

### Fixed

- Aligned project-truth docs and contributor templates with the current `v0.9.19`
Expand Down Expand Up @@ -1723,7 +1725,8 @@ API stability, not feature completeness.
- **No timestamps in CREP events.** `cr cost --since` honors the log
file's mtime only; per-event timestamps land in v0.2.

[Unreleased]: https://github.com/spytensor/CoreRoom/compare/v0.9.19...HEAD
[Unreleased]: https://github.com/spytensor/CoreRoom/compare/v0.9.20...HEAD
[0.9.20]: https://github.com/spytensor/CoreRoom/compare/v0.9.19...v0.9.20
[0.9.19]: https://github.com/spytensor/CoreRoom/compare/v0.9.18...v0.9.19
[0.9.18]: https://github.com/spytensor/CoreRoom/compare/v0.9.17...v0.9.18
[0.9.17]: https://github.com/spytensor/CoreRoom/compare/v0.9.16...v0.9.17
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "coreroom"
version = "0.9.19"
version = "0.9.20"
edition = "2021"
rust-version = "1.88"
authors = ["Charlie Zhu <chaojie.zhu.cn@gmail.com>"]
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Disable that with `COREROOM_NO_UPDATE_CHECK=1` or
<summary>Don't have npm? Direct binary install.</summary>

```bash
TAG=v0.9.19
TAG=v0.9.20
ARCH=$(uname -m); case "$ARCH" in arm64|aarch64) ARCH=aarch64 ;; *) ARCH=x86_64 ;; esac
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
curl -fsSL "https://github.com/spytensor/CoreRoom/releases/download/${TAG}/cr-${TAG}-${OS}-${ARCH}.tar.gz" \
Expand Down
2 changes: 1 addition & 1 deletion npm/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@spytensor/coreroom",
"version": "0.9.19",
"version": "0.9.20",
"description": "CoreRoom is the Engineering Control Room for AI Agents: host-led, GitHub-gated AI-assisted software engineering control.",
"keywords": [
"cli",
Expand Down
39 changes: 11 additions & 28 deletions src/ansi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -183,14 +183,13 @@ mod tests {
}

#[test]
fn rgb_foreground_round_trips_through_crossterm() {
let styled = "@backend".with(crossterm::style::Color::Rgb {
r: 0x6b,
g: 0xb6,
b: 0xff,
});
let raw = styled.to_string();
let line = ansi_to_line(&raw);
fn rgb_foreground_is_preserved() {
// Keep this as a literal SGR sequence instead of relying on
// crossterm's Display impl. The Display path intentionally honors
// environment such as NO_COLOR, but the parser must remain testable
// in release shells that disable color globally.
let raw = "\x1b[38;2;107;182;255m@backend\x1b[39m";
let line = ansi_to_line(raw);
assert!(line.spans.iter().any(|span| span.content == "@backend"
&& span.style.fg == Some(Color::Rgb(0x6b, 0xb6, 0xff))));
}
Expand All @@ -209,12 +208,8 @@ mod tests {

#[test]
fn reset_returns_to_default_style() {
let raw = format!(
"{}{}",
"red".with(crossterm::style::Color::Rgb { r: 255, g: 0, b: 0 }),
"plain"
);
let line = ansi_to_line(&raw);
let raw = "\x1b[38;2;255;0;0mred\x1b[39mplain";
let line = ansi_to_line(raw);
// The "plain" span should not inherit the red fg.
let plain = line
.spans
Expand All @@ -241,20 +236,8 @@ mod tests {

#[test]
fn ansi_to_lines_splits_on_newlines() {
let raw = format!(
"{}\n{}",
"one".with(crossterm::style::Color::Rgb {
r: 50,
g: 50,
b: 50
}),
"two".with(crossterm::style::Color::Rgb {
r: 200,
g: 200,
b: 200
})
);
let lines = ansi_to_lines(&raw);
let raw = "\x1b[38;2;50;50;50mone\x1b[39m\n\x1b[38;2;200;200;200mtwo\x1b[39m";
let lines = ansi_to_lines(raw);
assert_eq!(lines.len(), 2);
assert_eq!(span_fg(&lines[0], 0), Some(Color::Rgb(50, 50, 50)));
assert_eq!(span_fg(&lines[1], 0), Some(Color::Rgb(200, 200, 200)));
Expand Down
2 changes: 1 addition & 1 deletion src/repl/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -640,7 +640,7 @@ fn snapshot_boot_dashboard_at_80() {
.trim_start_matches('\n')
.to_owned();
insta::assert_snapshot!(rendered, @r"
┌─ CoreRoom v0.9.19 ───────────────────────────────────────────────────────────┐
┌─ CoreRoom v0.9.20 ───────────────────────────────────────────────────────────┐
│ │
│ welcome back, Ada tips for getting started │
│ • type @role to send a task to a sp… │
Expand Down