freemo
4e5e0624fd
feat(cli): implement RendererRegistry and ElementRenderer architecture per spec
...
Implement the three missing architectural components of the Output Rendering
Framework as specified in issue #917 :
1. RendererRegistry (spec §27249-27350): Central registry for format
(MaterializationStrategy, ElementRenderer) pairs with register(),
resolve(), available_formats(), is_registered() methods and a
FormatRegistration model. Built-in formats pre-registered in
default_registry. Replaces hardcoded if/elif chains for format
resolution.
2. ElementRenderer Protocol (spec §26557-26654): Per-element render
methods (render_panel, render_table, render_tree, etc.) plus
serialize() and can_render(). Six concrete implementations:
PlainElementRenderer, ColorElementRenderer, TableElementRenderer,
RichElementRenderer, JsonElementRenderer, YamlElementRenderer.
Each format now has a paired (Strategy, Renderer).
3. TerminalCapabilities (spec §27264-27301): Extended from 4 fields to
all 11 spec-defined fields: width, height, supports_256_color,
supports_truecolor, supports_unicode, supports_alternate_screen,
no_color, plus renames supports_cursor → supports_cursor_movement,
term → term_program. Backward-compatible properties preserved.
Additional fixes:
- ColumnDef serialises column type as 'type' (not 'col_type') per spec
§26199, with alias for backward compatibility
- YAML output uses sort_keys=True per spec §27168
- Progress elements omitted from JSON/YAML per spec §26936
- MaterializationStrategy.bind(renderer, terminal_caps) method added
to protocol and all strategy implementations (SD-19 resolved)
- Updated SD documentation in __init__.py
ISSUES CLOSED : #917
2026-06-02 16:48:22 -04:00
..
2026-05-13 23:39:15 +00:00
2026-04-10 05:21:24 +00:00
2026-04-10 05:21:24 +00:00
2026-03-12 14:38:57 +00:00
2026-04-08 11:02:14 +00:00
2026-04-03 00:29:46 +00:00
2026-04-26 12:35:39 +00:00
2026-03-10 15:09:03 +00:00
2026-04-05 21:26:33 +00:00
2026-04-08 11:02:14 +00:00
2026-05-14 08:10:58 +00:00
2026-04-05 21:19:40 +00:00
2026-04-08 11:02:14 +00:00
2026-05-30 00:36:20 -04:00
2026-05-09 23:13:33 +01:00
2026-04-08 11:02:14 +00:00
2026-05-05 02:01:49 +00:00
2026-04-02 23:31:25 +00:00
2026-03-16 01:45:50 +00:00
2026-04-17 16:28:45 +08:00
2026-04-14 14:50:55 +00:00
2026-05-06 01:07:15 +00:00
2026-03-26 13:41:31 +00:00
2026-03-18 06:58:39 +00:00
2026-04-02 16:58:36 +00:00
2026-05-29 16:36:39 -04:00
2026-04-14 14:50:55 +00:00
2026-04-08 11:02:14 +00:00
2026-04-15 03:21:05 +00:00
2026-04-14 14:50:55 +00:00
2026-03-31 23:57:39 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-03-18 16:51:14 +00:00
2026-03-21 00:29:49 +00:00
2026-03-10 12:17:51 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-08 11:02:14 +00:00
2026-05-30 11:09:06 -04:00
2026-05-12 01:05:10 +00:00
2026-04-17 17:40:00 +00:00
2026-03-16 01:45:50 +00:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-05-05 02:01:49 +00:00
2026-04-14 14:50:55 +00:00
2026-03-17 13:14:37 -04:00
2026-04-14 14:50:55 +00:00
2026-03-26 18:10:14 +00:00
2026-05-01 00:59:02 +00:00
2026-03-07 11:49:14 -05:00
2026-04-14 14:50:55 +00:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-03-27 05:58:35 +00:00
2026-04-08 11:02:14 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-05 20:56:32 +00:00
2026-03-25 17:49:06 +00:00
2026-05-05 02:01:49 +00:00
2026-03-29 16:23:04 +01:00
2026-03-23 18:41:53 +00:00
2026-03-10 14:18:04 -04:00
2026-04-14 14:50:55 +00:00
2026-06-01 22:11:54 -04:00
2026-03-16 22:50:27 +00:00
2026-05-30 00:09:20 -04:00
2026-03-10 19:29:27 +00:00
2026-03-16 01:45:50 +00:00
2026-03-16 01:45:50 +00:00
2026-03-19 07:53:43 +00:00
2026-03-16 01:45:50 +00:00
2026-04-05 18:08:56 +00:00
2026-03-10 12:17:51 +00:00
2026-03-16 01:45:50 +00:00
2026-04-03 02:01:45 +00:00
2026-05-29 07:21:08 -04:00
2026-03-21 01:40:58 +00:00
2026-03-26 11:52:52 +00:00
2026-03-24 22:01:48 +00:00
2026-04-14 14:50:55 +00:00
2026-04-08 11:02:14 +00:00
2026-05-11 04:39:29 +00:00
2026-04-05 17:53:56 +00:00
2026-04-26 12:35:39 +00:00
2026-04-27 07:33:18 +00:00
2026-04-08 11:02:14 +00:00
2026-04-05 21:19:40 +00:00
2026-04-27 05:00:54 +00:00
2026-04-05 21:19:40 +00:00
2026-05-30 00:36:20 -04:00
2026-04-05 06:55:19 +00:00
2026-04-02 23:31:25 +00:00
2026-04-17 16:28:45 +08:00
2026-04-17 16:28:45 +08:00
2026-04-09 06:11:39 +00:00
2026-05-06 01:07:15 +00:00
2026-05-18 06:05:54 +00:00
2026-03-18 06:58:39 +00:00
2026-05-19 12:43:34 +00:00
2026-05-29 16:36:39 -04:00
2026-05-30 13:59:48 -04:00
2026-03-30 13:18:07 +01:00
2026-05-07 18:09:26 +08:00
2026-03-21 05:30:01 +00:00
2026-03-18 16:51:14 +00:00
2026-03-18 16:51:14 +00:00
2026-05-30 00:09:20 -04:00
2026-05-30 11:09:06 -04:00
2026-05-12 01:05:10 +00:00
2026-04-03 20:50:17 +00:00
2026-04-02 19:09:04 +00:00
2026-06-02 07:37:13 -04:00
2026-03-07 11:49:14 -05:00
2026-04-04 20:38:16 +00:00
2026-03-30 21:48:01 +00:00
2026-03-31 23:57:39 +00:00
2026-04-05 20:56:32 +00:00
2026-03-25 17:49:06 +00:00
2026-04-12 16:43:30 +00:00
2026-03-29 16:23:04 +01:00
2026-04-02 16:59:40 +00:00
2026-03-10 14:18:04 -04:00
2026-04-05 04:09:27 +00:00
2026-03-16 22:50:27 +00:00
2026-03-10 19:29:27 +00:00
2026-03-19 07:53:43 +00:00
2026-04-08 11:02:14 +00:00
2026-03-10 12:17:51 +00:00
2026-04-03 02:01:45 +00:00
2026-03-26 21:42:37 +00:00
2026-05-29 07:21:08 -04:00
2026-05-19 12:43:34 +00:00
2026-05-19 12:43:34 +00:00
2026-03-26 11:52:52 +00:00
2026-05-02 01:36:45 +00:00
2026-03-24 22:01:48 +00:00
2026-05-14 22:57:11 +00:00
2026-06-02 05:14:43 -04:00
2026-05-19 12:43:34 +00:00
2026-03-27 23:53:22 +00:00
2026-03-30 11:51:27 +00:00
2026-03-24 13:01:12 +00:00
2026-03-24 13:01:12 +00:00
2026-05-01 00:59:02 +00:00
2026-04-02 19:09:04 +00:00
2026-05-01 00:59:02 +00:00
2026-03-30 04:45:56 +00:00
2026-05-16 04:14:17 +00:00
2026-03-30 04:45:56 +00:00
2026-03-15 20:50:02 +00:00
2026-05-01 00:59:02 +00:00
2026-03-13 14:03:37 +08:00
2026-03-13 14:03:37 +08:00
2026-03-13 14:03:37 +08:00
2026-03-13 14:03:37 +08:00
2026-05-01 00:59:02 +00:00
2026-05-28 17:35:08 -04:00
2026-05-01 00:59:02 +00:00
2026-05-01 00:59:02 +00:00
2026-04-04 20:38:16 +00:00
2026-04-02 19:09:04 +00:00
2026-03-10 17:23:05 +00:00
2026-03-30 17:48:48 +00:00
2026-03-21 03:14:40 +00:00
2026-03-23 23:33:33 +00:00
2026-04-22 03:26:49 +00:00
2026-03-31 01:49:16 +00:00
2026-03-30 17:06:49 -04:00
2026-04-17 08:34:33 +00:00
2026-05-19 12:43:34 +00:00
2026-05-19 12:43:34 +00:00
2026-03-23 23:33:33 +00:00
2026-05-14 22:57:11 +00:00
2026-03-18 06:58:39 +00:00
2026-05-19 12:43:34 +00:00
2026-04-09 06:11:39 +00:00
2026-03-18 08:13:56 +00:00
2026-03-30 23:40:36 +01:00
2026-04-15 06:37:18 +00:00
2026-03-08 21:53:21 -04:00
2026-05-31 20:45:10 -04:00
2026-03-30 14:33:28 +00:00
2026-03-08 22:19:40 +00:00
2026-03-20 22:28:32 +00:00
2026-03-09 23:55:33 +00:00
2026-04-01 13:02:24 +00:00
2026-03-24 13:53:41 +00:00
2026-03-27 10:50:15 +00:00
2026-03-30 13:44:54 +00:00
2026-03-10 03:39:32 +00:00
2026-05-30 15:43:56 -04:00
2026-03-28 00:57:51 +00:00
2026-03-29 18:57:15 +01:00
2026-03-21 04:46:45 +00:00
2026-03-21 04:46:45 +00:00
2026-04-21 16:53:08 +00:00
2026-03-30 13:18:07 +01:00
2026-05-29 07:21:08 -04:00
2026-03-12 14:38:57 +00:00
2026-05-11 04:39:29 +00:00
2026-05-11 04:39:29 +00:00
2026-05-30 08:29:22 -04:00
2026-03-26 13:41:31 +00:00
2026-03-08 02:57:44 +00:00
2026-03-19 09:30:35 +00:00
2026-04-17 11:46:38 +00:00
2026-04-14 19:26:49 +00:00
2026-03-18 17:07:07 +00:00
2026-05-30 02:07:41 -04:00
2026-04-30 10:56:21 +00:00
2026-04-30 10:56:21 +00:00
2026-05-29 15:26:47 -04:00
2026-04-02 16:50:50 +00:00
2026-03-16 01:45:50 +00:00
2026-03-19 22:24:41 +00:00
2026-03-28 02:14:55 +00:00
2026-03-12 20:42:14 +00:00
2026-04-10 05:21:24 +00:00
2026-03-19 06:31:20 +00:00
2026-03-26 02:06:28 +00:00
2026-04-02 19:09:04 +00:00
2026-04-01 00:40:46 +00:00
2026-03-30 17:06:49 -04:00
2026-03-19 06:41:26 +00:00
2026-05-31 15:00:33 -04:00
2026-03-11 02:42:13 +00:00
2026-03-11 02:42:13 +00:00
2026-03-11 02:42:13 +00:00
2026-03-11 22:50:37 +00:00
2026-03-24 17:08:22 +00:00
2026-04-22 00:45:09 +00:00
2026-03-16 01:12:24 +00:00
2026-04-10 05:21:24 +00:00
2026-03-31 07:42:06 +00:00
2026-03-11 01:36:06 +00:00
2026-04-28 03:22:06 +00:00
2026-03-08 22:11:49 +00:00
2026-04-05 17:49:35 +00:00
2026-03-20 23:51:46 +00:00
2026-05-22 15:12:04 +00:00
2026-03-18 06:58:39 +00:00
2026-03-13 18:21:50 +00:00
2026-03-16 12:11:08 +00:00
2026-04-05 03:26:37 +00:00
2026-04-01 03:30:00 +00:00
2026-04-04 20:38:16 +00:00
2026-06-02 05:14:43 -04:00
2026-06-02 05:14:43 -04:00
2026-05-14 22:57:11 +00:00
2026-05-14 22:57:11 +00:00
2026-03-30 14:33:28 +00:00
2026-03-13 14:03:37 +08:00
2026-04-05 07:39:57 +00:00
2026-04-14 14:50:55 +00:00
2026-03-31 11:03:20 +00:00
2026-04-02 16:51:39 +00:00
2026-04-08 11:02:14 +00:00
2026-04-05 05:46:05 +00:00
2026-03-27 23:53:22 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-03-30 11:51:27 +00:00
2026-03-24 13:01:12 +00:00
2026-03-16 01:45:50 +00:00
2026-03-16 01:45:50 +00:00
2026-03-16 01:45:50 +00:00
2026-04-08 11:02:14 +00:00
2026-03-16 01:45:50 +00:00
2026-04-08 11:02:14 +00:00
2026-03-30 09:21:51 +00:00
2026-04-08 11:02:14 +00:00
2026-04-02 19:09:04 +00:00
2026-03-10 17:23:05 +00:00
2026-04-14 14:50:55 +00:00
2026-06-02 16:48:22 -04:00
2026-03-21 03:14:40 +00:00
2026-03-16 01:45:50 +00:00
2026-04-14 14:50:55 +00:00
2026-04-22 03:26:49 +00:00
2026-03-31 01:49:16 +00:00
2026-03-08 23:28:05 +00:00
2026-04-17 08:34:33 +00:00
2026-04-05 20:46:24 +00:00
2026-05-13 23:39:15 +00:00
2026-03-23 23:33:33 +00:00
2026-04-14 14:50:55 +00:00
2026-03-16 01:45:50 +00:00
2026-03-18 06:58:39 +00:00
2026-04-14 14:50:55 +00:00
2026-04-09 06:11:39 +00:00
2026-03-18 08:13:56 +00:00
2026-03-30 23:40:36 +01:00
2026-04-15 06:37:18 +00:00
2026-05-29 01:04:59 -04:00
2026-03-08 21:53:21 -04:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-03-30 14:33:28 +00:00
2026-03-16 01:45:50 +00:00
2026-03-16 01:45:50 +00:00
2026-03-08 22:19:40 +00:00
2026-04-14 14:50:55 +00:00
2026-05-05 02:01:49 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-03-16 01:45:50 +00:00
2026-04-14 14:50:55 +00:00
2026-05-31 17:10:35 -04:00
2026-05-30 00:09:20 -04:00
2026-04-01 13:02:24 +00:00
2026-03-24 13:53:41 +00:00
2026-03-27 10:50:15 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-05 07:29:35 +00:00
2026-03-16 01:45:50 +00:00
2026-03-16 01:45:50 +00:00
2026-04-14 14:50:55 +00:00
2026-03-30 13:44:54 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-03-24 13:21:12 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-03-28 00:57:51 +00:00
2026-04-14 14:50:55 +00:00
2026-05-30 00:09:20 -04:00
2026-03-29 18:57:15 +01:00
2026-03-16 01:45:50 +00:00
2026-03-21 04:46:45 +00:00
2026-04-21 16:53:08 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-05-29 16:36:39 -04:00
2026-05-29 05:08:08 -04:00
2026-04-05 18:09:31 +00:00
2026-03-27 05:58:35 +00:00
2026-03-27 05:58:35 +00:00
2026-04-08 11:02:14 +00:00
2026-05-11 04:39:29 +00:00
2026-05-30 08:29:22 -04:00
2026-03-19 09:30:35 +00:00
2026-03-08 02:57:44 +00:00
2026-05-30 04:04:21 -04:00
2026-04-14 19:26:49 +00:00
2026-03-18 17:07:07 +00:00
2026-04-14 14:50:55 +00:00
2026-05-30 02:07:41 -04:00
2026-04-30 10:56:21 +00:00
2026-04-08 11:02:14 +00:00
2026-05-29 15:26:47 -04:00
2026-04-08 11:02:14 +00:00
2026-03-27 05:58:35 +00:00
2026-03-27 05:58:35 +00:00
2026-05-07 23:39:08 +01:00
2026-04-08 11:02:14 +00:00
2026-04-10 05:21:24 +00:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-05-31 15:00:33 -04:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-04-08 11:02:14 +00:00
2026-03-27 05:58:35 +00:00
2026-04-22 00:45:09 +00:00
2026-03-27 05:58:35 +00:00
2026-04-10 05:21:24 +00:00
2026-03-31 07:42:06 +00:00
2026-05-29 05:08:08 -04:00
2026-03-11 01:36:06 +00:00
2026-03-08 22:11:49 +00:00
2026-04-05 17:49:35 +00:00
2026-03-20 23:51:46 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-05-31 23:00:02 -04:00
2026-05-22 15:12:04 +00:00
2026-05-08 11:15:36 +00:00
2026-04-30 20:52:27 +00:00
2026-03-11 00:40:07 +00:00
2026-03-16 12:11:08 +00:00
2026-04-14 14:50:55 +00:00
2026-04-05 03:26:37 +00:00
2026-04-14 14:50:55 +00:00
2026-04-14 14:50:55 +00:00
2026-04-04 20:38:16 +00:00
2026-04-01 03:30:00 +00:00
2026-06-02 05:14:43 -04:00
2026-04-08 11:02:14 +00:00
2026-04-01 03:30:00 +00:00
2026-04-02 17:07:26 +00:00
2026-03-30 13:18:07 +01:00
2026-03-27 14:50:11 +00:00
2026-03-26 21:42:37 +00:00
2026-04-02 16:51:46 +00:00
2026-03-26 22:33:19 +00:00