Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
15 changes: 15 additions & 0 deletions BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 `<Display-Name>-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)
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

---

Expand Down
2 changes: 2 additions & 0 deletions docs/dr_egeria_manual.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 `<Display-Name>-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`)

Expand Down
2 changes: 1 addition & 1 deletion pyegeria/core/_globals.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
12 changes: 12 additions & 0 deletions tests/micro-tests/test_output_formatter_mermaid.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Loading