From 1c8586e0ba04cd973f5f162ac3f2e029f29cf43b Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Wed, 28 Oct 2026 08:37:15 -0500 Subject: [PATCH 1/3] docs: GENERATED_EXTRA_COLUMNS, generated spec naming, backlog item - dr_egeria_manual, CLAUDE.md, AGENTS.md: generated report spec columns come from the Create command's attributes; display-only server-returned columns (the ISC mermaid graphs, #503) go in GENERATED_EXTRA_COLUMNS in gen_report_specs.py, not the compact spec. The manual also notes the -DrE-Basic/-DrE-Advanced suffix is required. - BACKLOG: a bare "...-DrE" report spec name silently falls back to the default report. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015pdMuTg6FmqPWeapeXM54g Signed-off-by: Dan Wolfson --- AGENTS.md | 2 +- BACKLOG.md | 15 +++++++++++++++ CLAUDE.md | 2 +- docs/dr_egeria_manual.md | 2 ++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index e48451ed..e53558d5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -64,7 +64,7 @@ - Prefer snake_case for new report `Column.key` values even though camelCase is supported. - For nested Egeria responses with repeated names, use namespaced extractor keys (for example `template_display_name`, `target_display_name`). - Report specs (FormatSets) are now Pydantic models (`FormatSet`/`Format`/`Column` from `pyegeria/view/_output_format_models.py`); define new specs using these models, not raw dicts. -- Generated report specs follow the `{Type}-DrE-{Basic|Advanced}` naming pattern and carry an optional `family` string (e.g., `"Data Designer"`, `"Governance Officer"`) used for discovery via `report_spec_list(show_family=True)` and `report_specs.filter_by_family(...)`. +- Generated report specs follow the `{Type}-DrE-{Basic|Advanced}` naming pattern and carry an optional `family` string (e.g., `"Data Designer"`, `"Governance Officer"`) used for discovery via `report_spec_list(show_family=True)` and `report_specs.filter_by_family(...)`. Display-only server-returned columns (e.g. the ISC mermaid graphs) come from `GENERATED_EXTRA_COLUMNS` in `commands/tech/gen_report_specs.py`, not from the compact spec. - Mermaid output is normalized by default (`PYEGERIA_NORMALIZE_MERMAID=true`); set to `false` to preserve native Egeria graph syntax for modern renderers. - Compact command specs in `md_processing/data/compact_commands/` use `attribute_definitions` + `bundles` (single-inheritance via `"inherits"`) + `commands`; drop a new `*.json` file there to add a family โ€” picked up automatically at startup without code changes (see `compact_loader.py` + `parse_compact_export.py`). Control loading via `USE_COMPACT_RESOURCES`/`COMPACT_FAMILIES` in `md_processing_constants.py`. - Use `attr_labels` in compact spec attribute definitions to declare user-facing label synonyms that map to the canonical attribute name. diff --git a/BACKLOG.md b/BACKLOG.md index 69aaaef6..2ba62c99 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -5,6 +5,21 @@ Status: `open` ยท `in-progress` ยท `done` ยท `deferred` --- +## ๐ŸŸข Low Priority โ€” Bare `...-DrE` report spec name falls back to the default report + +**Status:** open +**Added:** 2026-10-28 + +Generated report specs are always named `-DrE-Basic` or `-DrE-Advanced`. A caller that passes the bare name, for example `find_information_supply_chains(..., output_format="REPORT", report_spec="Information-Supply-Chain-DrE")`, gets no error. The lookup misses, and output falls back to "Reporting on Default Base Attributes - Perhaps couldn't find a valid combination of report_spec and output_format?" with an "Any Metadata Element" report. Reported by the egeria-workspaces session while checking 6.2.14. The full `-DrE-Basic` name works from `SolutionArchitect` directly. + +Options: +- make `_select_from_registry` (behind `select_report_spec`/`select_report_format` in `pyegeria/view/base_report_formats.py`) resolve a bare `...-DrE` name to `-DrE-Basic`, or to the level given by `EGERIA_USAGE_LEVEL`; +- or make the fallback message name the closest matching specs, so the missing suffix is obvious. + +Add a micro-test either way. + +--- + ## ๐ŸŸก Medium Priority โ€” Wrap Mandy's new engine-host View Server endpoints **Status:** open, waiting on Egeria (expected "in a few days" from 2026-10-14) diff --git a/CLAUDE.md b/CLAUDE.md index 84c1050d..b85a090c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -274,7 +274,7 @@ Changes to `pyegeria/` (SDK API, config, report formatting) can break both. - `format_set_executor.py`: `exec_report_spec()` โ€” runs either path; `SERIES`/`BAR`/`PIE` output formats wrap an analytic function's result as a Vega-Lite chart (dispatched before normal Format-row lookup, so no `FormatSet` needs to declare those as a `Format` row). - `analytic_registry.py` / `analytic_demo_specs.py`: the catalog of analytic functions (`AnalyticFunctionSpec.generic` marks whether what it counts is a parameter or hardcoded) and one real, executable demo `FormatSet` per registered function. - `_output_dashboard_sheet_models.py`: `DashboardSheet`/`Placement` โ€” a local (not yet Egeria-native) model for user-authored dashboards, built via Dr.Egeria's `Create Dashboard Sheet`/`Link Report to Dashboard Sheet`/`Add Text on Dashboard Sheet` (`md_processing/v2/dashboard_sheet.py`). -- Generated report specs follow `{Type}-DrE-{Basic|Advanced}` naming; carry an optional `family` string for discovery. +- Generated report specs follow `{Type}-DrE-{Basic|Advanced}` naming; carry an optional `family` string for discovery. Columns are the Create command's (input) attributes; display-only server-returned columns (e.g. the ISC mermaid graphs) go in `GENERATED_EXTRA_COLUMNS` in `commands/tech/gen_report_specs.py`, never in the compact spec. --- diff --git a/docs/dr_egeria_manual.md b/docs/dr_egeria_manual.md index 10fe5cd3..13ef10b3 100644 --- a/docs/dr_egeria_manual.md +++ b/docs/dr_egeria_manual.md @@ -737,6 +737,8 @@ Converts command definitions into "FormatSets" used by the Egeria reporting engi - The tool scans the specified directory for compact command JSON files. - The `--merge` flag updates the built-in report specs in `pyegeria/view/base_report_formats.py`. - Use `--emit code` to generate a standalone Python module. + - Each Create command produces `-DrE-Basic` and `-DrE-Advanced` specs, for example `Information-Supply-Chain-DrE-Basic`. Always use the full name with the usage-level suffix; the bare `...-DrE` name doesn't resolve. + - Columns come from the command's attributes, which are inputs. To show values the server returns but nobody authors, such as mermaid graphs, add them to `GENERATED_EXTRA_COLUMNS` in `commands/tech/gen_report_specs.py`, keyed by command display name. They are appended to the spec's ALL format and offered as a MERMAID format, and `refresh_specs` keeps them. `Information Supply Chain` uses this for the five Egeria 6.3 ISC graphs. Don't add them as compact-spec attributes: that turns them into authorable template fields. ### Spec Validation (`validate_compact_specs`) From 333d150d02d9790d7836621a6434748a6d78f36b Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Wed, 28 Oct 2026 08:39:22 -0500 Subject: [PATCH 2/3] docs(backlog): ISC graph headings render as "Isc ..." in REPORT output camel_to_title_case only keeps words listed in REPORT_ACRONYMS upper-case, and "ISC" isn't one of them. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015pdMuTg6FmqPWeapeXM54g Signed-off-by: Dan Wolfson --- BACKLOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/BACKLOG.md b/BACKLOG.md index 2ba62c99..48d90f5a 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -20,6 +20,19 @@ Add a micro-test either way. --- +## ๐ŸŸข Low Priority โ€” ISC graph headings render as "Isc โ€ฆ" in REPORT output + +**Status:** open +**Added:** 2026-10-28 + +Cosmetic. In REPORT output (e.g. `report_spec="Common-Mermaid"` on `find_information_supply_chains`), the section headings for the ISC graphs added in #503 read "### Isc Implementation Graph", "### Isc Data Mesh Graph", and so on, instead of matching the Column names ("ISC โ€ฆ"). The graphs themselves render correctly. Reported by the egeria-workspaces session on 6.2.14. + +Cause: `make_md_attribute` in `pyegeria/view/output_formatter.py` builds the heading with `camel_to_title_case(name)` (`pyegeria/core/utils.py`). That keeps a word upper-case only if it is in `REPORT_ACRONYMS` (`pyegeria/core/_globals.py`: GUID, ID, QN, API, UI), and "ISC" isn't listed. `camel_to_title_case("ISC Data Mesh Graph")` returns `'Isc Data Mesh Graph'`. + +Likely fix: add `"ISC"` to `REPORT_ACRONYMS`, and check that nothing relies on the title-cased form. `_is_mermaid_attribute`'s name-based fallback compares a title-cased name against `MERMAID_GRAPH_TITLES`, which already spell it "ISC โ€ฆ", so the fix also makes that fallback match. Add a micro-test. + +--- + ## ๐ŸŸก Medium Priority โ€” Wrap Mandy's new engine-host View Server endpoints **Status:** open, waiting on Egeria (expected "in a few days" from 2026-10-14) From 5ba8b79426d223b7068fc8ffd35a30186d2c78ae Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Wed, 28 Oct 2026 08:46:03 -0500 Subject: [PATCH 3/3] fix(view): keep "ISC" upper-case in report headings REPORT section headings for the ISC graphs (#503) read "Isc Data Mesh Graph": camel_to_title_case only keeps words listed in REPORT_ACRONYMS upper-case. Add "ISC". This also lets _is_mermaid_attribute's name-based fallback match the "ISC ..." entries in MERMAID_GRAPH_TITLES. Replaces the backlog entry added in the previous commit. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015pdMuTg6FmqPWeapeXM54g Signed-off-by: Dan Wolfson --- BACKLOG.md | 13 ------------- pyegeria/core/_globals.py | 2 +- tests/micro-tests/test_output_formatter_mermaid.py | 12 ++++++++++++ 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/BACKLOG.md b/BACKLOG.md index 48d90f5a..2ba62c99 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -20,19 +20,6 @@ Add a micro-test either way. --- -## ๐ŸŸข Low Priority โ€” ISC graph headings render as "Isc โ€ฆ" in REPORT output - -**Status:** open -**Added:** 2026-10-28 - -Cosmetic. In REPORT output (e.g. `report_spec="Common-Mermaid"` on `find_information_supply_chains`), the section headings for the ISC graphs added in #503 read "### Isc Implementation Graph", "### Isc Data Mesh Graph", and so on, instead of matching the Column names ("ISC โ€ฆ"). The graphs themselves render correctly. Reported by the egeria-workspaces session on 6.2.14. - -Cause: `make_md_attribute` in `pyegeria/view/output_formatter.py` builds the heading with `camel_to_title_case(name)` (`pyegeria/core/utils.py`). That keeps a word upper-case only if it is in `REPORT_ACRONYMS` (`pyegeria/core/_globals.py`: GUID, ID, QN, API, UI), and "ISC" isn't listed. `camel_to_title_case("ISC Data Mesh Graph")` returns `'Isc Data Mesh Graph'`. - -Likely fix: add `"ISC"` to `REPORT_ACRONYMS`, and check that nothing relies on the title-cased form. `_is_mermaid_attribute`'s name-based fallback compares a title-cased name against `MERMAID_GRAPH_TITLES`, which already spell it "ISC โ€ฆ", so the fix also makes that fallback match. Add a micro-test. - ---- - ## ๐ŸŸก Medium Priority โ€” Wrap Mandy's new engine-host View Server endpoints **Status:** open, waiting on Egeria (expected "in a few days" from 2026-10-14) diff --git a/pyegeria/core/_globals.py b/pyegeria/core/_globals.py index c719dde6..74639d68 100644 --- a/pyegeria/core/_globals.py +++ b/pyegeria/core/_globals.py @@ -139,4 +139,4 @@ def resolve_enum(enum_class: type[Enum], value: str | int) -> int | None: "Specification Mermaid Graph", "Solution Blueprint Mermaid Graph","Mermaid Graph", "Solution Subcomponent Mermaid Graph","Governance Action Process Mermaid Graph" ] TERM_STATUS = ["DRAFT", "PREPARED","PROPOSED","APPROVED", "REJECTED", "ACTIVE", "DEPRECATED", "DELETED", "OTHER"] -REPORT_ACRONYMS = ["GUID", "ID", "QN", "API", "UI"] +REPORT_ACRONYMS = ["GUID", "ID", "QN", "API", "UI", "ISC"] diff --git a/tests/micro-tests/test_output_formatter_mermaid.py b/tests/micro-tests/test_output_formatter_mermaid.py index fd468477..6c200ea4 100644 --- a/tests/micro-tests/test_output_formatter_mermaid.py +++ b/tests/micro-tests/test_output_formatter_mermaid.py @@ -179,3 +179,15 @@ def test_mermaid_graph_titles_stay_aligned_with_keys(): assert len(MERMAID_GRAPHS) == len(MERMAID_GRAPH_TITLES) assert MERMAID_GRAPH_TITLES[MERMAID_GRAPHS.index("iscDataFabricMermaidGraph")] == "ISC Data Fabric Graph" + + +def test_isc_graph_heading_keeps_acronym(): + from pyegeria.core.utils import camel_to_title_case + + assert camel_to_title_case("ISC Data Mesh Graph") == "ISC Data Mesh Graph" + assert camel_to_title_case("iscDataMeshMermaidGraph") == "ISC Data Mesh Mermaid Graph" + + heading = of.make_md_attribute("ISC Data Mesh Graph", "flowchart LR\\n P-->Q", "REPORT", + attribute_key="iscDataMeshMermaidGraph") + assert heading.startswith("### ISC Data Mesh Graph") + assert "```mermaid" in heading