feat(FN-2640): align planning labels across agent log and tests

- Rename Planning/Triage label to Planning in Agent Log model metadata and related assertions
- Map triage agent badge display name to Plan while preserving existing labels for other agent roles
- Update TaskDetailModal and AgentLogViewer tests to match the revised planning terminology
- Stabilize dashboard TUI QR payload test by waiting for label and payload text separately with explicit timeouts
This commit is contained in:
Fusion
2026-04-27 00:09:53 -07:00
committed by gsxdsm
parent 1159a6de22
commit 70155b0f1d
4 changed files with 18 additions and 13 deletions

View File

@@ -469,7 +469,8 @@ describe("Settings view", () => {
await waitForFrameContains(lastFrame, "Short-lived expires:");
stdin.write("K");
await waitForFrameContains(lastFrame, "QR text payload: ASCII-QR-PAYLOAD");
await waitForFrameContains(lastFrame, "QR text payload:", 6000);
await waitForFrameContains(lastFrame, "ASCII-QR-PAYLOAD", 6000);
unmount();
});

View File

@@ -51,6 +51,10 @@ const markdownComponents: Components = {
const BOTTOM_FOLLOW_THRESHOLD_PX = 50;
const AGENT_DISPLAY_NAMES: Record<string, string> = {
triage: "Plan",
};
function isNearBottom(container: HTMLDivElement): boolean {
return container.scrollHeight - (container.scrollTop + container.clientHeight) <= BOTTOM_FOLLOW_THRESHOLD_PX;
}
@@ -341,7 +345,7 @@ export function AgentLogViewer({
)}
</div>
<div className="agent-log-model-group">
<span className="agent-log-model-label">Planning/Triage:</span>
<span className="agent-log-model-label">Planning:</span>
{hasPlanningOverride ? (
<span className="agent-log-model-value">
<ProviderIcon provider={planningModel.provider!} size="sm" />
@@ -403,7 +407,7 @@ export function AgentLogViewer({
const agentBadge = showBadge ? (
<span className="agent-log-badge-row">
<span className="agent-log-agent-badge">[{entry.agent}]</span>
<span className="agent-log-agent-badge">[{AGENT_DISPLAY_NAMES[entry.agent!] ?? entry.agent}]</span>
{timestampSpan}
</span>
) : null;

View File

@@ -221,7 +221,7 @@ describe("AgentLogViewer", () => {
const { container } = render(<AgentLogViewer entries={entries} loading={false} />);
const badges = container.querySelectorAll(".agent-log-agent-badge");
expect(badges).toHaveLength(2);
expect(badges[0].textContent).toBe("[triage]");
expect(badges[0].textContent).toBe("[Plan]");
expect(badges[1].textContent).toBe("[executor]");
});
@@ -248,7 +248,7 @@ describe("AgentLogViewer", () => {
const badges = container.querySelectorAll(".agent-log-agent-badge");
expect(badges).toHaveLength(1);
// In chronological order, the oldest (hmm) gets the badge
expect(badges[0].textContent).toBe("[triage]");
expect(badges[0].textContent).toBe("[Plan]");
});
it("always shows badge on tool entries regardless of surrounding entries", () => {
@@ -422,10 +422,10 @@ describe("AgentLogViewer", () => {
const header = container.querySelector("[data-testid='agent-log-model-header']");
expect(header).toBeTruthy();
expect(container.querySelector('[data-provider="anthropic"]')).toBeTruthy();
expect(header!.textContent).not.toContain("Planning/Triage:");
expect(header!.textContent).not.toContain("Planning:");
fireEvent.click(screen.getByTestId("agent-log-model-expand"));
expect(header!.textContent).toContain("Planning/Triage:");
expect(header!.textContent).toContain("Planning:");
expect(header!.textContent).toContain("anthropic/claude-opus-4");
});
@@ -721,7 +721,7 @@ describe("AgentLogViewer", () => {
expect(badges).toHaveLength(3);
expect(timestamps).toHaveLength(3);
expect(badges.map((badge) => badge.textContent)).toEqual(["[triage]", "[executor]", "[reviewer]"]);
expect(badges.map((badge) => badge.textContent)).toEqual(["[Plan]", "[executor]", "[reviewer]"]);
});
it("badge container includes both badge text and timestamp text", () => {

View File

@@ -1982,7 +1982,7 @@ describe("TaskDetailModal", () => {
const header = await openAgentLogAndExpandModelDetails(container);
// Planning should show the runtime triage marker, not settings default
expect(header.textContent).toContain("Planning/Triage:");
expect(header.textContent).toContain("Planning:");
expect(header.textContent).toContain("google/gemini-pro");
// Executor/Validator should still show settings default
expect(header.textContent).toContain("anthropic/claude-sonnet-4-5");
@@ -2023,7 +2023,7 @@ describe("TaskDetailModal", () => {
const header = await openAgentLogAndExpandModelDetails(container);
// Planning should use planningProvider/planningModelId from settings
expect(header.textContent).toContain("Planning/Triage:");
expect(header.textContent).toContain("Planning:");
expect(header.textContent).toContain("openai/gpt-4o");
// Executor/Validator should show default
expect(header.textContent).toContain("anthropic/claude-sonnet-4-5");
@@ -2039,7 +2039,7 @@ describe("TaskDetailModal", () => {
const header = await openAgentLogAndExpandModelDetails(container);
expect(header.textContent).toContain("Planning/Triage:");
expect(header.textContent).toContain("Planning:");
expect(header.textContent).toContain("anthropic/claude-sonnet-4-5");
// Planning falls back to default - same as executor/validator
@@ -2053,7 +2053,7 @@ describe("TaskDetailModal", () => {
});
const header = await openAgentLogAndExpandModelDetails(container);
expect(header.textContent).toContain("Planning/Triage:");
expect(header.textContent).toContain("Planning:");
const defaultBadges = header.querySelectorAll(".model-badge-default");
// 3 default badges: executor, validator, planning
expect(defaultBadges).toHaveLength(3);
@@ -2097,7 +2097,7 @@ describe("TaskDetailModal", () => {
const header = await openAgentLogAndExpandModelDetails(container);
// Per-task override should take precedence over settings
expect(header.textContent).toContain("Planning/Triage:");
expect(header.textContent).toContain("Planning:");
expect(header.textContent).toContain("google/gemini-2.5-pro");
// Should NOT show the settings planning model
expect(header.textContent).not.toContain("openai/gpt-4o");