Modified the agents plan tree command to display full 26-character ULIDs
instead of truncating them to 8 characters. This enables users to copy
decision IDs directly from the tree output and use them in follow-up
CLI commands without manual ID reconstruction.
Key changes:
- Removed [:8] truncation from all decision ID displays (table, tree)
- Updated table column width from 8 to 26 characters for full ULID display
- Removed [...] truncation from plan ID in tree title
- Added 'Decision IDs (for correction)' section listing all decision ULIDs
with human-readable labels for easy reference
- Supports both rich (with panel) and plain text formatting
- Helper function _get_decision_label() generates appropriate labels
based on decision type
- Updated CHANGELOG.md per CONTRIBUTING.md requirements
ISSUES CLOSED: #5825
The format_output() function returned a string that callers passed to
Rich console.print(), which wraps long lines at terminal width. This
injected literal newline characters into JSON string values (e.g. in
definition_of_done fields), producing invalid JSON that downstream
parsers could not decode (JSONDecodeError: Invalid control character).
For machine-readable formats (json, yaml, plain), format_output() now
writes the rendered output directly to sys.stdout and returns an empty
string. This preserves the exact serialization from json.dumps/
yaml.dump without Rich text processing artifacts.
Refs: #746
- Remove global _PLAN_ID; generate per-step plan IDs on context (#8)
- Fix sham orphan test; build children_map from all decisions (#1)
- Delete dead constants; use _PATCH_RESUME_SVC_MOD in resume steps (#2)
- Remove dead _resolve_active_plan_id mock from _invoke_correct (#5)
- Make --mode/--guidance required Typer options (#3)
- Show alternatives by default; remove --show-alternatives flag (#4)
- Strengthen weak assertions on depth-limit and show-superseded (#6)
- Add negative assertions for error type conflation (#7)
ISSUES CLOSED: #174
- Add justification to type: ignore comments in build_decision_tree
- Remove Any from step file signatures, use object instead
- Strengthen non-existent decision test to verify ID exclusion
- Fix O(n²×d) depth computation in table view with dict lookup
- Fix orphan root detection in rich-view to match BFS logic
- Add type annotations to Robot helper dispatch dict
- Deduplicate import json in explain_decision_cmd
ISSUES CLOSED: #174
Add `plan explain` and `plan tree` CLI commands that format decision
trees in json/yaml/table/rich formats. Flags control views for
superseded decisions, context snapshots, and reasoning details.
- plan explain <decision_id>: renders a single decision with optional
--show-context, --show-reasoning, --show-alternatives flags
- plan tree <plan_id>: renders full decision tree with optional
--show-superseded and --depth flags
- BFS tree building uses collections.deque (no list.pop(0))
- Behave BDD scenarios (14 scenarios, 54 steps)
- Robot Framework smoke tests with helper script
- ASV benchmarks for explain formatting and tree operations
- Updated docs/reference/plan_cli.md and CHANGELOG.md
ISSUES CLOSED: #174