From 485f1a8d547aa563cfd8de5bf3b62a8ca1948975 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Wed, 29 Apr 2026 21:48:53 +0100 Subject: [PATCH 1/2] chore: ignore .worktrees/ directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9c91a36..900bd1d 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ docs/plans/ .claude/tasks/ docs/ PLAN-*.md +.worktrees/ From 793d447d292b62fb876aeea4230b5788ca5c2d17 Mon Sep 17 00:00:00 2001 From: Jonas Alves Date: Mon, 11 May 2026 15:21:23 +0100 Subject: [PATCH 2/2] feat(experiments): render metric lists as bulleted sections in `get -o rendered` Pull secondary_metrics, guardrail_metrics, and exploratory_metrics out of the key/value table and emit each as its own `##` section with one bullet per metric, so the metric names stay readable instead of being squeezed into a single comma-separated table cell. --- src/commands/experiments/get.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/commands/experiments/get.ts b/src/commands/experiments/get.ts index 70b4aef..5ed60a0 100644 --- a/src/commands/experiments/get.ts +++ b/src/commands/experiments/get.ts @@ -80,10 +80,20 @@ export const getCommand = new Command('get') 'teams', 'tags', ]; + const metricListFields = new Set([ + 'secondary_metrics', + 'guardrail_metrics', + 'exploratory_metrics', + ]); + const deferredMetrics: Array<{ key: string; val: string }> = []; for (const key of tableFields) { const val = summary[key]; if (val !== undefined && val !== '' && String(val).replace(/,\s*/g, '').trim()) { - lines.push(`| **${key}** | ${val} |`); + if (metricListFields.has(key)) { + deferredMetrics.push({ key, val: String(val) }); + } else { + lines.push(`| **${key}** | ${val} |`); + } } } for (const key of Object.keys(summary)) { @@ -94,6 +104,15 @@ export const getCommand = new Command('get') } lines.push(''); + for (const { key, val } of deferredMetrics) { + const label = key.replace(/_/g, ' '); + lines.push(`## ${label.charAt(0).toUpperCase() + label.slice(1)}`); + for (const metric of val.split(', ')) { + lines.push(`- ${metric}`); + } + lines.push(''); + } + if (summary.audience && String(summary.audience) !== '') { lines.push('## Audience'); lines.push('```json');