feat(lanes): badge codex lanes and document the lane tool

This commit is contained in:
2026-08-27 10:54:16 +07:00
parent 0d53603d9e
commit 24de68cfe1
5 changed files with 82 additions and 11 deletions
+11 -4
View File
@@ -381,11 +381,18 @@ export default function LaneCard({
</div>
)}
{lane.ci_status && (
{(lane.ci_status || lane.tool === "codex") && (
<div className="mb-2 flex flex-wrap items-center gap-1.5 text-[11px]">
<span className="rounded bg-surface-2 px-1.5 py-0.5 text-fg-secondary">
CI {lane.ci_status}
</span>
{lane.ci_status && (
<span className="rounded bg-surface-2 px-1.5 py-0.5 text-fg-secondary">
CI {lane.ci_status}
</span>
)}
{lane.tool === "codex" && (
<span className="rounded border border-border bg-surface-2 px-1.5 py-0.5 text-[10px] text-fg-muted">
Codex
</span>
)}
</div>
)}
@@ -69,6 +69,11 @@ export default function LaneStripCard({
<span className="truncate rounded bg-surface-4 px-1.5 py-0.5 text-fg-secondary">
{lane.stage}
</span>
{lane.tool === "codex" && (
<span className="shrink-0 rounded border border-border bg-surface-2 px-1.5 py-0.5 text-[10px] text-fg-muted">
Codex
</span>
)}
{detectionLeads(lane) && (
<span
data-testid={`lane-tile-auto-${lane.id}`}
@@ -58,6 +58,7 @@ function makeLane(overrides: Partial<Lane> = {}): Lane {
cwd: "/work/demo",
branch: "lane/demo",
kind: "adopted",
tool: "claude",
source_repo: null,
pipeline: "default",
session_id: null,
@@ -85,6 +86,17 @@ function makeLane(overrides: Partial<Lane> = {}): Lane {
} as Lane;
}
describe("LaneCard lane tool badge", () => {
it("badges a codex lane and leaves a claude lane unbadged", () => {
const { rerender } = render(
<LaneCard {...{ lane: makeLane({ tool: "codex" }), onAction: vi.fn() }} />
);
expect(screen.getByText("Codex")).toBeInTheDocument();
rerender(<LaneCard {...{ lane: makeLane({ tool: "claude" }), onAction: vi.fn() }} />);
expect(screen.queryByText("Codex")).not.toBeInTheDocument();
});
});
describe("LaneCard child worktrees", () => {
it("lists worktrees provisioned from this lane and jumps to one on click", async () => {
const onSelectLane = vi.fn();