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
43 changes: 42 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,19 @@ matching `## [X.Y.Z]` section (plus install instructions). Do not maintain
parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
`## [Unreleased]` to `## [X.Y.Z] - YYYY-MM-DD`, then run the release script.

## [Unreleased]
## [0.3.23] - 2026-09-12

### Added

- Malformed plugin manifests now surface a warning instead of loading
silently; a missing manifest stays silent. Swallowed plugin-load errors are
logged for diagnosis.
- Expanded coalesced transcript lanes show a per-call subject, so grouped tool
rows stay attributable to the file or pattern each call touched.
- Greybeard review checklist restored in Corbits idiom: verdict-scoped checks
in checklist order.
- Gaasbot CTO voice restored from the GaaS original; still advisory-only, not
a gate.

### Changed

Expand All @@ -23,13 +35,42 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
- Headless `corbits exec` unmounts `ask_operator` when stdin/stdout are not
TTYs instead of advertising a cancel stub. TUI Skywalker still mounts it;
TTY exec still prompts on stdin.
- Provider `contextWindow` settings now drive occupancy, compaction, and the
status-bar meter. The same setting no longer changes the per-request output
budget, which keeps the shared default.
- Sub-agent leaf reports always render all four headings (Summary, Findings,
Blockers, Paths), with `None.` under headings that have nothing to report.
- A repo-committed `.corbits/permissions.json` no longer auto-allows tool
calls. Each grant needs a one-time operator confirmation per project, and
the first encounter surfaces what the file would grant.

### Removed

- Profile files no longer accept a `workflow` field. Workflows start only from
slash commands; a leftover key is rejected on load rather than ignored. The
`--no-workflow` CLI flag is unchanged.

### Fixed

- A second same-category credential error in one session no longer fails the
session on a duplicate error record.
- A model tool call truncated mid-JSON now fails the turn with an actionable,
retryable error instead of dispatching garbled arguments.
- An unspaced `&` (`a &b`) now splits into two approval segments, so a
standing grant for the head command no longer covers a hidden payload.
Redirects (`2>&1`, `&>`, `<&-`) are unaffected.
- Runs interrupted while waiting for admission settle through the normal
terminal path instead of stranding.
- Internal agent traffic (occupancy wakes and similar system messages) no
longer paints as operator rows in the transcript.
- Approval overlays on short terminals keep a closed border and at least one
visible choice instead of collapsing below their minimum size.
- The MCP authorization marker survives a browser-timeout re-auth cycle
instead of being dropped.
- A missing or unreadable agent-plugin prompt file now surfaces a warning
naming the plugin, agent, and path instead of silently loading the profile
without its system prompt.

## [0.3.22] - 2026-09-11

### Added
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@corbits/code",
"version": "0.3.22",
"version": "0.3.23",
"description": "Single-process coding agent CLI built on the Interchange runtime (Bun + TypeScript)",
"private": true,
"license": "SEE LICENSE IN LICENSE.md",
Expand Down
4 changes: 3 additions & 1 deletion src/agent/directors/greybeard/package.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ describe("greybeardPackage", () => {
expect(checklistIdx).toBeGreaterThan(-1);
const checklist = p.slice(checklistIdx);
const claimIdx = checklist.search(/architectural claim/);
const ownershipIdx = checklist.search(/constraint ownership|owns constraints/i);
const ownershipIdx = checklist.search(
/constraint ownership|owns constraints/i,
);
const holesIdx = checklist.search(/anti-patterns/);
const risksIdx = checklist.search(/Rank risks/);
const verdictIdx = checklist.search(/hold \/ revise \/ block/);
Expand Down
7 changes: 6 additions & 1 deletion src/subagent/spawn-agent-worktree.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -524,7 +524,12 @@ describe("spawn_agent worktree isolation", () => {
expect(
sessions
.list()
.every((s) => !isLiveWaitStatus(projectWaitStatus(s.lifecycle, s.runInFlight === true))),
.every(
(s) =>
!isLiveWaitStatus(
projectWaitStatus(s.lifecycle, s.runInFlight === true),
),
),
).toBe(true);
await waitFor(() => events.some((event) => event.event === "subagent_end"));
const ends = events.filter((event) => event.event === "subagent_end");
Expand Down
Loading