@luquimbo/bi-superpowers 5.0.0 → 5.0.2

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