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
19 changes: 18 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

No changes yet.

## [0.9.5] - 2026-05-24

### Fixed

- **Default unified room entrypoint (#313).** Fixed the v0.9.4 release
mismatch where plain `cr` still opened the read-only dashboard first and
then fell through to the old REPL. Plain `cr` now opens the unified live
room directly for initialized interactive projects.
- **No old-REPL fallthrough (#313).** Normal live-room exit now returns to the
shell instead of printing `CoreRoom console closed; starting REPL` and
showing the legacy splash. `cr start` remains the explicit direct REPL
escape hatch.
- **Default-path PTY dogfood (#313).** The release dogfood now types bare user
text and explicit `@role` text through plain `cr`, and fails if the old
dashboard-to-REPL path reappears.

## [0.9.4] - 2026-05-24

### Added
Expand Down Expand Up @@ -1294,7 +1310,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.4...HEAD
[Unreleased]: https://github.com/spytensor/CoreRoom/compare/v0.9.5...HEAD
[0.9.5]: https://github.com/spytensor/CoreRoom/compare/v0.9.4...v0.9.5
[0.9.4]: https://github.com/spytensor/CoreRoom/compare/v0.9.3...v0.9.4
[0.9.3]: https://github.com/spytensor/CoreRoom/compare/v0.9.2...v0.9.3
[0.9.2]: https://github.com/spytensor/CoreRoom/compare/v0.9.1...v0.9.2
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.4"
version = "0.9.5"
edition = "2021"
rust-version = "1.85"
authors = ["Charlie Zhu <chaojie.zhu.cn@gmail.com>"]
Expand Down
30 changes: 16 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

![CoreRoom full-screen engineering console preview](docs/images/control-room-console.png)

> **Status: v0.9.4 — user-runnable, still pre-1.0.** Claude Code,
> **Status: v0.9.5 — user-runnable, still pre-1.0.** Claude Code,
> Codex, and Gemini adapters are wired up; bare `cr` opens CoreRoom
> directly, guides setup when `.coreroom/` is missing, and shows the
> effective role / engine / model configuration on entry. **v0.4.3**
Expand Down Expand Up @@ -43,11 +43,11 @@
> unknown/placeholder state is hidden from the primary room view. **v0.9.3**
> adds role avatars for rails and delegation cards, with safe terminal glyphs
> by default and optional Nerd Font glyphs through `COREROOM_AVATAR_PACK=nerd-font`.
> **v0.9.4** adds the staged unified live room path behind
> `cr console --live-room`: conversation and composer render in the same
> full-screen terminal surface, bare text routes to `@host`, explicit `@role`
> tasks route without exiting to the old REPL, and real PTY dogfood now gates
> the path before it can become the default.
> **v0.9.4** added the staged unified live room path behind
> `cr console --live-room`. **v0.9.5** makes that path the default: plain `cr`
> opens the unified full-screen room, conversation and composer stay in the
> main surface, dashboard rails update around them, and `cr start` is the
> explicit legacy/direct REPL escape hatch.
> Per semver, 0.x.y means the public API is not yet stable.

## Why
Expand Down Expand Up @@ -126,9 +126,9 @@ which CoreRoom drives.
Default entrypoints:

```bash
cr # console-first room, then REPL after you exit the console
cr start # direct REPL, skipping the console
cr console # full-screen console only, derived from local project state
cr # unified full-screen room: conversation/composer plus dashboard facts
cr start # direct legacy REPL escape hatch
cr console # read-only dashboard/snapshot inspection surface
```

If `cr` conflicts with an existing command in your environment, npm also
Expand All @@ -155,7 +155,7 @@ Disable that with `COREROOM_NO_UPDATE_CHECK=1` or
<summary>Don't have npm? Direct binary install.</summary>

```bash
TAG=v0.9.4
TAG=v0.9.5
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 Expand Up @@ -222,10 +222,12 @@ cr › @host scope out adding email verification

Useful commands:

- `cr` enters the console-first room, then hands off to the REPL after you
exit the console. If `.coreroom/` is missing, an interactive terminal gets
the guided setup first.
- `cr start` enters the REPL directly when you want to skip the console.
- `cr` enters the unified full-screen room. The center conversation/composer is
the primary user surface; project, gate, evidence, source, and role facts are
dashboard rails around it. If `.coreroom/` is missing, an interactive
terminal gets the guided setup first.
- `cr start` enters the legacy/direct REPL when you need the old line-oriented
escape hatch.
- `cr start --yolo` runs the current session with `permission_mode=bypass`
for every role after an interactive confirmation.
- `cr start --fresh` starts clean instead of resuming saved engine sessions.
Expand Down
8 changes: 8 additions & 0 deletions data/splash_content.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ items = [
"/journal <role> captures today's lessons-learned",
]

[[whats_new]]
version = "0.9.5"
items = [
"plain cr now opens the unified live room instead of dashboard-to-REPL",
"conversation and composer stay inside the main room surface",
"real PTY dogfood types user input through the default cr path",
]

[[whats_new]]
version = "0.9.4"
items = [
Expand Down
6 changes: 3 additions & 3 deletions docs/DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,9 @@ python3 scripts/dogfood-v09-user-cases.py

This is intentionally not a syntax-level check. It builds the real local
binary, initializes a temporary user project, inspects the generated team
roles and host prompt, verifies priors, enters `cr console` through a PTY,
enters `cr console --live-room` through a PTY with typed user input and
explicit `@role` routing, regenerates README images, and fails if those
roles and host prompt, verifies priors, enters plain `cr` through a PTY with
typed user input and explicit `@role` routing, checks the explicit
`cr console --live-room` alias, regenerates README images, and fails if those
user-visible paths regress.
Release evidence must include this command when console, setup/init, host
control, role prompt composition, or README visual behavior changed.
Expand Down
Binary file modified docs/images/boot-dashboard.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 6 additions & 4 deletions docs/proposed-amendments.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,10 @@ validated snapshot.
`cr console` may remain a live read-only dashboard while the unified room is
under construction.

The unified room must land first behind a non-default entrypoint or explicit
flag. Bare `cr` must not default to it until real PTY dogfood proves that the
user can type into the composer, dispatch through the existing routing
semantics, see responses/status in the same room, and exit safely.
The unified room landed first behind an explicit flag in v0.9.4. After the
default dashboard-to-REPL split failed real user expectations, #313 / v0.9.5
made bare `cr` open the unified room directly. `cr start` remains the
legacy/direct REPL escape hatch while deeper runtime parity continues.

### Migration impact

Expand All @@ -149,6 +149,8 @@ The implementation is staged:
- #304 adds the live room conversation/task-card model.
- #305 integrates a live room bridge behind a non-default entrypoint.
- #306 adds real PTY dogfood before any default-entrypoint decision.
- #313 makes the unified room the default plain-`cr` entrypoint after real
user testing rejected the dashboard-to-REPL split.

### Decision

Expand Down
37 changes: 21 additions & 16 deletions docs/v0.9-real-user-dogfood.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
# v0.9 Real Local User-Case Dogfood

This document records release-blocking dogfood evidence for issue `#291`,
extended by `#306` for the v0.9.4 unified live-room path. It exists because
extended by `#306` for the v0.9.4 unified live-room path and by `#313` for the
v0.9.5 default live-room entrypoint. It exists because
v0.9 release readiness must not rely only on compilation, unit tests, syntax
checks, or static renderer assertions.

## Scenario Matrix

| Scenario | Real command path | Evidence |
| --- | --- | --- |
| Build local user binary | `cargo build --locked --quiet` | Local `target/debug/cr` exists and reports `cr 0.9.4` |
| Build local user binary | `cargo build --locked --quiet` | Local `target/debug/cr` exists and reports the current `cr` version |
| Fresh user project setup | `cr init --project <temp> --yes --preset team` | `.coreroom/` written with team roles, gate templates, shared priors, and lockfile |
| Role inventory | `cr role list --project <temp>` | `@host`, `@engineer`, `@reviewer`, `@sre`, `@security`, `@qa` listed |
| Host authority prompt | `cr prompt show host --project <temp>` | Prompt contains `You are \`@host\`` and highest-authority wording |
| Priors integrity | `cr verify --project <temp>` | Priors lock verifies against generated project files |
| Default console-first entry | `cr` inside a PTY from a fresh initialized project | Console enters a real terminal before the REPL, renders project/conversation/environment/role/evidence facts, receives `q`, reaches the REPL, receives `/exit`, and exits cleanly |
| Default unified room entry | `cr` inside a PTY from a fresh initialized project | Unified room enters a real terminal, renders project/conversation/environment/role/evidence facts plus composer, accepts typed user text, routes bare text to `@host`, routes explicit `@role` text, and exits without old-REPL fallthrough |
| Full-screen console entry | `cr console` and `cr console --snapshot tests/fixtures/console_snapshot_v08.toml` inside a PTY | Console enters a real terminal from live local project state or a snapshot fixture, renders project/conversation/environment/role/evidence facts, receives `q`, and exits cleanly |
| Unified live room composer | `cr console --live-room` inside a PTY from a fresh initialized project | The non-default unified room renders conversation, dashboard facts, and composer together; typed bare text queues `@host`, explicit `@reviewer` text shows explicit-role routing status, unsupported runtime-only slash commands explain the fallback, and `/exit` leaves the room without old-REPL fallthrough |
| Unified live room alias | `cr console --live-room` inside a PTY from a fresh initialized project | The explicit alias renders the same conversation, dashboard facts, and composer together; typed bare text queues `@host`, explicit `@reviewer` text shows explicit-role routing status, unsupported legacy-only slash commands explain the fallback, and `/exit` leaves the room without old-REPL fallthrough |
| README visuals | `make readme-images` | All README PNGs regenerate and pass PNG/file-size checks |

## Harness
Expand All @@ -36,14 +37,16 @@ functions:
- inspects generated role inventory and composed host prompt
- verifies `.coreroom/priors.lock`
- enters `cr console` through a Unix PTY at `120x40`
- enters plain `cr` through a Unix PTY at `160x48` and types real composer input
- enters `cr console --live-room` through a Unix PTY at `160x48` and types
real composer input
- sends `q` to exercise terminal restoration / exit path
- regenerates README images

## Recorded Run

Recorded locally on 2026-05-24 for `#291` and extended for `#306`.
Recorded locally on 2026-05-24 for `#291`, extended for `#306`, and updated
for `#313`.

Command:

Expand All @@ -70,15 +73,17 @@ Key observed facts:
`Environment`, `Roles`, `Evidence`, and `@host`, plus a public user/host
transcript marker.
- PTY console exited cleanly after receiving `q`.
- PTY live-room output included the user text `validate unified room from real
pty`, `queued for @host`, `@reviewer check explicit routing`, `queued for
@reviewer` lane activity / explicit `@role` routing status, and the clear
unsupported-command fallback for `/journal`.
- PTY plain-`cr` output included the user text `validate unified room from
plain cr`, `queued for @host`, `@reviewer check explicit routing`, and
explicit `@role` routing status.
- PTY live-room alias output included `queued for @host`, `@reviewer check
explicit routing`, `queued for @reviewer` lane activity / explicit `@role`
routing status, and the clear unsupported-command fallback for `/journal`.
- PTY live-room output did not contain `CoreRoom console closed; starting REPL`,
proving that the non-default unified room did not fall through to the old
REPL path during the scenario.
proving that the default unified room did not fall through to the old REPL
path during the scenario.
- `make readme-images` regenerated:
- `docs/images/boot-dashboard.png` at 226147 bytes
- `docs/images/boot-dashboard.png` at 223534 bytes
- `docs/images/work-cards.png` at 339870 bytes
- `docs/images/control-room-console.png` at 714325 bytes

Expand Down Expand Up @@ -106,10 +111,10 @@ problems that pure syntax or helper-level tests do not.
local project, including the v0.9.2 user-first conversation pane and
host-managed task-card treatment for internal delegation. It does not
validate live GitHub polling.
- The v0.9.4 live-room PTY scenario validates typed composer input and routing,
but not authenticated role-engine execution or the mature REPL permission
prompt socket. `cr console --live-room` remains non-default until that parity
exists.
- The v0.9.5 live-room PTY scenario validates typed composer input and routing
through the default plain-`cr` path. It does not yet validate authenticated
role-engine execution or the mature REPL permission prompt socket inside the
ratatui room; those remain explicit runtime-parity follow-ups.
- The script uses Unix PTY APIs and is intended for macOS/Linux release
dogfood. Windows terminal dogfood should be added as a separate platform gate
before claiming native Windows console support.
Expand Down
10 changes: 6 additions & 4 deletions docs/v0.9.4-live-room-dogfood.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,11 @@ That means `#306` proves the real PTY entrypoint, composer, host routing,
explicit role routing, visible unsupported-command guidance, and safe exit. It
does **not** make the unified room the default `cr` path.

The follow-up default-entrypoint decision remains blocked until a later issue
connects real role execution and permission prompts into the same room without
regressing the existing `cr start` behaviour.
Update for `#313` / v0.9.5: the default-entrypoint decision changed after real
user testing showed the dashboard-to-REPL split was the wrong product shape.
Plain `cr` now opens the unified live room by default. `cr start` remains the
explicit legacy/direct REPL escape hatch while deeper role-execution parity is
tracked separately.

## Acceptance Mapping

Expand All @@ -64,7 +66,7 @@ regressing the existing `cr start` behaviour.
| AC-3 explicit `@role` routing | Covered | The script types `@reviewer check explicit routing` and checks explicit `@role` routing status. |
| AC-4 permission prompt path | Deferred with evidence | This document records why real permission prompts remain deferred until runtime parity. |
| AC-5 dashboard not authority | Covered | The script checks structured panes are visible; this document states rendered panes are not completion authority. |
| AC-6 default path follow-up | Preserved | `cr console --live-room` remains non-default. |
| AC-6 default path follow-up | Superseded by #313 | Plain `cr` now opens the unified live room; `cr console --live-room` remains as an explicit alias. |

## Rollback

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.4",
"version": "0.9.5",
"description": "CoreRoom is the Engineering Control Room for AI Agents: host-led, GitHub-gated AI-assisted software engineering control.",
"keywords": [
"cli",
Expand Down
Loading