Surfacing Shipped-But-Undocumented CLI Features
Experiment Overview
| Item |
Details |
| Date |
2026-04-08 |
| Goal |
Document the kintsugi workflow status / workflow run --dashboard progress dashboard in README + readthedocs after the user reported it missing |
| Environment |
KINTSUGI repo, src/kintsugi/dashboard.py, src/kintsugi/cli.py, docs/cli.md, README.md |
| Status |
Success |
Context
The user said "There was a feature to display a dashboard of project processing progress. I don't see it in the repo README or the readthedocs.io."
/advise against Skills_Registry/plugins/kintsugi/ returned 0 hits for "dashboard". A direct Grep dashboard against the repo returned 5 matches:
src/kintsugi/dashboard.py — 1200+ line module with scan_project_progress, render_dashboard, watch_dashboard, estimate_completion
src/kintsugi/cli.py — @workflow.command("status") plus --dashboard flag on workflow run
tests/test_dashboard.py — full test coverage
CLAUDE.md — agent-facing docs mention both entry points
README.md and docs/ returned 0 matches. The feature shipped, was tested, and was documented for Claude — but never advertised to humans. This is a recurring failure mode: a developer adds a CLI command, updates CLAUDE.md so the AI assistant knows about it, and forgets the user-facing surfaces.
Verified Workflow
1. Confirm the feature actually exists
Before assuming it was deleted or renamed, grep for the feature name across the whole repo (not just docs):
# Search code, tests, AND docs
Grep "dashboard|workflow_status" --output_mode files_with_matches
If matches appear only in src/, tests/, and CLAUDE.md but not README.md / docs/, you have a documentation gap, not a missing feature.
2. Read the implementation to extract the public surface
Open the CLI command definition and the underlying module to enumerate:
- All flags and their defaults
- All entry points (e.g., standalone
workflow status AND embedded workflow run --dashboard)
- What each section of the rendered output actually shows
- Which functions are the public API (so docs can name them for code spelunkers)
For the KINTSUGI dashboard:
| Surface |
Where |
| Standalone CLI |
kintsugi workflow status (cli.py workflow_status) |
| Embedded CLI |
kintsugi workflow run --dashboard (cli.py _run_with_dashboard) |
| Public API |
scan_project_progress, render_dashboard, watch_dashboard, estimate_completion in dashboard.py |
| Flags |
--watch/-w, --interval/-i, --all-projects, --json, --no-hardware, --no-estimates, --no-jobs |
3. Match the existing docs style — do not invent a new format
Read a peer doc (e.g., docs/cli.md for a sibling command, README.md for the section conventions) and mirror:
- Heading depth
- Code-block flags
- Whether examples use
/path/to/project or .
- Whether tables describe flags or prose does
- Where the section sits in the table of contents
For KINTSUGI: docs/cli.md already had ### kintsugi workflow run with a code block — the new ### kintsugi workflow status slots in immediately after, mirroring the same shape. README's ## HPC/SLURM Job Submission has a flat list of subsections — add ### Progress Dashboard between "Snakemake Workflow" and "Monitoring and Logs".
4. Update the README in TWO places
A README update isn't done until both:
- The Table of Contents has the new anchor
- The new section exists at the right heading level
Forgetting the TOC entry leaves the section unreachable from the top of the README.
5. Write a retrospective skill
The whole reason this happened is that nobody documented the rule "user-facing CLI commands must land in README + docs/, not just CLAUDE.md." Save it as a skill so /advise finds it next time.
Failed Attempts (Critical)
| Attempt |
Why it Failed |
Lesson Learned |
Searching only docs/ for "dashboard" |
Returned 0 hits; could have falsely concluded the feature was deleted |
Always grep the whole repo before declaring a feature missing — src/, tests/, and CLAUDE.md are the source of truth for "does it exist" |
Documenting only the standalone workflow status command |
Missed the embedded workflow run --dashboard entry point — users would discover only half the feature |
Read cli.py end-to-end for all references to the feature, not just the obvious command |
| Adding a new section to README without updating the Table of Contents |
Section was unreachable from the TOC anchor list at the top |
A README edit isn't done until the TOC entry exists too |
| Treating CLAUDE.md as user documentation |
CLAUDE.md is agent-facing context, not user-facing docs — users don't read it |
User-facing CLI commands live in README.md + docs/cli.md; CLAUDE.md is a separate, agent-only surface |
| Inventing a new doc format for the new section |
Inconsistency makes the docs feel unmaintained |
Mirror the heading depth, table style, and example format of the closest peer command in the same file |
Final Parameters
| Parameter |
Value |
Rationale |
| Discovery grep scope |
Whole repo (src/, tests/, CLAUDE.md, README.md, docs/) |
Lets you distinguish "missing" from "undocumented" |
| README placement |
New ### Progress Dashboard subsection inside ## HPC/SLURM Job Submission |
Adjacent to the workflow commands users already know about |
| TOC update |
Mandatory in the same edit as the section |
Otherwise the section is unreachable |
| docs/ placement |
New ### kintsugi workflow status block in docs/cli.md, plus a --dashboard example added to ### kintsugi workflow run |
Both entry points need a home |
| Cross-reference |
Each new section names the source files (src/kintsugi/dashboard.py, public function names) |
Lets future maintainers find the implementation |
Key Insights
- A feature can ship, be tested, and be documented for the AI assistant without ever reaching users. CLAUDE.md is agent-facing context — it does not count as user documentation.
- Two entry points are easy to miss. A
workflow run --dashboard flag is structurally separate from a workflow status subcommand. Always read the CLI module end-to-end for references to the feature name.
- Grepping
docs/ is not enough to confirm absence. Grep the whole repo — if matches appear in src/ and tests/ but not README.md/docs/, you have a documentation gap, not a deleted feature.
- README and docs are separate surfaces with different jobs. README is the entry point for new users (short, high-signal);
docs/cli.md is the reference (exhaustive flag list). Both need updates — neither is sufficient alone.
- The TOC is part of the section. A new heading without a matching TOC anchor is half-done.
- Always retrospective the gap, not just the fix. The next missing feature will be found the same way; saving a skill makes the discovery process repeatable.
Results
| Surface |
Before |
After |
README.md mentions of "dashboard" |
0 |
9 (new section + TOC entry) |
docs/cli.md mentions of "dashboard" |
0 |
7 (workflow status block + workflow run --dashboard example) |
CLAUDE.md mentions |
5 (already documented for agent) |
unchanged |
| Source/tests |
src/kintsugi/dashboard.py, tests/test_dashboard.py |
unchanged (already shipped) |
References
src/kintsugi/dashboard.py — scan_project_progress, render_dashboard, watch_dashboard, estimate_completion
src/kintsugi/cli.py:1898 — _run_with_dashboard() (embedded variant)
src/kintsugi/cli.py:2188 — @workflow.command("status") (standalone variant)
tests/test_dashboard.py — coverage
1---2name: dashboard-feature-discovery3description: Surface a shipped-but-undocumented CLI feature in user-facing docs. Trigger: user reports a known feature missing from README/readthedocs even though the CLI command exists.4---5
6# Surfacing Shipped-But-Undocumented CLI Features
7
8## Experiment Overview
9
10| Item | Details |
11|------|---------|
12| **Date** | 2026-04-08 |
13| **Goal** | Document the `kintsugi workflow status` / `workflow run --dashboard` progress dashboard in README + readthedocs after the user reported it missing |
14| **Environment** | KINTSUGI repo, `src/kintsugi/dashboard.py`, `src/kintsugi/cli.py`, `docs/cli.md`, `README.md` |
15| **Status** | Success |
16
17## Context
18
19The user said "There was a feature to display a dashboard of project processing progress. I don't see it in the repo README or the readthedocs.io."
20
21`/advise` against `Skills_Registry/plugins/kintsugi/` returned 0 hits for "dashboard". A direct `Grep dashboard` against the repo returned **5** matches:
22
23- `src/kintsugi/dashboard.py` — 1200+ line module with `scan_project_progress`, `render_dashboard`, `watch_dashboard`, `estimate_completion`
24- `src/kintsugi/cli.py` — `@workflow.command("status")` plus `--dashboard` flag on `workflow run`
25- `tests/test_dashboard.py` — full test coverage
26- `CLAUDE.md` — agent-facing docs mention both entry points
27
28`README.md` and `docs/` returned **0** matches. The feature shipped, was tested, and was documented for Claude — but never advertised to humans. This is a recurring failure mode: a developer adds a CLI command, updates `CLAUDE.md` so the AI assistant knows about it, and forgets the user-facing surfaces.
29
30## Verified Workflow
31
32### 1. Confirm the feature actually exists
33
34Before assuming it was deleted or renamed, grep for the feature name across the *whole* repo (not just docs):
35
36```bash
37# Search code, tests, AND docs
38Grep "dashboard|workflow_status" --output_mode files_with_matches
39```
40
41If matches appear only in `src/`, `tests/`, and `CLAUDE.md` but not `README.md` / `docs/`, you have a documentation gap, not a missing feature.
42
43### 2. Read the implementation to extract the public surface
44
45Open the CLI command definition and the underlying module to enumerate:
46
47- All flags and their defaults
48- All entry points (e.g., standalone `workflow status` AND embedded `workflow run --dashboard`)
49- What each section of the rendered output actually shows
50- Which functions are the public API (so docs can name them for code spelunkers)
51
52For the KINTSUGI dashboard:
53
54| Surface | Where |
55|---------|-------|
56| Standalone CLI | `kintsugi workflow status` (`cli.py` `workflow_status`) |
57| Embedded CLI | `kintsugi workflow run --dashboard` (`cli.py` `_run_with_dashboard`) |
58| Public API | `scan_project_progress`, `render_dashboard`, `watch_dashboard`, `estimate_completion` in `dashboard.py` |
59| Flags | `--watch/-w`, `--interval/-i`, `--all-projects`, `--json`, `--no-hardware`, `--no-estimates`, `--no-jobs` |
60
61### 3. Match the existing docs style — do not invent a new format
62
63Read a peer doc (e.g., `docs/cli.md` for a sibling command, `README.md` for the section conventions) and mirror:
64
65- Heading depth
66- Code-block flags
67- Whether examples use `/path/to/project` or `.`
68- Whether tables describe flags or prose does
69- Where the section sits in the table of contents
70
71For KINTSUGI: `docs/cli.md` already had `### kintsugi workflow run` with a code block — the new `### kintsugi workflow status` slots in immediately after, mirroring the same shape. README's `## HPC/SLURM Job Submission` has a flat list of subsections — add `### Progress Dashboard` between "Snakemake Workflow" and "Monitoring and Logs".
72
73### 4. Update the README in TWO places
74
75A README update isn't done until both:
76
77- The **Table of Contents** has the new anchor
78- The new section exists at the right heading level
79
80Forgetting the TOC entry leaves the section unreachable from the top of the README.
81
82### 5. Write a retrospective skill
83
84The whole reason this happened is that nobody documented the rule "user-facing CLI commands must land in README + docs/, not just CLAUDE.md." Save it as a skill so `/advise` finds it next time.
85
86## Failed Attempts (Critical)
87
88| Attempt | Why it Failed | Lesson Learned |
89|---------|---------------|----------------|
90| Searching only `docs/` for "dashboard" | Returned 0 hits; could have falsely concluded the feature was deleted | Always grep the whole repo before declaring a feature missing — `src/`, `tests/`, and `CLAUDE.md` are the source of truth for "does it exist" |
91| Documenting only the standalone `workflow status` command | Missed the embedded `workflow run --dashboard` entry point — users would discover only half the feature | Read `cli.py` end-to-end for all references to the feature, not just the obvious command |
92| Adding a new section to README without updating the Table of Contents | Section was unreachable from the TOC anchor list at the top | A README edit isn't done until the TOC entry exists too |
93| Treating CLAUDE.md as user documentation | CLAUDE.md is agent-facing context, not user-facing docs — users don't read it | User-facing CLI commands live in **README.md + docs/cli.md**; CLAUDE.md is a separate, agent-only surface |
94| Inventing a new doc format for the new section | Inconsistency makes the docs feel unmaintained | Mirror the heading depth, table style, and example format of the closest peer command in the same file |
95
96## Final Parameters
97
98| Parameter | Value | Rationale |
99|-----------|-------|-----------|
100| Discovery grep scope | Whole repo (`src/`, `tests/`, `CLAUDE.md`, `README.md`, `docs/`) | Lets you distinguish "missing" from "undocumented" |
101| README placement | New `### Progress Dashboard` subsection inside `## HPC/SLURM Job Submission` | Adjacent to the workflow commands users already know about |
102| TOC update | Mandatory in the same edit as the section | Otherwise the section is unreachable |
103| docs/ placement | New `### kintsugi workflow status` block in `docs/cli.md`, plus a `--dashboard` example added to `### kintsugi workflow run` | Both entry points need a home |
104| Cross-reference | Each new section names the source files (`src/kintsugi/dashboard.py`, public function names) | Lets future maintainers find the implementation |
105
106## Key Insights
107
108- **A feature can ship, be tested, and be documented for the AI assistant without ever reaching users.** CLAUDE.md is agent-facing context — it does *not* count as user documentation.
109- **Two entry points are easy to miss.** A `workflow run --dashboard` flag is structurally separate from a `workflow status` subcommand. Always read the CLI module end-to-end for references to the feature name.
110- **Grepping `docs/` is not enough to confirm absence.** Grep the whole repo — if matches appear in `src/` and `tests/` but not `README.md`/`docs/`, you have a documentation gap, not a deleted feature.
111- **README and docs are separate surfaces with different jobs.** README is the entry point for new users (short, high-signal); `docs/cli.md` is the reference (exhaustive flag list). Both need updates — neither is sufficient alone.
112- **The TOC is part of the section.** A new heading without a matching TOC anchor is half-done.
113- **Always retrospective the gap, not just the fix.** The next missing feature will be found the same way; saving a skill makes the discovery process repeatable.
114
115## Results
116
117| Surface | Before | After |
118|---------|--------|-------|
119| `README.md` mentions of "dashboard" | 0 | 9 (new section + TOC entry) |
120| `docs/cli.md` mentions of "dashboard" | 0 | 7 (`workflow status` block + `workflow run --dashboard` example) |
121| `CLAUDE.md` mentions | 5 (already documented for agent) | unchanged |
122| Source/tests | `src/kintsugi/dashboard.py`, `tests/test_dashboard.py` | unchanged (already shipped) |
123
124## References
125
126- `src/kintsugi/dashboard.py` — `scan_project_progress`, `render_dashboard`, `watch_dashboard`, `estimate_completion`
127- `src/kintsugi/cli.py:1898` — `_run_with_dashboard()` (embedded variant)
128- `src/kintsugi/cli.py:2188` — `@workflow.command("status")` (standalone variant)
129- `tests/test_dashboard.py` — coverage