diff --git a/.agents/skills/oci-deal-accelerator/SKILL.md b/.agents/skills/oci-deal-accelerator/SKILL.md index 9ba50cb..36acb4a 100644 --- a/.agents/skills/oci-deal-accelerator/SKILL.md +++ b/.agents/skills/oci-deal-accelerator/SKILL.md @@ -141,6 +141,8 @@ Pick a number, or just describe what you need. 3. **Author the spec in `absolute_layout` shape** — this is REQUIRED. Do NOT use the legacy workload-driven shape (`tenancy → regions → compartments → services`); it does not resolve OCI icon stencils, does not run through the spec validator, and produces wireframe-looking output (rectangles with text instead of real OCI icons). Every container, service, label, and connection needs explicit `(x, y, w, h)`. **Where to look up valid `type:` values for services:** the authoritative sources are (1) `TYPE_TO_ICON` in `tools/oci_pptx_diagram_gen.py` (PPTX path) and `ICON_TYPE_ALIASES` in `tools/oci_diagram_gen.py` (drawio path), and (2) the slug keys in `kb/diagram/oci-icons.json` (drawio) and `kb/diagram/oci-pptx-icons-index.json` (PPTX). Do NOT grep `examples/` for `type:` patterns to discover valid slugs — `examples/` are previous user outputs that may use stale or non-canonical slugs. Both renderer files and both index files are exhaustive and current. + + **Newer OCI services without a toolkit icon** (OCI Cache with Redis / Valkey, OCI PostgreSQL, etc. — services GA after the v24.2 toolkit shipped): use the generic icon as the canonical fallback (Oracle's own ref archs do the same — they embed custom inline SVG over the generic icon). The renderer's alias tables already route `type: redis` / `cache` / `valkey` / `postgresql` to the generic `database` stencil. Pair with an explicit `label:` carrying the real service name (e.g. `label: "OCI Cache (Redis)"`). When Oracle ships a v25+ toolkit with these icons, update `kb/diagram/oci-icons.json` + the alias tables and the next render uses the real icon automatically. 4. **Spec validator runs automatically** before either renderer (`tools/diagram_spec_validator.py`). It runs ONLY on `absolute_layout` specs — that's another reason workload-driven is forbidden. Fix any errors before re-rendering. 5. **Render.** `oci_diagram_gen.py` for drawio, `oci_deck_gen.py` for PPTX. 6. **Visually verify.** `tools/oci_pptx_render.py` to rasterize, then read the PNG. diff --git a/SKILL.md b/SKILL.md index a2d9423..ff48726 100644 --- a/SKILL.md +++ b/SKILL.md @@ -139,6 +139,8 @@ Pick a number, or just describe what you need. 3. **Author the spec in `absolute_layout` shape** — this is REQUIRED. Do NOT use the legacy workload-driven shape (`tenancy → regions → compartments → services`); it does not resolve OCI icon stencils, does not run through the spec validator, and produces wireframe-looking output (rectangles with text instead of real OCI icons). Every container, service, label, and connection needs explicit `(x, y, w, h)`. **Where to look up valid `type:` values for services:** the authoritative sources are (1) `TYPE_TO_ICON` in `tools/oci_pptx_diagram_gen.py` (PPTX path) and `ICON_TYPE_ALIASES` in `tools/oci_diagram_gen.py` (drawio path), and (2) the slug keys in `kb/diagram/oci-icons.json` (drawio) and `kb/diagram/oci-pptx-icons-index.json` (PPTX). Do NOT grep `examples/` for `type:` patterns to discover valid slugs — `examples/` are previous user outputs that may use stale or non-canonical slugs. Both renderer files and both index files are exhaustive and current. + + **Newer OCI services without a toolkit icon** (OCI Cache with Redis / Valkey, OCI PostgreSQL, etc. — services GA after the v24.2 toolkit shipped): use the generic icon as the canonical fallback (Oracle's own ref archs do the same — they embed custom inline SVG over the generic icon). The renderer's alias tables already route `type: redis` / `cache` / `valkey` / `postgresql` to the generic `database` stencil. Pair with an explicit `label:` carrying the real service name (e.g. `label: "OCI Cache (Redis)"`). When Oracle ships a v25+ toolkit with these icons, update `kb/diagram/oci-icons.json` + the alias tables and the next render uses the real icon automatically. 4. **Spec validator runs automatically** before either renderer (`tools/diagram_spec_validator.py`). It runs ONLY on `absolute_layout` specs — that's another reason workload-driven is forbidden. Fix any errors before re-rendering. 5. **Render.** `oci_diagram_gen.py` for drawio, `oci_deck_gen.py` for PPTX. 6. **Visually verify.** `tools/oci_pptx_render.py` to rasterize, then read the PNG. diff --git a/tools/oci_diagram_gen.py b/tools/oci_diagram_gen.py index c73c972..835d90a 100644 --- a/tools/oci_diagram_gen.py +++ b/tools/oci_diagram_gen.py @@ -856,6 +856,19 @@ class OCIDiagramGenerator: "terraform": ["resource_manager"], "oac": ["analytics"], "oic": ["integration"], + # Newer OCI services not yet in OCI Toolkit v24.2 — fall back to + # the generic ``database`` stencil. Oracle's own ref archs do + # the same (custom inline SVG over the generic icon) until the + # toolkit ships dedicated stencils. The agent should pair these + # with an explicit ``label:`` (e.g. "OCI Cache (Redis)"). + "redis": ["database"], + "oci_cache": ["database"], + "oci_cache_with_redis": ["database"], + "cache": ["database"], + "valkey": ["database"], + "postgresql": ["database"], + "postgres": ["database"], + "oci_postgresql": ["database"], } @classmethod diff --git a/tools/oci_pptx_diagram_gen.py b/tools/oci_pptx_diagram_gen.py index 011c0e0..fd34dea 100644 --- a/tools/oci_pptx_diagram_gen.py +++ b/tools/oci_pptx_diagram_gen.py @@ -189,6 +189,21 @@ TYPE_TO_ICON = { "tags": ["tag_namespace"], "compartment": ["compartment"], "compartments": ["compartment"], + # Newer OCI services not yet in the OCI Toolkit v24.2 / OCI_Icons.pptx — + # fall back to the generic ``database`` stencil with an explicit + # ``label:`` carrying the real service name. Oracle's own ref archs + # (e.g. modernize-app-dev-oci-postgresql-redis-opensearch) embed + # custom inline SVGs because the toolkit lacks these too — using the + # canonical generic icon is the closest standardized match. + "redis": ["database"], + "oci_cache": ["database"], + "oci_cache_with_redis": ["database"], + "cache": ["database"], + "valkey": ["database"], + "postgresql": ["database"], + "postgres": ["database"], + "oci_postgresql": ["database"], + "opensearch": ["database_opensearch", "database"], } ICON_KEYWORD_HINTS = {