@luquimbo/bi-superpowers 4.1.6 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/.claude-plugin/marketplace.json +8 -6
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.claude-plugin/skill-manifest.json +35 -19
  4. package/.plugin/plugin.json +1 -1
  5. package/AGENTS.md +150 -26
  6. package/CHANGELOG.md +489 -14
  7. package/README.md +103 -114
  8. package/bin/cli.js +7 -1
  9. package/bin/commands/diff.js +2 -2
  10. package/bin/commands/install.js +58 -45
  11. package/bin/commands/lint.js +2 -2
  12. package/bin/commands/validate-projects.js +425 -0
  13. package/bin/lib/generators/claude-plugin.js +31 -7
  14. package/bin/lib/generators/shared.js +11 -7
  15. package/bin/lib/mcp-config.js +22 -2
  16. package/bin/lib/skills.js +8 -8
  17. package/bin/mcp/powerbi-modeling-launcher.js +8 -4
  18. package/bin/postinstall.js +14 -12
  19. package/bin/utils/mcp-detect.js +11 -11
  20. package/commands/bi-connect.md +418 -0
  21. package/commands/bi-dax.md +385 -0
  22. package/commands/{project-kickoff.md → bi-kickoff.md} +78 -47
  23. package/commands/bi-modeling.md +395 -0
  24. package/commands/bi-performance.md +455 -0
  25. package/commands/bi-start.md +39 -27
  26. package/desktop-extension/manifest.json +2 -2
  27. package/package.json +3 -2
  28. package/skills/bi-connect/SKILL.md +420 -0
  29. package/skills/{pbi-connect → bi-connect}/scripts/update-check.js +1 -1
  30. package/skills/bi-dax/SKILL.md +387 -0
  31. package/skills/{report-design → bi-dax}/scripts/update-check.js +1 -1
  32. package/skills/{project-kickoff → bi-kickoff}/SKILL.md +79 -48
  33. package/skills/{project-kickoff → bi-kickoff}/scripts/update-check.js +1 -1
  34. package/skills/bi-modeling/SKILL.md +397 -0
  35. package/skills/bi-modeling/scripts/update-check.js +403 -0
  36. package/skills/bi-performance/SKILL.md +457 -0
  37. package/skills/bi-performance/scripts/install-tabular-editor.ps1 +90 -0
  38. package/skills/bi-performance/scripts/run-bpa.ps1 +161 -0
  39. package/skills/bi-performance/scripts/update-check.js +403 -0
  40. package/skills/bi-start/SKILL.md +40 -28
  41. package/skills/bi-start/scripts/update-check.js +1 -1
  42. package/src/content/base.md +15 -10
  43. package/src/content/routing.md +15 -18
  44. package/src/content/skills/bi-connect.md +391 -0
  45. package/src/content/skills/bi-dax.md +358 -0
  46. package/src/content/skills/{project-kickoff.md → bi-kickoff.md} +75 -44
  47. package/src/content/skills/bi-modeling.md +368 -0
  48. package/src/content/skills/bi-performance/SKILL.md +428 -0
  49. package/src/content/skills/bi-performance/scripts/install-tabular-editor.ps1 +90 -0
  50. package/src/content/skills/bi-performance/scripts/run-bpa.ps1 +161 -0
  51. package/src/content/skills/bi-start.md +39 -27
  52. package/theme/BISuperpowers.json +3888 -0
  53. package/commands/pbi-connect.md +0 -253
  54. package/commands/report-design.md +0 -403
  55. package/skills/pbi-connect/SKILL.md +0 -255
  56. package/skills/report-design/SKILL.md +0 -405
  57. package/skills/report-design/references/cli-commands.md +0 -184
  58. package/skills/report-design/references/cli-setup.md +0 -101
  59. package/skills/report-design/references/close-write-open-pattern.md +0 -80
  60. package/skills/report-design/references/layouts/finance.md +0 -65
  61. package/skills/report-design/references/layouts/generic.md +0 -46
  62. package/skills/report-design/references/layouts/hr.md +0 -48
  63. package/skills/report-design/references/layouts/marketing.md +0 -45
  64. package/skills/report-design/references/layouts/operations.md +0 -44
  65. package/skills/report-design/references/layouts/sales.md +0 -50
  66. package/skills/report-design/references/native-visuals.md +0 -341
  67. package/skills/report-design/references/pbi-desktop-installation.md +0 -87
  68. package/skills/report-design/references/pbir-preview-activation.md +0 -40
  69. package/skills/report-design/references/slicer.md +0 -89
  70. package/skills/report-design/references/textbox.md +0 -101
  71. package/skills/report-design/references/themes/BISuperpowers.json +0 -915
  72. package/skills/report-design/references/troubleshooting.md +0 -135
  73. package/skills/report-design/references/visual-types.md +0 -78
  74. package/skills/report-design/scripts/apply-theme.js +0 -243
  75. package/skills/report-design/scripts/create-visual.js +0 -942
  76. package/skills/report-design/scripts/ensure-pbi-cli.sh +0 -41
  77. package/skills/report-design/scripts/validate-pbir.js +0 -351
  78. package/src/content/skills/pbi-connect.md +0 -226
  79. package/src/content/skills/report-design/SKILL.md +0 -376
  80. package/src/content/skills/report-design/references/cli-commands.md +0 -184
  81. package/src/content/skills/report-design/references/cli-setup.md +0 -101
  82. package/src/content/skills/report-design/references/close-write-open-pattern.md +0 -80
  83. package/src/content/skills/report-design/references/layouts/finance.md +0 -65
  84. package/src/content/skills/report-design/references/layouts/generic.md +0 -46
  85. package/src/content/skills/report-design/references/layouts/hr.md +0 -48
  86. package/src/content/skills/report-design/references/layouts/marketing.md +0 -45
  87. package/src/content/skills/report-design/references/layouts/operations.md +0 -44
  88. package/src/content/skills/report-design/references/layouts/sales.md +0 -50
  89. package/src/content/skills/report-design/references/native-visuals.md +0 -341
  90. package/src/content/skills/report-design/references/pbi-desktop-installation.md +0 -87
  91. package/src/content/skills/report-design/references/pbir-preview-activation.md +0 -40
  92. package/src/content/skills/report-design/references/slicer.md +0 -89
  93. package/src/content/skills/report-design/references/textbox.md +0 -101
  94. package/src/content/skills/report-design/references/themes/BISuperpowers.json +0 -915
  95. package/src/content/skills/report-design/references/troubleshooting.md +0 -135
  96. package/src/content/skills/report-design/references/visual-types.md +0 -78
  97. package/src/content/skills/report-design/scripts/apply-theme.js +0 -243
  98. package/src/content/skills/report-design/scripts/create-visual.js +0 -942
  99. package/src/content/skills/report-design/scripts/ensure-pbi-cli.sh +0 -41
  100. package/src/content/skills/report-design/scripts/validate-pbir.js +0 -351
package/CHANGELOG.md CHANGED
@@ -5,6 +5,481 @@ All notable changes to BI Agent Superpowers will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ### Fixed — 2026-05-08 (release readiness review)
11
+
12
+ - Updated all template-reference guidance to match the current smoke-test
13
+ template: `Métricas` is the dedicated metrics table, measure display folders
14
+ are one-level (`Auxiliar`, fact-table folders, `Ratios`), base currency flows
15
+ through `MonedaBase` + `Modelo Configuración[ValorTexto]`, and exchange rates
16
+ use `Tipo de cambio[TipoCambioBase]`.
17
+ - Tightened the PBIR field-swap exception wording so agents cannot interpret it
18
+ as permission to hand-patch `visual.json`; only the dedicated plugin command
19
+ may update data-binding nodes, with dry-run, backup, and validation.
20
+ - Changed the Tabular Editor helper scripts so BPA runs do not silently install
21
+ TE2. Installation now requires explicit `-Install` / `-InstallTabularEditor`
22
+ after user consent, supports `GITHUB_TOKEN` for GitHub API limits, and fails
23
+ instead of guessing when multiple active Power BI Desktop workspaces are
24
+ reachable.
25
+ - Updated public package metadata and CLI install summaries from the old
26
+ "3 skills" wording to the current 6-skill contract.
27
+
28
+ ### Changed — 2026-05-08 (skill rules: PBIP read-only + template-as-reference)
29
+
30
+ - Cemented two cross-cutting invariants across all 6 skills (`bi-start`,
31
+ `bi-kickoff`, `bi-modeling`, `bi-dax`, `bi-performance`, `bi-connect`):
32
+ - **PBIP files are read-only**, with the single allowed exception being
33
+ the plugin-owned field-swap/rebind command that replaces source
34
+ fields/measures with target fields/measures in *existing template visuals*
35
+ (preserving visual type, layout, formatting, interactions, IDs, theme, and
36
+ bookmarks).
37
+ - **Template is the reference**: skills replicate the BISuperpowers
38
+ smoke-test template's patterns (Auto Date/Time off, marked Date Table,
39
+ `Métricas` measure table, one-level display folders, Sallieri period
40
+ comparison via `Aux Comparaciones`, parameterizable currency via
41
+ `MonedaBase` + `Modelo Configuración` + `Tipo de cambio`, dynamic
42
+ dimensions via `Aux Dimensiones ventas` field parameters,
43
+ calculation-group time intelligence, IBCS-aligned theme) in new projects
44
+ and audit/migrate existing projects toward them.
45
+ - Added "Template Patterns to Replicate" sections to `/bi-modeling` and
46
+ "Template DAX Patterns to Replicate" to `/bi-dax` with concrete pattern
47
+ references and an audit checklist for existing projects.
48
+ - Surfaced both invariants at the top of `AGENTS.md` (Project Overrides).
49
+
50
+ ### Fixed — 2026-05-08 (slash commands for new skills)
51
+
52
+ - `COMMAND_SKILLS` in `bin/lib/generators/claude-plugin.js` was missing
53
+ `bi-modeling`, `bi-dax`, and `bi-performance`, so the build was emitting
54
+ Claude Code slash-command files only for the 3 original skills. Fixed —
55
+ all 6 skills now generate `commands/<name>.md`.
56
+
57
+ ### Fixed — 2026-05-08 (docs accuracy: skill counts and retired references)
58
+
59
+ - README.md, AGENTS.md, GETTING-STARTED.md, ARCHITECTURE.md updated from
60
+ "3 / 4 skills" to **6 skills**. Removed lingering references to the
61
+ retired `leverio-workflow` skill from GETTING-STARTED.md and
62
+ ARCHITECTURE.md (skill list and generated tree).
63
+
64
+ ### Changed — 2026-05-08 (template display folders)
65
+
66
+ - Flattened template measure display folders to one level: `Auxiliar` for helper
67
+ measures, `Ventas` for fact-table measures, and `Ratios` for percentage and
68
+ average calculations. Removed nested display-folder paths from the semantic
69
+ model.
70
+
71
+ ### Changed — 2026-05-08 (template currency symbols)
72
+
73
+ - Changed the template USD display symbol from `$US` to `$` and simplified the
74
+ currency formatting UDFs so monetary formats and compact labels render the
75
+ selected `Monedas[Símbolo]` directly.
76
+
77
+ ### Changed — 2026-05-08 (template sample dataset queries)
78
+
79
+ - Migrated the smoke-test template sample dataset tables (`Ventas`,
80
+ `Clientes`, `Productos`, `Canales`, `Monedas`, and `Tipo de cambio`) from DAX
81
+ calculated tables to Power Query/M partitions so learners see the star-schema
82
+ sample data as loaded query data. Semantic helper tables remain in DAX where
83
+ they model template behavior rather than source data.
84
+
85
+ ### Added — 2026-05-08 (bi-performance skill + Tabular Editor 2 integration)
86
+
87
+ - New `/bi-performance` specialist skill: holistic performance diagnostician
88
+ with the discipline "measure first, optimize second". Routes by symptom
89
+ (slow page, slow measure, slow refresh, large model, capacity pressure)
90
+ through dedicated phases for Performance Analyzer, DAX query timing
91
+ (Storage Engine vs Formula Engine split), VertiPaq audit via `INFO.*` DMVs,
92
+ refresh diagnostics (incremental refresh patterns), and Fabric Capacity
93
+ Metrics. Includes an Anti-patterns table and Healthy Performance Targets
94
+ reference (page load, query duration, refresh, model size, capacity CU).
95
+ - **Tabular Editor 2 integration**: bundled `scripts/install-tabular-editor.ps1`
96
+ detects or installs TE2 (free, MIT) to `%LOCALAPPDATA%\TabularEditor\` with
97
+ detect-then-prompt UX (never silent-install). `scripts/run-bpa.ps1` runs
98
+ Microsoft's Best Practice Analyzer rules against the open Desktop instance,
99
+ auto-detecting the AS port from `msmdsrv.port.txt` and caching the rules
100
+ JSON for 7 days. `/bi-modeling` references this integration as an optional
101
+ deeper audit layer.
102
+ - Updated `/bi-start` menu to show all 5 specialist skills.
103
+
104
+ ### Added — 2026-05-08 (bi-dax skill)
105
+
106
+ - New `/bi-dax` skill: DAX authoring, debugging, and optimization. Covers
107
+ variables, DIVIDE, BLANK propagation, filter context teaching, Storage Engine
108
+ vs. Formula Engine, calculation groups (standard time intelligence items,
109
+ ordinal, double-application guard), advanced patterns (Sallieri period
110
+ comparison, dynamic field parameters, currency conversion, semi-additive
111
+ measures, RANKX), performance anti-patterns, and live model introspection via
112
+ `INFO.*` DMVs. Validates every non-trivial formula with `dax_query_operations`
113
+ before committing. Writes all measures through the Power BI Modeling MCP.
114
+ - Updated `/bi-start` menu to show all 4 specialist skills.
115
+
116
+ ### Added — 2026-05-08 (bi-modeling skill)
117
+
118
+ - New `/bi-modeling` skill: Power BI semantic model design, audit, and DAX
119
+ authoring. Covers star schema design (grain → fact → dimensions → relationships
120
+ → first measure slice), model health audits with CRÍTICO/ADVERTENCIA/INFO
121
+ severity tiers, targeted modeling tasks, DAX pattern reference, and an
122
+ anti-patterns table. Operates exclusively through the Power BI Modeling MCP;
123
+ enforces Auto Date/Time disablement, Date Table marking, and
124
+ `discourageImplicitMeasures` on every model it touches.
125
+ - Updated `/bi-start` menu to show all 3 specialist skills
126
+ (`bi-kickoff`, `bi-modeling`, `bi-connect`).
127
+
128
+ ### Changed — 2026-05-08 (template base currency parameter)
129
+
130
+ - Added a `MonedaBase` Power Query parameter to the smoke-test template and
131
+ made it the single source for both model base currency and default
132
+ visualization currency. Currency conversion now reads exchange rates against
133
+ the configured base currency instead of treating `USD` as an untracked DAX
134
+ convention.
135
+
136
+ ### Changed — 2026-05-08 (template currency conversion)
137
+
138
+ - Aligned the smoke-test template currency model with the Sallieri pattern:
139
+ `Monedas` is now a pure currency selector, `Tipo de cambio` owns date-level
140
+ exchange rates, and the conversion and format UDFs use the Sallieri USD
141
+ short-circuit, blank handling, same-currency short-circuit, `Monetaria` flag,
142
+ and `$US` formatting behavior.
143
+
144
+ ### Changed — 2026-05-08 (Git coaching in BI workflows)
145
+
146
+ - Clarified the agent convention that Power BI users should be coached toward
147
+ developer-grade Git habits: after meaningful saved Desktop changes, agents
148
+ should review diffs, explain the snapshot, recommend a commit, and offer to
149
+ create it automatically when the repo is clean and verified.
150
+
151
+ ### Removed — 2026-05-08 (repo workflow skill)
152
+
153
+ - Removed `leverio-workflow` from the shipped plugin contract. The five-file
154
+ project workflow remains an internal maintainer convention for this repo, but
155
+ the public plugin now ships only the three BI skills: `bi-start`,
156
+ `bi-kickoff`, and `bi-connect`.
157
+
158
+ ### Added — 2026-05-07 (canonical theme source)
159
+
160
+ - Added `theme/BISuperpowers.json` as the canonical source of truth for the
161
+ Power BI JSON theme, separate from the PBIP copy that Desktop can overwrite.
162
+ Theme changes should be edited here and then copied into the PBIP location
163
+ when deploying to Desktop.
164
+ - Included `theme/` in the npm package so the canonical theme source ships with
165
+ the CLI.
166
+ - Corrected semantic colors to Tremor values: `good: #22C55E`, `bad: #EF4444`,
167
+ `neutral: #6B7280`; also updated `kpi.goodColor` and
168
+ `waterfallChart.increaseFill` to match.
169
+ - Corrected `callout` font size from 32 → 20 pt and font face to DIN; `title`
170
+ font face from DIN → Segoe UI Semibold at 10 pt.
171
+ - Corrected `cardVisual.referenceLabelValue.valueFontSize` from 8 → 10 pt.
172
+ - Set `cardVisual.padding` to `6/3/6/3` (was `0/0/0/0`).
173
+
174
+ ### Changed — 2026-05-06 (PBIR field-swap exception)
175
+
176
+ - Refined the PBIP artifact editing rule: the only report-side exception is a
177
+ plugin-owned field-swap/rebind command for existing template visuals. It may
178
+ write PBIR only for data binding nodes (`projections`, `prototypeQuery`, query
179
+ refs, field parameters, and sort/filter field references when required), with
180
+ dry-run, backup, validation, and explicit source-to-target mapping. Bookmarks,
181
+ layout, formatting, interactions, IDs, theme, slicer/card settings, and other
182
+ report artifacts remain protected from ad hoc JSON edits.
183
+
184
+ ### Fixed — 2026-05-06 (bi-kickoff MCP write rule)
185
+
186
+ - Tightened `bi-kickoff` so a missing Modeling MCP means connect first or stop;
187
+ it must not be interpreted as permission to fall back to direct TMDL/PBIP
188
+ file edits.
189
+
190
+ ### Changed — 2026-05-06 (PBIP artifact editing rule)
191
+
192
+ - Codified the post-`bi-report` rule that PBIP files are version-control
193
+ snapshots, not an agent authoring surface. Semantic-model changes must go
194
+ through the Power BI Modeling MCP; report and visual changes are manual Power
195
+ BI Desktop work. Agents must not patch PBIR `.Report/**` JSON, visual
196
+ bindings, slicer/card settings, themes, or report resources directly.
197
+ - Added the only planned exception: a future plugin-owned field-swap/rebind
198
+ action for template adaptation. It must replace fields in existing visuals
199
+ through an explicit mapping and preserve visual type, layout, formatting,
200
+ interactions, IDs, and theme; agents still must not improvise JSON patches.
201
+
202
+ ### Changed — 2026-05-06 (template period comparison queries)
203
+
204
+ - Updated the smoke-test template semantic model with the Sallieri period
205
+ comparison query tables (`Calendar`, `Calendar Type`, `Calendar Periods`,
206
+ `Calendar Comparisons`, `Calendar Axes`, and `Modelo Configuración`) so the
207
+ fixture can exercise the same comparison-period logic as the client model.
208
+
209
+ ### Removed — 2026-05-05 (retired report authoring skill)
210
+
211
+ - Removed the retired PBIR report-authoring skill from package source,
212
+ generated skills, slash commands, manifests, validation cases, and public
213
+ docs. The local user-level copy is intentionally left outside the package so
214
+ this repository no longer installs or ships that workflow.
215
+
216
+ ### Fixed — 2026-05-04 (validate-pbir tabOrder false-positive)
217
+
218
+ - **`validate-pbir.js` `position-number` rule** loosened to match Power BI
219
+ Desktop's actual save behavior: `tabOrder` is now optional. Desktop
220
+ omits `tabOrder` from the `position` block on visuals it considers
221
+ non-interactive (cards, decorative elements). The validator
222
+ previously required it, producing 9 false-positive errors per save
223
+ cycle on the smoke-test template. New behavior: required fields are
224
+ `x, y, z, height, width`; `tabOrder` is required to be a finite
225
+ number ONLY when present. Two new test cases lock in the contract
226
+ (`absent tabOrder is valid`, `present-but-non-finite tabOrder is
227
+ still an error`). Smoke test goes from 10 errors → 0 errors.
228
+
229
+ ### Added — Session G 2026-05-03 (Semantic-model deep audit, "best template in the world")
230
+
231
+ - **`retired-report-skill` MANDATORY RULES 18-20** codifying the three highest-impact
232
+ cleanups every pro template must ship with:
233
+ - **RULE 18 — Disable Auto Date/Time**: model annotation
234
+ `__PBI_TimeIntelligenceEnabled = 0` + cascade-delete every
235
+ `LocalDateTable_*` and `DateTableTemplate_*`. The lab template carried
236
+ 8 phantom tables (~64 junk columns + 7 phantom relationships).
237
+ Verified via `INFO.ANNOTATIONS()` DMV (TMDL export hides the
238
+ annotation but the DMV proves it).
239
+ - **RULE 19 — Mark real calendar as Date Table**: one MCP call
240
+ (`table_operations.MarkAsDateTable` on `Calendario.Fecha`); without
241
+ it, Time Intelligence (`DATEADD`, `SAMEPERIODLASTYEAR`, calculation
242
+ groups using DATEADD) silently returns wrong results.
243
+ - **RULE 20 — Every dimension gets a user hierarchy**: drill-down is
244
+ a free Power BI feature that turns flat field lists into explorable
245
+ models. Created `Jerarquía de fechas / productos / geográfica /
246
+ canales` in the lab template (Año→Trimestre→Año mes→Semana→Fecha,
247
+ Categoría→Subcategoría→Producto, País→Segmento→Cliente, Tipo de
248
+ canal→Canal).
249
+
250
+ ### Changed — Lab smoke test (template.pbip) Session G
251
+
252
+ - **Auto Date/Time disabled** model-wide. 8 phantom tables removed
253
+ (`DateTableTemplate_c35f5a13` + 7 `LocalDateTable_*`), 7 phantom
254
+ relationships gone, ~940 net lines deleted from TMDL on disk.
255
+ - **`Calendario` marked as Date Table** with `Fecha` as the date column.
256
+ - **`Métrica Seleccionada` → `Métrica seleccionada`** (consistency with
257
+ the rest of the model's Sentence-case capitalization).
258
+ - **`Calendario[Año mes]`** now has explicit `sortByColumn: 'Orden año
259
+ mes'` (was relying on lexicographic order — bug-prone).
260
+ - **`Calendario[Semana]`** had a spurious `formatString: 0` left over from
261
+ when it was an Int64 — removed (the column has been a String "S48
262
+ (24/12)" since the user-friendly labels rework).
263
+ - **`Ventas[VentaId]`** flipped from `summarizeBy: count` to
264
+ `summarizeBy: none` (defensive; the table is already hidden but the ID
265
+ shouldn't be summable in any code path).
266
+ - **Audit verdict on legacy `Aux Métricas` columns** (Monetaria,
267
+ Acumulado, Media móvil, Tipo de métrica, Agregación predeterminada,
268
+ Base acumulable, Descripción): kept. They are hidden, don't degrade
269
+ performance (≤6 unique values), document Salieri's design intent, and
270
+ remain available for future calculation groups. `Permite promedio` and
271
+ `Permite acumulado` confirmed in active use by the `Aux Vista del
272
+ valor` calculation group.
273
+
274
+ ### Added — Session F continuation 2026-05-02 PM (Field Parameters + UDF refactor)
275
+
276
+ - **`retired-report-skill` MANDATORY RULES 15-17**: field-parameter binding contract,
277
+ `__HasCalendarAxis` enumeration rule for router measures, and
278
+ dynamic-format-string contract via `formatStringExpression`.
279
+ - **New reference doc** `src/content/skills/retired-report-skill/references/field-parameters.md`:
280
+ TMDL `kind:2` ParameterMetadata + NAMEOF pattern, visual.json
281
+ `fieldParameters[]` projection sibling, end-to-end calculated-table →
282
+ Field-Parameter conversion checklist, and seven failure modes
283
+ catalogued from the lab debugging session.
284
+ - **New reference doc** `src/content/skills/retired-report-skill/references/dynamic-axis-measures.md`:
285
+ `__HasCalendarAxis` ISINSCOPE pattern, `FormatStringExpression` via
286
+ selector-table format column, period-aware `CalendarContext()` usage,
287
+ and end-to-end checklist for shipping a router measure.
288
+ - **New helper script**
289
+ `src/content/skills/retired-report-skill/scripts/save-powerbi-window.ps1`:
290
+ programmatic `Ctrl+S` send to the active PBI Desktop window. Mirrors
291
+ Codex's flow via Win32 SetForegroundWindow + wscript.shell SendKeys
292
+ "^s". Use BEFORE any `taskkill` when there are uncommitted MCP model
293
+ edits — otherwise they are silently lost.
294
+ - **`bi-connect` MANDATORY RULE 8**: "MCP MODEL EDITS ARE IN-MEMORY ONLY
295
+ — SAVE BEFORE CLOSE." Codifies the Codex pattern: either ask the
296
+ user for `Ctrl+S` confirmation or drive save via the new helper.
297
+ `taskkill /F /IM PBIDesktop.exe` without a prior save discards every
298
+ MCP edit silently.
299
+ - **`retired-report-skill` MANDATORY RULE 3 (extended)**: companion save-before-close
300
+ rule for mixed cycles. Order of operations: (1) MCP edits, (2) save,
301
+ (3) taskkill, (4) edit visual.json, (5) relaunch.
302
+
303
+ ### Changed — lab smoke test (template.pbip)
304
+
305
+ - **`Aux Ejes temporales` is now a real Field Parameter** (`kind: 2`
306
+ ParameterMetadata + NAMEOF references to `Calendario[Fecha / Semana /
307
+ Mes / Trimestre / Año]`). Slicer-driven dynamic axis works on the
308
+ Evolución page line chart and pivot table. Same pattern as Salieri's
309
+ `Calendar Axes`.
310
+ - **`Calendario` columns now display user-friendly labels in their
311
+ ORIGINAL columns** (no `Etiqueta` suffix per Lucas's preference):
312
+ `Fecha` formatString "ddd d/M" → "mar 5/12"; `Mes` value "Ene '26"
313
+ sorted by `Orden año mes`; `Trimestre` value "Q1 '26" sorted by new
314
+ `Trimestre Orden` column; `Semana` value "S48 (24/12)" with the
315
+ Monday-of-week date, sorted by new `Semana Orden` column.
316
+ - **Two new UDFs** in template's model:
317
+ - `FormatoMetricaSeleccionada()` — returns the format string
318
+ configured for the selected metric (`SELECTEDVALUE('Aux Métricas'[Formato], "#,0")`).
319
+ Used as `formatStringExpression` on `Actual`, `Anterior`, `Variación`.
320
+ - `EjeCalendarioEnContexto()` — TRUE if any `Calendario` column is in
321
+ scope (Fecha / Año / Trimestre / Mes / Año mes / Semana). Centralized
322
+ so adding a new calendar column is one edit, not N.
323
+ - **Router measures `Actual` / `Anterior` refactored** to call the two
324
+ new UDFs instead of inlining the ISINSCOPE chain and the
325
+ `SELECTEDVALUE([Formato])`. Less code duplication; one point of
326
+ change for future granularities.
327
+
328
+ ### Changed
329
+
330
+ - **Lab smoke test — auxiliary tables renamed for clarity** (Session F continuation,
331
+ 2026-05-02). Eight model tables renamed via the `powerbi-modeling-mcp` `Rename`
332
+ operation (auto-updates DAX expressions and relationships) plus a JSON-aware
333
+ bulk replace across all PBIR `definition/**.json` files (224 `Entity` refs +
334
+ 236 qualified `queryRef`/`metadata` refs). Renames:
335
+ - `Comparaciones` → `Aux Comparaciones`
336
+ - `Períodos` → `Aux Períodos`
337
+ - `Vista de calendario` → `Aux Vista de calendario`
338
+ - `Ejes temporales` → `Aux Ejes temporales`
339
+ - `Vista del valor` → `Aux Vista del valor`
340
+ - `Vista temporal` → `Aux Vista temporal`
341
+ - `Métricas` → `Aux Métricas` (heart of the model — 26 measures, central selector)
342
+ - `TipoCambio` → `Tipo de cambio` (cosmetic; spaces are friendlier)
343
+
344
+ Convention: every disconnected/auxiliary selector or catalog table now
345
+ carries an `Aux ` prefix so they group together in the PBI Desktop Fields
346
+ pane and are visually distinct from real fact/dim tables (`Ventas`,
347
+ `Productos`, `Clientes`, `Canales`, `Fecha`, `Monedas`). DAX measures still
348
+ live inside `Aux Métricas` — the rename does not separate them.
349
+
350
+ Verified end-to-end: model DAX (`CALCULATE([Actual], 'Aux Comparaciones'[Comparación EN] = …)`)
351
+ returns expected values; visual rendering confirmed via
352
+ `capture-powerbi-window.ps1` after reopen.
353
+
354
+ ### Added
355
+
356
+ - **`retired-report-skill` repair tooling**: new `scripts/repair-pbir-layout.js` script.
357
+ Page-scoped, dry-run by default, classifies slicers (normal / off-canvas /
358
+ parked at `9000,9000`) and repairs only clearly broken slicers into a
359
+ deterministic top filter bar. Preserves bindings, objects, selection mode,
360
+ z-order, and tabOrder. 600+ lines of tests covering classification,
361
+ dry-run vs write modes, and cross-page issue isolation.
362
+ - **`validate-pbir.js` page-scoped + Git-aware modes**: `--page <name|displayName>`
363
+ filters to a single page; `--changed-only` validates only visual files
364
+ changed against `HEAD` in a Git worktree. New JSON output shape with
365
+ `summary.errors`, `summary.warnings`, and `issues[]`. Existing full-report
366
+ behavior unchanged when both flags are absent.
367
+ - **PBIP-native template lab** (smoke test): rewrote `BISuperpowers.json`
368
+ theme (+3500 lines of authentic tokens), added
369
+ `references/reference-report-benchmark.md`, expanded
370
+ `references/layouts/sales.md`, and added
371
+ `scripts/capture-powerbi-window.ps1` for benchmark screenshots.
372
+ - **Per-tool approval gates for Codex**: `~/.codex/config.toml` writer now
373
+ emits `[mcp_servers.powerbi-modeling-mcp.tools.<op>] approval_mode = "approve"`
374
+ for every write operation in `CODEX_POWERBI_WRITE_TOOLS`. Re-install dedup
375
+ pattern updated to also strip child sections.
376
+
377
+ ### Changed
378
+
379
+ - **Power BI Modeling MCP launcher** now spawns the official Microsoft
380
+ executable with `--readwrite --skip-confirmation` (previously `--start`).
381
+ The Codex-side per-tool approval is now the only gate that prompts the
382
+ user, so the MCP-level confirmation can be skipped safely.
383
+ - **Smoke test fixture renamed**: `examples/smoke-test/pbip-files/super-test.pbip`
384
+ is now `template.pbip`; `validation/projects/super-test.json` is now
385
+ `validation/projects/template.json`. CLI examples and docs updated to match.
386
+ - **Documentation realignment**: `AGENTS.md`, `CLAUDE.md`, `README.md`, and
387
+ `ROADMAP.md` now position **Codex as the primary end-to-end validation
388
+ baseline**. Other agents (Claude Code, GitHub Copilot, Gemini CLI, Kilo Code,
389
+ Claude Desktop) are documented as compatibility targets.
390
+ - **Single-session dev workflow** is now the default convention. The
391
+ `obra/superpowers` worktrees convention is preserved in `ROADMAP.md` for
392
+ emergency-only use.
393
+ - **Documentation maintenance contract** (this commit forward): every commit
394
+ must review and update `CHANGELOG.md` (Unreleased), `ROADMAP.md` (session
395
+ log + DONE items), `AGENTS.md`, `CLAUDE.md`, and `README.md` where
396
+ relevant. See "Documentation Maintenance" in `AGENTS.md`.
397
+ - **Atomic commits strategy + push policy** (this commit forward): the agent
398
+ commits autonomously when a coherent unit lands clean (tests/lint/format
399
+ green, docs contract honored). The agent NEVER pushes without explicit
400
+ user authorization — commits accumulate locally and the agent asks
401
+ _"Hay N commits listos para pushear, ¿pusheo?"_. Full strategy +
402
+ anti-triggers documented in `AGENTS.md` → "Atomic Commits Strategy".
403
+
404
+ #### retired-report-skill skill — Refe pages debugging + new MANDATORY RULES (Session F)
405
+
406
+ - **Three new MANDATORY RULES on `retired-report-skill` SKILL.md**:
407
+ - **R12** — check `report.json` settings before first run;
408
+ `hideVisualContainerHeader: true` plus the Salieri-parity baseline.
409
+ - **R13** — filter literals must match the locale of the target column
410
+ (Comparaciones[Comparación] vs Comparaciones[Comparación EN]).
411
+ - **R14** — time axes use Fecha[Fecha] (daily) or Fecha[Año mes]
412
+ (monthly); never Fecha[Semana] (week-of-year integers lose chronology
413
+ and crash across year boundaries).
414
+ - **New reference** `src/content/skills/retired-report-skill/references/generic-template-pages.md`:
415
+ three tested page compositions (Resumen Ejecutivo, Comparativa de
416
+ Períodos, Tendencias de Métricas) with full layout coordinates,
417
+ visual types, container titles, and `--bind` field maps. Plus a
418
+ 7-pitfall "Common gotchas" section captured during Refe-pages debugging.
419
+
420
+ #### Lab smoke test — Refe pages improved + 2 new generic-template pages
421
+
422
+ Worked exclusively in `examples/smoke-test/pbip-files/template.pbip`. Six
423
+ focused commits, all validated visually via `capture-powerbi-window.ps1`
424
+ after each close-write-open cycle.
425
+
426
+ - **`92415ae`** — `report.json` settings aligned to Salieri reference
427
+ (`hideVisualContainerHeader: true` + 2 related), and
428
+ `visualContainerObjects.title` blocks stripped from all 14 cardVisuals
429
+ on the two Refe pages so the new setting takes effect.
430
+ - **`f1d413d`** — Refe KPI card filters repointed from
431
+ `Comparaciones[Comparación]` (Spanish, never matched the English
432
+ literals Codex passed) to `Comparaciones[Comparación EN]`. Two
433
+ "This quarter" cards had a "This month" filter literal — copy-paste
434
+ bug, fixed.
435
+ - **`10c1d89`** — Refe Metrics Trends time axis: line chart Category
436
+ `Fecha[Semana]` → `Fecha[Fecha]`; pivot Columns `Fecha[Semana]` →
437
+ `Fecha[Año mes]`. Replaces illegible 1-52 week-number labels with
438
+ smooth daily trend + chronological month columns.
439
+ - **(new page)** `resumen_ejecutivo` — 13-visual generic Executive
440
+ Summary page authored end-to-end via `create-visual.js`. 5-card KPI
441
+ band + main row + detail row (mix donut + variation by category +
442
+ top clients).
443
+ - **(new page)** `comparativa` — 12-visual generic Period Comparison
444
+ page. multiRowCard period-title labels + 4 variation KPIs +
445
+ lineClusteredColumnComboChart + waterfallChart + pivot matrix +
446
+ variation-by-product bar chart.
447
+ - Pages.json updated to 6 pages: `resumen_ejecutivo` (active),
448
+ `6a4808bb8bb9166f49ff` (Refe Metrics, improved),
449
+ `2be0c041e797b796d115` (Refe Ventas, improved), `comparativa`,
450
+ `sales_trends` (Codex from-scratch, untouched), `ventas` (Codex
451
+ from-scratch, untouched). Codex's pages preserved for the
452
+ Codex-vs-Claude design eval Lucas requested.
453
+ ## [5.0.0] — 2026-04-28
454
+
455
+ ### Breaking
456
+
457
+ - Standardized all public slash commands under the `/bi-*` namespace:
458
+ `/project-kickoff` is now `/bi-kickoff`, `/pbi-connect` is now
459
+ `/bi-connect`, and `/retired-report-skill` is now `/retired-report-skill`.
460
+ - Regenerated the Claude Code plugin commands, user-level skills, skill
461
+ manifests, docs, and validation fixtures for the new command names.
462
+
463
+ ### Added
464
+
465
+ - Added the project validation harness and public `super validate-projects`
466
+ QA command for checking the bundled smoke project plus private client
467
+ descriptors without vendoring client repositories.
468
+ - `bi-connect` now includes a DAX UDF wiki that tells installed agents to use
469
+ Microsoft Learn for current UDF syntax and DAXLIB as an upstream reference for
470
+ reusable function patterns, without vendoring DAXLIB source by default.
471
+
472
+ ### Fixed
473
+
474
+ - `super validate-projects` now fails fast when `validation/projects` is missing,
475
+ so running it from the wrong directory cannot false-green with `0 checked`.
476
+ - Generated command and skill edit comments now point folder-based skills at the
477
+ real source path, for example `src/content/skills/retired-report-skill/SKILL.md`.
478
+ - README update instructions use a neutral project placeholder and the BI Report
479
+ runtime table-of-contents anchor now matches the heading.
480
+ - Historical changelog entries were restored to the command and file names that
481
+ actually shipped in those older releases.
482
+
8
483
  ## [4.1.6] — 2026-04-24
9
484
 
10
485
  ### Fixed
@@ -61,19 +536,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
61
536
  ### Fixed
62
537
 
63
538
  - Claude Desktop `.mcpb` builds now bundle folder-based skills as `skills/<name>/SKILL.md`
64
- and include `report-design` runtime `references/` plus `scripts/` assets, so installed
539
+ and include `retired-report-skill` runtime `references/` plus `scripts/` assets, so installed
65
540
  Desktop prompts no longer point at missing files.
66
541
  - `super scan` now compares source skills against the actual generated Claude Code command
67
542
  output, including frontmatter and update-check preamble, eliminating permanent false drift.
68
- - `report-design` `create-visual.js` now rejects path traversal in `--name` and non-finite
543
+ - `retired-report-skill` `create-visual.js` now rejects path traversal in `--name` and non-finite
69
544
  numeric placement flags before writing `visual.json`.
70
- - `report-design` `validate-pbir.js` now flags non-finite `position` values.
545
+ - `retired-report-skill` `validate-pbir.js` now flags non-finite `position` values.
71
546
  - Claude Desktop setup instructions and postinstall output use the canonical
72
547
  `powerbi-modeling-mcp` server key.
73
548
  - `super sentinel` now watches folder-based skill trees, including `SKILL.md`, `references/`,
74
549
  and runtime scripts, and regenerates through the same versioned generator path as
75
550
  `super recharge`.
76
- - Removed stale conditional-formatting release wording from `report-design` source docs.
551
+ - Removed stale conditional-formatting release wording from `retired-report-skill` source docs.
77
552
 
78
553
  ### Changed
79
554
 
@@ -137,13 +612,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
137
612
  npm package metadata.
138
613
  - **Desktop extension build includes folder-based skills** — the `.mcpb`
139
614
  extension produced by `super build-desktop` was silently dropping
140
- `report-design` (the flagship skill) because the bundler only picked
615
+ `retired-report-skill` (the flagship skill) because the bundler only picked
141
616
  up flat `.md` files. Now uses `loadSkills()` which handles both flat
142
617
  and folder-based layouts. 5 regression tests.
143
618
  - **Skill trigger parser extracts multiple quoted fragments per bullet** —
144
619
  `project-kickoff` went from `triggerCount: 0` to `9` in
145
620
  `.claude-plugin/skill-manifest.json`; `pbi-connect` from `5` to `15`;
146
- `report-design` from `3` to `9`.
621
+ `retired-report-skill` from `3` to `9`.
147
622
  - **`validate-pbir.js` detects duplicate `visual.name` on the same page** —
148
623
  PBI Desktop accepts the file, but filter/bookmark refs collide.
149
624
  - **README rewrite**: dual install paths clearly segmented by audience
@@ -246,9 +721,9 @@ bootstrap a new project.
246
721
 
247
722
  ## [4.0.0] — 2026-04-15
248
723
 
249
- ### Breaking — `/report-design` pivoted to CLI-first architecture
724
+ ### Breaking — `/retired-report-skill` pivoted to CLI-first architecture
250
725
 
251
- The `/report-design` skill has been rewritten to orchestrate the
726
+ The `/retired-report-skill` skill has been rewritten to orchestrate the
252
727
  [`pbi-cli-tool`](https://github.com/MinaSaad1/pbi-cli) CLI (MIT,
253
728
  by MinaSaad1) instead of hand-writing PBIR JSON. This is a **breaking
254
729
  change** because students now need Python 3.10+ and `pbi-cli-tool`
@@ -297,7 +772,7 @@ removing our most fragile maintenance burden.
297
772
  - `project-kickoff.md` PHASE 7 handoff updated to mention CLI prereq
298
773
  - `base.md` and `routing.md` descriptions updated
299
774
  - `troubleshooting.md` rewritten for CLI-specific errors
300
- - `report-design` added to `COMMAND_SKILLS` in the generator (now a
775
+ - `retired-report-skill` added to `COMMAND_SKILLS` in the generator (now a
301
776
  slash command, not just a reference skill)
302
777
 
303
778
  ### Credits
@@ -314,7 +789,7 @@ removing our most fragile maintenance burden.
314
789
 
315
790
  ### Added
316
791
 
317
- - **New skill: `/report-design`.** Authors 3 PBIR report pages directly
792
+ - **New skill: `/retired-report-skill`.** Authors 3 PBIR report pages directly
318
793
  from a ready semantic model. Produces Pro-quality visuals — conditional
319
794
  formatting, KPI cards with trend coloring, matrix with gradients,
320
795
  slicers, sorted bar charts, pixel-perfect 1280×720 grid layout.
@@ -323,11 +798,11 @@ removing our most fragile maintenance burden.
323
798
  - **Folder-based skill support.** The skill loader and plugin generator
324
799
  now accept skills authored as a folder with `SKILL.md` + `references/`
325
800
  + `scripts/` subfolders (Anthropic's skill convention). Used by
326
- `/report-design` — the main SKILL.md is a thin orchestrator and the
801
+ `/retired-report-skill` — the main SKILL.md is a thin orchestrator and the
327
802
  agent loads PBIR templates, layouts, and troubleshooting notes on
328
803
  demand from `references/`. Ships a `validate-pbir.js` helper under
329
804
  `scripts/` that structurally validates a generated `.Report/` folder.
330
- - `/project-kickoff` now ends with a handoff to `/report-design` once
805
+ - `/project-kickoff` now ends with a handoff to `/retired-report-skill` once
331
806
  the model base has 1 fact + 1 dim + 3 measures.
332
807
 
333
808
  ### Changed
@@ -340,7 +815,7 @@ removing our most fragile maintenance burden.
340
815
  PBIR (Power BI Enhanced Report format) is a Microsoft Public Preview
341
816
  feature at the time of this release. Students must activate
342
817
  **File → Options → Preview features → Power BI Project (.pbip) save
343
- format (PBIR)** in Power BI Desktop before `/report-design` can write
818
+ format (PBIR)** in Power BI Desktop before `/retired-report-skill` can write
344
819
  report files. If Microsoft ships a schema update that breaks our
345
820
  templates, run `super upgrade` — we commit to keeping the plugin in
346
821
  sync with PBIR changes while the feature is in preview.
@@ -397,7 +872,7 @@ The plugin has been simplified to its core: **Power BI Desktop local development
397
872
 
398
873
  #### Removed skills (22)
399
874
 
400
- `contributions`, `data-model-design`, `data-modeling`, `data-quality`, `dax`, `dax-doctor`, `dax-udf`, `deployment`, `excel-formulas`, `fabric-scripts`, `fast-standard`, `governance`, `migration-assistant`, `model-documenter`, `power-query`, `query-performance`, `report-design`, `report-layout`, `rls-design`, `semantic-model`, `testing-validation`, `theme-tweaker`.
875
+ `contributions`, `data-model-design`, `data-modeling`, `data-quality`, `dax`, `dax-doctor`, `dax-udf`, `deployment`, `excel-formulas`, `fabric-scripts`, `fast-standard`, `governance`, `migration-assistant`, `model-documenter`, `power-query`, `query-performance`, `retired-report-skill`, `report-layout`, `rls-design`, `semantic-model`, `testing-validation`, `theme-tweaker`.
401
876
 
402
877
  #### Kept skills (2)
403
878