prol-dashboards
What it is for
Use it to give stakeholders a Prolaborate dashboard over the repository. You end with widgets each backed by a verified query, and a layout plan for you to arrange the tiles.
prol-dashboards builds, reads and changes Prolaborate dashboards through the web interface. A Prolaborate dashboard is a four-column grid of widgets over an EA repository. Each widget is a tile that holds one or more content blocks. The skill chooses the right widget for a question, writes the query each widget type requires, verifies the query before saving, and hands you a layout plan.
It does not author model content. A chart counts elements that already exist. Creating or changing those elements is EA work (see ea-start-here).
Capabilities it uses
| Capability | Used for | Without it |
|---|---|---|
| MCP server | Not needed. No server operation is called | Not needed |
| Computer use | Not needed. It can see a browser but cannot click in one | Not needed |
| Local code execution | Not needed. The skill's scripts run inside the page, through browser control | Not needed |
| Browser control | Everything: the dashboard editor, the chart wizard and its query console, saving, and re-opening a widget to confirm what persisted | Not available. The skill has no other way to work |
When to use it, and when not
Use it when the task names a Prolaborate dashboard, widget, chart, card or report tile, or asks what a dashboard shows. Run prol-start-here first in the session.
| The task | Use |
|---|---|
| Build, read or change a Prolaborate dashboard | This skill |
| Read, filter or export a relationship matrix | prol-matrix |
| Trace what depends on an element | prol-impact-analysis |
| Create or change the elements a chart counts | ea-modeling |
| A report or Power BI model from the repository | ea-reporting-database |
How it works
- Probe the data first. (AI Power Tools, AI interprets) The AI runs one census query, then targeted probes, in the chart wizard's query console. The result rules chart types in and out before any is built.
- Choose the widget. AI Guided by a fixed question-to-widget table. A "how many by" question gets a bar or column chart, a proportion gets a pie or donut (seven values or fewer), a hierarchy gets a landscape, one number gets a card, and so on. The AI reports what the data cannot support instead of building a chart that hides it.
- Write the query for the widget's contract. (AI, AI Power Tools checks) The AI writes a read-only database query. Prolaborate's own "view sample" prints the contract and a complete example for the chosen chart type, so the AI confirms the contract from Prolaborate, not from memory, and confirms the repository's SQL dialect first.
- Build the widget in the interface. (AI driving the browser) Add the widget, name the tile, configure the chart. For a chart the type is picked before anything else, because changing the type afterward wipes the name and the query.
- Execute and read. AI Power Tools The AI runs the query in the console and reads the row count and the actual values. This is the honest check.
- Work the presentation step. AI Three presentation controls change the data, not the styling (see below).
- Save twice. AI The chart is saved, then the dashboard is saved. They are separate saves.
- Verify from a different surface. AI Power Tools The AI re-opens the widget's configuration, and where useful reads the dashboard definition, to confirm what persisted. A success response is a claim, not evidence.
- Hand back a layout plan. (AI, you) The AI lists each tile with its column, row, width and height, and says plainly that the layout is yours to apply.
Two cautions apply throughout. The small gear inside the widget body is its configuration; the gear in the tile header is cosmetics only. And editing a generated query is a one-way door, so the chart type is settled first.
Widget and chart catalog
The widget catalog has 11 entries. Charts is one of them, and the 13 chart types live inside it. Confusing the two lists is a common error.
| Widget | Configuration | Takes a query | Presentation step |
|---|---|---|---|
| Text | One dialog (rich-text editor) | No | None |
| Rich Text | One dialog with a larger editor and a Security toggle | No | None |
| Images | One dialog | No | None |
| Hyperlinks | One dialog, item picker. One link per block | No | None |
| Diagrams | Picker | No | None |
| Charts | Three-step wizard | Yes | Yes, per chart type |
| Reports | Two-step wizard | Yes | None |
| Cards | Three-step wizard | Yes | Card settings |
| Reviews List | None | No | None |
| Dashboards | Three-step wizard | No | None |
| Integration Reports | One dialog | No | Blocked (see Limitations) |
Only Charts, Reports and Cards take a query. The others are configured, not queried. The Dashboards widget embeds a live nested dashboard: the inner dashboard re-executes all its own widgets, compresses rather than scrolls, and drops the inner tile titles. A dashboard cannot embed itself. Nesting several levels deep is allowed.
The 13 chart types:
| Chart type | Notes |
|---|---|
| Pie | Counts per category |
| Donut | Same as Pie, without hover information |
| Bar | Counts per category |
| Stacked Bar | Same query as Bar; differs in rendering |
| Column | Counts per category |
| Stacked Column | Same query as Stacked Bar |
| Landscape | A nested hierarchy. The original of its family; its levels need renaming |
| Nested Pie | Round like a Pie, but uses the Landscape query shape |
| Heat Map | A treemap, with the same query as Nested Pie |
| Integration Map | Shows model relationships; unrelated to external integrations |
| Bubble | Needs numeric axes |
| Road Map | Needs date-like tagged values |
| Lifecycle Road Map | Needs a Life Cycle Management definition bound to a stereotype |
Which chart for which question:
| The question | Reach for | Never |
|---|---|---|
| How many X by Y | Bar, Column | Nested Pie, Heat Map |
| Which are the biggest | Bar or Column plus a top-N | Nested Pie, Heat Map |
| What proportion | Pie, Donut, seven values or fewer | Nested Pie, Heat Map |
| Broken down by two things | Stacked Bar, Stacked Column | |
| How the hierarchy nests | Landscape | |
| What connects to what | Integration Map | |
| When each thing happens | Road Map (date tagged values required) | |
| One number | Card | |
| The underlying list | Report |
Queries and Prolaborate's contract
Charts, Reports and Cards each take a read-only database query run against the repository's own database. There is no single contract. There are five families, and the family is a property of the chart type, so it cannot be predicted from how a chart looks.
| Family | Chart types | What the query returns |
|---|---|---|
| Axial | Pie, Donut, Bar, Column, Stacked Bar, Stacked Column | One row per element, with a name, a category and a series |
| Level-numbered | Landscape, Nested Pie, Heat Map, Integration Map | One row per element per hierarchy level, with level names and the connections between levels |
| Scatter | Bubble | The axial columns plus numeric X and Y values |
| Timeline | Road Map | One row per element with a start and an end date |
| Single value | Card | One value |
Reports use the axial family without the series. The row hyperlink and element icon need the display column named exactly as Prolaborate expects, plus the element's identifier, type and stereotype.
Rules that decide whether a chart is right:
- The chart aggregates, the query does not. Return one row per element (or per relationship pair). Prolaborate groups by series and counts rows.
- With a group name present, the group name is the axis category and the series is the color. The designer's labels suggest the opposite.
- Casing differs by family for the group-name column.
- A hand-written Road Map must emit dates month first. Prolaborate's own sample says day first and is wrong. With the wrong order, only rows with a day-of-month of 12 or less draw, which looks like sparse data.
- Duplicate group names collapse in a Road Map. One bar survives per distinct value. It is a key, not a lane.
- A Card takes one value, named
cards. For a percentage, set the symbol and suffix in the presentation step; a text result breaks the card. - Bubble axes must be numeric. The designer accepts a text property without complaint and produces hundreds of series and one visible bubble.
- Where the sample's prose disagrees with its generated query, trust the generated query. The prose was wrong in both cases tested.
Getting the contract from Prolaborate. In the chart wizard, select the chart type, skip to the query step, then use "view sample". It prints that type's contract and a complete query in both SQL Server and MySQL forms. No data and no source selection are needed.
Dialect belongs to the repository. One Prolaborate instance can front repositories on different engines (MySQL, MariaDB, SQL Server, PostgreSQL, SQLite). A dialect error is reported as "No results found", which is indistinguishable from an empty result. The AI establishes the dialect first.
One real restriction. A query that does not begin with a plain select is refused. There are no common table expressions, temporary tables or procedures. Recursion is unrolled into one branch per level. Other apparent blocks are dialect mismatches.
Top-N. Bar and Column have no top-N or sort setting, so limiting happens in the query. The skill teaches a ranking function that works on current MySQL, MariaDB, SQL Server and SQLite versions, because the limit keywords share no syntax.
An example in words (Westbrook Bank). A criticality split as a Pie: one row per WBABusinessApplication element, with the criticality tagged value as its series, and the chart counts them. A stacked column of criticality (color) by lifecycle (axis) adds the lifecycle as the group name. A card for total applications is a count of those elements. This is an illustration; substitute your own technology, stereotypes and tags.
Data probes
Every chart type has a precondition that is invisible until you look, and none of them fail loudly. Each produces a chart that renders and is wrong or unreadable. The probes run in the chart wizard's query console and are cancelled without saving.
| Probe | Question |
|---|---|
| The census | How many elements, distinct stereotypes, statuses, phases, connectors and tag names exist? |
| Tagged-value usability | Which tags are numeric, date-like, and how many distinct values do they hold? |
| Hierarchy | Is there a connector stereotype with many children and fewer parents? |
| Cardinality within a scope | How many distinct values inside the chosen package? |
| Connectivity | What share of the scoped elements has any connector? |
Reading rules that matter:
- A column is a usable measure only when it is numeric and varies. In testing, one tag held thousands of numeric values and exactly one distinct value, which makes every bubble the same size.
- Do not filter connectors by type to find a hierarchy. A hierarchy is often an Aggregation, and a type filter hides it. The check is that parent-child connectors equal elements minus roots.
- Do not assume how a connector stereotype is stored. Element stereotypes are stored bare. A technology declaring a connector stereotype does not mean it is stored qualified: on the Westbrook Bank reference model the technology declares
Uses,Flowsandrealizes, and the connectors still store them as bare names, with the binding to the technology recorded separately. Others, such aspart-of, come from no technology at all. The AI reads the resolved value from the console's output instead of guessing either form, because a filter written for one form fails silently on the other. The same check applies when a chart's numbers disagree with the model. - The tagged-value usability probe uses a pattern-matching feature available only on MySQL and MariaDB. It is the least portable query in the skill.
Cardinality thresholds are convention, not measured limits of Prolaborate:
| Distinct values | Reasonable | Unreasonable |
|---|---|---|
| 2 to 7 | Pie, Donut | |
| 2 to 15 | Bar, Column, second dimension of a stack | Pie above about 7 |
| 15 to 40 | Bar or Column with rotated labels, or top-N | Pie, Donut, any stack |
| 40 or more | Top-N only, or a Report | Every chart type |
One threshold is a finding rather than a convention: Nested Pie and Heat Map need a hand-typed label-to-color row for each value, so many values is unreasonable work regardless of readability.
Presentation controls that change the data
Most of the presentation step is cosmetic. Three controls are not, and all three fail silently.
| Control | Where | What goes wrong |
|---|---|---|
| MDG Based Report, on by default | Reports | Overrides the query's columns with columns derived from the technology. Turn it off to show the query's own columns |
| Color Pie or Color Sections, off on a hand-written query | Nested Pie, Heat Map | A correct series is ignored and the chart renders flat |
| Pie List | Nested Pie, Heat Map | Color is a manually typed label-to-color table, one row per value, not derived from the series |
Also: Build Chart by Percentage or Value on Pie and Donut decides whether slices read as shares or counts. Minimum and Maximum Radius on Bubble are diameters. On a Road Map, the display date format controls the axis and is a different setting from the date format that parses the data. Landscape and Nested Pie legends list level labels, which default to Level-0, Level-1, so the AI renames them before they reach the reader. Formatting such as percent signs belongs to the widget and not to the query.
Layout
The canvas is a four-column grid. Every new tile lands 1x1, regardless of widget type. A chart or landscape is unreadable at 1x1, so layout is a required finishing step.
You apply the layout. Resizing and moving a tile needs a drag that emits intermediate mouse movements. With the browser control used in verification, a single click-drag was ignored with no error, so the AI does not retry it or report a layout as applied.
What the AI hands back is a plan in grid units (column, row, width, height). For example, for a Westbrook Bank portfolio dashboard:
| Tile | Column and row | Size |
|---|---|---|
| Application Landscape | c1 r0 | 2 x 3 |
| Portfolio Summary (4 cards) | c3 r0 | 1 x 2 |
| Criticality split (pie) | c0 r3 | 2 x 3 |
| Criticality by lifecycle (stacked column) | c2 r3 | 2 x 3 |
| Top 10 by dependants (column) | c0 r6 | 2 x 3 |
It tells you three things, each of which is easy to miss:
- Drag from the crosshair handle in the tile header, not from the tile body.
- Resizing pushes other tiles, and the push cascades. Nothing is overwritten, but one resize displaced four tiles across two columns in testing. Work top to bottom so each push disturbs only tiles not yet placed.
- Save the dashboard afterward. Layout persists only through the page-level Save.
Sizing guidance: a tile with several Card blocks needs at least 1x2 or the lower cards clip behind a scrollbar; Reports need two columns or more; Text, Rich Text, Hyperlinks and Images are fine at 1x1. On a narrow screen the four columns collapse to a single stack, so placement order becomes reading order, and the plan places tiles in reading order.
Reading a dashboard without opening it
Opening a dashboard in the interface is the most expensive thing to do. Prolaborate can return a dashboard's whole definition (every widget, block, color and grid position) in one structured read. The definition gives shape, not numbers: content resolves per block at display time. To read a saved chart's query, the AI uses the widget's configuration option to view the query source.
Facts that matter if the AI parses the definition:
- Write is not read. The create call uses a different vocabulary from the read, so a read-modify-write round trip is broken by design. The skill builds through the interface and writes field by field.
- Some read fields mislead. The dashboard settings come back as the literal text "null", and the modified-date field is always zeroed; the real timestamp is in a different field, in US month-first order.
- A block's binding to a saved report lives inside its notes. That field also holds a Text block's HTML. The AI never touches the notes of a block it did not author, because rewriting it destroys a chart block's binding and queries.
- Confirm a widget type's payload before writing it. The AI adds that widget once through the interface and captures what Prolaborate sends.
What you get
- A dashboard with the requested widgets, each verified by row count and values.
- A statement of what persisted, re-read from a different surface.
- A layout plan in grid units, with the statement that you apply the layout.
- A note for each chart the data could not support, and why.
Tools it relies on
- Browser control, to drive the dashboard editor and the chart wizard
- The chart wizard's query console, to run probes and verify each query by row count and values
- "View sample", Prolaborate's own contract and generated query in SQL Server and MySQL forms
- Prolaborate's dashboard read, to inspect a dashboard's structure without opening it
- The preflight in prol-start-here
No server operation is used. The EA tools that create the model content a chart counts are in ea_model.
Sample prompts
-
Reads the dashboard definition and lists tiles, blocks and positions.
-
Writes a one-value query, executes and reads the number, builds the card, saves both the card and the dashboard.
-
Pushes back, because Westbrook has 14 stereotypes (above the readable limit for a Pie), and offers a Bar, a top-N, or a Pie over criticality.
-
Runs the census, builds four cards, a Pie, a Stacked Column with lifecycle on the axis and a top-10 Column, then returns a layout plan.
-
Probes for date-like tagged values. If there are none, it says so and does not build the chart.
-
Returns the target geometry in grid units with the three notes, and says the layout is yours to apply.
The dashboard, application and model names are illustrations. Replace them with your own.
Recommended models
| Model | Fit | Why |
|---|---|---|
| Claude Fable 5.1 | Recommended | Choosing widgets from data readings, writing contract-correct queries across five families, and noticing silent traps (a flat chart, a transposed stack, a dropped date) reward the strongest reasoning |
| Claude Opus 5.5 | Recommended | Handles the multi-widget build and the verify-from-another-surface discipline reliably |
| Claude Sonnet 5.5 | Capable | Good for a single known widget or a read. For a full dashboard, review the queries and the layout plan before accepting |
| Claude Haiku 4.5 | Not recommended for builds | Likely to skip probes and the contract check. Adequate for reading a dashboard definition |
Ratings are guidance based on the kind of reasoning the skill needs, not measured benchmarks.
Checking accuracy and completeness
- Probe before build. The transcript shows the census (or an equivalent probe) before the first widget. Red flag: a chart chosen with no data reading.
- The Execute row count matches the rendered chart. For each chart, compare the row count and a sample of values with the saved tile. A Road Map silently drops rows whose date fails to parse, so count its bars against the rows.
- Independent count. For a card, ask for a separate count of the same elements in EA or through the console and compare. Red flag: a figure that agrees with expectation but came from a join that matches nothing. The skill's worked example reports that a roll-up once returned exactly the expected figure because its join matched nothing, so also run one query that would return zero or an absurd value if the assumption were wrong.
- Persistence. Re-open each widget's configuration after saving and compare with what was entered. Settings have failed to persist silently. Reload the dashboard and confirm both the chart save and the dashboard save landed.
- Contract and dialect. The query's columns match the chart family's contract, and the dialect was established first. Red flag:
No results foundreported as "the data has no matching rows". - Traps avoided. No Nested Pie or Heat Map for a "which is biggest" question; Stacked Column has lifecycle on the axis and criticality as the color; MDG Based Report is off for a hand-written Report; Landscape levels are renamed; no connector-type filter was used to find a hierarchy.
- Honest layout statement. The final message states that tiles are 1x1 until you apply the plan. Red flag: it says the dashboard is finished or the layout is applied.
The skill ships a test suite of 24 cases in three groups: end-to-end builds, selection and contract traps, and honesty and limits.
Limitations
- You apply the layout. Every dashboard needs manual arrangement, because the browser control used in verification could not perform the drag. This is not a limit of Prolaborate.
- One repository, one dialect. Everything was verified against MySQL. "View sample" prints the SQL Server form. The tagged-value usability probe will not run on SQL Server as written.
- Verified as Super Admin. A restricted user may see less.
- Two blocked widgets. Lifecycle Road Map needs a Life Cycle Management definition bound to a stereotype. Integration Reports needs an integration registered by the tenant owner, which requires external-system credentials. The AI reports the block, never enters credentials for an external system, and does not substitute a different widget silently.
- The cardinality thresholds are convention.
- The Rich Text Security toggle is a render-time filter only. Its block-list covers script, frame and inline-handler markup.
- Editing a referenced query inside a block is reported to detach it from the saved report.
See also Limitations and known issues.