Started: 2026-01-03 Focus: Read-only operations (list, view, download)
| ID | Severity | Description | Repro Steps | Status |
|---|---|---|---|---|
| BUG-001 | Medium | --limit 0 silently uses default (25) instead of returning 0 or error |
cfl space list --limit 0 |
FIXED |
| BUG-002 | Medium | --limit -1 silently uses default (25) instead of error |
cfl space list --limit -1 |
FIXED |
| BUG-003 | High | JSON output for space list includes trailing message, breaking JSON parsing |
cfl space list -o json | jq . fails |
FIXED |
| BUG-004 | Low | -o yaml silently falls back to table format instead of erroring |
cfl space list -o yaml |
FIXED |
| BUG-005 | Low | Confluence macro parameters leak into markdown output | View page with TOC macro, see "12" artifact | FIXED |
| BUG-006 | CRITICAL | attachment download panics - flag shorthand conflict |
cfl attachment download <id> crashes with -o conflict |
FIXED |
Decisions made during testing:
-
What should
--limit 0do?- DECISION: Return empty list (0 results)
-
What should invalid output format do?
- DECISION: Error with message listing valid formats
-
Confluence macros in markdown output?
- DECISION: Default = strip entirely (clean output). Add
--show-macrosflag to opt-in to placeholders like[TOC],[Info box: ...]
- DECISION: Default = strip entirely (clean output). Add
-
Pagination message "(showing first X results...)"
- DECISION: Send to stderr (keeps stdout clean for piping)
Things where the current behavior might be correct, but we should confirm:
--type GLOBALworks (case insensitive) - API handles this, probably fine- Trailing "(showing first X results...)" message - should this be stderr instead of stdout?
| Test | Result | Notes |
|---|---|---|
| Basic list | PASS | Shows 25 spaces with pagination message |
--limit 0 |
BUG | Returns 25 (default) instead of 0 or error |
--limit -1 |
BUG | Returns 25 (default) instead of error |
--limit 1 |
PASS | Returns 1 result |
--limit abc |
PASS | Good error message |
--type global |
PASS | Filters correctly |
--type personal |
PASS | Filters correctly |
--type GLOBAL |
PASS | Case insensitive (API handles) |
--type invalid |
PASS | Good error from API |
-o json |
BUG | Invalid JSON due to trailing message |
-o plain |
PASS | Tab-separated, but has trailing message |
-o yaml |
BUG | Silently falls back to table |
| Test | Result | Notes |
|---|---|---|
| Basic list with space | PASS | Works correctly |
| Invalid space | PASS | Good error message |
| No space, no default | PASS | Helpful error message |
| Test | Result | Notes |
|---|---|---|
| Valid page ID | PASS | Markdown conversion works |
| Invalid page ID (999999999) | PASS | Good 404 error |
| Non-numeric ID (abc) | PASS | Good 400 error |
| Missing page ID | PASS | "accepts 1 arg(s)" error |
--raw mode |
PASS | Shows Confluence storage format |
-o json |
PASS | Valid JSON (no trailing message!) |
| Confluence macros | BUG-005 | TOC macro params leak through |
| Test | Result | Notes |
|---|---|---|
| List attachments (page with attachments) | PASS | Shows table with ID, title, type, size |
| List attachments (page without) | PASS | "No attachments found." |
| Download attachment | CRASH | BUG-006: Panic due to -o flag conflict |
-
Confluence macros in content:
ac:structured-macro,ac:link,ri:pageelements don't convert to markdown. TOC macro'sminLevel/maxLevelparams appear as orphan numbers ("12"). -
HTML entities:
’(right single quote),–(en dash) appear in storage format, need to verify markdown handles them.
6 bugs found (ALL FIXED):
- 1 CRITICAL (panic crash) - FIXED: Changed
-oshorthand to-Ofor--output-file - 1 HIGH (broken JSON output) - FIXED: Pagination message now goes to stderr
- 2 MEDIUM (silent limit issues) - FIXED: Limit validation (negative = error, 0 = empty list)
- 2 LOW (minor UX issues) - FIXED: Output format validation + macro stripping
Tests passed: ~25 Tests failed: 0 (all bugs fixed)
- Test attachment list/download - DONE (found crash bug)
- Test
--webflag - Find page with code blocks to test syntax highlighting conversion
- Test aliases (ls vs list) - DONE (works)